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

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

Issue 10915104: Move namer into javascript backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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 /** 5 /**
6 * A function element that represents a closure call. The signature is copied 6 * A function element that represents a closure call. The signature is copied
7 * from the given element. 7 * from the given element.
8 */ 8 */
9 class ClosureInvocationElement extends FunctionElement { 9 class ClosureInvocationElement extends FunctionElement {
10 ClosureInvocationElement(SourceString name, 10 ClosureInvocationElement(SourceString name,
(...skipping 28 matching lines...) Expand all
39 CodeBuffer mainBuffer; 39 CodeBuffer mainBuffer;
40 /** Shorter access to [isolatePropertiesName]. Both here in the code, as 40 /** Shorter access to [isolatePropertiesName]. Both here in the code, as
41 well as in the generated code. */ 41 well as in the generated code. */
42 String isolateProperties; 42 String isolateProperties;
43 String classesCollector; 43 String classesCollector;
44 final Map<int, String> boundClosureCache; 44 final Map<int, String> boundClosureCache;
45 45
46 final bool generateSourceMap; 46 final bool generateSourceMap;
47 final SourceMapBuilder sourceMapBuilder; 47 final SourceMapBuilder sourceMapBuilder;
48 48
49 CodeEmitterTask(Compiler compiler, [bool generateSourceMap = false]) 49 CodeEmitterTask(Compiler compiler, this.namer,
50 : namer = compiler.namer, 50 [bool generateSourceMap = false])
51 boundClosureBuffer = new CodeBuffer(), 51 : boundClosureBuffer = new CodeBuffer(),
52 mainBuffer = new CodeBuffer(), 52 mainBuffer = new CodeBuffer(),
53 boundClosureCache = new Map<int, String>(), 53 boundClosureCache = new Map<int, String>(),
54 generateSourceMap = generateSourceMap, 54 generateSourceMap = generateSourceMap,
55 sourceMapBuilder = new SourceMapBuilder(), 55 sourceMapBuilder = new SourceMapBuilder(),
56 super(compiler) { 56 super(compiler) {
57 nativeEmitter = new NativeEmitter(this); 57 nativeEmitter = new NativeEmitter(this);
58 } 58 }
59 59
60 String get name => 'CodeEmitter'; 60 String get name => 'CodeEmitter';
61 61
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 if (member.isFunction() 471 if (member.isFunction()
472 || member.isGenerativeConstructorBody() 472 || member.isGenerativeConstructorBody()
473 || member.isGetter() 473 || member.isGetter()
474 || member.isSetter()) { 474 || member.isSetter()) {
475 if (member.modifiers !== null && member.modifiers.isAbstract()) return; 475 if (member.modifiers !== null && member.modifiers.isAbstract()) return;
476 CodeBuffer codeBuffer = compiler.codegenWorld.generatedCode[member]; 476 CodeBuffer codeBuffer = compiler.codegenWorld.generatedCode[member];
477 if (codeBuffer == null) return; 477 if (codeBuffer == null) return;
478 defineInstanceMember(namer.getName(member), codeBuffer); 478 defineInstanceMember(namer.getName(member), codeBuffer);
479 codeBuffer = compiler.codegenWorld.generatedBailoutCode[member]; 479 codeBuffer = compiler.codegenWorld.generatedBailoutCode[member];
480 if (codeBuffer !== null) { 480 if (codeBuffer !== null) {
481 defineInstanceMember(compiler.namer.getBailoutName(member), codeBuffer); 481 defineInstanceMember(namer.getBailoutName(member), codeBuffer);
482 } 482 }
483 FunctionElement function = member; 483 FunctionElement function = member;
484 FunctionSignature parameters = function.computeSignature(compiler); 484 FunctionSignature parameters = function.computeSignature(compiler);
485 if (!parameters.optionalParameters.isEmpty()) { 485 if (!parameters.optionalParameters.isEmpty()) {
486 addParameterStubs(member, defineInstanceMember); 486 addParameterStubs(member, defineInstanceMember);
487 } 487 }
488 } else if (!member.isField()) { 488 } else if (!member.isField()) {
489 compiler.internalError('unexpected kind: "${member.kind}"', 489 compiler.internalError('unexpected kind: "${member.kind}"',
490 element: member); 490 element: member);
491 } 491 }
492 emitExtraAccessors(member, defineInstanceMember); 492 emitExtraAccessors(member, defineInstanceMember);
493 } 493 }
494 494
495 String generateCheckedSetter(Element member, String fieldName) { 495 String generateCheckedSetter(Element member, String fieldName) {
496 DartType type = member.computeType(compiler); 496 DartType type = member.computeType(compiler);
497 if (type.element.isTypeVariable() 497 if (type.element.isTypeVariable()
498 || type.element == compiler.dynamicClass 498 || type.element == compiler.dynamicClass
499 || type.element == compiler.objectClass) { 499 || type.element == compiler.objectClass) {
500 // TODO(ngeoffray): Support type checks on type parameters. 500 // TODO(ngeoffray): Support type checks on type parameters.
501 return null; 501 return null;
502 } else { 502 } else {
503 SourceString helper = compiler.backend.getCheckedModeHelper(type); 503 SourceString helper = compiler.backend.getCheckedModeHelper(type);
504 Element helperElement = compiler.findHelper(helper); 504 Element helperElement = compiler.findHelper(helper);
505 String helperName = compiler.namer.isolateAccess(helperElement); 505 String helperName = namer.isolateAccess(helperElement);
506 String additionalArgument = compiler.namer.operatorIs(type.element); 506 String additionalArgument = namer.operatorIs(type.element);
507 return " set\$$fieldName: function(v) { " 507 return " set\$$fieldName: function(v) { "
508 "this.$fieldName = $helperName(v, '$additionalArgument'); }"; 508 "this.$fieldName = $helperName(v, '$additionalArgument'); }";
509 } 509 }
510 } 510 }
511 511
512 List<String> emitClassFields(ClassElement classElement, CodeBuffer buffer) { 512 List<String> emitClassFields(ClassElement classElement, CodeBuffer buffer) {
513 // If the class is never instantiated we still need to set it up for 513 // If the class is never instantiated we still need to set it up for
514 // inheritance purposes, but we can simplify its JavaScript constructor. 514 // inheritance purposes, but we can simplify its JavaScript constructor.
515 bool isInstantiated = 515 bool isInstantiated =
516 compiler.codegenWorld.instantiatedClasses.contains(classElement); 516 compiler.codegenWorld.instantiatedClasses.contains(classElement);
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 sourceName = token.slowToString(); 1297 sourceName = token.slowToString();
1298 } 1298 }
1299 int totalOffset = bufferOffset + offset; 1299 int totalOffset = bufferOffset + offset;
1300 sourceMapBuilder.addMapping( 1300 sourceMapBuilder.addMapping(
1301 sourceFile, token.charOffset, sourceName, totalOffset); 1301 sourceFile, token.charOffset, sourceName, totalOffset);
1302 }); 1302 });
1303 } 1303 }
1304 } 1304 }
1305 1305
1306 typedef void DefineMemberFunction(String invocationName, CodeBuffer definition); 1306 typedef void DefineMemberFunction(String invocationName, CodeBuffer definition);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698