From 006b0e1f32e223e818d2919bb5063a274850336c Mon Sep 17 00:00:00 2001 From: NeeEoo Date: Wed, 24 Apr 2024 00:49:36 +0200 Subject: [PATCH] Fixed bug --- hscript/Optimizer.hx | 31 ++++++++++++++++++++++++++----- tests/src/tests/FinalCase.hx | 6 ++++++ tests/src/tests/MiscCase.hx | 7 +++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/hscript/Optimizer.hx b/hscript/Optimizer.hx index c17f293..76452d7 100644 --- a/hscript/Optimizer.hx +++ b/hscript/Optimizer.hx @@ -280,21 +280,22 @@ class Optimizer { } } + // Possible bugs here if(isNumber(e1) && !isConstant(e2)) { var c1 = getNumber(e1); - if(c1 == 0 && op == "+") + if(compareNumber(c1, 0) && op == "+") return mk(Tools.expr(e2), s); - //if(c1 == 0 && op == "*") + //if(compareNumber(c1, 0) && op == "*") // return mk(convertConstant(0), s); } if(!isConstant(e1) && isNumber(e2)) { var c2 = getNumber(e2); - if(op == "+" && c2 == 0) + if(op == "+" && compareNumber(c2, 0)) return mk(Tools.expr(e1), s); - if(op == "/" && c2 == 1) + if(op == "/" && compareNumber(c2, 1)) return mk(Tools.expr(e1), s); - //if(op == "*" && c2 == 0) + //if(op == "*" && compareNumber(c2, 0)) // return mk(convertConstant(0), s); } @@ -321,6 +322,26 @@ class Optimizer { return s; } + static function compareNumber(a:Dynamic, b:Dynamic):Bool { + return switch(Type.typeof(a)) { + case TInt: + var a:Int = cast a; + switch(Type.typeof(b)) { + case TInt: a == cast(b, Int); + case TFloat: a == cast(b, Float); + default: false; + } + case TFloat: + var a:Float = cast a; + switch(Type.typeof(b)) { + case TInt: a == cast(b, Int); + case TFloat: a == cast(b, Float); + default: false; + } + default: false; + } + } + static function hasDecl(e:Expr):Bool { return switch(Tools.expr(e)) { case EVar(_): true;// has a declaration diff --git a/tests/src/tests/FinalCase.hx b/tests/src/tests/FinalCase.hx index bae4f37..916be12 100644 --- a/tests/src/tests/FinalCase.hx +++ b/tests/src/tests/FinalCase.hx @@ -38,6 +38,12 @@ class FinalCase extends TestCase { 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});'); + Util.parse(' + bloomShader.dim = dim = .8 + (.3 * FlxMath.fastSin(__totalTime)); + bloomShader.size = size = 18 + (8 * FlxMath.fastSin(__totalTime)); + '); + + Util.parse('sprite.setPosition(codesList.x + (sprite.ID % 2 == 1 ? 240 : 67),codesList.y + (15 * sprite.ID) + (sprite.ID%2 == 1 ? 35 : 54));'); } function assertDisplay(script:String, expected:Dynamic) { diff --git a/tests/src/tests/MiscCase.hx b/tests/src/tests/MiscCase.hx index 95c28c7..e20d2b3 100644 --- a/tests/src/tests/MiscCase.hx +++ b/tests/src/tests/MiscCase.hx @@ -149,6 +149,13 @@ class MiscCase extends TestCase { assertEq("[55,66,77][1]",66); + assertEq("{ + var a = 1; + function b() { return a; } + a = 2; + b(); + }", 2); + } override function teardown() {