This commit is contained in:
Valk Richard Li 2020-11-19 15:20:43 +08:00
parent d7f1de5d7f
commit 1625f241fa
2 changed files with 26 additions and 3 deletions

View File

@ -1,6 +1,31 @@
#ifndef __NASAL_CODEGEN_H__
#define __NASAL_CODEGEN_H__
enum op_code
{
op_nop,
op_load,
op_pushnum,op_pushone,op_pushzero,
op_pushnil,
op_pushstr,
op_newvec,op_newhash,op_newfunc,
op_vecappend,op_hashappend,
op_unot,op_usub,
op_add,op_sub,op_mul,op_div,op_lnk,
op_eq,op_neq,op_less,op_leq,op_grt,op_geq,
op_jmp,op_jmptrue,op_jmpfalse,
op_gccall,op_gccallvec,op_gccallhash,op_gccallfunc,op_builtincall,op_slice,
op_memcall,op_memcallvec,op_memcallhash,
op_return,
op_end
};
struct opcode
{
unsigned char op;
int index;
};
// unfinished
// now it can output ast but it is not byte code yet
// please wait...

View File

@ -531,7 +531,7 @@ bool nasal_runtime::check_condition(int value_addr)
if(value_addr<0)
return false;
int type=nasal_vm.gc_get(value_addr).get_type();
if(type==vm_vector || type==vm_hash || type==vm_function)
if(type==vm_nil || type==vm_vector || type==vm_hash || type==vm_function)
return false;
else if(type==vm_string)
{
@ -541,8 +541,6 @@ bool nasal_runtime::check_condition(int value_addr)
return false;
return (number!=0);
}
else if(type==vm_nil)
return false;
else if(type==vm_number)
return (nasal_vm.gc_get(value_addr).get_number()!=0);
return false;