ZAM changes intermixed with lambda and "when" support

This commit is contained in:
Vern Paxson 2023-06-16 16:11:43 -07:00 committed by Arne Welzel
parent 1dd2270272
commit 558cec58ed
2 changed files with 12 additions and 4 deletions

View file

@ -220,10 +220,15 @@ private:
const ZAMStmt CompileInExpr(const NameExpr* n1, const ListExpr* l, const NameExpr* n2, const ZAMStmt CompileInExpr(const NameExpr* n1, const ListExpr* l, const NameExpr* n2,
const ConstExpr* c); const ConstExpr* c);
const ZAMStmt CompileIndex(const NameExpr* n1, const NameExpr* n2, const ListExpr* l); const ZAMStmt CompileIndex(const NameExpr* n1, const NameExpr* n2, const ListExpr* l,
const ZAMStmt CompileIndex(const NameExpr* n1, const ConstExpr* c, const ListExpr* l); bool in_when);
const ZAMStmt CompileIndex(const NameExpr* n1, const ConstExpr* c, const ListExpr* l,
bool in_when);
const ZAMStmt CompileIndex(const NameExpr* n1, int n2_slot, const TypePtr& n2_type, const ZAMStmt CompileIndex(const NameExpr* n1, int n2_slot, const TypePtr& n2_type,
const ListExpr* l); const ListExpr* l, bool in_when);
const ZAMStmt BuildLambda(const NameExpr* n, LambdaExpr* le);
const ZAMStmt BuildLambda(int n_slot, LambdaExpr* le);
// Second argument is which instruction slot holds the branch target. // Second argument is which instruction slot holds the branch target.
const ZAMStmt GenCond(const Expr* e, int& branch_v); const ZAMStmt GenCond(const Expr* e, int& branch_v);

View file

@ -1053,10 +1053,13 @@ const ZAMStmt ZAMCompiler::DoCall(const CallExpr* c, const NameExpr* n)
if ( ! z.aux ) if ( ! z.aux )
z.aux = new ZInstAux(0); z.aux = new ZInstAux(0);
z.aux->can_change_globals = true; z.aux->can_change_non_locals = true;
z.call_expr = c; z.call_expr = c;
if ( in_when )
z.SetType(n->GetType());
if ( ! indirect || func_id->IsGlobal() ) if ( ! indirect || func_id->IsGlobal() )
{ {
z.aux->id_val = func_id; z.aux->id_val = func_id;