Changeset 10326


Ignore:
Timestamp:
11/02/05 17:35:28 (16 years ago)
Author:
piso
Message:

elt(): error reporting.

File:
1 edited

Legend:

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

    r10210 r10326  
    33 *
    44 * Copyright (C) 2002-2005 Peter Graves
    5  * $Id: Cons.java,v 1.68 2005-10-23 18:44:50 piso Exp $
     5 * $Id: Cons.java,v 1.69 2005-11-02 17:35:28 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    283283        int i = 0;
    284284        Cons cons = this;
    285         try {
    286             while (true) {
    287                 if (i == index)
    288                     return cons.car;
     285        while (true) {
     286            if (i == index)
     287                return cons.car;
     288            try {
    289289                cons = (Cons) cons.cdr;
    290                 ++i;
    291             }
    292         }
    293         catch (ClassCastException e) {
    294             if (cons.cdr == NIL)
    295                 signal(new TypeError("ELT: invalid index " + index + " for " +
    296                                      writeToString()));
    297             else
    298                 signal(new TypeError(this, "proper sequence"));
    299             // Not reached.
    300             return NIL;
     290            }
     291            catch (ClassCastException e) {
     292                if (cons.cdr == NIL) {
     293                    // Index too large.
     294                    signalTypeError(new Fixnum(index),
     295                                    list3(Symbol.INTEGER, Fixnum.ZERO,
     296                                          new Fixnum(length() - 1)));
     297                } else {
     298                    // Dotted list.
     299                    signalTypeError(cons.cdr, Symbol.LIST);
     300                }
     301                // Not reached.
     302                return NIL;
     303            }
     304            ++i;
    301305        }
    302306    }
Note: See TracChangeset for help on using the changeset viewer.