| OLD | NEW |
| 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 2770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2781 "native function C();" | 2781 "native function C();" |
| 2782 "function Foo(i) {" | 2782 "function Foo(i) {" |
| 2783 " if (i == 0) return A();" | 2783 " if (i == 0) return A();" |
| 2784 " if (i == 1) return B();" | 2784 " if (i == 1) return B();" |
| 2785 " if (i == 2) return C();" | 2785 " if (i == 2) return C();" |
| 2786 "}"; | 2786 "}"; |
| 2787 | 2787 |
| 2788 | 2788 |
| 2789 static v8::Handle<Value> CallFun(const v8::Arguments& args) { | 2789 static v8::Handle<Value> CallFun(const v8::Arguments& args) { |
| 2790 ApiTestFuzzer::Fuzz(); | 2790 ApiTestFuzzer::Fuzz(); |
| 2791 if (args.IsConstructCall()) { |
| 2792 args.This()->Set(v8_str("data"), args.Data()); |
| 2793 } |
| 2791 return args.Data(); | 2794 return args.Data(); |
| 2792 } | 2795 } |
| 2793 | 2796 |
| 2794 | 2797 |
| 2795 class FunctionExtension : public Extension { | 2798 class FunctionExtension : public Extension { |
| 2796 public: | 2799 public: |
| 2797 FunctionExtension() : Extension("functiontest", kExtensionTestScript) { } | 2800 FunctionExtension() : Extension("functiontest", kExtensionTestScript) { } |
| 2798 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( | 2801 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
| 2799 v8::Handle<String> name); | 2802 v8::Handle<String> name); |
| 2800 }; | 2803 }; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2822 static const char* exts[1] = { "functiontest" }; | 2825 static const char* exts[1] = { "functiontest" }; |
| 2823 v8::ExtensionConfiguration config(1, exts); | 2826 v8::ExtensionConfiguration config(1, exts); |
| 2824 LocalContext context(&config); | 2827 LocalContext context(&config); |
| 2825 CHECK_EQ(3, lookup_count); | 2828 CHECK_EQ(3, lookup_count); |
| 2826 CHECK_EQ(v8::Integer::New(8), Script::Compile(v8_str("Foo(0)"))->Run()); | 2829 CHECK_EQ(v8::Integer::New(8), Script::Compile(v8_str("Foo(0)"))->Run()); |
| 2827 CHECK_EQ(v8::Integer::New(7), Script::Compile(v8_str("Foo(1)"))->Run()); | 2830 CHECK_EQ(v8::Integer::New(7), Script::Compile(v8_str("Foo(1)"))->Run()); |
| 2828 CHECK_EQ(v8::Integer::New(6), Script::Compile(v8_str("Foo(2)"))->Run()); | 2831 CHECK_EQ(v8::Integer::New(6), Script::Compile(v8_str("Foo(2)"))->Run()); |
| 2829 } | 2832 } |
| 2830 | 2833 |
| 2831 | 2834 |
| 2835 THREADED_TEST(NativeFunctionConstructCall) { |
| 2836 v8::RegisterExtension(new FunctionExtension()); |
| 2837 v8::HandleScope handle_scope; |
| 2838 static const char* exts[1] = { "functiontest" }; |
| 2839 v8::ExtensionConfiguration config(1, exts); |
| 2840 LocalContext context(&config); |
| 2841 CHECK_EQ(v8::Integer::New(8), |
| 2842 Script::Compile(v8_str("(new A()).data"))->Run()); |
| 2843 CHECK_EQ(v8::Integer::New(7), |
| 2844 Script::Compile(v8_str("(new B()).data"))->Run()); |
| 2845 CHECK_EQ(v8::Integer::New(6), |
| 2846 Script::Compile(v8_str("(new C()).data"))->Run()); |
| 2847 } |
| 2848 |
| 2849 |
| 2832 static const char* last_location; | 2850 static const char* last_location; |
| 2833 static const char* last_message; | 2851 static const char* last_message; |
| 2834 void StoringErrorCallback(const char* location, const char* message) { | 2852 void StoringErrorCallback(const char* location, const char* message) { |
| 2835 if (last_location == NULL) { | 2853 if (last_location == NULL) { |
| 2836 last_location = location; | 2854 last_location = location; |
| 2837 last_message = message; | 2855 last_message = message; |
| 2838 } | 2856 } |
| 2839 } | 2857 } |
| 2840 | 2858 |
| 2841 | 2859 |
| (...skipping 5817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8659 CompileRun(source_exception); | 8677 CompileRun(source_exception); |
| 8660 other_context->Exit(); | 8678 other_context->Exit(); |
| 8661 v8::internal::Heap::CollectAllGarbage(false); | 8679 v8::internal::Heap::CollectAllGarbage(false); |
| 8662 if (GetGlobalObjectsCount() == 1) break; | 8680 if (GetGlobalObjectsCount() == 1) break; |
| 8663 } | 8681 } |
| 8664 CHECK_GE(2, gc_count); | 8682 CHECK_GE(2, gc_count); |
| 8665 CHECK_EQ(1, GetGlobalObjectsCount()); | 8683 CHECK_EQ(1, GetGlobalObjectsCount()); |
| 8666 | 8684 |
| 8667 other_context.Dispose(); | 8685 other_context.Dispose(); |
| 8668 } | 8686 } |
| OLD | NEW |