Library: Added core library function chr according to FlightGear Nasal

This commit is contained in:
Sidi Liang 2021-02-13 21:40:10 +08:00
parent 441c02d0fb
commit 8faa4ef2db
2 changed files with 21 additions and 0 deletions

View File

@ -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=
{

View File

@ -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