Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Side by Side Diff: lib/accessors.dart

Issue 2117513002: More extensive error handling for 'unresolved' cases. (Closed) Base URL: git@github.com:dart-lang/rasta.git@master
Patch Set: Merge and update test expectations Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dart_vm_standalone/rasta_errors.dart ('k') | lib/kernel.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 /// Extension of the kernel accessors library with accessors that use the
6 /// rasta-specific error handling.
7 library rasta.accessors;
8
9 import 'package:kernel/ast.dart' as ir;
10
11 import 'package:kernel/frontend/accessors.dart' as ir_accessors;
12
13 import 'unresolved.dart' show RastaUnresolved;
14
15 import 'kernel.dart' show Kernel;
16
17 // Expose the common superclass of accessors.
18 export 'package:kernel/frontend/accessors.dart' show Accessor;
19
20 class TopLevelStaticAccessor extends ir_accessors.StaticAccessor {
21 final RastaUnresolved builder;
22
23 /// Name of the property attempted to be accessed, used to generate an
24 /// error if unresolved.
25 final String name;
26
27 Kernel get kernel => builder.kernel;
28
29 TopLevelStaticAccessor(
30 this.builder,
31 this.name,
32 ir.Member readTarget,
33 ir.Member writeTarget)
34 : super(readTarget, writeTarget);
35
36 @override
37 makeInvalidRead() {
38 return builder.buildThrowNoSuchMethodError(
39 kernel.getUnresolvedTopLevelGetterBuilder(),
40 new ir.NullLiteral(),
41 name,
42 new ir.Arguments.empty());
43 }
44
45 @override
46 makeInvalidWrite(ir.Expression value) {
47 return builder.buildThrowNoSuchMethodError(
48 kernel.getUnresolvedTopLevelSetterBuilder(),
49 new ir.NullLiteral(),
50 name,
51 new ir.Arguments(<ir.Expression>[value]));
52 }
53 }
54
55 class ClassStaticAccessor extends ir_accessors.StaticAccessor {
56 final RastaUnresolved builder;
57
58 /// Name of the property attempted to be accessed, used to generate an
59 /// error if unresolved.
60 final String name;
61
62 Kernel get kernel => builder.kernel;
63
64 ClassStaticAccessor(this.builder, this.name,
65 ir.Member readTarget, ir.Member writeTarget)
66 : super(readTarget, writeTarget);
67
68 @override
69 makeInvalidRead() {
70 return builder.buildThrowNoSuchMethodError(
71 kernel.getUnresolvedStaticGetterBuilder(),
72 new ir.NullLiteral(),
73 name,
74 new ir.Arguments.empty());
75 }
76
77 @override
78 makeInvalidWrite(ir.Expression value) {
79 return builder.buildThrowNoSuchMethodError(
80 kernel.getUnresolvedStaticSetterBuilder(),
81 new ir.NullLiteral(),
82 name,
83 new ir.Arguments(<ir.Expression>[value]));
84 }
85 }
86
87 class SuperPropertyAccessor extends ir_accessors.SuperPropertyAccessor {
88 final RastaUnresolved builder;
89
90 /// Name of the property attempted to be accessed, used to generate an
91 /// error if unresolved.
92 final String name;
93
94 SuperPropertyAccessor(
95 this.builder,
96 this.name,
97 ir.Member readTarget,
98 ir.Member writeTarget)
99 : super(readTarget, writeTarget);
100
101 @override
102 makeInvalidRead() {
103 // TODO(asgerf): Technically, we should invoke 'super.noSuchMethod' for
104 // this and the other invalid super cases.
105 return builder.buildThrowUnresolvedSuperGetter(name);
106 }
107
108 @override
109 makeInvalidWrite(ir.Expression value) {
110 return builder.buildThrowUnresolvedSuperSetter(name, value);
111 }
112 }
113
114 class SuperIndexAccessor extends ir_accessors.SuperIndexAccessor {
115 final RastaUnresolved builder;
116
117 Kernel get kernel => builder.kernel;
118
119 SuperIndexAccessor(
120 this.builder,
121 ir.Expression index,
122 ir.Member readTarget,
123 ir.Member writeTarget)
124 : super(index, readTarget, writeTarget);
125
126 @override
127 makeInvalidRead() {
128 return builder.buildThrowNoSuchMethodError(
129 kernel.getUnresolvedSuperMethodBuilder(),
130 new ir.ThisExpression(),
131 '[]',
132 new ir.Arguments(<ir.Expression>[indexAccess()]));
133 }
134
135 @override
136 makeInvalidWrite(ir.Expression value) {
137 return builder.buildThrowNoSuchMethodError(
138 kernel.getUnresolvedSuperMethodBuilder(),
139 new ir.ThisExpression(),
140 '[]=',
141 new ir.Arguments(<ir.Expression>[indexAccess(), value]));
142 }
143 }
OLDNEW
« no previous file with comments | « dart_vm_standalone/rasta_errors.dart ('k') | lib/kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698