From 3612a5457deeebc05e749c2044b572020f6e3d1c Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 25 Oct 2021 20:28:24 -0400 Subject: [PATCH] AsyncEmbeddedScript allow libpath --- src/kiss/AsyncEmbeddedScript.hx | 9 +++++++-- src/kiss/Kiss.hx | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/kiss/AsyncEmbeddedScript.hx b/src/kiss/AsyncEmbeddedScript.hx index ec397d5..584d6a6 100644 --- a/src/kiss/AsyncEmbeddedScript.hx +++ b/src/kiss/AsyncEmbeddedScript.hx @@ -8,6 +8,7 @@ import sys.io.File; import haxe.io.Path; #end import kiss.Kiss; +import kiss.Prelude; import kiss.cloner.Cloner; typedef Continuation = () -> Void; @@ -40,7 +41,7 @@ class AsyncEmbeddedScript { public function new() {} #if macro - public static function build(dslFile:String, scriptFile:String):Array { + public static function build(dslHaxelib:String, dslFile:String, scriptFile:String):Array { var k = Kiss.defaultKissState(); var classPath = Context.getPosInfos(Context.currentPos()).file; @@ -50,11 +51,15 @@ class AsyncEmbeddedScript { var commandList:Array = []; + if (dslHaxelib.length > 0) { + dslFile = Path.join([Prelude.libPath(dslHaxelib), dslFile]); + } + // This brings in the DSL's functions and global variables. // As a side-effect, it also fills the KissState with the macros and reader macros that make the DSL syntax classFields = classFields.concat(Kiss.build(dslFile, k)); - scriptFile = Path.join([loadingDirectory, scriptFile]); + scriptFile = Path.join([loadingDirectory, scriptFile]); Reader.readAndProcess(Stream.fromFile(scriptFile), k, (nextExp) -> { var expr = Kiss.readerExpToHaxeExpr(nextExp, k); diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index d662bbb..54dd485 100644 --- a/src/kiss/Kiss.hx +++ b/src/kiss/Kiss.hx @@ -199,7 +199,12 @@ class Kiss { if (loadingDirectory == null) loadingDirectory = k.loadingDirectory; - var fullPath = Path.join([loadingDirectory, kissFile]); + var fullPath = if (Path.isAbsolute(kissFile)) { + kissFile; + } else { + Path.join([loadingDirectory, kissFile]); + }; + if (k.loadedFiles.exists(fullPath)) { return k.loadedFiles[fullPath]; }