From 2788a3f104d1724ab490280e085c1fb9804b1222 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 23 Jan 2023 01:40:47 +0000 Subject: [PATCH] (#symbol) macro --- kiss/src/kiss/Macros.hx | 6 ++++++ kiss/src/kiss/Reader.hx | 1 + kiss/src/kiss/SpecialForms.hx | 5 +---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 641d85df..fed3b45d 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -273,6 +273,12 @@ class Macros { var b = wholeExp.expBuilder(); b.str(Context.definedValue(compileTimeResolveToString("The only argument to (#value...)", "a compiler flag's name", args[0], k))); }; + + k.doc("#symbol", 1, 1, '(#symbol "")'); + macros["#symbol"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + b.symbol(Context.definedValue(compileTimeResolveToString("The only argument to (#symbol...)", "a compiler flag's name", args[0], k))); + }; k.doc("or", 1, null, "(or )"); function _or(wholeExp:ReaderExp, args:Array, k) { diff --git a/kiss/src/kiss/Reader.hx b/kiss/src/kiss/Reader.hx index ea60c196..3c256b18 100644 --- a/kiss/src/kiss/Reader.hx +++ b/kiss/src/kiss/Reader.hx @@ -55,6 +55,7 @@ class Reader { forceSymbol("#case"); forceSymbol("#extern"); forceSymbol("#value"); + forceSymbol("#symbol"); readTable["/*"] = (stream:Stream, k) -> { stream.takeUntilAndDrop("*/"); diff --git a/kiss/src/kiss/SpecialForms.hx b/kiss/src/kiss/SpecialForms.hx index 920bf396..710078f3 100644 --- a/kiss/src/kiss/SpecialForms.hx +++ b/kiss/src/kiss/SpecialForms.hx @@ -108,10 +108,7 @@ class SpecialForms { k.doc("new", 1, null, '(new )'); map["new"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { - var classType = switch (args[0].def) { - case Symbol(name): name; - default: throw KissError.fromExp(args[0], 'first arg in (new [type] ...) should be a class to instantiate'); - }; + var classType = k.convert(args[0]).toString(); ENew(Helpers.parseTypePath(classType, args[0]), args.slice(1).map(k.convert)).withMacroPosOf(wholeExp); };