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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart

Issue 2642063003: Use entities in class_stub_generator. (Closed)
Patch Set: Created 3 years, 11 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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.full_emitter; 5 part of dart2js.js_emitter.full_emitter;
6 6
7 class ClassEmitter extends CodeEmitterHelper { 7 class ClassEmitter extends CodeEmitterHelper {
8 final ClosedWorld closedWorld; 8 final ClosedWorld closedWorld;
9 9
10 ClassEmitter(this.closedWorld); 10 ClassEmitter(this.closedWorld);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 generateReflectionDataForFieldGetterOrSetter(member, setterName, builder, 208 generateReflectionDataForFieldGetterOrSetter(member, setterName, builder,
209 isGetter: false); 209 isGetter: false);
210 } 210 }
211 } 211 }
212 212
213 /// Emits getters/setters for fields if compiling in CSP mode. 213 /// Emits getters/setters for fields if compiling in CSP mode.
214 void emitClassGettersSettersForCSP(Class cls, ClassBuilder builder) { 214 void emitClassGettersSettersForCSP(Class cls, ClassBuilder builder) {
215 if (!compiler.options.useContentSecurityPolicy || cls.onlyForRti) return; 215 if (!compiler.options.useContentSecurityPolicy || cls.onlyForRti) return;
216 216
217 for (Field field in cls.fields) { 217 for (Field field in cls.fields) {
218 Element member = field.element; 218 FieldElement member = field.element;
219 reporter.withCurrentElement(member, () { 219 reporter.withCurrentElement(member, () {
220 if (field.needsGetter) { 220 if (field.needsGetter) {
221 emitGetterForCSP(member, field.name, field.accessorName, builder); 221 emitGetterForCSP(member, field.name, field.accessorName, builder);
222 } 222 }
223 if (field.needsUncheckedSetter) { 223 if (field.needsUncheckedSetter) {
224 emitSetterForCSP(member, field.name, field.accessorName, builder); 224 emitSetterForCSP(member, field.name, field.accessorName, builder);
225 } 225 }
226 }); 226 });
227 } 227 }
228 } 228 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 previousName = emitter.mangledFieldNames 367 previousName = emitter.mangledFieldNames
368 .putIfAbsent(namer.deriveGetterName(accessorName), () => memberName); 368 .putIfAbsent(namer.deriveGetterName(accessorName), () => memberName);
369 } else { 369 } else {
370 previousName = emitter.mangledGlobalFieldNames 370 previousName = emitter.mangledGlobalFieldNames
371 .putIfAbsent(accessorName, () => memberName); 371 .putIfAbsent(accessorName, () => memberName);
372 } 372 }
373 assert(invariant(member, previousName == memberName, 373 assert(invariant(member, previousName == memberName,
374 message: '$previousName != ${memberName}')); 374 message: '$previousName != ${memberName}'));
375 } 375 }
376 376
377 void emitGetterForCSP(Element member, jsAst.Name fieldName, 377 void emitGetterForCSP(FieldElement member, jsAst.Name fieldName,
378 jsAst.Name accessorName, ClassBuilder builder) { 378 jsAst.Name accessorName, ClassBuilder builder) {
379 jsAst.Expression function = 379 jsAst.Expression function =
380 _stubGenerator.generateGetter(member, fieldName); 380 _stubGenerator.generateGetter(member, fieldName);
381 381
382 jsAst.Name getterName = namer.deriveGetterName(accessorName); 382 jsAst.Name getterName = namer.deriveGetterName(accessorName);
383 ClassElement cls = member.enclosingClass; 383 ClassElement cls = member.enclosingClass;
384 jsAst.Name className = namer.className(cls); 384 jsAst.Name className = namer.className(cls);
385 OutputUnit outputUnit = 385 OutputUnit outputUnit =
386 compiler.deferredLoadTask.outputUnitForElement(member); 386 compiler.deferredLoadTask.outputUnitForElement(member);
387 emitter 387 emitter
388 .cspPrecompiledFunctionFor(outputUnit) 388 .cspPrecompiledFunctionFor(outputUnit)
389 .add(js('#.prototype.# = #', [className, getterName, function])); 389 .add(js('#.prototype.# = #', [className, getterName, function]));
390 if (backend.isAccessibleByReflection(member)) { 390 if (backend.isAccessibleByReflection(member)) {
391 emitter.cspPrecompiledFunctionFor(outputUnit).add(js( 391 emitter.cspPrecompiledFunctionFor(outputUnit).add(js(
392 '#.prototype.#.${namer.reflectableField} = 1', 392 '#.prototype.#.${namer.reflectableField} = 1',
393 [className, getterName])); 393 [className, getterName]));
394 } 394 }
395 } 395 }
396 396
397 void emitSetterForCSP(Element member, jsAst.Name fieldName, 397 void emitSetterForCSP(FieldElement member, jsAst.Name fieldName,
398 jsAst.Name accessorName, ClassBuilder builder) { 398 jsAst.Name accessorName, ClassBuilder builder) {
399 jsAst.Expression function = 399 jsAst.Expression function =
400 _stubGenerator.generateSetter(member, fieldName); 400 _stubGenerator.generateSetter(member, fieldName);
401 401
402 jsAst.Name setterName = namer.deriveSetterName(accessorName); 402 jsAst.Name setterName = namer.deriveSetterName(accessorName);
403 ClassElement cls = member.enclosingClass; 403 ClassElement cls = member.enclosingClass;
404 jsAst.Name className = namer.className(cls); 404 jsAst.Name className = namer.className(cls);
405 OutputUnit outputUnit = 405 OutputUnit outputUnit =
406 compiler.deferredLoadTask.outputUnitForElement(member); 406 compiler.deferredLoadTask.outputUnitForElement(member);
407 emitter 407 emitter
(...skipping 14 matching lines...) Expand all
422 : new Selector.setter( 422 : new Selector.setter(
423 new Name(member.name, member.library, isSetter: true)); 423 new Name(member.name, member.library, isSetter: true));
424 String reflectionName = emitter.getReflectionName(selector, name); 424 String reflectionName = emitter.getReflectionName(selector, name);
425 if (reflectionName != null) { 425 if (reflectionName != null) {
426 var reflectable = 426 var reflectable =
427 js(backend.isAccessibleByReflection(member) ? '1' : '0'); 427 js(backend.isAccessibleByReflection(member) ? '1' : '0');
428 builder.addPropertyByName('+$reflectionName', reflectable); 428 builder.addPropertyByName('+$reflectionName', reflectable);
429 } 429 }
430 } 430 }
431 } 431 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698