diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 09f9260c..0ceee2d9 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -78,11 +78,11 @@ class Kiss { } /** - Build a Haxe class from a corresponding .kiss file + Build macro: add fields to a class from a corresponding .kiss file **/ - public static function build(kissFile:String, ?k:KissState):Array { + public static function build(kissFile:String, ?k:KissState, useClassFields = true):Array { return _try(() -> { - var classFields = Context.getBuildFields(); + var classFields:Array = if (useClassFields) Context.getBuildFields() else []; var stream = new Stream(kissFile); // (load... ) relative to the original file @@ -100,7 +100,7 @@ class Kiss { case CallExp({pos: _, def: Symbol("load")}, [{pos: _, def: StrExp(otherKissFile)}]): var filePath = Path.join([loadingDirectory, otherKissFile]); if (!k.loadedFiles.exists(filePath)) { - var loadedFields = Kiss.build(filePath, k); + var loadedFields = Kiss.build(filePath, k, false); for (field in loadedFields) { classFields.push(field); } diff --git a/kiss/src/kiss/Reader.hx b/kiss/src/kiss/Reader.hx index 85485e7e..34b929e7 100644 --- a/kiss/src/kiss/Reader.hx +++ b/kiss/src/kiss/Reader.hx @@ -175,6 +175,7 @@ class Reader { /** Read all the expressions in the given stream, processing them one by one while reading. + They can't be read all at once because some expressions change the Readtable state **/ public static function readAndProcess(stream:Stream, k:KissState, process:(ReaderExp) -> Void) { while (true) { diff --git a/kiss/src/test/cases/BasicTestCase.hx b/kiss/src/test/cases/BasicTestCase.hx index 08b39a72..d55e5fcf 100644 --- a/kiss/src/test/cases/BasicTestCase.hx +++ b/kiss/src/test/cases/BasicTestCase.hx @@ -261,6 +261,10 @@ class BasicTestCase extends Test { function testCallAlias() { _testCallAlias(); } + + function testLoadedFunction() { + Assert.equals("loaded", BasicTestCase.loadedFunction()); + } } class BasicObject { diff --git a/kiss/src/test/cases/BasicTestCase.kiss b/kiss/src/test/cases/BasicTestCase.kiss index 5c7683e8..e0e5e3b9 100644 --- a/kiss/src/test/cases/BasicTestCase.kiss +++ b/kiss/src/test/cases/BasicTestCase.kiss @@ -1,3 +1,6 @@ +// (load) brings in the fields and compile-time definitions of another Kiss file +(load "BasicTestCaseExtra.kiss") + // (defvar) declares static variables (defvar message "Howdy") diff --git a/kiss/src/test/cases/BasicTestCaseExtra.kiss b/kiss/src/test/cases/BasicTestCaseExtra.kiss new file mode 100644 index 00000000..0faa84c4 --- /dev/null +++ b/kiss/src/test/cases/BasicTestCaseExtra.kiss @@ -0,0 +1 @@ +(defun loadedFunction [] "loaded") \ No newline at end of file