Changeset 4539
- Timestamp:
- 10/25/03 21:53:23 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/SpecialOperators.java
r4399 r4539 3 3 * 4 4 * Copyright (C) 2003 Peter Graves 5 * $Id: SpecialOperators.java,v 1. 6 2003-10-15 21:27:24piso Exp $5 * $Id: SpecialOperators.java,v 1.7 2003-10-25 21:53:23 piso Exp $ 6 6 * 7 7 * This program is free software; you can redistribute it and/or … … 114 114 return result; 115 115 } 116 117 // ### symbol-macrolet 118 private static final SpecialOperator SYMBOL_MACROLET = 119 new SpecialOperator("symbol-macrolet") 120 { 121 public LispObject execute(LispObject args, Environment env) 122 throws ConditionThrowable 123 { 124 boolean sequential = true; // FIXME Is this right? 125 LispObject varList = checkList(args.car()); 126 final LispThread thread = LispThread.currentThread(); 127 LispObject result = NIL; 128 if (varList != NIL) { 129 Environment oldDynEnv = thread.getDynamicEnvironment(); 130 try { 131 Environment ext = new Environment(env); 132 Environment evalEnv = sequential ? ext : env; 133 for (int i = varList.length(); i-- > 0;) { 134 LispObject obj = varList.car(); 135 varList = varList.cdr(); 136 if (obj instanceof Cons && obj.length() == 2) { 137 bind(checkSymbol(obj.car()), 138 new SymbolMacro(eval(obj.cadr(), evalEnv, thread)), 139 ext); 140 } else 141 throw new ConditionThrowable(new ProgramError("SYMBOL-MACROLET: bad symbol-expansion pair: " + obj)); 142 } 143 LispObject body = args.cdr(); 144 while (body != NIL) { 145 result = eval(body.car(), ext, thread); 146 body = body.cdr(); 147 } 148 } 149 finally { 150 thread.setDynamicEnvironment(oldDynEnv); 151 } 152 } else { 153 LispObject body = args.cdr(); 154 while (body != NIL) { 155 result = eval(body.car(), env, thread); 156 body = body.cdr(); 157 } 158 } 159 return result; 160 } 161 }; 116 162 117 163 // ### load-time-value … … 221 267 } 222 268 223 // ### symbol-macrolet224 private static final SpecialOperator SYMBOL_MACROLET =225 new SpecialOperator("symbol-macrolet")226 {227 public LispObject execute(LispObject args, Environment env)228 throws ConditionThrowable229 {230 throw new ConditionThrowable(new LispError("SYMBOL-MACROLET is not implemented"));231 }232 };233 234 269 // ### the 235 270 // the value-type form => result*
Note: See TracChangeset
for help on using the changeset viewer.