Goose  Diff

Differences From Artifact [b73af13fa5]:

  • File bs/parse/parser.cpp — part of check-in [c4abb2a3ed] at 2019-08-10 14:26:37 on branch trunk — Refactored the lexer (and the resolver) to output Terms associated with location Ids. (user: achavasse size: 5626)

To Artifact [c8ee40534e]:

  • File bs/parse/parser.cpp — part of check-in [ffa2c830dd] at 2019-08-10 19:33:22 on branch trunk — Implemented a DiagnosticsContext class which can be used to push contextual informations that are printed when an error is emitted. (user: achavasse size: 5706)

172
173
174
175
176
177
178


179
180
181
182
183
184
185
        pushValue( *val );
        return true;
    }

    if( !( *rule )->isPrefix() )
        return false;



    m_resolver->consume();
    return ( *rule )->parsePrefix( *this, t.first, prec );
}

optional< uint32_t > Parser::getPrecedence( const Term& t, const pvec& vec )
{
    auto val = ValueFromIRExpr( t );







>
>







172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
        pushValue( *val );
        return true;
    }

    if( !( *rule )->isPrefix() )
        return false;

    DiagnosticsContext dc( t.second );

    m_resolver->consume();
    return ( *rule )->parsePrefix( *this, t.first, prec );
}

optional< uint32_t > Parser::getPrecedence( const Term& t, const pvec& vec )
{
    auto val = ValueFromIRExpr( t );
224
225
226
227
228
229
230


231
232
233
    if( !rule )
        return false;

    m_resolver->consume();

    if( !( *rule )->isInfix() )
        return false;



    return ( *rule )->parseInfix( *this, t.first, prec );
}







>
>



226
227
228
229
230
231
232
233
234
235
236
237
    if( !rule )
        return false;

    m_resolver->consume();

    if( !( *rule )->isInfix() )
        return false;

    DiagnosticsContext dc( t.second );

    return ( *rule )->parseInfix( *this, t.first, prec );
}