Index: frog/method_data.dart |
diff --git a/frog/method_data.dart b/frog/method_data.dart |
deleted file mode 100644 |
index 6d573e9ae98e797358c32f91af5ebbb46e78d9e5..0000000000000000000000000000000000000000 |
--- a/frog/method_data.dart |
+++ /dev/null |
@@ -1,148 +0,0 @@ |
-// Copyright (c) 2012, 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. |
- |
- |
-class MethodCallData { |
- MethodData data; |
- |
- MethodMember method; |
- |
- MethodGenerator _methodGenerator; |
- |
- MethodCallData(this.data, this.method); |
- |
- bool matches(MethodCallData other) { |
- return method == other.method; |
- } |
- |
- void run() { |
- if (_methodGenerator !== null) return; |
- |
- _methodGenerator = new MethodGenerator(method, data.context); |
- _methodGenerator.run(); |
- } |
-} |
- |
- |
-/** |
- * Stores a reference to a single actual method body as well as |
- * potential specializations for either concrete generic types or |
- * optimizations for concrete argument types. |
- */ |
-class MethodData { |
- MethodMember baseMethod; |
- Statement body; |
- bool needsTypeParams = false; |
- |
- CallingContext context; |
- |
- List<MethodCallData> _calls; |
- |
- MethodData(this.baseMethod, [this.context]): _calls = [] { |
- body = baseMethod.definition.body; |
- if (baseMethod.isConstructor) { |
- needsTypeParams = true; |
- } |
- } |
- |
- void analyze() { |
- var ma = new MethodAnalyzer(baseMethod, body); |
- ma.analyze(context); |
- // TODO(jimhug): Add support for specializing on type parameters. |
- /* |
- if (ma.hasTypeParams) { |
- needsTypeParams = true; |
- } |
- */ |
- } |
- |
- Value eval(MethodMember method, Value newObject, Arguments args) { |
- if (method !== baseMethod) { |
- if (!needsTypeParams) method = baseMethod; |
- } |
- |
- // TODO(jimhug): Reconcile with run method below. |
- var gen = new MethodGenerator(method, context); |
- return gen.evalBody(newObject, args); |
- } |
- |
- |
- invokeCall(MethodCallData callData) { |
- for (var cd in _calls) { |
- if (cd.matches(callData)) { |
- return cd.run(); |
- } |
- } |
- _calls.add(callData); |
- callData.run(); |
- } |
- |
- void run(MethodMember method) { |
- if (body === null && !method.isConstructor && !method.isNative) return; |
- |
- if (method !== baseMethod) { |
- if (!needsTypeParams) method = baseMethod; |
- } |
- |
- var callData = new MethodCallData(this, method); |
- method.declaringType.genericType.markUsed(); |
- |
- invokeCall(callData); |
- } |
- |
- bool writeDefinition(MethodMember method, CodeWriter writer) { |
- var gen = null; |
- // TODO(jimhug): Handle multiple matches. |
- for (var cd in _calls) { |
- if (cd.method == method) { |
- gen = cd._methodGenerator; |
- } |
- } |
- |
- if (gen != null) { |
- if (method.isNative && method == baseMethod) { |
- if (!method.hasNativeBody) return true; |
- gen.writer = new CodeWriter(); |
- gen.writer.write(method.definition.nativeBody); |
- gen._paramCode = map(method.parameters, (p) => p.name); |
- } |
- gen.writeDefinition(writer, null); |
- return true; |
- } else { |
- return false; |
- } |
- } |
- |
- void createFunction(CodeWriter writer) { |
- this.run(baseMethod); |
- writeDefinition(baseMethod, writer); |
- } |
- |
- //TODO(jimhug): context belongs in constructor, not here. |
- Value createLambda(LambdaExpression node, CallingContext context) { |
- //TODO(jimhug): Only create the lambda if it is needed. |
- final lambdaGen = new MethodGenerator(baseMethod, context); |
- if (baseMethod.name != '') { |
- // Note: we don't want to put this in our enclosing scope because the |
- // name shouldn't be visible except inside the lambda. We also don't want |
- // to put the name directly in the lambda's scope because parameters are |
- // allowed to shadow it. So we create an extra scope for it to go into. |
- lambdaGen._scope.create(baseMethod.name, baseMethod.functionType, |
- baseMethod.definition.span, isFinal:true); |
- lambdaGen._pushBlock(baseMethod.definition); |
- } |
- |
- _calls.add(new MethodCallData(this, baseMethod)); |
- |
- lambdaGen.run(); |
- if (baseMethod.name != '') { |
- lambdaGen._popBlock(baseMethod.definition); |
- } |
- |
- final writer = new CodeWriter(); |
- lambdaGen.writeDefinition(writer, node); |
- return new Value(baseMethod.functionType, writer.text, |
- baseMethod.definition.span); |
- } |
-} |