Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
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;
}