Changeset 12310
- Timestamp:
- 12/28/09 13:00:31 (14 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java
r12306 r12310 42 42 public class AutoloadedFunctionProxy extends Function { 43 43 44 public enum FunctionType 45 { 46 NORMAL, SETF, MACRO 47 }; 48 44 49 final private Symbol symbol; 45 50 final private String name; … … 47 52 final private LispObject pack; 48 53 final private LispObject anonymousPackage; 49 final private boolean isSetfFunction;54 final private FunctionType fType; 50 55 Function fun = null; 51 56 … … 53 58 LispObject cache, LispObject pack, 54 59 LispObject anonymousPackage, 55 boolean setfFunction) {60 FunctionType ft) { 56 61 super(); 57 62 this.symbol = symbol; … … 59 64 this.cache = cache; 60 65 this.pack = pack; 61 // Debug.trace("proxying ... " + name.getStringValue());62 66 Debug.assertTrue(! (cache instanceof Nil)); 63 67 this.anonymousPackage = anonymousPackage; 64 this. isSetfFunction = setfFunction;68 this.fType = ft; 65 69 } 66 70 … … 87 91 } 88 92 89 if (symbol != null) { 90 if (isSetfFunction) 91 put(symbol, Symbol.SETF_FUNCTION, fun); 93 if (symbol != null) 94 installFunction(fType, symbol, fun); 95 96 return fun; 97 } 98 99 final static private void installFunction(FunctionType fType, 100 Symbol sym, Function fun) { 101 102 if (fType == FunctionType.SETF) 103 put(sym, Symbol.SETF_FUNCTION, fun); 104 else if (fType == FunctionType.MACRO) { 105 if (sym.getSymbolFunction() instanceof SpecialOperator) 106 put(sym, Symbol.MACROEXPAND_MACRO, 107 new MacroObject(sym, fun)); 92 108 else 93 symbol.setSymbolFunction(fun); 94 } 95 96 return fun; 109 sym.setSymbolFunction(new MacroObject(sym, fun)); 110 } else 111 sym.setSymbolFunction(fun); 97 112 } 98 113 … … 215 230 LispThread thread = LispThread.currentThread(); 216 231 Symbol sym; 217 LispObjectfun;218 boolean setfFun = false;232 Function fun; 233 FunctionType fType = FunctionType.NORMAL; 219 234 220 235 if (symbol instanceof Symbol) … … 222 237 else if (isValidSetfFunctionName(symbol)) { 223 238 sym = (Symbol)symbol.cadr(); 224 setfFun = true; 239 fType = FunctionType.SETF; 240 } else if (isValidMacroFunctionName(symbol)) { 241 sym = (Symbol)symbol.cadr(); 242 fType = FunctionType.MACRO; 225 243 } else { 226 244 checkSymbol(symbol); // generate an error … … 236 254 fun = new AutoloadedFunctionProxy(sym, name, cache, pack, 237 255 Load._FASL_ANONYMOUS_PACKAGE_.symbolValue(thread), 238 setfFun); 239 if (setfFun) 240 put(sym, Symbol.SETF_FUNCTION, fun); 241 else 242 sym.setSymbolFunction(fun); 256 fType); 257 258 installFunction(fType, sym, fun); 243 259 } 244 260 -
trunk/abcl/src/org/armedbear/lisp/Lisp.java
r12306 r12310 1478 1478 return false; 1479 1479 } 1480 1481 public static final boolean isValidMacroFunctionName(LispObject obj) 1482 { 1483 if (obj instanceof Cons) 1484 { 1485 Cons cons = (Cons) obj; 1486 if (cons.car == Symbol.MACRO_FUNCTION && cons.cdr instanceof Cons) 1487 { 1488 Cons cdr = (Cons) cons.cdr; 1489 return (cdr.car instanceof Symbol && cdr.cdr == NIL); 1490 } 1491 } 1492 return false; 1493 } 1494 1480 1495 1481 1496 public static final LispObject FUNCTION_NAME = -
trunk/abcl/src/org/armedbear/lisp/compile-file.lisp
r12306 r12310 225 225 `(put ',name 'macroexpand-macro 226 226 (make-macro ',name 227 (load-compiled-function 227 (proxy-preloaded-function 228 '(macro-function ,name) 228 229 ,(file-namestring classfile)))) 229 230 `(fset ',name 230 231 (make-macro ',name 231 (load-compiled-function 232 (proxy-preloaded-function 233 '(macro-function ,name) 232 234 ,(file-namestring classfile))) 233 235 ,*source-position*
Note: See TracChangeset
for help on using the changeset viewer.