Optimize val + 0 -> val, val ? true : false -> val

Bug fixes with printing
Cleaner print output
This commit is contained in:
NeeEoo
2024-04-24 00:15:46 +02:00
parent df1c5ad97c
commit 0ca6eab16e
7 changed files with 187 additions and 45 deletions
+13 -8
View File
@@ -1,5 +1,8 @@
package;
import hscript.Interp;
import hscript.Expr;
@:access(hscript.Interp)
@:access(hscript.Parser)
class HScriptRunner {
@@ -23,27 +26,29 @@ class HScriptRunner {
public function run() {}
public function teardown() {}
private var lastExpr:Expr;
public function execute(script:String):Dynamic {
var interp = clearPrevious ? getNewInterp() : this.interp;
var expr = Util.parse(headerCode + script + tailCode);
if(expr == null)
lastExpr = Util.parse(headerCode + script + tailCode);
if(lastExpr == null)
return "ERROR";
if (clearPrevious)
return interp.execute(expr);
return interp.execute(lastExpr);
else
return interp.exprReturn(expr);
return interp.exprReturn(lastExpr);
}
public function executeWithVars(script:String, vars:Dynamic):Dynamic {
var interp = clearPrevious ? getNewInterp() : this.interp;
var expr = Util.parse(headerCode + script + tailCode);
if(expr == null)
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(expr);
return interp.execute(lastExpr);
else
return interp.exprReturn(expr);
return interp.exprReturn(lastExpr);
}
}
+6
View File
@@ -6,10 +6,12 @@ class Util {
public static function assert(value:Bool, message:String, ?pos:haxe.PosInfos) {
if (value) {
passedTestUnits++;
return true;
} else {
Sys.println("Assertion failed: " + message);
Sys.println("> At " + pos.fileName + ":" + pos.lineNumber);
failedTestUnits++;
return false;
}
}
@@ -26,10 +28,12 @@ class Util {
if (passed) {
passedTestUnits++;
return true;
} else {
Sys.println("Assertion failed: " + message + " Expected: " + expected + " Got: " + value);
Sys.println("> At " + pos.fileName + ":" + pos.lineNumber);
failedTestUnits++;
return false;
}
}
@@ -44,10 +48,12 @@ class Util {
if (passed) {
passedTestUnits++;
return true;
} else {
Sys.println("Assertion failed: " + message + " Expected: " + expected + " Got: " + value);
Sys.println("> At " + pos.fileName + ":" + pos.lineNumber);
failedTestUnits++;
return false;
}
}
+6 -4
View File
@@ -9,11 +9,12 @@ class TestBenchmark extends Benchmark {
//var hscript = "var a:Array<Float> = []; for (i in 0...1000) a.push(i * 2 + 1 / 6); if(true == true) a.push(1);";
var hscript = "
var a:Array<Float> = [];
for(i in 0...1000)
for(i in 0...1000) {
switch(5) {
case true: a.push(1);
default: a.push(2);
default: a.push(i / 1);
}
}
if(('a' == 'a') ? true : false) a.push(1);
if(true == true)
a.push(1);";
@@ -40,11 +41,12 @@ class TestBenchmark extends Benchmark {
var a:Array<Float> = [];
//for (i in 0...1000) a.push(i * 2 + 1 / 6);
//for (i in 0...1000) a.push(i / 2 + 3 / 6);
for(i in 0...1000)
for(i in 0...1000) {
switch(5) {
case 0: a.push(1);
default: a.push(2);
default: a.push(i / 1);
}
}
if(('a' == 'a') ? true : false) a.push(1);
if(true == true) a.push(1);
}
+7 -2
View File
@@ -22,8 +22,6 @@ class FinalCase extends TestCase {
var i = 5; var x = 10;
hscript.Parser.optimize = false;
assertDisplay("(i - x) * 30 + 90", ((i-x) * 30) + 90);
assertDisplay("i - x * 30 + 90", i-x * 30 + 90);
@@ -33,6 +31,13 @@ class FinalCase extends TestCase {
assertDisplay("x * 30 / i + 90", x * 30 / i + 90);
//assertEq("(x * 30) / i + 90", x * 30 / i + 90);
// (_) -> {a = false;}
// Shouldnt be converted to (_) -> return {a = false;}
Util.parse("openCodesList(false, codesOpened ? false : true, previousOpen != open ? true : false);");
Util.parse("openCodesList(false, 'HELLO' ? false : false, 'WORLD' ? true : true);");
Util.parse('FlxTween.tween(newSprite, {"scale.x": 1, "scale.y": 1, alpha: 1, angle: 0}, 0.3, {ease: FlxEase.qaudInOut});');
}
function assertDisplay(script:String, expected:Dynamic) {
+12 -2
View File
@@ -1,5 +1,7 @@
package tests;
import hscript.Printer;
@:access(hscript.Interp)
@:access(hscript.Parser)
class TestCase extends HScriptRunner {
@@ -10,7 +12,11 @@ class TestCase extends HScriptRunner {
executeWithVars(script, vars);
else
execute(script);
Util.assertEq(result, expected, message, pos);
if(!Util.assertEq(result, expected, message, pos)) {
Sys.println("> " + Printer.convertExprToString(lastExpr));
return false;
}
return true;
}
public function assertNeq(script:String, expected:Dynamic, ?message:String, ?vars:Dynamic, ?pos:haxe.PosInfos) {
@@ -20,6 +26,10 @@ class TestCase extends HScriptRunner {
executeWithVars(script, vars);
else
execute(script);
Util.assertNeq(result, expected, message, pos);
if(!Util.assertNeq(result, expected, message, pos)) {
Sys.println("> " + Printer.convertExprToString(lastExpr));
return false;
}
return true;
}
}