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

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

Issue 13704004: dart2js: Use js('source') instead of js['source'] to invoke JS mini-parser (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Go back to js.if_ instead of jsBuilder.if_ Created 7 years, 8 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 class CodeEmitterNoEvalTask extends CodeEmitterTask { 7 class CodeEmitterNoEvalTask extends CodeEmitterTask {
8 CodeEmitterNoEvalTask(Compiler compiler, 8 CodeEmitterNoEvalTask(Compiler compiler,
9 Namer namer, 9 Namer namer,
10 bool generateSourceMap) 10 bool generateSourceMap)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 builder.addProperty('', buildUnusedConstructor(constructorName)); 60 builder.addProperty('', buildUnusedConstructor(constructorName));
61 } else { 61 } else {
62 builder.addProperty('', buildConstructor(constructorName, fields)); 62 builder.addProperty('', buildConstructor(constructorName, fields));
63 } 63 }
64 } 64 }
65 65
66 List get defineClassFunction { 66 List get defineClassFunction {
67 return [new jsAst.FunctionDeclaration( 67 return [new jsAst.FunctionDeclaration(
68 new jsAst.VariableDeclaration('defineClass'), 68 new jsAst.VariableDeclaration('defineClass'),
69 js.fun(['cls', 'constructor', 'prototype'], 69 js.fun(['cls', 'constructor', 'prototype'],
70 [js[r'constructor.prototype = prototype'], 70 [js(r'constructor.prototype = prototype'),
71 js[r'constructor.builtin$cls = cls'], 71 js(r'constructor.builtin$cls = cls'),
72 js.return_('constructor')]))]; 72 js.return_('constructor')]))];
73 } 73 }
74 74
75 List buildProtoSupportCheck() { 75 List buildProtoSupportCheck() {
76 // We don't modify the prototypes in CSP mode. Therefore we can have an 76 // We don't modify the prototypes in CSP mode. Therefore we can have an
77 // easier prototype-check. 77 // easier prototype-check.
78 return [js['var $supportsProtoName = !(!({}.__proto__))']]; 78 return [js('var $supportsProtoName = !(!({}.__proto__))')];
79 } 79 }
80 80
81 jsAst.Expression buildConstructor(String mangledName, 81 jsAst.Expression buildConstructor(String mangledName,
82 List<String> fieldNames) { 82 List<String> fieldNames) {
83 return new jsAst.NamedFunction( 83 return new jsAst.NamedFunction(
84 new jsAst.VariableDeclaration(mangledName), 84 new jsAst.VariableDeclaration(mangledName),
85 js.fun(fieldNames, fieldNames.map( 85 js.fun(fieldNames, fieldNames.map(
86 (name) => js['this.$name = $name']).toList())); 86 (name) => js('this.$name = $name')).toList()));
87 } 87 }
88 88
89 jsAst.Expression buildUnusedConstructor(String mangledName) { 89 jsAst.Expression buildUnusedConstructor(String mangledName) {
90 String message = 'Called unused constructor'; 90 String message = 'Called unused constructor';
91 return new jsAst.NamedFunction( 91 return new jsAst.NamedFunction(
92 new jsAst.VariableDeclaration(mangledName), 92 new jsAst.VariableDeclaration(mangledName),
93 js.fun([], new jsAst.Throw(js.string(message)))); 93 js.fun([], new jsAst.Throw(js.string(message))));
94 } 94 }
95 95
96 jsAst.FunctionDeclaration get generateAccessorFunction { 96 jsAst.FunctionDeclaration get generateAccessorFunction {
97 String message = 97 String message =
98 'Internal error: no dynamic generation of accessors allowed.'; 98 'Internal error: no dynamic generation of accessors allowed.';
99 return new jsAst.FunctionDeclaration( 99 return new jsAst.FunctionDeclaration(
100 new jsAst.VariableDeclaration('generateAccessor'), 100 new jsAst.VariableDeclaration('generateAccessor'),
101 js.fun([], new jsAst.Throw(js.string(message)))); 101 js.fun([], new jsAst.Throw(js.string(message))));
102 } 102 }
103 103
104 jsAst.Expression buildLazyInitializedGetter(VariableElement element) { 104 jsAst.Expression buildLazyInitializedGetter(VariableElement element) {
105 String isolate = namer.CURRENT_ISOLATE; 105 String isolate = namer.CURRENT_ISOLATE;
106 String name = namer.getName(element); 106 String name = namer.getName(element);
107 return js.fun([], js.return_(js['$isolate.$name'])); 107 return js.fun([], js.return_(js('$isolate.$name')));
108 } 108 }
109 109
110 jsAst.Fun get lazyInitializerFunction { 110 jsAst.Fun get lazyInitializerFunction {
111 // function(prototype, staticName, fieldName, 111 // function(prototype, staticName, fieldName,
112 // getterName, lazyValue, getter) { 112 // getterName, lazyValue, getter) {
113 var parameters = <String>['prototype', 'staticName', 'fieldName', 113 var parameters = <String>['prototype', 'staticName', 'fieldName',
114 'getterName', 'lazyValue', 'getter']; 114 'getterName', 'lazyValue', 'getter'];
115 return js.fun(parameters, addLazyInitializerLogic()); 115 return js.fun(parameters, addLazyInitializerLogic());
116 } 116 }
117 117
118 jsAst.Fun get finishIsolateConstructorFunction { 118 jsAst.Fun get finishIsolateConstructorFunction {
119 // We replace the old Isolate function with a new one that initializes 119 // We replace the old Isolate function with a new one that initializes
120 // all its fields with the initial (and often final) value of all globals. 120 // all its fields with the initial (and often final) value of all globals.
121 // 121 //
122 // We also copy over old values like the prototype, and the 122 // We also copy over old values like the prototype, and the
123 // isolateProperties themselves. 123 // isolateProperties themselves.
124 return js.fun('oldIsolate', [ 124 return js.fun('oldIsolate', [
125 js['var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'], 125 js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
126 new jsAst.FunctionDeclaration( 126 new jsAst.FunctionDeclaration(
127 new jsAst.VariableDeclaration('Isolate'), 127 new jsAst.VariableDeclaration('Isolate'),
128 js.fun([], [ 128 js.fun([], [
129 js['var hasOwnProperty = Object.prototype.hasOwnProperty'], 129 js('var hasOwnProperty = Object.prototype.hasOwnProperty'),
130 js.forIn('staticName', 'isolateProperties', 130 js.forIn('staticName', 'isolateProperties',
131 js.if_('hasOwnProperty.call(isolateProperties, staticName)', 131 js.if_('hasOwnProperty.call(isolateProperties, staticName)',
132 js['this[staticName] = isolateProperties[staticName]'])), 132 js('this[staticName] = isolateProperties[staticName]'))),
133 // Use the newly created object as prototype. In Chrome, 133 // Use the newly created object as prototype. In Chrome,
134 // this creates a hidden class for the object and makes 134 // this creates a hidden class for the object and makes
135 // sure it is fast to access. 135 // sure it is fast to access.
136 new jsAst.FunctionDeclaration( 136 new jsAst.FunctionDeclaration(
137 new jsAst.VariableDeclaration('ForceEfficientMap'), 137 new jsAst.VariableDeclaration('ForceEfficientMap'),
138 js.fun([], [])), 138 js.fun([], [])),
139 js['ForceEfficientMap.prototype = this'], 139 js('ForceEfficientMap.prototype = this'),
140 js['new ForceEfficientMap()']])), 140 js('new ForceEfficientMap()')])),
141 js['Isolate.prototype = oldIsolate.prototype'], 141 js('Isolate.prototype = oldIsolate.prototype'),
142 js['Isolate.prototype.constructor = Isolate'], 142 js('Isolate.prototype.constructor = Isolate'),
143 js['Isolate.${namer.isolatePropertiesName} = isolateProperties'], 143 js('Isolate.${namer.isolatePropertiesName} = isolateProperties'),
144 js.return_('Isolate')]); 144 js.return_('Isolate')]);
145 } 145 }
146 } 146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698