|
@@ -130,6 +130,7 @@ enum ExprDef {
|
|
EArrayDecl( el : Array<Expr> );
|
|
EArrayDecl( el : Array<Expr> );
|
|
ESwitch( e : Expr, cases : Array<{ values : Array<Expr>, expr:Expr }>, def : Null<Expr> );
|
|
ESwitch( e : Expr, cases : Array<{ values : Array<Expr>, expr:Expr }>, def : Null<Expr> );
|
|
EWhile( cond : Expr, loop : Expr, normalWhile : Bool );
|
|
EWhile( cond : Expr, loop : Expr, normalWhile : Bool );
|
|
|
|
+ EMeta( name : String, args : Array<Expr>, e : Expr );
|
|
}
|
|
}
|
|
|
|
|
|
typedef TVar = {
|
|
typedef TVar = {
|
|
@@ -259,6 +260,7 @@ enum TExprDef {
|
|
TArrayDecl( el : Array<TExpr> );
|
|
TArrayDecl( el : Array<TExpr> );
|
|
TSwitch( e : TExpr, cases : Array<{ values : Array<TExpr>, expr:TExpr }>, def : Null<TExpr> );
|
|
TSwitch( e : TExpr, cases : Array<{ values : Array<TExpr>, expr:TExpr }>, def : Null<TExpr> );
|
|
TWhile( e : TExpr, loop : TExpr, normalWhile : Bool );
|
|
TWhile( e : TExpr, loop : TExpr, normalWhile : Bool );
|
|
|
|
+ TMeta( m : String, args : Array<Const>, e : TExpr );
|
|
}
|
|
}
|
|
|
|
|
|
typedef TExpr = { e : TExprDef, t : Type, p : Position }
|
|
typedef TExpr = { e : TExprDef, t : Type, p : Position }
|
|
@@ -402,6 +404,8 @@ class Tools {
|
|
return hasSideEffect(e) || (def != null && hasSideEffect(def));
|
|
return hasSideEffect(e) || (def != null && hasSideEffect(def));
|
|
case TWhile(e, loop, _):
|
|
case TWhile(e, loop, _):
|
|
return hasSideEffect(e) || hasSideEffect(loop);
|
|
return hasSideEffect(e) || hasSideEffect(loop);
|
|
|
|
+ case TMeta(_, _, e):
|
|
|
|
+ return hasSideEffect(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -429,7 +433,8 @@ class Tools {
|
|
case TWhile(e, loop, _):
|
|
case TWhile(e, loop, _):
|
|
f(e);
|
|
f(e);
|
|
f(loop);
|
|
f(loop);
|
|
- case TConst(_),TVar(_),TGlobal(_), TDiscard, TContinue, TBreak:
|
|
|
|
|
|
+ case TConst(_), TVar(_), TGlobal(_), TDiscard, TContinue, TBreak:
|
|
|
|
+ case TMeta(_, _, e): f(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -450,6 +455,7 @@ class Tools {
|
|
case TSwitch(e, cases, def): TSwitch(f(e), [for( c in cases ) { values : [for( v in c.values ) f(v)], expr : f(c.expr) }], def == null ? null : f(def));
|
|
case TSwitch(e, cases, def): TSwitch(f(e), [for( c in cases ) { values : [for( v in c.values ) f(v)], expr : f(c.expr) }], def == null ? null : f(def));
|
|
case TWhile(e, loop, normalWhile): TWhile(f(e), f(loop), normalWhile);
|
|
case TWhile(e, loop, normalWhile): TWhile(f(e), f(loop), normalWhile);
|
|
case TConst(_), TVar(_), TGlobal(_), TDiscard, TContinue, TBreak: e.e;
|
|
case TConst(_), TVar(_), TGlobal(_), TDiscard, TContinue, TBreak: e.e;
|
|
|
|
+ case TMeta(m, args, e): TMeta(m, args, f(e)); // don't map args
|
|
}
|
|
}
|
|
return { e : ed, t : e.t, p : e.p };
|
|
return { e : ed, t : e.t, p : e.p };
|
|
}
|
|
}
|