From 5dd47261da905a4fbb0cc3caa02032da106c3fdf Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 31 Dec 2020 17:46:51 -0700 Subject: [PATCH] Better (load) call error checking --- kiss/src/kiss/Kiss.hx | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 0ceee2d9..9f329dff 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -97,14 +97,20 @@ class Kiss { #end switch (nextExp.def) { // (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]); - if (!k.loadedFiles.exists(filePath)) { - var loadedFields = Kiss.build(filePath, k, false); - for (field in loadedFields) { - classFields.push(field); - } - k.loadedFiles[filePath] = true; + case CallExp({pos: _, def: Symbol("load")}, loadArgs): + nextExp.checkNumArgs(1, 1, "(load \"[file]\")"); + switch (loadArgs[0].def) { + case StrExp(otherKissFile): + var filePath = Path.join([loadingDirectory, otherKissFile]); + if (!k.loadedFiles.exists(filePath)) { + var loadedFields = Kiss.build(filePath, k, false); + for (field in loadedFields) { + classFields.push(field); + } + k.loadedFiles[filePath] = true; + } + default: + throw CompileError.fromExp(loadArgs[0], "only argument to load should be a string literal"); } default: var field = readerExpToField(nextExp, k);