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

Side by Side Diff: pkg/compiler/lib/src/ssa/nodes.dart

Issue 1196433002: Create and test source mapping for invocations. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Update comments. Created 5 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
OLDNEW
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 part of ssa; 5 part of ssa;
6 6
7 abstract class HVisitor<R> { 7 abstract class HVisitor<R> {
8 R visitAdd(HAdd node); 8 R visitAdd(HAdd node);
9 R visitAwait(HAwait node); 9 R visitAwait(HAwait node);
10 R visitBitAnd(HBitAnd node); 10 R visitBitAnd(HBitAnd node);
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 165 }
166 166
167 HBasicBlock addNewLoopHeaderBlock(JumpTarget target, 167 HBasicBlock addNewLoopHeaderBlock(JumpTarget target,
168 List<LabelDefinition> labels) { 168 List<LabelDefinition> labels) {
169 HBasicBlock result = addNewBlock(); 169 HBasicBlock result = addNewBlock();
170 result.loopInformation = 170 result.loopInformation =
171 new HLoopInformation(result, target, labels); 171 new HLoopInformation(result, target, labels);
172 return result; 172 return result;
173 } 173 }
174 174
175 HConstant addConstant(ConstantValue constant, Compiler compiler) { 175 HConstant addConstant(ConstantValue constant, Compiler compiler,
176 {SourceInformation sourceInformation}) {
176 HConstant result = constants[constant]; 177 HConstant result = constants[constant];
178 // TODO(johnniwinther): Support source information per constant reference.
177 if (result == null) { 179 if (result == null) {
178 TypeMask type = computeTypeMask(compiler, constant); 180 TypeMask type = computeTypeMask(compiler, constant);
179 result = new HConstant.internal(constant, type); 181 result = new HConstant.internal(constant, type)
182 ..sourceInformation = sourceInformation;
180 entry.addAtExit(result); 183 entry.addAtExit(result);
181 constants[constant] = result; 184 constants[constant] = result;
182 } else if (result.block == null) { 185 } else if (result.block == null) {
183 // The constant was not used anymore. 186 // The constant was not used anymore.
184 entry.addAtExit(result); 187 entry.addAtExit(result);
185 } 188 }
186 return result; 189 return result;
187 } 190 }
188 191
189 HConstant addDeferredConstant(ConstantValue constant, PrefixElement prefix, 192 HConstant addDeferredConstant(ConstantValue constant, PrefixElement prefix,
193 SourceInformation sourceInformation,
190 Compiler compiler) { 194 Compiler compiler) {
191 // TODO(sigurdm,johnniwinter): These deferred constants should be created 195 // TODO(sigurdm,johnniwinter): These deferred constants should be created
192 // by the constant evaluator. 196 // by the constant evaluator.
193 ConstantValue wrapper = new DeferredConstantValue(constant, prefix); 197 ConstantValue wrapper = new DeferredConstantValue(constant, prefix);
194 compiler.deferredLoadTask.registerConstantDeferredUse(wrapper, prefix); 198 compiler.deferredLoadTask.registerConstantDeferredUse(wrapper, prefix);
195 return addConstant(wrapper, compiler); 199 return addConstant(wrapper, compiler, sourceInformation: sourceInformation);
196 } 200 }
197 201
198 HConstant addConstantInt(int i, Compiler compiler) { 202 HConstant addConstantInt(int i, Compiler compiler) {
199 return addConstant(compiler.backend.constantSystem.createInt(i), compiler); 203 return addConstant(compiler.backend.constantSystem.createInt(i), compiler);
200 } 204 }
201 205
202 HConstant addConstantDouble(double d, Compiler compiler) { 206 HConstant addConstantDouble(double d, Compiler compiler) {
203 return addConstant( 207 return addConstant(
204 compiler.backend.constantSystem.createDouble(d), compiler); 208 compiler.backend.constantSystem.createDouble(d), compiler);
205 } 209 }
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 */ 1305 */
1302 abstract class HLateInstruction extends HInstruction { 1306 abstract class HLateInstruction extends HInstruction {
1303 HLateInstruction(List<HInstruction> inputs, TypeMask type) 1307 HLateInstruction(List<HInstruction> inputs, TypeMask type)
1304 : super(inputs, type); 1308 : super(inputs, type);
1305 } 1309 }
1306 1310
1307 class HBoolify extends HInstruction { 1311 class HBoolify extends HInstruction {
1308 HBoolify(HInstruction value, TypeMask type) 1312 HBoolify(HInstruction value, TypeMask type)
1309 : super(<HInstruction>[value], type) { 1313 : super(<HInstruction>[value], type) {
1310 setUseGvn(); 1314 setUseGvn();
1315 sourceInformation = value.sourceInformation;
1311 } 1316 }
1312 1317
1313 accept(HVisitor visitor) => visitor.visitBoolify(this); 1318 accept(HVisitor visitor) => visitor.visitBoolify(this);
1314 int typeCode() => HInstruction.BOOLIFY_TYPECODE; 1319 int typeCode() => HInstruction.BOOLIFY_TYPECODE;
1315 bool typeEquals(other) => other is HBoolify; 1320 bool typeEquals(other) => other is HBoolify;
1316 bool dataEquals(HInstruction other) => true; 1321 bool dataEquals(HInstruction other) => true;
1317 } 1322 }
1318 1323
1319 /** 1324 /**
1320 * A [HCheck] instruction is an instruction that might do a dynamic 1325 * A [HCheck] instruction is an instruction that might do a dynamic
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 /** The class where the call to super is being done. */ 1509 /** The class where the call to super is being done. */
1505 final ClassElement caller; 1510 final ClassElement caller;
1506 final bool isSetter; 1511 final bool isSetter;
1507 final Selector selector; 1512 final Selector selector;
1508 1513
1509 HInvokeSuper(Element element, 1514 HInvokeSuper(Element element,
1510 this.caller, 1515 this.caller,
1511 this.selector, 1516 this.selector,
1512 inputs, 1517 inputs,
1513 type, 1518 type,
1519 SourceInformation sourceInformation,
1514 {this.isSetter}) 1520 {this.isSetter})
1515 : super(element, inputs, type); 1521 : super(element, inputs, type) {
1522 this.sourceInformation = sourceInformation;
1523 }
1516 1524
1517 HInstruction get receiver => inputs[0]; 1525 HInstruction get receiver => inputs[0];
1518 HInstruction getDartReceiver(Compiler compiler) { 1526 HInstruction getDartReceiver(Compiler compiler) {
1519 return isCallOnInterceptor(compiler) ? inputs[1] : inputs[0]; 1527 return isCallOnInterceptor(compiler) ? inputs[1] : inputs[0];
1520 } 1528 }
1521 1529
1522 /** 1530 /**
1523 * Returns whether this call is on an interceptor object. 1531 * Returns whether this call is on an interceptor object.
1524 */ 1532 */
1525 bool isCallOnInterceptor(Compiler compiler) { 1533 bool isCallOnInterceptor(Compiler compiler) {
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
2255 accept(HVisitor visitor) => visitor.visitLessEqual(this); 2263 accept(HVisitor visitor) => visitor.visitLessEqual(this);
2256 2264
2257 BinaryOperation operation(ConstantSystem constantSystem) 2265 BinaryOperation operation(ConstantSystem constantSystem)
2258 => constantSystem.lessEqual; 2266 => constantSystem.lessEqual;
2259 int typeCode() => HInstruction.LESS_EQUAL_TYPECODE; 2267 int typeCode() => HInstruction.LESS_EQUAL_TYPECODE;
2260 bool typeEquals(other) => other is HLessEqual; 2268 bool typeEquals(other) => other is HLessEqual;
2261 bool dataEquals(HInstruction other) => true; 2269 bool dataEquals(HInstruction other) => true;
2262 } 2270 }
2263 2271
2264 class HReturn extends HControlFlow { 2272 class HReturn extends HControlFlow {
2265 HReturn(value) : super(<HInstruction>[value]); 2273 HReturn(HInstruction value, SourceInformation sourceInformation)
2274 : super(<HInstruction>[value]) {
2275 this.sourceInformation = sourceInformation;
2276 }
2266 toString() => 'return'; 2277 toString() => 'return';
2267 accept(HVisitor visitor) => visitor.visitReturn(this); 2278 accept(HVisitor visitor) => visitor.visitReturn(this);
2268 } 2279 }
2269 2280
2270 class HThrowExpression extends HInstruction { 2281 class HThrowExpression extends HInstruction {
2271 HThrowExpression(value) 2282 HThrowExpression(HInstruction value, SourceInformation sourceInformation)
2272 : super(<HInstruction>[value], const TypeMask.nonNullEmpty()); 2283 : super(<HInstruction>[value], const TypeMask.nonNullEmpty()) {
2284 this.sourceInformation = sourceInformation;
2285 }
2273 toString() => 'throw expression'; 2286 toString() => 'throw expression';
2274 accept(HVisitor visitor) => visitor.visitThrowExpression(this); 2287 accept(HVisitor visitor) => visitor.visitThrowExpression(this);
2275 bool canThrow() => true; 2288 bool canThrow() => true;
2276 } 2289 }
2277 2290
2278 class HAwait extends HInstruction { 2291 class HAwait extends HInstruction {
2279 HAwait(HInstruction value, TypeMask type) 2292 HAwait(HInstruction value, TypeMask type)
2280 : super(<HInstruction>[value], type); 2293 : super(<HInstruction>[value], type);
2281 toString() => 'await'; 2294 toString() => 'await';
2282 accept(HVisitor visitor) => visitor.visitAwait(this); 2295 accept(HVisitor visitor) => visitor.visitAwait(this);
2283 // An await will throw if its argument is not a real future. 2296 // An await will throw if its argument is not a real future.
2284 bool canThrow() => true; 2297 bool canThrow() => true;
2285 SideEffects sideEffects = new SideEffects(); 2298 SideEffects sideEffects = new SideEffects();
2286 } 2299 }
2287 2300
2288 class HYield extends HInstruction { 2301 class HYield extends HInstruction {
2289 HYield(HInstruction value, this.hasStar) 2302 HYield(HInstruction value, this.hasStar)
2290 : super(<HInstruction>[value], const TypeMask.nonNullEmpty()); 2303 : super(<HInstruction>[value], const TypeMask.nonNullEmpty());
2291 bool hasStar; 2304 bool hasStar;
2292 toString() => 'yield'; 2305 toString() => 'yield';
2293 accept(HVisitor visitor) => visitor.visitYield(this); 2306 accept(HVisitor visitor) => visitor.visitYield(this);
2294 bool canThrow() => false; 2307 bool canThrow() => false;
2295 SideEffects sideEffects = new SideEffects(); 2308 SideEffects sideEffects = new SideEffects();
2296 } 2309 }
2297 2310
2298 class HThrow extends HControlFlow { 2311 class HThrow extends HControlFlow {
2299 final bool isRethrow; 2312 final bool isRethrow;
2300 HThrow(value, {this.isRethrow: false}) : super(<HInstruction>[value]); 2313 HThrow(HInstruction value,
2314 SourceInformation sourceInformation,
2315 {this.isRethrow: false})
2316 : super(<HInstruction>[value]) {
2317 this.sourceInformation = sourceInformation;
2318 }
2301 toString() => 'throw'; 2319 toString() => 'throw';
2302 accept(HVisitor visitor) => visitor.visitThrow(this); 2320 accept(HVisitor visitor) => visitor.visitThrow(this);
2303 } 2321 }
2304 2322
2305 class HStatic extends HInstruction { 2323 class HStatic extends HInstruction {
2306 final Element element; 2324 final Element element;
2307 HStatic(this.element, type) : super(<HInstruction>[], type) { 2325 HStatic(this.element, type) : super(<HInstruction>[], type) {
2308 assert(element != null); 2326 assert(element != null);
2309 assert(invariant(this, element.isDeclaration)); 2327 assert(invariant(this, element.isDeclaration));
2310 sideEffects.clearAllSideEffects(); 2328 sideEffects.clearAllSideEffects();
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after
3181 class HDynamicType extends HRuntimeType { 3199 class HDynamicType extends HRuntimeType {
3182 HDynamicType(DynamicType dartType, TypeMask instructionType) 3200 HDynamicType(DynamicType dartType, TypeMask instructionType)
3183 : super(const <HInstruction>[], dartType, instructionType); 3201 : super(const <HInstruction>[], dartType, instructionType);
3184 3202
3185 accept(HVisitor visitor) => visitor.visitDynamicType(this); 3203 accept(HVisitor visitor) => visitor.visitDynamicType(this);
3186 3204
3187 int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE; 3205 int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE;
3188 3206
3189 bool typeEquals(HInstruction other) => other is HDynamicType; 3207 bool typeEquals(HInstruction other) => other is HDynamicType;
3190 } 3208 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698