Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Side by Side Diff: test/cctest/test-api.cc

Issue 23757017: remove Isolate::Current from most files starting with 'o' through 'r' (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/runtime.cc ('k') | test/cctest/test-heap.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 14988 matching lines...) Expand 10 before | Expand all | Expand 10 after
14999 "var x = obj.x;\n" 14999 "var x = obj.x;\n"
15000 "delete obj.y;\n" 15000 "delete obj.y;\n"
15001 "for (var i = 0; i < 5; i++) f(obj);"); 15001 "for (var i = 0; i < 5; i++) f(obj);");
15002 // Detach the global object to make 'this' refer directly to the 15002 // Detach the global object to make 'this' refer directly to the
15003 // global object (not the proxy), and make sure that the dictionary 15003 // global object (not the proxy), and make sure that the dictionary
15004 // load IC doesn't mess up loading directly from the global object. 15004 // load IC doesn't mess up loading directly from the global object.
15005 context->DetachGlobal(); 15005 context->DetachGlobal();
15006 CHECK_EQ(42, CompileRun("f(this).foo")->Int32Value()); 15006 CHECK_EQ(42, CompileRun("f(this).foo")->Int32Value());
15007 } 15007 }
15008 15008
15009 static void CheckElementValue(i::Isolate* isolate,
15010 int expected,
15011 i::Handle<i::Object> obj,
15012 int offset) {
15013 i::Object* element = obj->GetElement(isolate, offset)->ToObjectChecked();
15014 CHECK_EQ(expected, i::Smi::cast(element)->value());
15015 }
15016
15009 15017
15010 THREADED_TEST(PixelArray) { 15018 THREADED_TEST(PixelArray) {
15011 LocalContext context; 15019 LocalContext context;
15012 i::Factory* factory = i::Isolate::Current()->factory(); 15020 i::Isolate* isolate = i::Isolate::Current();
15021 i::Factory* factory = isolate->factory();
15013 v8::HandleScope scope(context->GetIsolate()); 15022 v8::HandleScope scope(context->GetIsolate());
15014 const int kElementCount = 260; 15023 const int kElementCount = 260;
15015 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount)); 15024 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount));
15016 i::Handle<i::ExternalPixelArray> pixels = 15025 i::Handle<i::ExternalPixelArray> pixels =
15017 i::Handle<i::ExternalPixelArray>::cast( 15026 i::Handle<i::ExternalPixelArray>::cast(
15018 factory->NewExternalArray(kElementCount, 15027 factory->NewExternalArray(kElementCount,
15019 v8::kExternalPixelArray, 15028 v8::kExternalPixelArray,
15020 pixel_data)); 15029 pixel_data));
15021 // Force GC to trigger verification. 15030 // Force GC to trigger verification.
15022 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 15031 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
15023 for (int i = 0; i < kElementCount; i++) { 15032 for (int i = 0; i < kElementCount; i++) {
15024 pixels->set(i, i % 256); 15033 pixels->set(i, i % 256);
15025 } 15034 }
15026 // Force GC to trigger verification. 15035 // Force GC to trigger verification.
15027 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 15036 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
15028 for (int i = 0; i < kElementCount; i++) { 15037 for (int i = 0; i < kElementCount; i++) {
15029 CHECK_EQ(i % 256, pixels->get_scalar(i)); 15038 CHECK_EQ(i % 256, pixels->get_scalar(i));
15030 CHECK_EQ(i % 256, pixel_data[i]); 15039 CHECK_EQ(i % 256, pixel_data[i]);
15031 } 15040 }
15032 15041
15033 v8::Handle<v8::Object> obj = v8::Object::New(); 15042 v8::Handle<v8::Object> obj = v8::Object::New();
15034 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); 15043 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj);
15035 // Set the elements to be the pixels. 15044 // Set the elements to be the pixels.
15036 // jsobj->set_elements(*pixels); 15045 // jsobj->set_elements(*pixels);
15037 obj->SetIndexedPropertiesToPixelData(pixel_data, kElementCount); 15046 obj->SetIndexedPropertiesToPixelData(pixel_data, kElementCount);
15038 CHECK_EQ(1, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 15047 CheckElementValue(isolate, 1, jsobj, 1);
15039 obj->Set(v8_str("field"), v8::Int32::New(1503)); 15048 obj->Set(v8_str("field"), v8::Int32::New(1503));
15040 context->Global()->Set(v8_str("pixels"), obj); 15049 context->Global()->Set(v8_str("pixels"), obj);
15041 v8::Handle<v8::Value> result = CompileRun("pixels.field"); 15050 v8::Handle<v8::Value> result = CompileRun("pixels.field");
15042 CHECK_EQ(1503, result->Int32Value()); 15051 CHECK_EQ(1503, result->Int32Value());
15043 result = CompileRun("pixels[1]"); 15052 result = CompileRun("pixels[1]");
15044 CHECK_EQ(1, result->Int32Value()); 15053 CHECK_EQ(1, result->Int32Value());
15045 15054
15046 result = CompileRun("var sum = 0;" 15055 result = CompileRun("var sum = 0;"
15047 "for (var i = 0; i < 8; i++) {" 15056 "for (var i = 0; i < 8; i++) {"
15048 " sum += pixels[i] = pixels[i] = -i;" 15057 " sum += pixels[i] = pixels[i] = -i;"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
15085 "sum;"); 15094 "sum;");
15086 CHECK_EQ(28, result->Int32Value()); 15095 CHECK_EQ(28, result->Int32Value());
15087 15096
15088 i::Handle<i::Smi> value(i::Smi::FromInt(2), 15097 i::Handle<i::Smi> value(i::Smi::FromInt(2),
15089 reinterpret_cast<i::Isolate*>(context->GetIsolate())); 15098 reinterpret_cast<i::Isolate*>(context->GetIsolate()));
15090 i::Handle<i::Object> no_failure; 15099 i::Handle<i::Object> no_failure;
15091 no_failure = 15100 no_failure =
15092 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); 15101 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode);
15093 ASSERT(!no_failure.is_null()); 15102 ASSERT(!no_failure.is_null());
15094 i::USE(no_failure); 15103 i::USE(no_failure);
15095 CHECK_EQ(2, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 15104 CheckElementValue(isolate, 2, jsobj, 1);
15096 *value.location() = i::Smi::FromInt(256); 15105 *value.location() = i::Smi::FromInt(256);
15097 no_failure = 15106 no_failure =
15098 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); 15107 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode);
15099 ASSERT(!no_failure.is_null()); 15108 ASSERT(!no_failure.is_null());
15100 i::USE(no_failure); 15109 i::USE(no_failure);
15101 CHECK_EQ(255, 15110 CheckElementValue(isolate, 255, jsobj, 1);
15102 i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value());
15103 *value.location() = i::Smi::FromInt(-1); 15111 *value.location() = i::Smi::FromInt(-1);
15104 no_failure = 15112 no_failure =
15105 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode); 15113 i::JSObject::SetElement(jsobj, 1, value, NONE, i::kNonStrictMode);
15106 ASSERT(!no_failure.is_null()); 15114 ASSERT(!no_failure.is_null());
15107 i::USE(no_failure); 15115 i::USE(no_failure);
15108 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 15116 CheckElementValue(isolate, 0, jsobj, 1);
15109 15117
15110 result = CompileRun("for (var i = 0; i < 8; i++) {" 15118 result = CompileRun("for (var i = 0; i < 8; i++) {"
15111 " pixels[i] = (i * 65) - 109;" 15119 " pixels[i] = (i * 65) - 109;"
15112 "}" 15120 "}"
15113 "pixels[1] + pixels[6];"); 15121 "pixels[1] + pixels[6];");
15114 CHECK_EQ(255, result->Int32Value()); 15122 CHECK_EQ(255, result->Int32Value());
15115 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(0)->ToObjectChecked())->value()); 15123 CheckElementValue(isolate, 0, jsobj, 0);
15116 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 15124 CheckElementValue(isolate, 0, jsobj, 1);
15117 CHECK_EQ(21, 15125 CheckElementValue(isolate, 21, jsobj, 2);
15118 i::Smi::cast(jsobj->GetElement(2)->ToObjectChecked())->value()); 15126 CheckElementValue(isolate, 86, jsobj, 3);
15119 CHECK_EQ(86, 15127 CheckElementValue(isolate, 151, jsobj, 4);
15120 i::Smi::cast(jsobj->GetElement(3)->ToObjectChecked())->value()); 15128 CheckElementValue(isolate, 216, jsobj, 5);
15121 CHECK_EQ(151, 15129 CheckElementValue(isolate, 255, jsobj, 6);
15122 i::Smi::cast(jsobj->GetElement(4)->ToObjectChecked())->value()); 15130 CheckElementValue(isolate, 255, jsobj, 7);
15123 CHECK_EQ(216,
15124 i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value());
15125 CHECK_EQ(255,
15126 i::Smi::cast(jsobj->GetElement(6)->ToObjectChecked())->value());
15127 CHECK_EQ(255,
15128 i::Smi::cast(jsobj->GetElement(7)->ToObjectChecked())->value());
15129 result = CompileRun("var sum = 0;" 15131 result = CompileRun("var sum = 0;"
15130 "for (var i = 0; i < 8; i++) {" 15132 "for (var i = 0; i < 8; i++) {"
15131 " sum += pixels[i];" 15133 " sum += pixels[i];"
15132 "}" 15134 "}"
15133 "sum;"); 15135 "sum;");
15134 CHECK_EQ(984, result->Int32Value()); 15136 CHECK_EQ(984, result->Int32Value());
15135 15137
15136 result = CompileRun("for (var i = 0; i < 8; i++) {" 15138 result = CompileRun("for (var i = 0; i < 8; i++) {"
15137 " pixels[i] = (i * 1.1);" 15139 " pixels[i] = (i * 1.1);"
15138 "}" 15140 "}"
15139 "pixels[1] + pixels[6];"); 15141 "pixels[1] + pixels[6];");
15140 CHECK_EQ(8, result->Int32Value()); 15142 CHECK_EQ(8, result->Int32Value());
15141 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(0)->ToObjectChecked())->value()); 15143 CheckElementValue(isolate, 0, jsobj, 0);
15142 CHECK_EQ(1, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 15144 CheckElementValue(isolate, 1, jsobj, 1);
15143 CHECK_EQ(2, i::Smi::cast(jsobj->GetElement(2)->ToObjectChecked())->value()); 15145 CheckElementValue(isolate, 2, jsobj, 2);
15144 CHECK_EQ(3, i::Smi::cast(jsobj->GetElement(3)->ToObjectChecked())->value()); 15146 CheckElementValue(isolate, 3, jsobj, 3);
15145 CHECK_EQ(4, i::Smi::cast(jsobj->GetElement(4)->ToObjectChecked())->value()); 15147 CheckElementValue(isolate, 4, jsobj, 4);
15146 CHECK_EQ(6, i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value()); 15148 CheckElementValue(isolate, 6, jsobj, 5);
15147 CHECK_EQ(7, i::Smi::cast(jsobj->GetElement(6)->ToObjectChecked())->value()); 15149 CheckElementValue(isolate, 7, jsobj, 6);
15148 CHECK_EQ(8, i::Smi::cast(jsobj->GetElement(7)->ToObjectChecked())->value()); 15150 CheckElementValue(isolate, 8, jsobj, 7);
15149 15151
15150 result = CompileRun("for (var i = 0; i < 8; i++) {" 15152 result = CompileRun("for (var i = 0; i < 8; i++) {"
15151 " pixels[7] = undefined;" 15153 " pixels[7] = undefined;"
15152 "}" 15154 "}"
15153 "pixels[7];"); 15155 "pixels[7];");
15154 CHECK_EQ(0, result->Int32Value()); 15156 CHECK_EQ(0, result->Int32Value());
15155 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(7)->ToObjectChecked())->value()); 15157 CheckElementValue(isolate, 0, jsobj, 7);
15156 15158
15157 result = CompileRun("for (var i = 0; i < 8; i++) {" 15159 result = CompileRun("for (var i = 0; i < 8; i++) {"
15158 " pixels[6] = '2.3';" 15160 " pixels[6] = '2.3';"
15159 "}" 15161 "}"
15160 "pixels[6];"); 15162 "pixels[6];");
15161 CHECK_EQ(2, result->Int32Value()); 15163 CHECK_EQ(2, result->Int32Value());
15162 CHECK_EQ(2, i::Smi::cast(jsobj->GetElement(6)->ToObjectChecked())->value()); 15164 CheckElementValue(isolate, 2, jsobj, 6);
15163 15165
15164 result = CompileRun("for (var i = 0; i < 8; i++) {" 15166 result = CompileRun("for (var i = 0; i < 8; i++) {"
15165 " pixels[5] = NaN;" 15167 " pixels[5] = NaN;"
15166 "}" 15168 "}"
15167 "pixels[5];"); 15169 "pixels[5];");
15168 CHECK_EQ(0, result->Int32Value()); 15170 CHECK_EQ(0, result->Int32Value());
15169 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value()); 15171 CheckElementValue(isolate, 0, jsobj, 5);
15170 15172
15171 result = CompileRun("for (var i = 0; i < 8; i++) {" 15173 result = CompileRun("for (var i = 0; i < 8; i++) {"
15172 " pixels[8] = Infinity;" 15174 " pixels[8] = Infinity;"
15173 "}" 15175 "}"
15174 "pixels[8];"); 15176 "pixels[8];");
15175 CHECK_EQ(255, result->Int32Value()); 15177 CHECK_EQ(255, result->Int32Value());
15176 CHECK_EQ(255, 15178 CheckElementValue(isolate, 255, jsobj, 8);
15177 i::Smi::cast(jsobj->GetElement(8)->ToObjectChecked())->value());
15178 15179
15179 result = CompileRun("for (var i = 0; i < 8; i++) {" 15180 result = CompileRun("for (var i = 0; i < 8; i++) {"
15180 " pixels[9] = -Infinity;" 15181 " pixels[9] = -Infinity;"
15181 "}" 15182 "}"
15182 "pixels[9];"); 15183 "pixels[9];");
15183 CHECK_EQ(0, result->Int32Value()); 15184 CHECK_EQ(0, result->Int32Value());
15184 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(9)->ToObjectChecked())->value()); 15185 CheckElementValue(isolate, 0, jsobj, 9);
15185 15186
15186 result = CompileRun("pixels[3] = 33;" 15187 result = CompileRun("pixels[3] = 33;"
15187 "delete pixels[3];" 15188 "delete pixels[3];"
15188 "pixels[3];"); 15189 "pixels[3];");
15189 CHECK_EQ(33, result->Int32Value()); 15190 CHECK_EQ(33, result->Int32Value());
15190 15191
15191 result = CompileRun("pixels[0] = 10; pixels[1] = 11;" 15192 result = CompileRun("pixels[0] = 10; pixels[1] = 11;"
15192 "pixels[2] = 12; pixels[3] = 13;" 15193 "pixels[2] = 12; pixels[3] = 13;"
15193 "pixels.__defineGetter__('2'," 15194 "pixels.__defineGetter__('2',"
15194 "function() { return 120; });" 15195 "function() { return 120; });"
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
15491 15492
15492 15493
15493 template <class ExternalArrayClass, class ElementType> 15494 template <class ExternalArrayClass, class ElementType>
15494 static void ObjectWithExternalArrayTestHelper( 15495 static void ObjectWithExternalArrayTestHelper(
15495 Handle<Context> context, 15496 Handle<Context> context,
15496 v8::Handle<Object> obj, 15497 v8::Handle<Object> obj,
15497 int element_count, 15498 int element_count,
15498 v8::ExternalArrayType array_type, 15499 v8::ExternalArrayType array_type,
15499 int64_t low, int64_t high) { 15500 int64_t low, int64_t high) {
15500 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); 15501 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj);
15502 i::Isolate* isolate = jsobj->GetIsolate();
15501 obj->Set(v8_str("field"), v8::Int32::New(1503)); 15503 obj->Set(v8_str("field"), v8::Int32::New(1503));
15502 context->Global()->Set(v8_str("ext_array"), obj); 15504 context->Global()->Set(v8_str("ext_array"), obj);
15503 v8::Handle<v8::Value> result = CompileRun("ext_array.field"); 15505 v8::Handle<v8::Value> result = CompileRun("ext_array.field");
15504 CHECK_EQ(1503, result->Int32Value()); 15506 CHECK_EQ(1503, result->Int32Value());
15505 result = CompileRun("ext_array[1]"); 15507 result = CompileRun("ext_array[1]");
15506 CHECK_EQ(1, result->Int32Value()); 15508 CHECK_EQ(1, result->Int32Value());
15507 15509
15508 // Check pass through of assigned smis 15510 // Check pass through of assigned smis
15509 result = CompileRun("var sum = 0;" 15511 result = CompileRun("var sum = 0;"
15510 "for (var i = 0; i < 8; i++) {" 15512 "for (var i = 0; i < 8; i++) {"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
15632 CHECK_EQ(false, result->BooleanValue()); 15634 CHECK_EQ(false, result->BooleanValue());
15633 15635
15634 // Check other boundary conditions, values and operations. 15636 // Check other boundary conditions, values and operations.
15635 result = CompileRun("for (var i = 0; i < 8; i++) {" 15637 result = CompileRun("for (var i = 0; i < 8; i++) {"
15636 " ext_array[7] = undefined;" 15638 " ext_array[7] = undefined;"
15637 "}" 15639 "}"
15638 "ext_array[7];"); 15640 "ext_array[7];");
15639 CHECK_EQ(0, result->Int32Value()); 15641 CHECK_EQ(0, result->Int32Value());
15640 if (array_type == v8::kExternalDoubleArray || 15642 if (array_type == v8::kExternalDoubleArray ||
15641 array_type == v8::kExternalFloatArray) { 15643 array_type == v8::kExternalFloatArray) {
15642 CHECK_EQ( 15644 CHECK_EQ(static_cast<int>(i::OS::nan_value()),
15643 static_cast<int>(i::OS::nan_value()), 15645 static_cast<int>(
15644 static_cast<int>(jsobj->GetElement(7)->ToObjectChecked()->Number())); 15646 jsobj->GetElement(isolate, 7)->ToObjectChecked()->Number()));
15645 } else { 15647 } else {
15646 CHECK_EQ(0, static_cast<int>( 15648 CheckElementValue(isolate, 0, jsobj, 7);
15647 jsobj->GetElement(7)->ToObjectChecked()->Number()));
15648 } 15649 }
15649 15650
15650 result = CompileRun("for (var i = 0; i < 8; i++) {" 15651 result = CompileRun("for (var i = 0; i < 8; i++) {"
15651 " ext_array[6] = '2.3';" 15652 " ext_array[6] = '2.3';"
15652 "}" 15653 "}"
15653 "ext_array[6];"); 15654 "ext_array[6];");
15654 CHECK_EQ(2, result->Int32Value()); 15655 CHECK_EQ(2, result->Int32Value());
15655 CHECK_EQ( 15656 CHECK_EQ(2,
15656 2, static_cast<int>(jsobj->GetElement(6)->ToObjectChecked()->Number())); 15657 static_cast<int>(
15658 jsobj->GetElement(isolate, 6)->ToObjectChecked()->Number()));
15657 15659
15658 if (array_type != v8::kExternalFloatArray && 15660 if (array_type != v8::kExternalFloatArray &&
15659 array_type != v8::kExternalDoubleArray) { 15661 array_type != v8::kExternalDoubleArray) {
15660 // Though the specification doesn't state it, be explicit about 15662 // Though the specification doesn't state it, be explicit about
15661 // converting NaNs and +/-Infinity to zero. 15663 // converting NaNs and +/-Infinity to zero.
15662 result = CompileRun("for (var i = 0; i < 8; i++) {" 15664 result = CompileRun("for (var i = 0; i < 8; i++) {"
15663 " ext_array[i] = 5;" 15665 " ext_array[i] = 5;"
15664 "}" 15666 "}"
15665 "for (var i = 0; i < 8; i++) {" 15667 "for (var i = 0; i < 8; i++) {"
15666 " ext_array[i] = NaN;" 15668 " ext_array[i] = NaN;"
15667 "}" 15669 "}"
15668 "ext_array[5];"); 15670 "ext_array[5];");
15669 CHECK_EQ(0, result->Int32Value()); 15671 CHECK_EQ(0, result->Int32Value());
15670 CHECK_EQ(0, 15672 CheckElementValue(isolate, 0, jsobj, 5);
15671 i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value());
15672 15673
15673 result = CompileRun("for (var i = 0; i < 8; i++) {" 15674 result = CompileRun("for (var i = 0; i < 8; i++) {"
15674 " ext_array[i] = 5;" 15675 " ext_array[i] = 5;"
15675 "}" 15676 "}"
15676 "for (var i = 0; i < 8; i++) {" 15677 "for (var i = 0; i < 8; i++) {"
15677 " ext_array[i] = Infinity;" 15678 " ext_array[i] = Infinity;"
15678 "}" 15679 "}"
15679 "ext_array[5];"); 15680 "ext_array[5];");
15680 int expected_value = 15681 int expected_value =
15681 (array_type == v8::kExternalPixelArray) ? 255 : 0; 15682 (array_type == v8::kExternalPixelArray) ? 255 : 0;
15682 CHECK_EQ(expected_value, result->Int32Value()); 15683 CHECK_EQ(expected_value, result->Int32Value());
15683 CHECK_EQ(expected_value, 15684 CheckElementValue(isolate, expected_value, jsobj, 5);
15684 i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value());
15685 15685
15686 result = CompileRun("for (var i = 0; i < 8; i++) {" 15686 result = CompileRun("for (var i = 0; i < 8; i++) {"
15687 " ext_array[i] = 5;" 15687 " ext_array[i] = 5;"
15688 "}" 15688 "}"
15689 "for (var i = 0; i < 8; i++) {" 15689 "for (var i = 0; i < 8; i++) {"
15690 " ext_array[i] = -Infinity;" 15690 " ext_array[i] = -Infinity;"
15691 "}" 15691 "}"
15692 "ext_array[5];"); 15692 "ext_array[5];");
15693 CHECK_EQ(0, result->Int32Value()); 15693 CHECK_EQ(0, result->Int32Value());
15694 CHECK_EQ(0, 15694 CheckElementValue(isolate, 0, jsobj, 5);
15695 i::Smi::cast(jsobj->GetElement(5)->ToObjectChecked())->value());
15696 15695
15697 // Check truncation behavior of integral arrays. 15696 // Check truncation behavior of integral arrays.
15698 const char* unsigned_data = 15697 const char* unsigned_data =
15699 "var source_data = [0.6, 10.6];" 15698 "var source_data = [0.6, 10.6];"
15700 "var expected_results = [0, 10];"; 15699 "var expected_results = [0, 10];";
15701 const char* signed_data = 15700 const char* signed_data =
15702 "var source_data = [0.6, 10.6, -0.6, -10.6];" 15701 "var source_data = [0.6, 10.6, -0.6, -10.6];"
15703 "var expected_results = [0, 10, 0, -10];"; 15702 "var expected_results = [0, 10, 0, -10];";
15704 const char* pixel_data = 15703 const char* pixel_data =
15705 "var source_data = [0.6, 10.6];" 15704 "var source_data = [0.6, 10.6];"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
15791 result = CompileRun("ext_array[1] = 23;"); 15790 result = CompileRun("ext_array[1] = 23;");
15792 CHECK_EQ(23, result->Int32Value()); 15791 CHECK_EQ(23, result->Int32Value());
15793 } 15792 }
15794 15793
15795 15794
15796 template <class ExternalArrayClass, class ElementType> 15795 template <class ExternalArrayClass, class ElementType>
15797 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, 15796 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type,
15798 int64_t low, 15797 int64_t low,
15799 int64_t high) { 15798 int64_t high) {
15800 LocalContext context; 15799 LocalContext context;
15801 i::Factory* factory = i::Isolate::Current()->factory(); 15800 i::Isolate* isolate = i::Isolate::Current();
15801 i::Factory* factory = isolate->factory();
15802 v8::HandleScope scope(context->GetIsolate()); 15802 v8::HandleScope scope(context->GetIsolate());
15803 const int kElementCount = 40; 15803 const int kElementCount = 40;
15804 int element_size = ExternalArrayElementSize(array_type); 15804 int element_size = ExternalArrayElementSize(array_type);
15805 ElementType* array_data = 15805 ElementType* array_data =
15806 static_cast<ElementType*>(malloc(kElementCount * element_size)); 15806 static_cast<ElementType*>(malloc(kElementCount * element_size));
15807 i::Handle<ExternalArrayClass> array = 15807 i::Handle<ExternalArrayClass> array =
15808 i::Handle<ExternalArrayClass>::cast( 15808 i::Handle<ExternalArrayClass>::cast(
15809 factory->NewExternalArray(kElementCount, array_type, array_data)); 15809 factory->NewExternalArray(kElementCount, array_type, array_data));
15810 // Force GC to trigger verification. 15810 // Force GC to trigger verification.
15811 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 15811 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
15812 for (int i = 0; i < kElementCount; i++) { 15812 for (int i = 0; i < kElementCount; i++) {
15813 array->set(i, static_cast<ElementType>(i)); 15813 array->set(i, static_cast<ElementType>(i));
15814 } 15814 }
15815 // Force GC to trigger verification. 15815 // Force GC to trigger verification.
15816 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 15816 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
15817 for (int i = 0; i < kElementCount; i++) { 15817 for (int i = 0; i < kElementCount; i++) {
15818 CHECK_EQ(static_cast<int64_t>(i), 15818 CHECK_EQ(static_cast<int64_t>(i),
15819 static_cast<int64_t>(array->get_scalar(i))); 15819 static_cast<int64_t>(array->get_scalar(i)));
15820 CHECK_EQ(static_cast<int64_t>(i), static_cast<int64_t>(array_data[i])); 15820 CHECK_EQ(static_cast<int64_t>(i), static_cast<int64_t>(array_data[i]));
15821 } 15821 }
15822 15822
15823 v8::Handle<v8::Object> obj = v8::Object::New(); 15823 v8::Handle<v8::Object> obj = v8::Object::New();
15824 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); 15824 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj);
15825 // Set the elements to be the external array. 15825 // Set the elements to be the external array.
15826 obj->SetIndexedPropertiesToExternalArrayData(array_data, 15826 obj->SetIndexedPropertiesToExternalArrayData(array_data,
15827 array_type, 15827 array_type,
15828 kElementCount); 15828 kElementCount);
15829 CHECK_EQ( 15829 CHECK_EQ(1,
15830 1, static_cast<int>(jsobj->GetElement(1)->ToObjectChecked()->Number())); 15830 static_cast<int>(
15831 jsobj->GetElement(isolate, 1)->ToObjectChecked()->Number()));
15831 15832
15832 ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( 15833 ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>(
15833 context.local(), obj, kElementCount, array_type, low, high); 15834 context.local(), obj, kElementCount, array_type, low, high);
15834 15835
15835 v8::Handle<v8::Value> result; 15836 v8::Handle<v8::Value> result;
15836 15837
15837 // Test more complex manipulations which cause eax to contain values 15838 // Test more complex manipulations which cause eax to contain values
15838 // that won't be completely overwritten by loads from the arrays. 15839 // that won't be completely overwritten by loads from the arrays.
15839 // This catches bugs in the instructions used for the KeyedLoadIC 15840 // This catches bugs in the instructions used for the KeyedLoadIC
15840 // for byte and word types. 15841 // for byte and word types.
(...skipping 4571 matching lines...) Expand 10 before | Expand all | Expand 10 after
20412 "setAge(100);" 20413 "setAge(100);"
20413 "setAge(101);" 20414 "setAge(101);"
20414 "setAge(102);" 20415 "setAge(102);"
20415 "%OptimizeFunctionOnNextCall(setAge);" 20416 "%OptimizeFunctionOnNextCall(setAge);"
20416 "setAge(103);"); 20417 "setAge(103);");
20417 ExpectInt32("obj.age", 100000); 20418 ExpectInt32("obj.age", 100000);
20418 ExpectInt32("obj.interceptor_age", 103); 20419 ExpectInt32("obj.interceptor_age", 103);
20419 } 20420 }
20420 20421
20421 #endif // V8_OS_POSIX 20422 #endif // V8_OS_POSIX
OLDNEW
« no previous file with comments | « src/runtime.cc ('k') | test/cctest/test-heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698