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

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

Issue 22835003: Put constants in 'C', not '$'. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 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 /** 7 /**
8 * A function element that represents a closure call. The signature is copied 8 * A function element that represents a closure call. The signature is copied
9 * from the given element. 9 * from the given element.
10 */ 10 */
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 // for (var staticName in isolateProperties) { 872 // for (var staticName in isolateProperties) {
873 js.forIn('staticName', 'isolateProperties', [ 873 js.forIn('staticName', 'isolateProperties', [
874 js.if_('hasOwnProperty.call(isolateProperties, staticName)', [ 874 js.if_('hasOwnProperty.call(isolateProperties, staticName)', [
875 js('str += ("this." + staticName + "= properties." + staticName + ' 875 js('str += ("this." + staticName + "= properties." + staticName + '
876 '";\\n")') 876 '";\\n")')
877 ]) 877 ])
878 ]), 878 ]),
879 879
880 js('str += "}\\n"'), 880 js('str += "}\\n"'),
881 881
882 js('var Constants = #', js.fun('', [])),
883 // Install 'C' as a prototype to ensure it has a hidden class.
884 js('Constants.prototype = ${namer.globalObjectForConstant(null)}'),
885
882 js('var newIsolate = new Function(str)'), 886 js('var newIsolate = new Function(str)'),
883 js('newIsolate.prototype = isolatePrototype'), 887 js('newIsolate.prototype = isolatePrototype'),
884 js('isolatePrototype.constructor = newIsolate'), 888 js('isolatePrototype.constructor = newIsolate'),
885 js('newIsolate.${namer.isolatePropertiesName} = isolateProperties'), 889 js('newIsolate.${namer.isolatePropertiesName} = isolateProperties'),
886 // TODO(ahe): Only copy makeConstantList when it is used. 890 // TODO(ahe): Only copy makeConstantList when it is used.
887 js('newIsolate.makeConstantList = oldIsolate.makeConstantList'), 891 js('newIsolate.makeConstantList = oldIsolate.makeConstantList'),
888 ]..addAll(copyFinishClasses) 892 ]..addAll(copyFinishClasses)
889 ..addAll([ 893 ..addAll([
890 894
891 // return newIsolate; 895 // return newIsolate;
(...skipping 1784 matching lines...) Expand 10 before | Expand all | Expand 10 after
2676 jsAst.Expression buildLazyInitializedGetter(VariableElement element) { 2680 jsAst.Expression buildLazyInitializedGetter(VariableElement element) {
2677 // Nothing to do, the 'lazy' function will create the getter. 2681 // Nothing to do, the 'lazy' function will create the getter.
2678 return null; 2682 return null;
2679 } 2683 }
2680 2684
2681 void emitCompileTimeConstants(CodeBuffer eagerBuffer) { 2685 void emitCompileTimeConstants(CodeBuffer eagerBuffer) {
2682 ConstantHandler handler = compiler.constantHandler; 2686 ConstantHandler handler = compiler.constantHandler;
2683 List<Constant> constants = handler.getConstantsForEmission( 2687 List<Constant> constants = handler.getConstantsForEmission(
2684 compareConstants); 2688 compareConstants);
2685 bool addedMakeConstantList = false; 2689 bool addedMakeConstantList = false;
2690 eagerBuffer.write('var ${namer.globalObjectForConstant(null)}$_=$_{}$N');
2686 for (Constant constant in constants) { 2691 for (Constant constant in constants) {
2687 if (isConstantInlinedOrAlreadyEmitted(constant)) continue; 2692 if (isConstantInlinedOrAlreadyEmitted(constant)) continue;
2688 String name = namer.constantName(constant); 2693 String name = namer.constantName(constant);
2689 if (!addedMakeConstantList && constant.isList()) { 2694 if (!addedMakeConstantList && constant.isList()) {
2690 addedMakeConstantList = true; 2695 addedMakeConstantList = true;
2691 emitMakeConstantList(eagerBuffer); 2696 emitMakeConstantList(eagerBuffer);
2692 } 2697 }
2693 CodeBuffer buffer = bufferForConstant(constant, eagerBuffer); 2698 CodeBuffer buffer = bufferForConstant(constant, eagerBuffer);
2694 jsAst.Expression init = js('$isolateProperties.$name = #', 2699 jsAst.Expression init = js(
2700 '${namer.globalObjectForConstant(constant)}.$name = #',
2695 constantInitializerExpression(constant)); 2701 constantInitializerExpression(constant));
2696 buffer.write(jsAst.prettyPrint(init, compiler)); 2702 buffer.write(jsAst.prettyPrint(init, compiler));
2697 buffer.write('$N'); 2703 buffer.write('$N');
2698 } 2704 }
2699 } 2705 }
2700 2706
2701 bool isConstantInlinedOrAlreadyEmitted(Constant constant) { 2707 bool isConstantInlinedOrAlreadyEmitted(Constant constant) {
2702 if (constant.isFunction()) return true; // Already emitted. 2708 if (constant.isFunction()) return true; // Already emitted.
2703 if (constant.isPrimitive()) return true; // Inlined. 2709 if (constant.isPrimitive()) return true; // Inlined.
2704 // The name is null when the constant is already a JS constant. 2710 // The name is null when the constant is already a JS constant.
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after
4064 4070
4065 const String HOOKS_API_USAGE = """ 4071 const String HOOKS_API_USAGE = """
4066 // The code supports the following hooks: 4072 // The code supports the following hooks:
4067 // dartPrint(message) - if this function is defined it is called 4073 // dartPrint(message) - if this function is defined it is called
4068 // instead of the Dart [print] method. 4074 // instead of the Dart [print] method.
4069 // dartMainRunner(main) - if this function is defined, the Dart [main] 4075 // dartMainRunner(main) - if this function is defined, the Dart [main]
4070 // method will not be invoked directly. 4076 // method will not be invoked directly.
4071 // Instead, a closure that will invoke [main] is 4077 // Instead, a closure that will invoke [main] is
4072 // passed to [dartMainRunner]. 4078 // passed to [dartMainRunner].
4073 """; 4079 """;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698