Changes in src/Parser/ExpressionNode.cc [7880579:7ecbb7e]
- File:
-
- 1 edited
-
src/Parser/ExpressionNode.cc (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cc
r7880579 r7ecbb7e 167 167 168 168 NameExpr * 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; 170 172 } 171 173 … … 184 186 if ( dynamic_cast< VoidType * >( targetType ) ) { 185 187 delete targetType; 186 return new CastExpr( maybe Build< Expression >(expr_node) );188 return new CastExpr( maybeMoveBuild< Expression >(expr_node) ); 187 189 } else { 188 return new CastExpr( maybe Build< Expression >(expr_node), targetType );190 return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType ); 189 191 } // if 190 192 } 191 193 192 194 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) { 193 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybe Build< Expression >(expr_node) );195 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) ); 194 196 delete member; 195 197 return ret; … … 198 200 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) { 199 201 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 200 deref->get_args().push_back( maybe Build< Expression >(expr_node) );202 deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) ); 201 203 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 202 204 delete member; … … 205 207 206 208 Expression *build_addressOf( ExpressionNode *expr_node ) { 207 return new AddressExpr( maybe Build< Expression >(expr_node) );209 return new AddressExpr( maybeMoveBuild< Expression >(expr_node) ); 208 210 } 209 211 Expression *build_sizeOfexpr( ExpressionNode *expr_node ) { 210 return new SizeofExpr( maybe Build< Expression >(expr_node) );212 return new SizeofExpr( maybeMoveBuild< Expression >(expr_node) ); 211 213 } 212 214 Expression *build_sizeOftype( DeclarationNode *decl_node ) { … … 214 216 } 215 217 Expression *build_alignOfexpr( ExpressionNode *expr_node ) { 216 return new AlignofExpr( maybe Build< Expression >(expr_node) );218 return new AlignofExpr( maybeMoveBuild< Expression >(expr_node) ); 217 219 } 218 220 Expression *build_alignOftype( DeclarationNode *decl_node ) { … … 224 226 225 227 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) { 226 return new LogicalExpr( notZeroExpr( maybe Build< Expression >(expr_node1) ), notZeroExpr( maybeBuild< Expression >(expr_node2) ), kind );228 return new LogicalExpr( notZeroExpr( maybeMoveBuild< Expression >(expr_node1) ), notZeroExpr( maybeMoveBuild< Expression >(expr_node2) ), kind ); 227 229 } 228 230 229 231 Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) { 230 232 std::list< Expression * > args; 231 args.push_back( maybe Build< Expression >(expr_node) );233 args.push_back( maybeMoveBuild< Expression >(expr_node) ); 232 234 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 233 235 } 234 236 Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) { 235 237 std::list< Expression * > args; 236 args.push_back( new AddressExpr( maybe Build< Expression >(expr_node) ) );238 args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node) ) ); 237 239 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 238 240 } 239 241 Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 240 242 std::list< Expression * > args; 241 args.push_back( maybe Build< Expression >(expr_node1) );242 args.push_back( maybe Build< Expression >(expr_node2) );243 args.push_back( maybeMoveBuild< Expression >(expr_node1) ); 244 args.push_back( maybeMoveBuild< Expression >(expr_node2) ); 243 245 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 244 246 } 245 247 Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 246 248 std::list< Expression * > args; 247 args.push_back( new AddressExpr( maybe Build< Expression >(expr_node1) ) );248 args.push_back( maybe Build< Expression >(expr_node2) );249 args.push_back( new AddressExpr( maybeMoveBuild< Expression >(expr_node1) ) ); 250 args.push_back( maybeMoveBuild< Expression >(expr_node2) ); 249 251 return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args ); 250 252 } 251 253 252 254 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) { 253 return new ConditionalExpr( notZeroExpr( maybe Build< 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) ); 254 256 } 255 257 256 258 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) { 257 return new CommaExpr( maybe Build< Expression >(expr_node1), maybeBuild< Expression >(expr_node2) );259 return new CommaExpr( maybeMoveBuild< Expression >(expr_node1), maybeMoveBuild< Expression >(expr_node2) ); 258 260 } 259 261 260 262 Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) { 261 return new AttrExpr( var, maybe Build< Expression >(expr_node) );263 return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) ); 262 264 } 263 265 Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) { … … 267 269 Expression *build_tuple( ExpressionNode * expr_node ) { 268 270 TupleExpr *ret = new TupleExpr(); 269 build List( expr_node, ret->get_exprs() );271 buildMoveList( expr_node, ret->get_exprs() ); 270 272 return ret; 271 273 } … … 273 275 Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) { 274 276 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 ); 278 279 } 279 280 280 281 Expression *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 ) ); 284 283 } 285 284 286 285 Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) { 287 return new AsmExpr( maybe Build< Expression >( inout ), constraint, maybeBuild< Expression >(operand) );286 return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) ); 288 287 } 289 288 290 289 Expression *build_valexpr( StatementNode *s ) { 291 return new UntypedValofExpr( maybe Build< Statement >(s), nullptr );290 return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr ); 292 291 } 293 292 Expression *build_typevalue( DeclarationNode *decl ) { … … 298 297 Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type 299 298 if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type 300 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybe Build< Initializer >(kids) );299 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeMoveBuild< Initializer >(kids) ); 301 300 // these types do not have associated type information 302 301 } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl ) ) { 303 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybe Build< Initializer >(kids) );302 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeMoveBuild< Initializer >(kids) ); 304 303 } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl ) ) { 305 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybe Build< Initializer >(kids) );304 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeMoveBuild< Initializer >(kids) ); 306 305 } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl ) ) { 307 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybe Build< Initializer >(kids) );306 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeMoveBuild< Initializer >(kids) ); 308 307 } else { 309 308 assert( false );
Note:
See TracChangeset
for help on using the changeset viewer.