| Index: runtime/vm/parser.cc
|
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
|
| index e2668107a588d38320b5aacbfe755c85b9257fb4..8d047d914135848497ebe8157a2baa8661db1fb4 100644
|
| --- a/runtime/vm/parser.cc
|
| +++ b/runtime/vm/parser.cc
|
| @@ -6727,9 +6727,9 @@ RawFunction* Parser::OpenAsyncFunction(intptr_t async_func_pos) {
|
| const String& async_func_name =
|
| String::Handle(Z, innermost_function().name());
|
| String& closure_name = String::Handle(Z,
|
| - String::NewFormatted("<%s_async_body>", async_func_name.ToCString()));
|
| + Symbols::NewFormatted("<%s_async_body>", async_func_name.ToCString()));
|
| closure = Function::NewClosureFunction(
|
| - String::Handle(Z, Symbols::New(closure_name)),
|
| + closure_name,
|
| innermost_function(),
|
| async_func_pos);
|
| closure.set_is_generated_body(true);
|
| @@ -8515,11 +8515,10 @@ static LocalVariable* LookupSavedTryContextVar(LocalScope* scope) {
|
| static LocalVariable* LookupAsyncSavedTryContextVar(LocalScope* scope,
|
| uint16_t try_index) {
|
| const String& async_saved_try_ctx_name =
|
| - String::ZoneHandle(Symbols::New(String::Handle(
|
| - String::NewFormatted(
|
| - "%s%d",
|
| - Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
|
| - try_index))));
|
| + String::ZoneHandle(Symbols::NewFormatted(
|
| + "%s%d",
|
| + Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
|
| + try_index));
|
| LocalVariable* var = scope->LocalLookupVariable(async_saved_try_ctx_name);
|
| ASSERT(var != NULL);
|
| return var;
|
| @@ -8591,9 +8590,8 @@ AstNode* Parser::DartPrint(const char* str) {
|
| Z, lib.LookupFunctionAllowPrivate(Symbols::print()));
|
| ASSERT(!print_fn.IsNull());
|
| ArgumentListNode* one_arg = new(Z) ArgumentListNode(Scanner::kNoSourcePos);
|
| - String& msg = String::Handle(String::NewFormatted("%s", str));
|
| - one_arg->Add(new(Z) LiteralNode(Scanner::kNoSourcePos,
|
| - String::ZoneHandle(Symbols::New(msg))));
|
| + String& msg = String::ZoneHandle(Symbols::NewFormatted("%s", str));
|
| + one_arg->Add(new(Z) LiteralNode(Scanner::kNoSourcePos, msg));
|
| AstNode* print_call =
|
| new(Z) StaticCallNode(Scanner::kNoSourcePos, print_fn, one_arg);
|
| return print_call;
|
| @@ -9543,10 +9541,9 @@ SequenceNode* Parser::ParseCatchClauses(
|
|
|
| void Parser::SetupSavedTryContext(LocalVariable* saved_try_context) {
|
| const String& async_saved_try_ctx_name = String::ZoneHandle(Z,
|
| - Symbols::New(String::Handle(Z,
|
| - String::NewFormatted("%s%d",
|
| - Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
|
| - last_used_try_index_ - 1))));
|
| + Symbols::NewFormatted("%s%d",
|
| + Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
|
| + last_used_try_index_ - 1));
|
| LocalVariable* async_saved_try_ctx = new (Z) LocalVariable(
|
| Scanner::kNoSourcePos,
|
| async_saved_try_ctx_name,
|
| @@ -12068,7 +12065,8 @@ RawObject* Parser::EvaluateConstConstructorCall(
|
| // Constructors have 2 extra arguments: rcvr and construction phase.
|
| const int kNumExtraArgs = constructor.IsFactory() ? 1 : 2;
|
| const int num_arguments = arguments->length() + kNumExtraArgs;
|
| - const Array& arg_values = Array::Handle(Z, Array::New(num_arguments));
|
| + const Array& arg_values =
|
| + Array::Handle(Z, Array::New(num_arguments, Heap::kOld));
|
| Instance& instance = Instance::Handle(Z);
|
| if (!constructor.IsFactory()) {
|
| instance = Instance::New(type_class, Heap::kOld);
|
| @@ -13036,22 +13034,25 @@ AstNode* Parser::ParseSymbolLiteral() {
|
| ASSERT(CurrentToken() == Token::kHASH);
|
| ConsumeToken();
|
| intptr_t symbol_pos = TokenPos();
|
| - String& symbol = String::Handle(Z);
|
| + String& symbol = String::ZoneHandle(Z);
|
| if (IsIdentifier()) {
|
| symbol = CurrentLiteral()->raw();
|
| ConsumeToken();
|
| + GrowableHandlePtrArray<const String> pieces(Z, 3);
|
| + pieces.Add(symbol);
|
| while (CurrentToken() == Token::kPERIOD) {
|
| - symbol = String::Concat(symbol, Symbols::Dot());
|
| + pieces.Add(Symbols::Dot());
|
| ConsumeToken();
|
| - symbol = String::Concat(symbol,
|
| - *ExpectIdentifier("identifier expected"));
|
| + pieces.Add(*ExpectIdentifier("identifier expected"));
|
| }
|
| + symbol = Symbols::FromConcatAll(pieces);
|
| } else if (Token::CanBeOverloaded(CurrentToken())) {
|
| - symbol = String::New(Token::Str(CurrentToken()));
|
| + symbol = Symbols::New(Token::Str(CurrentToken()));
|
| ConsumeToken();
|
| } else {
|
| ReportError("illegal symbol literal");
|
| }
|
| + ASSERT(symbol.IsSymbol());
|
|
|
| Instance& symbol_instance = Instance::ZoneHandle(Z);
|
| if (GetCachedConstant(symbol_pos, &symbol_instance)) {
|
| @@ -13062,8 +13063,7 @@ AstNode* Parser::ParseSymbolLiteral() {
|
| const Class& symbol_class = Class::Handle(I->object_store()->symbol_class());
|
| ASSERT(!symbol_class.IsNull());
|
| ArgumentListNode* constr_args = new(Z) ArgumentListNode(symbol_pos);
|
| - constr_args->Add(new(Z) LiteralNode(
|
| - symbol_pos, String::ZoneHandle(Z, Symbols::New(symbol))));
|
| + constr_args->Add(new(Z) LiteralNode(symbol_pos, symbol));
|
| const Function& constr = Function::ZoneHandle(Z,
|
| symbol_class.LookupConstructor(Symbols::SymbolCtor()));
|
| ASSERT(!constr.IsNull());
|
| @@ -13358,7 +13358,11 @@ AstNode* Parser::ParseNewOperator(Token::Kind op_kind) {
|
| // The type arguments of the redirection type are instantiated from the
|
| // type arguments of the parsed type of the 'new' or 'const' expression.
|
| Error& error = Error::Handle(Z);
|
| - redirect_type ^= redirect_type.InstantiateFrom(type_arguments, &error);
|
| + redirect_type ^= redirect_type.InstantiateFrom(
|
| + type_arguments,
|
| + &error,
|
| + NULL, // trail
|
| + Heap::kOld);
|
| if (!error.IsNull()) {
|
| redirect_type = ClassFinalizer::NewFinalizedMalformedType(
|
| error,
|
|
|