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

Side by Side Diff: dart/lib/compiler/implementation/compiler.dart

Issue 10855125: Ensure supertypes are loaded safely. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: More cleanup of ClassElement.cloneMembersTo Created 8 years, 4 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 | 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 5
6 /** 6 /**
7 * If true, print a warning for each method that was resolved, but not 7 * If true, print a warning for each method that was resolved, but not
8 * compiled. 8 * compiled.
9 */ 9 */
10 final bool REPORT_EXCESS_RESOLUTION = false; 10 final bool REPORT_EXCESS_RESOLUTION = false;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 Stopwatch progress; 141 Stopwatch progress;
142 142
143 static final int PHASE_SCANNING = 0; 143 static final int PHASE_SCANNING = 0;
144 static final int PHASE_RESOLVING = 1; 144 static final int PHASE_RESOLVING = 1;
145 static final int PHASE_COMPILING = 2; 145 static final int PHASE_COMPILING = 2;
146 static final int PHASE_RECOMPILING = 3; 146 static final int PHASE_RECOMPILING = 3;
147 int phase; 147 int phase;
148 148
149 bool compilationFailed = false; 149 bool compilationFailed = false;
150 150
151 bool hasCrashed = false;
152
151 Compiler([this.tracer = const Tracer(), 153 Compiler([this.tracer = const Tracer(),
152 this.enableTypeAssertions = false, 154 this.enableTypeAssertions = false,
153 this.enableUserAssertions = false, 155 this.enableUserAssertions = false,
154 bool emitJavascript = true, 156 bool emitJavascript = true,
155 validateUnparse = false, 157 validateUnparse = false,
156 generateSourceMap = true]) 158 generateSourceMap = true])
157 : libraries = new Map<String, LibraryElement>(), 159 : libraries = new Map<String, LibraryElement>(),
158 world = new World(), 160 world = new World(),
159 progress = new Stopwatch.start() { 161 progress = new Stopwatch.start() {
160 namer = new Namer(this); 162 namer = new Namer(this);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 [Node node, Token token, HInstruction instruction, 198 [Node node, Token token, HInstruction instruction,
197 Element element]) { 199 Element element]) {
198 cancel('Internal error: $message', node, token, instruction, element); 200 cancel('Internal error: $message', node, token, instruction, element);
199 } 201 }
200 202
201 void internalErrorOnElement(Element element, String message) { 203 void internalErrorOnElement(Element element, String message) {
202 internalError(message, element: element); 204 internalError(message, element: element);
203 } 205 }
204 206
205 void unhandledExceptionOnElement(Element element) { 207 void unhandledExceptionOnElement(Element element) {
208 if (hasCrashed) return;
209 hasCrashed = true;
206 reportDiagnostic(spanFromElement(element), 210 reportDiagnostic(spanFromElement(element),
207 MessageKind.COMPILER_CRASHED.error().toString(), 211 MessageKind.COMPILER_CRASHED.error().toString(),
208 api.Diagnostic.CRASH); 212 api.Diagnostic.CRASH);
209 // TODO(ahe): Obtain the build ID. 213 // TODO(ahe): Obtain the build ID.
210 var buildId = 'build number could not be determined'; 214 var buildId = 'build number could not be determined';
211 print(MessageKind.PLEASE_REPORT_THE_CRASH.message([buildId])); 215 print(MessageKind.PLEASE_REPORT_THE_CRASH.message([buildId]));
212 } 216 }
213 217
214 void cancel([String reason, Node node, Token token, 218 void cancel([String reason, Node node, Token token,
215 HInstruction instruction, Element element]) { 219 HInstruction instruction, Element element]) {
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 codegenWorld.addGeneratedCode(work, codeBuffer); 762 codegenWorld.addGeneratedCode(work, codeBuffer);
759 return codeBuffer.toString(); 763 return codeBuffer.toString();
760 } 764 }
761 } 765 }
762 766
763 void registerInstantiatedClass(ClassElement cls) { 767 void registerInstantiatedClass(ClassElement cls) {
764 enqueuer.resolution.registerInstantiatedClass(cls); 768 enqueuer.resolution.registerInstantiatedClass(cls);
765 enqueuer.codegen.registerInstantiatedClass(cls); 769 enqueuer.codegen.registerInstantiatedClass(cls);
766 } 770 }
767 771
768 void resolveClass(ClassElement element) {
769 withCurrentElement(element, () => resolver.resolveClass(element));
770 }
771
772 Type resolveTypeAnnotation(Element element, TypeAnnotation annotation) { 772 Type resolveTypeAnnotation(Element element, TypeAnnotation annotation) {
773 return resolver.resolveTypeAnnotation(element, annotation); 773 return resolver.resolveTypeAnnotation(element, annotation);
774 } 774 }
775 775
776 FunctionSignature resolveSignature(FunctionElement element) { 776 FunctionSignature resolveSignature(FunctionElement element) {
777 return withCurrentElement(element, 777 return withCurrentElement(element,
778 () => resolver.resolveSignature(element)); 778 () => resolver.resolveSignature(element));
779 } 779 }
780 780
781 FunctionSignature resolveFunctionExpression(Element element, 781 FunctionSignature resolveFunctionExpression(Element element,
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 final endOffset = end.charOffset + end.slowCharCount; 948 final endOffset = end.charOffset + end.slowCharCount;
949 949
950 // [begin] and [end] might be the same for the same empty token. This 950 // [begin] and [end] might be the same for the same empty token. This
951 // happens for instance when scanning '$$'. 951 // happens for instance when scanning '$$'.
952 assert(endOffset >= beginOffset); 952 assert(endOffset >= beginOffset);
953 return f(beginOffset, endOffset); 953 return f(beginOffset, endOffset);
954 } 954 }
955 955
956 String toString() => 'SourceSpan($uri, $begin, $end)'; 956 String toString() => 'SourceSpan($uri, $begin, $end)';
957 } 957 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698