Files
sdk/pkg/kernel/lib/text/debug_printer.dart
Johnni Winther 80c9d57250 [kernel][Contexts] Rename VariableDeclaration to Variable
This is a step towards split variables from their declarations as part of encoding variables and their usage more precisely.

TEST=existing

Change-Id: I4a0eeb2947bdebce3667afda4e6cfbfdf5d7de18
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/504201
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
SLSA-Policy-Verified: SLSA Policy Verification Service <devtools-gerritcodereview-exitgate@google.com>
2026-05-21 01:51:10 -07:00

114 lines
2.9 KiB
Dart

// 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 'indentation.dart' show Indentation, Tagging;
class DebugPrinter extends VisitorDefault<void>
with Indentation, Tagging<Node>, VisitorVoidMixin {
@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 visitStaticInvocation(StaticInvocation node) {
openNode(node, '${node.runtimeType}', {'target': '${node.target}'});
node.visitChildren(this);
closeNode();
}
@override
void visitArguments(Arguments node) {
openNode(node, '${node.runtimeType}', {
'typeArgs': '${node.types}',
'positionalArgs': '${node.positional}',
'namedArgs': '${node.named}',
});
node.visitChildren(this);
closeNode();
}
@override
void visitAsExpression(AsExpression node) {
openNode(node, '${node.runtimeType}', {
'operand': '${node.operand}',
'DartType': '${node.type}',
});
node.visitChildren(this);
closeNode();
}
@override
void visitStringLiteral(StringLiteral node) {
openAndCloseNode(node, '${node.runtimeType}', {'value': '${node.value}'});
}
@override
void defaultVariable(Variable node) {
openNode(node, '${node.runtimeType}', {
'name': '${node.name ?? '--unnamed--'}',
'isFinal': '${node.isFinal}',
'isConst': '${node.isConst}',
'isInitializingFormal': '${node.isInitializingFormal}',
'isSuperInitializingFormal': '${node.isSuperInitializingFormal}',
});
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) {
DebugPrinter p = new DebugPrinter();
node.accept(p);
return p.sb.toString();
}
}