Don't load files twice

This commit is contained in:
2020-12-10 12:38:33 -07:00
parent 2da6e032da
commit 1ae7bca8c2

View File

@@ -24,7 +24,8 @@ typedef KissState = {
fieldForms:Map<String, FieldFormFunction>, fieldForms:Map<String, FieldFormFunction>,
specialForms:Map<String, SpecialFormFunction>, specialForms:Map<String, SpecialFormFunction>,
macros:Map<String, MacroFunction>, macros:Map<String, MacroFunction>,
wrapListExps:Bool wrapListExps:Bool,
loadedFiles:Map<String, Bool>
}; };
class Kiss { class Kiss {
@@ -37,7 +38,8 @@ class Kiss {
fieldForms: FieldForms.builtins(), fieldForms: FieldForms.builtins(),
specialForms: SpecialForms.builtins(), specialForms: SpecialForms.builtins(),
macros: Macros.builtins(), macros: Macros.builtins(),
wrapListExps: true wrapListExps: true,
loadedFiles: new Map<String, Bool>()
}; };
// Helpful aliases // Helpful aliases
@@ -73,10 +75,13 @@ class Kiss {
// (load... ) is the specialest of forms because it calls build() again and those fields need to be merged // (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)}]): case CallExp({pos: _, def: Symbol("load")}, [{pos: _, def: StrExp(otherKissFile)}]):
var filePath = Path.join([loadingDirectory, otherKissFile]); var filePath = Path.join([loadingDirectory, otherKissFile]);
if (!k.loadedFiles.exists(filePath)) {
var loadedFields = Kiss.build(filePath, k); var loadedFields = Kiss.build(filePath, k);
for (field in loadedFields) { for (field in loadedFields) {
classFields.push(field); classFields.push(field);
} }
k.loadedFiles[filePath] = true;
}
default: default:
var field = readerExpToField(nextExp, k); var field = readerExpToField(nextExp, k);
if (field != null) { if (field != null) {