From 30c465617dd5da14daab32802dc7a42df5861d0d Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 9 Nov 2021 12:22:37 -0700 Subject: [PATCH] cache converted hscript from ktxt2 --- .gitignore | 3 ++- kiss/src/kiss/KissInterp.hx | 17 ++++++++++++++++- kiss/src/kiss/Prelude.hx | 4 ++++ projects/kiss-vscode/src/ktxt2/KTxt2.kiss | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 940719b0..62465364 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ bin/ -externLog.txt \ No newline at end of file +externLog.txt +*.memoized \ No newline at end of file diff --git a/kiss/src/kiss/KissInterp.hx b/kiss/src/kiss/KissInterp.hx index 5fdb3fd9..36a6a7f7 100644 --- a/kiss/src/kiss/KissInterp.hx +++ b/kiss/src/kiss/KissInterp.hx @@ -48,8 +48,23 @@ class KissInterp extends Interp { variables.set("kiss", {}); } + public var cacheConvertedHScript = false; + public function evalKiss(kissStr:String):Dynamic { - return evalHaxe(Prelude.convertToHScript(kissStr)); + #if !(sys || hxnodejs) + if (cacheConvertedHScript) { + throw "Cannot used cacheConvertedHScript on a non-sys target"; + } + #end + + var convert = + #if (sys || hxnodejs) + if (cacheConvertedHScript) { + Prelude.cachedConvertToHScript; + } else + #end + Prelude.convertToHScript; + return evalHaxe(convert(kissStr)); } public function evalHaxe(hscriptStr:String):Dynamic { diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index 336275bc..8fa2723a 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -506,6 +506,10 @@ class Prelude { #end } + #if (sys || hxnodejs) + public static var cachedConvertToHScript:String->String = cast(fsMemoize(convertToHScript, "convertToHScript")); + #end + public static function getTarget():KissTarget { return #if cpp Cpp; diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2.kiss b/projects/kiss-vscode/src/ktxt2/KTxt2.kiss index fe3b8712..7916c296 100644 --- a/projects/kiss-vscode/src/ktxt2/KTxt2.kiss +++ b/projects/kiss-vscode/src/ktxt2/KTxt2.kiss @@ -69,6 +69,7 @@ (let [&mut sourceText "" &mut outputText "" interp (new KissInterp)] + (set interp.cacheConvertedHScript true) (doFor ktxtElement (splitFileElements fileStream) (case ktxtElement ((Block (objectWith source output))