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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_backend/backend.dart

Issue 350693007: Load patches via callback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 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 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 1583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 for (MetadataAnnotation metadata in element.metadata) { 1594 for (MetadataAnnotation metadata in element.metadata) {
1595 metadata.ensureResolved(compiler); 1595 metadata.ensureResolved(compiler);
1596 Constant constant = constants.getConstantForMetadata(metadata); 1596 Constant constant = constants.getConstantForMetadata(metadata);
1597 constants.addCompileTimeConstantForEmission(constant); 1597 constants.addCompileTimeConstantForEmission(constant);
1598 } 1598 }
1599 return true; 1599 return true;
1600 } 1600 }
1601 return false; 1601 return false;
1602 } 1602 }
1603 1603
1604 void onLibraryScanned(LibraryElement library) { 1604 Future onLibraryScanned(LibraryElement library,
1605 Uri uri = library.canonicalUri; 1605 LibraryLoaderCallback callback) {
1606 return super.onLibraryScanned(library, callback).then((_) {
1607 Uri uri = library.canonicalUri;
1606 1608
1607 // TODO(johnniwinther): Assert that the elements are found. 1609 // TODO(johnniwinther): Assert that the elements are found.
1608 VariableElement findVariable(String name) { 1610 VariableElement findVariable(String name) {
1609 return library.find(name); 1611 return library.find(name);
1610 } 1612 }
1611 1613
1612 FunctionElement findMethod(String name) { 1614 FunctionElement findMethod(String name) {
1613 return library.find(name); 1615 return library.find(name);
1614 } 1616 }
1615 1617
1616 ClassElement findClass(String name) { 1618 ClassElement findClass(String name) {
1617 return library.find(name); 1619 return library.find(name);
1618 } 1620 }
1619 1621
1620 if (uri == Compiler.DART_INTERCEPTORS) { 1622 if (uri == Compiler.DART_INTERCEPTORS) {
1621 getInterceptorMethod = findMethod('getInterceptor'); 1623 getInterceptorMethod = findMethod('getInterceptor');
1622 interceptedNames = findVariable('interceptedNames'); 1624 interceptedNames = findVariable('interceptedNames');
1623 mapTypeToInterceptor = findVariable('mapTypeToInterceptor'); 1625 mapTypeToInterceptor = findVariable('mapTypeToInterceptor');
1624 getNativeInterceptorMethod = findMethod('getNativeInterceptor'); 1626 getNativeInterceptorMethod = findMethod('getNativeInterceptor');
1625 1627
1626 List<ClassElement> classes = [ 1628 List<ClassElement> classes = [
1627 jsInterceptorClass = findClass('Interceptor'), 1629 jsInterceptorClass = findClass('Interceptor'),
1628 jsStringClass = findClass('JSString'), 1630 jsStringClass = findClass('JSString'),
1629 jsArrayClass = findClass('JSArray'), 1631 jsArrayClass = findClass('JSArray'),
1630 // The int class must be before the double class, because the 1632 // The int class must be before the double class, because the
1631 // emitter relies on this list for the order of type checks. 1633 // emitter relies on this list for the order of type checks.
1632 jsIntClass = findClass('JSInt'), 1634 jsIntClass = findClass('JSInt'),
1633 jsPositiveIntClass = findClass('JSPositiveInt'), 1635 jsPositiveIntClass = findClass('JSPositiveInt'),
1634 jsUInt32Class = findClass('JSUInt32'), 1636 jsUInt32Class = findClass('JSUInt32'),
1635 jsUInt31Class = findClass('JSUInt31'), 1637 jsUInt31Class = findClass('JSUInt31'),
1636 jsDoubleClass = findClass('JSDouble'), 1638 jsDoubleClass = findClass('JSDouble'),
1637 jsNumberClass = findClass('JSNumber'), 1639 jsNumberClass = findClass('JSNumber'),
1638 jsNullClass = findClass('JSNull'), 1640 jsNullClass = findClass('JSNull'),
1639 jsBoolClass = findClass('JSBool'), 1641 jsBoolClass = findClass('JSBool'),
1640 jsMutableArrayClass = findClass('JSMutableArray'), 1642 jsMutableArrayClass = findClass('JSMutableArray'),
1641 jsFixedArrayClass = findClass('JSFixedArray'), 1643 jsFixedArrayClass = findClass('JSFixedArray'),
1642 jsExtendableArrayClass = findClass('JSExtendableArray'), 1644 jsExtendableArrayClass = findClass('JSExtendableArray'),
1643 jsPlainJavaScriptObjectClass = findClass('PlainJavaScriptObject'), 1645 jsPlainJavaScriptObjectClass = findClass('PlainJavaScriptObject'),
1644 jsUnknownJavaScriptObjectClass = findClass('UnknownJavaScriptObject'), 1646 jsUnknownJavaScriptObjectClass = findClass('UnknownJavaScriptObject'),
1645 ]; 1647 ];
1646 1648
1647 jsIndexableClass = findClass('JSIndexable'); 1649 jsIndexableClass = findClass('JSIndexable');
1648 jsMutableIndexableClass = findClass('JSMutableIndexable'); 1650 jsMutableIndexableClass = findClass('JSMutableIndexable');
1649 } else if (uri == Compiler.DART_JS_HELPER) { 1651 } else if (uri == Compiler.DART_JS_HELPER) {
1650 typeLiteralClass = findClass('TypeImpl'); 1652 typeLiteralClass = findClass('TypeImpl');
1651 constMapLiteralClass = findClass('ConstantMap'); 1653 constMapLiteralClass = findClass('ConstantMap');
1652 typeVariableClass = findClass('TypeVariable'); 1654 typeVariableClass = findClass('TypeVariable');
1653 1655
1654 jsIndexingBehaviorInterface = findClass('JavaScriptIndexingBehavior'); 1656 jsIndexingBehaviorInterface = findClass('JavaScriptIndexingBehavior');
1655 1657
1656 noSideEffectsClass = findClass('NoSideEffects'); 1658 noSideEffectsClass = findClass('NoSideEffects');
1657 noThrowsClass = findClass('NoThrows'); 1659 noThrowsClass = findClass('NoThrows');
1658 noInlineClass = findClass('NoInline'); 1660 noInlineClass = findClass('NoInline');
1659 irRepresentationClass = findClass('IrRepresentation'); 1661 irRepresentationClass = findClass('IrRepresentation');
1660 } else if (uri == DART_JS_MIRRORS) { 1662 } else if (uri == DART_JS_MIRRORS) {
1661 disableTreeShakingMarker = library.find('disableTreeShaking'); 1663 disableTreeShakingMarker = library.find('disableTreeShaking');
1662 preserveMetadataMarker = library.find('preserveMetadata'); 1664 preserveMetadataMarker = library.find('preserveMetadata');
1663 } else if (uri == DART_JS_NAMES) { 1665 } else if (uri == DART_JS_NAMES) {
1664 preserveNamesMarker = library.find('preserveNames'); 1666 preserveNamesMarker = library.find('preserveNames');
1665 } else if (uri == Compiler.DART_JS_HELPER) { 1667 } else if (uri == Compiler.DART_JS_HELPER) {
1666 getIsolateAffinityTagMarker = library.find('getIsolateAffinityTag'); 1668 getIsolateAffinityTagMarker = library.find('getIsolateAffinityTag');
1667 } 1669 }
1670 });
1668 } 1671 }
1669 1672
1670 Future onLibrariesLoaded(Map<Uri, LibraryElement> loadedLibraries) { 1673 Future onLibrariesLoaded(Map<Uri, LibraryElement> loadedLibraries) {
1671 if (!loadedLibraries.containsKey(Compiler.DART_CORE)) { 1674 if (!loadedLibraries.containsKey(Compiler.DART_CORE)) {
1672 return new Future.value(); 1675 return new Future.value();
1673 } 1676 }
1674 assert(loadedLibraries.containsKey(Compiler.DART_CORE)); 1677 assert(loadedLibraries.containsKey(Compiler.DART_CORE));
1675 assert(loadedLibraries.containsKey(Compiler.DART_INTERCEPTORS)); 1678 assert(loadedLibraries.containsKey(Compiler.DART_INTERCEPTORS));
1676 assert(loadedLibraries.containsKey(Compiler.DART_JS_HELPER)); 1679 assert(loadedLibraries.containsKey(Compiler.DART_JS_HELPER));
1677 1680
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 } 1991 }
1989 1992
1990 /// Records that [constant] is used by the element behind [registry]. 1993 /// Records that [constant] is used by the element behind [registry].
1991 class Dependency { 1994 class Dependency {
1992 final Constant constant; 1995 final Constant constant;
1993 // TODO(johnniwinther): Change to [Element] when dependency nodes are added. 1996 // TODO(johnniwinther): Change to [Element] when dependency nodes are added.
1994 final Registry registry; 1997 final Registry registry;
1995 1998
1996 const Dependency(this.constant, this.registry); 1999 const Dependency(this.constant, this.registry);
1997 } 2000 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698