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