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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart

Issue 2736093003: [fasta] Add and correct offsets on nodes (Closed)
Patch Set: Created 3 years, 9 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 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 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 // Note: copied from package:kernel at revision 7346348. 5 // Note: copied from package:kernel at revision 7346348.
6 6
7 /// A library to help transform compounds and null-aware accessors into 7 /// A library to help transform compounds and null-aware accessors into
8 /// let expressions. 8 /// let expressions.
9 library kernel.frontend.accessors; 9 library kernel.frontend.accessors;
10 10
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 /// Returns an [Expression] representing a compile-time error wrapping 111 /// Returns an [Expression] representing a compile-time error wrapping
112 /// [value]. 112 /// [value].
113 /// 113 ///
114 /// At runtime, [value] will be evaluated before throwing an exception. 114 /// At runtime, [value] will be evaluated before throwing an exception.
115 makeInvalidWrite(Expression value) => wrapInvalid(value); 115 makeInvalidWrite(Expression value) => wrapInvalid(value);
116 } 116 }
117 117
118 class VariableAccessor extends Accessor { 118 class VariableAccessor extends Accessor {
119 VariableDeclaration variable; 119 VariableDeclaration variable;
120 int charOffset;
120 DartType promotedType; 121 DartType promotedType;
121 122
122 VariableAccessor(this.variable, [this.promotedType]); 123 VariableAccessor(this.variable, [this.promotedType]);
123 124
124 VariableAccessor.internal(this.variable, this.promotedType); 125 VariableAccessor.internal(this.variable, this.charOffset, this.promotedType);
125 126
126 _makeRead() => new VariableGet(variable, promotedType); 127 _makeRead() => new VariableGet(variable, promotedType)..fileOffset = charOffse t;
ahe 2017/03/08 12:31:49 Long line.
127 128
128 _makeWrite(Expression value, bool voidContext) { 129 _makeWrite(Expression value, bool voidContext) {
129 return variable.isFinal || variable.isConst 130 return variable.isFinal || variable.isConst
130 ? makeInvalidWrite(value) 131 ? makeInvalidWrite(value)
131 : new VariableSet(variable, value); 132 : new VariableSet(variable, value)..fileOffset = charOffset;
132 } 133 }
133 } 134 }
134 135
135 class PropertyAccessor extends Accessor { 136 class PropertyAccessor extends Accessor {
136 VariableDeclaration _receiverVariable; 137 VariableDeclaration _receiverVariable;
137 Expression receiver; 138 Expression receiver;
138 Name name; 139 Name name;
139 Member getter, setter; 140 Member getter, setter;
141 int charOffset;
140 142
141 static Accessor make( 143 static Accessor make(Expression receiver, Name name, Member getter,
142 Expression receiver, Name name, Member getter, Member setter) { 144 Member setter, int charOffset) {
143 if (receiver is ThisExpression) { 145 if (receiver is ThisExpression) {
144 return new ThisPropertyAccessor(name, getter, setter); 146 return new ThisPropertyAccessor(name, getter, setter);
145 } else { 147 } else {
146 return new PropertyAccessor.internal(receiver, name, getter, setter); 148 return new PropertyAccessor.internal(
149 receiver, name, getter, setter, charOffset);
147 } 150 }
148 } 151 }
149 152
150 PropertyAccessor.internal(this.receiver, this.name, this.getter, this.setter); 153 PropertyAccessor.internal(
154 this.receiver, this.name, this.getter, this.setter, this.charOffset);
151 155
152 _makeSimpleRead() => new PropertyGet(receiver, name, getter); 156 _makeSimpleRead() =>
157 new PropertyGet(receiver, name, getter)..fileOffset = charOffset;
153 _makeSimpleWrite(Expression value, bool voidContext) { 158 _makeSimpleWrite(Expression value, bool voidContext) {
154 return new PropertySet(receiver, name, value, setter); 159 return new PropertySet(receiver, name, value, setter)
160 ..fileOffset = charOffset;
155 } 161 }
156 162
157 receiverAccess() { 163 receiverAccess() {
158 _receiverVariable ??= new VariableDeclaration.forValue(receiver); 164 _receiverVariable ??= new VariableDeclaration.forValue(receiver);
159 return new VariableGet(_receiverVariable); 165 return new VariableGet(_receiverVariable)..fileOffset = charOffset;
160 } 166 }
161 167
162 _makeRead() => new PropertyGet(receiverAccess(), name, getter); 168 _makeRead() =>
169 new PropertyGet(receiverAccess(), name, getter)..fileOffset = charOffset;
163 170
164 _makeWrite(Expression value, bool voidContext) { 171 _makeWrite(Expression value, bool voidContext) {
165 return new PropertySet(receiverAccess(), name, value, setter); 172 return new PropertySet(receiverAccess(), name, value, setter)
173 ..fileOffset = charOffset;
166 } 174 }
167 175
168 _finish(Expression body) => makeLet(_receiverVariable, body); 176 _finish(Expression body) => makeLet(_receiverVariable, body);
169 } 177 }
170 178
171 /// Special case of [PropertyAccessor] to avoid creating an indirect access to 179 /// Special case of [PropertyAccessor] to avoid creating an indirect access to
172 /// 'this'. 180 /// 'this'.
173 class ThisPropertyAccessor extends Accessor { 181 class ThisPropertyAccessor extends Accessor {
174 Name name; 182 Name name;
175 Member getter, setter; 183 Member getter, setter;
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 461
454 VariableDeclaration makeOrReuseVariable(Expression value) { 462 VariableDeclaration makeOrReuseVariable(Expression value) {
455 // TODO: Devise a way to remember if a variable declaration was reused 463 // TODO: Devise a way to remember if a variable declaration was reused
456 // or is fresh (hence needs a let binding). 464 // or is fresh (hence needs a let binding).
457 return new VariableDeclaration.forValue(value); 465 return new VariableDeclaration.forValue(value);
458 } 466 }
459 467
460 Expression wrapInvalid(Expression e) { 468 Expression wrapInvalid(Expression e) {
461 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); 469 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression());
462 } 470 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart ('k') | pkg/front_end/lib/src/fasta/parser/listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698