diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index e9554d36..5ec83fbf 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -59,6 +59,7 @@ class Kiss { "reversed" => Symbol("Prelude.reversed"), // TODO test reversed "memoize" => Symbol("Prelude.memoize"), // TODO test memoize "symbolName" => Symbol("Prelude.symbolName"), + "symbolNameValue" => Symbol("Prelude.symbolNameValue"), "symbol" => Symbol("Prelude.symbol"), "expList" => Symbol("Prelude.expList"), "map" => Symbol("Lambda.map"), diff --git a/kiss/src/kiss/KissInterp.hx b/kiss/src/kiss/KissInterp.hx index d8bd75d9..b2517749 100644 --- a/kiss/src/kiss/KissInterp.hx +++ b/kiss/src/kiss/KissInterp.hx @@ -26,7 +26,6 @@ class KissInterp extends Interp { toDynamic: Operand.toDynamic } }); - trace(variables["kiss"]); variables.set("Lambda", Lambda); variables.set("Std", Std); variables.set("Keep", ExtraElementHandling.Keep); diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index f746698f..d0a66d56 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -189,15 +189,17 @@ class Macros { var conditionInterp = new KissInterp(true); var conditionStr = Reader.toString(conditionExp.def); for (flag => value in Context.getDefines()) { - conditionInterp.variables.set(flag, value); + if (flag != "kiss") + conditionInterp.variables.set(flag, value); } try { var hscriptStr = Prelude.convertToHScript(conditionStr); #if test - Prelude.print(hscriptStr); + Prelude.print("#if condition hscript: " + hscriptStr); #end var conditionHScript = parser.parseString(hscriptStr); return if (Prelude.truthy(conditionInterp.execute(conditionHScript))) { + trace("using thenExp"); thenExp; } else { elseExp; @@ -239,10 +241,15 @@ class Macros { caseInterp.variables.set(Prelude.symbolNameValue(matchBodySymbol), matchBodies.shift()); } for (flag => value in Context.getDefines()) { - caseInterp.variables.set(flag, value); + if (flag != "kiss") + caseInterp.variables.set(flag, value); } try { - var caseHScript = parser.parseString(Prelude.convertToHScript(caseStr)); + var hscriptStr = Prelude.convertToHScript(caseStr); + #if test + Prelude.print("#case hscript: " + hscriptStr); + #end + var caseHScript = parser.parseString(hscriptStr); return caseInterp.execute(caseHScript); } catch (e) { throw CompileError.fromExp(caseExp, '#case evaluation threw error $e'); diff --git a/projects/aoc/src/Main.kiss b/projects/aoc/src/Main.kiss index c1e71321..3c9ab2f7 100644 --- a/projects/aoc/src/Main.kiss +++ b/projects/aoc/src/Main.kiss @@ -1,3 +1,4 @@ +(load "UtilMacros.kiss") (defun :Void main [] (year 2020 (Solutions2020.run))) \ No newline at end of file diff --git a/projects/aoc/src/UtilMacros.kiss b/projects/aoc/src/UtilMacros.kiss index ca801595..2bdca660 100644 --- a/projects/aoc/src/UtilMacros.kiss +++ b/projects/aoc/src/UtilMacros.kiss @@ -1,5 +1,10 @@ +(defmacro year [num &rest body] + `(#when ,(symbol (+ "year" (symbolNameValue num))) + (print (+ "year " (Std.string ,num))) + ,@body)) + (defmacro day [num &rest body] - `(#when (+ "day" (Std.string ,num)) + `(#when ,(symbol (+ "day" (symbolNameValue num))) (print (+ "day " (Std.string ,num))) ,@body)) diff --git a/projects/aoc/src/year2020/Evasion.hx b/projects/aoc/src/year2020/Evasion.hx index 9654b488..3efe3f86 100644 --- a/projects/aoc/src/year2020/Evasion.hx +++ b/projects/aoc/src/year2020/Evasion.hx @@ -3,7 +3,5 @@ package year2020; import kiss.EmbeddedScript; import kiss.Prelude; -#if (day12 && year2020) @:build(kiss.EmbeddedScript.build("EvasionDSL.kiss", "inputs/day12.txt")) class EvasionScript extends EmbeddedScript {} -#end diff --git a/projects/aoc/src/year2020/Solutions.hx b/projects/aoc/src/year2020/Solutions.hx index 457f46d7..1c3b8f8f 100644 --- a/projects/aoc/src/year2020/Solutions.hx +++ b/projects/aoc/src/year2020/Solutions.hx @@ -12,10 +12,16 @@ import year2020.Passports; import year2020.Seating; import year2020.Customs; import year2020.Bags; +#if (day8 && year2020) import year2020.BootCode; +#end import year2020.Adapters; +#if (day11 && year2020) import year2020.FerrySim; +#end +#if (day12 && year2020) import year2020.Evasion; +#end @:build(kiss.Kiss.build()) class Solutions {} diff --git a/test-project.sh b/test-project.sh index 5d36f80d..98dcf87f 100755 --- a/test-project.sh +++ b/test-project.sh @@ -37,5 +37,5 @@ then # Test other projects with their test.sh file else (cd projects/$KISS_PROJECT && haxelib install all --always) - (cd projects/$KISS_PROJECT && ./test.sh) + (cd projects/$KISS_PROJECT && ./test.sh "${@:2}") fi \ No newline at end of file