Changes in src/Parser/ExpressionNode.cc [8780e30:1b772749]
- File:
-
- 1 edited
-
src/Parser/ExpressionNode.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cc
r8780e30 r1b772749 172 172 } // build_constantStr 173 173 174 Expression * build_field_name_FLOATINGconstant( const std::string & str ) {175 // str is of the form A.B -> separate at the . and return member expression176 int a, b;177 char dot;178 std::stringstream ss( str );179 ss >> a >> dot >> b;180 UntypedMemberExpr * ret = new UntypedMemberExpr(181 new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( b ) ) ),182 new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( a ) ) ) );183 delete &str;184 return ret;185 } // build_field_name_FLOATINGconstant186 187 Expression * make_field_name_fraction_constants( Expression * fieldName, Expression * fracts ) {188 if ( fracts ) {189 if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * >( fracts ) ) {190 memberExpr->set_member( make_field_name_fraction_constants( fieldName, memberExpr->get_aggregate() ) );191 return memberExpr;192 } else {193 return new UntypedMemberExpr( fracts, fieldName );194 }195 }196 return fieldName;197 } // make_field_name_fraction_constants198 199 Expression * build_field_name_fraction_constants( Expression * fieldName, ExpressionNode * fracts ) {200 return make_field_name_fraction_constants( fieldName, maybeMoveBuild< Expression >( fracts ) );201 } // build_field_name_fraction_constants202 203 Expression * build_field_name_REALFRACTIONconstant( const std::string & str ) {204 assert( str[0] == '.' );205 Expression * ret = build_constantInteger( *new std::string( str.substr(1) ) );206 delete &str;207 return ret;208 } // build_field_name_REALFRACTIONconstant209 210 Expression * build_field_name_REALDECIMALconstant( const std::string & str ) {211 assert( str[str.size()-1] == '.' );212 Expression * ret = build_constantInteger( *new std::string( str.substr( 0, str.size()-1 ) ) );213 delete &str;214 return ret;215 } // build_field_name_REALDECIMALconstant216 217 174 NameExpr * build_varref( const string *name, bool labelp ) { 218 175 NameExpr *expr = new NameExpr( *name, nullptr ); … … 241 198 } 242 199 243 Expression *build_fieldSel( ExpressionNode *expr_node, Expression *member ) { 244 UntypedMemberExpr *ret = new UntypedMemberExpr( member, maybeMoveBuild< Expression >(expr_node) ); 245 return ret; 246 } 247 248 Expression *build_pfieldSel( ExpressionNode *expr_node, Expression *member ) { 200 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) { 201 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) ); 202 delete member; 203 return ret; 204 } 205 206 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) { 249 207 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 250 208 deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) ); 251 UntypedMemberExpr *ret = new UntypedMemberExpr( member, deref ); 209 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 210 delete member; 252 211 return ret; 253 212 }
Note:
See TracChangeset
for help on using the changeset viewer.