Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    rac71a86 re82aa9df  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug 16 00:09:20 2016
    13 // Update Count     : 495
     12// Last Modified On : Mon Aug 15 14:30:42 2016
     13// Update Count     : 490
    1414//
    1515
     
    3232using namespace std;
    3333
    34 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {}
     34ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
    3535
    3636//##############################################################################
     
    5757static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    5858
    59 Expression *build_constantInteger( const std::string & str ) {
     59Expression *build_constantInteger( std::string & str ) {
    6060        static const BasicType::Kind kind[2][3] = {
    6161                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     
    123123} // build_constantInteger
    124124
    125 Expression *build_constantFloat( const std::string & str ) {
     125Expression *build_constantFloat( std::string & str ) {
    126126        static const BasicType::Kind kind[2][3] = {
    127127                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     
    153153} // build_constantFloat
    154154
    155 Expression *build_constantChar( const std::string & str ) {
     155Expression *build_constantChar( std::string & str ) {
    156156        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
    157157} // build_constantChar
    158158
    159 ConstantExpr *build_constantStr( const std::string & str ) {
     159ConstantExpr *build_constantStr( std::string & str ) {
    160160        // string should probably be a primitive type
    161161        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     
    166166} // build_constantStr
    167167
     168//##############################################################################
     169
    168170NameExpr * build_varref( const string *name, bool labelp ) {
    169         NameExpr *expr = new NameExpr( *name, nullptr );
    170         delete name;
    171         return expr;
    172 }
     171        return new NameExpr( *name, nullptr );
     172}
     173
     174//##############################################################################
    173175
    174176static const char *OperName[] = {
     
    182184};
    183185
     186//##############################################################################
     187
    184188Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
    185189        Type *targetType = decl_node->buildType();
    186190        if ( dynamic_cast< VoidType * >( targetType ) ) {
    187191                delete targetType;
    188                 return new CastExpr( maybeMoveBuild< Expression >(expr_node) );
     192                return new CastExpr( maybeBuild<Expression>(expr_node) );
    189193        } else {
    190                 return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType );
     194                return new CastExpr( maybeBuild<Expression>(expr_node), targetType );
    191195        } // if
    192196}
    193197
    194198Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    195         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) );
     199        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
    196200        delete member;
    197201        return ret;
     
    200204Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    201205        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    202         deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) );
     206        deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
    203207        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    204208        delete member;
     
    207211
    208212Expression *build_addressOf( ExpressionNode *expr_node ) {
    209                 return new AddressExpr( maybeMoveBuild< Expression >(expr_node) );
     213                return new AddressExpr( maybeBuild<Expression>(expr_node) );
    210214}
    211215Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
    212         return new SizeofExpr( maybeMoveBuild< Expression >(expr_node) );
     216        return new SizeofExpr( maybeBuild<Expression>(expr_node) );
    213217}
    214218Expression *build_sizeOftype( DeclarationNode *decl_node ) {
    215         Expression* ret = new SizeofExpr( decl_node->buildType() );
    216         delete decl_node;
    217         return ret;
     219        return new SizeofExpr( decl_node->buildType() );
    218220}
    219221Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
    220         return new AlignofExpr( maybeMoveBuild< Expression >(expr_node) );
     222        return new AlignofExpr( maybeBuild<Expression>(expr_node) );
    221223}
    222224Expression *build_alignOftype( DeclarationNode *decl_node ) {
     
    224226}
    225227Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
    226         Expression* ret = new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
    227         delete decl_node;
    228         delete member;
    229         return ret;
     228        return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
    230229}
    231230
    232231Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) {
    233         return new LogicalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), notZeroExpr( maybeMoveBuild< Expression >(expr_node2) ), kind );
     232        return new LogicalExpr( notZeroExpr( maybeBuild<Expression>(expr_node1) ), notZeroExpr( maybeBuild<Expression>(expr_node2) ), kind );
    234233}
    235234
    236235Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
    237         std::list< Expression * > args;
    238         args.push_back( maybeMoveBuild< Expression >(expr_node) );
     236        std::list<Expression *> args;
     237        args.push_back( maybeBuild<Expression>(expr_node) );
    239238        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    240239}
    241240Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
    242         std::list< Expression * > args;
    243         args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node) ) );
     241        std::list<Expression *> args;
     242        args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node) ) );
    244243        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    245244}
    246245Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    247         std::list< Expression * > args;
    248         args.push_back( maybeMoveBuild< Expression >(expr_node1) );
    249         args.push_back( maybeMoveBuild< Expression >(expr_node2) );
     246        std::list<Expression *> args;
     247        args.push_back( maybeBuild<Expression>(expr_node1) );
     248        args.push_back( maybeBuild<Expression>(expr_node2) );
    250249        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    251250}
    252251Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    253         std::list< Expression * > args;
    254         args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node1) ) );
    255         args.push_back( maybeMoveBuild< Expression >(expr_node2) );
     252        std::list<Expression *> args;
     253        args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node1) ) );
     254        args.push_back( maybeBuild<Expression>(expr_node2) );
    256255        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    257256}
    258257
    259258Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) {
    260         return new ConditionalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), maybeMoveBuild< Expression >(expr_node2), maybeMoveBuild< Expression >(expr_node3) );
     259        return new ConditionalExpr( notZeroExpr( maybeBuild<Expression>(expr_node1) ), maybeBuild<Expression>(expr_node2), maybeBuild<Expression>(expr_node3) );
    261260}
    262261
    263262Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    264         return new CommaExpr( maybeMoveBuild< Expression >(expr_node1), maybeMoveBuild< Expression >(expr_node2) );
     263        return new CommaExpr( maybeBuild<Expression>(expr_node1), maybeBuild<Expression>(expr_node2) );
    265264}
    266265
    267266Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
    268         return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) );
     267        return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
    269268}
    270269Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
     
    274273Expression *build_tuple( ExpressionNode * expr_node ) {
    275274        TupleExpr *ret = new TupleExpr();
    276         buildMoveList( expr_node, ret->get_exprs() );
     275        buildList( expr_node, ret->get_exprs() );
    277276        return ret;
    278277}
    279278
    280279Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
    281         std::list< Expression * > args;
    282         buildMoveList( expr_node, args );
    283         return new UntypedExpr( maybeMoveBuild< Expression >(function), args, nullptr );
     280        std::list<Expression *> args;
     281
     282        buildList( expr_node, args );
     283        return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
    284284}
    285285
    286286Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
    287         return new RangeExpr( maybeMoveBuild< Expression >( low ), maybeMoveBuild< Expression >( high ) );
    288 }
     287        Expression *low_cexpr = maybeBuild<Expression>( low );
     288        Expression *high_cexpr = maybeBuild<Expression>( high );
     289        return new RangeExpr( low_cexpr, high_cexpr );
     290}
     291
     292//##############################################################################
    289293
    290294Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
    291         return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) );
    292 }
     295        return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
     296}
     297
     298//##############################################################################
     299
     300//void LabelNode::print( std::ostream &os, int indent ) const {}
     301
     302//void LabelNode::printOneLine( std::ostream &os, int indent ) const {}
     303
     304//##############################################################################
    293305
    294306Expression *build_valexpr( StatementNode *s ) {
    295         return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr );
    296 }
     307        return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
     308}
     309
     310//##############################################################################
     311
    297312Expression *build_typevalue( DeclarationNode *decl ) {
    298313        return new TypeExpr( decl->buildType() );
    299314}
    300315
     316//##############################################################################
     317
    301318Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
    302         Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type
     319        Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
    303320        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    304                 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeMoveBuild< Initializer >(kids) );
     321                return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
    305322        // these types do not have associated type information
    306323        } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
    307                 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
     324                return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
    308325        } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
    309                 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
     326                return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
    310327        } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
    311                 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeMoveBuild< Initializer >(kids) );
     328                return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
    312329        } else {
    313330                assert( false );
Note: See TracChangeset for help on using the changeset viewer.