diff --git a/nasal_codegen.h b/nasal_codegen.h index dcef60d..9837c5d 100644 --- a/nasal_codegen.h +++ b/nasal_codegen.h @@ -136,6 +136,8 @@ private: std::list > continue_ptr; std::list > break_ptr; int error; + int in_forindex; + int in_foreach; void regist_number(double); void regist_string(std::string); void gen(unsigned char,unsigned int); @@ -185,6 +187,8 @@ public: nasal_codegen::nasal_codegen() { error=0; + in_foreach=0; + in_forindex=0; return; } @@ -548,8 +552,8 @@ void nasal_codegen::loop_gen(nasal_ast& ast) { case ast_while: while_gen(ast); break; case ast_for: for_gen(ast); break; - case ast_forindex: forindex_gen(ast); break; - case ast_foreach: foreach_gen(ast); break; + case ast_forindex: ++in_forindex;forindex_gen(ast);--in_forindex; break; + case ast_foreach: ++in_foreach; foreach_gen(ast); --in_foreach; break; } return; } @@ -844,6 +848,16 @@ void nasal_codegen::block_gen(nasal_ast& ast) void nasal_codegen::return_gen(nasal_ast& ast) { + for(int i=0;i0) + { + if(contains(tmp.val,path[i]~'['~index~']')) + return tmp.val[path[i]~'['~index~']']; + else + return tmp.val[path[i]]; + } + return tmp; + } +}; + +props.Node= +{ + new:func(values=nil) + { + var result={ + parents:[props.Node], + val:{}, + type:'GHOST', + parent:nil + }; + if(typeof(values)=="hash") + result.val=values; + return result; + }, + addChild:func(name) + { + if(!contains(me.val,name)) + { + me.val[name]=props.Node.new(); + me.val[name].parent=me; + return 1; + } + return 0; + }, + addChildren:func(name,cnt=0) + { + for(var i=0;itutorial'); +props.getNode('/test/in',3).setValue('/',2147483648); +props.globals.debug(); \ No newline at end of file