| Index: vm/parser.cc
|
| ===================================================================
|
| --- vm/parser.cc (revision 9829)
|
| +++ vm/parser.cc (working copy)
|
| @@ -18,6 +18,7 @@
|
| #include "vm/object_store.h"
|
| #include "vm/resolver.h"
|
| #include "vm/scopes.h"
|
| +#include "vm/symbols.h"
|
|
|
| namespace dart {
|
|
|
| @@ -122,7 +123,7 @@
|
|
|
| LocalVariable* ParsedFunction::CreateExpressionTempVar(intptr_t token_pos) {
|
| return new LocalVariable(token_pos,
|
| - String::ZoneHandle(String::NewSymbol(":expr_temp")),
|
| + String::ZoneHandle(Symbols::New(":expr_temp")),
|
| Type::ZoneHandle(Type::DynamicType()));
|
| }
|
|
|
| @@ -188,7 +189,7 @@
|
| // Add and allocate a local variable to this purpose.
|
| if ((context_owner != NULL) && !function().IsClosureFunction()) {
|
| const String& context_var_name = String::ZoneHandle(
|
| - String::NewSymbol(LocalVariable::kSavedContextVarName));
|
| + Symbols::New(LocalVariable::kSavedContextVarName));
|
| LocalVariable* context_var =
|
| new LocalVariable(function().token_pos(),
|
| context_var_name,
|
| @@ -437,7 +438,7 @@
|
| this->num_fixed_parameters++;
|
| ParamDesc param;
|
| param.name_pos = name_pos;
|
| - param.name = &String::ZoneHandle(String::NewSymbol(name));
|
| + param.name = &String::ZoneHandle(Symbols::New(name));
|
| param.is_final = true;
|
| param.type = type;
|
| this->parameters->Add(param);
|
| @@ -818,7 +819,7 @@
|
| new LiteralNode(TokenPos(), Instance::ZoneHandle())));
|
| // TODO(regis): Exception to throw is not specified by spec.
|
| const String& circular_error = String::ZoneHandle(
|
| - String::NewSymbol("circular dependency in field initialization"));
|
| + Symbols::New("circular dependency in field initialization"));
|
| report_circular->Add(
|
| new ThrowNode(TokenPos(),
|
| new LiteralNode(TokenPos(), circular_error),
|
| @@ -1242,7 +1243,7 @@
|
| Function::Handle(ResolveDynamicFunction(super_class, name));
|
| if (super_func.IsNull()) {
|
| const String& no_such_method_name =
|
| - String::ZoneHandle(String::NewSymbol(kNoSuchMethodName));
|
| + String::ZoneHandle(Symbols::New(kNoSuchMethodName));
|
| super_func = ResolveDynamicFunction(super_class, no_such_method_name);
|
| ASSERT(!super_func.IsNull());
|
| *is_no_such_method = true;
|
| @@ -1269,7 +1270,7 @@
|
| if (class_name.CharAt(0) == Scanner::kPrivateIdentifierStart) {
|
| // Private identifiers are mangled on a per script basis.
|
| name = String::Concat(name, String::Handle(core_lib.private_key()));
|
| - name = String::NewSymbol(name);
|
| + name = Symbols::New(name);
|
| }
|
| return core_lib.LookupClass(name);
|
| }
|
| @@ -1355,7 +1356,7 @@
|
|
|
| // Resolve the [] operator function in the superclass.
|
| const String& index_operator_name =
|
| - String::ZoneHandle(String::NewSymbol(Token::Str(Token::kINDEX)));
|
| + String::ZoneHandle(Symbols::New(Token::Str(Token::kINDEX)));
|
| bool is_no_such_method = false;
|
| const Function& index_operator = Function::ZoneHandle(
|
| GetSuperFunction(operator_pos,
|
| @@ -1383,7 +1384,7 @@
|
|
|
| // Resolve the []= operator function in the superclass.
|
| const String& assign_index_operator_name = String::ZoneHandle(
|
| - String::NewSymbol(Token::Str(Token::kASSIGN_INDEX)));
|
| + Symbols::New(Token::Str(Token::kASSIGN_INDEX)));
|
| bool is_no_such_method = false;
|
| const Function& assign_index_operator = Function::ZoneHandle(
|
| GetSuperFunction(operator_pos,
|
| @@ -1408,7 +1409,7 @@
|
|
|
| // Resolve the operator function in the superclass.
|
| const String& operator_function_name =
|
| - String::Handle(String::NewSymbol(Token::Str(op)));
|
| + String::Handle(Symbols::New(Token::Str(op)));
|
| bool is_no_such_method = false;
|
| const Function& super_operator = Function::ZoneHandle(
|
| GetSuperFunction(operator_pos,
|
| @@ -1528,7 +1529,7 @@
|
| return;
|
| }
|
| String& ctor_name = String::Handle(super_class.Name());
|
| - String& ctor_suffix = String::Handle(String::NewSymbol("."));
|
| + String& ctor_suffix = String::Handle(Symbols::Dot());
|
| ctor_name = String::Concat(ctor_name, ctor_suffix);
|
| ArgumentListNode* arguments = new ArgumentListNode(supercall_pos);
|
| // Implicit 'this' parameter is the first argument.
|
| @@ -1570,7 +1571,7 @@
|
| const Class& super_class = Class::Handle(cls.SuperClass());
|
| ASSERT(!super_class.IsNull());
|
| String& ctor_name = String::Handle(super_class.Name());
|
| - String& ctor_suffix = String::Handle(String::NewSymbol("."));
|
| + String& ctor_suffix = String::Handle(Symbols::Dot());
|
| if (CurrentToken() == Token::kPERIOD) {
|
| ConsumeToken();
|
| ctor_suffix = String::Concat(
|
| @@ -1756,7 +1757,7 @@
|
| const intptr_t call_pos = TokenPos();
|
| ConsumeToken();
|
| String& ctor_name = String::Handle(cls.Name());
|
| - String& ctor_suffix = String::Handle(String::NewSymbol("."));
|
| + String& ctor_suffix = String::Handle(Symbols::Dot());
|
|
|
| if (CurrentToken() == Token::kPERIOD) {
|
| ConsumeToken();
|
| @@ -1815,13 +1816,13 @@
|
|
|
| LocalVariable* receiver = new LocalVariable(
|
| ctor_pos,
|
| - String::ZoneHandle(String::NewSymbol(kThisName)),
|
| + String::ZoneHandle(Symbols::New(kThisName)),
|
| Type::ZoneHandle(Type::DynamicType()));
|
| current_block_->scope->AddVariable(receiver);
|
|
|
| LocalVariable* phase_parameter = new LocalVariable(
|
| ctor_pos,
|
| - String::ZoneHandle(String::NewSymbol(kPhaseParameterName)),
|
| + String::ZoneHandle(Symbols::New(kPhaseParameterName)),
|
| Type::ZoneHandle(Type::DynamicType()));
|
| current_block_->scope->AddVariable(phase_parameter);
|
|
|
| @@ -2375,7 +2376,7 @@
|
| ExpectToken(Token::kTHIS);
|
| String& redir_name = String::ZoneHandle(
|
| String::Concat(members->class_name(),
|
| - String::Handle(String::NewSymbol("."))));
|
| + String::Handle(Symbols::Dot())));
|
| if (CurrentToken() == Token::kPERIOD) {
|
| ConsumeToken();
|
| redir_name = String::Concat(redir_name,
|
| @@ -2711,7 +2712,7 @@
|
| }
|
| // We must be dealing with a constructor or named constructor.
|
| member.kind = RawFunction::kConstructor;
|
| - String& ctor_suffix = String::ZoneHandle(String::NewSymbol("."));
|
| + String& ctor_suffix = String::ZoneHandle(Symbols::Dot());
|
| if (CurrentToken() == Token::kPERIOD) {
|
| // Named constructor.
|
| ConsumeToken();
|
| @@ -2720,7 +2721,7 @@
|
| }
|
| *member.name = String::Concat(*member.name, ctor_suffix);
|
| // Ensure that names are symbols.
|
| - *member.name = String::NewSymbol(*member.name);
|
| + *member.name = Symbols::New(*member.name);
|
| if (member.type == NULL) {
|
| ASSERT(!member.has_factory);
|
| // The body of the constructor cannot modify the type arguments of the
|
| @@ -2782,7 +2783,7 @@
|
| member.kind = RawFunction::kRegularFunction;
|
| member.name_pos = this->TokenPos();
|
| member.name =
|
| - &String::ZoneHandle(String::NewSymbol(Token::Str(operator_token)));
|
| + &String::ZoneHandle(Symbols::New(Token::Str(operator_token)));
|
| ConsumeToken();
|
| } else if (IsIdentifier()) {
|
| member.name = CurrentLiteral();
|
| @@ -2927,8 +2928,8 @@
|
| // and contains a supercall in the initializer list.
|
| String& ctor_name = String::ZoneHandle(
|
| String::Concat(class_desc->class_name(),
|
| - String::Handle(String::NewSymbol("."))));
|
| - ctor_name = String::NewSymbol(ctor_name);
|
| + String::Handle(Symbols::Dot())));
|
| + ctor_name = Symbols::New(ctor_name);
|
| // The token position for the implicit constructor is the 'class'
|
| // keyword of the constructor's class.
|
| Function& ctor = Function::Handle(
|
| @@ -3010,7 +3011,7 @@
|
| // Allocate an interface to hold the type parameters and their bounds.
|
| // Make it the owner of the function type descriptor.
|
| const Class& alias_owner = Class::Handle(
|
| - Class::New(String::Handle(String::NewSymbol(":alias_owner")),
|
| + Class::New(String::Handle(Symbols::New(":alias_owner")),
|
| Script::Handle(),
|
| TokenPos()));
|
| alias_owner.set_is_interface();
|
| @@ -3163,7 +3164,7 @@
|
| *factory_name.ident,
|
| factory_name.ident_pos));
|
| const Class& factory_class = Class::Handle(
|
| - Class::New(String::Handle(String::NewSymbol(":factory_signature")),
|
| + Class::New(String::Handle(Symbols::New(":factory_signature")),
|
| script_,
|
| factory_name.ident_pos));
|
| factory_class.set_library(library_);
|
| @@ -3819,7 +3820,7 @@
|
| is_top_level_ = true;
|
| TopLevel top_level;
|
| Class& toplevel_class = Class::Handle(
|
| - Class::New(String::ZoneHandle(String::NewSymbol("::")),
|
| + Class::New(String::ZoneHandle(Symbols::New("::")),
|
| script_,
|
| TokenPos()));
|
| toplevel_class.set_library(library_);
|
| @@ -4037,14 +4038,14 @@
|
|
|
|
|
| LocalVariable* Parser::LookupReceiver(LocalScope* from_scope, bool test_only) {
|
| - const String& this_name = String::Handle(String::NewSymbol(kThisName));
|
| + const String& this_name = String::Handle(Symbols::New(kThisName));
|
| return from_scope->LookupVariable(this_name, test_only);
|
| }
|
|
|
|
|
| LocalVariable* Parser::LookupPhaseParameter() {
|
| const String& phase_name =
|
| - String::Handle(String::NewSymbol(kPhaseParameterName));
|
| + String::Handle(Symbols::New(kPhaseParameterName));
|
| const bool kTestOnly = false;
|
| return current_block_->scope->LookupVariable(phase_name, kTestOnly);
|
| }
|
| @@ -4213,7 +4214,7 @@
|
| ErrorMsg("function name expected");
|
| }
|
| const String& anonymous_function_name =
|
| - String::ZoneHandle(String::NewSymbol("function"));
|
| + String::ZoneHandle(Symbols::New("function"));
|
| function_name = &anonymous_function_name;
|
| }
|
| ASSERT(ident_pos >= 0);
|
| @@ -4792,7 +4793,7 @@
|
| // Store switch expression in temporary local variable.
|
| LocalVariable* temp_variable =
|
| new LocalVariable(expr_pos,
|
| - String::ZoneHandle(String::NewSymbol(":switch_expr")),
|
| + String::ZoneHandle(Symbols::New(":switch_expr")),
|
| Type::ZoneHandle(Type::DynamicType()));
|
| current_block_->scope->AddVariable(temp_variable);
|
| AstNode* save_switch_expr =
|
| @@ -4920,7 +4921,7 @@
|
|
|
| // Generate implicit iterator variable and add to scope.
|
| const String& iterator_name =
|
| - String::ZoneHandle(String::NewSymbol(":for-in-iter"));
|
| + String::ZoneHandle(Symbols::New(":for-in-iter"));
|
| // We could set the type of the implicit iterator variable to Iterator<T>
|
| // where T is the type of the for loop variable. However, the type error
|
| // would refer to the compiler generated iterator and could confuse the user.
|
| @@ -4933,7 +4934,7 @@
|
|
|
| // Generate initialization of iterator variable.
|
| const String& iterator_method_name =
|
| - String::ZoneHandle(String::NewSymbol(kGetIteratorName));
|
| + String::ZoneHandle(Symbols::New(kGetIteratorName));
|
| ArgumentListNode* no_args = new ArgumentListNode(collection_pos);
|
| AstNode* get_iterator = new InstanceCallNode(
|
| collection_pos, collection_expr, iterator_method_name, no_args);
|
| @@ -4945,7 +4946,7 @@
|
| AstNode* iterator_has_next = new InstanceCallNode(
|
| collection_pos,
|
| new LoadLocalNode(collection_pos, *iterator_var),
|
| - String::ZoneHandle(String::NewSymbol("hasNext")),
|
| + String::ZoneHandle(Symbols::New("hasNext")),
|
| no_args);
|
|
|
| // Parse the for loop body. Ideally, we would use ParseNestedStatement()
|
| @@ -4958,7 +4959,7 @@
|
| AstNode* iterator_next = new InstanceCallNode(
|
| collection_pos,
|
| new LoadLocalNode(collection_pos, *iterator_var),
|
| - String::ZoneHandle(String::NewSymbol("next")),
|
| + String::ZoneHandle(Symbols::New("next")),
|
| no_args);
|
|
|
| // Generate assignment of next iterator value to loop variable.
|
| @@ -5073,11 +5074,11 @@
|
| const char* function_name,
|
| ArgumentListNode* arguments) {
|
| const String& cls_name =
|
| - String::Handle(String::NewSymbol(class_name));
|
| + String::Handle(Symbols::New(class_name));
|
| const Class& cls = Class::Handle(LookupImplClass(cls_name));
|
| ASSERT(!cls.IsNull());
|
| const String& func_name =
|
| - String::ZoneHandle(String::NewSymbol(function_name));
|
| + String::ZoneHandle(Symbols::New(function_name));
|
| const Function& func = Function::ZoneHandle(
|
| Resolver::ResolveStatic(cls,
|
| func_name,
|
| @@ -5273,7 +5274,7 @@
|
| // and the stacktrace object when an exception is thrown.
|
| // These three implicit variables can never be captured variables.
|
| const String& context_var_name =
|
| - String::ZoneHandle(String::NewSymbol(":saved_context_var"));
|
| + String::ZoneHandle(Symbols::New(":saved_context_var"));
|
| LocalVariable* context_var =
|
| current_block_->scope->LocalLookupVariable(context_var_name);
|
| if (context_var == NULL) {
|
| @@ -5283,7 +5284,7 @@
|
| current_block_->scope->AddVariable(context_var);
|
| }
|
| const String& catch_excp_var_name =
|
| - String::ZoneHandle(String::NewSymbol(":exception_var"));
|
| + String::ZoneHandle(Symbols::New(":exception_var"));
|
| LocalVariable* catch_excp_var =
|
| current_block_->scope->LocalLookupVariable(catch_excp_var_name);
|
| if (catch_excp_var == NULL) {
|
| @@ -5293,7 +5294,7 @@
|
| current_block_->scope->AddVariable(catch_excp_var);
|
| }
|
| const String& catch_trace_var_name =
|
| - String::ZoneHandle(String::NewSymbol(":stacktrace_var"));
|
| + String::ZoneHandle(Symbols::New(":stacktrace_var"));
|
| LocalVariable* catch_trace_var =
|
| current_block_->scope->LocalLookupVariable(catch_trace_var_name);
|
| if (catch_trace_var == NULL) {
|
| @@ -5662,10 +5663,10 @@
|
| LocalScope* scope = label->owner()->parent();
|
| ASSERT(scope != NULL);
|
| LocalVariable* excp_var = scope->LocalLookupVariable(
|
| - String::ZoneHandle(String::NewSymbol(":exception_var")));
|
| + String::ZoneHandle(Symbols::New(":exception_var")));
|
| ASSERT(excp_var != NULL);
|
| LocalVariable* trace_var = scope->LocalLookupVariable(
|
| - String::ZoneHandle(String::NewSymbol(":stacktrace_var")));
|
| + String::ZoneHandle(Symbols::New(":stacktrace_var")));
|
| ASSERT(trace_var != NULL);
|
| statement = new ThrowNode(statement_pos,
|
| new LoadLocalNode(statement_pos, *excp_var),
|
| @@ -5954,14 +5955,14 @@
|
| arguments->Add(new LiteralNode(type_pos, Instance::ZoneHandle()));
|
| // Dst type name argument.
|
| arguments->Add(new LiteralNode(type_pos, String::ZoneHandle(
|
| - String::NewSymbol("malformed"))));
|
| + Symbols::New("malformed"))));
|
| // Dst name argument.
|
| arguments->Add(new LiteralNode(type_pos, String::ZoneHandle(
|
| - String::NewSymbol(""))));
|
| + Symbols::New(""))));
|
| // Malformed type error.
|
| const Error& error = Error::Handle(type.malformed_error());
|
| arguments->Add(new LiteralNode(type_pos, String::ZoneHandle(
|
| - String::NewSymbol(error.ToErrorCString()))));
|
| + Symbols::New(error.ToErrorCString()))));
|
| return MakeStaticCall(kTypeErrorName, kThrowNewName, arguments);
|
| }
|
|
|
| @@ -6081,7 +6082,7 @@
|
| OS::SNPrint(name, 64, ":%s%d", s, token_id);
|
| LocalVariable* temp =
|
| new LocalVariable(token_pos,
|
| - String::ZoneHandle(String::NewSymbol(name)),
|
| + String::ZoneHandle(Symbols::New(name)),
|
| Type::ZoneHandle(Type::DynamicType()));
|
| temp->set_is_final();
|
| current_block_->scope->AddVariable(temp);
|
| @@ -7520,7 +7521,7 @@
|
| if (!is_empty_literal) {
|
| const bool saved_mode = SetAllowFunctionLiterals(true);
|
| const String& dst_name = String::ZoneHandle(
|
| - String::NewSymbol("list literal element"));
|
| + Symbols::New("list literal element"));
|
| while (CurrentToken() != Token::kRBRACK) {
|
| const intptr_t element_pos = TokenPos();
|
| AstNode* element = ParseExpr(is_const);
|
| @@ -7578,12 +7579,12 @@
|
| } else {
|
| // Factory call at runtime.
|
| String& list_literal_factory_class_name = String::Handle(
|
| - String::NewSymbol(kListLiteralFactoryClassName));
|
| + Symbols::New(kListLiteralFactoryClassName));
|
| const Class& list_literal_factory_class =
|
| Class::Handle(LookupCoreClass(list_literal_factory_class_name));
|
| ASSERT(!list_literal_factory_class.IsNull());
|
| const String& list_literal_factory_name =
|
| - String::Handle(String::NewSymbol(kListLiteralFactoryName));
|
| + String::Handle(Symbols::New(kListLiteralFactoryName));
|
| const Function& list_literal_factory = Function::ZoneHandle(
|
| list_literal_factory_class.LookupFactory(list_literal_factory_name));
|
| ASSERT(!list_literal_factory.IsNull());
|
| @@ -7704,7 +7705,7 @@
|
| ArrayNode* kv_pairs =
|
| new ArrayNode(TokenPos(), TypeArguments::ZoneHandle());
|
| const String& dst_name = String::ZoneHandle(
|
| - String::NewSymbol("list literal element"));
|
| + Symbols::New("list literal element"));
|
| while (CurrentToken() != Token::kRBRACE) {
|
| AstNode* key = NULL;
|
| if (CurrentToken() == Token::kSTRING) {
|
| @@ -7776,14 +7777,14 @@
|
|
|
| // Construct the map object.
|
| const String& immutable_map_class_name =
|
| - String::Handle(String::NewSymbol(kImmutableMapName));
|
| + String::Handle(Symbols::New(kImmutableMapName));
|
| const Class& immutable_map_class =
|
| Class::Handle(LookupImplClass(immutable_map_class_name));
|
| ASSERT(!immutable_map_class.IsNull());
|
| ArgumentListNode* constr_args = new ArgumentListNode(TokenPos());
|
| constr_args->Add(new LiteralNode(literal_pos, key_value_array));
|
| const String& constr_name =
|
| - String::Handle(String::NewSymbol(kImmutableMapConstructorName));
|
| + String::Handle(Symbols::New(kImmutableMapConstructorName));
|
| const Function& map_constr = Function::ZoneHandle(
|
| immutable_map_class.LookupConstructor(constr_name));
|
| ASSERT(!map_constr.IsNull());
|
| @@ -7802,12 +7803,12 @@
|
| } else {
|
| // Factory call at runtime.
|
| String& map_literal_factory_class_name = String::Handle(
|
| - String::NewSymbol(kMapLiteralFactoryClassName));
|
| + Symbols::New(kMapLiteralFactoryClassName));
|
| const Class& map_literal_factory_class =
|
| Class::Handle(LookupCoreClass(map_literal_factory_class_name));
|
| ASSERT(!map_literal_factory_class.IsNull());
|
| const String& map_literal_factory_name =
|
| - String::Handle(String::NewSymbol(kMapLiteralFactoryName));
|
| + String::Handle(Symbols::New(kMapLiteralFactoryName));
|
| const Function& map_literal_factory = Function::ZoneHandle(
|
| map_literal_factory_class.LookupFactory(map_literal_factory_name));
|
| ASSERT(!map_literal_factory.IsNull());
|
| @@ -7863,7 +7864,7 @@
|
| // for class 'A' is labeled 'A.C', and the static function implementing the
|
| // unnamed constructor for class 'A' is labeled 'A.'.
|
| // This convention prevents users from explicitly calling constructors.
|
| - const String& period = String::Handle(String::NewSymbol("."));
|
| + const String& period = String::Handle(Symbols::Dot());
|
| String& constructor_name =
|
| String::Handle(String::Concat(type_class_name, period));
|
| if (named_constructor != NULL) {
|
| @@ -8108,10 +8109,10 @@
|
|
|
| String& Parser::Interpolate(ArrayNode* values) {
|
| const String& class_name =
|
| - String::Handle(String::NewSymbol(kStringClassName));
|
| + String::Handle(Symbols::New(kStringClassName));
|
| const Class& cls = Class::Handle(LookupImplClass(class_name));
|
| ASSERT(!cls.IsNull());
|
| - const String& func_name = String::Handle(String::NewSymbol(kInterpolateName));
|
| + const String& func_name = String::Handle(Symbols::New(kInterpolateName));
|
| const Function& func =
|
| Function::Handle(cls.LookupStaticFunction(func_name));
|
| ASSERT(!func.IsNull());
|
| @@ -8136,7 +8137,7 @@
|
| if (concatenated.IsUnhandledException()) {
|
| ErrorMsg("Exception thrown in Parser::Interpolate");
|
| }
|
| - concatenated = String::NewSymbol(concatenated);
|
| + concatenated = Symbols::New(concatenated);
|
| return concatenated;
|
| }
|
|
|
| @@ -8312,7 +8313,7 @@
|
| }
|
| ASSERT(primary != NULL);
|
| } else if (CurrentToken() == Token::kTHIS) {
|
| - const String& this_name = String::Handle(String::NewSymbol(kThisName));
|
| + const String& this_name = String::Handle(Symbols::New(kThisName));
|
| LocalVariable* local = LookupLocalScope(this_name);
|
| if (local == NULL) {
|
| ErrorMsg("receiver 'this' is not in scope");
|
|
|