summaryrefslogtreecommitdiff
path: root/MLKRoot.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-07-26 19:23:28 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-07-26 19:23:28 +0200
commit0f7abae8b9525d60685ae3b9ecc2fb4131c766a4 (patch)
tree252c9c9e8c211b2e96ce7a764eff36c579fa7e18 /MLKRoot.m
parentac3c67818eaaf7e72e039bff93e4226f086b07e8 (diff)
Reader: Support quasiquotation.
Diffstat (limited to 'MLKRoot.m')
-rw-r--r--MLKRoot.m6
1 files changed, 4 insertions, 2 deletions
diff --git a/MLKRoot.m b/MLKRoot.m
index dc2560d..d007173 100644
--- a/MLKRoot.m
+++ b/MLKRoot.m
@@ -225,10 +225,12 @@ static id truify (BOOL value)
+(NSArray *) macroexpand_1:(NSArray *)args
{
id form = [args objectAtIndex:0];
- id env = [args count] > 1 ? [args objectAtIndex:1] : nil;
+ id env = [args count] > 1 ? denullify([args objectAtIndex:1]) : nil;
MLKLexicalContext *context = env ? (id)env : (id)[MLKLexicalContext globalContext];
- if ([context symbolNamesMacro:[form car]])
+ if ([form isKindOfClass:[MLKCons class]]
+ && (![form car] || [[form car] isKindOfClass:[MLKSymbol class]])
+ && [context symbolNamesMacro:[form car]])
{
id <MLKFuncallable> macrofun = [context macroForSymbol:[form car]];
form = denullify ([[macrofun applyToArray: