OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
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.md file. | |
4 | |
5 import 'package:kernel/ast.dart' as ir; | |
6 import 'package:kernel/frontend/accessors.dart' as ir_accessors; | |
7 | |
8 import 'kernel.dart' show Kernel; | |
9 import 'unresolved.dart' show UnresolvedVisitor; | |
10 | |
11 export 'package:kernel/frontend/accessors.dart' show Accessor; | |
12 | |
13 class TopLevelStaticAccessor extends ir_accessors.StaticAccessor { | |
14 final UnresolvedVisitor builder; | |
15 | |
16 /// Name of the property attempted to be accessed, used to generate an | |
17 /// error if unresolved. | |
18 final String name; | |
19 | |
20 Kernel get kernel => builder.kernel; | |
21 | |
22 TopLevelStaticAccessor( | |
23 this.builder, | |
24 this.name, | |
25 ir.Member readTarget, | |
26 ir.Member writeTarget) | |
27 : super(readTarget, writeTarget); | |
28 | |
29 @override | |
30 makeInvalidRead() { | |
31 return builder.buildThrowNoSuchMethodError( | |
32 kernel.getUnresolvedTopLevelGetterBuilder(), | |
33 new ir.NullLiteral(), | |
34 name, | |
35 new ir.Arguments.empty()); | |
36 } | |
37 | |
38 @override | |
39 makeInvalidWrite(ir.Expression value) { | |
40 return builder.buildThrowNoSuchMethodError( | |
41 kernel.getUnresolvedTopLevelSetterBuilder(), | |
42 new ir.NullLiteral(), | |
43 name, | |
44 new ir.Arguments(<ir.Expression>[value])); | |
45 } | |
46 } | |
47 | |
48 class ClassStaticAccessor extends ir_accessors.StaticAccessor { | |
49 final RastaUnresolved builder; | |
Siggi Cherem (dart-lang)
2016/08/22 22:30:15
rename to UnresolvedVisitor? (same below)?
| |
50 | |
51 /// Name of the property attempted to be accessed, used to generate an | |
52 /// error if unresolved. | |
53 final String name; | |
54 | |
55 Kernel get kernel => builder.kernel; | |
56 | |
57 ClassStaticAccessor(this.builder, this.name, | |
58 ir.Member readTarget, ir.Member writeTarget) | |
59 : super(readTarget, writeTarget); | |
60 | |
61 @override | |
62 makeInvalidRead() { | |
63 return builder.buildThrowNoSuchMethodError( | |
64 kernel.getUnresolvedStaticGetterBuilder(), | |
65 new ir.NullLiteral(), | |
66 name, | |
67 new ir.Arguments.empty()); | |
68 } | |
69 | |
70 @override | |
71 makeInvalidWrite(ir.Expression value) { | |
72 return builder.buildThrowNoSuchMethodError( | |
73 kernel.getUnresolvedStaticSetterBuilder(), | |
74 new ir.NullLiteral(), | |
75 name, | |
76 new ir.Arguments(<ir.Expression>[value])); | |
77 } | |
78 } | |
79 | |
80 class SuperPropertyAccessor extends ir_accessors.SuperPropertyAccessor { | |
81 final RastaUnresolved builder; | |
82 | |
83 /// Name of the property attempted to be accessed, used to generate an | |
84 /// error if unresolved. | |
85 final String name; | |
86 | |
87 SuperPropertyAccessor( | |
88 this.builder, | |
89 this.name, | |
90 ir.Member readTarget, | |
91 ir.Member writeTarget) | |
92 : super(readTarget, writeTarget); | |
93 | |
94 @override | |
95 makeInvalidRead() { | |
96 // TODO(asgerf): Technically, we should invoke 'super.noSuchMethod' for | |
97 // this and the other invalid super cases. | |
98 return builder.buildThrowUnresolvedSuperGetter(name); | |
99 } | |
100 | |
101 @override | |
102 makeInvalidWrite(ir.Expression value) { | |
103 return builder.buildThrowUnresolvedSuperSetter(name, value); | |
104 } | |
105 } | |
106 | |
107 class SuperIndexAccessor extends ir_accessors.SuperIndexAccessor { | |
108 final RastaUnresolved builder; | |
109 | |
110 Kernel get kernel => builder.kernel; | |
111 | |
112 SuperIndexAccessor( | |
113 this.builder, | |
114 ir.Expression index, | |
115 ir.Member readTarget, | |
116 ir.Member writeTarget) | |
117 : super(index, readTarget, writeTarget); | |
118 | |
119 @override | |
120 makeInvalidRead() { | |
121 return builder.buildThrowNoSuchMethodError( | |
122 kernel.getUnresolvedSuperMethodBuilder(), | |
123 new ir.ThisExpression(), | |
124 '[]', | |
125 new ir.Arguments(<ir.Expression>[indexAccess()])); | |
126 } | |
127 | |
128 @override | |
129 makeInvalidWrite(ir.Expression value) { | |
130 return builder.buildThrowNoSuchMethodError( | |
131 kernel.getUnresolvedSuperMethodBuilder(), | |
132 new ir.ThisExpression(), | |
133 '[]=', | |
134 new ir.Arguments(<ir.Expression>[indexAccess(), value])); | |
135 } | |
136 } | |
OLD | NEW |