From d0f47f5de4bbc9c902d7810b7ad502d00f1ed654 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 19 Feb 2023 08:09:38 -0700 Subject: [PATCH] localVar warning. Close #112 --- kiss/src/kiss/Kiss.hx | 16 ++++++++++++++-- kiss/src/kiss/Macros.hx | 1 + kiss/src/kiss/SpecialForms.hx | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 3d56f021..4b0b069a 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -66,7 +66,8 @@ typedef KissState = { localVarsInScope:Array, conversionStack:Array, stateChanged:Bool, - printFieldsCalls:Array + printFieldsCalls:Array, + localVarCalls:Array }; #end @@ -186,7 +187,8 @@ class Kiss { localVarsInScope: [], conversionStack: [], stateChanged: false, - printFieldsCalls: [] + printFieldsCalls: [], + localVarCalls: [] }; k.doc = (form:String, minArgs:Null, maxArgs:Null, expectedForm = "", doc = "") -> { @@ -751,5 +753,15 @@ class Kiss { public static function convert(k:KissState, exp:ReaderExp) { return readerExpToHaxeExpr(exp, k); } + + public static function localVarWarning(k:KissState) { + if (k.localVarCalls.length > 0 && k.printFieldsCalls.length > 0) { + for (call in k.localVarCalls) { + KissError.warnFromExp(call, 'variables declared with with `localVar` are incompatible with printAll macros. Use `let` instead.'); + } + k.localVarCalls = []; + } + } + #end } diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 7970d86e..4cfe349d 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -1356,6 +1356,7 @@ class Macros { function printAll (locals:Bool, nullCheck:Bool, wholeExp:ReaderExp, exps:Array, k:KissState) { k.printFieldsCalls.push(wholeExp); + k.localVarWarning(); var b = wholeExp.expBuilder(); var list = if (locals) k.localVarsInScope else k.varsInScope; if (!locals && k.inStaticFunction) { diff --git a/kiss/src/kiss/SpecialForms.hx b/kiss/src/kiss/SpecialForms.hx index 9ca002e6..b0e19373 100644 --- a/kiss/src/kiss/SpecialForms.hx +++ b/kiss/src/kiss/SpecialForms.hx @@ -188,6 +188,8 @@ class SpecialForms { k.doc("deflocal", 2, 3, "(localVar )"); map["deflocal"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { + k.localVarCalls.push(wholeExp); + k.localVarWarning(); EVars(toVars(args[0], args[1], k)).withMacroPosOf(wholeExp); }; renameAndDeprecate("deflocal", "localVar");