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 "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
8 #include "vm/bigint_operations.h" | 8 #include "vm/bigint_operations.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 4214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4225 | 4225 |
4226 | 4226 |
4227 | 4227 |
4228 RawObject* Parser::CallLibraryTagHandler(Dart_LibraryTag tag, | 4228 RawObject* Parser::CallLibraryTagHandler(Dart_LibraryTag tag, |
4229 intptr_t token_pos, | 4229 intptr_t token_pos, |
4230 const String& url) { | 4230 const String& url) { |
4231 Isolate* isolate = Isolate::Current(); | 4231 Isolate* isolate = Isolate::Current(); |
4232 Dart_LibraryTagHandler handler = isolate->library_tag_handler(); | 4232 Dart_LibraryTagHandler handler = isolate->library_tag_handler(); |
4233 if (handler == NULL) { | 4233 if (handler == NULL) { |
4234 if (url.StartsWith(Symbols::DartScheme())) { | 4234 if (url.StartsWith(Symbols::DartScheme())) { |
4235 if (tag == kCanonicalizeUrl) { | 4235 if (tag == Dart_kCanonicalizeUrl) { |
4236 return url.raw(); | 4236 return url.raw(); |
4237 } | 4237 } |
4238 return Object::null(); | 4238 return Object::null(); |
4239 } | 4239 } |
4240 ErrorMsg(token_pos, "no library handler registered"); | 4240 ErrorMsg(token_pos, "no library handler registered"); |
4241 } | 4241 } |
4242 Dart_Handle result = handler(tag, | 4242 Dart_Handle result = handler(tag, |
4243 Api::NewHandle(isolate, library_.raw()), | 4243 Api::NewHandle(isolate, library_.raw()), |
4244 Api::NewHandle(isolate, url.raw())); | 4244 Api::NewHandle(isolate, url.raw())); |
4245 if (Dart_IsError(result)) { | 4245 if (Dart_IsError(result)) { |
4246 // In case of an error we append an explanatory error message to the | 4246 // In case of an error we append an explanatory error message to the |
4247 // error obtained from the library tag handler. | 4247 // error obtained from the library tag handler. |
4248 Error& prev_error = Error::Handle(); | 4248 Error& prev_error = Error::Handle(); |
4249 prev_error ^= Api::UnwrapHandle(result); | 4249 prev_error ^= Api::UnwrapHandle(result); |
4250 AppendErrorMsg(prev_error, token_pos, "library handler failed"); | 4250 AppendErrorMsg(prev_error, token_pos, "library handler failed"); |
4251 } | 4251 } |
4252 if (tag == kCanonicalizeUrl) { | 4252 if (tag == Dart_kCanonicalizeUrl) { |
4253 if (!Dart_IsString(result)) { | 4253 if (!Dart_IsString(result)) { |
4254 ErrorMsg(token_pos, "library handler failed URI canonicalization"); | 4254 ErrorMsg(token_pos, "library handler failed URI canonicalization"); |
4255 } | 4255 } |
4256 } | 4256 } |
4257 return Api::UnwrapHandle(result); | 4257 return Api::UnwrapHandle(result); |
4258 } | 4258 } |
4259 | 4259 |
4260 | 4260 |
4261 void Parser::ParseLibraryName() { | 4261 void Parser::ParseLibraryName() { |
4262 ASSERT(CurrentToken() == Token::kLIBRARY); | 4262 ASSERT(CurrentToken() == Token::kLIBRARY); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4333 show_names = Array::MakeArray(show_list); | 4333 show_names = Array::MakeArray(show_list); |
4334 } | 4334 } |
4335 if (hide_list.Length() > 0) { | 4335 if (hide_list.Length() > 0) { |
4336 hide_names = Array::MakeArray(hide_list); | 4336 hide_names = Array::MakeArray(hide_list); |
4337 } | 4337 } |
4338 } | 4338 } |
4339 ExpectSemicolon(); | 4339 ExpectSemicolon(); |
4340 | 4340 |
4341 // Canonicalize library URL. | 4341 // Canonicalize library URL. |
4342 const String& canon_url = String::CheckedHandle( | 4342 const String& canon_url = String::CheckedHandle( |
4343 CallLibraryTagHandler(kCanonicalizeUrl, import_pos, url)); | 4343 CallLibraryTagHandler(Dart_kCanonicalizeUrl, import_pos, url)); |
4344 // Lookup the library URL. | 4344 // Lookup the library URL. |
4345 Library& library = Library::Handle(Library::LookupLibrary(canon_url)); | 4345 Library& library = Library::Handle(Library::LookupLibrary(canon_url)); |
4346 if (library.IsNull()) { | 4346 if (library.IsNull()) { |
4347 // Call the library tag handler to load the library. | 4347 // Call the library tag handler to load the library. |
4348 CallLibraryTagHandler(kImportTag, import_pos, canon_url); | 4348 CallLibraryTagHandler(Dart_kImportTag, import_pos, canon_url); |
4349 // If the library tag handler succeded without registering the | 4349 // If the library tag handler succeded without registering the |
4350 // library we create an empty library to import. | 4350 // library we create an empty library to import. |
4351 library = Library::LookupLibrary(canon_url); | 4351 library = Library::LookupLibrary(canon_url); |
4352 if (library.IsNull()) { | 4352 if (library.IsNull()) { |
4353 library = Library::New(canon_url); | 4353 library = Library::New(canon_url); |
4354 library.Register(); | 4354 library.Register(); |
4355 } | 4355 } |
4356 } | 4356 } |
4357 const Namespace& ns = | 4357 const Namespace& ns = |
4358 Namespace::Handle(Namespace::New(library, show_names, hide_names)); | 4358 Namespace::Handle(Namespace::New(library, show_names, hide_names)); |
(...skipping 27 matching lines...) Expand all Loading... |
4386 void Parser::ParseLibraryPart() { | 4386 void Parser::ParseLibraryPart() { |
4387 const intptr_t source_pos = TokenPos(); | 4387 const intptr_t source_pos = TokenPos(); |
4388 ConsumeToken(); // Consume "part". | 4388 ConsumeToken(); // Consume "part". |
4389 if (CurrentToken() != Token::kSTRING) { | 4389 if (CurrentToken() != Token::kSTRING) { |
4390 ErrorMsg("url expected"); | 4390 ErrorMsg("url expected"); |
4391 } | 4391 } |
4392 const String& url = *CurrentLiteral(); | 4392 const String& url = *CurrentLiteral(); |
4393 ConsumeToken(); | 4393 ConsumeToken(); |
4394 ExpectSemicolon(); | 4394 ExpectSemicolon(); |
4395 const String& canon_url = String::CheckedHandle( | 4395 const String& canon_url = String::CheckedHandle( |
4396 CallLibraryTagHandler(kCanonicalizeUrl, source_pos, url)); | 4396 CallLibraryTagHandler(Dart_kCanonicalizeUrl, source_pos, url)); |
4397 CallLibraryTagHandler(kSourceTag, source_pos, canon_url); | 4397 CallLibraryTagHandler(Dart_kSourceTag, source_pos, canon_url); |
4398 } | 4398 } |
4399 | 4399 |
4400 | 4400 |
4401 void Parser::ParseLibraryDefinition() { | 4401 void Parser::ParseLibraryDefinition() { |
4402 TRACE_PARSER("ParseLibraryDefinition"); | 4402 TRACE_PARSER("ParseLibraryDefinition"); |
4403 | 4403 |
4404 // Handle the script tag. | 4404 // Handle the script tag. |
4405 if (CurrentToken() == Token::kSCRIPTTAG) { | 4405 if (CurrentToken() == Token::kSCRIPTTAG) { |
4406 // Nothing to do for script tags except to skip them. | 4406 // Nothing to do for script tags except to skip them. |
4407 ConsumeToken(); | 4407 ConsumeToken(); |
(...skipping 5551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9959 void Parser::SkipQualIdent() { | 9959 void Parser::SkipQualIdent() { |
9960 ASSERT(IsIdentifier()); | 9960 ASSERT(IsIdentifier()); |
9961 ConsumeToken(); | 9961 ConsumeToken(); |
9962 if (CurrentToken() == Token::kPERIOD) { | 9962 if (CurrentToken() == Token::kPERIOD) { |
9963 ConsumeToken(); // Consume the kPERIOD token. | 9963 ConsumeToken(); // Consume the kPERIOD token. |
9964 ExpectIdentifier("identifier expected after '.'"); | 9964 ExpectIdentifier("identifier expected after '.'"); |
9965 } | 9965 } |
9966 } | 9966 } |
9967 | 9967 |
9968 } // namespace dart | 9968 } // namespace dart |
OLD | NEW |