Changeset 14548


Ignore:
Timestamp:
06/17/13 22:20:27 (10 years ago)
Author:
ehuelsmann
Message:

Backport exscribe crash fix to 1.2.0.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.2.x/src/org/armedbear/lisp/Package.java

    r14545 r14548  
    603603    public synchronized void shadowingImport(Symbol symbol)
    604604    {
    605         LispObject where = NIL;
    606605        final String symbolName = symbol.getName();
    607         Symbol sym = externalSymbols.get(symbol.name.toString());
    608         if (sym != null) {
    609             where = Keyword.EXTERNAL;
    610         } else {
     606        Symbol sym = externalSymbols.get(symbolName);
     607        if (sym == null)
    611608            sym = internalSymbols.get(symbol.name.toString());
    612             if (sym != null) {
    613                 where = Keyword.INTERNAL;
     609        }
     610        if (sym != null)
     611            if (sym != symbol) {
     612                if (shadowingSymbols != null)
     613                    shadowingSymbols.remove(symbolName);
     614                unintern(sym);
    614615            } else {
    615                 // Look in external symbols of used packages.
    616                 if (useList instanceof Cons) {
    617                     LispObject usedPackages = useList;
    618                     while (usedPackages != NIL) {
    619                         Package pkg = (Package) usedPackages.car();
    620                         sym = pkg.findExternalSymbol(symbol.name);
    621                         if (sym != null) {
    622                             where = Keyword.INHERITED;
    623                             break;
    624                         }
    625                         usedPackages = usedPackages.cdr();
    626                     }
    627                 }
    628             }
    629         }
    630         if (sym != null) {
    631             if (where == Keyword.INTERNAL || where == Keyword.EXTERNAL) {
    632                 if (sym != symbol) {
    633                     if (shadowingSymbols != null)
    634                         shadowingSymbols.remove(symbolName);
    635                     unintern(sym);
    636                 } else if (where == Keyword.INTERNAL) {
    637                     // Assert rgument is already correctly a shadowing import
    638                     Debug.assertTrue(shadowingSymbols != null);
    639                     Debug.assertTrue(shadowingSymbols.get(symbolName) != null);
    640                     return;
    641                 }
     616                // Assert argument is already correctly a shadowing import
     617                Debug.assertTrue(shadowingSymbols != null);
     618                Debug.assertTrue(shadowingSymbols.get(symbolName) != null);
     619                return;
    642620            }
    643621        }
Note: See TracChangeset for help on using the changeset viewer.