summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-12-13 17:33:40 +0000
committerRich Hickey <richhickey@gmail.com>2007-12-13 17:33:40 +0000
commite86035f9f9fb002b247bd7ae60c8d6fb190c8f4c (patch)
tree238828036824842d59f7b0ae3f3f981b42a50de6 /src/jvm/clojure
parent59fede97ed5a7bb8f2531dd9bcbd08f36139e4ad (diff)
added macroexpand-1 and macroexpand
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index e3cf7354..f15795b2 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -2786,6 +2786,16 @@ static public class CompilerException extends Exception{
}
}
+static public Var isMacro(Object op) throws Exception{
+ if(op instanceof Symbol || op instanceof Var)
+ {
+ Var v = (op instanceof Var) ? (Var) op : lookupVar((Symbol) op, false);
+ if(v != null && v.isMacro())
+ return v;
+ }
+ return null;
+}
+
private static Expr analyzeSeq(C context, ISeq form, String name) throws Exception{
Integer line = (Integer) LINE.get();
try
@@ -2796,13 +2806,10 @@ private static Expr analyzeSeq(C context, ISeq form, String name) throws Excepti
RT.map(LINE, line));
Object op = RT.first(form);
//macro expansion
- if(op instanceof Symbol || op instanceof Var)
+ Var v = isMacro(op);
+ if(v != null)
{
- Var v = (op instanceof Var) ? (Var) op : lookupVar((Symbol) op, false);
- if(v != null && v.isMacro())
- {
- return analyze(context, v.applyTo(form.rest()));
- }
+ return analyze(context, v.applyTo(form.rest()));
}
IParser p;
if(op.equals(FN))