| 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 "platform/utils.h" | 8 #include "platform/utils.h" |
| 9 #include "vm/bootstrap.h" | 9 #include "vm/bootstrap.h" |
| 10 #include "vm/class_finalizer.h" | 10 #include "vm/class_finalizer.h" |
| (...skipping 2458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2469 | 2469 |
| 2470 | 2470 |
| 2471 SequenceNode* Parser::MakeImplicitConstructor(const Function& func) { | 2471 SequenceNode* Parser::MakeImplicitConstructor(const Function& func) { |
| 2472 ASSERT(func.IsConstructor()); | 2472 ASSERT(func.IsConstructor()); |
| 2473 ASSERT(func.Owner() == current_class().raw()); | 2473 ASSERT(func.Owner() == current_class().raw()); |
| 2474 const intptr_t ctor_pos = TokenPos(); | 2474 const intptr_t ctor_pos = TokenPos(); |
| 2475 OpenFunctionBlock(func); | 2475 OpenFunctionBlock(func); |
| 2476 | 2476 |
| 2477 LocalVariable* receiver = new LocalVariable( | 2477 LocalVariable* receiver = new LocalVariable( |
| 2478 Scanner::kNoSourcePos, Symbols::This(), *ReceiverType(current_class())); | 2478 Scanner::kNoSourcePos, Symbols::This(), *ReceiverType(current_class())); |
| 2479 current_block_->scope->AddVariable(receiver); | 2479 current_block_->scope->InsertParameterAt(0, receiver); |
| 2480 | 2480 |
| 2481 LocalVariable* phase_parameter = | 2481 LocalVariable* phase_parameter = |
| 2482 new LocalVariable(Scanner::kNoSourcePos, | 2482 new LocalVariable(Scanner::kNoSourcePos, |
| 2483 Symbols::PhaseParameter(), | 2483 Symbols::PhaseParameter(), |
| 2484 Type::ZoneHandle(Type::SmiType())); | 2484 Type::ZoneHandle(Type::SmiType())); |
| 2485 current_block_->scope->AddVariable(phase_parameter); | 2485 current_block_->scope->InsertParameterAt(1, phase_parameter); |
| 2486 | 2486 |
| 2487 // Parse expressions of instance fields that have an explicit | 2487 // Parse expressions of instance fields that have an explicit |
| 2488 // initializer expression. | 2488 // initializer expression. |
| 2489 // The receiver must not be visible to field initializer expressions. | 2489 // The receiver must not be visible to field initializer expressions. |
| 2490 receiver->set_invisible(true); | 2490 receiver->set_invisible(true); |
| 2491 GrowableArray<Field*> initialized_fields; | 2491 GrowableArray<Field*> initialized_fields; |
| 2492 ParseInitializedInstanceFields( | 2492 ParseInitializedInstanceFields( |
| 2493 current_class(), receiver, &initialized_fields); | 2493 current_class(), receiver, &initialized_fields); |
| 2494 receiver->set_invisible(false); | 2494 receiver->set_invisible(false); |
| 2495 | 2495 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2516 } | 2516 } |
| 2517 | 2517 |
| 2518 // Prepare user-defined arguments to be forwarded to super call. | 2518 // Prepare user-defined arguments to be forwarded to super call. |
| 2519 // The first user-defined argument is at position 2. | 2519 // The first user-defined argument is at position 2. |
| 2520 forwarding_args = new ArgumentListNode(Scanner::kNoSourcePos); | 2520 forwarding_args = new ArgumentListNode(Scanner::kNoSourcePos); |
| 2521 for (int i = 2; i < func.NumParameters(); i++) { | 2521 for (int i = 2; i < func.NumParameters(); i++) { |
| 2522 LocalVariable* param = new LocalVariable( | 2522 LocalVariable* param = new LocalVariable( |
| 2523 Scanner::kNoSourcePos, | 2523 Scanner::kNoSourcePos, |
| 2524 String::ZoneHandle(func.ParameterNameAt(i)), | 2524 String::ZoneHandle(func.ParameterNameAt(i)), |
| 2525 Type::ZoneHandle(Type::DynamicType())); | 2525 Type::ZoneHandle(Type::DynamicType())); |
| 2526 current_block_->scope->AddVariable(param); | 2526 current_block_->scope->InsertParameterAt(i, param); |
| 2527 forwarding_args->Add(new LoadLocalNode(Scanner::kNoSourcePos, param)); | 2527 forwarding_args->Add(new LoadLocalNode(Scanner::kNoSourcePos, param)); |
| 2528 } | 2528 } |
| 2529 } | 2529 } |
| 2530 | 2530 |
| 2531 GenerateSuperConstructorCall(current_class(), | 2531 GenerateSuperConstructorCall(current_class(), |
| 2532 Scanner::kNoSourcePos, | 2532 Scanner::kNoSourcePos, |
| 2533 receiver, | 2533 receiver, |
| 2534 forwarding_args); | 2534 forwarding_args); |
| 2535 CheckFieldsInitialized(current_class()); | 2535 CheckFieldsInitialized(current_class()); |
| 2536 | 2536 |
| (...skipping 2849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5386 LocalScope* scope) { | 5386 LocalScope* scope) { |
| 5387 ASSERT((params != NULL) && (params->parameters != NULL)); | 5387 ASSERT((params != NULL) && (params->parameters != NULL)); |
| 5388 ASSERT(scope != NULL); | 5388 ASSERT(scope != NULL); |
| 5389 const int num_parameters = params->parameters->length(); | 5389 const int num_parameters = params->parameters->length(); |
| 5390 for (int i = 0; i < num_parameters; i++) { | 5390 for (int i = 0; i < num_parameters; i++) { |
| 5391 ParamDesc& param_desc = (*params->parameters)[i]; | 5391 ParamDesc& param_desc = (*params->parameters)[i]; |
| 5392 ASSERT(!is_top_level_ || param_desc.type->IsResolved()); | 5392 ASSERT(!is_top_level_ || param_desc.type->IsResolved()); |
| 5393 const String* name = param_desc.name; | 5393 const String* name = param_desc.name; |
| 5394 LocalVariable* parameter = new LocalVariable( | 5394 LocalVariable* parameter = new LocalVariable( |
| 5395 param_desc.name_pos, *name, *param_desc.type); | 5395 param_desc.name_pos, *name, *param_desc.type); |
| 5396 if (!scope->AddVariable(parameter)) { | 5396 if (!scope->InsertParameterAt(i, parameter)) { |
| 5397 ErrorMsg(param_desc.name_pos, | 5397 ErrorMsg(param_desc.name_pos, |
| 5398 "name '%s' already exists in scope", | 5398 "name '%s' already exists in scope", |
| 5399 param_desc.name->ToCString()); | 5399 param_desc.name->ToCString()); |
| 5400 } | 5400 } |
| 5401 param_desc.var = parameter; | 5401 param_desc.var = parameter; |
| 5402 if (param_desc.is_final) { | 5402 if (param_desc.is_final) { |
| 5403 parameter->set_is_final(); | 5403 parameter->set_is_final(); |
| 5404 } | 5404 } |
| 5405 if (param_desc.is_field_initializer) { | 5405 if (param_desc.is_field_initializer) { |
| 5406 parameter->set_invisible(true); | 5406 parameter->set_invisible(true); |
| (...skipping 5542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10949 void Parser::SkipQualIdent() { | 10949 void Parser::SkipQualIdent() { |
| 10950 ASSERT(IsIdentifier()); | 10950 ASSERT(IsIdentifier()); |
| 10951 ConsumeToken(); | 10951 ConsumeToken(); |
| 10952 if (CurrentToken() == Token::kPERIOD) { | 10952 if (CurrentToken() == Token::kPERIOD) { |
| 10953 ConsumeToken(); // Consume the kPERIOD token. | 10953 ConsumeToken(); // Consume the kPERIOD token. |
| 10954 ExpectIdentifier("identifier expected after '.'"); | 10954 ExpectIdentifier("identifier expected after '.'"); |
| 10955 } | 10955 } |
| 10956 } | 10956 } |
| 10957 | 10957 |
| 10958 } // namespace dart | 10958 } // namespace dart |
| OLD | NEW |