54 lines
1.3 KiB
Haxe
54 lines
1.3 KiB
Haxe
package;
|
|
|
|
import hscript.Interp;
|
|
import hscript.Expr;
|
|
|
|
@:access(hscript.Interp)
|
|
@:access(hscript.Parser)
|
|
class HScriptRunner {
|
|
public var interp:Interp;
|
|
public var headerCode:String = "";
|
|
public var tailCode:String = "";
|
|
|
|
public var clearPrevious:Bool = true;
|
|
|
|
public function new() {}
|
|
|
|
public function getNewInterp() {
|
|
var interp = Util.getInterp();
|
|
interp.errorHandler = Util.errorHandler;
|
|
return interp;
|
|
}
|
|
|
|
public function setup() {
|
|
interp = getNewInterp();
|
|
}
|
|
public function run() {}
|
|
public function teardown() {}
|
|
|
|
private var lastExpr:Expr;
|
|
|
|
public function execute(script:String):Dynamic {
|
|
var interp = clearPrevious ? getNewInterp() : this.interp;
|
|
lastExpr = Util.parse(headerCode + script + tailCode);
|
|
if(lastExpr == null)
|
|
return "ERROR";
|
|
if (clearPrevious)
|
|
return interp.execute(lastExpr);
|
|
else
|
|
return interp.exprReturn(lastExpr);
|
|
}
|
|
|
|
public function executeWithVars(script:String, vars:Dynamic):Dynamic {
|
|
var interp = clearPrevious ? getNewInterp() : this.interp;
|
|
lastExpr = Util.parse(headerCode + script + tailCode);
|
|
if(lastExpr == null)
|
|
return "ERROR";
|
|
for(v in Reflect.fields(vars))
|
|
interp.variables.set(v, Reflect.field(vars, v));
|
|
if (clearPrevious)
|
|
return interp.execute(lastExpr);
|
|
else
|
|
return interp.exprReturn(lastExpr);
|
|
}
|
|
} |