| OLD | NEW |
| 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/parser.h" | 5 #include "vm/parser.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/compiler_stats.h" | 10 #include "vm/compiler_stats.h" |
| (...skipping 4055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4066 url); | 4066 url); |
| 4067 const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle)); | 4067 const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle)); |
| 4068 CallLibraryTagHandler(kSourceTag, source_pos, canon_url); | 4068 CallLibraryTagHandler(kSourceTag, source_pos, canon_url); |
| 4069 } | 4069 } |
| 4070 } | 4070 } |
| 4071 | 4071 |
| 4072 | 4072 |
| 4073 void Parser::ParseLibraryName() { | 4073 void Parser::ParseLibraryName() { |
| 4074 ASSERT(CurrentToken() == Token::kLIBRARY); | 4074 ASSERT(CurrentToken() == Token::kLIBRARY); |
| 4075 ConsumeToken(); | 4075 ConsumeToken(); |
| 4076 // TODO(hausner): Exact syntax of library name still unclear: identifier, | 4076 String& lib_name = *ExpectIdentifier("library name expected"); |
| 4077 // qualified identifier or even multiple dots allowed? For now we just | 4077 if (CurrentToken() == Token::kPERIOD) { |
| 4078 // accept simple identifiers. | 4078 const String& dot = String::Handle(Symbols::Dot()); |
| 4079 const String& lib_name = *ExpectIdentifier("library name expected"); | 4079 while (CurrentToken() == Token::kPERIOD) { |
| 4080 ConsumeToken(); |
| 4081 lib_name = String::Concat(lib_name, dot); |
| 4082 lib_name = String::Concat(lib_name, |
| 4083 *ExpectIdentifier("malformed library name")); |
| 4084 } |
| 4085 lib_name = Symbols::New(lib_name); |
| 4086 } |
| 4080 library_.SetName(lib_name); | 4087 library_.SetName(lib_name); |
| 4081 ExpectSemicolon(); | 4088 ExpectSemicolon(); |
| 4082 } | 4089 } |
| 4083 | 4090 |
| 4084 | 4091 |
| 4085 void Parser::ParseIdentList(GrowableObjectArray* names) { | 4092 void Parser::ParseIdentList(GrowableObjectArray* names) { |
| 4086 if (!IsIdentifier()) { | 4093 if (!IsIdentifier()) { |
| 4087 ErrorMsg("identifier expected"); | 4094 ErrorMsg("identifier expected"); |
| 4088 } | 4095 } |
| 4089 while (IsIdentifier()) { | 4096 while (IsIdentifier()) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4107 ErrorMsg("library url expected"); | 4114 ErrorMsg("library url expected"); |
| 4108 } | 4115 } |
| 4109 const String& url = *CurrentLiteral(); | 4116 const String& url = *CurrentLiteral(); |
| 4110 if (url.Length() == 0) { | 4117 if (url.Length() == 0) { |
| 4111 ErrorMsg("library url expected"); | 4118 ErrorMsg("library url expected"); |
| 4112 } | 4119 } |
| 4113 ConsumeToken(); | 4120 ConsumeToken(); |
| 4114 String& prefix = String::Handle(); | 4121 String& prefix = String::Handle(); |
| 4115 if (is_import && IsLiteral("as")) { | 4122 if (is_import && IsLiteral("as")) { |
| 4116 ConsumeToken(); | 4123 ConsumeToken(); |
| 4117 prefix = ExpectIdentifier("prefix expected")->raw(); | 4124 prefix = ExpectIdentifier("prefix identifier expected")->raw(); |
| 4118 } | 4125 } |
| 4119 | 4126 |
| 4120 Array& show_names = Array::Handle(); | 4127 Array& show_names = Array::Handle(); |
| 4121 Array& hide_names = Array::Handle(); | 4128 Array& hide_names = Array::Handle(); |
| 4122 if (IsLiteral("show") || IsLiteral("hide")) { | 4129 if (IsLiteral("show") || IsLiteral("hide")) { |
| 4123 GrowableObjectArray& show_list = | 4130 GrowableObjectArray& show_list = |
| 4124 GrowableObjectArray::Handle(GrowableObjectArray::New()); | 4131 GrowableObjectArray::Handle(GrowableObjectArray::New()); |
| 4125 GrowableObjectArray& hide_list = | 4132 GrowableObjectArray& hide_list = |
| 4126 GrowableObjectArray::Handle(GrowableObjectArray::New()); | 4133 GrowableObjectArray::Handle(GrowableObjectArray::New()); |
| 4127 for (;;) { | 4134 for (;;) { |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4276 SkipMetadata(); | 4283 SkipMetadata(); |
| 4277 // TODO(hausner): Once support for old #source directive is removed | 4284 // TODO(hausner): Once support for old #source directive is removed |
| 4278 // from the compiler, add an error message here if we don't find | 4285 // from the compiler, add an error message here if we don't find |
| 4279 // a 'part of' directive. | 4286 // a 'part of' directive. |
| 4280 if (CurrentToken() == Token::kPART) { | 4287 if (CurrentToken() == Token::kPART) { |
| 4281 ConsumeToken(); | 4288 ConsumeToken(); |
| 4282 if (!IsLiteral("of")) { | 4289 if (!IsLiteral("of")) { |
| 4283 ErrorMsg("'part of' expected"); | 4290 ErrorMsg("'part of' expected"); |
| 4284 } | 4291 } |
| 4285 ConsumeToken(); | 4292 ConsumeToken(); |
| 4286 // TODO(hausner): Exact syntax of library name still unclear: identifier, | |
| 4287 // qualified identifier or even multiple dots allowed? For now we just | |
| 4288 // accept simple identifiers. | |
| 4289 // The VM is not required to check that the library name matches the | 4293 // The VM is not required to check that the library name matches the |
| 4290 // name of the current library, so we ignore it. | 4294 // name of the current library, so we ignore it. |
| 4291 ExpectIdentifier("library name expected"); | 4295 ExpectIdentifier("library name expected"); |
| 4296 while (CurrentToken() == Token::kPERIOD) { |
| 4297 ConsumeToken(); |
| 4298 ExpectIdentifier("malformed library name"); |
| 4299 } |
| 4292 ExpectSemicolon(); | 4300 ExpectSemicolon(); |
| 4293 } else { | 4301 } else { |
| 4294 SetPosition(metadata_pos); | 4302 SetPosition(metadata_pos); |
| 4295 } | 4303 } |
| 4296 } | 4304 } |
| 4297 | 4305 |
| 4298 | 4306 |
| 4299 void Parser::ParseTopLevel() { | 4307 void Parser::ParseTopLevel() { |
| 4300 TRACE_PARSER("ParseTopLevel"); | 4308 TRACE_PARSER("ParseTopLevel"); |
| 4301 // Collect the classes found at the top level in this growable array. | 4309 // Collect the classes found at the top level in this growable array. |
| (...skipping 5396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9698 void Parser::SkipQualIdent() { | 9706 void Parser::SkipQualIdent() { |
| 9699 ASSERT(IsIdentifier()); | 9707 ASSERT(IsIdentifier()); |
| 9700 ConsumeToken(); | 9708 ConsumeToken(); |
| 9701 if (CurrentToken() == Token::kPERIOD) { | 9709 if (CurrentToken() == Token::kPERIOD) { |
| 9702 ConsumeToken(); // Consume the kPERIOD token. | 9710 ConsumeToken(); // Consume the kPERIOD token. |
| 9703 ExpectIdentifier("identifier expected after '.'"); | 9711 ExpectIdentifier("identifier expected after '.'"); |
| 9704 } | 9712 } |
| 9705 } | 9713 } |
| 9706 | 9714 |
| 9707 } // namespace dart | 9715 } // namespace dart |
| OLD | NEW |