diff --git a/lib.nas b/lib.nas index a8d26cb..d01f309 100644 --- a/lib.nas +++ b/lib.nas @@ -116,6 +116,10 @@ var cmp=func(a,b) { return nasal_call_builtin_cmp(a,b); } +var chr=func(code) +{ + return nasal_call_builtin_chr(code); +} var io= { diff --git a/nasal_builtin.h b/nasal_builtin.h index 3106246..90b557a 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -63,6 +63,7 @@ nasal_val* builtin_streq(nasal_val*,nasal_gc&); nasal_val* builtin_left(nasal_val*,nasal_gc&); nasal_val* builtin_right(nasal_val*,nasal_gc&); nasal_val* builtin_cmp(nasal_val*,nasal_gc&); +nasal_val* builtin_chr(nasal_val*,nasal_gc&); void builtin_error_occurred(std::string func_name,std::string info) { @@ -119,6 +120,7 @@ struct FUNC_TABLE {"nasal_call_builtin_left", builtin_left}, {"nasal_call_builtin_right", builtin_right}, {"nasal_call_builtin_cmp", builtin_cmp}, + {"nasal_call_builtin_chr", builtin_chr}, {"", NULL} }; @@ -877,4 +879,19 @@ nasal_val* builtin_cmp(nasal_val* local_scope_addr,nasal_gc& gc) ret_addr->set_number(alen == blen ? 0 : (alen < blen ? -1 : 1)); return ret_addr; } +nasal_val* builtin_chr(nasal_val* local_scope_addr,nasal_gc& gc) +{ + nasal_val* code_addr=in_builtin_find("code"); + if(code_addr->get_type()!=vm_num) + { + builtin_error_occurred("chr","\"code\" must be number"); + return NULL; + } + char chr[2]; + chr[0] = (char)code_addr->get_number(); + chr[1] = '\0'; + nasal_val* ret_addr=gc.gc_alloc(vm_str); + ret_addr->set_string(chr); + return ret_addr; +} #endif \ No newline at end of file