Pass KissState instead of convert

This commit is contained in:
2020-11-30 13:23:01 -07:00
parent 52e310d01a
commit 3f5e81f03e
5 changed files with 61 additions and 66 deletions

View File

@@ -8,13 +8,14 @@ import kiss.Reader;
import kiss.FieldForms;
import kiss.SpecialForms;
import kiss.Macros;
import kiss.Types;
import kiss.CompileError;
using kiss.Helpers;
using kiss.Reader;
using tink.MacroApi;
typedef ExprConversion = (ReaderExp) -> Expr;
typedef KissState = {
className:String,
readTable:Map<String, ReadFunction>,
@@ -90,7 +91,7 @@ class Kiss {
var expandedExp = macros[mac](exp, args, k);
if (expandedExp != null) readerExpToField(macros[mac](expandedExp, args, k), k) else null;
case CallExp({pos: _, def: Symbol(formName)}, args) if (fieldForms.exists(formName)):
fieldForms[formName](exp, args, readerExpToHaxeExpr.bind(_, k));
fieldForms[formName](exp, args, k);
default:
throw CompileError.fromExp(exp, 'invalid valid field form');
};
@@ -112,7 +113,7 @@ class Kiss {
case CallExp({pos: _, def: Symbol(mac)}, args) if (macros.exists(mac)):
convert(macros[mac](exp, args, k));
case CallExp({pos: _, def: Symbol(specialForm)}, args) if (specialForms.exists(specialForm)):
specialForms[specialForm](exp, args, convert);
specialForms[specialForm](exp, args, k);
case CallExp(func, body):
ECall(convert(func), [for (bodyExp in body) convert(bodyExp)]).withContextPos();
case ListExp(elements):