From c4a6d945434296ab80f9eab1b358b945fedf6eac Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 22 Oct 2020 08:18:27 -0700 Subject: [PATCH] update --- version3.0/lib.nas | 4 ++++ version3.0/nasal_builtin.h | 23 +++++++++++++++++++++++ version3.0/nasal_runtime.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/version3.0/lib.nas b/version3.0/lib.nas index c47dcdd..35c7843 100644 --- a/version3.0/lib.nas +++ b/version3.0/lib.nas @@ -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= { diff --git a/version3.0/nasal_builtin.h b/version3.0/nasal_builtin.h index adcb2f4..cd0e35d 100644 --- a/version3.0/nasal_builtin.h +++ b/version3.0/nasal_builtin.h @@ -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 \ No newline at end of file diff --git a/version3.0/nasal_runtime.h b/version3.0/nasal_runtime.h index 588a09b..ff970c4 100644 --- a/version3.0/nasal_runtime.h +++ b/version3.0/nasal_runtime.h @@ -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)