Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    r7880579 r7ecbb7e  
    167167
    168168NameExpr * build_varref( const string *name, bool labelp ) {
    169         return new NameExpr( *name, nullptr );
     169        NameExpr *expr = new NameExpr( *name, nullptr );
     170        delete name;
     171        return expr;
    170172}
    171173
     
    184186        if ( dynamic_cast< VoidType * >( targetType ) ) {
    185187                delete targetType;
    186                 return new CastExpr( maybeBuild< Expression >(expr_node) );
     188                return new CastExpr( maybeMoveBuild< Expression >(expr_node) );
    187189        } else {
    188                 return new CastExpr( maybeBuild< Expression >(expr_node), targetType );
     190                return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType );
    189191        } // if
    190192}
    191193
    192194Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    193         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild< Expression >(expr_node) );
     195        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) );
    194196        delete member;
    195197        return ret;
     
    198200Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    199201        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    200         deref->get_args().push_back( maybeBuild< Expression >(expr_node) );
     202        deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) );
    201203        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    202204        delete member;
     
    205207
    206208Expression *build_addressOf( ExpressionNode *expr_node ) {
    207                 return new AddressExpr( maybeBuild< Expression >(expr_node) );
     209                return new AddressExpr( maybeMoveBuild< Expression >(expr_node) );
    208210}
    209211Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
    210         return new SizeofExpr( maybeBuild< Expression >(expr_node) );
     212        return new SizeofExpr( maybeMoveBuild< Expression >(expr_node) );
    211213}
    212214Expression *build_sizeOftype( DeclarationNode *decl_node ) {
     
    214216}
    215217Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
    216         return new AlignofExpr( maybeBuild< Expression >(expr_node) );
     218        return new AlignofExpr( maybeMoveBuild< Expression >(expr_node) );
    217219}
    218220Expression *build_alignOftype( DeclarationNode *decl_node ) {
     
    224226
    225227Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) {
    226         return new LogicalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), notZeroExpr( maybeBuild< Expression >(expr_node2) ), kind );
     228        return new LogicalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), notZeroExpr( maybeMoveBuild< Expression >(expr_node2) ), kind );
    227229}
    228230
    229231Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
    230232        std::list< Expression * > args;
    231         args.push_back( maybeBuild< Expression >(expr_node) );
     233        args.push_back( maybeMoveBuild< Expression >(expr_node) );
    232234        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    233235}
    234236Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
    235237        std::list< Expression * > args;
    236         args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node) ) );
     238        args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node) ) );
    237239        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    238240}
    239241Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    240242        std::list< Expression * > args;
    241         args.push_back( maybeBuild< Expression >(expr_node1) );
    242         args.push_back( maybeBuild< Expression >(expr_node2) );
     243        args.push_back( maybeMoveBuild< Expression >(expr_node1) );
     244        args.push_back( maybeMoveBuild< Expression >(expr_node2) );
    243245        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    244246}
    245247Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    246248        std::list< Expression * > args;
    247         args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node1) ) );
    248         args.push_back( maybeBuild< Expression >(expr_node2) );
     249        args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node1) ) );
     250        args.push_back( maybeMoveBuild< Expression >(expr_node2) );
    249251        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    250252}
    251253
    252254Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) {
    253         return new ConditionalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), maybeBuild< Expression >(expr_node2), maybeBuild< Expression >(expr_node3) );
     255        return new ConditionalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), maybeMoveBuild< Expression >(expr_node2), maybeMoveBuild< Expression >(expr_node3) );
    254256}
    255257
    256258Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    257         return new CommaExpr( maybeBuild< Expression >(expr_node1), maybeBuild< Expression >(expr_node2) );
     259        return new CommaExpr( maybeMoveBuild< Expression >(expr_node1), maybeMoveBuild< Expression >(expr_node2) );
    258260}
    259261
    260262Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
    261         return new AttrExpr( var, maybeBuild< Expression >(expr_node) );
     263        return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) );
    262264}
    263265Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
     
    267269Expression *build_tuple( ExpressionNode * expr_node ) {
    268270        TupleExpr *ret = new TupleExpr();
    269         buildList( expr_node, ret->get_exprs() );
     271        buildMoveList( expr_node, ret->get_exprs() );
    270272        return ret;
    271273}
     
    273275Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
    274276        std::list< Expression * > args;
    275 
    276         buildList( expr_node, args );
    277         return new UntypedExpr( maybeBuild< Expression >(function), args, nullptr );
     277        buildMoveList( expr_node, args );
     278        return new UntypedExpr( maybeMoveBuild< Expression >(function), args, nullptr );
    278279}
    279280
    280281Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
    281         Expression *low_cexpr = maybeBuild< Expression >( low );
    282         Expression *high_cexpr = maybeBuild< Expression >( high );
    283         return new RangeExpr( low_cexpr, high_cexpr );
     282        return new RangeExpr( maybeMoveBuild< Expression >( low ), maybeMoveBuild< Expression >( high ) );
    284283}
    285284
    286285Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
    287         return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild< Expression >(operand) );
     286        return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) );
    288287}
    289288
    290289Expression *build_valexpr( StatementNode *s ) {
    291         return new UntypedValofExpr( maybeBuild< Statement >(s), nullptr );
     290        return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr );
    292291}
    293292Expression *build_typevalue( DeclarationNode *decl ) {
     
    298297        Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type
    299298        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    300                 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild< Initializer >(kids) );
     299                return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeMoveBuild< Initializer >(kids) );
    301300        // these types do not have associated type information
    302301        } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
    303                 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild< Initializer >(kids) );
     302                return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
    304303        } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
    305                 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild< Initializer >(kids) );
     304                return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
    306305        } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
    307                 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild< Initializer >(kids) );
     306                return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
    308307        } else {
    309308                assert( false );
Note: See TracChangeset for help on using the changeset viewer.