Warning: session_start(): open(/var/lib/php/sessions/sess_auu4kaissg63nl8v2ss3dujgqt, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
/* e.g.
overlay <- ScreenOverlay
bounds <- rightScreenBounds
overlay bounds bounds
overlay show
*/
sclass GazelleV_LeftArrowScript > SimpleLeftToRightParser {
interface Evaluable {
public O get(VarContext ctx default new);
}
// We're using SynchronizedList as a list wrapper
//sclass Script extends ArrayList {
sclass Script extends SynchronizedList is Evaluable {
*() { super(new L); }
public O get(VarContext ctx) {
O result = null;
for (step : this)
result = step.get(ctx);
ret result;
}
toString { ret pnlToLines(this); }
}
srecord noeq FunctionDef(S name, LS args, Evaluable body) {}
srecord noeq Assignment(S var, Evaluable expression) is Evaluable {
public O get(VarContext ctx) {
O o = expression.get(ctx);
ctx.set(var, o);
ret o;
}
toString { ret var + " <- " + expression; }
}
persistable sclass NewObject is Evaluable {
Class c;
L args;
*(Class *c) {}
*(Class *c, L *args) {}
public O get(VarContext ctx) {
ret callConstructor(c, mapToArray(args, arg -> arg.get(ctx)));
}
toString { ret "new " + formatFunctionCall(className(c), args); }
}
srecord noeq CallFunction(FunctionDef f, L args) is Evaluable {
public O get(VarContext ctx) {
var ctx2 = new VarContext(ctx);
for (S declared, Evaluable actual : unpair zipLists(f.args, args))
ctx2.put(declared, actual.get(ctx));
ret f.body.get(ctx2);
}
toString { ret formatFunctionCall(f.name, args); }
}
srecord noeq GetVar(S var) is Evaluable {
public O get(VarContext ctx) {
ret ctx.get(var);
}
toString { ret var; }
}
srecord noeq Const(O value) is Evaluable {
public O get(VarContext ctx) {
ret value;
}
toString { ret strOrClassName(value); }
}
srecord CallMethod(Evaluable target, S methodName, L args) is Evaluable {
public O get(VarContext ctx) {
ret call(target.get(ctx), methodName, mapToArray(args, arg -> arg.get(ctx)));
}
toString { ret target + "." + formatFunctionCall(methodName, args); }
}
}