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