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

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

Issue 277913002: Presubmit checks recover. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebasing Created 6 years, 7 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/x64/assembler-x64.h ('k') | test/cctest/test-semaphore.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 22130 matching lines...) Expand 10 before | Expand all | Expand 10 after
22141 CHECK(data == info.Data()); 22141 CHECK(data == info.Data());
22142 CHECK(receiver == info.This()); 22142 CHECK(receiver == info.This());
22143 if (info.Length() == 1) { 22143 if (info.Length() == 1) {
22144 CHECK_EQ(v8_num(1), info[0]); 22144 CHECK_EQ(v8_num(1), info[0]);
22145 } 22145 }
22146 CHECK(holder == info.Holder()); 22146 CHECK(holder == info.Holder());
22147 count++; 22147 count++;
22148 info.GetReturnValue().Set(v8_str("returned")); 22148 info.GetReturnValue().Set(v8_str("returned"));
22149 } 22149 }
22150 22150
22151 public: 22151 public:
22152 enum SignatureType { 22152 enum SignatureType {
22153 kNoSignature, 22153 kNoSignature,
22154 kSignatureOnReceiver, 22154 kSignatureOnReceiver,
22155 kSignatureOnPrototype 22155 kSignatureOnPrototype
22156 }; 22156 };
22157 22157
22158 void RunAll() { 22158 void RunAll() {
22159 SignatureType signature_types[] = 22159 SignatureType signature_types[] =
22160 {kNoSignature, kSignatureOnReceiver, kSignatureOnPrototype}; 22160 {kNoSignature, kSignatureOnReceiver, kSignatureOnPrototype};
22161 for (unsigned i = 0; i < ARRAY_SIZE(signature_types); i++) { 22161 for (unsigned i = 0; i < ARRAY_SIZE(signature_types); i++) {
22162 SignatureType signature_type = signature_types[i]; 22162 SignatureType signature_type = signature_types[i];
22163 for (int j = 0; j < 2; j++) { 22163 for (int j = 0; j < 2; j++) {
22164 bool global = j == 0; 22164 bool global = j == 0;
22165 int key = signature_type + 22165 int key = signature_type +
22166 ARRAY_SIZE(signature_types) * (global ? 1 : 0); 22166 ARRAY_SIZE(signature_types) * (global ? 1 : 0);
22167 Run(signature_type, global, key); 22167 Run(signature_type, global, key);
22168 }
22169 } 22168 }
22170 } 22169 }
22170 }
22171 22171
22172 void Run(SignatureType signature_type, bool global, int key) { 22172 void Run(SignatureType signature_type, bool global, int key) {
22173 v8::Isolate* isolate = CcTest::isolate(); 22173 v8::Isolate* isolate = CcTest::isolate();
22174 v8::HandleScope scope(isolate); 22174 v8::HandleScope scope(isolate);
22175 // Build a template for signature checks. 22175 // Build a template for signature checks.
22176 Local<v8::ObjectTemplate> signature_template; 22176 Local<v8::ObjectTemplate> signature_template;
22177 Local<v8::Signature> signature; 22177 Local<v8::Signature> signature;
22178 { 22178 {
22179 Local<v8::FunctionTemplate> parent_template = 22179 Local<v8::FunctionTemplate> parent_template =
22180 FunctionTemplate::New(isolate); 22180 FunctionTemplate::New(isolate);
22181 parent_template->SetHiddenPrototype(true); 22181 parent_template->SetHiddenPrototype(true);
22182 Local<v8::FunctionTemplate> function_template 22182 Local<v8::FunctionTemplate> function_template
22183 = FunctionTemplate::New(isolate); 22183 = FunctionTemplate::New(isolate);
22184 function_template->Inherit(parent_template); 22184 function_template->Inherit(parent_template);
22185 switch (signature_type) { 22185 switch (signature_type) {
22186 case kNoSignature: 22186 case kNoSignature:
22187 break; 22187 break;
22188 case kSignatureOnReceiver: 22188 case kSignatureOnReceiver:
22189 signature = v8::Signature::New(isolate, function_template); 22189 signature = v8::Signature::New(isolate, function_template);
22190 break; 22190 break;
22191 case kSignatureOnPrototype: 22191 case kSignatureOnPrototype:
22192 signature = v8::Signature::New(isolate, parent_template); 22192 signature = v8::Signature::New(isolate, parent_template);
22193 break; 22193 break;
22194 }
22195 signature_template = function_template->InstanceTemplate();
22196 } 22194 }
22197 // Global object must pass checks. 22195 signature_template = function_template->InstanceTemplate();
22198 Local<v8::Context> context = 22196 }
22199 v8::Context::New(isolate, NULL, signature_template); 22197 // Global object must pass checks.
22200 v8::Context::Scope context_scope(context); 22198 Local<v8::Context> context =
22201 // Install regular object that can pass signature checks. 22199 v8::Context::New(isolate, NULL, signature_template);
22202 Local<Object> function_receiver = signature_template->NewInstance(); 22200 v8::Context::Scope context_scope(context);
22203 context->Global()->Set(v8_str("function_receiver"), function_receiver); 22201 // Install regular object that can pass signature checks.
22204 // Get the holder objects. 22202 Local<Object> function_receiver = signature_template->NewInstance();
22205 Local<Object> inner_global = 22203 context->Global()->Set(v8_str("function_receiver"), function_receiver);
22206 Local<Object>::Cast(context->Global()->GetPrototype()); 22204 // Get the holder objects.
22207 // Install functions on hidden prototype object if there is one. 22205 Local<Object> inner_global =
22208 data = Object::New(isolate); 22206 Local<Object>::Cast(context->Global()->GetPrototype());
22209 Local<FunctionTemplate> function_template = FunctionTemplate::New( 22207 // Install functions on hidden prototype object if there is one.
22210 isolate, OptimizationCallback, data, signature); 22208 data = Object::New(isolate);
22211 Local<Function> function = function_template->GetFunction(); 22209 Local<FunctionTemplate> function_template = FunctionTemplate::New(
22212 Local<Object> global_holder = inner_global; 22210 isolate, OptimizationCallback, data, signature);
22213 Local<Object> function_holder = function_receiver; 22211 Local<Function> function = function_template->GetFunction();
22214 if (signature_type == kSignatureOnPrototype) { 22212 Local<Object> global_holder = inner_global;
22215 function_holder = Local<Object>::Cast(function_holder->GetPrototype()); 22213 Local<Object> function_holder = function_receiver;
22216 global_holder = Local<Object>::Cast(global_holder->GetPrototype()); 22214 if (signature_type == kSignatureOnPrototype) {
22215 function_holder = Local<Object>::Cast(function_holder->GetPrototype());
22216 global_holder = Local<Object>::Cast(global_holder->GetPrototype());
22217 }
22218 global_holder->Set(v8_str("g_f"), function);
22219 global_holder->SetAccessorProperty(v8_str("g_acc"), function, function);
22220 function_holder->Set(v8_str("f"), function);
22221 function_holder->SetAccessorProperty(v8_str("acc"), function, function);
22222 // Initialize expected values.
22223 callee = function;
22224 count = 0;
22225 if (global) {
22226 receiver = context->Global();
22227 holder = inner_global;
22228 } else {
22229 holder = function_receiver;
22230 // If not using a signature, add something else to the prototype chain
22231 // to test the case that holder != receiver
22232 if (signature_type == kNoSignature) {
22233 receiver = Local<Object>::Cast(CompileRun(
22234 "var receiver_subclass = {};\n"
22235 "receiver_subclass.__proto__ = function_receiver;\n"
22236 "receiver_subclass"));
22237 } else {
22238 receiver = Local<Object>::Cast(CompileRun(
22239 "var receiver_subclass = function_receiver;\n"
22240 "receiver_subclass"));
22217 } 22241 }
22218 global_holder->Set(v8_str("g_f"), function); 22242 }
22219 global_holder->SetAccessorProperty(v8_str("g_acc"), function, function); 22243 // With no signature, the holder is not set.
22220 function_holder->Set(v8_str("f"), function); 22244 if (signature_type == kNoSignature) holder = receiver;
22221 function_holder->SetAccessorProperty(v8_str("acc"), function, function); 22245 // build wrap_function
22222 // Initialize expected values. 22246 i::ScopedVector<char> wrap_function(200);
22223 callee = function; 22247 if (global) {
22224 count = 0;
22225 if (global) {
22226 receiver = context->Global();
22227 holder = inner_global;
22228 } else {
22229 holder = function_receiver;
22230 // If not using a signature, add something else to the prototype chain
22231 // to test the case that holder != receiver
22232 if (signature_type == kNoSignature) {
22233 receiver = Local<Object>::Cast(CompileRun(
22234 "var receiver_subclass = {};\n"
22235 "receiver_subclass.__proto__ = function_receiver;\n"
22236 "receiver_subclass"));
22237 } else {
22238 receiver = Local<Object>::Cast(CompileRun(
22239 "var receiver_subclass = function_receiver;\n"
22240 "receiver_subclass"));
22241 }
22242 }
22243 // With no signature, the holder is not set.
22244 if (signature_type == kNoSignature) holder = receiver;
22245 // build wrap_function
22246 i::ScopedVector<char> wrap_function(200);
22247 if (global) {
22248 i::OS::SNPrintF(
22249 wrap_function,
22250 "function wrap_f_%d() { var f = g_f; return f(); }\n"
22251 "function wrap_get_%d() { return this.g_acc; }\n"
22252 "function wrap_set_%d() { return this.g_acc = 1; }\n",
22253 key, key, key);
22254 } else {
22255 i::OS::SNPrintF(
22256 wrap_function,
22257 "function wrap_f_%d() { return receiver_subclass.f(); }\n"
22258 "function wrap_get_%d() { return receiver_subclass.acc; }\n"
22259 "function wrap_set_%d() { return receiver_subclass.acc = 1; }\n",
22260 key, key, key);
22261 }
22262 // build source string
22263 i::ScopedVector<char> source(1000);
22264 i::OS::SNPrintF( 22248 i::OS::SNPrintF(
22265 source, 22249 wrap_function,
22266 "%s\n" // wrap functions 22250 "function wrap_f_%d() { var f = g_f; return f(); }\n"
22267 "function wrap_f() { return wrap_f_%d(); }\n" 22251 "function wrap_get_%d() { return this.g_acc; }\n"
22268 "function wrap_get() { return wrap_get_%d(); }\n" 22252 "function wrap_set_%d() { return this.g_acc = 1; }\n",
22269 "function wrap_set() { return wrap_set_%d(); }\n" 22253 key, key, key);
22270 "check = function(returned) {\n" 22254 } else {
22271 " if (returned !== 'returned') { throw returned; }\n" 22255 i::OS::SNPrintF(
22272 "}\n" 22256 wrap_function,
22273 "\n" 22257 "function wrap_f_%d() { return receiver_subclass.f(); }\n"
22274 "check(wrap_f());\n" 22258 "function wrap_get_%d() { return receiver_subclass.acc; }\n"
22275 "check(wrap_f());\n" 22259 "function wrap_set_%d() { return receiver_subclass.acc = 1; }\n",
22276 "%%OptimizeFunctionOnNextCall(wrap_f_%d);\n" 22260 key, key, key);
22277 "check(wrap_f());\n"
22278 "\n"
22279 "check(wrap_get());\n"
22280 "check(wrap_get());\n"
22281 "%%OptimizeFunctionOnNextCall(wrap_get_%d);\n"
22282 "check(wrap_get());\n"
22283 "\n"
22284 "check = function(returned) {\n"
22285 " if (returned !== 1) { throw returned; }\n"
22286 "}\n"
22287 "check(wrap_set());\n"
22288 "check(wrap_set());\n"
22289 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n"
22290 "check(wrap_set());\n",
22291 wrap_function.start(), key, key, key, key, key, key);
22292 v8::TryCatch try_catch;
22293 CompileRun(source.start());
22294 ASSERT(!try_catch.HasCaught());
22295 CHECK_EQ(9, count);
22296 } 22261 }
22262 // build source string
22263 i::ScopedVector<char> source(1000);
22264 i::OS::SNPrintF(
22265 source,
22266 "%s\n" // wrap functions
22267 "function wrap_f() { return wrap_f_%d(); }\n"
22268 "function wrap_get() { return wrap_get_%d(); }\n"
22269 "function wrap_set() { return wrap_set_%d(); }\n"
22270 "check = function(returned) {\n"
22271 " if (returned !== 'returned') { throw returned; }\n"
22272 "}\n"
22273 "\n"
22274 "check(wrap_f());\n"
22275 "check(wrap_f());\n"
22276 "%%OptimizeFunctionOnNextCall(wrap_f_%d);\n"
22277 "check(wrap_f());\n"
22278 "\n"
22279 "check(wrap_get());\n"
22280 "check(wrap_get());\n"
22281 "%%OptimizeFunctionOnNextCall(wrap_get_%d);\n"
22282 "check(wrap_get());\n"
22283 "\n"
22284 "check = function(returned) {\n"
22285 " if (returned !== 1) { throw returned; }\n"
22286 "}\n"
22287 "check(wrap_set());\n"
22288 "check(wrap_set());\n"
22289 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n"
22290 "check(wrap_set());\n",
22291 wrap_function.start(), key, key, key, key, key, key);
22292 v8::TryCatch try_catch;
22293 CompileRun(source.start());
22294 ASSERT(!try_catch.HasCaught());
22295 CHECK_EQ(9, count);
22296 }
22297 }; 22297 };
22298 22298
22299 22299
22300 Local<Object> ApiCallOptimizationChecker::data; 22300 Local<Object> ApiCallOptimizationChecker::data;
22301 Local<Object> ApiCallOptimizationChecker::receiver; 22301 Local<Object> ApiCallOptimizationChecker::receiver;
22302 Local<Object> ApiCallOptimizationChecker::holder; 22302 Local<Object> ApiCallOptimizationChecker::holder;
22303 Local<Object> ApiCallOptimizationChecker::callee; 22303 Local<Object> ApiCallOptimizationChecker::callee;
22304 int ApiCallOptimizationChecker::count = 0; 22304 int ApiCallOptimizationChecker::count = 0;
22305 22305
22306 22306
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
22514 v8::internal::FLAG_stack_size = 150; 22514 v8::internal::FLAG_stack_size = 150;
22515 LocalContext current; 22515 LocalContext current;
22516 v8::Isolate* isolate = current->GetIsolate(); 22516 v8::Isolate* isolate = current->GetIsolate();
22517 v8::HandleScope scope(isolate); 22517 v8::HandleScope scope(isolate);
22518 V8::SetCaptureStackTraceForUncaughtExceptions( 22518 V8::SetCaptureStackTraceForUncaughtExceptions(
22519 true, 10, v8::StackTrace::kDetailed); 22519 true, 10, v8::StackTrace::kDetailed);
22520 v8::TryCatch try_catch; 22520 v8::TryCatch try_catch;
22521 CompileRun("(function f(x) { f(x+1); })(0)"); 22521 CompileRun("(function f(x) { f(x+1); })(0)");
22522 CHECK(try_catch.HasCaught()); 22522 CHECK(try_catch.HasCaught());
22523 } 22523 }
OLDNEW
« no previous file with comments | « src/x64/assembler-x64.h ('k') | test/cctest/test-semaphore.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698