204 // String characters can be accessed with array-like indexing.. 205 @Override 206 public Object get(final Object key) { 207 final Object primitiveKey = JSType.toPrimitive(key, String.class); 208 final int index = ArrayIndex.getArrayIndex(primitiveKey); 209 if (index >= 0 && index < value.length()) { 210 return String.valueOf(value.charAt(index)); 211 } 212 return super.get(primitiveKey); 213 } 214 215 @Override 216 public Object get(final double key) { 217 if (isRepresentableAsInt(key)) { 218 return get((int)key); 219 } 220 return super.get(key); 221 } 222 223 @Override 224 public Object get(final long key) { 225 if (key >= 0 && key < value.length()) { 226 return String.valueOf(value.charAt((int)key)); 227 } 228 return super.get(key); 229 } 230 231 @Override 232 public Object get(final int key) { 233 if (key >= 0 && key < value.length()) { 234 return String.valueOf(value.charAt(key)); 235 } 236 return super.get(key); 237 } 238 239 @Override 240 public int getInt(final Object key, final int programPoint) { 241 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 242 } 243 244 @Override 245 public int getInt(final double key, final int programPoint) { 246 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 247 } 248 249 @Override 250 public int getInt(final long key, final int programPoint) { 251 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 252 } 253 254 @Override 255 public int getInt(final int key, final int programPoint) { 256 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 257 } 258 259 @Override 260 public long getLong(final Object key, final int programPoint) { 261 return JSType.toLongMaybeOptimistic(get(key), programPoint); 262 } 263 264 @Override 265 public long getLong(final double key, final int programPoint) { 266 return JSType.toLongMaybeOptimistic(get(key), programPoint); 267 } 268 269 @Override 270 public long getLong(final long key, final int programPoint) { 271 return JSType.toLongMaybeOptimistic(get(key), programPoint); 272 } 273 274 @Override 275 public long getLong(final int key, final int programPoint) { 276 return JSType.toLongMaybeOptimistic(get(key), programPoint); 277 } 278 279 @Override 280 public double getDouble(final Object key, final int programPoint) { 281 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 282 } 283 284 @Override 285 public double getDouble(final double key, final int programPoint) { 286 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 287 } 288 289 @Override 290 public double getDouble(final long key, final int programPoint) { 291 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 292 } 293 294 @Override 295 public double getDouble(final int key, final int programPoint) { 296 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 297 } 298 299 @Override 300 public boolean has(final Object key) { 301 final Object primitiveKey = JSType.toPrimitive(key, String.class); 302 final int index = ArrayIndex.getArrayIndex(primitiveKey); 303 return isValidStringIndex(index) || super.has(primitiveKey); 304 } 305 306 @Override 307 public boolean has(final int key) { 308 return isValidStringIndex(key) || super.has(key); 309 } 310 311 @Override 312 public boolean has(final long key) { 313 final int index = ArrayIndex.getArrayIndex(key); 314 return isValidStringIndex(index) || super.has(key); 315 } 316 317 @Override 318 public boolean has(final double key) { 319 final int index = ArrayIndex.getArrayIndex(key); 320 return isValidStringIndex(index) || super.has(key); 321 } 322 323 @Override 324 public boolean hasOwnProperty(final Object key) { 325 final Object primitiveKey = JSType.toPrimitive(key, String.class); 326 final int index = ArrayIndex.getArrayIndex(primitiveKey); 327 return isValidStringIndex(index) || super.hasOwnProperty(primitiveKey); 328 } 329 330 @Override 331 public boolean hasOwnProperty(final int key) { 332 return isValidStringIndex(key) || super.hasOwnProperty(key); 333 } 334 335 @Override 336 public boolean hasOwnProperty(final long key) { 337 final int index = ArrayIndex.getArrayIndex(key); 338 return isValidStringIndex(index) || super.hasOwnProperty(key); 339 } 340 341 @Override 342 public boolean hasOwnProperty(final double key) { 343 final int index = ArrayIndex.getArrayIndex(key); 344 return isValidStringIndex(index) || super.hasOwnProperty(key); 345 } 346 347 @Override 348 public boolean delete(final int key, final boolean strict) { 349 return checkDeleteIndex(key, strict)? false : super.delete(key, strict); 350 } 351 352 @Override 353 public boolean delete(final long key, final boolean strict) { 354 final int index = ArrayIndex.getArrayIndex(key); 355 return checkDeleteIndex(index, strict)? false : super.delete(key, strict); 356 } 357 358 @Override 359 public boolean delete(final double key, final boolean strict) { 360 final int index = ArrayIndex.getArrayIndex(key); 361 return checkDeleteIndex(index, strict)? false : super.delete(key, strict); 362 } 363 364 @Override 365 public boolean delete(final Object key, final boolean strict) { 366 final Object primitiveKey = JSType.toPrimitive(key, String.class); 367 final int index = ArrayIndex.getArrayIndex(primitiveKey); 368 return checkDeleteIndex(index, strict)? false : super.delete(primitiveKey, strict); 369 } 370 371 private boolean checkDeleteIndex(final int index, final boolean strict) { 372 if (isValidStringIndex(index)) { 373 if (strict) { 374 throw typeError("cant.delete.property", Integer.toString(index), ScriptRuntime.safeToString(this)); 375 } | 204 // String characters can be accessed with array-like indexing.. 205 @Override 206 public Object get(final Object key) { 207 final Object primitiveKey = JSType.toPrimitive(key, String.class); 208 final int index = ArrayIndex.getArrayIndex(primitiveKey); 209 if (index >= 0 && index < value.length()) { 210 return String.valueOf(value.charAt(index)); 211 } 212 return super.get(primitiveKey); 213 } 214 215 @Override 216 public Object get(final double key) { 217 if (isRepresentableAsInt(key)) { 218 return get((int)key); 219 } 220 return super.get(key); 221 } 222 223 @Override 224 public Object get(final int key) { 225 if (key >= 0 && key < value.length()) { 226 return String.valueOf(value.charAt(key)); 227 } 228 return super.get(key); 229 } 230 231 @Override 232 public int getInt(final Object key, final int programPoint) { 233 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 234 } 235 236 @Override 237 public int getInt(final double key, final int programPoint) { 238 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 239 } 240 241 @Override 242 public int getInt(final int key, final int programPoint) { 243 return JSType.toInt32MaybeOptimistic(get(key), programPoint); 244 } 245 246 @Override 247 public double getDouble(final Object key, final int programPoint) { 248 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 249 } 250 251 @Override 252 public double getDouble(final double key, final int programPoint) { 253 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 254 } 255 256 @Override 257 public double getDouble(final int key, final int programPoint) { 258 return JSType.toNumberMaybeOptimistic(get(key), programPoint); 259 } 260 261 @Override 262 public boolean has(final Object key) { 263 final Object primitiveKey = JSType.toPrimitive(key, String.class); 264 final int index = ArrayIndex.getArrayIndex(primitiveKey); 265 return isValidStringIndex(index) || super.has(primitiveKey); 266 } 267 268 @Override 269 public boolean has(final int key) { 270 return isValidStringIndex(key) || super.has(key); 271 } 272 273 @Override 274 public boolean has(final double key) { 275 final int index = ArrayIndex.getArrayIndex(key); 276 return isValidStringIndex(index) || super.has(key); 277 } 278 279 @Override 280 public boolean hasOwnProperty(final Object key) { 281 final Object primitiveKey = JSType.toPrimitive(key, String.class); 282 final int index = ArrayIndex.getArrayIndex(primitiveKey); 283 return isValidStringIndex(index) || super.hasOwnProperty(primitiveKey); 284 } 285 286 @Override 287 public boolean hasOwnProperty(final int key) { 288 return isValidStringIndex(key) || super.hasOwnProperty(key); 289 } 290 291 @Override 292 public boolean hasOwnProperty(final double key) { 293 final int index = ArrayIndex.getArrayIndex(key); 294 return isValidStringIndex(index) || super.hasOwnProperty(key); 295 } 296 297 @Override 298 public boolean delete(final int key, final boolean strict) { 299 return checkDeleteIndex(key, strict)? false : super.delete(key, strict); 300 } 301 302 @Override 303 public boolean delete(final double key, final boolean strict) { 304 final int index = ArrayIndex.getArrayIndex(key); 305 return checkDeleteIndex(index, strict)? false : super.delete(key, strict); 306 } 307 308 @Override 309 public boolean delete(final Object key, final boolean strict) { 310 final Object primitiveKey = JSType.toPrimitive(key, String.class); 311 final int index = ArrayIndex.getArrayIndex(primitiveKey); 312 return checkDeleteIndex(index, strict)? false : super.delete(primitiveKey, strict); 313 } 314 315 private boolean checkDeleteIndex(final int index, final boolean strict) { 316 if (isValidStringIndex(index)) { 317 if (strict) { 318 throw typeError("cant.delete.property", Integer.toString(index), ScriptRuntime.safeToString(this)); 319 } |