Changeset 11341


Ignore:
Timestamp:
10/11/08 16:19:51 (13 years ago)
Author:
ehuelsmann
Message:

Prevent circular reference: Symbol.ERROR.execute executes the symbol function,
which is the one we're currently calling from...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/Primitives.java

    r11335 r11341  
    13971397      public LispObject execute(LispObject[] args) throws ConditionThrowable
    13981398      {
    1399         if (args.length < 1)
    1400           {
    1401             return error(new WrongNumberOfArgumentsException(this));
    1402           }
    1403         LispObject datum = args[0];
    1404         if (datum instanceof Condition)
    1405           {
    1406             error((Condition)datum);
    1407             return NIL;
    1408           }
    1409         if (datum instanceof Symbol)
    1410           {
    1411             LispObject initArgs = NIL;
    1412             for (int i = 1; i < args.length; i++)
    1413               initArgs = new Cons(args[i], initArgs);
    1414             initArgs = initArgs.nreverse();
    1415             Condition condition;
    1416             if (datum == Symbol.FILE_ERROR)
    1417               condition = new FileError(initArgs);
    1418             else if (datum == Symbol.PACKAGE_ERROR)
    1419               condition = new PackageError(initArgs);
    1420             else if (datum == Symbol.PARSE_ERROR)
    1421               condition = new ParseError(initArgs);
    1422             else if (datum == Symbol.PRINT_NOT_READABLE)
    1423               condition = new PrintNotReadable(initArgs);
    1424             else if (datum == Symbol.PROGRAM_ERROR)
    1425               condition = new ProgramError(initArgs);
    1426             else if (datum == Symbol.READER_ERROR)
    1427               condition = new ReaderError(initArgs);
    1428             else if (datum == Symbol.SIMPLE_CONDITION)
    1429               condition = new SimpleCondition(initArgs);
    1430             else if (datum == Symbol.SIMPLE_WARNING)
    1431               condition = new SimpleWarning(initArgs);
    1432             else if (datum == Symbol.UNBOUND_SLOT)
    1433               condition = new UnboundSlot(initArgs);
    1434             else if (datum == Symbol.WARNING)
    1435               condition = new Warning(initArgs);
    1436             else if (datum == Symbol.SIMPLE_ERROR)
    1437               condition = new SimpleError(initArgs);
    1438             else if (datum == Symbol.SIMPLE_TYPE_ERROR)
    1439               condition = new SimpleTypeError(initArgs);
    1440             else if (datum == Symbol.CONTROL_ERROR)
    1441               condition = new ControlError(initArgs);
    1442             else if (datum == Symbol.TYPE_ERROR)
    1443               condition = new TypeError(initArgs);
    1444             else if (datum == Symbol.UNDEFINED_FUNCTION)
    1445               condition = new UndefinedFunction(initArgs);
    1446             else
    1447               // Default.
    1448               condition = new  SimpleError(initArgs);
    1449             error(condition);
    1450             return NIL;
    1451           }
    1452         // Default is SIMPLE-ERROR.
    1453         LispObject formatControl = args[0];
    1454         LispObject formatArguments = NIL;
    1455         for (int i = 1; i < args.length; i++)
    1456           formatArguments = new Cons(args[i], formatArguments);
    1457         formatArguments = formatArguments.nreverse();
    1458         error(new SimpleError(formatControl, formatArguments));
     1399        Error e = new Error();
     1400
     1401        e.printStackTrace();
     1402
     1403        System.out.println("ERROR placeholder called with arguments:");
     1404        for (LispObject a : args)
     1405            System.out.println(a.writeToString());
     1406
     1407        //###FIXME: Bail out, but do it nicer...
     1408        System.exit(1);
    14591409        return NIL;
    14601410      }
Note: See TracChangeset for help on using the changeset viewer.