| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.js_emitter; | 5 part of dart2js.js_emitter; |
| 6 | 6 |
| 7 | 7 |
| 8 class OldEmitter implements Emitter { | 8 class OldEmitter implements Emitter { |
| 9 final Compiler compiler; | 9 final Compiler compiler; |
| 10 final CodeEmitterTask task; | 10 final CodeEmitterTask task; |
| 11 | 11 |
| 12 final ContainerBuilder containerBuilder = new ContainerBuilder(); | 12 final ContainerBuilder containerBuilder = new ContainerBuilder(); |
| 13 final ClassEmitter classEmitter = new ClassEmitter(); | 13 final ClassEmitter classEmitter = new ClassEmitter(); |
| 14 final NsmEmitter nsmEmitter = new NsmEmitter(); | 14 final NsmEmitter nsmEmitter = new NsmEmitter(); |
| 15 final TypeTestEmitter typeTestEmitter = new TypeTestEmitter(); | |
| 16 final InterceptorEmitter interceptorEmitter = new InterceptorEmitter(); | 15 final InterceptorEmitter interceptorEmitter = new InterceptorEmitter(); |
| 17 final MetadataEmitter metadataEmitter = new MetadataEmitter(); | 16 final MetadataEmitter metadataEmitter = new MetadataEmitter(); |
| 18 | 17 |
| 19 // TODO(johnniwinther): Wrap these fields in a caching strategy. | 18 // TODO(johnniwinther): Wrap these fields in a caching strategy. |
| 20 final Set<ConstantValue> cachedEmittedConstants; | 19 final Set<ConstantValue> cachedEmittedConstants; |
| 21 final CodeBuffer cachedEmittedConstantsBuffer = new CodeBuffer(); | 20 final CodeBuffer cachedEmittedConstantsBuffer = new CodeBuffer(); |
| 22 final Map<Element, ClassBuilder> cachedClassBuilders; | 21 final Map<Element, ClassBuilder> cachedClassBuilders; |
| 23 final Set<Element> cachedElements; | 22 final Set<Element> cachedElements; |
| 24 | 23 |
| 25 bool needsClassSupport = false; | 24 bool needsClassSupport = false; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 : this.compiler = compiler, | 98 : this.compiler = compiler, |
| 100 this.namer = namer, | 99 this.namer = namer, |
| 101 cachedEmittedConstants = compiler.cacheStrategy.newSet(), | 100 cachedEmittedConstants = compiler.cacheStrategy.newSet(), |
| 102 cachedClassBuilders = compiler.cacheStrategy.newMap(), | 101 cachedClassBuilders = compiler.cacheStrategy.newMap(), |
| 103 cachedElements = compiler.cacheStrategy.newSet() { | 102 cachedElements = compiler.cacheStrategy.newSet() { |
| 104 constantEmitter = | 103 constantEmitter = |
| 105 new ConstantEmitter(compiler, namer, makeConstantListTemplate); | 104 new ConstantEmitter(compiler, namer, makeConstantListTemplate); |
| 106 containerBuilder.emitter = this; | 105 containerBuilder.emitter = this; |
| 107 classEmitter.emitter = this; | 106 classEmitter.emitter = this; |
| 108 nsmEmitter.emitter = this; | 107 nsmEmitter.emitter = this; |
| 109 typeTestEmitter.emitter = this; | |
| 110 interceptorEmitter.emitter = this; | 108 interceptorEmitter.emitter = this; |
| 111 metadataEmitter.emitter = this; | 109 metadataEmitter.emitter = this; |
| 112 } | 110 } |
| 113 | 111 |
| 114 List<jsAst.Node> cspPrecompiledFunctionFor(OutputUnit outputUnit) { | 112 List<jsAst.Node> cspPrecompiledFunctionFor(OutputUnit outputUnit) { |
| 115 return _cspPrecompiledFunctions.putIfAbsent( | 113 return _cspPrecompiledFunctions.putIfAbsent( |
| 116 outputUnit, | 114 outputUnit, |
| 117 () => new List<jsAst.Node>()); | 115 () => new List<jsAst.Node>()); |
| 118 } | 116 } |
| 119 | 117 |
| (...skipping 1668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1788 nativeEmitter.generateNativeClasses(program.nativeClasses, | 1786 nativeEmitter.generateNativeClasses(program.nativeClasses, |
| 1789 additionalProperties); | 1787 additionalProperties); |
| 1790 | 1788 |
| 1791 nativeEmitter.finishGenerateNativeClasses(); | 1789 nativeEmitter.finishGenerateNativeClasses(); |
| 1792 nativeEmitter.assembleCode(nativeBuffer); | 1790 nativeEmitter.assembleCode(nativeBuffer); |
| 1793 | 1791 |
| 1794 return nativeBuffer; | 1792 return nativeBuffer; |
| 1795 } | 1793 } |
| 1796 | 1794 |
| 1797 int emitProgram(ProgramBuilder programBuilder) { | 1795 int emitProgram(ProgramBuilder programBuilder) { |
| 1798 Program program = programBuilder.buildProgram(); | 1796 Program program = programBuilder.buildProgram( |
| 1797 storeFunctionTypesInMetadata: true); |
| 1799 | 1798 |
| 1800 // Shorten the code by using [namer.currentIsolate] as temporary. | 1799 // Shorten the code by using [namer.currentIsolate] as temporary. |
| 1801 isolateProperties = namer.currentIsolate; | 1800 isolateProperties = namer.currentIsolate; |
| 1802 | 1801 |
| 1803 // Emit deferred units first, so we have their hashes. | 1802 // Emit deferred units first, so we have their hashes. |
| 1804 // Map from OutputUnit to a hash of its content. The hash uniquely | 1803 // Map from OutputUnit to a hash of its content. The hash uniquely |
| 1805 // identifies the code of the output-unit. It does not include | 1804 // identifies the code of the output-unit. It does not include |
| 1806 // boilerplate JS code, like the sourcemap directives or the hash | 1805 // boilerplate JS code, like the sourcemap directives or the hash |
| 1807 // itself. | 1806 // itself. |
| 1808 Map<OutputUnit, String> deferredLoadHashes = | 1807 Map<OutputUnit, String> deferredLoadHashes = |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2101 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { | 2100 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { |
| 2102 if (element.isInstanceMember) { | 2101 if (element.isInstanceMember) { |
| 2103 cachedClassBuilders.remove(element.enclosingClass); | 2102 cachedClassBuilders.remove(element.enclosingClass); |
| 2104 | 2103 |
| 2105 nativeEmitter.cachedBuilders.remove(element.enclosingClass); | 2104 nativeEmitter.cachedBuilders.remove(element.enclosingClass); |
| 2106 | 2105 |
| 2107 } | 2106 } |
| 2108 } | 2107 } |
| 2109 } | 2108 } |
| 2110 } | 2109 } |
| OLD | NEW |