Don't load files twice
This commit is contained in:
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user