1 21 22 package org.armedbear.lisp; 23 24 public class Autoload extends Function 25 { 26 protected final String fileName; 27 protected final String className; 28 29 protected Autoload(Symbol symbol) 30 { 31 super(symbol); 32 fileName = null; 33 className = null; 34 symbol.setBuiltInFunction(false); 35 } 36 37 protected Autoload(Symbol symbol, String fileName, String className) 38 { 39 super(symbol); 40 this.fileName = fileName; 41 this.className = className; 42 symbol.setBuiltInFunction(false); 43 } 44 45 public static void autoload(String symbolName, String className) 46 { 47 autoload(PACKAGE_CL, symbolName, className); 48 } 49 50 public static void autoload(Package pkg, String symbolName, 51 String className) 52 { 53 autoload(pkg, symbolName, className, false); 54 } 55 56 public static void autoload(Package pkg, String symbolName, 57 String className, boolean exported) 58 { 59 Symbol symbol = intern(symbolName.toUpperCase(), pkg); 60 if (pkg != PACKAGE_CL && exported) { 61 try { 62 pkg.export(symbol); 63 } 64 catch (ConditionThrowable t) { 65 Debug.assertTrue(false); 66 } 67 } 68 if (symbol.getSymbolFunction() == null) 69 symbol.setSymbolFunction(new Autoload(symbol, null, 70 "org.armedbear.lisp.".concat(className))); 71 } 72 73 public void load() throws ConditionThrowable 74 { 75 if (className != null) { 76 final LispThread thread = LispThread.currentThread(); 77 final Environment oldDynEnv = thread.getDynamicEnvironment(); 78 int loadDepth = Fixnum.getInt(_LOAD_DEPTH_.symbolValue()); 79 thread.bindSpecial(_LOAD_DEPTH_, new Fixnum(++loadDepth)); 80 try { 81 if (_AUTOLOAD_VERBOSE_.symbolValue(thread) != NIL) { 82 final String prefix = Load.getLoadVerbosePrefix(loadDepth); 83 Stream out = getStandardOutput(); 84 out._writeString(prefix); 85 out._writeString(" Autoloading "); 86 out._writeString(className); 87 out._writeLine(" ..."); 88 out._finishOutput(); 89 long start = System.currentTimeMillis(); 90 Class.forName(className); 91 long elapsed = System.currentTimeMillis() - start; 92 out._writeString(prefix); 93 out._writeString(" Autoloaded "); 94 out._writeString(className); 95 out._writeString(" ("); 96 out._writeString(String.valueOf(((float)elapsed)/1000)); 97 out._writeLine(" seconds)"); 98 out._finishOutput(); 99 } else 100 Class.forName(className); 101 } 102 catch (ClassNotFoundException e) { 103 e.printStackTrace(); 104 } 105 finally { 106 thread.setDynamicEnvironment(oldDynEnv); 107 } 108 } else 109 Load.loadSystemFile(getFileName(), true); 110 } 111 112 protected final String getFileName() 113 { 114 if (fileName != null) 115 return fileName; 116 return getSymbol().getName().toLowerCase(); 117 } 118 119 public final int getFunctionalType() 120 { 121 return FTYPE_AUTOLOAD; 122 } 123 124 public String writeToString() throws ConditionThrowable 125 { 126 StringBuffer sb = new StringBuffer ("#<AUTOLOAD "); 127 sb.append(getSymbol().writeToString()); 128 sb.append(" \""); 129 if (className != null) { 130 int index = className.lastIndexOf('.'); 131 if (index >= 0) 132 sb.append(className.substring(index + 1)); 133 else 134 sb.append(className); 135 sb.append(".class"); 136 } else 137 sb.append(getFileName()); 138 sb.append("\">"); 139 return sb.toString(); 140 } 141 142 private static final Primitive AUTOLOAD = 143 new Primitive("autoload", PACKAGE_EXT, true) 144 { 145 public LispObject execute(LispObject first) throws ConditionThrowable 146 { 147 if (first instanceof Symbol) { 148 Symbol symbol = (Symbol) first; 149 symbol.setSymbolFunction(new Autoload(symbol)); 150 return T; 151 } 152 if (first instanceof Cons) { 153 for (LispObject list = first; list != NIL; list = list.cdr()) { 154 Symbol symbol = checkSymbol(list.car()); 155 symbol.setSymbolFunction(new Autoload(symbol)); 156 } 157 return T; 158 } 159 return signal(new TypeError(first)); 160 } 161 public LispObject execute(LispObject first, LispObject second) 162 throws ConditionThrowable 163 { 164 final String fileName = second.getStringValue(); 165 if (first instanceof Symbol) { 166 Symbol symbol = (Symbol) first; 167 symbol.setSymbolFunction(new Autoload(symbol, fileName, null)); 168 return T; 169 } 170 if (first instanceof Cons) { 171 for (LispObject list = first; list != NIL; list = list.cdr()) { 172 Symbol symbol = checkSymbol(list.car()); 173 symbol.setSymbolFunction(new Autoload(symbol, fileName, null)); 174 } 175 return T; 176 } 177 return signal(new TypeError(first)); 178 } 179 }; 180 181 private static final Primitive1 RESOLVE = 184 new Primitive1("resolve", PACKAGE_EXT, true, "symbol") 185 { 186 public LispObject execute(LispObject arg) throws ConditionThrowable 187 { 188 Symbol symbol = checkSymbol(arg); 189 LispObject fun = symbol.getSymbolFunction(); 190 if (fun instanceof Autoload) { 191 Autoload autoload = (Autoload) fun; 192 autoload.load(); 193 return autoload.getSymbol().getSymbolFunction(); 194 } 195 return fun; 196 } 197 }; 198 199 private static final Primitive1 AUTOLOADP = 201 new Primitive1("autoloadp", PACKAGE_EXT, true, "symbol") 202 { 203 public LispObject execute(LispObject arg) throws ConditionThrowable 204 { 205 if (arg instanceof Symbol) { 206 if (arg.getSymbolFunction() instanceof Autoload) 207 return T; 208 } 209 return NIL; 210 } 211 }; 212 213 static { 214 autoload("acos", "MathFunctions"); 215 autoload("acosh", "MathFunctions"); 216 autoload("arithmetic-error-operands", "ArithmeticError"); 217 autoload("arithmetic-error-operation", "ArithmeticError"); 218 autoload("ash", "ash"); 219 autoload("asin", "MathFunctions"); 220 autoload("asinh", "MathFunctions"); 221 autoload("atan", "MathFunctions"); 222 autoload("atanh", "MathFunctions"); 223 autoload("broadcast-stream-streams", "BroadcastStream"); 224 autoload("ceiling", "ceiling"); 225 autoload("cell-error-name", "cell_error_name"); 226 autoload("char", "StringFunctions"); 227 autoload("char-equal", "CharacterFunctions"); 228 autoload("char-greaterp", "CharacterFunctions"); 229 autoload("char-lessp", "CharacterFunctions"); 230 autoload("char-not-greaterp", "CharacterFunctions"); 231 autoload("char-not-lessp", "CharacterFunctions"); 232 autoload("char<=", "CharacterFunctions"); 233 autoload("char=", "CharacterFunctions"); 234 autoload("clrhash", "HashTable"); 235 autoload("concatenated-stream-streams", "ConcatenatedStream"); 236 autoload("cos", "MathFunctions"); 237 autoload("cosh", "MathFunctions"); 238 autoload("delete-file", "delete_file"); 239 autoload("delete-package", "PackageFunctions"); 240 autoload("describe", "describe"); 241 autoload("echo-stream-input-stream", "EchoStream"); 242 autoload("echo-stream-output-stream", "EchoStream"); 243 autoload("exp", "MathFunctions"); 244 autoload("file-author", "file_author"); 245 autoload("file-error-pathname", "file_error_pathname"); 246 autoload("file-length", "file_length"); 247 autoload("file-string-length", "file_string_length"); 248 autoload("file-write-date", "file_write_date"); 249 autoload("float-sign", "float_sign"); 250 autoload("floor", "floor"); 251 autoload("ftruncate", "ftruncate"); 252 autoload("get-internal-real-time", "Time"); 253 autoload("get-internal-run-time", "Time"); 254 autoload("get-output-stream-string", "StringOutputStream"); 255 autoload("get-properties", "get_properties"); 256 autoload("get-universal-time", "Time"); 257 autoload("gethash", "HashTable"); 258 autoload("hash-table-count", "HashTable"); 259 autoload("hash-table-p", "HashTable"); 260 autoload("hash-table-rehash-size", "HashTable"); 261 autoload("hash-table-rehash-threshold", "HashTable"); 262 autoload("hash-table-size", "HashTable"); 263 autoload("hash-table-test", "HashTable"); 264 autoload("import", "PackageFunctions"); 265 autoload("input-stream-p", "input_stream_p"); 266 autoload("interactive-stream-p", "interactive_stream_p"); 267 autoload("last", "last"); 268 autoload("lisp-implementation-type", "lisp_implementation_type"); 269 autoload("lisp-implementation-version", "lisp_implementation_version"); 270 autoload("list-all-packages", "PackageFunctions"); 271 autoload("listen", "listen"); 272 autoload("load-logical-pathname-translations", "LogicalPathname"); 273 autoload("log", "MathFunctions"); 274 autoload("logand", "logand"); 275 autoload("logandc1", "logandc1"); 276 autoload("logandc2", "logandc2"); 277 autoload("logbitp", "logbitp"); 278 autoload("logcount", "logcount"); 279 autoload("logeqv", "logeqv"); 280 autoload("logical-pathname", "LogicalPathname"); 281 autoload("logical-pathname-translations", "LogicalPathname"); 282 autoload("logior", "logior"); 283 autoload("lognand", "lognand"); 284 autoload("lognor", "lognor"); 285 autoload("lognot", "lognot"); 286 autoload("logorc1", "logorc1"); 287 autoload("logorc2", "logorc2"); 288 autoload("logtest", "logtest"); 289 autoload("logxor", "logxor"); 290 autoload("long-site-name", "SiteName"); 291 autoload("machine-instance", "SiteName"); 292 autoload("machine-type", "machine_type"); 293 autoload("machine-version", "machine_version"); 294 autoload("make-broadcast-stream", "BroadcastStream"); 295 autoload("make-concatenated-stream", "ConcatenatedStream"); 296 autoload("make-echo-stream", "EchoStream"); 297 autoload("make-string-input-stream", "StringInputStream"); 298 autoload("make-synonym-stream", "SynonymStream"); 299 autoload("mod", "mod"); 300 autoload("open-stream-p", "open_stream_p"); 301 autoload("output-stream-p", "output_stream_p"); 302 autoload("package-error-package", "PackageError"); 303 autoload("package-name", "PackageFunctions"); 304 autoload("package-nicknames", "PackageFunctions"); 305 autoload("package-shadowing-symbols", "PackageFunctions"); 306 autoload("package-use-list", "PackageFunctions"); 307 autoload("package-used-by-list", "PackageFunctions"); 308 autoload("packagep", "PackageFunctions"); 309 autoload("peek-char", "peek_char"); 310 autoload("print-not-readable-object", "PrintNotReadable"); 311 autoload("probe-file", "probe_file"); 312 autoload("read-char-no-hang", "read_char_no_hang"); 313 autoload("read-delimited-list", "read_delimited_list"); 314 autoload("rem", "rem"); 315 autoload("remhash", "HashTable"); 316 autoload("rename-package", "PackageFunctions"); 317 autoload("room", "room"); 318 autoload("shadow", "PackageFunctions"); 319 autoload("shadowing-import", "PackageFunctions"); 320 autoload("short-site-name", "SiteName"); 321 autoload("simple-condition-format-arguments", "SimpleCondition"); 322 autoload("simple-condition-format-control", "SimpleCondition"); 323 autoload("simple-string-p", "StringFunctions"); 324 autoload("sin", "MathFunctions"); 325 autoload("sinh", "MathFunctions"); 326 autoload("software-type", "software_type"); 327 autoload("software-version", "software_version"); 328 autoload("sqrt", "MathFunctions"); 329 autoload("stream-element-type", "stream_element_type"); 330 autoload("stream-error-stream", "StreamError"); 331 autoload("stream-external-format", "stream_external_format"); 332 autoload("stringp", "StringFunctions"); 333 autoload("sxhash", "HashTable"); 334 autoload("synonym-stream-symbol", "SynonymStream"); 335 autoload("tan", "MathFunctions"); 336 autoload("tanh", "MathFunctions"); 337 autoload("truename", "probe_file"); 338 autoload("truncate", "truncate"); 339 autoload("unbound-slot-instance", "unbound_slot_instance"); 340 autoload("unexport", "PackageFunctions"); 341 autoload("unuse-package", "PackageFunctions"); 342 autoload(PACKAGE_EXT, "arglist", "arglist", true); 343 autoload(PACKAGE_EXT, "assq", "assq", true); 344 autoload(PACKAGE_EXT, "assql", "assql", true); 345 autoload(PACKAGE_EXT, "file-directory-p", "probe_file", true); 346 autoload(PACKAGE_EXT, "gc", "gc", true); 347 autoload(PACKAGE_EXT, "get-mutex", "Mutex", true); 348 autoload(PACKAGE_EXT, "mailbox-empty-p", "Mailbox", true); 349 autoload(PACKAGE_EXT, "mailbox-peek", "Mailbox", true); 350 autoload(PACKAGE_EXT, "mailbox-read", "Mailbox", true); 351 autoload(PACKAGE_EXT, "mailbox-send", "Mailbox", true); 352 autoload(PACKAGE_EXT, "make-mailbox", "Mailbox", true); 353 autoload(PACKAGE_EXT, "make-mutex", "Mutex", true); 354 autoload(PACKAGE_EXT, "make-thread-lock", "ThreadLock", true); 355 autoload(PACKAGE_EXT, "probe-directory", "probe_file", true); 356 autoload(PACKAGE_EXT, "release-mutex", "Mutex", true); 357 autoload(PACKAGE_EXT, "simple-string-fill", "StringFunctions"); 358 autoload(PACKAGE_EXT, "simple-string-search", "StringFunctions"); 359 autoload(PACKAGE_EXT, "string-input-stream-current", "StringInputStream", true); 360 autoload(PACKAGE_EXT, "string-position", "StringFunctions"); 361 autoload(PACKAGE_EXT, "thread-lock", "ThreadLock", true); 362 autoload(PACKAGE_EXT, "thread-unlock", "ThreadLock", true); 363 autoload(PACKAGE_JAVA, "%jnew-proxy", "JProxy"); 364 autoload(PACKAGE_JAVA, "%jnew-runtime-class", "RuntimeClass"); 365 autoload(PACKAGE_JAVA, "%jredefine-method", "RuntimeClass"); 366 autoload(PACKAGE_JAVA, "%jregister-handler", "JHandler"); 367 autoload(PACKAGE_JAVA, "%load-java-class-from-byte-array", "RuntimeClass"); 368 autoload(PACKAGE_PROF, "%start-profiler", "Profiler", true); 369 autoload(PACKAGE_PROF, "stop-profiler", "Profiler", true); 370 autoload(PACKAGE_SYS, "%%string=", "StringFunctions"); 371 autoload(PACKAGE_SYS, "%adjust-array", "adjust_array"); 372 autoload(PACKAGE_SYS, "%defpackage", "PackageFunctions"); 373 autoload(PACKAGE_SYS, "%make-array", "make_array"); 374 autoload(PACKAGE_SYS, "%make-condition", "make_condition"); 375 autoload(PACKAGE_SYS, "%make-hash-table", "HashTable"); 376 autoload(PACKAGE_SYS, "%make-server-socket", "make_server_socket"); 377 autoload(PACKAGE_SYS, "%make-socket", "make_socket"); 378 autoload(PACKAGE_SYS, "%make-string", "StringFunctions"); 379 autoload(PACKAGE_SYS, "%make-string-output-stream", "StringOutputStream"); 380 autoload(PACKAGE_SYS, "%nstring-capitalize", "StringFunctions"); 381 autoload(PACKAGE_SYS, "%nstring-downcase", "StringFunctions"); 382 autoload(PACKAGE_SYS, "%nstring-upcase", "StringFunctions"); 383 autoload(PACKAGE_SYS, "%run-shell-command", "ShellCommand"); 384 autoload(PACKAGE_SYS, "%server-socket-close", "server_socket_close"); 385 autoload(PACKAGE_SYS, "%set-arglist", "arglist"); 386 autoload(PACKAGE_SYS, "%set-char", "StringFunctions"); 387 autoload(PACKAGE_SYS, "%set-class-direct-slots", "SlotClass"); 388 autoload(PACKAGE_SYS, "%set-class-slots", "SlotClass"); 389 autoload(PACKAGE_SYS, "%set-function-info", "function_info"); 390 autoload(PACKAGE_SYS, "%set-generic-function-discriminating-function", "GenericFunction"); 391 autoload(PACKAGE_SYS, "%set-instance-ref", "StandardObject"); 392 autoload(PACKAGE_SYS, "%set-logical-pathname-translations", "LogicalPathname"); 393 autoload(PACKAGE_SYS, "%socket-accept", "socket_accept"); 394 autoload(PACKAGE_SYS, "%socket-close", "socket_close"); 395 autoload(PACKAGE_SYS, "%socket-stream", "socket_stream"); 396 autoload(PACKAGE_SYS, "%string-capitalize", "StringFunctions"); 397 autoload(PACKAGE_SYS, "%string-downcase", "StringFunctions"); 398 autoload(PACKAGE_SYS, "%string-equal", "StringFunctions"); 399 autoload(PACKAGE_SYS, "%string-greaterp", "StringFunctions"); 400 autoload(PACKAGE_SYS, "%string-lessp", "StringFunctions"); 401 autoload(PACKAGE_SYS, "%string-not-equal", "StringFunctions"); 402 autoload(PACKAGE_SYS, "%string-not-greaterp", "StringFunctions"); 403 autoload(PACKAGE_SYS, "%string-not-lessp", "StringFunctions"); 404 autoload(PACKAGE_SYS, "%string-upcase", "StringFunctions"); 405 autoload(PACKAGE_SYS, "%string/=", "StringFunctions"); 406 autoload(PACKAGE_SYS, "%string<", "StringFunctions"); 407 autoload(PACKAGE_SYS, "%string<=", "StringFunctions"); 408 autoload(PACKAGE_SYS, "%string=", "StringFunctions"); 409 autoload(PACKAGE_SYS, "%string>", "StringFunctions"); 410 autoload(PACKAGE_SYS, "%string>=", "StringFunctions"); 411 autoload(PACKAGE_SYS, "%time", "Time"); 412 autoload(PACKAGE_SYS, "allocate-slot-storage", "StandardObject"); 413 autoload(PACKAGE_SYS, "allocate-std-instance", "StandardObject"); 414 autoload(PACKAGE_SYS, "class-direct-slots", "SlotClass"); 415 autoload(PACKAGE_SYS, "class-slots", "SlotClass"); 416 autoload(PACKAGE_SYS, "condition-report", "Condition"); 417 autoload(PACKAGE_SYS, "create-new-file", "create_new_file"); 418 autoload(PACKAGE_SYS, "function-info", "function_info"); 419 autoload(PACKAGE_SYS, "default-time-zone", "Time"); 420 autoload(PACKAGE_SYS, "generic-function-discriminating-function", "GenericFunction"); 421 autoload(PACKAGE_SYS, "hash-table-entries", "HashTable"); 422 autoload(PACKAGE_SYS, "instance-ref", "StandardObject"); 423 autoload(PACKAGE_SYS, "layout-class", "Layout"); 424 autoload(PACKAGE_SYS, "layout-length", "Layout"); 425 autoload(PACKAGE_SYS, "make-case-frob-stream", "CaseFrobStream"); 426 autoload(PACKAGE_SYS, "make-file-stream", "FileStream"); 427 autoload(PACKAGE_SYS, "make-fill-pointer-output-stream", "FillPointerOutputStream"); 428 autoload(PACKAGE_SYS, "make-instance-standard-class", "StandardClass"); 429 autoload(PACKAGE_SYS, "make-layout", "Layout"); 430 autoload(PACKAGE_SYS, "make-structure-class", "StructureClass"); 431 autoload(PACKAGE_SYS, "make-symbol-macro", "SymbolMacro"); 432 autoload(PACKAGE_SYS, "puthash", "HashTable"); 433 autoload(PACKAGE_SYS, "simple-list-remove-duplicates", "simple_list_remove_duplicates"); 434 autoload(PACKAGE_SYS, "std-instance-slots", "StandardObject"); 435 } 436 } 437 | Popular Tags |