module volt.visitor.debugprinter

Code Map

module volt.visitor.debugprinter;


class DebugMarker : Pass
{
public:
	this(text: string) { }
	fn transform(m: ir.Module) { }
	fn close() { }


protected:
	mText: string;
}

class DebugPrinter : Visitor, Pass
{
public:
	this(indentText: string, sink: void delegate(scope (const(scope (char)[]))) { }
	fn visitingError(n: ir.Node, msg: string) Status { }
	fn close() { }
	fn transform(m: ir.Module) { }
	fn transformExp(exp: ir.Exp) { }
	fn transformNode(n: ir.Node) { }
	fn leave(n: ir.Module) Status { }
	fn enter(n: ir.TopLevelBlock) Status { }
	fn leave(n: ir.TopLevelBlock) Status { }
	fn enter(n: ir.Import) Status { }
	fn leave(n: ir.Import) Status { }
	fn enter(n: ir.Unittest) Status { }
	fn leave(n: ir.Unittest) Status { }
	fn enter(n: ir.Class) Status { }
	fn leave(n: ir.Class) Status { }
	fn enter(n: ir._Interface) Status { }
	fn leave(n: ir._Interface) Status { }
	fn enter(n: ir.Struct) Status { }
	fn leave(n: ir.Struct) Status { }
	fn enter(n: ir.Union) Status { }
	fn leave(n: ir.Union) Status { }
	fn enter(n: ir.Variable) Status { }
	fn leave(n: ir.Variable) Status { }
	fn enter(n: ir.FunctionParam) Status { }
	fn leave(n: ir.FunctionParam) Status { }
	fn enter(n: ir.Enum) Status { }
	fn leave(n: ir.Enum) Status { }
	fn enter(n: ir.Condition) Status { }
	fn leave(n: ir.Condition) Status { }
	fn enter(n: ir.ConditionTopLevel) Status { }
	fn leave(n: ir.ConditionTopLevel) Status { }
	fn leave(n: ir.MixinFunction) Status { }
	fn leave(n: ir.MixinTemplate) Status { }
	fn visit(n: ir.QualifiedName) Status { }
	fn enter(n: ir.Module) Status { }
	fn enter(n: ir.MixinFunction) Status { }
	fn enter(n: ir.MixinTemplate) Status { }
	fn visit(n: ir.Identifier) Status { }
	fn enter(n: ir.ExpStatement) Status { }
	fn leave(n: ir.ExpStatement) Status { }
	fn enter(n: ir.ReturnStatement) Status { }
	fn leave(n: ir.ReturnStatement) Status { }
	fn enter(n: ir.BlockStatement) Status { }
	fn leave(n: ir.BlockStatement) Status { }
	fn enter(n: ir.AsmStatement) Status { }
	fn leave(n: ir.AsmStatement) Status { }
	fn enter(n: ir.IfStatement) Status { }
	fn leave(n: ir.IfStatement) Status { }
	fn enter(n: ir.WhileStatement) Status { }
	fn leave(n: ir.WhileStatement) Status { }
	fn enter(n: ir.DoStatement) Status { }
	fn leave(n: ir.DoStatement) Status { }
	fn enter(n: ir.ForStatement) Status { }
	fn leave(n: ir.ForStatement) Status { }
	fn enter(n: ir.ForeachStatement) Status { }
	fn leave(n: ir.ForeachStatement) Status { }
	fn enter(n: ir.LabelStatement) Status { }
	fn leave(n: ir.LabelStatement) Status { }
	fn enter(n: ir.SwitchStatement) Status { }
	fn leave(n: ir.SwitchStatement) Status { }
	fn enter(n: ir.SwitchCase) Status { }
	fn leave(n: ir.SwitchCase) Status { }
	fn enter(n: ir.GotoStatement) Status { }
	fn leave(n: ir.GotoStatement) Status { }
	fn enter(n: ir.WithStatement) Status { }
	fn leave(n: ir.WithStatement) Status { }
	fn enter(n: ir.SynchronizedStatement) Status { }
	fn leave(n: ir.SynchronizedStatement) Status { }
	fn enter(n: ir.TryStatement) Status { }
	fn leave(n: ir.TryStatement) Status { }
	fn enter(n: ir.ThrowStatement) Status { }
	fn leave(n: ir.ThrowStatement) Status { }
	fn enter(n: ir.ScopeStatement) Status { }
	fn leave(n: ir.ScopeStatement) Status { }
	fn enter(n: ir.PragmaStatement) Status { }
	fn leave(n: ir.PragmaStatement) Status { }
	fn enter(n: ir.ConditionStatement) Status { }
	fn leave(n: ir.ConditionStatement) Status { }
	fn enter(n: ir.MixinStatement) Status { }
	fn leave(n: ir.MixinStatement) Status { }
	fn enter(n: ir.AssertStatement) Status { }
	fn leave(n: ir.AssertStatement) Status { }
	fn visit(n: ir.ContinueStatement) Status { }
	fn visit(n: ir.BreakStatement) Status { }
	fn enter(n: ir.PointerType) Status { }
	fn leave(n: ir.PointerType) Status { }
	fn enter(n: ir.ArrayType) Status { }
	fn leave(n: ir.ArrayType) Status { }
	fn enter(n: ir.StaticArrayType) Status { }
	fn leave(n: ir.StaticArrayType) Status { }
	fn enter(n: ir.AmbiguousArrayType) Status { }
	fn leave(n: ir.AmbiguousArrayType) Status { }
	fn enter(n: ir.AAType) Status { }
	fn leave(n: ir.AAType) Status { }
	fn enter(n: ir.FunctionType) Status { }
	fn leave(n: ir.FunctionType) Status { }
	fn enter(n: ir.DelegateType) Status { }
	fn leave(n: ir.DelegateType) Status { }
	fn enter(n: ir.Function) Status { }
	fn leave(n: ir.Function) Status { }
	fn enter(n: ir.StorageType) Status { }
	fn leave(n: ir.StorageType) Status { }
	fn enter(n: ir.Attribute) Status { }
	fn leave(n: ir.Attribute) Status { }
	fn enter(n: ir.Alias) Status { }
	fn leave(n: ir.Alias) Status { }
	fn enter(n: ir.TypeOf) Status { }
	fn leave(n: ir.TypeOf) Status { }
	fn enter(n: ir.EnumDeclaration) Status { }
	fn leave(n: ir.EnumDeclaration) Status { }
	fn enter(n: ir.AliasStaticIf) Status { }
	fn leave(n: ir.AliasStaticIf) Status { }
	fn enter(n: ir.TemplateInstance) Status { }
	fn leave(n: ir.TemplateInstance) Status { }
	fn visit(n: ir.TemplateDefinition) Status { }
	fn visit(n: ir.NullType) Status { }
	fn visit(n: ir.PrimitiveType) Status { }
	fn visit(n: ir.TypeReference) Status { }
	fn visit(n: ir.AutoType) Status { }
	fn visit(n: ir.NoType) Status { }
	fn enter(ir.Exp, n: ir.Postfix) Status { }
	fn leave(ir.Exp, n: ir.Postfix) Status { }
	fn enter(ir.Exp, n: ir.Unary) Status { }
	fn leave(ir.Exp, n: ir.Unary) Status { }
	fn enter(ir.Exp, n: ir.BinOp) Status { }
	fn leave(ir.Exp, n: ir.BinOp) Status { }
	fn enter(ir.Exp, n: ir.Ternary) Status { }
	fn leave(ir.Exp, n: ir.Ternary) Status { }
	fn enter(ir.Exp, n: ir.ArrayLiteral) Status { }
	fn leave(ir.Exp, n: ir.ArrayLiteral) Status { }
	fn enter(ir.Exp, n: ir.AssocArray) Status { }
	fn leave(ir.Exp, n: ir.AssocArray) Status { }
	fn enter(ir.Exp, n: ir.Assert) Status { }
	fn leave(ir.Exp, n: ir.Assert) Status { }
	fn enter(ir.Exp, n: ir.StringImport) Status { }
	fn leave(ir.Exp, n: ir.StringImport) Status { }
	fn enter(ir.Exp, n: ir.Typeid) Status { }
	fn leave(ir.Exp, n: ir.Typeid) Status { }
	fn enter(ir.Exp, n: ir.IsExp) Status { }
	fn leave(ir.Exp, n: ir.IsExp) Status { }
	fn enter(ir.Exp, n: ir.FunctionLiteral) Status { }
	fn leave(ir.Exp, n: ir.FunctionLiteral) Status { }
	fn enter(ir.Exp, n: ir.StructLiteral) Status { }
	fn leave(ir.Exp, n: ir.StructLiteral) Status { }
	fn enter(ir.Exp, n: ir.UnionLiteral) Status { }
	fn leave(ir.Exp, n: ir.UnionLiteral) Status { }
	fn enter(ir.Exp, n: ir.ClassLiteral) Status { }
	fn leave(ir.Exp, n: ir.ClassLiteral) Status { }
	fn enter(ir.Exp, n: ir.Constant) Status { }
	fn leave(ir.Exp, n: ir.Constant) Status { }
	fn enter(ir.Exp, n: ir.TypeExp) Status { }
	fn leave(ir.Exp, n: ir.TypeExp) Status { }
	fn enter(ir.Exp, n: ir.StatementExp) Status { }
	fn leave(ir.Exp, n: ir.StatementExp) Status { }
	fn enter(ir.Exp, n: ir.VaArgExp) Status { }
	fn leave(ir.Exp, n: ir.VaArgExp) Status { }
	fn enter(ir.Exp, n: ir.PropertyExp) Status { }
	fn leave(ir.Exp, n: ir.PropertyExp) Status { }
	fn enter(ir.Exp, n: ir.BuiltinExp) Status { }
	fn leave(ir.Exp, n: ir.BuiltinExp) Status { }
	fn enter(ir.Exp, n: ir.AccessExp) Status { }
	fn leave(ir.Exp, n: ir.AccessExp) Status { }
	fn enter(ir.Exp, n: ir.RunExp) Status { }
	fn leave(ir.Exp, n: ir.RunExp) Status { }
	fn enter(ir.Exp, n: ir.ComposableString) Status { }
	fn leave(ir.Exp, n: ir.ComposableString) Status { }
	fn visit(ir.Exp, n: ir.ExpReference) Status { }
	fn visit(ir.Exp, n: ir.TokenExp) Status { }
	fn visit(ir.Exp, n: ir.StoreExp) Status { }
	fn visit(ir.Exp, n: ir.IdentifierExp) Status { }


protected:
	mFilename: string;
	mStream: OutputStream;
	mSink: void delegate(scope (const(scope (char)[]));
	mIndent: i32;
	mLastIndent: i32;
	mIndentText: string;


protected:
	fn enterNode(node: ir.Node) { }
	fn enterNode(node: ir.Node, extra: string) { }
	fn printTypeFields(node: ir.Node) { }
	fn leaveNode(node: ir.Node) { }
	fn visitRef(node: ir.Node, r: ir.Node) { }
	fn visitNamed(n: ir.Node) { }
	fn visitNames(name: string, mangledName: string) { }
	fn visitName(name: string) { }
	fn visitNode(node: ir.Node) { }
	fn twf(strings: scope (scope (string)[])) { }
	fn twfln(strings: scope (scope (string)[])) { }
	fn wf(strings: scope (scope (string)[])) { }
	fn wf(i: size_t) { }
	fn wfln(str: string) { }
	fn ln() { }
}

fn debugPrinter(m: ir.Module) { }
fn debugPrintNode(n: ir.Node) { }