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