| Index: vm/parser.cc
|
| ===================================================================
|
| --- vm/parser.cc (revision 11672)
|
| +++ vm/parser.cc (working copy)
|
| @@ -3960,7 +3960,8 @@
|
| if (CurrentToken() != Token::kSTRING) {
|
| ErrorMsg("library url expected");
|
| }
|
| - const String& url = *ParseImportStringLiteral();
|
| + const String& url = *CurrentLiteral();
|
| + ConsumeToken();
|
| String& prefix = String::Handle();
|
| if (CurrentToken() == Token::kCOMMA) {
|
| ConsumeToken();
|
| @@ -4024,7 +4025,8 @@
|
| if (CurrentToken() != Token::kSTRING) {
|
| ErrorMsg("source url expected");
|
| }
|
| - const String& url = *ParseImportStringLiteral();
|
| + const String& url = *CurrentLiteral();
|
| + ConsumeToken();
|
| ExpectToken(Token::kRPAREN);
|
| ExpectToken(Token::kSEMICOLON);
|
| Dart_Handle handle = CallLibraryTagHandler(kCanonicalizeUrl,
|
| @@ -8043,33 +8045,6 @@
|
| }
|
|
|
|
|
| -// Resolve variables used in an import string literal.
|
| -// If the variable name cannot be resolved issue an error message.
|
| -// Currently we only resolve against the global map which is passed in
|
| -// when the script is loaded.
|
| -RawString* Parser::ResolveImportVar(intptr_t ident_pos, const String& ident) {
|
| - TRACE_PARSER("ResolveImportVar");
|
| - const Array& import_map =
|
| - Array::Handle(Isolate::Current()->object_store()->import_map());
|
| - if (!import_map.IsNull()) {
|
| - intptr_t length = import_map.Length();
|
| - intptr_t index = 0;
|
| - String& name = String::Handle();
|
| - while (index < (length - 1)) {
|
| - name ^= import_map.At(index);
|
| - if (name.Equals(ident)) {
|
| - name ^= import_map.At(index + 1);
|
| - return name.raw();
|
| - }
|
| - index += 2;
|
| - }
|
| - }
|
| - ErrorMsg(ident_pos, "import variable '%s' has not been defined",
|
| - ident.ToCString());
|
| - return String::null();
|
| -}
|
| -
|
| -
|
| // Parses type = [ident "."] ident ["<" type { "," type } ">"], then resolve and
|
| // finalize it according to the given type finalization mode.
|
| RawAbstractType* Parser::ParseType(
|
| @@ -8886,62 +8861,6 @@
|
| }
|
|
|
|
|
| -// An import string literal consists of the concatenation of the next n tokens
|
| -// that satisfy the EBNF grammar:
|
| -// literal = kSTRING {{ interpol }+ kSTRING }
|
| -// interpol = kINTERPOL_VAR
|
| -// In other words, the scanner breaks down interpolated strings so that
|
| -// a string literal always begins and ends with a kSTRING token, and
|
| -// there are never two kSTRING tokens next to each other.
|
| -String* Parser::ParseImportStringLiteral() {
|
| - TRACE_PARSER("ParseImportStringLiteral");
|
| - if ((CurrentToken() == Token::kSTRING) &&
|
| - (LookaheadToken(1) != Token::kINTERPOL_VAR) &&
|
| - (LookaheadToken(1) != Token::kINTERPOL_START)) {
|
| - // Common case: no interpolation.
|
| - String* result = CurrentLiteral();
|
| - ConsumeToken();
|
| - return result;
|
| - }
|
| - // String interpolation needed.
|
| - String& result = String::ZoneHandle(Symbols::Empty());
|
| - String& resolved_name = String::Handle();
|
| - while (CurrentToken() == Token::kSTRING) {
|
| - result = String::Concat(result, *CurrentLiteral());
|
| - ConsumeToken();
|
| - if ((CurrentToken() != Token::kINTERPOL_VAR) &&
|
| - (CurrentToken() != Token::kINTERPOL_START)) {
|
| - break;
|
| - }
|
| - while ((CurrentToken() == Token::kINTERPOL_VAR) ||
|
| - (CurrentToken() == Token::kINTERPOL_START)) {
|
| - if (CurrentToken() == Token::kINTERPOL_START) {
|
| - ConsumeToken();
|
| - if (IsIdentifier()) {
|
| - resolved_name = ResolveImportVar(TokenPos(), *CurrentLiteral());
|
| - result = String::Concat(result, resolved_name);
|
| - ConsumeToken();
|
| - if (CurrentToken() != Token::kINTERPOL_END) {
|
| - ErrorMsg("'}' expected");
|
| - }
|
| - ConsumeToken();
|
| - } else {
|
| - ErrorMsg("identifier expected");
|
| - }
|
| - } else {
|
| - ASSERT(CurrentToken() == Token::kINTERPOL_VAR);
|
| - resolved_name = ResolveImportVar(TokenPos(), *CurrentLiteral());
|
| - result = String::Concat(result, resolved_name);
|
| - ConsumeToken();
|
| - }
|
| - }
|
| - // A string literal always ends with a kSTRING token.
|
| - ASSERT(CurrentToken() == Token::kSTRING);
|
| - }
|
| - return &result;
|
| -}
|
| -
|
| -
|
| AstNode* Parser::ParseArgumentDefinitionTest() {
|
| const intptr_t test_pos = TokenPos();
|
| ConsumeToken();
|
|
|