(#symbol) macro
This commit is contained in:
@@ -273,6 +273,12 @@ class Macros {
|
|||||||
var b = wholeExp.expBuilder();
|
var b = wholeExp.expBuilder();
|
||||||
b.str(Context.definedValue(compileTimeResolveToString("The only argument to (#value...)", "a compiler flag's name", args[0], k)));
|
b.str(Context.definedValue(compileTimeResolveToString("The only argument to (#value...)", "a compiler flag's name", args[0], k)));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
k.doc("#symbol", 1, 1, '(#symbol "<name>")');
|
||||||
|
macros["#symbol"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, 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 <v1> <values...>)");
|
k.doc("or", 1, null, "(or <v1> <values...>)");
|
||||||
function _or(wholeExp:ReaderExp, args:Array<ReaderExp>, k) {
|
function _or(wholeExp:ReaderExp, args:Array<ReaderExp>, k) {
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class Reader {
|
|||||||
forceSymbol("#case");
|
forceSymbol("#case");
|
||||||
forceSymbol("#extern");
|
forceSymbol("#extern");
|
||||||
forceSymbol("#value");
|
forceSymbol("#value");
|
||||||
|
forceSymbol("#symbol");
|
||||||
|
|
||||||
readTable["/*"] = (stream:Stream, k) -> {
|
readTable["/*"] = (stream:Stream, k) -> {
|
||||||
stream.takeUntilAndDrop("*/");
|
stream.takeUntilAndDrop("*/");
|
||||||
|
|||||||
@@ -108,10 +108,7 @@ class SpecialForms {
|
|||||||
|
|
||||||
k.doc("new", 1, null, '(new <type> <constructorArgs...>)');
|
k.doc("new", 1, null, '(new <type> <constructorArgs...>)');
|
||||||
map["new"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
map["new"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
||||||
var classType = switch (args[0].def) {
|
var classType = k.convert(args[0]).toString();
|
||||||
case Symbol(name): name;
|
|
||||||
default: throw KissError.fromExp(args[0], 'first arg in (new [type] ...) should be a class to instantiate');
|
|
||||||
};
|
|
||||||
ENew(Helpers.parseTypePath(classType, args[0]), args.slice(1).map(k.convert)).withMacroPosOf(wholeExp);
|
ENew(Helpers.parseTypePath(classType, args[0]), args.slice(1).map(k.convert)).withMacroPosOf(wholeExp);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user