Changeset 15137


Ignore:
Timestamp:
11/01/19 15:52:54 (4 years ago)
Author:
Mark Evenson
Message:

Fix ANSI-TESTS GENSYM.ERROR.10 and GENSYM.ERROR.11
(Douglas Miles)

From <https://github.com/armedbear/abcl/commit/d19d9a2d87a4cf456fc0b949561343520c559e3d> and <https://github.com/armedbear/abcl/commit/74e2956a3f79f7ddf8fa1d9993c94ef917075d68>.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/Lisp.java

    r15036 r15137  
    11671167  {
    11681168    StringBuilder sb = new StringBuilder(prefix);
    1169     SpecialBinding binding = thread.getSpecialBinding(Symbol.GENSYM_COUNTER);
     1169    final Symbol gensymCounter = Symbol.GENSYM_COUNTER;
     1170    SpecialBinding binding = thread.getSpecialBinding(gensymCounter);
    11701171    final LispObject oldValue;
    11711172    if (binding != null) {
    11721173        oldValue = binding.value;
    1173         if (oldValue instanceof Fixnum
    1174                 || oldValue instanceof Bignum)
    1175           binding.value = oldValue.incr();
     1174        if ((oldValue instanceof Fixnum
     1175                || oldValue instanceof Bignum) && Fixnum.ZERO.isLessThanOrEqualTo(oldValue)) {
     1176            binding.value = oldValue.incr();
     1177        }
    11761178        else {
    1177            Symbol.GENSYM_COUNTER.setSymbolValue(Fixnum.ZERO);
     1179           binding.value = Fixnum.ZERO;
    11781180           error(new TypeError("The value of *GENSYM-COUNTER* was not a nonnegative integer. Old value: " +
    11791181                                oldValue.princToString() + " New value: 0"));
     
    11821184        // we're manipulating a global resource
    11831185        // make sure we operate thread-safely
    1184         synchronized (Symbol.GENSYM_COUNTER) {
    1185             oldValue = Symbol.GENSYM_COUNTER.getSymbolValue();
    1186             if (oldValue instanceof Fixnum
    1187                     || oldValue instanceof Bignum)
    1188                 Symbol.GENSYM_COUNTER.setSymbolValue(oldValue.incr());
     1186        synchronized (gensymCounter) {
     1187            oldValue = gensymCounter.getSymbolValue();
     1188            if ((oldValue instanceof Fixnum
     1189                    || oldValue instanceof Bignum) && Fixnum.ZERO.isLessThanOrEqualTo(oldValue))  {
     1190                gensymCounter.setSymbolValue(oldValue.incr());
     1191            }
    11891192            else {
    1190                Symbol.GENSYM_COUNTER.setSymbolValue(Fixnum.ZERO);
     1193               gensymCounter.setSymbolValue(Fixnum.ZERO);
    11911194               error(new TypeError("The value of *GENSYM-COUNTER* was not a nonnegative integer. Old value: " +
    11921195                                    oldValue.princToString() + " New value: 0"));
Note: See TracChangeset for help on using the changeset viewer.