Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    r8780e30 r1b772749  
    172172} // build_constantStr
    173173
    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 
    217174NameExpr * build_varref( const string *name, bool labelp ) {
    218175        NameExpr *expr = new NameExpr( *name, nullptr );
     
    241198}
    242199
    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 ) {
     200Expression *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
     206Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    249207        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    250208        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;
    252211        return ret;
    253212}
Note: See TracChangeset for help on using the changeset viewer.