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

Unified Diff: pkg/fletchc/lib/src/compiled_function.dart

Issue 1170123004: Rename CompiledFunction to FletchFunctionBuilder and CompiledClass to FletchClassBuilder. (Closed) Base URL: git@github.com:dart-lang/fletch.git@master
Patch Set: Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/fletchc/lib/src/compiled_class.dart ('k') | pkg/fletchc/lib/src/constructor_codegen.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/fletchc/lib/src/compiled_function.dart
diff --git a/pkg/fletchc/lib/src/compiled_function.dart b/pkg/fletchc/lib/src/compiled_function.dart
deleted file mode 100644
index e7768b2ac52e718da0425ced81b194e5f917454b..0000000000000000000000000000000000000000
--- a/pkg/fletchc/lib/src/compiled_function.dart
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright (c) 2015, the Fletch 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.md file.
-
-library fletchc.compiled_function;
-
-import 'package:compiler/src/constants/values.dart' show
- ConstantValue;
-
-import 'package:compiler/src/constants/expressions.dart' show
- ConstantExpression;
-
-import 'package:compiler/src/tree/tree.dart' show
- Expression;
-
-import 'package:compiler/src/elements/elements.dart';
-
-import 'fletch_constants.dart' show
- FletchFunctionConstant,
- FletchClassConstant;
-
-import 'package:compiler/src/universe/universe.dart'
- show Selector;
-
-import '../bytecodes.dart' show
- Bytecode;
-
-import 'compiled_class.dart' show
- CompiledClass;
-
-import 'fletch_context.dart';
-import 'bytecode_builder.dart';
-import 'debug_info.dart';
-
-enum CompiledFunctionKind {
- NORMAL,
- LAZY_FIELD_INITIALIZER,
- INITIALIZER_LIST,
- PARAMETER_STUB,
- ACCESSOR
-}
-
-class CompiledFunction {
- final BytecodeBuilder builder;
- final int methodId;
-
- /**
- * The signature of the CompiledFunction.
- *
- * Som compiled functions does not have a signature (for example, generated
- * accessors).
- */
- final FunctionSignature signature;
-
- /**
- * If the functions is an instance member, [memberOf] is set to the compiled
- * class.
- *
- * If [memberOf] is set, the compiled function takes an 'this' argument in
- * addition to that of [signature].
- */
- final CompiledClass memberOf;
- final String name;
- final Element element;
- final Map<ConstantValue, int> constants = <ConstantValue, int>{};
- final Map<int, ConstantValue> functionConstantValues = <int, ConstantValue>{};
- final Map<int, ConstantValue> classConstantValues = <int, ConstantValue>{};
- final Map<Selector, CompiledFunction> parameterMappings =
- <Selector, CompiledFunction>{};
- final int arity;
- final CompiledFunctionKind kind;
-
- DebugInfo debugInfo;
-
- CompiledFunction(this.methodId,
- this.name,
- this.element,
- FunctionSignature signature,
- CompiledClass memberOf,
- {this.kind: CompiledFunctionKind.NORMAL})
- : this.signature = signature,
- this.memberOf = memberOf,
- arity = signature.parameterCount + (memberOf != null ? 1 : 0),
- builder = new BytecodeBuilder(
- signature.parameterCount + (memberOf != null ? 1 : 0));
-
- CompiledFunction.normal(this.methodId, int argumentCount)
- : arity = argumentCount,
- builder = new BytecodeBuilder(argumentCount),
- kind = CompiledFunctionKind.NORMAL;
-
- CompiledFunction.lazyInit(this.methodId,
- this.name,
- this.element,
- int argumentCount)
- : arity = argumentCount,
- builder = new BytecodeBuilder(argumentCount),
- kind = CompiledFunctionKind.LAZY_FIELD_INITIALIZER;
-
- CompiledFunction.parameterStub(this.methodId, int argumentCount)
- : arity = argumentCount,
- builder = new BytecodeBuilder(argumentCount),
- kind = CompiledFunctionKind.PARAMETER_STUB;
-
- CompiledFunction.accessor(this.methodId, bool setter)
- : arity = setter ? 2 : 1,
- builder = new BytecodeBuilder(setter ? 2 : 1),
- kind = CompiledFunctionKind.ACCESSOR;
-
- void reuse() {
- builder.reuse();
- constants.clear();
- functionConstantValues.clear();
- classConstantValues.clear();
- }
-
- bool get hasThisArgument => memberOf != null;
-
- bool get isLazyFieldInitializer {
- return kind == CompiledFunctionKind.LAZY_FIELD_INITIALIZER;
- }
-
- bool get isInitializerList {
- return kind == CompiledFunctionKind.INITIALIZER_LIST;
- }
-
- bool get isAccessor {
- return kind == CompiledFunctionKind.ACCESSOR;
- }
-
- bool get isParameterStub {
- return kind == CompiledFunctionKind.PARAMETER_STUB;
- }
-
- bool get isConstructor => element != null && element.isConstructor;
-
- int allocateConstant(ConstantValue constant) {
- if (constant == null) throw "bad constant";
- return constants.putIfAbsent(constant, () => constants.length);
- }
-
- int allocateConstantFromFunction(int methodId) {
- FletchFunctionConstant constant =
- functionConstantValues.putIfAbsent(
- methodId, () => new FletchFunctionConstant(methodId));
- return allocateConstant(constant);
- }
-
- int allocateConstantFromClass(int classId) {
- FletchClassConstant constant =
- classConstantValues.putIfAbsent(
- classId, () => new FletchClassConstant(classId));
- return allocateConstant(constant);
- }
-
- // TODO(ajohnsen): Remove this function when usage is avoided in
- // FletchBackend.
- void copyFrom(CompiledFunction function) {
- builder.bytecodes.addAll(function.builder.bytecodes);
- builder.catchRanges.addAll(function.builder.catchRanges);
- constants.addAll(function.constants);
- functionConstantValues.addAll(function.functionConstantValues);
- classConstantValues.addAll(function.classConstantValues);
- }
-
- bool matchesSelector(Selector selector) {
- if (!canBeCalledAs(selector)) return false;
- if (selector.namedArguments.length != signature.optionalParameterCount) {
- return false;
- }
- int index = 0;
- bool match = true;
- for (var parameter in signature.orderedOptionalParameters) {
- if (parameter.name != selector.namedArguments[index++]) match = false;
- }
- return match;
- }
-
- // TODO(ajohnsen): Remove and use the one one Selector, when it takes a
- // FunctionSignature directly.
- // This is raw copy of Selector.signaturesApplies.
- bool canBeCalledAs(Selector selector) {
- if (selector.argumentCount > signature.parameterCount) return false;
- int requiredParameterCount = signature.requiredParameterCount;
- int optionalParameterCount = signature.optionalParameterCount;
- if (selector.positionalArgumentCount < requiredParameterCount) return false;
-
- if (!signature.optionalParametersAreNamed) {
- // We have already checked that the number of arguments are
- // not greater than the number of signature. Therefore the
- // number of positional arguments are not greater than the
- // number of signature.
- assert(selector.positionalArgumentCount <= signature.parameterCount);
- return selector.namedArguments.isEmpty;
- } else {
- if (selector.positionalArgumentCount > requiredParameterCount) {
- return false;
- }
- assert(selector.positionalArgumentCount == requiredParameterCount);
- if (selector.namedArgumentCount > optionalParameterCount) return false;
- Set<String> nameSet = new Set<String>();
- signature.optionalParameters.forEach((Element element) {
- nameSet.add(element.name);
- });
- for (String name in selector.namedArguments) {
- if (!nameSet.contains(name)) return false;
- // TODO(5213): By removing from the set we are checking
- // that we are not passing the name twice. We should have this
- // check in the resolver also.
- nameSet.remove(name);
- }
- return true;
- }
- }
-
- CompiledFunction createParameterMappingFor(
- Selector selector,
- FletchContext context) {
- return parameterMappings.putIfAbsent(selector, () {
- assert(canBeCalledAs(selector));
- int arity = selector.argumentCount;
- if (hasThisArgument) arity++;
-
- CompiledFunction compiledFunction = new CompiledFunction.parameterStub(
- context.backend.functions.length,
- arity);
- context.backend.functions.add(compiledFunction);
-
- BytecodeBuilder builder = compiledFunction.builder;
-
- void loadInitializerOrNull(ParameterElement parameter) {
- Expression initializer = parameter.initializer;
- if (initializer != null) {
- ConstantExpression expression = context.compileConstant(
- initializer,
- parameter.memberContext.resolvedAst.elements,
- isConst: true);
- int constId = compiledFunction.allocateConstant(
- context.getConstantValue(expression));
- builder.loadConst(constId);
- } else {
- builder.loadLiteralNull();
- }
- }
-
- // Load this.
- if (hasThisArgument) builder.loadParameter(0);
-
- int index = hasThisArgument ? 1 : 0;
- signature.orderedForEachParameter((ParameterElement parameter) {
- if (!parameter.isOptional) {
- builder.loadParameter(index);
- } else if (parameter.isNamed) {
- int parameterIndex = selector.namedArguments.indexOf(parameter.name);
- if (parameterIndex >= 0) {
- if (hasThisArgument) parameterIndex++;
- int position = selector.positionalArgumentCount + parameterIndex;
- builder.loadParameter(position);
- } else {
- loadInitializerOrNull(parameter);
- }
- } else {
- if (index < arity) {
- builder.loadParameter(index);
- } else {
- loadInitializerOrNull(parameter);
- }
- }
- index++;
- });
-
- // TODO(ajohnsen): We have to be extra careful when overriding a
- // method that takes optional arguments. We really should
- // enumerate all the stubs in the superclasses and make sure
- // they're overridden.
- int constId = compiledFunction.allocateConstantFromFunction(methodId);
- builder
- ..invokeStatic(constId, index)
- ..ret()
- ..methodEnd();
-
- if (memberOf != null) {
- int fletchSelector = context.toFletchSelector(selector);
- memberOf.addToMethodTable(fletchSelector, compiledFunction);
- }
-
- return compiledFunction;
- });
- }
-
- String verboseToString() {
- StringBuffer sb = new StringBuffer();
-
- sb.writeln("Method $methodId, Arity=${builder.functionArity}");
- sb.writeln("Constants:");
- constants.forEach((constant, int index) {
- if (constant is ConstantValue) {
- constant = constant.toStructuredString();
- }
- sb.writeln(" #$index: $constant");
- });
-
- sb.writeln("Bytecodes:");
- int offset = 0;
- for (Bytecode bytecode in builder.bytecodes) {
- sb.writeln(" $offset: $bytecode");
- offset += bytecode.size;
- }
-
- return '$sb';
- }
-}
« no previous file with comments | « pkg/fletchc/lib/src/compiled_class.dart ('k') | pkg/fletchc/lib/src/constructor_codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698