| Index: sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes_sexpr.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes_sexpr.dart b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes_sexpr.dart
|
| deleted file mode 100644
|
| index c4621cb605b85f18245a5e028eacd95ae3172c4e..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes_sexpr.dart
|
| +++ /dev/null
|
| @@ -1,198 +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.
|
| -
|
| -library dart2js.ir_nodes_sexpr;
|
| -
|
| -import '../util/util.dart';
|
| -import 'cps_ir_nodes.dart';
|
| -
|
| -/// Generate a Lisp-like S-expression representation of an IR node as a string.
|
| -class SExpressionStringifier extends Visitor<String> with Indentation {
|
| - final Map<Definition, String> names = <Definition, String>{};
|
| -
|
| - int _valueCounter = 0;
|
| - int _continuationCounter = 0;
|
| -
|
| - String newValueName() => 'v${_valueCounter++}';
|
| - String newContinuationName() => 'k${_continuationCounter++}';
|
| -
|
| - String visitFunctionDefinition(FunctionDefinition node) {
|
| - String name = node.element.name;
|
| - names[node.returnContinuation] = 'return';
|
| - String parameters = node.parameters
|
| - .map((Parameter p) {
|
| - String name = p.hint.name;
|
| - names[p] = name;
|
| - return name;
|
| - })
|
| - .join(' ');
|
| - String body = indentBlock(() => visit(node.body));
|
| - return '$indentation(FunctionDefinition $name ($parameters return)\n'
|
| - '$body)';
|
| - }
|
| -
|
| - String visitLetPrim(LetPrim node) {
|
| - String name = newValueName();
|
| - names[node.primitive] = name;
|
| - String value = visit(node.primitive);
|
| - String body = visit(node.body);
|
| - return '$indentation(LetPrim $name $value)\n$body';
|
| - }
|
| -
|
| - String visitLetCont(LetCont node) {
|
| - String cont = newContinuationName();
|
| - names[node.continuation] = cont;
|
| - String parameters = node.continuation.parameters
|
| - .map((Parameter p) {
|
| - String name = newValueName();
|
| - names[p] = name;
|
| - return ' $name';
|
| - })
|
| - .join('');
|
| - String contBody = indentBlock(() => visit(node.continuation.body));
|
| - String body = visit(node.body);
|
| - String op = node.continuation.isRecursive ? 'LetCont*' : 'LetCont';
|
| - return '$indentation($op ($cont$parameters)\n'
|
| - '$contBody)\n'
|
| - '$body';
|
| - }
|
| -
|
| - String formatArguments(Invoke node) {
|
| - int positionalArgumentCount = node.selector.positionalArgumentCount;
|
| - List<String> args = new List<String>();
|
| - args.addAll(node.arguments.getRange(0, positionalArgumentCount)
|
| - .map((v) => names[v.definition]));
|
| - for (int i = 0; i < node.selector.namedArgumentCount; ++i) {
|
| - String name = node.selector.namedArguments[i];
|
| - Definition arg = node.arguments[positionalArgumentCount + i].definition;
|
| - args.add("($name: $arg)");
|
| - }
|
| - return args.join(' ');
|
| - }
|
| -
|
| - String visitInvokeStatic(InvokeStatic node) {
|
| - String name = node.target.name;
|
| - String cont = names[node.continuation.definition];
|
| - String args = formatArguments(node);
|
| - return '$indentation(InvokeStatic $name $args $cont)';
|
| - }
|
| -
|
| - String visitInvokeMethod(InvokeMethod node) {
|
| - String name = node.selector.name;
|
| - String rcv = names[node.receiver.definition];
|
| - String cont = names[node.continuation.definition];
|
| - String args = formatArguments(node);
|
| - return '$indentation(InvokeMethod $rcv $name $args $cont)';
|
| - }
|
| -
|
| - String visitInvokeSuperMethod(InvokeSuperMethod node) {
|
| - String name = node.selector.name;
|
| - String cont = names[node.continuation.definition];
|
| - String args = formatArguments(node);
|
| - return '$indentation(InvokeSuperMethod $name $args $cont)';
|
| - }
|
| -
|
| - String visitInvokeConstructor(InvokeConstructor node) {
|
| - String callName;
|
| - if (node.target.name.isEmpty) {
|
| - callName = '${node.type}';
|
| - } else {
|
| - callName = '${node.type}.${node.target.name}';
|
| - }
|
| - String cont = names[node.continuation.definition];
|
| - String args = formatArguments(node);
|
| - return '$indentation(InvokeConstructor $callName $args $cont)';
|
| - }
|
| -
|
| - String visitConcatenateStrings(ConcatenateStrings node) {
|
| - String cont = names[node.continuation.definition];
|
| - String args = node.arguments.map((v) => names[v.definition]).join(' ');
|
| - return '$indentation(ConcatenateStrings $args $cont)';
|
| - }
|
| -
|
| - String visitInvokeContinuation(InvokeContinuation node) {
|
| - String cont = names[node.continuation.definition];
|
| - String args = node.arguments.map((v) => names[v.definition]).join(' ');
|
| - String op =
|
| - node.isRecursive ? 'InvokeContinuation*' : 'InvokeContinuation';
|
| - return '$indentation($op $cont $args)';
|
| - }
|
| -
|
| - String visitBranch(Branch node) {
|
| - String condition = visit(node.condition);
|
| - String trueCont = names[node.trueContinuation.definition];
|
| - String falseCont = names[node.falseContinuation.definition];
|
| - return '$indentation(Branch $condition $trueCont $falseCont)';
|
| - }
|
| -
|
| - String visitConstant(Constant node) {
|
| - return '(Constant ${node.expression.value.toStructuredString()})';
|
| - }
|
| -
|
| - String visitThis(This node) {
|
| - return '(This)';
|
| - }
|
| -
|
| - String visitReifyTypeVar(ReifyTypeVar node) {
|
| - return '$indentation(ReifyTypeVar ${node.typeVariable.name})';
|
| - }
|
| -
|
| - String visitCreateFunction(CreateFunction node) {
|
| - String function = indentBlock(() => visit(node.definition));
|
| - return '(CreateFunction\n$function)';
|
| - }
|
| -
|
| - String visitParameter(Parameter node) {
|
| - // Parameters are visited directly in visitLetCont.
|
| - return '(Unexpected Parameter)';
|
| - }
|
| -
|
| - String visitContinuation(Continuation node) {
|
| - // Continuations are visited directly in visitLetCont.
|
| - return '(Unexpected Continuation)';
|
| - }
|
| -
|
| - String visitGetClosureVariable(GetClosureVariable node) {
|
| - return '(GetClosureVariable ${node.variable.name})';
|
| - }
|
| -
|
| - String visitSetClosureVariable(SetClosureVariable node) {
|
| - String value = names[node.value.definition];
|
| - String body = indentBlock(() => visit(node.body));
|
| - return '$indentation(SetClosureVariable ${node.variable.name} $value\n'
|
| - '$body)';
|
| - }
|
| -
|
| - String visitTypeOperator(TypeOperator node) {
|
| - String receiver = names[node.receiver.definition];
|
| - String cont = names[node.continuation.definition];
|
| - String operator = node.isTypeTest ? 'is' : 'as';
|
| - return '$indentation(TypeOperator $operator $receiver ${node.type} $cont)';
|
| - }
|
| -
|
| - String visitLiteralList(LiteralList node) {
|
| - String values = node.values.map((v) => names[v.definition]).join(' ');
|
| - return '(LiteralList ($values))';
|
| - }
|
| -
|
| - String visitLiteralMap(LiteralMap node) {
|
| - String keys = node.entries.map((e) => names[e.key.definition]).join(' ');
|
| - String values =
|
| - node.entries.map((e) => names[e.value.definition]).join(' ');
|
| - return '(LiteralMap ($keys) ($values))';
|
| - }
|
| -
|
| - String visitDeclareFunction(DeclareFunction node) {
|
| - String function = indentBlock(() => visit(node.definition));
|
| - String body = indentBlock(() => visit(node.body));
|
| - return '$indentation(DeclareFunction ${node.variable.name} =\n'
|
| - '$function in\n'
|
| - '$body)';
|
| - }
|
| -
|
| - String visitIsTrue(IsTrue node) {
|
| - String value = names[node.value.definition];
|
| - return '(IsTrue $value)';
|
| - }
|
| -}
|
|
|