OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 library dart2js.kernel.env; | 5 library dart2js.kernel.env; |
6 | 6 |
7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
8 import 'package:kernel/clone.dart'; | 8 import 'package:kernel/clone.dart'; |
9 import 'package:kernel/type_algebra.dart'; | 9 import 'package:kernel/type_algebra.dart'; |
10 | 10 |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 void addConstructorBody(ConstructorBodyEntity constructorBody) { | 368 void addConstructorBody(ConstructorBodyEntity constructorBody) { |
369 _constructorBodyList ??= <ConstructorBodyEntity>[]; | 369 _constructorBodyList ??= <ConstructorBodyEntity>[]; |
370 _constructorBodyList.add(constructorBody); | 370 _constructorBodyList.add(constructorBody); |
371 } | 371 } |
372 | 372 |
373 void forEachConstructorBody(void f(ConstructorBodyEntity constructor)) { | 373 void forEachConstructorBody(void f(ConstructorBodyEntity constructor)) { |
374 _constructorBodyList?.forEach(f); | 374 _constructorBodyList?.forEach(f); |
375 } | 375 } |
376 } | 376 } |
377 | 377 |
378 class ClosureClassEnv implements ClassEnv { | 378 class ClosureClassEnv extends RecordContainerEnv { |
| 379 ClosureClassEnv(Map<String, MemberEntity> memberMap) : super(memberMap); |
| 380 |
| 381 @override |
| 382 MemberEntity lookupMember(KernelToElementMap elementMap, String name, |
| 383 {bool setter: false}) { |
| 384 if (setter) { |
| 385 // All closure fields are final. |
| 386 return null; |
| 387 } |
| 388 return super.lookupMember(elementMap, name, setter: setter); |
| 389 } |
| 390 } |
| 391 |
| 392 class RecordContainerEnv implements ClassEnv { |
379 final Map<String, MemberEntity> _memberMap; | 393 final Map<String, MemberEntity> _memberMap; |
380 | 394 |
381 ClosureClassEnv(this._memberMap); | 395 RecordContainerEnv(this._memberMap); |
382 | 396 |
383 @override | 397 @override |
384 void forEachConstructorBody(void f(ConstructorBodyEntity constructor)) { | 398 void forEachConstructorBody(void f(ConstructorBodyEntity constructor)) { |
385 // We do not create constructor bodies for closure classes. | 399 // We do not create constructor bodies for containers. |
386 } | 400 } |
387 | 401 |
388 @override | 402 @override |
389 void forEachConstructor( | 403 void forEachConstructor( |
390 KernelToElementMap elementMap, void f(ConstructorEntity constructor)) { | 404 KernelToElementMap elementMap, void f(ConstructorEntity constructor)) { |
391 // We do not create constructors for closure classes. | 405 // We do not create constructors for containers. |
392 } | 406 } |
393 | 407 |
394 @override | 408 @override |
395 ConstructorEntity lookupConstructor( | 409 ConstructorEntity lookupConstructor( |
396 KernelToElementMap elementMap, String name) { | 410 KernelToElementMap elementMap, String name) { |
397 // We do not create constructors for closure classes. | 411 // We do not create constructors for containers. |
398 return null; | 412 return null; |
399 } | 413 } |
400 | 414 |
401 @override | 415 @override |
402 void forEachMember( | 416 void forEachMember( |
403 KernelToElementMap elementMap, void f(MemberEntity member)) { | 417 KernelToElementMap elementMap, void f(MemberEntity member)) { |
404 _memberMap.values.forEach(f); | 418 _memberMap.values.forEach(f); |
405 } | 419 } |
406 | 420 |
407 @override | 421 @override |
408 MemberEntity lookupMember(KernelToElementMap elementMap, String name, | 422 MemberEntity lookupMember(KernelToElementMap elementMap, String name, |
409 {bool setter: false}) { | 423 {bool setter: false}) { |
410 if (setter) { | |
411 // All closure fields are final. | |
412 return null; | |
413 } | |
414 return _memberMap[name]; | 424 return _memberMap[name]; |
415 } | 425 } |
416 | 426 |
417 @override | 427 @override |
418 bool get isUnnamedMixinApplication => false; | 428 bool get isUnnamedMixinApplication => false; |
419 | 429 |
420 @override | 430 @override |
421 ir.Class get cls => null; | 431 ir.Class get cls => null; |
422 } | 432 } |
423 | 433 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 } | 606 } |
597 } | 607 } |
598 | 608 |
599 class TypedefData { | 609 class TypedefData { |
600 final ir.Typedef node; | 610 final ir.Typedef node; |
601 final TypedefEntity element; | 611 final TypedefEntity element; |
602 final TypedefType rawType; | 612 final TypedefType rawType; |
603 | 613 |
604 TypedefData(this.node, this.element, this.rawType); | 614 TypedefData(this.node, this.element, this.rawType); |
605 } | 615 } |
OLD | NEW |