| // Copyright (c) 2016, 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. |
| |
| /// Helper for debug Kernel nodes. |
| |
| library kernel.debug; |
| |
| import 'package:kernel/ast.dart'; |
| import 'package:kernel/visitor.dart'; |
| |
| import '../util/util.dart' show Indentation, Tagging; |
| |
| class DebugPrinter extends Visitor with Indentation, Tagging<Node> { |
| @override |
| StringBuffer sb = new StringBuffer(); |
| |
| void visitNodeWithChildren(Node node, String type, [Map params]) { |
| openNode(node, type, params); |
| node.visitChildren(this); |
| closeNode(); |
| } |
| |
| @override |
| void defaultNode(Node node) { |
| visitNodeWithChildren(node, '${node.runtimeType}'); |
| } |
| |
| @override |
| void visitName(Name node) { |
| openAndCloseNode(node, '${node.runtimeType}', |
| {'name': node.text, 'library': node.library?.name}); |
| } |
| |
| @override |
| void visitIntLiteral(IntLiteral node) { |
| openAndCloseNode(node, '${node.runtimeType}', {'value': '${node.value}'}); |
| } |
| |
| @override |
| void visitVariableGet(VariableGet node) { |
| openAndCloseNode( |
| node, '${node.runtimeType}', {'variable': '${node.variable}'}); |
| } |
| |
| @override |
| void visitStaticGet(StaticGet node) { |
| openAndCloseNode(node, '${node.runtimeType}', {'target': '${node.target}'}); |
| } |
| |
| @override |
| void visitVariableDeclaration(VariableDeclaration node) { |
| openNode(node, '${node.runtimeType}', { |
| 'name': '${node.name ?? '--unnamed--'}', |
| 'isFinal': '${node.isFinal}', |
| 'isConst': '${node.isConst}', |
| 'isFieldFormal': '${node.isFieldFormal}' |
| }); |
| node.visitChildren(this); |
| closeNode(); |
| } |
| |
| @override |
| void visitInterfaceType(InterfaceType node) { |
| openNode(node, '${node.runtimeType}', { |
| 'name': '${node.classNode.name}', |
| }); |
| node.visitChildren(this); |
| closeNode(); |
| } |
| |
| /// Pretty-prints given node tree into string. |
| static String prettyPrint(Node node) { |
| var p = new DebugPrinter(); |
| node.accept(p); |
| return p.sb.toString(); |
| } |
| } |