Add Context.buildFields to print macros. Close #111

This commit is contained in:
2023-02-19 07:34:14 -07:00
parent a5a65f3d67
commit 2c8defe789
3 changed files with 77 additions and 22 deletions

View File

@@ -281,6 +281,26 @@ class Kiss {
});
}
#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
**/
@@ -308,12 +328,7 @@ class Kiss {
if (k == null)
k = defaultKissState(context);
if (useClassFields) {
k.fieldList = Context.getBuildFields();
for (field in k.fieldList) {
k.fieldDict[field.name] = field;
}
}
k.addContextFields(useClassFields);
k.loadingDirectory = loadingDirectory;
var topLevelBegin = load(kissFile, k);
@@ -423,12 +438,7 @@ class Kiss {
if (k == null)
k = defaultKissState(context);
if (useClassFields) {
k.fieldList = Context.getBuildFields();
for (field in k.fieldList) {
k.fieldDict[field.name] = field;
}
}
k.addContextFields(useClassFields);
for (file in kissFiles) {
build(file, k, false, context);

View File

@@ -403,8 +403,13 @@ class BasicTestCase extends Test {
_testWithTempSet();
}
function testPrintMacrosCheck() {
_testPrintMacrosCheck();
var nullDefinedInHaxe = null;
static var staticNullDefinedInHaxe = null;
function testPrintMacros() {
// TODO Test the warnings
_testPrintMacrosInstance();
_testPrintMacrosStatic();
}
function testTypeCase() {

View File

@@ -768,14 +768,54 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m
(assertEquals 3 v2))
(Assert.pass))
(var anotherNullToPrint null)
(function _testPrintMacrosCheck []
(printAllNulls)
(var t "bad")
(let [u "good"]
(localVar v "bad")
(printLocalNulls))
(Assert.pass))
(var &mut savedPrints [])
(function savePrint []
(set savedPrints [])
->:Void [:String s] (savedPrints.push s))
(prop anotherNullToPrint null)
(var anotherStaticNullToPrint null)
(method _testPrintMacrosInstance []
(withTempSet [Prelude.printStr (savePrint)]
(printAllNulls)
(Assert.isTrue (savedPrints.contains "anotherNullToPrint: null"))
(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")
(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 []
(typeCase ["a"]