Changeset 1f44196 for src/Parser/ExpressionNode.cc
- Timestamp:
- Nov 29, 2016, 3:30:59 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 8e5724e
- Parents:
- 3a2128f (diff), 9129a84 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cc
r3a2128f r1f44196 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 expression 176 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_FLOATINGconstant 186 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_constants 198 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_constants 202 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_REALFRACTIONconstant 209 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_REALDECIMALconstant 216 174 217 NameExpr * build_varref( const string *name, bool labelp ) { 175 218 NameExpr *expr = new NameExpr( *name, nullptr ); … … 198 241 } 199 242 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 ) { 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 ) { 207 249 UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 208 250 deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) ); 209 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 210 delete member; 251 UntypedMemberExpr *ret = new UntypedMemberExpr( member, deref ); 211 252 return ret; 212 253 }
Note: See TracChangeset
for help on using the changeset viewer.