OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 5932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5943 "obj;")); | 5943 "obj;")); |
5944 Local<Value> result = create_unboxed_double_script->Run(); | 5944 Local<Value> result = create_unboxed_double_script->Run(); |
5945 CHECK(result->ToObject()->HasRealIndexedProperty(2000)); | 5945 CHECK(result->ToObject()->HasRealIndexedProperty(2000)); |
5946 Local<Script> key_count_check = Script::Compile(v8_str( | 5946 Local<Script> key_count_check = Script::Compile(v8_str( |
5947 "key_count;")); | 5947 "key_count;")); |
5948 result = key_count_check->Run(); | 5948 result = key_count_check->Run(); |
5949 CHECK_EQ(v8_num(40013), result); | 5949 CHECK_EQ(v8_num(40013), result); |
5950 } | 5950 } |
5951 | 5951 |
5952 | 5952 |
5953 void NonStrictArgsIndexedPropertyEnumerator( | 5953 void SloppyArgsIndexedPropertyEnumerator( |
5954 const v8::PropertyCallbackInfo<v8::Array>& info) { | 5954 const v8::PropertyCallbackInfo<v8::Array>& info) { |
5955 // Force the list of returned keys to be stored in a Arguments object. | 5955 // Force the list of returned keys to be stored in a Arguments object. |
5956 Local<Script> indexed_property_names_script = Script::Compile(v8_str( | 5956 Local<Script> indexed_property_names_script = Script::Compile(v8_str( |
5957 "function f(w,x) {" | 5957 "function f(w,x) {" |
5958 " return arguments;" | 5958 " return arguments;" |
5959 "}" | 5959 "}" |
5960 "keys = f(0, 1, 2, 3);" | 5960 "keys = f(0, 1, 2, 3);" |
5961 "keys;")); | 5961 "keys;")); |
5962 Local<Object> result = | 5962 Local<Object> result = |
5963 Local<Object>::Cast(indexed_property_names_script->Run()); | 5963 Local<Object>::Cast(indexed_property_names_script->Run()); |
5964 // Have to populate the handle manually, as it's not Cast-able. | 5964 // Have to populate the handle manually, as it's not Cast-able. |
5965 i::Handle<i::JSObject> o = | 5965 i::Handle<i::JSObject> o = |
5966 v8::Utils::OpenHandle<Object, i::JSObject>(result); | 5966 v8::Utils::OpenHandle<Object, i::JSObject>(result); |
5967 i::Handle<i::JSArray> array(reinterpret_cast<i::JSArray*>(*o)); | 5967 i::Handle<i::JSArray> array(reinterpret_cast<i::JSArray*>(*o)); |
5968 info.GetReturnValue().Set(v8::Utils::ToLocal(array)); | 5968 info.GetReturnValue().Set(v8::Utils::ToLocal(array)); |
5969 } | 5969 } |
5970 | 5970 |
5971 | 5971 |
5972 static void NonStrictIndexedPropertyGetter( | 5972 static void SloppyIndexedPropertyGetter( |
5973 uint32_t index, | 5973 uint32_t index, |
5974 const v8::PropertyCallbackInfo<v8::Value>& info) { | 5974 const v8::PropertyCallbackInfo<v8::Value>& info) { |
5975 ApiTestFuzzer::Fuzz(); | 5975 ApiTestFuzzer::Fuzz(); |
5976 if (index < 4) { | 5976 if (index < 4) { |
5977 info.GetReturnValue().Set(v8_num(index)); | 5977 info.GetReturnValue().Set(v8_num(index)); |
5978 } | 5978 } |
5979 } | 5979 } |
5980 | 5980 |
5981 | 5981 |
5982 // Make sure that the the interceptor code in the runtime properly handles | 5982 // Make sure that the the interceptor code in the runtime properly handles |
5983 // merging property name lists for non-string arguments arrays. | 5983 // merging property name lists for non-string arguments arrays. |
5984 THREADED_TEST(IndexedInterceptorNonStrictArgsWithIndexedAccessor) { | 5984 THREADED_TEST(IndexedInterceptorSloppyArgsWithIndexedAccessor) { |
5985 v8::Isolate* isolate = CcTest::isolate(); | 5985 v8::Isolate* isolate = CcTest::isolate(); |
5986 v8::HandleScope scope(isolate); | 5986 v8::HandleScope scope(isolate); |
5987 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); | 5987 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); |
5988 templ->SetIndexedPropertyHandler(NonStrictIndexedPropertyGetter, | 5988 templ->SetIndexedPropertyHandler(SloppyIndexedPropertyGetter, |
5989 0, | 5989 0, |
5990 0, | 5990 0, |
5991 0, | 5991 0, |
5992 NonStrictArgsIndexedPropertyEnumerator); | 5992 SloppyArgsIndexedPropertyEnumerator); |
5993 LocalContext context; | 5993 LocalContext context; |
5994 context->Global()->Set(v8_str("obj"), templ->NewInstance()); | 5994 context->Global()->Set(v8_str("obj"), templ->NewInstance()); |
5995 Local<Script> create_args_script = | 5995 Local<Script> create_args_script = |
5996 Script::Compile(v8_str( | 5996 Script::Compile(v8_str( |
5997 "var key_count = 0;" | 5997 "var key_count = 0;" |
5998 "for (x in obj) {key_count++;} key_count;")); | 5998 "for (x in obj) {key_count++;} key_count;")); |
5999 Local<Value> result = create_args_script->Run(); | 5999 Local<Value> result = create_args_script->Run(); |
6000 CHECK_EQ(v8_num(4), result); | 6000 CHECK_EQ(v8_num(4), result); |
6001 } | 6001 } |
6002 | 6002 |
(...skipping 9667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15670 "for (var i = 0; i < 8; i++) {" | 15670 "for (var i = 0; i < 8; i++) {" |
15671 " sum += pixels[i];" | 15671 " sum += pixels[i];" |
15672 "}" | 15672 "}" |
15673 "sum;"); | 15673 "sum;"); |
15674 CHECK_EQ(28, result->Int32Value()); | 15674 CHECK_EQ(28, result->Int32Value()); |
15675 | 15675 |
15676 i::Handle<i::Smi> value(i::Smi::FromInt(2), | 15676 i::Handle<i::Smi> value(i::Smi::FromInt(2), |
15677 reinterpret_cast<i::Isolate*>(context->GetIsolate())); | 15677 reinterpret_cast<i::Isolate*>(context->GetIsolate())); |
15678 i::Handle<i::Object> no_failure; | 15678 i::Handle<i::Object> no_failure; |
15679 no_failure = | 15679 no_failure = |
15680 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); | 15680 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kSloppyMode); |
15681 ASSERT(!no_failure.is_null()); | 15681 ASSERT(!no_failure.is_null()); |
15682 i::USE(no_failure); | 15682 i::USE(no_failure); |
15683 CheckElementValue(isolate, 2, jsobj, 1); | 15683 CheckElementValue(isolate, 2, jsobj, 1); |
15684 *value.location() = i::Smi::FromInt(256); | 15684 *value.location() = i::Smi::FromInt(256); |
15685 no_failure = | 15685 no_failure = |
15686 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); | 15686 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kSloppyMode); |
15687 ASSERT(!no_failure.is_null()); | 15687 ASSERT(!no_failure.is_null()); |
15688 i::USE(no_failure); | 15688 i::USE(no_failure); |
15689 CheckElementValue(isolate, 255, jsobj, 1); | 15689 CheckElementValue(isolate, 255, jsobj, 1); |
15690 *value.location() = i::Smi::FromInt(-1); | 15690 *value.location() = i::Smi::FromInt(-1); |
15691 no_failure = | 15691 no_failure = |
15692 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); | 15692 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kSloppyMode); |
15693 ASSERT(!no_failure.is_null()); | 15693 ASSERT(!no_failure.is_null()); |
15694 i::USE(no_failure); | 15694 i::USE(no_failure); |
15695 CheckElementValue(isolate, 0, jsobj, 1); | 15695 CheckElementValue(isolate, 0, jsobj, 1); |
15696 | 15696 |
15697 result = CompileRun("for (var i = 0; i < 8; i++) {" | 15697 result = CompileRun("for (var i = 0; i < 8; i++) {" |
15698 " pixels[i] = (i * 65) - 109;" | 15698 " pixels[i] = (i * 65) - 109;" |
15699 "}" | 15699 "}" |
15700 "pixels[1] + pixels[6];"); | 15700 "pixels[1] + pixels[6];"); |
15701 CHECK_EQ(255, result->Int32Value()); | 15701 CHECK_EQ(255, result->Int32Value()); |
15702 CheckElementValue(isolate, 0, jsobj, 0); | 15702 CheckElementValue(isolate, 0, jsobj, 0); |
(...skipping 6403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22106 Local<Object> ApiCallOptimizationChecker::holder; | 22106 Local<Object> ApiCallOptimizationChecker::holder; |
22107 Local<Object> ApiCallOptimizationChecker::callee; | 22107 Local<Object> ApiCallOptimizationChecker::callee; |
22108 int ApiCallOptimizationChecker::count = 0; | 22108 int ApiCallOptimizationChecker::count = 0; |
22109 | 22109 |
22110 | 22110 |
22111 TEST(TestFunctionCallOptimization) { | 22111 TEST(TestFunctionCallOptimization) { |
22112 i::FLAG_allow_natives_syntax = true; | 22112 i::FLAG_allow_natives_syntax = true; |
22113 ApiCallOptimizationChecker checker; | 22113 ApiCallOptimizationChecker checker; |
22114 checker.RunAll(); | 22114 checker.RunAll(); |
22115 } | 22115 } |
OLD | NEW |