localVar warning. Close #112

This commit is contained in:
2023-02-19 08:09:38 -07:00
parent 2c8defe789
commit d0f47f5de4
3 changed files with 17 additions and 2 deletions

View File

@@ -66,7 +66,8 @@ typedef KissState = {
localVarsInScope:Array<Var>, localVarsInScope:Array<Var>,
conversionStack:Array<ReaderExp>, conversionStack:Array<ReaderExp>,
stateChanged:Bool, stateChanged:Bool,
printFieldsCalls:Array<ReaderExp> printFieldsCalls:Array<ReaderExp>,
localVarCalls:Array<ReaderExp>
}; };
#end #end
@@ -186,7 +187,8 @@ class Kiss {
localVarsInScope: [], localVarsInScope: [],
conversionStack: [], conversionStack: [],
stateChanged: false, stateChanged: false,
printFieldsCalls: [] printFieldsCalls: [],
localVarCalls: []
}; };
k.doc = (form:String, minArgs:Null<Int>, maxArgs:Null<Int>, expectedForm = "", doc = "") -> { k.doc = (form:String, minArgs:Null<Int>, maxArgs:Null<Int>, expectedForm = "", doc = "") -> {
@@ -751,5 +753,15 @@ class Kiss {
public static function convert(k:KissState, exp:ReaderExp) { public static function convert(k:KissState, exp:ReaderExp) {
return readerExpToHaxeExpr(exp, k); 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 #end
} }

View File

@@ -1356,6 +1356,7 @@ class Macros {
function printAll (locals:Bool, nullCheck:Bool, wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) { function printAll (locals:Bool, nullCheck:Bool, wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) {
k.printFieldsCalls.push(wholeExp); k.printFieldsCalls.push(wholeExp);
k.localVarWarning();
var b = wholeExp.expBuilder(); var b = wholeExp.expBuilder();
var list = if (locals) k.localVarsInScope else k.varsInScope; var list = if (locals) k.localVarsInScope else k.varsInScope;
if (!locals && k.inStaticFunction) { if (!locals && k.inStaticFunction) {

View File

@@ -188,6 +188,8 @@ class SpecialForms {
k.doc("deflocal", 2, 3, "(localVar <optional :type> <variable> <optional: &mut> <value>)"); k.doc("deflocal", 2, 3, "(localVar <optional :type> <variable> <optional: &mut> <value>)");
map["deflocal"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> { map["deflocal"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
k.localVarCalls.push(wholeExp);
k.localVarWarning();
EVars(toVars(args[0], args[1], k)).withMacroPosOf(wholeExp); EVars(toVars(args[0], args[1], k)).withMacroPosOf(wholeExp);
}; };
renameAndDeprecate("deflocal", "localVar"); renameAndDeprecate("deflocal", "localVar");