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

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

Issue 363223003: Revert "Emit declarations for typedefs that are needed by reflection." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 assert(_membersNeededForReflection != null); 319 assert(_membersNeededForReflection != null);
320 return _membersNeededForReflection; 320 return _membersNeededForReflection;
321 } 321 }
322 322
323 /// List of symbols that the user has requested for reflection. 323 /// List of symbols that the user has requested for reflection.
324 final Set<String> symbolsUsed = new Set<String>(); 324 final Set<String> symbolsUsed = new Set<String>();
325 325
326 /// List of elements that the backend may use. 326 /// List of elements that the backend may use.
327 final Set<Element> helpersUsed = new Set<Element>(); 327 final Set<Element> helpersUsed = new Set<Element>();
328 328
329 /// Set of typedefs that are used as type literals.
330 final Set<TypedefElement> typedefTypeLiterals = new Set<TypedefElement>();
331
329 /// All the checked mode helpers. 332 /// All the checked mode helpers.
330 static const checkedModeHelpers = CheckedModeHelper.helpers; 333 static const checkedModeHelpers = CheckedModeHelper.helpers;
331 334
332 // Checked mode helpers indexed by name. 335 // Checked mode helpers indexed by name.
333 Map<String, CheckedModeHelper> checkedModeHelperByName = 336 Map<String, CheckedModeHelper> checkedModeHelperByName =
334 new Map<String, CheckedModeHelper>.fromIterable( 337 new Map<String, CheckedModeHelper>.fromIterable(
335 checkedModeHelpers, 338 checkedModeHelpers,
336 key: (helper) => helper.name); 339 key: (helper) => helper.name);
337 340
338 TypeVariableHandler typeVariableHandler; 341 TypeVariableHandler typeVariableHandler;
(...skipping 1561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1900 reflectableMembers.add(closure); 1903 reflectableMembers.add(closure);
1901 foundClosure = true; 1904 foundClosure = true;
1902 } 1905 }
1903 } 1906 }
1904 } 1907 }
1905 // As we do not think about closures as classes, yet, we have to make sure 1908 // As we do not think about closures as classes, yet, we have to make sure
1906 // their superclasses are available for reflection manually. 1909 // their superclasses are available for reflection manually.
1907 if (foundClosure) { 1910 if (foundClosure) {
1908 reflectableMembers.add(closureClass); 1911 reflectableMembers.add(closureClass);
1909 } 1912 }
1913 // It would be nice to have a better means to select
1910 Set<Element> closurizedMembers = compiler.resolverWorld.closurizedMembers; 1914 Set<Element> closurizedMembers = compiler.resolverWorld.closurizedMembers;
1911 if (closurizedMembers.any(reflectableMembers.contains)) { 1915 if (closurizedMembers.any(reflectableMembers.contains)) {
1912 reflectableMembers.add(boundClosureClass); 1916 reflectableMembers.add(boundClosureClass);
1913 } 1917 }
1914 // Add typedefs.
1915 reflectableMembers
1916 .addAll(compiler.world.allTypedefs.where(referencedFromMirrorSystem));
1917 // Register all symbols of reflectable elements 1918 // Register all symbols of reflectable elements
1918 for (Element element in reflectableMembers) { 1919 for (Element element in reflectableMembers) {
1919 symbolsUsed.add(element.name); 1920 symbolsUsed.add(element.name);
1920 } 1921 }
1921 _membersNeededForReflection = reflectableMembers; 1922 _membersNeededForReflection = reflectableMembers;
1922 } 1923 }
1923 1924
1924 jsAst.Call generateIsJsIndexableCall(jsAst.Expression use1, 1925 jsAst.Call generateIsJsIndexableCall(jsAst.Expression use1,
1925 jsAst.Expression use2) { 1926 jsAst.Expression use2) {
1926 String dispatchPropertyName = 'init.dispatchPropertyName'; 1927 String dispatchPropertyName = 'init.dispatchPropertyName';
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
2127 } 2128 }
2128 2129
2129 void onTypeLiteral(DartType type, Registry registry) { 2130 void onTypeLiteral(DartType type, Registry registry) {
2130 assert(registry.isForResolution); 2131 assert(registry.isForResolution);
2131 registerBackendInstantiation(backend.typeImplementation, registry); 2132 registerBackendInstantiation(backend.typeImplementation, registry);
2132 registerBackendStaticInvocation(backend.getCreateRuntimeType(), registry); 2133 registerBackendStaticInvocation(backend.getCreateRuntimeType(), registry);
2133 // TODO(ahe): Might want to register [element] as an instantiated class 2134 // TODO(ahe): Might want to register [element] as an instantiated class
2134 // when reflection is used. However, as long as we disable tree-shaking 2135 // when reflection is used. However, as long as we disable tree-shaking
2135 // eagerly it doesn't matter. 2136 // eagerly it doesn't matter.
2136 if (type.isTypedef) { 2137 if (type.isTypedef) {
2137 backend.compiler.world.allTypedefs.add(type.element); 2138 backend.typedefTypeLiterals.add(type.element);
2138 } 2139 }
2139 backend.customElementsAnalysis.registerTypeLiteral(type, registry); 2140 backend.customElementsAnalysis.registerTypeLiteral(type, registry);
2140 } 2141 }
2141 2142
2142 void onStackTraceInCatch(Registry registry) { 2143 void onStackTraceInCatch(Registry registry) {
2143 assert(registry.isForResolution); 2144 assert(registry.isForResolution);
2144 registerBackendStaticInvocation(backend.getTraceFromException(), registry); 2145 registerBackendStaticInvocation(backend.getTraceFromException(), registry);
2145 } 2146 }
2146 2147
2147 2148
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2274 } 2275 }
2275 2276
2276 /// Records that [constant] is used by the element behind [registry]. 2277 /// Records that [constant] is used by the element behind [registry].
2277 class Dependency { 2278 class Dependency {
2278 final Constant constant; 2279 final Constant constant;
2279 // TODO(johnniwinther): Change to [Element] when dependency nodes are added. 2280 // TODO(johnniwinther): Change to [Element] when dependency nodes are added.
2280 final Registry registry; 2281 final Registry registry;
2281 2282
2282 const Dependency(this.constant, this.registry); 2283 const Dependency(this.constant, this.registry);
2283 } 2284 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698