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 2954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2965 CheckInternalFieldsAreZero(ab); | 2965 CheckInternalFieldsAreZero(ab); |
2966 CHECK_EQ(1024, static_cast<int>(ab->ByteLength())); | 2966 CHECK_EQ(1024, static_cast<int>(ab->ByteLength())); |
2967 CHECK(!ab->IsExternal()); | 2967 CHECK(!ab->IsExternal()); |
2968 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 2968 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
2969 | 2969 |
2970 ScopedArrayBufferContents ab_contents(ab->Externalize()); | 2970 ScopedArrayBufferContents ab_contents(ab->Externalize()); |
2971 CHECK(ab->IsExternal()); | 2971 CHECK(ab->IsExternal()); |
2972 | 2972 |
2973 CHECK_EQ(1024, static_cast<int>(ab_contents.ByteLength())); | 2973 CHECK_EQ(1024, static_cast<int>(ab_contents.ByteLength())); |
2974 uint8_t* data = static_cast<uint8_t*>(ab_contents.Data()); | 2974 uint8_t* data = static_cast<uint8_t*>(ab_contents.Data()); |
2975 ASSERT(data != NULL); | 2975 DCHECK(data != NULL); |
2976 env->Global()->Set(v8_str("ab"), ab); | 2976 env->Global()->Set(v8_str("ab"), ab); |
2977 | 2977 |
2978 v8::Handle<v8::Value> result = CompileRun("ab.byteLength"); | 2978 v8::Handle<v8::Value> result = CompileRun("ab.byteLength"); |
2979 CHECK_EQ(1024, result->Int32Value()); | 2979 CHECK_EQ(1024, result->Int32Value()); |
2980 | 2980 |
2981 result = CompileRun("var u8 = new Uint8Array(ab);" | 2981 result = CompileRun("var u8 = new Uint8Array(ab);" |
2982 "u8[0] = 0xFF;" | 2982 "u8[0] = 0xFF;" |
2983 "u8[1] = 0xAA;" | 2983 "u8[1] = 0xAA;" |
2984 "u8.length"); | 2984 "u8.length"); |
2985 CHECK_EQ(1024, result->Int32Value()); | 2985 CHECK_EQ(1024, result->Int32Value()); |
(...skipping 7195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10181 Handle<FunctionTemplate> t = FunctionTemplate::New(context->GetIsolate()); | 10181 Handle<FunctionTemplate> t = FunctionTemplate::New(context->GetIsolate()); |
10182 t->SetHiddenPrototype(true); | 10182 t->SetHiddenPrototype(true); |
10183 t->InstanceTemplate()->Set(v8_str("foo"), v8_num(75)); | 10183 t->InstanceTemplate()->Set(v8_str("foo"), v8_num(75)); |
10184 Handle<Object> p = t->GetFunction()->NewInstance(); | 10184 Handle<Object> p = t->GetFunction()->NewInstance(); |
10185 Handle<Object> o = Object::New(context->GetIsolate()); | 10185 Handle<Object> o = Object::New(context->GetIsolate()); |
10186 o->SetPrototype(p); | 10186 o->SetPrototype(p); |
10187 | 10187 |
10188 int hash = o->GetIdentityHash(); | 10188 int hash = o->GetIdentityHash(); |
10189 USE(hash); | 10189 USE(hash); |
10190 o->Set(v8_str("foo"), v8_num(42)); | 10190 o->Set(v8_str("foo"), v8_num(42)); |
10191 ASSERT_EQ(hash, o->GetIdentityHash()); | 10191 DCHECK_EQ(hash, o->GetIdentityHash()); |
10192 } | 10192 } |
10193 | 10193 |
10194 | 10194 |
10195 THREADED_TEST(SetPrototype) { | 10195 THREADED_TEST(SetPrototype) { |
10196 LocalContext context; | 10196 LocalContext context; |
10197 v8::Isolate* isolate = context->GetIsolate(); | 10197 v8::Isolate* isolate = context->GetIsolate(); |
10198 v8::HandleScope handle_scope(isolate); | 10198 v8::HandleScope handle_scope(isolate); |
10199 | 10199 |
10200 Local<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(isolate); | 10200 Local<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(isolate); |
10201 t0->InstanceTemplate()->Set(v8_str("x"), v8_num(0)); | 10201 t0->InstanceTemplate()->Set(v8_str("x"), v8_num(0)); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10404 | 10404 |
10405 Local<v8::Object> o0 = t->GetFunction()->NewInstance(); | 10405 Local<v8::Object> o0 = t->GetFunction()->NewInstance(); |
10406 Local<v8::Object> o1 = t->GetFunction()->NewInstance(); | 10406 Local<v8::Object> o1 = t->GetFunction()->NewInstance(); |
10407 | 10407 |
10408 CHECK(o0->SetPrototype(o1)); | 10408 CHECK(o0->SetPrototype(o1)); |
10409 // If setting the prototype leads to the cycle, SetPrototype should | 10409 // If setting the prototype leads to the cycle, SetPrototype should |
10410 // return false and keep VM in sane state. | 10410 // return false and keep VM in sane state. |
10411 v8::TryCatch try_catch; | 10411 v8::TryCatch try_catch; |
10412 CHECK(!o1->SetPrototype(o0)); | 10412 CHECK(!o1->SetPrototype(o0)); |
10413 CHECK(!try_catch.HasCaught()); | 10413 CHECK(!try_catch.HasCaught()); |
10414 ASSERT(!CcTest::i_isolate()->has_pending_exception()); | 10414 DCHECK(!CcTest::i_isolate()->has_pending_exception()); |
10415 | 10415 |
10416 CHECK_EQ(42, CompileRun("function f() { return 42; }; f()")->Int32Value()); | 10416 CHECK_EQ(42, CompileRun("function f() { return 42; }; f()")->Int32Value()); |
10417 } | 10417 } |
10418 | 10418 |
10419 | 10419 |
10420 THREADED_TEST(FunctionRemovePrototype) { | 10420 THREADED_TEST(FunctionRemovePrototype) { |
10421 LocalContext context; | 10421 LocalContext context; |
10422 v8::Isolate* isolate = context->GetIsolate(); | 10422 v8::Isolate* isolate = context->GetIsolate(); |
10423 v8::HandleScope handle_scope(isolate); | 10423 v8::HandleScope handle_scope(isolate); |
10424 | 10424 |
(...skipping 3562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13987 " for (i = 0; i < 100; ++i)\n" | 13987 " for (i = 0; i < 100; ++i)\n" |
13988 " sum = foo(i);\n" | 13988 " sum = foo(i);\n" |
13989 " return sum;\n" | 13989 " return sum;\n" |
13990 "}\n" | 13990 "}\n" |
13991 "function foo(i) { return i * i; }\n" | 13991 "function foo(i) { return i * i; }\n" |
13992 "// Invoke on the runtime function.\n" | 13992 "// Invoke on the runtime function.\n" |
13993 "obj.asdf()"; | 13993 "obj.asdf()"; |
13994 CompileRun(script); | 13994 CompileRun(script); |
13995 bar_func_ = i::Handle<i::JSFunction>::cast( | 13995 bar_func_ = i::Handle<i::JSFunction>::cast( |
13996 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("bar")))); | 13996 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("bar")))); |
13997 ASSERT(!bar_func_.is_null()); | 13997 DCHECK(!bar_func_.is_null()); |
13998 | 13998 |
13999 foo_func_ = | 13999 foo_func_ = |
14000 i::Handle<i::JSFunction>::cast( | 14000 i::Handle<i::JSFunction>::cast( |
14001 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("foo")))); | 14001 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("foo")))); |
14002 ASSERT(!foo_func_.is_null()); | 14002 DCHECK(!foo_func_.is_null()); |
14003 | 14003 |
14004 v8::Handle<v8::Value> value = CompileRun("bar();"); | 14004 v8::Handle<v8::Value> value = CompileRun("bar();"); |
14005 CHECK(value->IsNumber()); | 14005 CHECK(value->IsNumber()); |
14006 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value()); | 14006 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value()); |
14007 | 14007 |
14008 // Test the optimized codegen path. | 14008 // Test the optimized codegen path. |
14009 value = CompileRun("%OptimizeFunctionOnNextCall(foo);" | 14009 value = CompileRun("%OptimizeFunctionOnNextCall(foo);" |
14010 "bar();"); | 14010 "bar();"); |
14011 CHECK(value->IsNumber()); | 14011 CHECK(value->IsNumber()); |
14012 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value()); | 14012 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value()); |
(...skipping 1665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15678 " sum += pixels[i];" | 15678 " sum += pixels[i];" |
15679 "}" | 15679 "}" |
15680 "sum;"); | 15680 "sum;"); |
15681 CHECK_EQ(28, result->Int32Value()); | 15681 CHECK_EQ(28, result->Int32Value()); |
15682 | 15682 |
15683 i::Handle<i::Smi> value(i::Smi::FromInt(2), | 15683 i::Handle<i::Smi> value(i::Smi::FromInt(2), |
15684 reinterpret_cast<i::Isolate*>(context->GetIsolate())); | 15684 reinterpret_cast<i::Isolate*>(context->GetIsolate())); |
15685 i::Handle<i::Object> no_failure; | 15685 i::Handle<i::Object> no_failure; |
15686 no_failure = i::JSObject::SetElement( | 15686 no_failure = i::JSObject::SetElement( |
15687 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); | 15687 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); |
15688 ASSERT(!no_failure.is_null()); | 15688 DCHECK(!no_failure.is_null()); |
15689 USE(no_failure); | 15689 USE(no_failure); |
15690 CheckElementValue(isolate, 2, jsobj, 1); | 15690 CheckElementValue(isolate, 2, jsobj, 1); |
15691 *value.location() = i::Smi::FromInt(256); | 15691 *value.location() = i::Smi::FromInt(256); |
15692 no_failure = i::JSObject::SetElement( | 15692 no_failure = i::JSObject::SetElement( |
15693 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); | 15693 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); |
15694 ASSERT(!no_failure.is_null()); | 15694 DCHECK(!no_failure.is_null()); |
15695 USE(no_failure); | 15695 USE(no_failure); |
15696 CheckElementValue(isolate, 255, jsobj, 1); | 15696 CheckElementValue(isolate, 255, jsobj, 1); |
15697 *value.location() = i::Smi::FromInt(-1); | 15697 *value.location() = i::Smi::FromInt(-1); |
15698 no_failure = i::JSObject::SetElement( | 15698 no_failure = i::JSObject::SetElement( |
15699 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); | 15699 jsobj, 1, value, NONE, i::SLOPPY).ToHandleChecked(); |
15700 ASSERT(!no_failure.is_null()); | 15700 DCHECK(!no_failure.is_null()); |
15701 USE(no_failure); | 15701 USE(no_failure); |
15702 CheckElementValue(isolate, 0, jsobj, 1); | 15702 CheckElementValue(isolate, 0, jsobj, 1); |
15703 | 15703 |
15704 result = CompileRun("for (var i = 0; i < 8; i++) {" | 15704 result = CompileRun("for (var i = 0; i < 8; i++) {" |
15705 " pixels[i] = (i * 65) - 109;" | 15705 " pixels[i] = (i * 65) - 109;" |
15706 "}" | 15706 "}" |
15707 "pixels[1] + pixels[6];"); | 15707 "pixels[1] + pixels[6];"); |
15708 CHECK_EQ(255, result->Int32Value()); | 15708 CHECK_EQ(255, result->Int32Value()); |
15709 CheckElementValue(isolate, 0, jsobj, 0); | 15709 CheckElementValue(isolate, 0, jsobj, 0); |
15710 CheckElementValue(isolate, 0, jsobj, 1); | 15710 CheckElementValue(isolate, 0, jsobj, 1); |
(...skipping 1351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17062 CHECK_EQ(is_constructor, frame->IsConstructor()); | 17062 CHECK_EQ(is_constructor, frame->IsConstructor()); |
17063 } | 17063 } |
17064 | 17064 |
17065 | 17065 |
17066 void AnalyzeStackInNativeCode(const v8::FunctionCallbackInfo<v8::Value>& args) { | 17066 void AnalyzeStackInNativeCode(const v8::FunctionCallbackInfo<v8::Value>& args) { |
17067 v8::HandleScope scope(args.GetIsolate()); | 17067 v8::HandleScope scope(args.GetIsolate()); |
17068 const char* origin = "capture-stack-trace-test"; | 17068 const char* origin = "capture-stack-trace-test"; |
17069 const int kOverviewTest = 1; | 17069 const int kOverviewTest = 1; |
17070 const int kDetailedTest = 2; | 17070 const int kDetailedTest = 2; |
17071 | 17071 |
17072 ASSERT(args.Length() == 1); | 17072 DCHECK(args.Length() == 1); |
17073 | 17073 |
17074 int testGroup = args[0]->Int32Value(); | 17074 int testGroup = args[0]->Int32Value(); |
17075 if (testGroup == kOverviewTest) { | 17075 if (testGroup == kOverviewTest) { |
17076 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( | 17076 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( |
17077 args.GetIsolate(), 10, v8::StackTrace::kOverview); | 17077 args.GetIsolate(), 10, v8::StackTrace::kOverview); |
17078 CHECK_EQ(4, stackTrace->GetFrameCount()); | 17078 CHECK_EQ(4, stackTrace->GetFrameCount()); |
17079 checkStackFrame(origin, "bar", 2, 10, false, false, | 17079 checkStackFrame(origin, "bar", 2, 10, false, false, |
17080 stackTrace->GetFrame(0)); | 17080 stackTrace->GetFrame(0)); |
17081 checkStackFrame(origin, "foo", 6, 3, false, false, | 17081 checkStackFrame(origin, "foo", 6, 3, false, false, |
17082 stackTrace->GetFrame(1)); | 17082 stackTrace->GetFrame(1)); |
(...skipping 5309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22392 "check = function(returned) {\n" | 22392 "check = function(returned) {\n" |
22393 " if (returned !== 1) { throw returned; }\n" | 22393 " if (returned !== 1) { throw returned; }\n" |
22394 "}\n" | 22394 "}\n" |
22395 "check(wrap_set());\n" | 22395 "check(wrap_set());\n" |
22396 "check(wrap_set());\n" | 22396 "check(wrap_set());\n" |
22397 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n" | 22397 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n" |
22398 "check(wrap_set());\n", | 22398 "check(wrap_set());\n", |
22399 wrap_function.start(), key, key, key, key, key, key); | 22399 wrap_function.start(), key, key, key, key, key, key); |
22400 v8::TryCatch try_catch; | 22400 v8::TryCatch try_catch; |
22401 CompileRun(source.start()); | 22401 CompileRun(source.start()); |
22402 ASSERT(!try_catch.HasCaught()); | 22402 DCHECK(!try_catch.HasCaught()); |
22403 CHECK_EQ(9, count); | 22403 CHECK_EQ(9, count); |
22404 } | 22404 } |
22405 }; | 22405 }; |
22406 | 22406 |
22407 | 22407 |
22408 Local<Object> ApiCallOptimizationChecker::data; | 22408 Local<Object> ApiCallOptimizationChecker::data; |
22409 Local<Object> ApiCallOptimizationChecker::receiver; | 22409 Local<Object> ApiCallOptimizationChecker::receiver; |
22410 Local<Object> ApiCallOptimizationChecker::holder; | 22410 Local<Object> ApiCallOptimizationChecker::holder; |
22411 Local<Object> ApiCallOptimizationChecker::callee; | 22411 Local<Object> ApiCallOptimizationChecker::callee; |
22412 int ApiCallOptimizationChecker::count = 0; | 22412 int ApiCallOptimizationChecker::count = 0; |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22842 desc = x->GetOwnPropertyDescriptor(v8_str("p1")); | 22842 desc = x->GetOwnPropertyDescriptor(v8_str("p1")); |
22843 Local<Function> set = | 22843 Local<Function> set = |
22844 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set"))); | 22844 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set"))); |
22845 Local<Function> get = | 22845 Local<Function> get = |
22846 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get"))); | 22846 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get"))); |
22847 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL)); | 22847 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL)); |
22848 Handle<Value> args[] = { v8_num(14) }; | 22848 Handle<Value> args[] = { v8_num(14) }; |
22849 set->Call(x, 1, args); | 22849 set->Call(x, 1, args); |
22850 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL)); | 22850 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL)); |
22851 } | 22851 } |
OLD | NEW |