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

Side by Side Diff: vm/flow_graph_builder.cc

Issue 11667012: Convert all symbols accessor to return read only handles so that it is not necessary to create a ne… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 7 years, 11 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/flow_graph_builder.h" 5 #include "vm/flow_graph_builder.h"
6 6
7 #include "vm/ast_printer.h" 7 #include "vm/ast_printer.h"
8 #include "vm/code_descriptors.h" 8 #include "vm/code_descriptors.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/flags.h" 10 #include "vm/flags.h"
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 (function.kind() == RawFunction::kConstImplicitGetter))); 503 (function.kind() == RawFunction::kConstImplicitGetter)));
504 // Implicit getters do not need a type check at return, unless they compute 504 // Implicit getters do not need a type check at return, unless they compute
505 // the initial value of a static field. 505 // the initial value of a static field.
506 // The body of a constructor cannot modify the type of the 506 // The body of a constructor cannot modify the type of the
507 // constructed instance, which is passed in as an implicit parameter. 507 // constructed instance, which is passed in as an implicit parameter.
508 // However, factories may create an instance of the wrong type. 508 // However, factories may create an instance of the wrong type.
509 if (!is_implicit_dynamic_getter && !function.IsConstructor()) { 509 if (!is_implicit_dynamic_getter && !function.IsConstructor()) {
510 const AbstractType& dst_type = 510 const AbstractType& dst_type =
511 AbstractType::ZoneHandle( 511 AbstractType::ZoneHandle(
512 owner()->parsed_function().function().result_type()); 512 owner()->parsed_function().function().result_type());
513 const String& dst_name = String::ZoneHandle(Symbols::FunctionResult());
514 return_value = BuildAssignableValue(node->value()->token_pos(), 513 return_value = BuildAssignableValue(node->value()->token_pos(),
515 return_value, 514 return_value,
516 dst_type, 515 dst_type,
517 dst_name); 516 Symbols::FunctionResult());
518 } 517 }
519 } 518 }
520 519
521 intptr_t current_context_level = owner()->context_level(); 520 intptr_t current_context_level = owner()->context_level();
522 ASSERT(current_context_level >= 0); 521 ASSERT(current_context_level >= 0);
523 if (owner()->parsed_function().saved_context_var() != NULL) { 522 if (owner()->parsed_function().saved_context_var() != NULL) {
524 // CTX on entry was saved, but not linked as context parent. 523 // CTX on entry was saved, but not linked as context parent.
525 BuildLoadContext(*owner()->parsed_function().saved_context_var()); 524 BuildLoadContext(*owner()->parsed_function().saved_context_var());
526 } else { 525 } else {
527 while (current_context_level-- > 0) { 526 while (current_context_level-- > 0) {
(...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 node->token_pos(), 1600 node->token_pos(),
1602 node->function_name(), Token::kILLEGAL, arguments, 1601 node->function_name(), Token::kILLEGAL, arguments,
1603 node->arguments()->names(), 1); 1602 node->arguments()->names(), 1);
1604 ReturnDefinition(call); 1603 ReturnDefinition(call);
1605 } 1604 }
1606 1605
1607 1606
1608 // <Expression> ::= StaticCall { function: Function 1607 // <Expression> ::= StaticCall { function: Function
1609 // arguments: <ArgumentList> } 1608 // arguments: <ArgumentList> }
1610 void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) { 1609 void EffectGraphVisitor::VisitStaticCallNode(StaticCallNode* node) {
1611 if (node->function().name() == Symbols::Identical()) { 1610 if (node->function().name() == Symbols::Identical().raw()) {
1612 // Attempt to replace top level defined 'identical' from the core 1611 // Attempt to replace top level defined 'identical' from the core
1613 // library with strict equal early on. 1612 // library with strict equal early on.
1614 // TODO(hausner): Evaluate if this can happen at AST building time. 1613 // TODO(hausner): Evaluate if this can happen at AST building time.
1615 const Class& cls = Class::Handle(node->function().Owner()); 1614 const Class& cls = Class::Handle(node->function().Owner());
1616 if (cls.IsTopLevel()) { 1615 if (cls.IsTopLevel()) {
1617 const Library& core_lib = Library::Handle(Library::CoreLibrary()); 1616 const Library& core_lib = Library::Handle(Library::CoreLibrary());
1618 if (cls.library() == core_lib.raw()) { 1617 if (cls.library() == core_lib.raw()) {
1619 ASSERT(node->arguments()->length() == 2); 1618 ASSERT(node->arguments()->length() == 2);
1620 ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth()); 1619 ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
1621 node->arguments()->NodeAt(0)->Visit(&for_left_value); 1620 node->arguments()->NodeAt(0)->Visit(&for_left_value);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1752 const Library& lib = Library::Handle(clazz.library()); 1751 const Library& lib = Library::Handle(clazz.library());
1753 1752
1754 const String& expected_class_name = 1753 const String& expected_class_name =
1755 String::Handle(lib.PrivateName(expected)); 1754 String::Handle(lib.PrivateName(expected));
1756 if (!String::Handle(clazz.Name()).Equals(expected_class_name)) { 1755 if (!String::Handle(clazz.Name()).Equals(expected_class_name)) {
1757 return false; 1756 return false;
1758 } 1757 }
1759 1758
1760 const String& function_name = String::Handle(function.name()); 1759 const String& function_name = String::Handle(function.name());
1761 const String& expected_function_name = String::Handle( 1760 const String& expected_function_name = String::Handle(
1762 String::Concat(expected_class_name, Symbols::DotHandle())); 1761 String::Concat(expected_class_name, Symbols::Dot()));
1763 return function_name.Equals(expected_function_name); 1762 return function_name.Equals(expected_function_name);
1764 } 1763 }
1765 1764
1766 1765
1767 static intptr_t GetResultCidOfConstructor(ConstructorCallNode* node) { 1766 static intptr_t GetResultCidOfConstructor(ConstructorCallNode* node) {
1768 const Function& function = node->constructor(); 1767 const Function& function = node->constructor();
1769 const Class& function_class = Class::Handle(function.Owner()); 1768 const Class& function_class = Class::Handle(function.Owner());
1770 const Library& core_lib = Library::Handle(Library::CoreLibrary()); 1769 const Library& core_lib = Library::Handle(Library::CoreLibrary());
1771 1770
1772 if (function_class.library() != core_lib.raw()) { 1771 if (function_class.library() != core_lib.raw()) {
1773 return kDynamicCid; 1772 return kDynamicCid;
1774 } 1773 }
1775 1774
1776 if (node->constructor().IsFactory()) { 1775 if (node->constructor().IsFactory()) {
1777 if ((function_class.Name() == Symbols::List()) && 1776 if ((function_class.Name() == Symbols::List().raw()) &&
1778 (function.name() == Symbols::ListFactory())) { 1777 (function.name() == Symbols::ListFactory().raw())) {
1779 // If there are no arguments then the result is guaranteed to be a 1778 // If there are no arguments then the result is guaranteed to be a
1780 // GrowableObjectArray. However if there is an argument the result 1779 // GrowableObjectArray. However if there is an argument the result
1781 // is not guaranteed to be a fixed size array because the argument 1780 // is not guaranteed to be a fixed size array because the argument
1782 // can be null. 1781 // can be null.
1783 if (node->arguments()->length() == 0) { 1782 if (node->arguments()->length() == 0) {
1784 return kGrowableObjectArrayCid; 1783 return kGrowableObjectArrayCid;
1785 } 1784 }
1786 } else { 1785 } else {
1787 if (IsRecognizedConstructor(function, 1786 if (IsRecognizedConstructor(function, Symbols::ObjectArray()) &&
1788 String::Handle(Symbols::ObjectArray())) &&
1789 (node->arguments()->length() == 1)) { 1787 (node->arguments()->length() == 1)) {
1790 return kArrayCid; 1788 return kArrayCid;
1791 } else if (IsRecognizedConstructor(function, 1789 } else if (IsRecognizedConstructor(function,
1792 String::Handle(Symbols::GrowableObjectArray())) && 1790 Symbols::GrowableObjectArray()) &&
1793 (node->arguments()->length() == 0)) { 1791 (node->arguments()->length() == 0)) {
1794 return kGrowableObjectArrayCid; 1792 return kGrowableObjectArrayCid;
1795 } 1793 }
1796 } 1794 }
1797 } 1795 }
1798 return kDynamicCid; // Result cid not known. 1796 return kDynamicCid; // Result cid not known.
1799 } 1797 }
1800 1798
1801 1799
1802 void EffectGraphVisitor::VisitConstructorCallNode(ConstructorCallNode* node) { 1800 void EffectGraphVisitor::VisitConstructorCallNode(ConstructorCallNode* node) {
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
2389 ReturnDefinition(BuildStoreStaticField(node, kResultNeeded)); 2387 ReturnDefinition(BuildStoreStaticField(node, kResultNeeded));
2390 } 2388 }
2391 2389
2392 2390
2393 void EffectGraphVisitor::VisitLoadIndexedNode(LoadIndexedNode* node) { 2391 void EffectGraphVisitor::VisitLoadIndexedNode(LoadIndexedNode* node) {
2394 Function* super_function = NULL; 2392 Function* super_function = NULL;
2395 if (node->IsSuperLoad()) { 2393 if (node->IsSuperLoad()) {
2396 // Resolve the load indexed operator in the super class. 2394 // Resolve the load indexed operator in the super class.
2397 super_function = &Function::ZoneHandle( 2395 super_function = &Function::ZoneHandle(
2398 Resolver::ResolveDynamicAnyArgs(node->super_class(), 2396 Resolver::ResolveDynamicAnyArgs(node->super_class(),
2399 Symbols::IndexTokenHandle())); 2397 Symbols::IndexToken()));
2400 if (super_function->IsNull()) { 2398 if (super_function->IsNull()) {
2401 // Could not resolve super operator. Generate call noSuchMethod() of the 2399 // Could not resolve super operator. Generate call noSuchMethod() of the
2402 // super class instead. 2400 // super class instead.
2403 ArgumentListNode* arguments = new ArgumentListNode(node->token_pos()); 2401 ArgumentListNode* arguments = new ArgumentListNode(node->token_pos());
2404 arguments->Add(node->array()); 2402 arguments->Add(node->array());
2405 arguments->Add(node->index_expr()); 2403 arguments->Add(node->index_expr());
2406 StaticCallInstr* call = 2404 StaticCallInstr* call =
2407 BuildStaticNoSuchMethodCall(node->super_class(), 2405 BuildStaticNoSuchMethodCall(node->super_class(),
2408 node->array(), 2406 node->array(),
2409 Symbols::IndexTokenHandle(), 2407 Symbols::IndexToken(),
2410 arguments); 2408 arguments);
2411 ReturnDefinition(call); 2409 ReturnDefinition(call);
2412 return; 2410 return;
2413 } 2411 }
2414 } 2412 }
2415 ZoneGrowableArray<PushArgumentInstr*>* arguments = 2413 ZoneGrowableArray<PushArgumentInstr*>* arguments =
2416 new ZoneGrowableArray<PushArgumentInstr*>(2); 2414 new ZoneGrowableArray<PushArgumentInstr*>(2);
2417 ValueGraphVisitor for_array(owner(), temp_index(), loop_depth()); 2415 ValueGraphVisitor for_array(owner(), temp_index(), loop_depth());
2418 node->array()->Visit(&for_array); 2416 node->array()->Visit(&for_array);
2419 Append(for_array); 2417 Append(for_array);
2420 arguments->Add(PushArgument(for_array.value())); 2418 arguments->Add(PushArgument(for_array.value()));
2421 2419
2422 ValueGraphVisitor for_index(owner(), temp_index(), loop_depth()); 2420 ValueGraphVisitor for_index(owner(), temp_index(), loop_depth());
2423 node->index_expr()->Visit(&for_index); 2421 node->index_expr()->Visit(&for_index);
2424 Append(for_index); 2422 Append(for_index);
2425 arguments->Add(PushArgument(for_index.value())); 2423 arguments->Add(PushArgument(for_index.value()));
2426 2424
2427 if (super_function != NULL) { 2425 if (super_function != NULL) {
2428 // Generate static call to super operator. 2426 // Generate static call to super operator.
2429 StaticCallInstr* load = new StaticCallInstr(node->token_pos(), 2427 StaticCallInstr* load = new StaticCallInstr(node->token_pos(),
2430 *super_function, 2428 *super_function,
2431 Array::ZoneHandle(), 2429 Array::ZoneHandle(),
2432 arguments); 2430 arguments);
2433 ReturnDefinition(load); 2431 ReturnDefinition(load);
2434 } else { 2432 } else {
2435 // Generate dynamic call to index operator. 2433 // Generate dynamic call to index operator.
2436 const intptr_t checked_argument_count = 1; 2434 const intptr_t checked_argument_count = 1;
2437 InstanceCallInstr* load = new InstanceCallInstr(node->token_pos(), 2435 InstanceCallInstr* load = new InstanceCallInstr(node->token_pos(),
2438 Symbols::IndexTokenHandle(), 2436 Symbols::IndexToken(),
2439 Token::kINDEX, 2437 Token::kINDEX,
2440 arguments, 2438 arguments,
2441 Array::ZoneHandle(), 2439 Array::ZoneHandle(),
2442 checked_argument_count); 2440 checked_argument_count);
2443 ReturnDefinition(load); 2441 ReturnDefinition(load);
2444 } 2442 }
2445 } 2443 }
2446 2444
2447 2445
2448 Definition* EffectGraphVisitor::BuildStoreIndexedValues( 2446 Definition* EffectGraphVisitor::BuildStoreIndexedValues(
2449 StoreIndexedNode* node, 2447 StoreIndexedNode* node,
2450 bool result_is_needed) { 2448 bool result_is_needed) {
2451 Function* super_function = NULL; 2449 Function* super_function = NULL;
2452 if (node->IsSuperStore()) { 2450 if (node->IsSuperStore()) {
2453 // Resolve the store indexed operator in the super class. 2451 // Resolve the store indexed operator in the super class.
2454 super_function = &Function::ZoneHandle( 2452 super_function = &Function::ZoneHandle(
2455 Resolver::ResolveDynamicAnyArgs(node->super_class(), 2453 Resolver::ResolveDynamicAnyArgs(node->super_class(),
2456 Symbols::AssignIndexTokenHandle())); 2454 Symbols::AssignIndexToken()));
2457 if (super_function->IsNull()) { 2455 if (super_function->IsNull()) {
2458 // Could not resolve super operator. Generate call noSuchMethod() of the 2456 // Could not resolve super operator. Generate call noSuchMethod() of the
2459 // super class instead. 2457 // super class instead.
2460 if (result_is_needed) { 2458 if (result_is_needed) {
2461 // Even though noSuchMethod most likely does not return, 2459 // Even though noSuchMethod most likely does not return,
2462 // we save the stored value if the result is needed. 2460 // we save the stored value if the result is needed.
2463 ValueGraphVisitor for_value(owner(), temp_index(), loop_depth()); 2461 ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
2464 node->value()->Visit(&for_value); 2462 node->value()->Visit(&for_value);
2465 Append(for_value); 2463 Append(for_value);
2466 Bind(BuildStoreExprTemp(for_value.value())); 2464 Bind(BuildStoreExprTemp(for_value.value()));
2467 } 2465 }
2468 ArgumentListNode* arguments = new ArgumentListNode(node->token_pos()); 2466 ArgumentListNode* arguments = new ArgumentListNode(node->token_pos());
2469 arguments->Add(node->array()); 2467 arguments->Add(node->array());
2470 arguments->Add(node->index_expr()); 2468 arguments->Add(node->index_expr());
2471 arguments->Add(node->value()); 2469 arguments->Add(node->value());
2472 StaticCallInstr* call = 2470 StaticCallInstr* call =
2473 BuildStaticNoSuchMethodCall(node->super_class(), 2471 BuildStaticNoSuchMethodCall(node->super_class(),
2474 node->array(), 2472 node->array(),
2475 Symbols::AssignIndexTokenHandle(), 2473 Symbols::AssignIndexToken(),
2476 arguments); 2474 arguments);
2477 if (result_is_needed) { 2475 if (result_is_needed) {
2478 Do(call); 2476 Do(call);
2479 return BuildLoadExprTemp(); 2477 return BuildLoadExprTemp();
2480 } else { 2478 } else {
2481 return call; 2479 return call;
2482 } 2480 }
2483 } 2481 }
2484 } 2482 }
2485 2483
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
2799 2797
2800 // Looks up dynamic method noSuchMethod in target_class 2798 // Looks up dynamic method noSuchMethod in target_class
2801 // (including its super class chain) and builds a static call to it. 2799 // (including its super class chain) and builds a static call to it.
2802 StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall( 2800 StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall(
2803 const Class& target_class, 2801 const Class& target_class,
2804 AstNode* receiver, 2802 AstNode* receiver,
2805 const String& method_name, 2803 const String& method_name,
2806 ArgumentListNode* method_arguments) { 2804 ArgumentListNode* method_arguments) {
2807 // Build the graph to allocate an InvocationMirror object by calling 2805 // Build the graph to allocate an InvocationMirror object by calling
2808 // the static allocation method. 2806 // the static allocation method.
2809 const String& mirror_name = String::Handle(Symbols::InvocationMirror());
2810 const Library& corelib = Library::Handle(Library::CoreLibrary()); 2807 const Library& corelib = Library::Handle(Library::CoreLibrary());
2811 const Class& mirror_class = Class::Handle( 2808 const Class& mirror_class = Class::Handle(
2812 corelib.LookupClassAllowPrivate(mirror_name)); 2809 corelib.LookupClassAllowPrivate(Symbols::InvocationMirror()));
2813 ASSERT(!mirror_class.IsNull()); 2810 ASSERT(!mirror_class.IsNull());
2814 const String& function_name = String::Handle(
2815 Symbols::AllocateInvocationMirror());
2816 const Function& allocation_function = Function::ZoneHandle( 2811 const Function& allocation_function = Function::ZoneHandle(
2817 Resolver::ResolveStaticByName(mirror_class, 2812 Resolver::ResolveStaticByName(mirror_class,
2818 function_name, 2813 Symbols::AllocateInvocationMirror(),
2819 Resolver::kIsQualified)); 2814 Resolver::kIsQualified));
2820 ASSERT(!allocation_function.IsNull()); 2815 ASSERT(!allocation_function.IsNull());
2821 2816
2822 // Evaluate the receiver before the arguments. This will be used 2817 // Evaluate the receiver before the arguments. This will be used
2823 // as an argument to the noSuchMethod call. 2818 // as an argument to the noSuchMethod call.
2824 ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth()); 2819 ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
2825 receiver->Visit(&for_receiver); 2820 receiver->Visit(&for_receiver);
2826 Append(for_receiver); 2821 Append(for_receiver);
2827 PushArgumentInstr* push_receiver = PushArgument(for_receiver.value()); 2822 PushArgumentInstr* push_receiver = PushArgument(for_receiver.value());
2828 2823
(...skipping 19 matching lines...) Expand all
2848 ZoneGrowableArray<PushArgumentInstr*>* allocation_args = 2843 ZoneGrowableArray<PushArgumentInstr*>* allocation_args =
2849 new ZoneGrowableArray<PushArgumentInstr*>(arguments->length()); 2844 new ZoneGrowableArray<PushArgumentInstr*>(arguments->length());
2850 BuildPushArguments(*arguments, allocation_args); 2845 BuildPushArguments(*arguments, allocation_args);
2851 StaticCallInstr* allocation = new StaticCallInstr(args_pos, 2846 StaticCallInstr* allocation = new StaticCallInstr(args_pos,
2852 allocation_function, 2847 allocation_function,
2853 Array::ZoneHandle(), 2848 Array::ZoneHandle(),
2854 allocation_args); 2849 allocation_args);
2855 Value* invocation_mirror = Bind(allocation); 2850 Value* invocation_mirror = Bind(allocation);
2856 PushArgumentInstr* push_invocation_mirror = PushArgument(invocation_mirror); 2851 PushArgumentInstr* push_invocation_mirror = PushArgument(invocation_mirror);
2857 // Lookup noSuchMethod and call it with the receiver and the InvocationMirror. 2852 // Lookup noSuchMethod and call it with the receiver and the InvocationMirror.
2858 const String& no_such_method_name =
2859 String::ZoneHandle(Symbols::NoSuchMethod());
2860 const Function& no_such_method_func = Function::ZoneHandle( 2853 const Function& no_such_method_func = Function::ZoneHandle(
2861 Resolver::ResolveDynamicAnyArgs(target_class, no_such_method_name)); 2854 Resolver::ResolveDynamicAnyArgs(target_class, Symbols::NoSuchMethod()));
2862 // We are guaranteed to find noSuchMethod of class Object. 2855 // We are guaranteed to find noSuchMethod of class Object.
2863 ASSERT(!no_such_method_func.IsNull()); 2856 ASSERT(!no_such_method_func.IsNull());
2864 ZoneGrowableArray<PushArgumentInstr*>* args = 2857 ZoneGrowableArray<PushArgumentInstr*>* args =
2865 new ZoneGrowableArray<PushArgumentInstr*>(2); 2858 new ZoneGrowableArray<PushArgumentInstr*>(2);
2866 args->Add(push_receiver); 2859 args->Add(push_receiver);
2867 args->Add(push_invocation_mirror); 2860 args->Add(push_invocation_mirror);
2868 return new StaticCallInstr(args_pos, 2861 return new StaticCallInstr(args_pos,
2869 no_such_method_func, 2862 no_such_method_func,
2870 Array::ZoneHandle(), 2863 Array::ZoneHandle(),
2871 args); 2864 args);
(...skipping 27 matching lines...) Expand all
2899 arguments->Add(PushArgument(arguments_value)); 2892 arguments->Add(PushArgument(arguments_value));
2900 // List argumentNames. 2893 // List argumentNames.
2901 Value* argument_names_value = 2894 Value* argument_names_value =
2902 Bind(new ConstantInstr(Array::ZoneHandle())); 2895 Bind(new ConstantInstr(Array::ZoneHandle()));
2903 arguments->Add(PushArgument(argument_names_value)); 2896 arguments->Add(PushArgument(argument_names_value));
2904 // List existingArgumentNames. 2897 // List existingArgumentNames.
2905 Value* existing_argument_names_value = 2898 Value* existing_argument_names_value =
2906 Bind(new ConstantInstr(Array::ZoneHandle())); 2899 Bind(new ConstantInstr(Array::ZoneHandle()));
2907 arguments->Add(PushArgument(existing_argument_names_value)); 2900 arguments->Add(PushArgument(existing_argument_names_value));
2908 // Resolve and call NoSuchMethodError._throwNew. 2901 // Resolve and call NoSuchMethodError._throwNew.
2909 const String& cls_name = String::Handle(Symbols::NoSuchMethodError()); 2902 const Library& core_lib = Library::Handle(Library::CoreLibrary());
2910 const String& func_name = String::Handle(Symbols::ThrowNew());
2911 const Class& cls = Class::Handle( 2903 const Class& cls = Class::Handle(
2912 Library::Handle(Library::CoreLibrary()).LookupClass(cls_name)); 2904 core_lib.LookupClass(Symbols::NoSuchMethodError()));
2913 ASSERT(!cls.IsNull()); 2905 ASSERT(!cls.IsNull());
2914 const Function& func = Function::ZoneHandle( 2906 const Function& func = Function::ZoneHandle(
2915 Resolver::ResolveStatic(cls, 2907 Resolver::ResolveStatic(cls,
2916 func_name, 2908 Symbols::ThrowNew(),
2917 arguments->length(), 2909 arguments->length(),
2918 Array::ZoneHandle(), 2910 Array::ZoneHandle(),
2919 Resolver::kIsQualified)); 2911 Resolver::kIsQualified));
2920 ASSERT(!func.IsNull()); 2912 ASSERT(!func.IsNull());
2921 return new StaticCallInstr(token_pos, 2913 return new StaticCallInstr(token_pos,
2922 func, 2914 func,
2923 Array::ZoneHandle(), // No names. 2915 Array::ZoneHandle(), // No names.
2924 arguments); 2916 arguments);
2925 } 2917 }
2926 2918
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
3039 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, reason) + 1; 3031 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, reason) + 1;
3040 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 3032 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
3041 OS::SNPrint(chars, len, kFormat, function_name, reason); 3033 OS::SNPrint(chars, len, kFormat, function_name, reason);
3042 const Error& error = Error::Handle( 3034 const Error& error = Error::Handle(
3043 LanguageError::New(String::Handle(String::New(chars)))); 3035 LanguageError::New(String::Handle(String::New(chars))));
3044 Isolate::Current()->long_jump_base()->Jump(1, error); 3036 Isolate::Current()->long_jump_base()->Jump(1, error);
3045 } 3037 }
3046 3038
3047 3039
3048 } // namespace dart 3040 } // namespace dart
OLDNEW
« no previous file with comments | « vm/exceptions.cc ('k') | vm/flow_graph_compiler_ia32.cc » ('j') | vm/symbols.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698