localVar warning. Close #112
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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");
|
||||
|
Reference in New Issue
Block a user