Changeset 12590
- Timestamp:
- 04/10/10 18:38:03 (14 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/Cons.java
r12589 r12590 135 135 136 136 @Override 137 public LispObject nthcdr(int n)138 {139 if (n < 0)140 return type_error(Fixnum.getInstance(n),141 list(Symbol.INTEGER, Fixnum.ZERO));142 LispObject result = this;143 for (int i = n; i-- > 0;)144 {145 result = result.cdr();146 if (result == NIL)147 break;148 }149 return result;150 }151 152 @Override153 137 public final int sxhash() 154 138 { … … 247 231 if (index < 0) 248 232 type_error(Fixnum.getInstance(index), Symbol.UNSIGNED_BYTE); 249 int i = 0;250 LispObject obj = this;251 while (true)252 {253 if (i == index)254 return obj.car();255 obj = obj.cdr();256 if (obj == NIL)257 return NIL;258 ++i;259 }260 }261 262 @Override263 public LispObject NTH(LispObject arg)264 {265 int index;266 if (arg instanceof Fixnum)267 {268 index = ((Fixnum)arg).value;269 }270 else271 {272 if (arg instanceof Bignum)273 {274 // FIXME (when machines have enough memory for it to matter)275 if (arg.minusp())276 return type_error(arg, Symbol.UNSIGNED_BYTE);277 return NIL;278 }279 return type_error(arg, Symbol.UNSIGNED_BYTE);280 }281 if (index < 0)282 type_error(arg, Symbol.UNSIGNED_BYTE);283 233 int i = 0; 284 234 LispObject obj = this; -
trunk/abcl/src/org/armedbear/lisp/LispObject.java
r12589 r12590 223 223 } 224 224 225 public LispObject nthcdr(int n)225 public final LispObject nthcdr(int n) 226 226 { 227 227 if (n < 0) 228 228 return type_error(Fixnum.getInstance(n), 229 229 list(Symbol.INTEGER, Fixnum.ZERO)); 230 if (this instanceof Cons) { 231 LispObject result = this; 232 for (int i = n; i-- > 0;) { 233 result = result.cdr(); 234 if (result == NIL) 235 break; 236 } 237 return result; 238 } else if (this instanceof Nil) { 239 return NIL; 240 } 230 241 return type_error(this, Symbol.LIST); 231 242 } … … 483 494 } 484 495 485 public LispObject NTH(LispObject arg)486 { 487 return type_error(this, Symbol.LIST);496 public final LispObject NTH(LispObject arg) 497 { 498 return NTH(Fixnum.getValue(arg)); 488 499 } 489 500 -
trunk/abcl/src/org/armedbear/lisp/Nil.java
r12589 r12590 108 108 109 109 @Override 110 public LispObject nthcdr(int n)111 {112 if (n < 0)113 return type_error(Fixnum.getInstance(n),114 list(Symbol.INTEGER, Fixnum.ZERO));115 return this;116 }117 118 @Override119 110 public int length() 120 111 { … … 129 120 " is not of type UNSIGNED-BYTE.")); 130 121 return NIL; 131 }132 133 @Override134 public LispObject NTH(LispObject arg)135 {136 int index;137 if (arg instanceof Fixnum) {138 index = ((Fixnum) arg).value;139 } else if (arg instanceof Bignum) {140 if (arg.minusp())141 return error(new TypeError(arg, Symbol.UNSIGNED_BYTE));142 return NIL;143 } else144 return error(new TypeError(arg, Symbol.UNSIGNED_BYTE));145 if (index < 0)146 error(new TypeError(arg, Symbol.UNSIGNED_BYTE));147 return NIL;148 122 } 149 123
Note: See TracChangeset
for help on using the changeset viewer.