localVar warning. Close #112

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

View File

@@ -66,7 +66,8 @@ typedef KissState = {
localVarsInScope:Array<Var>,
conversionStack:Array<ReaderExp>,
stateChanged:Bool,
printFieldsCalls:Array<ReaderExp>
printFieldsCalls:Array<ReaderExp>,
localVarCalls:Array<ReaderExp>
};
#end
@@ -186,7 +187,8 @@ class Kiss {
localVarsInScope: [],
conversionStack: [],
stateChanged: false,
printFieldsCalls: []
printFieldsCalls: [],
localVarCalls: []
};
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) {
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
}

View File

@@ -1356,6 +1356,7 @@ class Macros {
function printAll (locals:Bool, nullCheck:Bool, wholeExp:ReaderExp, exps:Array<ReaderExp>, 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) {

View File

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