From d91d15c10279f3ad36830730f41e0b8872de813a Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 31 Dec 2020 17:09:30 -0700 Subject: [PATCH] fix (load) bug --- src/kiss/Kiss.hx | 8 ++++---- src/kiss/Reader.hx | 1 + src/test/cases/BasicTestCase.hx | 4 ++++ src/test/cases/BasicTestCase.kiss | 3 +++ src/test/cases/BasicTestCaseExtra.kiss | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 src/test/cases/BasicTestCaseExtra.kiss diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index 09f9260..0ceee2d 100644 --- a/src/kiss/Kiss.hx +++ b/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/src/kiss/Reader.hx b/src/kiss/Reader.hx index 85485e7..34b929e 100644 --- a/src/kiss/Reader.hx +++ b/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/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index 08b39a7..d55e5fc 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/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/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index 5c7683e..e0e5e3b 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/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/src/test/cases/BasicTestCaseExtra.kiss b/src/test/cases/BasicTestCaseExtra.kiss new file mode 100644 index 0000000..0faa84c --- /dev/null +++ b/src/test/cases/BasicTestCaseExtra.kiss @@ -0,0 +1 @@ +(defun loadedFunction [] "loaded") \ No newline at end of file