diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index cf7ce03..18d8dd5 100644 --- a/src/kiss/Kiss.hx +++ b/src/kiss/Kiss.hx @@ -24,7 +24,8 @@ typedef KissState = { fieldForms:Map, specialForms:Map, macros:Map, - wrapListExps:Bool + wrapListExps:Bool, + loadedFiles:Map }; class Kiss { @@ -37,7 +38,8 @@ class Kiss { fieldForms: FieldForms.builtins(), specialForms: SpecialForms.builtins(), macros: Macros.builtins(), - wrapListExps: true + wrapListExps: true, + loadedFiles: new Map() }; // Helpful aliases @@ -73,9 +75,12 @@ class Kiss { // (load... ) is the specialest of forms because it calls build() again and those fields need to be merged case CallExp({pos: _, def: Symbol("load")}, [{pos: _, def: StrExp(otherKissFile)}]): var filePath = Path.join([loadingDirectory, otherKissFile]); - var loadedFields = Kiss.build(filePath, k); - for (field in loadedFields) { - classFields.push(field); + if (!k.loadedFiles.exists(filePath)) { + var loadedFields = Kiss.build(filePath, k); + for (field in loadedFields) { + classFields.push(field); + } + k.loadedFiles[filePath] = true; } default: var field = readerExpToField(nextExp, k);