Index: pkg/compiler/lib/src/native/ssa.dart |
diff --git a/pkg/compiler/lib/src/native/ssa.dart b/pkg/compiler/lib/src/native/ssa.dart |
deleted file mode 100644 |
index 0bd8d1b953f50022f35771a5b3cce7c89cfacca9..0000000000000000000000000000000000000000 |
--- a/pkg/compiler/lib/src/native/ssa.dart |
+++ /dev/null |
@@ -1,111 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of native; |
- |
-final RegExp nativeRedirectionRegExp = new RegExp(r'^[a-zA-Z][a-zA-Z_$0-9]*$'); |
- |
-void handleSsaNative(SsaBuilder builder, Expression nativeBody) { |
- Compiler compiler = builder.compiler; |
- FunctionElement element = builder.work.element; |
- NativeEmitter nativeEmitter = builder.nativeEmitter; |
- JavaScriptBackend backend = builder.backend; |
- |
- HInstruction convertDartClosure(ParameterElement parameter, |
- FunctionType type) { |
- HInstruction local = builder.localsHandler.readLocal(parameter); |
- ConstantValue arityConstant = |
- builder.constantSystem.createInt(type.computeArity()); |
- HInstruction arity = builder.graph.addConstant(arityConstant, compiler); |
- // TODO(ngeoffray): For static methods, we could pass a method with a |
- // defined arity. |
- Element helper = backend.getClosureConverter(); |
- builder.pushInvokeStatic(nativeBody, helper, [local, arity]); |
- HInstruction closure = builder.pop(); |
- return closure; |
- } |
- |
- // Check which pattern this native method follows: |
- // 1) foo() native; |
- // hasBody = false |
- // 2) foo() native "bar"; |
- // No longer supported, this is now done with @JSName('foo') and case 1. |
- // 3) foo() native "return 42"; |
- // hasBody = true |
- bool hasBody = false; |
- assert(element.isNative); |
- String nativeMethodName = element.fixedBackendName; |
- if (nativeBody != null) { |
- LiteralString jsCode = nativeBody.asLiteralString(); |
- String str = jsCode.dartString.slowToString(); |
- if (nativeRedirectionRegExp.hasMatch(str)) { |
- compiler.internalError( |
- nativeBody, "Deprecated syntax, use @JSName('name') instead."); |
- } |
- hasBody = true; |
- } |
- |
- if (!hasBody) { |
- nativeEmitter.nativeMethods.add(element); |
- } |
- |
- FunctionSignature parameters = element.functionSignature; |
- if (!hasBody) { |
- List<String> arguments = <String>[]; |
- List<HInstruction> inputs = <HInstruction>[]; |
- String receiver = ''; |
- if (element.isInstanceMember) { |
- receiver = '#.'; |
- inputs.add(builder.localsHandler.readThis()); |
- } |
- parameters.forEachParameter((ParameterElement parameter) { |
- DartType type = parameter.type.unalias(compiler); |
- HInstruction input = builder.localsHandler.readLocal(parameter); |
- if (type is FunctionType) { |
- // The parameter type is a function type either directly or through |
- // typedef(s). |
- input = convertDartClosure(parameter, type); |
- } |
- inputs.add(input); |
- arguments.add('#'); |
- }); |
- |
- String foreignParameters = arguments.join(','); |
- String nativeMethodCall; |
- if (element.kind == ElementKind.FUNCTION) { |
- nativeMethodCall = '$receiver$nativeMethodName($foreignParameters)'; |
- } else if (element.kind == ElementKind.GETTER) { |
- nativeMethodCall = '$receiver$nativeMethodName'; |
- } else if (element.kind == ElementKind.SETTER) { |
- nativeMethodCall = '$receiver$nativeMethodName = $foreignParameters'; |
- } else { |
- builder.compiler.internalError(element, |
- 'Unexpected kind: "${element.kind}".'); |
- } |
- |
- builder.push( |
- new HForeign( |
- // TODO(sra): This could be cached. The number of templates should |
- // be proportional to the number of native methods, which is bounded |
- // by the dart: libraries. |
- js.js.uncachedExpressionTemplate(nativeMethodCall), |
- backend.dynamicType, |
- inputs, effects: new SideEffects())); |
- builder.close(new HReturn(builder.pop())).addSuccessor(builder.graph.exit); |
- } else { |
- if (parameters.parameterCount != 0) { |
- compiler.internalError(nativeBody, |
- 'native "..." syntax is restricted to ' |
- 'functions with zero parameters.'); |
- } |
- LiteralString jsCode = nativeBody.asLiteralString(); |
- builder.push(new HForeign.statement( |
- js.js.statementTemplateYielding( |
- new js.LiteralStatement(jsCode.dartString.slowToString())), |
- <HInstruction>[], |
- new SideEffects(), |
- null, |
- backend.dynamicType)); |
- } |
-} |