Changeset 11778


Ignore:
Timestamp:
04/23/09 20:46:27 (14 years ago)
Author:
vvoutilainen
Message:

Fix declaration of free specials for non-array execute.

File:
1 edited

Legend:

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

    r11777 r11778  
    399399      }
    400400    bindAuxVars(ext, thread);
     401    declareFreeSpecials(ext);
    401402    try
    402403      {
     
    557558                                  sixth, seventh, eighth);
    558559      }
     560  }
     561
     562  private final void declareFreeSpecials(Environment ext)
     563    throws ConditionThrowable
     564  {
     565    LispObject s = specials;
     566    special:
     567    while (s != NIL) {
     568      Symbol special = (Symbol)s.car();
     569      s = s.cdr();
     570      for (Symbol var : variables)
     571  if (special == var)
     572          continue special;
     573      for (Parameter parameter : auxVars)
     574        if (special == parameter.var)
     575          continue special;
     576      ext.declareSpecial(special);
     577    }
    559578  }
    560579
     
    580599      }
    581600    bindAuxVars(ext, thread);
    582     LispObject s = specials;
    583     special:
    584     while (s != NIL) {
    585       Symbol special = (Symbol)s.car();
    586       s = s.cdr();
    587       for (Symbol var : variables)
    588         if (special == var)
    589           continue special;
    590       for (Parameter parameter : auxVars)
    591         if (special == parameter.var)
    592           continue special;
    593       ext.declareSpecial(special);
    594     }
     601    declareFreeSpecials(ext);
    595602    try
    596603      {
Note: See TracChangeset for help on using the changeset viewer.