This commit is contained in:
Valk Richard Li 2020-10-22 08:18:27 -07:00 committed by GitHub
parent 2699a62d6c
commit c4a6d94543
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 0 deletions

View File

@ -86,6 +86,10 @@ var die=func(str)
nasal_call_builtin_die(str);
return nil;
}
var type=func(object)
{
return nasal_call_builtin_type(object);
}
var io=
{

View File

@ -763,4 +763,27 @@ int nasal_runtime::builtin_die(int local_scope_addr)
nasal_vm.gc_get(ret_addr).set_type(vm_nil);
return ret_addr;
}
int nasal_runtime::builtin_type(int local_scope_addr)
{
int value_addr=in_builtin_find("object");
if(value_addr<0)
{
std::cout<<">> [runtime] builtin_type: cannot find \"object\".\n";
++error;
return -1;
}
int type=nasal_vm.gc_get(value_addr).get_type();
int ret_addr=nasal_vm.gc_alloc();
nasal_vm.gc_get(ret_addr).set_type(vm_string);
switch(type)
{
case vm_nil: nasal_vm.gc_get(ret_addr).set_string("nil");break;
case vm_number: nasal_vm.gc_get(ret_addr).set_string("number");break;
case vm_string: nasal_vm.gc_get(ret_addr).set_string("string");break;
case vm_vector: nasal_vm.gc_get(ret_addr).set_string("vector");break;
case vm_hash: nasal_vm.gc_get(ret_addr).set_string("hash");break;
case vm_function: nasal_vm.gc_get(ret_addr).set_string("function");break;
}
return ret_addr;
}
#endif

View File

@ -101,6 +101,7 @@ private:
int builtin_getkeys(int);
int builtin_import(int);
int builtin_die(int);
int builtin_type(int);
void load_builtin_function();
public:
nasal_runtime();
@ -167,6 +168,7 @@ void nasal_runtime::load_builtin_function()
{"nasal_call_builtin_get_keys", nasal_runtime::builtin_getkeys},
{"nasal_call_import", nasal_runtime::builtin_import},
{"nasal_call_builtin_die", nasal_runtime::builtin_die},
{"nasal_call_builtin_type", nasal_runtime::builtin_type},
{"", NULL}
};
for(int i=0;builtin_func_table[i].func_pointer;++i)