3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-04 15:03:57 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-09-30 15:41:40 -07:00
parent 339f0cd5f9
commit 65c9a18c3a

View file

@ -1638,8 +1638,10 @@ namespace smt2 {
// '(' 'as' <identifier> <sort> ')'
// '(' '_' <identifier> <num>+ ')'
// '(' 'as' <identifier '(' '_' <identifier> (<num>|<func-decl-ref>)+ ')' <sort> ')'
symbol parse_qualified_identifier(bool & has_as) {
// '(' lambda (...) <expr> ')'
symbol parse_qualified_identifier(bool & has_as, bool & is_lambda) {
SASSERT(curr_is_lparen() || curr_is_identifier());
is_lambda = false;
if (curr_is_identifier()) {
has_as = false;
symbol r = curr_id();
@ -1648,6 +1650,12 @@ namespace smt2 {
}
SASSERT(curr_is_lparen());
next();
if (curr_id_is_lambda()) {
is_lambda = true;
has_as = false;
return symbol("select");
}
if (!curr_is_identifier() || (!curr_id_is_underscore() && !curr_id_is_as()))
throw parser_exception("invalid qualified/indexed identifier, '_' or 'as' expected");
return parse_qualified_identifier_core(has_as);
@ -1860,11 +1868,14 @@ namespace smt2 {
SASSERT(curr_is_lparen() || curr_is_identifier());
unsigned param_spos = m_param_stack.size();
unsigned expr_spos = expr_stack().size();
bool has_as;
symbol f = parse_qualified_identifier(has_as);
void * mem = m_stack.allocate(sizeof(quant_frame));
bool has_as, is_lambda;
auto f = parse_qualified_identifier(has_as, is_lambda);
void * mem = m_stack.allocate(sizeof(app_frame));
new (mem) app_frame(f, expr_spos, param_spos, has_as);
m_num_expr_frames++;
if (is_lambda)
push_quant_frame(lambda_k);
}
void push_expr_frame(expr_frame * curr) {