| Index: pkg/fletchc/lib/src/codegen_visitor.dart
|
| diff --git a/pkg/fletchc/lib/src/codegen_visitor.dart b/pkg/fletchc/lib/src/codegen_visitor.dart
|
| index bbd92e08d727e506607d6a8502789855e6814317..b123c8abb240c6ababa1578ea0e8256bead3431b 100644
|
| --- a/pkg/fletchc/lib/src/codegen_visitor.dart
|
| +++ b/pkg/fletchc/lib/src/codegen_visitor.dart
|
| @@ -40,18 +40,18 @@ import 'fletch_context.dart';
|
| import 'fletch_backend.dart';
|
|
|
| import 'fletch_constants.dart' show
|
| - CompiledFunctionConstant,
|
| + FletchFunctionBuilderConstant,
|
| FletchClassConstant,
|
| FletchClassInstanceConstant;
|
|
|
| import '../bytecodes.dart' show
|
| Bytecode;
|
|
|
| -import 'compiled_function.dart' show
|
| - CompiledFunction;
|
| +import 'fletch_function_builder.dart' show
|
| + FletchFunctionBuilder;
|
|
|
| -import 'compiled_class.dart' show
|
| - CompiledClass;
|
| +import 'fletch_class_builder.dart' show
|
| + FletchClassBuilder;
|
|
|
| import 'fletch_selector.dart';
|
|
|
| @@ -168,7 +168,7 @@ abstract class CodegenVisitor
|
|
|
| final MemberElement member;
|
|
|
| - final CompiledFunction compiledFunction;
|
| + final FletchFunctionBuilder functionBuilder;
|
|
|
| final Map<Element, LocalValue> scope = <Element, LocalValue>{};
|
|
|
| @@ -187,19 +187,19 @@ abstract class CodegenVisitor
|
|
|
| List<Element> blockLocals = <Element>[];
|
|
|
| - CodegenVisitor(CompiledFunction compiledFunction,
|
| + CodegenVisitor(FletchFunctionBuilder functionBuilder,
|
| this.context,
|
| TreeElements elements,
|
| this.registry,
|
| this.closureEnvironment,
|
| this.element)
|
| : super(elements),
|
| - this.compiledFunction = compiledFunction,
|
| + this.functionBuilder = functionBuilder,
|
| thisValue = new UnboxedLocalValue(
|
| - -1 - compiledFunction.builder.functionArity,
|
| + -1 - functionBuilder.builder.functionArity,
|
| null);
|
|
|
| - BytecodeBuilder get builder => compiledFunction.builder;
|
| + BytecodeBuilder get builder => functionBuilder.builder;
|
|
|
| SemanticSendVisitor get sendVisitor => this;
|
| SemanticDeclarationVisitor get declVisitor => this;
|
| @@ -219,18 +219,18 @@ abstract class CodegenVisitor
|
| node,
|
| elements: elements,
|
| isConst: false);
|
| - return compiledFunction.allocateConstant(
|
| + return functionBuilder.allocateConstant(
|
| context.getConstantValue(expression));
|
| }
|
|
|
| int allocateConstantClassInstance(int classId) {
|
| var constant = new FletchClassInstanceConstant(classId);
|
| context.markConstantUsed(constant);
|
| - return compiledFunction.allocateConstant(constant);
|
| + return functionBuilder.allocateConstant(constant);
|
| }
|
|
|
| int allocateStringConstant(String string) {
|
| - return compiledFunction.allocateConstant(
|
| + return functionBuilder.allocateConstant(
|
| context.backend.constantSystem.createString(
|
| new DartString.literal(string)));
|
| }
|
| @@ -343,14 +343,14 @@ abstract class CodegenVisitor
|
| builder.branchIfTrue(ifTrue);
|
| }
|
|
|
| - CompiledFunction requireCompiledFunction(FunctionElement element) {
|
| + FletchFunctionBuilder requireFletchFunctionBuilder(FunctionElement element) {
|
| registerStaticInvocation(element);
|
| - return context.backend.createCompiledFunction(element);
|
| + return context.backend.createFletchFunctionBuilder(element);
|
| }
|
|
|
| void doStaticFunctionInvoke(
|
| Node node,
|
| - CompiledFunction function,
|
| + FletchFunctionBuilder function,
|
| NodeList arguments,
|
| CallStructure callStructure,
|
| {bool factoryInvoke: false}) {
|
| @@ -365,7 +365,7 @@ abstract class CodegenVisitor
|
| methodId = function.methodId;
|
| } else if (function.canBeCalledAs(callStructure.callSelector)) {
|
| // TODO(ajohnsen): Inline parameter mapping?
|
| - CompiledFunction stub = function.createParameterMappingFor(
|
| + FletchFunctionBuilder stub = function.createParameterMappingFor(
|
| callStructure.callSelector, context);
|
| methodId = stub.methodId;
|
| } else {
|
| @@ -385,7 +385,7 @@ abstract class CodegenVisitor
|
| arity = loadPositionalArguments(arguments, signature, function.name);
|
| }
|
| if (function.hasThisArgument) arity++;
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| if (factoryInvoke) {
|
| invokeFactory(node, constId, arity);
|
| } else {
|
| @@ -840,11 +840,12 @@ abstract class CodegenVisitor
|
| Send node,
|
| MethodElement function,
|
| _) {
|
| - CompiledFunction compiledFunctionTarget = requireCompiledFunction(function);
|
| - CompiledClass compiledClass = context.backend.createTearoffClass(
|
| - compiledFunctionTarget);
|
| - assert(compiledClass.fields == 0);
|
| - int constId = allocateConstantClassInstance(compiledClass.id);
|
| + FletchFunctionBuilder functionBuilderTarget = requireFletchFunctionBuilder(
|
| + function);
|
| + FletchClassBuilder classBuilder = context.backend.createTearoffClass(
|
| + functionBuilderTarget);
|
| + assert(classBuilder.fields == 0);
|
| + int constId = allocateConstantClassInstance(classBuilder.id);
|
| builder.loadConst(constId);
|
| applyVisitState();
|
| }
|
| @@ -869,7 +870,7 @@ abstract class CodegenVisitor
|
| builder.loadLiteralNull();
|
| }
|
| int methodId = context.backend.functionMethodId(function);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| invokeStatic(node, constId, parameterCount);
|
| }
|
|
|
| @@ -898,7 +899,7 @@ abstract class CodegenVisitor
|
| // TODO(ajohnsen): Define a known set of external functions we allow
|
| // calls to?
|
| }
|
| - CompiledFunction target = requireCompiledFunction(element);
|
| + FletchFunctionBuilder target = requireFletchFunctionBuilder(element);
|
| doStaticFunctionInvoke(node, target, arguments, callStructure);
|
| }
|
|
|
| @@ -927,7 +928,7 @@ abstract class CodegenVisitor
|
| registerStaticInvocation(function);
|
| int arity = function.functionSignature.parameterCount + 1;
|
| int methodId = context.backend.functionMethodId(function);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| invokeStatic(node, constId, arity);
|
| }
|
|
|
| @@ -945,12 +946,13 @@ abstract class CodegenVisitor
|
| MethodElement method,
|
| _) {
|
| loadThis();
|
| - CompiledFunction compiledFunctionTarget = requireCompiledFunction(method);
|
| - CompiledClass compiledClass = context.backend.createTearoffClass(
|
| - compiledFunctionTarget);
|
| - assert(compiledClass.fields == 1);
|
| - int constId = compiledFunction.allocateConstantFromClass(compiledClass.id);
|
| - builder.allocate(constId, compiledClass.fields);
|
| + FletchFunctionBuilder functionBuilderTarget = requireFletchFunctionBuilder(
|
| + method);
|
| + FletchClassBuilder classBuilder = context.backend.createTearoffClass(
|
| + functionBuilderTarget);
|
| + assert(classBuilder.fields == 1);
|
| + int constId = functionBuilder.allocateConstantFromClass(classBuilder.id);
|
| + builder.allocate(constId, classBuilder.fields);
|
| applyVisitState();
|
| }
|
|
|
| @@ -1079,10 +1081,10 @@ abstract class CodegenVisitor
|
|
|
| int computeFieldIndex(FieldElement field) {
|
| ClassElement classElement = field.enclosingClass;
|
| - // We know the enclosing class is compiled, so we can use the CompiledClass
|
| - // as an optimization for getting the number of super fields, thus we only
|
| - // have to iterate the fields of the enclosing class.
|
| - CompiledClass compiledClass = context.backend.registerClassElement(
|
| + // We know the enclosing class is compiled, so we can use the
|
| + // FletchClassBuilder as an optimization for getting the number of super
|
| + // fields, thus we only have to iterate the fields of the enclosing class.
|
| + FletchClassBuilder classBuilder = context.backend.registerClassElement(
|
| classElement);
|
| int i = 0;
|
| int fieldIndex;
|
| @@ -1094,7 +1096,7 @@ abstract class CodegenVisitor
|
| i++;
|
| });
|
| assert(fieldIndex != null);
|
| - fieldIndex += compiledClass.superclassFields;
|
| + fieldIndex += classBuilder.superclassFields;
|
| return fieldIndex;
|
| }
|
|
|
| @@ -1877,17 +1879,17 @@ abstract class CodegenVisitor
|
| CallStructure callStructure) {
|
| registerStaticInvocation(constructor);
|
| registerInstantiatedClass(constructor.enclosingClass);
|
| - CompiledFunction compiledFunction = context.backend.compileConstructor(
|
| + FletchFunctionBuilder functionBuilder = context.backend.compileConstructor(
|
| constructor,
|
| registry);
|
| doStaticFunctionInvoke(
|
| - node, compiledFunction, arguments, callStructure);
|
| + node, functionBuilder, arguments, callStructure);
|
| }
|
|
|
| void doConstConstructorInvoke(ConstantExpression constant) {
|
| var value = context.getConstantValue(constant);
|
| context.markConstantUsed(value);
|
| - int constId = compiledFunction.allocateConstant(value);
|
| + int constId = functionBuilder.allocateConstant(value);
|
| builder.loadConst(constId);
|
| }
|
|
|
| @@ -1972,10 +1974,10 @@ abstract class CodegenVisitor
|
| return;
|
| }
|
| // TODO(ahe): Remove ".declaration" when issue 23135 is fixed.
|
| - CompiledFunction compiledFunction =
|
| - requireCompiledFunction(constructor.declaration);
|
| + FletchFunctionBuilder functionBuilder =
|
| + requireFletchFunctionBuilder(constructor.declaration);
|
| doStaticFunctionInvoke(
|
| - node, compiledFunction, arguments, callStructure, factoryInvoke: true);
|
| + node, functionBuilder, arguments, callStructure, factoryInvoke: true);
|
| applyVisitState();
|
| }
|
|
|
| @@ -2090,7 +2092,7 @@ abstract class CodegenVisitor
|
| }
|
| registerStaticInvocation(getter);
|
| int methodId = context.backend.functionMethodId(getter);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| invokeStatic(node, constId, 0);
|
| applyVisitState();
|
| }
|
| @@ -2103,7 +2105,7 @@ abstract class CodegenVisitor
|
| visitForValue(rhs);
|
| registerStaticInvocation(setter);
|
| int methodId = context.backend.functionMethodId(setter);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| invokeStatic(node, constId, 1);
|
| applyVisitState();
|
| }
|
| @@ -2144,14 +2146,14 @@ abstract class CodegenVisitor
|
| // the closure.
|
| int thisClosureIndex = pushCapturedVariables(function);
|
|
|
| - CompiledClass compiledClass = context.backend.createClosureClass(
|
| + FletchClassBuilder classBuilder = context.backend.createClosureClass(
|
| function,
|
| closureEnvironment);
|
| - int classConstant = compiledFunction.allocateConstantFromClass(
|
| - compiledClass.id);
|
| + int classConstant = functionBuilder.allocateConstantFromClass(
|
| + classBuilder.id);
|
| bool immutable = !closureEnvironment.closures[function].free.any(
|
| closureEnvironment.shouldBeBoxed);
|
| - builder.allocate(classConstant, compiledClass.fields, immutable: immutable);
|
| + builder.allocate(classConstant, classBuilder.fields, immutable: immutable);
|
|
|
| if (thisClosureIndex >= 0) {
|
| builder.dup();
|
| @@ -2660,11 +2662,11 @@ abstract class CodegenVisitor
|
| var constString = context.backend.constantSystem.createString(
|
| new DartString.literal(name));
|
| context.markConstantUsed(constString);
|
| - builder.loadConst(compiledFunction.allocateConstant(constString));
|
| + builder.loadConst(functionBuilder.allocateConstant(constString));
|
| FunctionElement function = context.backend.fletchUnresolved;
|
| registerStaticInvocation(function);
|
| int methodId = context.backend.functionMethodId(function);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| builder.invokeStatic(constId, 1);
|
| }
|
|
|
| @@ -2680,7 +2682,7 @@ abstract class CodegenVisitor
|
| FunctionElement function = context.backend.fletchCompileError;
|
| registerStaticInvocation(function);
|
| int methodId = context.backend.functionMethodId(function);
|
| - int constId = compiledFunction.allocateConstantFromFunction(methodId);
|
| + int constId = functionBuilder.allocateConstantFromFunction(methodId);
|
| builder.invokeStatic(constId, 0);
|
| }
|
|
|
| @@ -2733,7 +2735,7 @@ abstract class CodegenVisitor
|
| context.backend.generateUnimplementedError(
|
| spannable,
|
| reason,
|
| - compiledFunction);
|
| + functionBuilder);
|
| }
|
|
|
| String toString() => "FunctionCompiler(${element.name})";
|
|
|