Add Context.buildFields to print macros. Close #111
This commit is contained in:
@@ -281,6 +281,26 @@ class Kiss {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
#if macro
|
#if macro
|
||||||
|
static function addContextFields(k:KissState, useClassFields:Bool) {
|
||||||
|
if (useClassFields) {
|
||||||
|
k.fieldList = Context.getBuildFields();
|
||||||
|
for (field in k.fieldList) {
|
||||||
|
k.fieldDict[field.name] = field;
|
||||||
|
switch (field.kind) {
|
||||||
|
case FVar(t, e) | FProp(_, _, t, e):
|
||||||
|
var v = {
|
||||||
|
name: field.name,
|
||||||
|
type: t,
|
||||||
|
expr: e
|
||||||
|
};
|
||||||
|
k.addVarInScope(v, false, field.access.indexOf(AStatic) != -1);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Build macro: add fields to a class from a corresponding .kiss file
|
Build macro: add fields to a class from a corresponding .kiss file
|
||||||
**/
|
**/
|
||||||
@@ -308,12 +328,7 @@ class Kiss {
|
|||||||
if (k == null)
|
if (k == null)
|
||||||
k = defaultKissState(context);
|
k = defaultKissState(context);
|
||||||
|
|
||||||
if (useClassFields) {
|
k.addContextFields(useClassFields);
|
||||||
k.fieldList = Context.getBuildFields();
|
|
||||||
for (field in k.fieldList) {
|
|
||||||
k.fieldDict[field.name] = field;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
k.loadingDirectory = loadingDirectory;
|
k.loadingDirectory = loadingDirectory;
|
||||||
|
|
||||||
var topLevelBegin = load(kissFile, k);
|
var topLevelBegin = load(kissFile, k);
|
||||||
@@ -423,12 +438,7 @@ class Kiss {
|
|||||||
if (k == null)
|
if (k == null)
|
||||||
k = defaultKissState(context);
|
k = defaultKissState(context);
|
||||||
|
|
||||||
if (useClassFields) {
|
k.addContextFields(useClassFields);
|
||||||
k.fieldList = Context.getBuildFields();
|
|
||||||
for (field in k.fieldList) {
|
|
||||||
k.fieldDict[field.name] = field;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (file in kissFiles) {
|
for (file in kissFiles) {
|
||||||
build(file, k, false, context);
|
build(file, k, false, context);
|
||||||
|
@@ -403,8 +403,13 @@ class BasicTestCase extends Test {
|
|||||||
_testWithTempSet();
|
_testWithTempSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testPrintMacrosCheck() {
|
var nullDefinedInHaxe = null;
|
||||||
_testPrintMacrosCheck();
|
static var staticNullDefinedInHaxe = null;
|
||||||
|
|
||||||
|
function testPrintMacros() {
|
||||||
|
// TODO Test the warnings
|
||||||
|
_testPrintMacrosInstance();
|
||||||
|
_testPrintMacrosStatic();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testTypeCase() {
|
function testTypeCase() {
|
||||||
|
@@ -768,14 +768,54 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m
|
|||||||
(assertEquals 3 v2))
|
(assertEquals 3 v2))
|
||||||
(Assert.pass))
|
(Assert.pass))
|
||||||
|
|
||||||
(var anotherNullToPrint null)
|
(var &mut savedPrints [])
|
||||||
(function _testPrintMacrosCheck []
|
(function savePrint []
|
||||||
|
(set savedPrints [])
|
||||||
|
->:Void [:String s] (savedPrints.push s))
|
||||||
|
|
||||||
|
(prop anotherNullToPrint null)
|
||||||
|
(var anotherStaticNullToPrint null)
|
||||||
|
|
||||||
|
(method _testPrintMacrosInstance []
|
||||||
|
(withTempSet [Prelude.printStr (savePrint)]
|
||||||
(printAllNulls)
|
(printAllNulls)
|
||||||
(var t "bad")
|
(Assert.isTrue (savedPrints.contains "anotherNullToPrint: null"))
|
||||||
(let [u "good"]
|
(Assert.isTrue (savedPrints.contains "anotherStaticNullToPrint: null"))
|
||||||
|
(Assert.isTrue (savedPrints.contains "nullDefinedInHaxe: null"))
|
||||||
|
(Assert.isTrue (savedPrints.contains "staticNullDefinedInHaxe: null"))
|
||||||
|
|
||||||
|
// TODO This statement prints a warning at compile-time, which won't
|
||||||
|
// appear in savedPrints, so it's harder to test...
|
||||||
|
(prop tp "bad")
|
||||||
|
|
||||||
|
(let [u null]
|
||||||
|
// TODO this statement should print a warning at compile-time (#112)
|
||||||
(localVar v "bad")
|
(localVar v "bad")
|
||||||
(printLocalNulls))
|
|
||||||
(Assert.pass))
|
(set savedPrints [])
|
||||||
|
(printLocalNulls)
|
||||||
|
(Assert.isFalse (savedPrints.contains "anotherNullToPrint: null"))
|
||||||
|
(Assert.isFalse (savedPrints.contains "anotherStaticNullToPrint: null"))
|
||||||
|
(Assert.isTrue (savedPrints.contains "u: null")))))
|
||||||
|
|
||||||
|
(function _testPrintMacrosStatic []
|
||||||
|
(withTempSet [Prelude.printStr (savePrint)]
|
||||||
|
(printAllNulls)
|
||||||
|
(Assert.isTrue (savedPrints.contains "anotherStaticNullToPrint: null"))
|
||||||
|
(Assert.isTrue (savedPrints.contains "staticNullDefinedInHaxe: null"))
|
||||||
|
|
||||||
|
// TODO This statement prints a warning at compile-time, which won't
|
||||||
|
// appear in savedPrints, so it's harder to test...
|
||||||
|
(var ts "bad")
|
||||||
|
|
||||||
|
(let [u null]
|
||||||
|
// TODO this statement should print a warning at compile-time (#112)
|
||||||
|
(localVar v "bad")
|
||||||
|
|
||||||
|
(set savedPrints [])
|
||||||
|
(printLocalNulls)
|
||||||
|
(Assert.isFalse (savedPrints.contains "anotherStaticNullToPrint: null"))
|
||||||
|
(Assert.isTrue (savedPrints.contains "u: null")))))
|
||||||
|
|
||||||
(function :Void _testTypeCase []
|
(function :Void _testTypeCase []
|
||||||
(typeCase ["a"]
|
(typeCase ["a"]
|
||||||
|
Reference in New Issue
Block a user