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

Side by Side Diff: pkg/compiler/lib/src/ssa/codegen.dart

Issue 891673003: dart2js: Refactoring, documentation, and a few bugfixes in Namer class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Typo and TODO about clash in named parameters Created 5 years, 10 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 ssa; 5 part of ssa;
6 6
7 class SsaCodeGeneratorTask extends CompilerTask { 7 class SsaCodeGeneratorTask extends CompilerTask {
8 8
9 final JavaScriptBackend backend; 9 final JavaScriptBackend backend;
10 10
(...skipping 1474 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 // Depending on how the then/else branches terminate 1485 // Depending on how the then/else branches terminate
1486 // (e.g., return/throw/break) there can be any number of these. 1486 // (e.g., return/throw/break) there can be any number of these.
1487 List<HBasicBlock> dominated = node.block.dominatedBlocks; 1487 List<HBasicBlock> dominated = node.block.dominatedBlocks;
1488 for (int i = 2; i < dominated.length; i++) { 1488 for (int i = 2; i < dominated.length; i++) {
1489 visitBasicBlock(dominated[i]); 1489 visitBasicBlock(dominated[i]);
1490 } 1490 }
1491 } 1491 }
1492 1492
1493 void visitInterceptor(HInterceptor node) { 1493 void visitInterceptor(HInterceptor node) {
1494 registry.registerSpecializedGetInterceptor(node.interceptedClasses); 1494 registry.registerSpecializedGetInterceptor(node.interceptedClasses);
1495 String name = backend.namer.getInterceptorName( 1495 String name = backend.namer.getInterceptorName(node.interceptedClasses);
1496 backend.getInterceptorMethod, node.interceptedClasses);
1497 var isolate = new js.VariableUse( 1496 var isolate = new js.VariableUse(
1498 backend.namer.globalObjectFor(backend.interceptorsLibrary)); 1497 backend.namer.globalObjectFor(backend.interceptorsLibrary));
1499 use(node.receiver); 1498 use(node.receiver);
1500 List<js.Expression> arguments = <js.Expression>[pop()]; 1499 List<js.Expression> arguments = <js.Expression>[pop()];
1501 push(js.propertyCall(isolate, name, arguments), node); 1500 push(js.propertyCall(isolate, name, arguments), node);
1502 registry.registerUseInterceptor(); 1501 registry.registerUseInterceptor();
1503 } 1502 }
1504 1503
1505 visitInvokeDynamicMethod(HInvokeDynamicMethod node) { 1504 visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
1506 use(node.receiver); 1505 use(node.receiver);
(...skipping 25 matching lines...) Expand all
1532 if (methodName == null) { 1531 if (methodName == null) {
1533 methodName = backend.namer.invocationName(node.selector); 1532 methodName = backend.namer.invocationName(node.selector);
1534 registerMethodInvoke(node); 1533 registerMethodInvoke(node);
1535 } 1534 }
1536 push(js.propertyCall(object, methodName, arguments), node); 1535 push(js.propertyCall(object, methodName, arguments), node);
1537 } 1536 }
1538 1537
1539 void visitInvokeConstructorBody(HInvokeConstructorBody node) { 1538 void visitInvokeConstructorBody(HInvokeConstructorBody node) {
1540 use(node.inputs[0]); 1539 use(node.inputs[0]);
1541 js.Expression object = pop(); 1540 js.Expression object = pop();
1542 String methodName = backend.namer.getNameOfInstanceMember(node.element); 1541 String methodName = backend.namer.instanceMethodName(node.element);
1543 List<js.Expression> arguments = visitArguments(node.inputs); 1542 List<js.Expression> arguments = visitArguments(node.inputs);
1544 push(js.propertyCall(object, methodName, arguments), node); 1543 push(js.propertyCall(object, methodName, arguments), node);
1545 registry.registerStaticUse(node.element); 1544 registry.registerStaticUse(node.element);
1546 } 1545 }
1547 1546
1548 void visitOneShotInterceptor(HOneShotInterceptor node) { 1547 void visitOneShotInterceptor(HOneShotInterceptor node) {
1549 List<js.Expression> arguments = visitArguments(node.inputs); 1548 List<js.Expression> arguments = visitArguments(node.inputs);
1550 var isolate = new js.VariableUse( 1549 var isolate = new js.VariableUse(
1551 backend.namer.globalObjectFor(backend.interceptorsLibrary)); 1550 backend.namer.globalObjectFor(backend.interceptorsLibrary));
1552 Selector selector = getOptimizedSelectorFor(node, node.selector); 1551 Selector selector = getOptimizedSelectorFor(node, node.selector);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 TypeMask receiverType = 1671 TypeMask receiverType =
1673 new TypeMask.nonNullExact(superClass, compiler.world); 1672 new TypeMask.nonNullExact(superClass, compiler.world);
1674 selector = new TypedSelector(receiverType, selector, compiler.world); 1673 selector = new TypedSelector(receiverType, selector, compiler.world);
1675 // TODO(floitsch): we know the target. We shouldn't register a 1674 // TODO(floitsch): we know the target. We shouldn't register a
1676 // dynamic getter. 1675 // dynamic getter.
1677 registry.registerDynamicGetter(selector); 1676 registry.registerDynamicGetter(selector);
1678 registry.registerGetterForSuperMethod(node.element); 1677 registry.registerGetterForSuperMethod(node.element);
1679 methodName = backend.namer.invocationName(selector); 1678 methodName = backend.namer.invocationName(selector);
1680 } else { 1679 } else {
1681 assert(invariant(node, compiler.hasIncrementalSupport)); 1680 assert(invariant(node, compiler.hasIncrementalSupport));
1682 methodName = backend.namer.getNameOfInstanceMember(superMethod); 1681 methodName = backend.namer.instanceMethodName(superMethod);
1683 } 1682 }
1684 push(js.js('#.#.call(#)', 1683 push(js.js('#.#.call(#)',
1685 [backend.emitter.prototypeAccess(superClass, 1684 [backend.emitter.prototypeAccess(superClass,
1686 hasBeenInstantiated: true), 1685 hasBeenInstantiated: true),
1687 methodName, visitArguments(node.inputs, start: 0)]), 1686 methodName, visitArguments(node.inputs, start: 0)]),
1688 node); 1687 node);
1689 } else { 1688 } else {
1690 use(node.receiver); 1689 use(node.receiver);
1691 push( 1690 push(
1692 js.js('#.#(#)', [ 1691 js.js('#.#(#)', [
(...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after
2669 js.PropertyAccess accessHelper(String name) { 2668 js.PropertyAccess accessHelper(String name) {
2670 Element helper = backend.findHelper(name); 2669 Element helper = backend.findHelper(name);
2671 if (helper == null) { 2670 if (helper == null) {
2672 // For mocked-up tests. 2671 // For mocked-up tests.
2673 return js.js('(void 0).$name'); 2672 return js.js('(void 0).$name');
2674 } 2673 }
2675 registry.registerStaticUse(helper); 2674 registry.registerStaticUse(helper);
2676 return backend.emitter.staticFunctionAccess(helper); 2675 return backend.emitter.staticFunctionAccess(helper);
2677 } 2676 }
2678 } 2677 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698