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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend.dart

Issue 1325843003: Add optional message to assert in Dart2js. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments Created 5 years, 3 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 js_backend; 5 part of js_backend;
6 6
7 const VERBOSE_OPTIMIZER_HINTS = false; 7 const VERBOSE_OPTIMIZER_HINTS = false;
8 8
9 class JavaScriptItemCompilationContext extends ItemCompilationContext { 9 class JavaScriptItemCompilationContext extends ItemCompilationContext {
10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>();
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 FunctionInlineCache inlineCache = new FunctionInlineCache(); 273 FunctionInlineCache inlineCache = new FunctionInlineCache();
274 274
275 LibraryElement jsHelperLibrary; 275 LibraryElement jsHelperLibrary;
276 LibraryElement asyncLibrary; 276 LibraryElement asyncLibrary;
277 LibraryElement interceptorsLibrary; 277 LibraryElement interceptorsLibrary;
278 LibraryElement foreignLibrary; 278 LibraryElement foreignLibrary;
279 LibraryElement isolateHelperLibrary; 279 LibraryElement isolateHelperLibrary;
280 280
281 ClassElement closureClass; 281 ClassElement closureClass;
282 ClassElement boundClosureClass; 282 ClassElement boundClosureClass;
283 Element assertMethod; 283 Element assertConditionHelperMethod;
284 Element assertThrowMethod;
284 Element invokeOnMethod; 285 Element invokeOnMethod;
285 286
286 ClassElement jsInterceptorClass; 287 ClassElement jsInterceptorClass;
287 ClassElement jsStringClass; 288 ClassElement jsStringClass;
288 ClassElement jsArrayClass; 289 ClassElement jsArrayClass;
289 ClassElement jsNumberClass; 290 ClassElement jsNumberClass;
290 ClassElement jsIntClass; 291 ClassElement jsIntClass;
291 ClassElement jsDoubleClass; 292 ClassElement jsDoubleClass;
292 ClassElement jsNullClass; 293 ClassElement jsNullClass;
293 ClassElement jsBoolClass; 294 ClassElement jsBoolClass;
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 Element element = find(isolateHelperLibrary, name); 1326 Element element = find(isolateHelperLibrary, name);
1326 enqueuer.addToWorkList(element); 1327 enqueuer.addToWorkList(element);
1327 compiler.globalDependencies.registerDependency(element); 1328 compiler.globalDependencies.registerDependency(element);
1328 helpersUsed.add(element.declaration); 1329 helpersUsed.add(element.declaration);
1329 } 1330 }
1330 } else { 1331 } else {
1331 enqueuer.addToWorkList(find(isolateHelperLibrary, START_ROOT_ISOLATE)); 1332 enqueuer.addToWorkList(find(isolateHelperLibrary, START_ROOT_ISOLATE));
1332 } 1333 }
1333 } 1334 }
1334 1335
1335 bool isAssertMethod(Element element) => element == assertMethod;
1336
1337 void registerRequiredType(DartType type, Element enclosingElement) { 1336 void registerRequiredType(DartType type, Element enclosingElement) {
1338 // If [argument] has type variables or is a type variable, this method 1337 // If [argument] has type variables or is a type variable, this method
1339 // registers a RTI dependency between the class where the type variable is 1338 // registers a RTI dependency between the class where the type variable is
1340 // defined (that is the enclosing class of the current element being 1339 // defined (that is the enclosing class of the current element being
1341 // resolved) and the class of [type]. If the class of [type] requires RTI, 1340 // resolved) and the class of [type]. If the class of [type] requires RTI,
1342 // then the class of the type variable does too. 1341 // then the class of the type variable does too.
1343 ClassElement contextClass = Types.getClassContext(type); 1342 ClassElement contextClass = Types.getClassContext(type);
1344 if (contextClass != null) { 1343 if (contextClass != null) {
1345 assert(contextClass == enclosingElement.enclosingClass.declaration); 1344 assert(contextClass == enclosingElement.enclosingClass.declaration);
1346 rti.registerRtiDependency(type.element, contextClass); 1345 rti.registerRtiDependency(type.element, contextClass);
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
2101 jsMutableArrayClass = findClass('JSMutableArray'); 2100 jsMutableArrayClass = findClass('JSMutableArray');
2102 jsFixedArrayClass = findClass('JSFixedArray'); 2101 jsFixedArrayClass = findClass('JSFixedArray');
2103 jsExtendableArrayClass = findClass('JSExtendableArray'); 2102 jsExtendableArrayClass = findClass('JSExtendableArray');
2104 jsUnmodifiableArrayClass = findClass('JSUnmodifiableArray'); 2103 jsUnmodifiableArrayClass = findClass('JSUnmodifiableArray');
2105 jsPlainJavaScriptObjectClass = findClass('PlainJavaScriptObject'); 2104 jsPlainJavaScriptObjectClass = findClass('PlainJavaScriptObject');
2106 jsUnknownJavaScriptObjectClass = findClass('UnknownJavaScriptObject'); 2105 jsUnknownJavaScriptObjectClass = findClass('UnknownJavaScriptObject');
2107 jsIndexableClass = findClass('JSIndexable'); 2106 jsIndexableClass = findClass('JSIndexable');
2108 jsMutableIndexableClass = findClass('JSMutableIndexable'); 2107 jsMutableIndexableClass = findClass('JSMutableIndexable');
2109 } else if (uri == DART_JS_HELPER) { 2108 } else if (uri == DART_JS_HELPER) {
2110 initializeHelperClasses(); 2109 initializeHelperClasses();
2111 assertMethod = findHelper('assertHelper'); 2110 assertConditionHelperMethod = findHelper('assertConditionHelper');
2111 assertThrowMethod = findHelper('assertThrowHelper');
sra1 2015/09/03 18:31:18 I would expect that you need to add declarations f
Lasse Reichstein Nielsen 2015/09/09 12:02:45 Done.
2112 2112
2113 typeLiteralClass = findClass('TypeImpl'); 2113 typeLiteralClass = findClass('TypeImpl');
2114 constMapLiteralClass = findClass('ConstantMap'); 2114 constMapLiteralClass = findClass('ConstantMap');
2115 typeVariableClass = findClass('TypeVariable'); 2115 typeVariableClass = findClass('TypeVariable');
2116 2116
2117 jsIndexingBehaviorInterface = findClass('JavaScriptIndexingBehavior'); 2117 jsIndexingBehaviorInterface = findClass('JavaScriptIndexingBehavior');
2118 2118
2119 noSideEffectsClass = findClass('NoSideEffects'); 2119 noSideEffectsClass = findClass('NoSideEffects');
2120 noThrowsClass = findClass('NoThrows'); 2120 noThrowsClass = findClass('NoThrows');
2121 noInlineClass = findClass('NoInline'); 2121 noInlineClass = findClass('NoInline');
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
2881 void registerBackendStaticInvocation(Element element, Registry registry) { 2881 void registerBackendStaticInvocation(Element element, Registry registry) {
2882 registry.registerStaticInvocation(backend.registerBackendUse(element)); 2882 registry.registerStaticInvocation(backend.registerBackendUse(element));
2883 } 2883 }
2884 2884
2885 void registerBackendInstantiation(ClassElement element, Registry registry) { 2885 void registerBackendInstantiation(ClassElement element, Registry registry) {
2886 backend.registerBackendUse(element); 2886 backend.registerBackendUse(element);
2887 element.ensureResolved(backend.compiler); 2887 element.ensureResolved(backend.compiler);
2888 registry.registerInstantiation(element.rawType); 2888 registry.registerInstantiation(element.rawType);
2889 } 2889 }
2890 2890
2891 void onAssert(Send node, Registry registry) { 2891 void onAssert(Registry registry) {
2892 registerBackendStaticInvocation(backend.assertMethod, registry); 2892 registerBackendStaticInvocation(backend.assertConditionHelperMethod,
2893 registry);
2894 registerBackendStaticInvocation(backend.assertThrowMethod,
2895 registry);
2893 } 2896 }
2894 2897
2895 void onAsyncForIn(AsyncForIn node, Registry registry) { 2898 void onAsyncForIn(AsyncForIn node, Registry registry) {
2896 registerBackendStaticInvocation(backend.getStreamIteratorConstructor(), 2899 registerBackendStaticInvocation(backend.getStreamIteratorConstructor(),
2897 registry); 2900 registry);
2898 } 2901 }
2899 2902
2900 void onStringInterpolation(Registry registry) { 2903 void onStringInterpolation(Registry registry) {
2901 assert(registry.isForResolution); 2904 assert(registry.isForResolution);
2902 registerBackendStaticInvocation( 2905 registerBackendStaticInvocation(
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
3090 } 3093 }
3091 } 3094 }
3092 3095
3093 /// Records that [constant] is used by the element behind [registry]. 3096 /// Records that [constant] is used by the element behind [registry].
3094 class Dependency { 3097 class Dependency {
3095 final ConstantValue constant; 3098 final ConstantValue constant;
3096 final Element annotatedElement; 3099 final Element annotatedElement;
3097 3100
3098 const Dependency(this.constant, this.annotatedElement); 3101 const Dependency(this.constant, this.annotatedElement);
3099 } 3102 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698