Changeset 12272
- Timestamp:
- 11/08/09 22:37:19 (11 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 1 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/AbstractArray.java
r12254 r12272 259 259 int currentLevel = Fixnum.getValue(currentPrintLevel); 260 260 if (currentLevel < maxLevel) { 261 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;261 final SpecialBindingsMark mark = thread.markSpecialBindings(); 262 262 thread.bindSpecial(_CURRENT_PRINT_LEVEL_, currentPrintLevel.incr()); 263 263 try { … … 282 282 } 283 283 finally { 284 thread. lastSpecialBinding = lastSpecialBinding;284 thread.resetSpecialBindings(mark); 285 285 } 286 286 } else -
trunk/abcl/src/org/armedbear/lisp/AbstractVector.java
r12254 r12272 245 245 final int length = length(); 246 246 final int limit = Math.min(length, maxLength); 247 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;247 final SpecialBindingsMark mark = thread.markSpecialBindings(); 248 248 thread.bindSpecial(_CURRENT_PRINT_LEVEL_, currentPrintLevel.incr()); 249 249 try … … 258 258 finally 259 259 { 260 thread. lastSpecialBinding = lastSpecialBinding;260 thread.resetSpecialBindings(mark); 261 261 } 262 262 if (limit < length) -
trunk/abcl/src/org/armedbear/lisp/Autoload.java
r12255 r12272 98 98 if (className != null) { 99 99 final LispThread thread = LispThread.currentThread(); 100 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;100 final SpecialBindingsMark mark = thread.markSpecialBindings(); 101 101 int loadDepth = Fixnum.getValue(_LOAD_DEPTH_.symbolValue()); 102 102 thread.bindSpecial(_LOAD_DEPTH_, Fixnum.getInstance(++loadDepth)); … … 129 129 } 130 130 finally { 131 thread. lastSpecialBinding = lastSpecialBinding;131 thread.resetSpecialBindings(mark); 132 132 } 133 133 } else -
trunk/abcl/src/org/armedbear/lisp/Closure.java
r12254 r12272 388 388 { 389 389 final LispThread thread = LispThread.currentThread(); 390 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;390 final SpecialBindingsMark mark = thread.markSpecialBindings(); 391 391 Environment ext = new Environment(environment); 392 392 bindRequiredParameters(ext, thread, objects); … … 406 406 finally 407 407 { 408 thread. lastSpecialBinding = lastSpecialBinding;408 thread.resetSpecialBindings(mark); 409 409 } 410 410 } … … 582 582 { 583 583 final LispThread thread = LispThread.currentThread(); 584 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;584 final SpecialBindingsMark mark = thread.markSpecialBindings(); 585 585 Environment ext = new Environment(environment); 586 586 if (optionalParameters.length == 0 && keywordParameters.length == 0) … … 606 606 finally 607 607 { 608 thread. lastSpecialBinding = lastSpecialBinding;608 thread.resetSpecialBindings(mark); 609 609 } 610 610 } … … 631 631 // returns. They are used only in the evaluation of initforms for 632 632 // optional and keyword arguments. 633 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;633 final SpecialBindingsMark mark = thread.markSpecialBindings(); 634 634 Environment ext = new Environment(environment); 635 635 // Section 3.4.4: "...the &environment parameter is bound along with … … 865 865 } 866 866 finally { 867 thread. lastSpecialBinding = lastSpecialBinding;867 thread.resetSpecialBindings(mark); 868 868 } 869 869 return array; -
trunk/abcl/src/org/armedbear/lisp/Cons.java
r12254 r12272 655 655 if (currentLevel < maxLevel) 656 656 { 657 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;657 final SpecialBindingsMark mark = thread.markSpecialBindings(); 658 658 thread.bindSpecial(_CURRENT_PRINT_LEVEL_, currentPrintLevel.incr()); 659 659 try … … 695 695 finally 696 696 { 697 thread. lastSpecialBinding = lastSpecialBinding;697 thread.resetSpecialBindings(mark); 698 698 } 699 699 } -
trunk/abcl/src/org/armedbear/lisp/Do.java
r12254 r12272 94 94 } 95 95 final LispThread thread = LispThread.currentThread(); 96 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;96 final SpecialBindingsMark mark = thread.markSpecialBindings(); 97 97 // Process declarations. 98 98 … … 198 198 finally 199 199 { 200 thread. lastSpecialBinding = lastSpecialBinding;200 thread.resetSpecialBindings(mark); 201 201 ext.inactive = true; 202 202 } -
trunk/abcl/src/org/armedbear/lisp/Function.java
r12255 r12272 274 274 } else { 275 275 final LispThread thread = LispThread.currentThread(); 276 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;276 final SpecialBindingsMark mark = thread.markSpecialBindings(); 277 277 thread.bindSpecial(Symbol.PRINT_LENGTH, Fixnum.THREE); 278 278 try { … … 280 280 } 281 281 finally { 282 thread. lastSpecialBinding = lastSpecialBinding;282 thread.resetSpecialBindings(mark); 283 283 } 284 284 } -
trunk/abcl/src/org/armedbear/lisp/Interpreter.java
r12255 r12272 326 326 try { 327 327 thread.resetStack(); 328 thread. lastSpecialBinding = null;328 thread.clearSpecialBindings(); 329 329 out._writeString("* "); 330 330 out._finishOutput(); … … 476 476 if (interpreter == null) { 477 477 final LispThread thread = LispThread.currentThread(); 478 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;478 final SpecialBindingsMark mark = thread.markSpecialBindings(); 479 479 thread.bindSpecial(Symbol.PRINT_ESCAPE, NIL); 480 480 try { … … 501 501 catch (Throwable t) {} 502 502 finally { 503 thread. lastSpecialBinding = lastSpecialBinding;503 thread.resetSpecialBindings(mark); 504 504 } 505 505 } … … 536 536 if (obj == EOF) 537 537 return error(new EndOfFile(stream)); 538 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;538 final SpecialBindingsMark mark = thread.markSpecialBindings(); 539 539 thread.bindSpecial(Symbol.DEBUGGER_HOOK, _DEBUGGER_HOOK_FUNCTION); 540 540 try { … … 542 542 } 543 543 finally { 544 thread. lastSpecialBinding = lastSpecialBinding;544 thread.resetSpecialBindings(mark); 545 545 } 546 546 } -
trunk/abcl/src/org/armedbear/lisp/Lisp.java
r12255 r12272 2029 2029 { 2030 2030 LispObject obj = args[j++]; 2031 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;2031 final SpecialBindingsMark mark = thread.markSpecialBindings(); 2032 2032 thread.bindSpecial(Symbol.PRINT_ESCAPE, NIL); 2033 2033 thread.bindSpecial(Symbol.PRINT_READABLY, NIL); 2034 sb.append(obj.writeToString()); 2035 thread.lastSpecialBinding = lastSpecialBinding; 2034 try { 2035 sb.append(obj.writeToString()); 2036 } 2037 finally { 2038 thread.resetSpecialBindings(mark); 2039 } 2036 2040 } 2037 2041 } … … 2041 2045 { 2042 2046 LispObject obj = args[j++]; 2043 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;2047 final SpecialBindingsMark mark = thread.markSpecialBindings(); 2044 2048 thread.bindSpecial(Symbol.PRINT_ESCAPE, T); 2045 2049 try { … … 2047 2051 } 2048 2052 finally { 2049 thread. lastSpecialBinding = lastSpecialBinding;2053 thread.resetSpecialBindings(mark); 2050 2054 } 2051 2055 } … … 2056 2060 { 2057 2061 LispObject obj = args[j++]; 2058 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;2062 final SpecialBindingsMark mark = thread.markSpecialBindings(); 2059 2063 thread.bindSpecial(Symbol.PRINT_ESCAPE, NIL); 2060 2064 thread.bindSpecial(Symbol.PRINT_RADIX, NIL); … … 2064 2068 } 2065 2069 finally { 2066 thread. lastSpecialBinding = lastSpecialBinding;2070 thread.resetSpecialBindings(mark); 2067 2071 } 2068 2072 } … … 2073 2077 { 2074 2078 LispObject obj = args[j++]; 2075 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;2079 final SpecialBindingsMark mark = thread.markSpecialBindings(); 2076 2080 thread.bindSpecial(Symbol.PRINT_ESCAPE, NIL); 2077 2081 thread.bindSpecial(Symbol.PRINT_RADIX, NIL); … … 2081 2085 } 2082 2086 finally { 2083 thread. lastSpecialBinding = lastSpecialBinding;2087 thread.resetSpecialBindings(mark); 2084 2088 } 2085 2089 } -
trunk/abcl/src/org/armedbear/lisp/LispThread.java
r12255 r12272 307 307 } 308 308 309 /** Marks the state of the special bindings, 310 * for later rewinding by resetSpecialBindings(). 311 */ 312 public final SpecialBindingsMark markSpecialBindings() { 313 return new SpecialBindingsMark(lastSpecialBinding); 314 } 315 316 /** Restores the state of the special bindings to what 317 * was captured in the marker 'mark' by a call to markSpecialBindings(). 318 */ 319 public final void resetSpecialBindings(SpecialBindingsMark mark) { 320 lastSpecialBinding = mark.binding; 321 } 322 323 /** Clears out all active special bindings including any marks 324 * previously set. Invoking resetSpecialBindings() with marks 325 * set before this call results in undefined behaviour. 326 */ 327 // Package level access: only for Interpreter.run() 328 final void clearSpecialBindings() { 329 lastSpecialBinding = null; 330 } 331 309 332 public final SpecialBinding bindSpecial(Symbol name, LispObject value) 310 333 { -
trunk/abcl/src/org/armedbear/lisp/Load.java
r12254 r12272 283 283 LispThread thread = LispThread.currentThread(); 284 284 if (auto) { 285 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;285 final SpecialBindingsMark mark = thread.markSpecialBindings(); 286 286 thread.bindSpecial(Symbol.CURRENT_READTABLE, 287 287 STANDARD_READTABLE.symbolValue(thread)); … … 294 294 } 295 295 finally { 296 thread. lastSpecialBinding = lastSpecialBinding;296 thread.resetSpecialBindings(mark); 297 297 } 298 298 } else { … … 387 387 if (in != null) { 388 388 final LispThread thread = LispThread.currentThread(); 389 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;389 final SpecialBindingsMark mark = thread.markSpecialBindings(); 390 390 thread.bindSpecial(_WARN_ON_REDEFINITION_, NIL); 391 391 try { … … 401 401 } 402 402 finally { 403 thread. lastSpecialBinding = lastSpecialBinding;403 thread.resetSpecialBindings(mark); 404 404 try { 405 405 in.close(); … … 482 482 long start = System.currentTimeMillis(); 483 483 final LispThread thread = LispThread.currentThread(); 484 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;484 final SpecialBindingsMark mark = thread.markSpecialBindings(); 485 485 // "LOAD binds *READTABLE* and *PACKAGE* to the values they held before 486 486 // loading the file." … … 528 528 } 529 529 finally { 530 thread. lastSpecialBinding = lastSpecialBinding;530 thread.resetSpecialBindings(mark); 531 531 } 532 532 } … … 550 550 551 551 { 552 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;552 final SpecialBindingsMark mark = thread.markSpecialBindings(); 553 553 thread.bindSpecial(_LOAD_STREAM_, in); 554 554 SpecialBinding sourcePositionBinding = 555 new SpecialBinding(_SOURCE_POSITION_, Fixnum.ZERO, 556 thread.lastSpecialBinding); 557 thread.lastSpecialBinding = sourcePositionBinding; 555 thread.bindSpecial(_SOURCE_POSITION_, Fixnum.ZERO); 558 556 try { 559 557 final Environment env = new Environment(); … … 579 577 } 580 578 finally { 581 thread. lastSpecialBinding = lastSpecialBinding;579 thread.resetSpecialBindings(mark); 582 580 } 583 581 } … … 588 586 Stream in = (Stream) _LOAD_STREAM_.symbolValue(thread); 589 587 final Environment env = new Environment(); 590 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;588 final SpecialBindingsMark mark = thread.markSpecialBindings(); 591 589 LispObject result = NIL; 592 590 try { … … 600 598 } 601 599 finally { 602 thread. lastSpecialBinding = lastSpecialBinding;600 thread.resetSpecialBindings(mark); 603 601 } 604 602 return result; -
trunk/abcl/src/org/armedbear/lisp/Primitives.java
r12254 r12272 1643 1643 else 1644 1644 { 1645 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;1645 SpecialBindingsMark mark = thread.markSpecialBindings(); 1646 1646 thread.bindSpecial(Symbol._PACKAGE_, PACKAGE_CL); 1647 1647 try … … 1652 1652 finally 1653 1653 { 1654 thread. lastSpecialBinding = lastSpecialBinding;1654 thread.resetSpecialBindings(mark); 1655 1655 } 1656 1656 } … … 3459 3459 LispObject defs = checkList(args.car()); 3460 3460 final LispThread thread = LispThread.currentThread(); 3461 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;3461 final SpecialBindingsMark mark = thread.markSpecialBindings(); 3462 3462 3463 3463 try … … 3482 3482 finally 3483 3483 { 3484 thread. lastSpecialBinding = lastSpecialBinding;3484 thread.resetSpecialBindings(mark); 3485 3485 } 3486 3486 } … … 3749 3749 body = bodyAndDecls.car(); 3750 3750 3751 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;3751 final SpecialBindingsMark mark = thread.markSpecialBindings(); 3752 3752 final Environment ext = new Environment(env); 3753 3753 int i = 0; … … 3793 3793 finally 3794 3794 { 3795 thread. lastSpecialBinding = lastSpecialBinding;3795 thread.resetSpecialBindings(mark); 3796 3796 } 3797 3797 return result; -
trunk/abcl/src/org/armedbear/lisp/PrintNotReadable.java
r12254 r12272 90 90 if (object != UNBOUND_VALUE) { 91 91 final LispThread thread = LispThread.currentThread(); 92 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;92 final SpecialBindingsMark mark = thread.markSpecialBindings(); 93 93 thread.bindSpecial(Symbol.PRINT_READABLY, NIL); 94 94 thread.bindSpecial(Symbol.PRINT_ARRAY, NIL); … … 100 100 } 101 101 finally { 102 thread. lastSpecialBinding = lastSpecialBinding;102 thread.resetSpecialBindings(mark); 103 103 } 104 104 } else -
trunk/abcl/src/org/armedbear/lisp/SpecialOperators.java
r12254 r12272 115 115 { 116 116 final LispThread thread = LispThread.currentThread(); 117 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;117 final SpecialBindingsMark mark = thread.markSpecialBindings(); 118 118 try 119 119 { … … 167 167 finally 168 168 { 169 thread. lastSpecialBinding = lastSpecialBinding;169 thread.resetSpecialBindings(mark); 170 170 } 171 171 } … … 181 181 LispObject varList = checkList(args.car()); 182 182 final LispThread thread = LispThread.currentThread(); 183 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;183 final SpecialBindingsMark mark = thread.markSpecialBindings(); 184 184 Environment ext = new Environment(env); 185 185 try … … 216 216 finally 217 217 { 218 thread.lastSpecialBinding = lastSpecialBinding;218 thread.resetSpecialBindings(mark); 219 219 } 220 220 } … … 301 301 LispObject defs = checkList(args.car()); 302 302 final LispThread thread = LispThread.currentThread(); 303 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;303 final SpecialBindingsMark mark = thread.markSpecialBindings(); 304 304 final Environment funEnv = new Environment(env); 305 305 while (defs != NIL) … … 358 358 finally 359 359 { 360 thread. lastSpecialBinding = lastSpecialBinding;360 thread.resetSpecialBindings(mark); 361 361 } 362 362 } … … 410 410 final LispObject symbols = checkList(eval(args.car(), env, thread)); 411 411 LispObject values = checkList(eval(args.cadr(), env, thread)); 412 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;412 final SpecialBindingsMark mark = thread.markSpecialBindings(); 413 413 try 414 414 { … … 420 420 finally 421 421 { 422 thread. lastSpecialBinding = lastSpecialBinding;422 thread.resetSpecialBindings(mark); 423 423 } 424 424 } -
trunk/abcl/src/org/armedbear/lisp/Stream.java
r12255 r12272 469 469 else 470 470 { 471 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;471 final SpecialBindingsMark mark = thread.markSpecialBindings(); 472 472 thread.bindSpecial(_SHARP_EQUAL_ALIST_, NIL); 473 473 try … … 477 477 finally 478 478 { 479 thread. lastSpecialBinding = lastSpecialBinding;479 thread.resetSpecialBindings(mark); 480 480 } 481 481 } … … 544 544 else 545 545 { 546 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;546 final SpecialBindingsMark mark = thread.markSpecialBindings(); 547 547 thread.bindSpecial(_SHARP_EQUAL_ALIST_, NIL); 548 548 try … … 552 552 finally 553 553 { 554 thread. lastSpecialBinding = lastSpecialBinding;554 thread.resetSpecialBindings(mark); 555 555 } 556 556 } … … 1842 1842 { 1843 1843 LispThread thread = LispThread.currentThread(); 1844 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;1844 final SpecialBindingsMark mark = thread.markSpecialBindings(); 1845 1845 thread.bindSpecial(Symbol.PRINT_ESCAPE, T); 1846 1846 try … … 1850 1850 finally 1851 1851 { 1852 thread. lastSpecialBinding = lastSpecialBinding;1852 thread.resetSpecialBindings(mark); 1853 1853 } 1854 1854 } -
trunk/abcl/src/org/armedbear/lisp/Symbol.java
r12255 r12272 108 108 { 109 109 final LispThread thread = LispThread.currentThread(); 110 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;110 final SpecialBindingsMark mark = thread.markSpecialBindings(); 111 111 thread.bindSpecial(Symbol.PRINT_ESCAPE, NIL); 112 112 try … … 129 129 finally 130 130 { 131 thread. lastSpecialBinding = lastSpecialBinding;131 thread.resetSpecialBindings(mark); 132 132 } 133 133 } -
trunk/abcl/src/org/armedbear/lisp/TypeError.java
r12254 r12272 131 131 try { 132 132 final LispThread thread = LispThread.currentThread(); 133 final SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;133 final SpecialBindingsMark mark = thread.markSpecialBindings(); 134 134 thread.bindSpecial(Symbol.PRINT_ESCAPE, T); 135 135 try { … … 165 165 } 166 166 finally { 167 thread. lastSpecialBinding = lastSpecialBinding;167 thread.resetSpecialBindings(mark); 168 168 } 169 169 } -
trunk/abcl/src/org/armedbear/lisp/UnboundSlot.java
r12254 r12272 71 71 { 72 72 final LispThread thread = LispThread.currentThread(); 73 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;73 final SpecialBindingsMark mark = thread.markSpecialBindings(); 74 74 thread.bindSpecial(Symbol.PRINT_ESCAPE, T); 75 75 try { … … 82 82 } 83 83 finally { 84 thread. lastSpecialBinding = lastSpecialBinding;84 thread.resetSpecialBindings(mark); 85 85 } 86 86 } -
trunk/abcl/src/org/armedbear/lisp/UnboundVariable.java
r12254 r12272 50 50 { 51 51 LispThread thread = LispThread.currentThread(); 52 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;52 final SpecialBindingsMark mark = thread.markSpecialBindings(); 53 53 thread.bindSpecial(Symbol.PRINT_ESCAPE, T); 54 54 StringBuffer sb = new StringBuffer("The variable "); … … 60 60 catch (Throwable t) {} 61 61 finally { 62 thread. lastSpecialBinding = lastSpecialBinding;62 thread.resetSpecialBindings(mark); 63 63 } 64 64 sb.append(" is unbound."); -
trunk/abcl/src/org/armedbear/lisp/arglist.java
r12254 r12272 82 82 // Bind *PACKAGE* so we use the EXT package if we need 83 83 // to intern any symbols. 84 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;84 final SpecialBindingsMark mark = thread.markSpecialBindings(); 85 85 thread.bindSpecial(Symbol._PACKAGE_, PACKAGE_EXT); 86 86 try { … … 88 88 } 89 89 finally { 90 thread. lastSpecialBinding = lastSpecialBinding;90 thread.resetSpecialBindings(mark); 91 91 } 92 92 operator.setLambdaList(arglist); -
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r12234 r12272 240 240 (defconstant +lisp-special-binding+ "Lorg/armedbear/lisp/SpecialBinding;") 241 241 (defconstant +lisp-special-binding-class+ "org/armedbear/lisp/SpecialBinding") 242 (defconstant +lisp-special-bindings-mark+ "Lorg/armedbear/lisp/SpecialBindingsMark;") 243 (defconstant +lisp-special-bindings-mark-class+ "org/armedbear/lisp/SpecialBindingsMark") 242 244 (defconstant +lisp-throw-class+ "org/armedbear/lisp/Throw") 243 245 (defconstant +lisp-return-class+ "org/armedbear/lisp/Return") … … 4047 4049 4048 4050 (defun restore-dynamic-environment (register) 4049 (emit-push-current-thread) 4050 (aload register) 4051 (emit 'putfield +lisp-thread-class+ "lastSpecialBinding" 4052 +lisp-special-binding+)) 4051 (emit-push-current-thread) 4052 (aload register) 4053 ;; (emit 'putfield +lisp-thread-class+ "lastSpecialBinding" 4054 ;; +lisp-special-binding+) 4055 (emit-invokevirtual +lisp-thread-class+ "resetSpecialBindings" 4056 (list +lisp-special-bindings-mark+) nil) 4057 ) 4053 4058 4054 4059 (defun save-dynamic-environment (register) 4055 (emit-push-current-thread) 4056 (emit 'getfield +lisp-thread-class+ "lastSpecialBinding" 4057 +lisp-special-binding+) 4058 (astore register)) 4060 (emit-push-current-thread) 4061 ;; (emit 'getfield +lisp-thread-class+ "lastSpecialBinding" 4062 ;; +lisp-special-binding+) 4063 (emit-invokevirtual +lisp-thread-class+ "markSpecialBindings" 4064 nil +lisp-special-bindings-mark+) 4065 (astore register) 4066 ) 4059 4067 4060 4068 (defun restore-environment-and-make-handler (register label-START) -
trunk/abcl/src/org/armedbear/lisp/dolist.java
r12254 r12272 52 52 final LispThread thread = LispThread.currentThread(); 53 53 LispObject resultForm = args.cdr().cdr().car(); 54 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;54 final SpecialBindingsMark mark = thread.markSpecialBindings(); 55 55 // Process declarations. 56 56 LispObject bodyAndDecls = parseBody(bodyForm, false); … … 122 122 finally 123 123 { 124 thread. lastSpecialBinding = lastSpecialBinding;124 thread.resetSpecialBindings(mark); 125 125 ext.inactive = true; 126 126 } -
trunk/abcl/src/org/armedbear/lisp/dotimes.java
r12254 r12272 51 51 final LispThread thread = LispThread.currentThread(); 52 52 LispObject resultForm = args.cdr().cdr().car(); 53 SpecialBinding lastSpecialBinding = thread.lastSpecialBinding;53 final SpecialBindingsMark mark = thread.markSpecialBindings(); 54 54 55 55 LispObject bodyAndDecls = parseBody(bodyForm, false); … … 148 148 finally 149 149 { 150 thread. lastSpecialBinding = lastSpecialBinding;150 thread.resetSpecialBindings(mark); 151 151 ext.inactive = true; 152 152 }
Note: See TracChangeset
for help on using the changeset viewer.