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

Side by Side Diff: runtime/vm/exceptions.cc

Issue 1870343002: - Refactor Symbol allocation to expect a thread parameter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review feedback. Created 4 years, 8 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
« no previous file with comments | « runtime/vm/dart_entry_test.cc ('k') | runtime/vm/find_code_object_test.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 (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/exceptions.h" 5 #include "vm/exceptions.h"
6 6
7 #include "platform/address_sanitizer.h" 7 #include "platform/address_sanitizer.h"
8 8
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 const Function& caller = Function::Handle(caller_frame->LookupDartFunction()); 413 const Function& caller = Function::Handle(caller_frame->LookupDartFunction());
414 ASSERT(!caller.IsNull()); 414 ASSERT(!caller.IsNull());
415 return caller.script(); 415 return caller.script();
416 } 416 }
417 417
418 418
419 // Allocate a new instance of the given class name. 419 // Allocate a new instance of the given class name.
420 // TODO(hausner): Rename this NewCoreInstance to call out the fact that 420 // TODO(hausner): Rename this NewCoreInstance to call out the fact that
421 // the class name is resolved in the core library implicitly? 421 // the class name is resolved in the core library implicitly?
422 RawInstance* Exceptions::NewInstance(const char* class_name) { 422 RawInstance* Exceptions::NewInstance(const char* class_name) {
423 const String& cls_name = String::Handle(Symbols::New(class_name)); 423 Thread* thread = Thread::Current();
424 Zone* zone = thread->zone();
425 const String& cls_name = String::Handle(zone,
426 Symbols::New(thread, class_name));
424 const Library& core_lib = Library::Handle(Library::CoreLibrary()); 427 const Library& core_lib = Library::Handle(Library::CoreLibrary());
425 // No ambiguity error expected: passing NULL. 428 // No ambiguity error expected: passing NULL.
426 Class& cls = Class::Handle(core_lib.LookupClass(cls_name)); 429 Class& cls = Class::Handle(core_lib.LookupClass(cls_name));
427 ASSERT(!cls.IsNull()); 430 ASSERT(!cls.IsNull());
428 // There are no parameterized error types, so no need to set type arguments. 431 // There are no parameterized error types, so no need to set type arguments.
429 return Instance::New(cls); 432 return Instance::New(cls);
430 } 433 }
431 434
432 435
433 // Allocate, initialize, and throw a TypeError or CastError. 436 // Allocate, initialize, and throw a TypeError or CastError.
(...skipping 19 matching lines...) Expand all
453 script.GetTokenLocation(location, &line, &column); 456 script.GetTokenLocation(location, &line, &column);
454 } else { 457 } else {
455 script.GetTokenLocation(location, &line, NULL); 458 script.GetTokenLocation(location, &line, NULL);
456 } 459 }
457 // Initialize '_url', '_line', and '_column' arguments. 460 // Initialize '_url', '_line', and '_column' arguments.
458 args.SetAt(0, String::Handle(zone, script.url())); 461 args.SetAt(0, String::Handle(zone, script.url()));
459 args.SetAt(1, Smi::Handle(zone, Smi::New(line))); 462 args.SetAt(1, Smi::Handle(zone, Smi::New(line)));
460 args.SetAt(2, Smi::Handle(zone, Smi::New(column))); 463 args.SetAt(2, Smi::Handle(zone, Smi::New(column)));
461 464
462 // Construct '_errorMsg'. 465 // Construct '_errorMsg'.
463 GrowableHandlePtrArray<const String> pieces(zone, 20); 466 const GrowableObjectArray& pieces = GrowableObjectArray::Handle(zone,
467 GrowableObjectArray::New(20));
464 468
465 // Print bound error first, if any. 469 // Print bound error first, if any.
466 if (!bound_error_msg.IsNull() && (bound_error_msg.Length() > 0)) { 470 if (!bound_error_msg.IsNull() && (bound_error_msg.Length() > 0)) {
467 pieces.Add(bound_error_msg); 471 pieces.Add(bound_error_msg);
468 pieces.Add(Symbols::NewLine()); 472 pieces.Add(Symbols::NewLine());
469 } 473 }
470 474
471 // If dst_type is malformed or malbounded, only print the embedded error. 475 // If dst_type is malformed or malbounded, only print the embedded error.
472 if (!dst_type.IsNull()) { 476 if (!dst_type.IsNull()) {
473 const LanguageError& error = LanguageError::Handle(zone, dst_type.error()); 477 const LanguageError& error = LanguageError::Handle(zone, dst_type.error());
474 if (!error.IsNull()) { 478 if (!error.IsNull()) {
475 // Print the embedded error only. 479 // Print the embedded error only.
476 pieces.Add(String::Handle(zone, Symbols::New(error.ToErrorCString()))); 480 pieces.Add(String::Handle(zone, String::New(error.ToErrorCString())));
477 pieces.Add(Symbols::NewLine()); 481 pieces.Add(Symbols::NewLine());
478 } else { 482 } else {
479 // Describe the type error. 483 // Describe the type error.
480 if (!src_type.IsNull()) { 484 if (!src_type.IsNull()) {
481 pieces.Add(Symbols::TypeQuote()); 485 pieces.Add(Symbols::TypeQuote());
482 pieces.Add(String::Handle(zone, src_type.UserVisibleName())); 486 pieces.Add(String::Handle(zone, src_type.UserVisibleName()));
483 pieces.Add(Symbols::QuoteIsNotASubtypeOf()); 487 pieces.Add(Symbols::QuoteIsNotASubtypeOf());
484 } 488 }
485 pieces.Add(Symbols::TypeQuote()); 489 pieces.Add(Symbols::TypeQuote());
486 pieces.Add(String::Handle(zone, dst_type.UserVisibleName())); 490 pieces.Add(String::Handle(zone, dst_type.UserVisibleName()));
(...skipping 21 matching lines...) Expand all
508 const String& uris = String::Handle(zone, dst_type.EnumerateURIs()); 512 const String& uris = String::Handle(zone, dst_type.EnumerateURIs());
509 if (uris.Length() > Symbols::SpaceIsFromSpace().Length()) { 513 if (uris.Length() > Symbols::SpaceIsFromSpace().Length()) {
510 if (!printed_where) { 514 if (!printed_where) {
511 pieces.Add(Symbols::SpaceWhereNewLine()); 515 pieces.Add(Symbols::SpaceWhereNewLine());
512 } 516 }
513 pieces.Add(uris); 517 pieces.Add(uris);
514 } 518 }
515 } 519 }
516 } 520 }
517 } 521 }
518 const String& error_msg = 522 const Array& arr = Array::Handle(zone, Array::MakeArray(pieces));
519 String::Handle(zone, Symbols::FromConcatAll(pieces)); 523 const String& error_msg = String::Handle(zone, String::ConcatAll(arr));
520 args.SetAt(3, error_msg); 524 args.SetAt(3, error_msg);
521 525
522 // Type errors in the core library may be difficult to diagnose. 526 // Type errors in the core library may be difficult to diagnose.
523 // Print type error information before throwing the error when debugging. 527 // Print type error information before throwing the error when debugging.
524 if (FLAG_print_stacktrace_at_throw) { 528 if (FLAG_print_stacktrace_at_throw) {
525 THR_Print("'%s': Failed type check: line %" Pd " pos %" Pd ": ", 529 THR_Print("'%s': Failed type check: line %" Pd " pos %" Pd ": ",
526 String::Handle(zone, script.url()).ToCString(), line, column); 530 String::Handle(zone, script.url()).ToCString(), line, column);
527 THR_Print("%s\n", error_msg.ToCString()); 531 THR_Print("%s\n", error_msg.ToCString());
528 } 532 }
529 533
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 } 716 }
713 717
714 return DartLibraryCalls::InstanceCreate(library, 718 return DartLibraryCalls::InstanceCreate(library,
715 *class_name, 719 *class_name,
716 *constructor_name, 720 *constructor_name,
717 arguments); 721 arguments);
718 } 722 }
719 723
720 724
721 } // namespace dart 725 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_entry_test.cc ('k') | runtime/vm/find_code_object_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698