InterCodeNode translate_Args(treenode *Args_n){ if(Args_n == NULL){ //deprintf("Args is NULL\n"); return NULL; } if(Args_n->child_num == 1){ // args -> exp Operand t1 = new_Temp(); InterCodeNode node1 = translate_Exp(Args_n->node[0],t1); insertOperand(t1); return node1; } if(Args_n->child_num == 3){ // args -> exp , args Operand t1 = new_Temp(); InterCodeNode node1 = translate_Exp(Args_n->node[0],t1); insertOperand(t1); InterCodeNode node2 = translate_Args(Args_n->node[2]); return produceNodeByNode(node1,node2); } }
static PTREE insertNode // INSERTION FOR A NODE ( PTREE node ) // - node { switch( node->op ) { case PT_UNARY : if( NULL != sym_op ) { switch( node->cgop ) { case CO_SEGNAME : break; case CO_THROW : case CO_DELETE : case CO_DELETE_G : case CO_DELETE_ARRAY : case CO_DELETE_G_ARRAY : insertOperand( &node->u.subtree[0] ); break; case CO_SIZEOF_TYPE : case CO_OFFSETOF : case CO_TYPEID_TYPE : node = insert( node, name_op ); break; default : insertOperand( &node->u.subtree[0] ); node = insert( node, name_op ); break; } } break; case PT_BINARY : if( NULL != sym_op ) { switch( node->cgop ) { case CO_COMMA : case CO_COLON : insertOperand( &node->u.subtree[0] ); insertOperand( &node->u.subtree[1] ); break; case CO_LIST : case CO_INIT : case CO_RETURN : case CO_CONVERT : case CO_DYNAMIC_CAST : case CO_STATIC_CAST : case CO_REINTERPRET_CAST : case CO_CONST_CAST : insertOperand( &node->u.subtree[1] ); break; case CO_ARROW : case CO_DOT : case CO_STORAGE : case CO_OPERATOR : case CO_COLON_COLON : case CO_SEG_OP : case CO_NEW_PARMS1 : case CO_NEW_PARMS2 : break; case CO_SIZEOF_TYPE : case CO_NEW : case CO_NEW_G : case CO_NEW_ARRAY : node = insert( node, name_op ); break; default : insertOperand( &node->u.subtree[0] ); insertOperand( &node->u.subtree[1] ); node = insert( node, name_op ); break; } } break; case PT_IC : case PT_SYMBOL : case PT_DUP_EXPR : CFatal( "DbgComma -- bad parse tree" ); default : break; } return node; }