diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-12-13 17:33:40 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-12-13 17:33:40 +0000 |
commit | e86035f9f9fb002b247bd7ae60c8d6fb190c8f4c (patch) | |
tree | 238828036824842d59f7b0ae3f3f981b42a50de6 /src/jvm/clojure | |
parent | 59fede97ed5a7bb8f2531dd9bcbd08f36139e4ad (diff) |
added macroexpand-1 and macroexpand
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 19 |
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)) |