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

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart

Issue 57773002: Repro for OOM bug in test.dart (applies to r29345). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
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 visitBitAnd(HBitAnd node); 9 R visitBitAnd(HBitAnd node);
10 R visitBitNot(HBitNot node); 10 R visitBitNot(HBitNot node);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 R visitStringConcat(HStringConcat node); 60 R visitStringConcat(HStringConcat node);
61 R visitStringify(HStringify node); 61 R visitStringify(HStringify node);
62 R visitSubtract(HSubtract node); 62 R visitSubtract(HSubtract node);
63 R visitSwitch(HSwitch node); 63 R visitSwitch(HSwitch node);
64 R visitThis(HThis node); 64 R visitThis(HThis node);
65 R visitThrow(HThrow node); 65 R visitThrow(HThrow node);
66 R visitThrowExpression(HThrowExpression node); 66 R visitThrowExpression(HThrowExpression node);
67 R visitTry(HTry node); 67 R visitTry(HTry node);
68 R visitTypeConversion(HTypeConversion node); 68 R visitTypeConversion(HTypeConversion node);
69 R visitTypeKnown(HTypeKnown node); 69 R visitTypeKnown(HTypeKnown node);
70 R visitFunctionType(HFunctionType node);
71 R visitReadTypeVariable(HReadTypeVariable node);
70 } 72 }
71 73
72 abstract class HGraphVisitor { 74 abstract class HGraphVisitor {
73 visitDominatorTree(HGraph graph) { 75 visitDominatorTree(HGraph graph) {
74 void visitBasicBlockAndSuccessors(HBasicBlock block) { 76 void visitBasicBlockAndSuccessors(HBasicBlock block) {
75 visitBasicBlock(block); 77 visitBasicBlock(block);
76 List dominated = block.dominatedBlocks; 78 List dominated = block.dominatedBlocks;
77 for (int i = 0; i < dominated.length; i++) { 79 for (int i = 0; i < dominated.length; i++) {
78 visitBasicBlockAndSuccessors(dominated[i]); 80 visitBasicBlockAndSuccessors(dominated[i]);
79 } 81 }
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 visitStaticStore(HStaticStore node) => visitInstruction(node); 341 visitStaticStore(HStaticStore node) => visitInstruction(node);
340 visitStringConcat(HStringConcat node) => visitInstruction(node); 342 visitStringConcat(HStringConcat node) => visitInstruction(node);
341 visitStringify(HStringify node) => visitInstruction(node); 343 visitStringify(HStringify node) => visitInstruction(node);
342 visitThis(HThis node) => visitParameterValue(node); 344 visitThis(HThis node) => visitParameterValue(node);
343 visitThrow(HThrow node) => visitControlFlow(node); 345 visitThrow(HThrow node) => visitControlFlow(node);
344 visitThrowExpression(HThrowExpression node) => visitInstruction(node); 346 visitThrowExpression(HThrowExpression node) => visitInstruction(node);
345 visitTry(HTry node) => visitControlFlow(node); 347 visitTry(HTry node) => visitControlFlow(node);
346 visitIs(HIs node) => visitInstruction(node); 348 visitIs(HIs node) => visitInstruction(node);
347 visitTypeConversion(HTypeConversion node) => visitCheck(node); 349 visitTypeConversion(HTypeConversion node) => visitCheck(node);
348 visitTypeKnown(HTypeKnown node) => visitCheck(node); 350 visitTypeKnown(HTypeKnown node) => visitCheck(node);
351 visitFunctionType(HFunctionType node) => visitInstruction(node);
352 visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node);
349 } 353 }
350 354
351 class SubGraph { 355 class SubGraph {
352 // The first and last block of the sub-graph. 356 // The first and last block of the sub-graph.
353 final HBasicBlock start; 357 final HBasicBlock start;
354 final HBasicBlock end; 358 final HBasicBlock end;
355 359
356 const SubGraph(this.start, this.end); 360 const SubGraph(this.start, this.end);
357 361
358 bool contains(HBasicBlock block) { 362 bool contains(HBasicBlock block) {
(...skipping 2351 matching lines...) Expand 10 before | Expand all | Expand 10 after
2710 this.finallyBlock); 2714 this.finallyBlock);
2711 2715
2712 HBasicBlock get start => body.start; 2716 HBasicBlock get start => body.start;
2713 HBasicBlock get end => 2717 HBasicBlock get end =>
2714 finallyBlock == null ? catchBlock.end : finallyBlock.end; 2718 finallyBlock == null ? catchBlock.end : finallyBlock.end;
2715 2719
2716 bool accept(HStatementInformationVisitor visitor) => 2720 bool accept(HStatementInformationVisitor visitor) =>
2717 visitor.visitTryInfo(this); 2721 visitor.visitTryInfo(this);
2718 } 2722 }
2719 2723
2720
2721
2722 class HSwitchBlockInformation implements HStatementInformation { 2724 class HSwitchBlockInformation implements HStatementInformation {
2723 final HExpressionInformation expression; 2725 final HExpressionInformation expression;
2724 final List<List<Constant>> matchExpressions; 2726 final List<List<Constant>> matchExpressions;
2725 final List<HStatementInformation> statements; 2727 final List<HStatementInformation> statements;
2726 final TargetElement target; 2728 final TargetElement target;
2727 final List<LabelElement> labels; 2729 final List<LabelElement> labels;
2728 2730
2729 HSwitchBlockInformation(this.expression, 2731 HSwitchBlockInformation(this.expression,
2730 this.matchExpressions, 2732 this.matchExpressions,
2731 this.statements, 2733 this.statements,
2732 this.target, 2734 this.target,
2733 this.labels); 2735 this.labels);
2734 2736
2735 HBasicBlock get start => expression.start; 2737 HBasicBlock get start => expression.start;
2736 HBasicBlock get end { 2738 HBasicBlock get end {
2737 // We don't create a switch block if there are no cases. 2739 // We don't create a switch block if there are no cases.
2738 assert(!statements.isEmpty); 2740 assert(!statements.isEmpty);
2739 return statements.last.end; 2741 return statements.last.end;
2740 } 2742 }
2741 2743
2742 bool accept(HStatementInformationVisitor visitor) => 2744 bool accept(HStatementInformationVisitor visitor) =>
2743 visitor.visitSwitchInfo(this); 2745 visitor.visitSwitchInfo(this);
2744 } 2746 }
2747
2748 class HReadTypeVariable extends HInstruction {
2749 /// The type variable being read.
2750 final TypeVariableType dartType;
2751
2752 final bool hasReceiver;
2753
2754 HReadTypeVariable(this.dartType, HInstruction receiver)
2755 : hasReceiver = true,
2756 super(<HInstruction>[receiver]);
2757
2758 HReadTypeVariable.noReceiver(this.dartType, HInstruction typeArguments)
2759 : hasReceiver = false,
2760 super(<HInstruction>[typeArguments]);
2761
2762 accept(HVisitor visitor) => visitor.visitReadTypeVariable(this);
2763 }
2764
2765 class HFunctionType extends HInstruction {
2766 final FunctionType dartType;
2767
2768 HFunctionType(List<HInstruction> typeVariables, this.dartType)
2769 : super(typeVariables) {
2770 /* Element */ sourceElement = null;
2771 /* SourceFileLocation */ sourcePosition = null;
2772 }
2773
2774 accept(HVisitor visitor) => visitor.visitFunctionType(this);
2775 }
OLDNEW
« no previous file with comments | « dart/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart ('k') | dart/sdk/lib/_internal/lib/collection_dev_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698