report the right function in the bracket even if there is no lin

This commit is contained in:
Krasimir Angelov
2023-01-16 13:33:02 +01:00
parent 7d189aa933
commit dae9009c86
2 changed files with 13 additions and 10 deletions

View File

@@ -325,11 +325,12 @@ ref<PgfConcrLincat> PgfLinearizer::TreeLinNode::get_lincat(PgfLinearizer *linear
return namespace_lookup(linearizer->concr->lincats, &lin->absfun->type->name);
}
PgfLinearizer::TreeLindefNode::TreeLindefNode(PgfLinearizer *linearizer, PgfText *literal)
PgfLinearizer::TreeLindefNode::TreeLindefNode(PgfLinearizer *linearizer, PgfText *fun, PgfText *literal)
: TreeNode(linearizer)
{
this->lincat = 0;
this->lin_index = 0;
this->fun = fun;
this->literal = literal;
TreeNode *prev = linearizer->prev;
@@ -391,7 +392,7 @@ void PgfLinearizer::TreeLindefNode::linearize(PgfLinearizationOutputIface *out,
if (lincat != 0) {
PgfText *field = &*(vector_elem(lincat->fields, lindex)->name);
if (linearizer->pre_stack == NULL)
out->begin_phrase(&lincat->name, fid, field, linearizer->wild);
out->begin_phrase(&lincat->name, fid, field, fun);
else {
BracketStack *bracket = new BracketStack();
bracket->next = linearizer->pre_stack->bracket_stack;
@@ -399,7 +400,7 @@ void PgfLinearizer::TreeLindefNode::linearize(PgfLinearizationOutputIface *out,
bracket->fid = fid;
bracket->cat = &lincat->name;
bracket->field = field;
bracket->field = linearizer->wild;
bracket->fun = fun;
linearizer->pre_stack->bracket_stack = bracket;
}
@@ -407,7 +408,7 @@ void PgfLinearizer::TreeLindefNode::linearize(PgfLinearizationOutputIface *out,
linearize_seq(out, linearizer, seq);
if (linearizer->pre_stack == NULL)
out->end_phrase(&lincat->name, fid, field, linearizer->wild);
out->end_phrase(&lincat->name, fid, field, fun);
else {
BracketStack *bracket = new BracketStack();
bracket->next = linearizer->pre_stack->bracket_stack;
@@ -415,7 +416,7 @@ void PgfLinearizer::TreeLindefNode::linearize(PgfLinearizationOutputIface *out,
bracket->fid = fid;
bracket->cat = &lincat->name;
bracket->field = field;
bracket->field = linearizer->wild;
bracket->fun = fun;
linearizer->pre_stack->bracket_stack = bracket;
}
} else {
@@ -726,7 +727,7 @@ PgfExpr PgfLinearizer::elit(PgfLiteral lit)
PgfExpr PgfLinearizer::emeta(PgfMetaId meta)
{
printer.emeta(meta);
return (PgfExpr) new TreeLindefNode(this, printer.get_text());
return (PgfExpr) new TreeLindefNode(this, NULL, printer.get_text());
}
PgfExpr PgfLinearizer::efun(PgfText *name)
@@ -738,14 +739,15 @@ PgfExpr PgfLinearizer::efun(PgfText *name)
printer.puts("[");
printer.efun(name);
printer.puts("]");
return (PgfExpr) new TreeLindefNode(this, printer.get_text());
return (PgfExpr) new TreeLindefNode(this, textdup(name), printer.get_text());
}
}
PgfExpr PgfLinearizer::evar(int index)
{
printer.evar(index);
return (PgfExpr) new TreeLindefNode(this, printer.get_text());
PgfText *name = printer.get_text();
return (PgfExpr) new TreeLindefNode(this, textdup(name), name);
}
PgfExpr PgfLinearizer::etyped(PgfExpr expr, PgfType ty)

View File

@@ -66,15 +66,16 @@ class PGF_INTERNAL_DECL PgfLinearizer : public PgfUnmarshaller {
struct TreeLindefNode : public TreeNode {
ref<PgfConcrLincat> lincat;
size_t lin_index;
PgfText *fun;
PgfText *literal;
TreeLindefNode(PgfLinearizer *linearizer, PgfText *lit);
TreeLindefNode(PgfLinearizer *linearizer, PgfText *fun, PgfText *lit);
virtual bool resolve(PgfLinearizer *linearizer);
virtual void check_category(PgfLinearizer *linearizer, PgfText *cat);
virtual void linearize_arg(PgfLinearizationOutputIface *out, PgfLinearizer *linearizer, size_t d, PgfLParam *r);
virtual void linearize(PgfLinearizationOutputIface *out, PgfLinearizer *linearizer, size_t lindex);
virtual ref<PgfConcrLincat> get_lincat(PgfLinearizer *linearizer);
~TreeLindefNode() { free(literal); };
~TreeLindefNode() { free(fun); free(literal); };
};
struct TreeLinrefNode : public TreeNode {