| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 | 669 |
| 670 Handle<JSObject> Factory::NewNeanderObject() { | 670 Handle<JSObject> Factory::NewNeanderObject() { |
| 671 CALL_HEAP_FUNCTION( | 671 CALL_HEAP_FUNCTION( |
| 672 isolate(), | 672 isolate(), |
| 673 isolate()->heap()->AllocateJSObjectFromMap( | 673 isolate()->heap()->AllocateJSObjectFromMap( |
| 674 isolate()->heap()->neander_map()), | 674 isolate()->heap()->neander_map()), |
| 675 JSObject); | 675 JSObject); |
| 676 } | 676 } |
| 677 | 677 |
| 678 | 678 |
| 679 Handle<Object> Factory::NewTypeError(const char* type, | 679 Handle<Object> Factory::NewTypeError(const char* message, |
| 680 Vector< Handle<Object> > args) { | 680 Vector< Handle<Object> > args) { |
| 681 return NewError("MakeTypeError", type, args); | 681 return NewError("MakeTypeError", message, args); |
| 682 } | 682 } |
| 683 | 683 |
| 684 | 684 |
| 685 Handle<Object> Factory::NewTypeError(Handle<String> message) { | 685 Handle<Object> Factory::NewTypeError(Handle<String> message) { |
| 686 return NewError("$TypeError", message); | 686 return NewError("$TypeError", message); |
| 687 } | 687 } |
| 688 | 688 |
| 689 | 689 |
| 690 Handle<Object> Factory::NewRangeError(const char* type, | 690 Handle<Object> Factory::NewRangeError(const char* message, |
| 691 Vector< Handle<Object> > args) { | 691 Vector< Handle<Object> > args) { |
| 692 return NewError("MakeRangeError", type, args); | 692 return NewError("MakeRangeError", message, args); |
| 693 } | 693 } |
| 694 | 694 |
| 695 | 695 |
| 696 Handle<Object> Factory::NewRangeError(Handle<String> message) { | 696 Handle<Object> Factory::NewRangeError(Handle<String> message) { |
| 697 return NewError("$RangeError", message); | 697 return NewError("$RangeError", message); |
| 698 } | 698 } |
| 699 | 699 |
| 700 | 700 |
| 701 Handle<Object> Factory::NewSyntaxError(const char* type, Handle<JSArray> args) { | 701 Handle<Object> Factory::NewSyntaxError(const char* message, |
| 702 return NewError("MakeSyntaxError", type, args); | 702 Handle<JSArray> args) { |
| 703 return NewError("MakeSyntaxError", message, args); |
| 703 } | 704 } |
| 704 | 705 |
| 705 | 706 |
| 706 Handle<Object> Factory::NewSyntaxError(Handle<String> message) { | 707 Handle<Object> Factory::NewSyntaxError(Handle<String> message) { |
| 707 return NewError("$SyntaxError", message); | 708 return NewError("$SyntaxError", message); |
| 708 } | 709 } |
| 709 | 710 |
| 710 | 711 |
| 711 Handle<Object> Factory::NewReferenceError(const char* type, | 712 Handle<Object> Factory::NewReferenceError(const char* message, |
| 712 Vector< Handle<Object> > args) { | 713 Vector< Handle<Object> > args) { |
| 713 return NewError("MakeReferenceError", type, args); | 714 return NewError("MakeReferenceError", message, args); |
| 714 } | 715 } |
| 715 | 716 |
| 716 | 717 |
| 717 Handle<Object> Factory::NewReferenceError(Handle<String> message) { | 718 Handle<Object> Factory::NewReferenceError(Handle<String> message) { |
| 718 return NewError("$ReferenceError", message); | 719 return NewError("$ReferenceError", message); |
| 719 } | 720 } |
| 720 | 721 |
| 721 | 722 |
| 722 Handle<Object> Factory::NewError(const char* maker, | 723 Handle<Object> Factory::NewError(const char* maker, |
| 723 const char* type, | 724 const char* message, |
| 724 Vector< Handle<Object> > args) { | 725 Vector< Handle<Object> > args) { |
| 725 // Instantiate a closeable HandleScope for EscapeFrom. | 726 // Instantiate a closeable HandleScope for EscapeFrom. |
| 726 v8::HandleScope scope(reinterpret_cast<v8::Isolate*>(isolate())); | 727 v8::HandleScope scope(reinterpret_cast<v8::Isolate*>(isolate())); |
| 727 Handle<FixedArray> array = NewFixedArray(args.length()); | 728 Handle<FixedArray> array = NewFixedArray(args.length()); |
| 728 for (int i = 0; i < args.length(); i++) { | 729 for (int i = 0; i < args.length(); i++) { |
| 729 array->set(i, *args[i]); | 730 array->set(i, *args[i]); |
| 730 } | 731 } |
| 731 Handle<JSArray> object = NewJSArrayWithElements(array); | 732 Handle<JSArray> object = NewJSArrayWithElements(array); |
| 732 Handle<Object> result = NewError(maker, type, object); | 733 Handle<Object> result = NewError(maker, message, object); |
| 733 return result.EscapeFrom(&scope); | 734 return result.EscapeFrom(&scope); |
| 734 } | 735 } |
| 735 | 736 |
| 736 | 737 |
| 737 Handle<Object> Factory::NewEvalError(const char* type, | 738 Handle<Object> Factory::NewEvalError(const char* message, |
| 738 Vector< Handle<Object> > args) { | 739 Vector< Handle<Object> > args) { |
| 739 return NewError("MakeEvalError", type, args); | 740 return NewError("MakeEvalError", message, args); |
| 740 } | 741 } |
| 741 | 742 |
| 742 | 743 |
| 743 Handle<Object> Factory::NewError(const char* type, | 744 Handle<Object> Factory::NewError(const char* message, |
| 744 Vector< Handle<Object> > args) { | 745 Vector< Handle<Object> > args) { |
| 745 return NewError("MakeError", type, args); | 746 return NewError("MakeError", message, args); |
| 746 } | 747 } |
| 747 | 748 |
| 748 | 749 |
| 749 Handle<String> Factory::EmergencyNewError(const char* type, | 750 Handle<String> Factory::EmergencyNewError(const char* message, |
| 750 Handle<JSArray> args) { | 751 Handle<JSArray> args) { |
| 751 const int kBufferSize = 1000; | 752 const int kBufferSize = 1000; |
| 752 char buffer[kBufferSize]; | 753 char buffer[kBufferSize]; |
| 753 size_t space = kBufferSize; | 754 size_t space = kBufferSize; |
| 754 char* p = &buffer[0]; | 755 char* p = &buffer[0]; |
| 755 | 756 |
| 756 Vector<char> v(buffer, kBufferSize); | 757 Vector<char> v(buffer, kBufferSize); |
| 757 OS::StrNCpy(v, type, space); | 758 OS::StrNCpy(v, message, space); |
| 758 space -= Min(space, strlen(type)); | 759 space -= Min(space, strlen(message)); |
| 759 p = &buffer[kBufferSize] - space; | 760 p = &buffer[kBufferSize] - space; |
| 760 | 761 |
| 761 for (unsigned i = 0; i < ARRAY_SIZE(args); i++) { | 762 for (unsigned i = 0; i < ARRAY_SIZE(args); i++) { |
| 762 if (space > 0) { | 763 if (space > 0) { |
| 763 *p++ = ' '; | 764 *p++ = ' '; |
| 764 space--; | 765 space--; |
| 765 if (space > 0) { | 766 if (space > 0) { |
| 766 MaybeObject* maybe_arg = args->GetElement(i); | 767 MaybeObject* maybe_arg = args->GetElement(i); |
| 767 Handle<String> arg_str(reinterpret_cast<String*>(maybe_arg)); | 768 Handle<String> arg_str(reinterpret_cast<String*>(maybe_arg)); |
| 768 const char* arg = *arg_str->ToCString(); | 769 const char* arg = *arg_str->ToCString(); |
| 769 Vector<char> v2(p, static_cast<int>(space)); | 770 Vector<char> v2(p, static_cast<int>(space)); |
| 770 OS::StrNCpy(v2, arg, space); | 771 OS::StrNCpy(v2, arg, space); |
| 771 space -= Min(space, strlen(arg)); | 772 space -= Min(space, strlen(arg)); |
| 772 p = &buffer[kBufferSize] - space; | 773 p = &buffer[kBufferSize] - space; |
| 773 } | 774 } |
| 774 } | 775 } |
| 775 } | 776 } |
| 776 if (space > 0) { | 777 if (space > 0) { |
| 777 *p = '\0'; | 778 *p = '\0'; |
| 778 } else { | 779 } else { |
| 779 buffer[kBufferSize - 1] = '\0'; | 780 buffer[kBufferSize - 1] = '\0'; |
| 780 } | 781 } |
| 781 Handle<String> error_string = NewStringFromUtf8(CStrVector(buffer), TENURED); | 782 Handle<String> error_string = NewStringFromUtf8(CStrVector(buffer), TENURED); |
| 782 return error_string; | 783 return error_string; |
| 783 } | 784 } |
| 784 | 785 |
| 785 | 786 |
| 786 Handle<Object> Factory::NewError(const char* maker, | 787 Handle<Object> Factory::NewError(const char* maker, |
| 787 const char* type, | 788 const char* message, |
| 788 Handle<JSArray> args) { | 789 Handle<JSArray> args) { |
| 789 Handle<String> make_str = InternalizeUtf8String(maker); | 790 Handle<String> make_str = InternalizeUtf8String(maker); |
| 790 Handle<Object> fun_obj( | 791 Handle<Object> fun_obj( |
| 791 isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str), | 792 isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str), |
| 792 isolate()); | 793 isolate()); |
| 793 // If the builtins haven't been properly configured yet this error | 794 // If the builtins haven't been properly configured yet this error |
| 794 // constructor may not have been defined. Bail out. | 795 // constructor may not have been defined. Bail out. |
| 795 if (!fun_obj->IsJSFunction()) { | 796 if (!fun_obj->IsJSFunction()) { |
| 796 return EmergencyNewError(type, args); | 797 return EmergencyNewError(message, args); |
| 797 } | 798 } |
| 798 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); | 799 Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj); |
| 799 Handle<Object> type_obj = InternalizeUtf8String(type); | 800 Handle<Object> message_obj = InternalizeUtf8String(message); |
| 800 Handle<Object> argv[] = { type_obj, args }; | 801 Handle<Object> argv[] = { message_obj, args }; |
| 801 | 802 |
| 802 // Invoke the JavaScript factory method. If an exception is thrown while | 803 // Invoke the JavaScript factory method. If an exception is thrown while |
| 803 // running the factory method, use the exception as the result. | 804 // running the factory method, use the exception as the result. |
| 804 bool caught_exception; | 805 bool caught_exception; |
| 805 Handle<Object> result = Execution::TryCall(fun, | 806 Handle<Object> result = Execution::TryCall(fun, |
| 806 isolate()->js_builtins_object(), | 807 isolate()->js_builtins_object(), |
| 807 ARRAY_SIZE(argv), | 808 ARRAY_SIZE(argv), |
| 808 argv, | 809 argv, |
| 809 &caught_exception); | 810 &caught_exception); |
| 810 return result; | 811 return result; |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 return Handle<Object>::null(); | 1556 return Handle<Object>::null(); |
| 1556 } | 1557 } |
| 1557 | 1558 |
| 1558 | 1559 |
| 1559 Handle<Object> Factory::ToBoolean(bool value) { | 1560 Handle<Object> Factory::ToBoolean(bool value) { |
| 1560 return value ? true_value() : false_value(); | 1561 return value ? true_value() : false_value(); |
| 1561 } | 1562 } |
| 1562 | 1563 |
| 1563 | 1564 |
| 1564 } } // namespace v8::internal | 1565 } } // namespace v8::internal |
| OLD | NEW |