From e28fb1684065f65959ef930719f6823ce5fa5199 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 --- src/kiss/Kiss.hx | 16 ++++++++++++++-- src/kiss/Macros.hx | 1 + src/kiss/SpecialForms.hx | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index 3d56f02..4b0b069 100644 --- a/src/kiss/Kiss.hx +++ b/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/src/kiss/Macros.hx b/src/kiss/Macros.hx index 7970d86..4cfe349 100644 --- a/src/kiss/Macros.hx +++ b/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/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 9ca002e..b0e1937 100644 --- a/src/kiss/SpecialForms.hx +++ b/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");