forked from xxq250/Nasal-Interpreter
update
This commit is contained in:
@@ -8,6 +8,12 @@ var print=func(elements...)
|
|||||||
nasal_call_builtin_std_cout(elements);
|
nasal_call_builtin_std_cout(elements);
|
||||||
return nil;
|
return nil;
|
||||||
};
|
};
|
||||||
|
var println=func(elements...)
|
||||||
|
{
|
||||||
|
nasal_call_builtin_std_cout(elements);
|
||||||
|
print('\n');
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
var append=func(vector,elements...)
|
var append=func(vector,elements...)
|
||||||
{
|
{
|
||||||
nasal_call_builtin_push_back(vector,elements);
|
nasal_call_builtin_push_back(vector,elements);
|
||||||
@@ -110,58 +116,22 @@ var io=
|
|||||||
|
|
||||||
var bits=
|
var bits=
|
||||||
{
|
{
|
||||||
bitxor:func(a,b)
|
bitxor: func(a,b){return nasal_call_builtin_xor(a,b); },
|
||||||
{
|
bitand: func(a,b){return nasal_call_builtin_and(a,b); },
|
||||||
return nasal_call_builtin_xor(a,b);
|
bitor: func(a,b){return nasal_call_builtin_or(a,b); },
|
||||||
},
|
bitnand: func(a,b){return nasal_call_builtin_nand(a,b);},
|
||||||
bitand:func(a,b)
|
bitnot: func(a) {return nasal_call_builtin_not(a); }
|
||||||
{
|
|
||||||
return nasal_call_builtin_and(a,b);
|
|
||||||
},
|
|
||||||
bitor:func(a,b)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_or(a,b);
|
|
||||||
},
|
|
||||||
bitnand:func(a,b)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_nand(a,b);
|
|
||||||
},
|
|
||||||
bitnot:func(a)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_not(a);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var math=
|
var math=
|
||||||
{
|
{
|
||||||
e:2.7182818284590452354,
|
e: 2.7182818284590452354,
|
||||||
pi:3.14159265358979323846264338327950288,
|
pi: 3.14159265358979323846264338327950288,
|
||||||
sin:func(x)
|
sin: func(x) {return nasal_call_builtin_sin(x); },
|
||||||
{
|
cos: func(x) {return nasal_call_builtin_cos(x); },
|
||||||
return nasal_call_builtin_sin(x);
|
tan: func(x) {return nasal_call_builtin_tan(x); },
|
||||||
},
|
exp: func(x) {return nasal_call_builtin_exp(x); },
|
||||||
cos:func(x)
|
ln: func(x) {return nasal_call_builtin_cpp_math_ln(x); },
|
||||||
{
|
sqrt: func(x) {return nasal_call_builtin_cpp_math_sqrt(x);},
|
||||||
return nasal_call_builtin_cos(x);
|
atan2: func(x,y){return nasal_call_builtin_cpp_atan2(x,y); }
|
||||||
},
|
|
||||||
tan:func(x)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_tan(x);
|
|
||||||
},
|
|
||||||
exp:func(x)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_exp(x);
|
|
||||||
},
|
|
||||||
ln:func(x)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_cpp_math_ln(x);
|
|
||||||
},
|
|
||||||
sqrt:func(x)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_cpp_math_sqrt(x);
|
|
||||||
},
|
|
||||||
atan2:func(x,y)
|
|
||||||
{
|
|
||||||
return nasal_call_builtin_cpp_atan2(x,y);
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|||||||
+11
-11
@@ -68,7 +68,7 @@ void builtin_error_occurred(std::string func_name,std::string info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// register builtin function's name and it's address here in this table below
|
// register builtin function's name and it's address here in this table below
|
||||||
// this table must and with {"",NULL}
|
// this table must end with {"",NULL}
|
||||||
struct FUNC_TABLE
|
struct FUNC_TABLE
|
||||||
{
|
{
|
||||||
std::string func_name;
|
std::string func_name;
|
||||||
@@ -134,10 +134,8 @@ nasal_val* builtin_print(nasal_val* local_scope_addr,nasal_gc& gc)
|
|||||||
case vm_func: std::cout<<"func(...){...}"; break;
|
case vm_func: std::cout<<"func(...){...}"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cout<<"\n";
|
|
||||||
// generate return value
|
// generate return value
|
||||||
nasal_val* ret_addr=gc.gc_alloc(vm_nil);
|
return gc.gc_alloc(vm_nil);
|
||||||
return ret_addr;
|
|
||||||
}
|
}
|
||||||
nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc)
|
nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
@@ -157,8 +155,7 @@ nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc)
|
|||||||
gc.add_reference(value_address);
|
gc.add_reference(value_address);
|
||||||
ref_vector.add_elem(value_address);
|
ref_vector.add_elem(value_address);
|
||||||
}
|
}
|
||||||
nasal_val* ret_addr=gc.gc_alloc(vm_nil);
|
return gc.gc_alloc(vm_nil);
|
||||||
return ret_addr;
|
|
||||||
}
|
}
|
||||||
nasal_val* builtin_setsize(nasal_val* local_scope_addr,nasal_gc& gc)
|
nasal_val* builtin_setsize(nasal_val* local_scope_addr,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
@@ -335,10 +332,13 @@ nasal_val* builtin_split(nasal_val* local_scope_addr,nasal_gc& gc)
|
|||||||
}
|
}
|
||||||
if(check_delimeter)
|
if(check_delimeter)
|
||||||
{
|
{
|
||||||
nasal_val* str_addr=gc.gc_alloc(vm_str);
|
if(tmp.length())
|
||||||
str_addr->set_string(tmp);
|
{
|
||||||
ref_vec.add_elem(str_addr);
|
nasal_val* str_addr=gc.gc_alloc(vm_str);
|
||||||
tmp="";
|
str_addr->set_string(tmp);
|
||||||
|
ref_vec.add_elem(str_addr);
|
||||||
|
tmp="";
|
||||||
|
}
|
||||||
i+=delimeter_len-1;
|
i+=delimeter_len-1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -763,7 +763,7 @@ nasal_val* builtin_substr(nasal_val* local_scope_addr,nasal_gc& gc)
|
|||||||
std::string str=str_addr->get_string();
|
std::string str=str_addr->get_string();
|
||||||
int begin=(int)begin_addr->get_number();
|
int begin=(int)begin_addr->get_number();
|
||||||
int len=(int)length_addr->get_number();
|
int len=(int)length_addr->get_number();
|
||||||
if(begin+len>=str.length())
|
if(begin+len>str.length())
|
||||||
{
|
{
|
||||||
builtin_error_occurred("susbtr","index out of range");
|
builtin_error_occurred("susbtr","index out of range");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user