| 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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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 } | 
| OLD | NEW |