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

Side by Side Diff: src/runtime/runtime-internal.cc

Issue 1752133004: [proxies] throw TypeError in [[Call]] if is_callable Map bit is unset (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/ast/prettyprinter.h" 8 #include "src/ast/prettyprinter.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/conversions.h" 10 #include "src/conversions.h"
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 DCHECK(args.length() == 1); 370 DCHECK(args.length() == 1);
371 CONVERT_ARG_CHECKED(String, name, 0); 371 CONVERT_ARG_CHECKED(String, name, 0);
372 372
373 if (FLAG_native_code_counters) { 373 if (FLAG_native_code_counters) {
374 StatsCounter(isolate, name->ToCString().get()).Increment(); 374 StatsCounter(isolate, name->ToCString().get()).Increment();
375 } 375 }
376 return isolate->heap()->undefined_value(); 376 return isolate->heap()->undefined_value();
377 } 377 }
378 378
379 379
380 namespace {
381
382 bool ComputeLocation(Isolate* isolate, MessageLocation* target) {
383 JavaScriptFrameIterator it(isolate);
384 if (!it.done()) {
385 JavaScriptFrame* frame = it.frame();
386 JSFunction* fun = frame->function();
387 Object* script = fun->shared()->script();
388 if (script->IsScript() &&
389 !(Script::cast(script)->source()->IsUndefined())) {
390 Handle<Script> casted_script(Script::cast(script));
391 // Compute the location from the function and the relocation info of the
392 // baseline code. For optimized code this will use the deoptimization
393 // information to get canonical location information.
394 List<FrameSummary> frames(FLAG_max_inlining_levels + 1);
395 it.frame()->Summarize(&frames);
396 FrameSummary& summary = frames.last();
397 int pos = summary.abstract_code()->SourcePosition(summary.code_offset());
398 *target = MessageLocation(casted_script, pos, pos + 1, handle(fun));
399 return true;
400 }
401 }
402 return false;
403 }
404
405
406 Handle<String> RenderCallSite(Isolate* isolate, Handle<Object> object) {
407 MessageLocation location;
408 if (ComputeLocation(isolate, &location)) {
409 Zone zone;
410 base::SmartPointer<ParseInfo> info(
411 location.function()->shared()->is_function()
412 ? new ParseInfo(&zone, location.function())
413 : new ParseInfo(&zone, location.script()));
414 if (Parser::ParseStatic(info.get())) {
415 CallPrinter printer(isolate, location.function()->shared()->IsBuiltin());
416 const char* string = printer.Print(info->literal(), location.start_pos());
417 if (strlen(string) > 0) {
418 return isolate->factory()->NewStringFromAsciiChecked(string);
419 }
420 } else {
421 isolate->clear_pending_exception();
422 }
423 }
424 return Object::TypeOf(isolate, object);
425 }
426
427 } // namespace
428
429
430 RUNTIME_FUNCTION(Runtime_ThrowCalledNonCallable) { 380 RUNTIME_FUNCTION(Runtime_ThrowCalledNonCallable) {
431 HandleScope scope(isolate); 381 HandleScope scope(isolate);
432 DCHECK_EQ(1, args.length()); 382 DCHECK_EQ(1, args.length());
433 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 383 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
434 Handle<String> callsite = RenderCallSite(isolate, object); 384 Handle<String> callsite = Runtime::RenderCallSite(isolate, object);
435 THROW_NEW_ERROR_RETURN_FAILURE( 385 THROW_NEW_ERROR_RETURN_FAILURE(
436 isolate, NewTypeError(MessageTemplate::kCalledNonCallable, callsite)); 386 isolate, NewTypeError(MessageTemplate::kCalledNonCallable, callsite));
437 } 387 }
438 388
439 389
440 RUNTIME_FUNCTION(Runtime_ThrowConstructedNonConstructable) { 390 RUNTIME_FUNCTION(Runtime_ThrowConstructedNonConstructable) {
441 HandleScope scope(isolate); 391 HandleScope scope(isolate);
442 DCHECK_EQ(1, args.length()); 392 DCHECK_EQ(1, args.length());
443 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 393 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
444 Handle<String> callsite = RenderCallSite(isolate, object); 394 Handle<String> callsite = Runtime::RenderCallSite(isolate, object);
445 THROW_NEW_ERROR_RETURN_FAILURE( 395 THROW_NEW_ERROR_RETURN_FAILURE(
446 isolate, NewTypeError(MessageTemplate::kNotConstructor, callsite)); 396 isolate, NewTypeError(MessageTemplate::kNotConstructor, callsite));
447 } 397 }
448 398
449 399
450 RUNTIME_FUNCTION(Runtime_ThrowDerivedConstructorReturnedNonObject) { 400 RUNTIME_FUNCTION(Runtime_ThrowDerivedConstructorReturnedNonObject) {
451 HandleScope scope(isolate); 401 HandleScope scope(isolate);
452 DCHECK_EQ(0, args.length()); 402 DCHECK_EQ(0, args.length());
453 THROW_NEW_ERROR_RETURN_FAILURE( 403 THROW_NEW_ERROR_RETURN_FAILURE(
454 isolate, NewTypeError(MessageTemplate::kDerivedConstructorReturn)); 404 isolate, NewTypeError(MessageTemplate::kDerivedConstructorReturn));
(...skipping 28 matching lines...) Expand all
483 std::stringstream stats_stream; 433 std::stringstream stats_stream;
484 isolate->counters()->runtime_call_stats()->Print(stats_stream); 434 isolate->counters()->runtime_call_stats()->Print(stats_stream);
485 Handle<String> result = 435 Handle<String> result =
486 isolate->factory()->NewStringFromAsciiChecked(stats_stream.str().c_str()); 436 isolate->factory()->NewStringFromAsciiChecked(stats_stream.str().c_str());
487 isolate->counters()->runtime_call_stats()->Reset(); 437 isolate->counters()->runtime_call_stats()->Reset();
488 return *result; 438 return *result;
489 } 439 }
490 440
491 } // namespace internal 441 } // namespace internal
492 } // namespace v8 442 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698