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

Unified Diff: runtime/vm/parser.cc

Issue 1320673012: Lookup getter/setter symbols before alllocating them, thus eliminating extra String allocations in … (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Formatting Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/symbols.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 604e453cf044aeb41efcb2044b6fc9ad98a156d7..d9cd77847aeb13a5f08f7cc1297a0ab59309ab15 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1640,7 +1640,7 @@ SequenceNode* Parser::ParseInvokeFieldDispatcher(const Function& func) {
function_object = receiver;
} else {
const String& getter_name = String::ZoneHandle(Z,
- Symbols::New(String::Handle(Z, Field::GetterName(name))));
+ Symbols::New(String::Handle(Z, Field::GetterSymbol(name))));
function_object = new(Z) InstanceCallNode(
token_pos, receiver, getter_name, no_args);
}
@@ -2330,14 +2330,18 @@ AstNode* Parser::ParseSuperFieldAccess(const String& field_name,
AstNode* implicit_argument = LoadReceiver(field_pos);
const String& getter_name =
- String::ZoneHandle(Z, Field::GetterName(field_name));
- const Function& super_getter = Function::ZoneHandle(Z,
- Resolver::ResolveDynamicAnyArgs(super_class, getter_name));
+ String::ZoneHandle(Z, Field::LookupGetterSymbol(field_name));
+ Function& super_getter = Function::ZoneHandle(Z);
+ if (!getter_name.IsNull()) {
+ super_getter = Resolver::ResolveDynamicAnyArgs(super_class, getter_name);
+ }
if (super_getter.IsNull()) {
const String& setter_name =
- String::ZoneHandle(Z, Field::SetterName(field_name));
- const Function& super_setter = Function::ZoneHandle(Z,
- Resolver::ResolveDynamicAnyArgs(super_class, setter_name));
+ String::ZoneHandle(Z, Field::LookupSetterSymbol(field_name));
+ Function& super_setter = Function::ZoneHandle(Z);
+ if (!setter_name.IsNull()) {
+ super_setter = Resolver::ResolveDynamicAnyArgs(super_class, setter_name);
+ }
if (super_setter.IsNull()) {
// Check if this is an access to an implicit closure using 'super'.
// If a function exists of the specified field_name then try
@@ -6347,7 +6351,7 @@ SequenceNode* Parser::CloseAsyncGeneratorTryBlock(SequenceNode *body) {
}
const GrowableObjectArray& handler_types =
- GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
+ GrowableObjectArray::Handle(Z, GrowableObjectArray::New(Heap::kOld));
handler_types.Add(dynamic_type); // Catch block handles all exceptions.
CatchClauseNode* catch_clause = new(Z) CatchClauseNode(
@@ -6464,7 +6468,7 @@ SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
SequenceNode* catch_handler_list = CloseBlock();
const GrowableObjectArray& handler_types =
- GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
+ GrowableObjectArray::Handle(Z, GrowableObjectArray::New(Heap::kOld));
handler_types.SetLength(0);
handler_types.Add(*exception_param.type);
@@ -9670,7 +9674,7 @@ AstNode* Parser::ParseTryStatement(String* label_name) {
try_stack_->enter_catch();
const intptr_t handler_pos = TokenPos();
const GrowableObjectArray& handler_types =
- GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
+ GrowableObjectArray::Handle(Z, GrowableObjectArray::New(Heap::kOld));
bool needs_stack_trace = false;
SequenceNode* catch_handler_list =
ParseCatchClauses(handler_pos,
@@ -11161,7 +11165,8 @@ AstNode* Parser::GenerateStaticFieldLookup(const Field& field,
ASSERT(field.is_static());
const Class& field_owner = Class::ZoneHandle(Z, field.owner());
const String& field_name = String::ZoneHandle(Z, field.name());
- const String& getter_name = String::Handle(Z, Field::GetterName(field_name));
+ const String& getter_name =
+ String::Handle(Z, Field::GetterSymbol(field_name));
const Function& getter = Function::Handle(Z,
field_owner.LookupStaticFunction(getter_name));
// Never load field directly if there is a getter (deterministic AST).
@@ -11556,7 +11561,7 @@ AstNode* Parser::ParseClosurization(AstNode* primary) {
is_setter_name = true;
}
} else if (Token::CanBeOverloaded(CurrentToken())) {
- extractor_name = String::New(Token::Str(CurrentToken()));
+ extractor_name = Symbols::New(Token::Str(CurrentToken()));
ConsumeToken();
} else {
ReportError("identifier or operator expected");
@@ -11966,7 +11971,8 @@ StaticGetterNode* Parser::RunStaticFieldInitializer(const Field& field,
ASSERT(field.is_static());
const Class& field_owner = Class::ZoneHandle(Z, field.owner());
const String& field_name = String::ZoneHandle(Z, field.name());
- const String& getter_name = String::Handle(Z, Field::GetterName(field_name));
+ const String& getter_name =
+ String::Handle(Z, Field::GetterSymbol(field_name));
const Function& getter = Function::Handle(Z,
field_owner.LookupStaticFunction(getter_name));
const Instance& value = Instance::Handle(Z, field.value());
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/symbols.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698