AST* assign(AST* ID, AST* expr) { AST* temp = make_ast(yylineno, E_ASSIGN); strncpy(temp->d.assign.name_, ID->d.variable.name_, MAX_VAR_NAME); temp->d.assign.expr_=expr; return temp; }
static AST* make_binexpr(int lineno, int type, AST* lhs, AST* rhs) { AST* tmp = make_ast(lineno, type); tmp->d.be.lhs_ = lhs; tmp->d.be.rhs_ = rhs; return tmp; }
AST* call(char* name, list* args) { AST* ast = make_ast(yylineno, K_CALL); //printf(name); strncpy(ast->d.call.name_, name, MAX_CALLEE_NAME); ast->d.call.args_ = args; return ast; }
opcode_chain_t opcode_chain_add_langdef(opcode_chain_t oc, wast_t node,long row,long col) { ast_node_t n = make_ast(node); const char* str = tinyap_serialize_to_string(n); opcode_chain_node_t ocn = ochain_new_langdef(str,row,col); delete_node(n); slist_insert_tail(oc, ocn); return oc; }
ast_node_t make_ast(wast_t t) { int i; ast_node_t ret=NULL; if(!t) { return NULL; } if(wa_opd_count(t)==0) { return newAtom(wa_op(t),0); } for(i=wa_opd_count(t)-1;i>=0;i-=1) { ret = newPair( make_ast(wa_opd(t,i)), ret); } ret = newPair( newAtom(wa_op(t), wa_row(t)), ret); return ret; }
AST* num(int val) { AST* ast = make_ast(yylineno, K_NUM); ast->d.val_ = val; return ast; }
AST* variable(char* ID) { AST* temp = make_ast(yylineno, var_Name); strncpy(temp->d.variable.name_, ID, MAX_VAR_NAME); return temp; }