OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * Copyright (C) 2012 Ericsson AB. All rights reserved. | 3 * Copyright (C) 2012 Ericsson AB. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 } else { | 493 } else { |
494 if (success) | 494 if (success) |
495 *success = false; | 495 *success = false; |
496 throwTypeError("Invalid Array element type", isolate); | 496 throwTypeError("Invalid Array element type", isolate); |
497 return Vector<RefPtr<T> >(); | 497 return Vector<RefPtr<T> >(); |
498 } | 498 } |
499 } | 499 } |
500 return result; | 500 return result; |
501 } | 501 } |
502 | 502 |
| 503 template <class T, class V8T> |
| 504 WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArrayUnch
ecked(v8::Local<v8::Value> v8Value, uint32_t length, v8::Isolate* isolate, bool*
success = 0) |
| 505 { |
| 506 WillBeHeapVector<RefPtrWillBeMember<T> > result; |
| 507 result.reserveInitialCapacity(length); |
| 508 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value); |
| 509 for (uint32_t i = 0; i < length; ++i) { |
| 510 v8::Handle<v8::Value> element = object->Get(i); |
| 511 |
| 512 if (V8T::hasInstance(element, isolate)) { |
| 513 v8::Handle<v8::Object> elementObject = v8::Handle<v8::Object>::C
ast(element); |
| 514 result.uncheckedAppend(V8T::toNative(elementObject)); |
| 515 } else { |
| 516 if (success) |
| 517 *success = false; |
| 518 throwTypeError("Invalid Array element type", isolate); |
| 519 return WillBeHeapVector<RefPtrWillBeMember<T> >(); |
| 520 } |
| 521 } |
| 522 return result; |
| 523 } |
| 524 |
503 v8::Handle<v8::Value> toV8Sequence(v8::Handle<v8::Value>, uint32_t& length,
v8::Isolate*); | 525 v8::Handle<v8::Value> toV8Sequence(v8::Handle<v8::Value>, uint32_t& length,
v8::Isolate*); |
504 | 526 |
505 template <class T, class V8T> | 527 template <class T, class V8T> |
506 Vector<RefPtr<T> > toRefPtrNativeArray(v8::Handle<v8::Value> value, int argu
mentIndex, v8::Isolate* isolate, bool* success = 0) | 528 Vector<RefPtr<T> > toRefPtrNativeArray(v8::Handle<v8::Value> value, int argu
mentIndex, v8::Isolate* isolate, bool* success = 0) |
507 { | 529 { |
508 if (success) | 530 if (success) |
509 *success = true; | 531 *success = true; |
510 | 532 |
511 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); | 533 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); |
512 uint32_t length = 0; | 534 uint32_t length = 0; |
513 if (value->IsArray()) { | 535 if (value->IsArray()) { |
514 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); | 536 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); |
515 } else if (toV8Sequence(value, length, isolate).IsEmpty()) { | 537 } else if (toV8Sequence(value, length, isolate).IsEmpty()) { |
516 throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argu
mentIndex), isolate); | 538 throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argu
mentIndex), isolate); |
517 return Vector<RefPtr<T> >(); | 539 return Vector<RefPtr<T> >(); |
518 } | 540 } |
519 | 541 |
520 return toRefPtrNativeArrayUnchecked<T, V8T>(v8Value, length, isolate, su
ccess); | 542 return toRefPtrNativeArrayUnchecked<T, V8T>(v8Value, length, isolate, su
ccess); |
521 } | 543 } |
522 | 544 |
523 template <class T, class V8T> | 545 template <class T, class V8T> |
| 546 WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8:
:Handle<v8::Value> value, int argumentIndex, v8::Isolate* isolate, bool* success
= 0) |
| 547 { |
| 548 if (success) |
| 549 *success = true; |
| 550 |
| 551 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); |
| 552 uint32_t length = 0; |
| 553 if (value->IsArray()) { |
| 554 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); |
| 555 } else if (toV8Sequence(value, length, isolate).IsEmpty()) { |
| 556 throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argu
mentIndex), isolate); |
| 557 return WillBeHeapVector<RefPtrWillBeMember<T> >(); |
| 558 } |
| 559 |
| 560 return toRefPtrWillBeMemberNativeArrayUnchecked<T, V8T>(v8Value, length,
isolate, success); |
| 561 } |
| 562 |
| 563 template <class T, class V8T> |
524 Vector<RefPtr<T> > toRefPtrNativeArray(v8::Handle<v8::Value> value, const St
ring& propertyName, v8::Isolate* isolate, bool* success = 0) | 564 Vector<RefPtr<T> > toRefPtrNativeArray(v8::Handle<v8::Value> value, const St
ring& propertyName, v8::Isolate* isolate, bool* success = 0) |
525 { | 565 { |
526 if (success) | 566 if (success) |
527 *success = true; | 567 *success = true; |
528 | 568 |
529 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); | 569 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); |
530 uint32_t length = 0; | 570 uint32_t length = 0; |
531 if (value->IsArray()) { | 571 if (value->IsArray()) { |
532 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); | 572 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); |
533 } else if (toV8Sequence(value, length, isolate).IsEmpty()) { | 573 } else if (toV8Sequence(value, length, isolate).IsEmpty()) { |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 m_isolate->ClearInterrupt(); | 755 m_isolate->ClearInterrupt(); |
716 } | 756 } |
717 | 757 |
718 private: | 758 private: |
719 v8::Isolate* m_isolate; | 759 v8::Isolate* m_isolate; |
720 }; | 760 }; |
721 | 761 |
722 } // namespace WebCore | 762 } // namespace WebCore |
723 | 763 |
724 #endif // V8Binding_h | 764 #endif // V8Binding_h |
OLD | NEW |