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 library dart2js.compiler_base; | 5 library dart2js.compiler_base; |
6 | 6 |
7 import 'dart:async' show EventSink, Future; | 7 import 'dart:async' show EventSink, Future; |
8 | 8 |
9 import '../compiler_new.dart' as api; | 9 import '../compiler_new.dart' as api; |
10 import 'cache_strategy.dart' show CacheStrategy; | 10 import 'cache_strategy.dart' show CacheStrategy; |
(...skipping 1854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1865 } | 1865 } |
1866 assert(invariant(element, hasResolvedAst(element), | 1866 assert(invariant(element, hasResolvedAst(element), |
1867 message: "ResolvedAst not available for $element.")); | 1867 message: "ResolvedAst not available for $element.")); |
1868 return null; | 1868 return null; |
1869 } | 1869 } |
1870 | 1870 |
1871 @override | 1871 @override |
1872 bool hasResolutionImpact(Element element) { | 1872 bool hasResolutionImpact(Element element) { |
1873 assert(invariant(element, element.isDeclaration, | 1873 assert(invariant(element, element.isDeclaration, |
1874 message: "Element $element must be the declaration.")); | 1874 message: "Element $element must be the declaration.")); |
| 1875 if (compiler.serialization.isDeserialized(element)) { |
| 1876 return compiler.serialization.hasResolutionImpact(element); |
| 1877 } |
1875 return _resolutionImpactCache.containsKey(element); | 1878 return _resolutionImpactCache.containsKey(element); |
1876 } | 1879 } |
1877 | 1880 |
1878 @override | 1881 @override |
1879 ResolutionImpact getResolutionImpact(Element element) { | 1882 ResolutionImpact getResolutionImpact(Element element) { |
1880 assert(invariant(element, element.isDeclaration, | 1883 assert(invariant(element, element.isDeclaration, |
1881 message: "Element $element must be the declaration.")); | 1884 message: "Element $element must be the declaration.")); |
1882 ResolutionImpact resolutionImpact = _resolutionImpactCache[element]; | 1885 ResolutionImpact resolutionImpact; |
| 1886 if (compiler.serialization.isDeserialized(element)) { |
| 1887 resolutionImpact = compiler.serialization.getResolutionImpact(element); |
| 1888 } else { |
| 1889 resolutionImpact = _resolutionImpactCache[element]; |
| 1890 } |
1883 assert(invariant(element, resolutionImpact != null, | 1891 assert(invariant(element, resolutionImpact != null, |
1884 message: "ResolutionImpact not available for $element.")); | 1892 message: "ResolutionImpact not available for $element.")); |
1885 return resolutionImpact; | 1893 return resolutionImpact; |
1886 } | 1894 } |
1887 | 1895 |
1888 @override | 1896 @override |
1889 WorldImpact getWorldImpact(Element element) { | 1897 WorldImpact getWorldImpact(Element element) { |
1890 assert(invariant(element, element.isDeclaration, | 1898 assert(invariant(element, element.isDeclaration, |
1891 message: "Element $element must be the declaration.")); | 1899 message: "Element $element must be the declaration.")); |
1892 WorldImpact worldImpact = _worldImpactCache[element]; | 1900 WorldImpact worldImpact = _worldImpactCache[element]; |
1893 assert(invariant(element, worldImpact != null, | 1901 assert(invariant(element, worldImpact != null, |
1894 message: "WorldImpact not computed for $element.")); | 1902 message: "WorldImpact not computed for $element.")); |
1895 return worldImpact; | 1903 return worldImpact; |
1896 } | 1904 } |
1897 | 1905 |
1898 @override | 1906 @override |
1899 WorldImpact computeWorldImpact(Element element) { | 1907 WorldImpact computeWorldImpact(Element element) { |
1900 assert(invariant(element, element.isDeclaration, | 1908 assert(invariant(element, element.isDeclaration, |
1901 message: "Element $element must be the declaration.")); | 1909 message: "Element $element must be the declaration.")); |
1902 return _worldImpactCache.putIfAbsent(element, () { | 1910 return _worldImpactCache.putIfAbsent(element, () { |
1903 assert(compiler.parser != null); | 1911 assert(compiler.parser != null); |
1904 Node tree = compiler.parser.parse(element); | 1912 Node tree = compiler.parser.parse(element); |
1905 assert(invariant(element, !element.isSynthesized || tree == null)); | 1913 assert(invariant(element, !element.isSynthesized || tree == null)); |
1906 ResolutionImpact resolutionImpact = compiler.resolver.resolve(element); | 1914 ResolutionImpact resolutionImpact = compiler.resolver.resolve(element); |
| 1915 |
1907 if (compiler.serialization.supportSerialization || | 1916 if (compiler.serialization.supportSerialization || |
1908 retainCachesForTesting) { | 1917 retainCachesForTesting) { |
1909 // [ResolutionImpact] is currently only used by serialization. The | 1918 // [ResolutionImpact] is currently only used by serialization. The |
1910 // enqueuer uses the [WorldImpact] which is always cached. | 1919 // enqueuer uses the [WorldImpact] which is always cached. |
1911 // TODO(johnniwinther): Align these use cases better; maybe only | 1920 // TODO(johnniwinther): Align these use cases better; maybe only |
1912 // cache [ResolutionImpact] and let the enqueuer transform it into | 1921 // cache [ResolutionImpact] and let the enqueuer transform it into |
1913 // a [WorldImpact]. | 1922 // a [WorldImpact]. |
1914 _resolutionImpactCache[element] = resolutionImpact; | 1923 _resolutionImpactCache[element] = resolutionImpact; |
1915 } | 1924 } |
1916 if (tree != null && !compiler.options.analyzeSignaturesOnly) { | 1925 if (tree != null && !compiler.options.analyzeSignaturesOnly) { |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2028 _ElementScanner(this.scanner); | 2037 _ElementScanner(this.scanner); |
2029 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); | 2038 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); |
2030 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); | 2039 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); |
2031 } | 2040 } |
2032 | 2041 |
2033 class _EmptyEnvironment implements Environment { | 2042 class _EmptyEnvironment implements Environment { |
2034 const _EmptyEnvironment(); | 2043 const _EmptyEnvironment(); |
2035 | 2044 |
2036 String valueOf(String key) => null; | 2045 String valueOf(String key) => null; |
2037 } | 2046 } |
OLD | NEW |