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

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

Issue 3003003002: Revert "dart2js-kernel: implement native static methods" (Closed)
Patch Set: Created 3 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
« no previous file with comments | « no previous file | tests/compiler/dart2js_native/dart2js_native.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../closure.dart'; 7 import '../closure.dart';
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/codegen.dart' show CodegenRegistry; 9 import '../common/codegen.dart' show CodegenRegistry;
10 import '../common/names.dart'; 10 import '../common/names.dart';
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 // `sourceInformationBuilder.buildIf(?)`. 712 // `sourceInformationBuilder.buildIf(?)`.
713 ); 713 );
714 } 714 }
715 } 715 }
716 functionNode.body.accept(this); 716 functionNode.body.accept(this);
717 closeFunction(); 717 closeFunction();
718 } 718 }
719 719
720 /// Builds a SSA graph for FunctionNodes of external methods. 720 /// Builds a SSA graph for FunctionNodes of external methods.
721 void buildExternalFunctionNode(ir.FunctionNode functionNode) { 721 void buildExternalFunctionNode(ir.FunctionNode functionNode) {
722 assert(functionNode.body == null);
723 openFunction(functionNode); 722 openFunction(functionNode);
724 ir.TreeNode parent = functionNode.parent; 723 ir.TreeNode parent = functionNode.parent;
725 if (parent is ir.Procedure && parent.kind == ir.ProcedureKind.Factory) { 724 if (parent is ir.Procedure && parent.kind == ir.ProcedureKind.Factory) {
726 _addClassTypeVariablesIfNeeded(parent); 725 _addClassTypeVariablesIfNeeded(parent);
727 } 726 }
728 727 // TODO(sra): Generate conversion of Function typed arguments to JavaScript
729 if (closedWorld.nativeData.isNativeMember(targetElement)) { 728 // functions.
730 String nativeName; 729 // TODO(sra): Invoke native method.
731 if (closedWorld.nativeData.hasFixedBackendName(targetElement)) { 730 assert(functionNode.body == null);
732 nativeName = closedWorld.nativeData.getFixedBackendName(targetElement);
733 } else {
734 nativeName = targetElement.name.name;
735 }
736
737 String templateReceiver = '';
738 List<String> templateArguments = <String>[];
739 List<HInstruction> inputs = <HInstruction>[];
740 if (targetElement.isInstanceMember) {
741 templateReceiver = '#.';
742 inputs.add(localsHandler.readThis());
743 }
744
745 for (ir.VariableDeclaration param in functionNode.positionalParameters) {
746 templateArguments.add('#');
747 Local local = localsMap.getLocalVariable(param);
748 // Convert Dart function to JavaScript function.
749 HInstruction argument = localsHandler.readLocal(local);
750 ir.DartType type = param.type;
751 if (type is ir.FunctionType) {
752 int arity = type.positionalParameters.length;
753 _pushStaticInvocation(
754 _commonElements.closureConverter,
755 [argument, graph.addConstantInt(arity, closedWorld)],
756 commonMasks.dynamicType);
757 argument = pop();
758 }
759 inputs.add(argument);
760 }
761
762 String arguments = templateArguments.join(',');
763
764 // TODO(sra): Use declared type or NativeBehavior type.
765 TypeMask typeMask = commonMasks.dynamicType;
766 String template;
767 if (targetElement.isGetter) {
768 template = '${templateReceiver}$nativeName';
769 } else if (targetElement.isSetter) {
770 template = '${templateReceiver}$nativeName = ${arguments}';
771 } else {
772 template = '${templateReceiver}$nativeName(${arguments})';
773 }
774
775 push(new HForeignCode(
776 js.js.uncachedExpressionTemplate(template), typeMask, inputs,
777 effects: new SideEffects()));
778 // TODO(johnniwinther): Provide source information.
779 HInstruction value = pop();
780 if (targetElement.isSetter) {
781 value = graph.addConstantNull(closedWorld);
782 }
783 close(new HReturn(value, null)).addSuccessor(graph.exit);
784 }
785 // TODO(sra): Handle JS-interop methods.
786 closeFunction(); 731 closeFunction();
787 } 732 }
788 733
789 void addImplicitInstantiation(DartType type) { 734 void addImplicitInstantiation(DartType type) {
790 if (type != null) { 735 if (type != null) {
791 currentImplicitInstantiations.add(type); 736 currentImplicitInstantiations.add(type);
792 } 737 }
793 } 738 }
794 739
795 void removeImplicitInstantiation(DartType type) { 740 void removeImplicitInstantiation(DartType type) {
(...skipping 2943 matching lines...) Expand 10 before | Expand all | Expand 10 after
3739 enterBlock.setBlockFlow( 3684 enterBlock.setBlockFlow(
3740 new HTryBlockInformation( 3685 new HTryBlockInformation(
3741 kernelBuilder.wrapStatementGraph(bodyGraph), 3686 kernelBuilder.wrapStatementGraph(bodyGraph),
3742 exception, 3687 exception,
3743 kernelBuilder.wrapStatementGraph(catchGraph), 3688 kernelBuilder.wrapStatementGraph(catchGraph),
3744 kernelBuilder.wrapStatementGraph(finallyGraph)), 3689 kernelBuilder.wrapStatementGraph(finallyGraph)),
3745 exitBlock); 3690 exitBlock);
3746 kernelBuilder.inTryStatement = previouslyInTryStatement; 3691 kernelBuilder.inTryStatement = previouslyInTryStatement;
3747 } 3692 }
3748 } 3693 }
OLDNEW
« no previous file with comments | « no previous file | tests/compiler/dart2js_native/dart2js_native.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698