168 private static ScriptObject wrapAdaptee(final ScriptObject adaptee) { 169 return new JO(adaptee); 170 } 171 172 @Override 173 public String getClassName() { 174 return "JSAdapter"; 175 } 176 177 @Override 178 public int getInt(final Object key, final int programPoint) { 179 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 180 } 181 182 @Override 183 public int getInt(final double key, final int programPoint) { 184 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 185 } 186 187 @Override 188 public int getInt(final long key, final int programPoint) { 189 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 190 } 191 192 @Override 193 public int getInt(final int key, final int programPoint) { 194 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 195 } 196 197 @Override 198 public long getLong(final Object key, final int programPoint) { 199 return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key); 200 } 201 202 @Override 203 public long getLong(final double key, final int programPoint) { 204 return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key); 205 } 206 207 @Override 208 public long getLong(final long key, final int programPoint) { 209 return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key); 210 } 211 212 @Override 213 public long getLong(final int key, final int programPoint) { 214 return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key); 215 } 216 217 @Override 218 public double getDouble(final Object key, final int programPoint) { 219 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 220 } 221 222 @Override 223 public double getDouble(final double key, final int programPoint) { 224 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 225 } 226 227 @Override 228 public double getDouble(final long key, final int programPoint) { 229 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 230 } 231 232 @Override 233 public double getDouble(final int key, final int programPoint) { 234 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 235 } 236 237 @Override 238 public Object get(final Object key) { 239 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 240 } 241 242 @Override 243 public Object get(final double key) { 244 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 245 } 246 247 @Override 248 public Object get(final long key) { 249 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 250 } 251 252 @Override 253 public Object get(final int key) { 254 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 255 } 256 257 @Override 258 public void set(final Object key, final int value, final int flags) { 259 if (overrides && super.hasOwnProperty(key)) { 260 super.set(key, value, flags); 261 } else { 262 callAdaptee(__put__, key, value, flags); 263 } 264 } 265 266 @Override 267 public void set(final Object key, final long value, final int flags) { 268 if (overrides && super.hasOwnProperty(key)) { 269 super.set(key, value, flags); 270 } else { 271 callAdaptee(__put__, key, value, flags); 272 } 273 } 274 275 @Override 276 public void set(final Object key, final double value, final int flags) { 277 if (overrides && super.hasOwnProperty(key)) { 278 super.set(key, value, flags); 279 } else { 280 callAdaptee(__put__, key, value, flags); 281 } 282 } 283 284 @Override 285 public void set(final Object key, final Object value, final int flags) { 286 if (overrides && super.hasOwnProperty(key)) { 287 super.set(key, value, flags); 288 } else { 289 callAdaptee(__put__, key, value, flags); 290 } 291 } 292 293 @Override 294 public void set(final double key, final int value, final int flags) { 295 if (overrides && super.hasOwnProperty(key)) { 296 super.set(key, value, flags); 297 } else { 298 callAdaptee(__put__, key, value, flags); 299 } 300 } 301 302 @Override 303 public void set(final double key, final long value, final int flags) { 304 if (overrides && super.hasOwnProperty(key)) { 305 super.set(key, value, flags); 306 } else { 307 callAdaptee(__put__, key, value, flags); 308 } 309 } 310 311 @Override 312 public void set(final double key, final double value, final int flags) { 313 if (overrides && super.hasOwnProperty(key)) { 314 super.set(key, value, flags); 315 } else { 316 callAdaptee(__put__, key, value, flags); 317 } 318 } 319 320 @Override 321 public void set(final double key, final Object value, final int flags) { 322 if (overrides && super.hasOwnProperty(key)) { 323 super.set(key, value, flags); 324 } else { 325 callAdaptee(__put__, key, value, flags); 326 } 327 } 328 329 @Override 330 public void set(final long key, final int value, final int flags) { 331 if (overrides && super.hasOwnProperty(key)) { 332 super.set(key, value, flags); 333 } else { 334 callAdaptee(__put__, key, value, flags); 335 } 336 } 337 338 @Override 339 public void set(final long key, final long value, final int flags) { 340 if (overrides && super.hasOwnProperty(key)) { 341 super.set(key, value, flags); 342 } else { 343 callAdaptee(__put__, key, value, flags); 344 } 345 } 346 347 @Override 348 public void set(final long key, final double value, final int flags) { 349 if (overrides && super.hasOwnProperty(key)) { 350 super.set(key, value, flags); 351 } else { 352 callAdaptee(__put__, key, value, flags); 353 } 354 } 355 356 @Override 357 public void set(final long key, final Object value, final int flags) { 358 if (overrides && super.hasOwnProperty(key)) { 359 super.set(key, value, flags); 360 } else { 361 callAdaptee(__put__, key, value, flags); 362 } 363 } 364 365 @Override 366 public void set(final int key, final int value, final int flags) { 367 if (overrides && super.hasOwnProperty(key)) { 368 super.set(key, value, flags); 369 } else { 370 callAdaptee(__put__, key, value, flags); 371 } 372 } 373 374 @Override 375 public void set(final int key, final long value, final int flags) { 376 if (overrides && super.hasOwnProperty(key)) { 377 super.set(key, value, flags); 378 } else { 379 callAdaptee(__put__, key, value, flags); 380 } 381 } 382 383 @Override 384 public void set(final int key, final double value, final int flags) { 385 if (overrides && super.hasOwnProperty(key)) { 386 super.set(key, value, flags); 387 } else { 388 callAdaptee(__put__, key, value, flags); 389 } 390 } 391 392 @Override 393 public void set(final int key, final Object value, final int flags) { 394 if (overrides && super.hasOwnProperty(key)) { 395 super.set(key, value, flags); 396 } else { 397 callAdaptee(__put__, key, value, flags); 398 } 399 } 400 401 @Override 402 public boolean has(final Object key) { 403 if (overrides && super.hasOwnProperty(key)) { 404 return true; 405 } 406 407 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 408 } 409 410 @Override 411 public boolean has(final int key) { 412 if (overrides && super.hasOwnProperty(key)) { 413 return true; 414 } 415 416 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 417 } 418 419 @Override 420 public boolean has(final long key) { 421 if (overrides && super.hasOwnProperty(key)) { 422 return true; 423 } 424 425 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 426 } 427 428 @Override 429 public boolean has(final double key) { 430 if (overrides && super.hasOwnProperty(key)) { 431 return true; 432 } 433 434 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 435 } 436 437 @Override 438 public boolean delete(final int key, final boolean strict) { 439 if (overrides && super.hasOwnProperty(key)) { 440 return super.delete(key, strict); 441 } 442 443 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 444 } 445 446 @Override 447 public boolean delete(final long key, final boolean strict) { 448 if (overrides && super.hasOwnProperty(key)) { 449 return super.delete(key, strict); 450 } 451 452 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 453 } 454 455 @Override 456 public boolean delete(final double key, final boolean strict) { 457 if (overrides && super.hasOwnProperty(key)) { 458 return super.delete(key, strict); 459 } 460 461 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 462 } 463 464 @Override 465 public boolean delete(final Object key, final boolean strict) { 466 if (overrides && super.hasOwnProperty(key)) { 467 return super.delete(key, strict); 468 } 469 470 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 471 } 472 473 @Override 474 public Iterator<String> propertyIterator() { 475 // Try __getIds__ first, if not found then try __getKeys__ 650 try { 651 final GuardedInvocation inv = super.findSetMethod(desc, request); 652 if (inv != null) { 653 return inv; 654 } 655 } catch (final Exception e) { 656 //ignored 657 } 658 } 659 660 return findHook(desc, __put__); 661 } 662 663 // -- Internals only below this point 664 private Object callAdaptee(final String name, final Object... args) { 665 return callAdaptee(UNDEFINED, name, args); 666 } 667 668 private double callAdapteeDouble(final int programPoint, final String name, final Object... args) { 669 return JSType.toNumberMaybeOptimistic(callAdaptee(name, args), programPoint); 670 } 671 672 private long callAdapteeLong(final int programPoint, final String name, final Object... args) { 673 return JSType.toLongMaybeOptimistic(callAdaptee(name, args), programPoint); 674 } 675 676 private int callAdapteeInt(final int programPoint, final String name, final Object... args) { 677 return JSType.toInt32MaybeOptimistic(callAdaptee(name, args), programPoint); 678 } 679 680 private Object callAdaptee(final Object retValue, final String name, final Object... args) { 681 final Object func = adaptee.get(name); 682 if (func instanceof ScriptFunction) { 683 return ScriptRuntime.apply((ScriptFunction)func, adaptee, args); 684 } 685 return retValue; 686 } 687 688 private GuardedInvocation findHook(final CallSiteDescriptor desc, final String hook) { 689 return findHook(desc, hook, true); 690 } 691 692 private GuardedInvocation findHook(final CallSiteDescriptor desc, final String hook, final boolean useName) { 693 final FindProperty findData = adaptee.findProperty(hook, true); | 168 private static ScriptObject wrapAdaptee(final ScriptObject adaptee) { 169 return new JO(adaptee); 170 } 171 172 @Override 173 public String getClassName() { 174 return "JSAdapter"; 175 } 176 177 @Override 178 public int getInt(final Object key, final int programPoint) { 179 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 180 } 181 182 @Override 183 public int getInt(final double key, final int programPoint) { 184 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 185 } 186 187 @Override 188 public int getInt(final int key, final int programPoint) { 189 return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key); 190 } 191 192 @Override 193 public double getDouble(final Object key, final int programPoint) { 194 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 195 } 196 197 @Override 198 public double getDouble(final double key, final int programPoint) { 199 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 200 } 201 202 @Override 203 public double getDouble(final int key, final int programPoint) { 204 return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key); 205 } 206 207 @Override 208 public Object get(final Object key) { 209 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 210 } 211 212 @Override 213 public Object get(final double key) { 214 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 215 } 216 217 @Override 218 public Object get(final int key) { 219 return (overrides && super.hasOwnProperty(key)) ? super.get(key) : callAdaptee(__get__, key); 220 } 221 222 @Override 223 public void set(final Object key, final int value, final int flags) { 224 if (overrides && super.hasOwnProperty(key)) { 225 super.set(key, value, flags); 226 } else { 227 callAdaptee(__put__, key, value, flags); 228 } 229 } 230 231 @Override 232 public void set(final Object key, final double value, final int flags) { 233 if (overrides && super.hasOwnProperty(key)) { 234 super.set(key, value, flags); 235 } else { 236 callAdaptee(__put__, key, value, flags); 237 } 238 } 239 240 @Override 241 public void set(final Object key, final Object value, final int flags) { 242 if (overrides && super.hasOwnProperty(key)) { 243 super.set(key, value, flags); 244 } else { 245 callAdaptee(__put__, key, value, flags); 246 } 247 } 248 249 @Override 250 public void set(final double key, final int value, final int flags) { 251 if (overrides && super.hasOwnProperty(key)) { 252 super.set(key, value, flags); 253 } else { 254 callAdaptee(__put__, key, value, flags); 255 } 256 } 257 258 @Override 259 public void set(final double key, final double value, final int flags) { 260 if (overrides && super.hasOwnProperty(key)) { 261 super.set(key, value, flags); 262 } else { 263 callAdaptee(__put__, key, value, flags); 264 } 265 } 266 267 @Override 268 public void set(final double key, final Object value, final int flags) { 269 if (overrides && super.hasOwnProperty(key)) { 270 super.set(key, value, flags); 271 } else { 272 callAdaptee(__put__, key, value, flags); 273 } 274 } 275 276 @Override 277 public void set(final int key, final int value, final int flags) { 278 if (overrides && super.hasOwnProperty(key)) { 279 super.set(key, value, flags); 280 } else { 281 callAdaptee(__put__, key, value, flags); 282 } 283 } 284 285 @Override 286 public void set(final int key, final double value, final int flags) { 287 if (overrides && super.hasOwnProperty(key)) { 288 super.set(key, value, flags); 289 } else { 290 callAdaptee(__put__, key, value, flags); 291 } 292 } 293 294 @Override 295 public void set(final int key, final Object value, final int flags) { 296 if (overrides && super.hasOwnProperty(key)) { 297 super.set(key, value, flags); 298 } else { 299 callAdaptee(__put__, key, value, flags); 300 } 301 } 302 303 @Override 304 public boolean has(final Object key) { 305 if (overrides && super.hasOwnProperty(key)) { 306 return true; 307 } 308 309 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 310 } 311 312 @Override 313 public boolean has(final int key) { 314 if (overrides && super.hasOwnProperty(key)) { 315 return true; 316 } 317 318 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 319 } 320 321 @Override 322 public boolean has(final double key) { 323 if (overrides && super.hasOwnProperty(key)) { 324 return true; 325 } 326 327 return JSType.toBoolean(callAdaptee(Boolean.FALSE, __has__, key)); 328 } 329 330 @Override 331 public boolean delete(final int key, final boolean strict) { 332 if (overrides && super.hasOwnProperty(key)) { 333 return super.delete(key, strict); 334 } 335 336 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 337 } 338 339 @Override 340 public boolean delete(final double key, final boolean strict) { 341 if (overrides && super.hasOwnProperty(key)) { 342 return super.delete(key, strict); 343 } 344 345 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 346 } 347 348 @Override 349 public boolean delete(final Object key, final boolean strict) { 350 if (overrides && super.hasOwnProperty(key)) { 351 return super.delete(key, strict); 352 } 353 354 return JSType.toBoolean(callAdaptee(Boolean.TRUE, __delete__, key, strict)); 355 } 356 357 @Override 358 public Iterator<String> propertyIterator() { 359 // Try __getIds__ first, if not found then try __getKeys__ 534 try { 535 final GuardedInvocation inv = super.findSetMethod(desc, request); 536 if (inv != null) { 537 return inv; 538 } 539 } catch (final Exception e) { 540 //ignored 541 } 542 } 543 544 return findHook(desc, __put__); 545 } 546 547 // -- Internals only below this point 548 private Object callAdaptee(final String name, final Object... args) { 549 return callAdaptee(UNDEFINED, name, args); 550 } 551 552 private double callAdapteeDouble(final int programPoint, final String name, final Object... args) { 553 return JSType.toNumberMaybeOptimistic(callAdaptee(name, args), programPoint); 554 } 555 556 private int callAdapteeInt(final int programPoint, final String name, final Object... args) { 557 return JSType.toInt32MaybeOptimistic(callAdaptee(name, args), programPoint); 558 } 559 560 private Object callAdaptee(final Object retValue, final String name, final Object... args) { 561 final Object func = adaptee.get(name); 562 if (func instanceof ScriptFunction) { 563 return ScriptRuntime.apply((ScriptFunction)func, adaptee, args); 564 } 565 return retValue; 566 } 567 568 private GuardedInvocation findHook(final CallSiteDescriptor desc, final String hook) { 569 return findHook(desc, hook, true); 570 } 571 572 private GuardedInvocation findHook(final CallSiteDescriptor desc, final String hook, final boolean useName) { 573 final FindProperty findData = adaptee.findProperty(hook, true); |