package st.gravel.support.compiler.ast;
/*
This file is automatically generated from typed smalltalk source. Do not edit by hand.
(C) AG5.com
*/
import java.math.BigInteger;
import st.gravel.support.jvm.NonLocalReturn;
import st.gravel.support.compiler.ast.NodeVisitor;
import st.gravel.support.compiler.ast.NodeVisitor.NodeVisitor_Factory;
import st.gravel.support.compiler.ast.VariableDeclarationNode;
import st.gravel.support.compiler.ast.AssignmentNode;
import st.gravel.support.compiler.ast.SequenceNode;
import st.gravel.support.compiler.ast.CascadeNode;
import st.gravel.support.compiler.ast.Node;
import st.gravel.support.compiler.ast.TypeNode;
import st.gravel.support.compiler.ast.MessageNode;
import st.gravel.support.compiler.ast.Expression;
import st.gravel.support.compiler.ast.BlockNode;
import st.gravel.support.compiler.ast.PragmaNode;
import st.gravel.support.compiler.ast.Statement;
import st.gravel.support.compiler.ast.ArrayLiteralNode;
import st.gravel.support.compiler.ast.LiteralNode;
import st.gravel.support.compiler.ast.BlockTypeNode;
import st.gravel.support.compiler.ast.BooleanLiteralNode;
import st.gravel.support.compiler.ast.BottomTypeNode;
import st.gravel.support.compiler.ast.ByteArrayLiteralNode;
import st.gravel.support.compiler.ast.CharacterLiteralNode;
import st.gravel.support.compiler.ast.ClassTypeNode;
import st.gravel.support.compiler.ast.DoubleLiteralNode;
import st.gravel.support.compiler.ast.FixedPointLiteralNode;
import st.gravel.support.compiler.ast.FloatLiteralNode;
import st.gravel.support.compiler.ast.GenericTypeVariableNode;
import st.gravel.support.compiler.ast.InstanceTypeNode;
import st.gravel.support.compiler.ast.IntegerLiteralNode;
import st.gravel.support.compiler.ast.IntermediateNode;
import st.gravel.support.compiler.ast.IntermediateStatement;
import st.gravel.support.compiler.ast.MethodNode;
import st.gravel.support.compiler.ast.NamespacedTypeVariableNode;
import st.gravel.support.compiler.ast.NamespacedVariableNode;
import st.gravel.support.compiler.ast.NilLiteralNode;
import st.gravel.support.compiler.ast.ReferenceLiteralNode;
import st.gravel.support.compiler.ast.ReturnNode;
import st.gravel.support.compiler.ast.SelfTypeNode;
import st.gravel.support.compiler.ast.StringLiteralNode;
import st.gravel.support.compiler.ast.SymbolLiteralNode;
import st.gravel.support.compiler.ast.TypeDefNode;
import st.gravel.support.compiler.ast.TypeOrNode;
import st.gravel.support.compiler.ast.TypeVariableNode;
import st.gravel.support.compiler.ast.VariableNode;
public class SourcePrinter<X> extends NodeVisitor<Object> implements Cloneable {
public static SourcePrinter_Factory factory = new SourcePrinter_Factory();
st.gravel.core.Symbol _emphasis;
int _indentation;
Integer _precedence;
StringBuilder _stream;
public static class SourcePrinter_Factory<X> extends NodeVisitor_Factory<Object> {
public SourcePrinter<X> basicNew() {
SourcePrinter<X> newInstance = new SourcePrinter<X>();
newInstance.initialize();
return newInstance;
}
public SourcePrinter<Object> on_(final StringBuilder _aStream) {
return this.stream_precedence_indentation_emphasis_(_aStream, null, 0, null);
}
public SourcePrinter<Object> stream_precedence_indentation_emphasis_(final StringBuilder _aWriteStream, final Integer _anUndefinedObject, final int _anInteger, final st.gravel.core.Symbol _anUndefinedObject2) {
return this.basicNew().initializeStream_precedence_indentation_emphasis_(_aWriteStream, _anUndefinedObject, _anInteger, _anUndefinedObject2);
}
}
static public SourcePrinter<Object> _on_(Object receiver, final StringBuilder _aStream) {
return factory.on_(_aStream);
}
static public SourcePrinter<Object> _stream_precedence_indentation_emphasis_(Object receiver, final StringBuilder _aWriteStream, final Integer _anUndefinedObject, final int _anInteger, final st.gravel.core.Symbol _anUndefinedObject2) {
return factory.stream_precedence_indentation_emphasis_(_aWriteStream, _anUndefinedObject, _anInteger, _anUndefinedObject2);
}
public SourcePrinter<X> copy() {
try {
SourcePrinter<X> _temp1 = (SourcePrinter<X>) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public SourcePrinter crtab_(final int _i) {
_stream.append('\n');
for (int _x = 1; _x <= _i; _x++) {
_stream.append('\t');
}
return this;
}
public SourcePrinter emphasis_while_(final st.gravel.core.Symbol _anEmphasis, final st.gravel.support.jvm.Block0<Object> _aBlock) {
final st.gravel.core.Symbol _old;
_old = _emphasis;
_emphasis = _anEmphasis;
_aBlock.value();
_emphasis = _old;
return this;
}
public SourcePrinter_Factory<X> factory() {
return factory;
}
public SourcePrinter indentDo_(final st.gravel.support.jvm.Block0<Object> _aBlock) {
this.indent_do_(1, _aBlock);
return this;
}
public SourcePrinter indent_do_(final int _aLevel, final st.gravel.support.jvm.Block0<Object> _aBlock) {
final int _old;
_old = _indentation;
_indentation = (_indentation + _aLevel);
_aBlock.value();
_indentation = _old;
return this;
}
public SourcePrinter initializeStream_precedence_indentation_emphasis_(final StringBuilder _aWriteStream, final Integer _anUndefinedObject, final int _anInteger, final st.gravel.core.Symbol _anUndefinedObject2) {
_stream = _aWriteStream;
_precedence = _anUndefinedObject;
_indentation = _anInteger;
_emphasis = _anUndefinedObject2;
this.initialize();
return this;
}
public boolean printArguments_(final VariableDeclarationNode[] _args) {
if (_args.length == 0) {
return false;
}
boolean _temp1 = true;
for (final VariableDeclarationNode _arg : _args) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append(' ');
}
_stream.append(':');
SourcePrinter.this.visit_(_arg);
}
return true;
}
public SourcePrinter printAssignmentNode_(final AssignmentNode _aNode) {
this.visit_(_aNode.variable());
_stream.append(" := ");
this.indent_do_(2, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return SourcePrinter.this.visit_(_aNode.value());
}
});
return this;
}
public SourcePrinter printBlockBody_(final SequenceNode _aSequenceNode) {
boolean _indent;
_indent = false;
this.printComment_(_aSequenceNode.comment());
if (_aSequenceNode.temporaries().length != 0) {
if (_indent) {
SourcePrinter.this.crtab_(_indentation);
}
SourcePrinter.this.printTemporaries_(_aSequenceNode.temporaries());
_indent = true;
}
this.printStatements_indent_(_aSequenceNode.statements(), _indent);
return this;
}
public SourcePrinter printCascadeNode_(final CascadeNode _aCascadeNode) {
this.visit_precedence_indentation_(_aCascadeNode.receiver(), 0, _indentation);
for (int _i = 1; _i <= _aCascadeNode.messages().length; _i++) {
SourcePrinter.this.printMessage_(_aCascadeNode.messages()[_i - 1]);
if ((_i < _aCascadeNode.messages().length)) {
_stream.append(';');
}
}
return this;
}
public SourcePrinter printCommentOf_(final Node _aNode) {
if (this.printComment_(_aNode.comment())) {
SourcePrinter.this.crtab_(_indentation);
}
return this;
}
public boolean printComment_(final String[] _comment) {
if ((_comment == null) || (_comment.length == 0)) {
return false;
}
for (final String _each : _comment) {
SourcePrinter.this.crtab_(_indentation);
_stream.append('\"');
_stream.append(_each);
_stream.append('\"');
}
return true;
}
public boolean printDeclaredReturnType_(final TypeNode _aTypeNode) {
if (_aTypeNode == null) {
return false;
}
_stream.append(" {^");
this.visit_(_aTypeNode);
_stream.append('}');
return true;
}
public SourcePrinter printMessage_(final MessageNode _message) {
Expression _prev;
Expression _arg;
int _indent;
String _thisKey;
final String[] _keywords;
if (st.gravel.support.jvm.IntegerExtensions.equals_(_message.arguments().length, 0)) {
_stream.append(' ');
_stream.append(_message.selector());
return SourcePrinter.this;
}
_keywords = _message.keywords();
_prev = _message.receiver();
for (int _part = 1; _part <= _message.arguments().length; _part++) {
_arg = _message.arguments()[_part - 1];
_thisKey = _keywords[_part - 1];
if (_prev.isBlockNode() || ((_prev.isMessageNode() && (_prev.precedence() >= 3)) || ((_arg.isBlockNode() && (((BlockNode) _arg).isComplex() && (!st.gravel.support.jvm.StringExtensions.equals_(_thisKey, "do:")))) || ((_message.arguments().length > 2) || st.gravel.support.jvm.ArrayExtensions.includes_(new String[] { "ifTrue:ifFalse:", "ifFalse:ifTrue:" }, _message.selector()))))) {
SourcePrinter.this.crtab_((_indentation + 1));
_indent = 1;
} else {
_stream.append(' ');
_indent = 0;
}
_stream.append(_thisKey);
_stream.append(' ');
SourcePrinter.this.visit_precedence_indentation_(_arg, st.gravel.support.jvm.IntegerExtensions.equals_(_message.precedence(), 2) ? 1 : _message.precedence(), (_indentation + _indent));
_prev = _arg;
}
return this;
}
public SourcePrinter printPragmas_(final PragmaNode[] _pragmas) {
for (final PragmaNode _each : _pragmas) {
SourcePrinter.this.crtab_(_indentation);
SourcePrinter.this.visit_(_each);
}
return this;
}
public SourcePrinter printStatements_indent_(final Statement[] _stmts, final boolean _aBoolean) {
final int _show;
Statement _thisStatement;
boolean _indent;
_indent = _aBoolean;
_show = _stmts.length;
for (int _i = 1; _i <= _show; _i++) {
_thisStatement = _stmts[_i - 1];
if ((_thisStatement.comment().length > 0)) {
if (st.gravel.support.jvm.IntegerExtensions.equals_(_i, 1)) {
SourcePrinter.this.crtab_(_indentation);
}
_stream.append('\t');
}
if (_indent) {
SourcePrinter.this.crtab_(_indentation);
}
SourcePrinter.this.visit_(_thisStatement);
if ((_i < _show)) {
_stream.append('.');
}
_indent = true;
}
return this;
}
public SourcePrinter printTemporaries_(final VariableDeclarationNode[] _aCollection) {
_stream.append("| ");
for (final VariableDeclarationNode _temp : _aCollection) {
SourcePrinter.this.visit_(_temp);
_stream.append(' ');
}
_stream.append('|');
return this;
}
public SourcePrinter printTypeCastOf_using_(final Node _aNode, final st.gravel.support.jvm.Block0<Object> _aBlock) {
_aBlock.value();
return this;
}
public SourcePrinter printTypeNode_(final TypeNode _aNode) {
_stream.append('{');
this.visit_(_aNode);
_stream.append('}');
return this;
}
public SourcePrinter printValueNode_using_parenthesize_(final Node _aNode, final st.gravel.support.jvm.Block0<Object> _aBlock, final boolean _aBool) {
this.printCommentOf_(_aNode);
this.printTypeCastOf_using_(_aNode, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return SourcePrinter.this.when_parenthesize_(_aBool, _aBlock);
}
});
return this;
}
public SourcePrinter pvtSetPrecedence_indentation_emphasis_(final Integer _anIntegerOrNil, final int _aLevel, final st.gravel.core.Symbol _anObject) {
_precedence = _anIntegerOrNil;
_indentation = _aLevel;
_emphasis = _anObject;
return this;
}
public SourcePrinter pvtVisit_(final Node _anObject) {
if (_anObject == null) {
return SourcePrinter.this;
}
_anObject.accept_(this);
return this;
}
@Override
public SourcePrinter visitArrayLiteralNode_(final ArrayLiteralNode _anObject) {
_stream.append("#(");
boolean _temp1 = true;
for (final LiteralNode _each : _anObject.elements()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append(' ');
}
SourcePrinter.this.visit_(_each);
}
_stream.append(')');
return this;
}
@Override
public SourcePrinter visitAssignmentNode_(final AssignmentNode _aNode) {
this.printValueNode_using_parenthesize_(_aNode, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return SourcePrinter.this.printAssignmentNode_(_aNode);
}
}, (_precedence != null) && (_precedence < 4));
return this;
}
@Override
public SourcePrinter visitBlockNode_(final BlockNode _aNode) {
this.printValueNode_using_parenthesize_(_aNode, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
final boolean _hasArgs;
final boolean _hasDeclaredReturnType;
if (_aNode.isComplex()) {
SourcePrinter.this.crtab_(_indentation);
}
_stream.append('[');
_hasArgs = SourcePrinter.this.printArguments_(_aNode.arguments());
_hasDeclaredReturnType = SourcePrinter.this.printDeclaredReturnType_(_aNode.returnType());
if (_hasArgs || _hasDeclaredReturnType) {
_stream.append(' ');
_stream.append("| ");
}
if (_aNode.isComplex()) {
SourcePrinter.this.crtab_(_indentation);
}
SourcePrinter.this.visit_(_aNode.body());
return _stream.append(']');
}
}, false);
return this;
}
@Override
public SourcePrinter visitBlockTypeNode_(final BlockTypeNode _aNode) {
_stream.append('[');
boolean _temp1 = true;
for (final TypeNode _each : _aNode.arguments()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append(',');
_stream.append(' ');
}
if (_each == null) {
_stream.append("Unknown");
} else {
SourcePrinter.this.visit_(_each);
}
}
if (_aNode.returnType() != null) {
if (_aNode.arguments().length != 0) {
_stream.append(',');
_stream.append(' ');
}
SourcePrinter.this.visit_(_aNode.returnType());
}
_stream.append(']');
return this;
}
@Override
public SourcePrinter visitBooleanLiteralNode_(final BooleanLiteralNode _anObject) {
if (_anObject.value()) {
_stream.append("true");
} else {
_stream.append("false");
}
return this;
}
@Override
public SourcePrinter visitBottomTypeNode_(final BottomTypeNode _anObject) {
_stream.append("Bottom");
return this;
}
@Override
public SourcePrinter visitByteArrayLiteralNode_(final ByteArrayLiteralNode _anObject) {
_stream.append("#[");
boolean _temp1 = true;
for (final byte _each : _anObject.value()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append(' ');
}
_stream.append("" + (_each & 255));
}
_stream.append(']');
return this;
}
@Override
public SourcePrinter visitCascadeNode_(final CascadeNode _aNode) {
final boolean _parenthesize;
_parenthesize = (_precedence != null) && (_precedence < 4);
if (_parenthesize) {
_stream.append('(');
}
this.printCascadeNode_(_aNode);
if (_parenthesize) {
_stream.append(')');
}
return this;
}
@Override
public SourcePrinter visitCharacterLiteralNode_(final CharacterLiteralNode _aNode) {
_stream.append('$');
_stream.append(_aNode.value());
return this;
}
@Override
public SourcePrinter visitClassTypeNode_(final ClassTypeNode _anObject) {
this.visit_(_anObject.node());
_stream.append(" class");
return this;
}
@Override
public SourcePrinter visitDoubleLiteralNode_(final DoubleLiteralNode _anObject) {
_stream.append(_anObject.valueString());
return this;
}
@Override
public SourcePrinter visitFixedPointLiteralNode_(final FixedPointLiteralNode _anObject) {
_stream.append(_anObject.valueString());
return this;
}
@Override
public SourcePrinter visitFloatLiteralNode_(final FloatLiteralNode _anObject) {
_stream.append(_anObject.valueString());
return this;
}
@Override
public SourcePrinter visitGenericTypeVariableNode_(final GenericTypeVariableNode _aNode) {
this.visit_(_aNode.root());
_stream.append('[');
boolean _temp1 = true;
for (final TypeNode _each : _aNode.arguments()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append(',');
_stream.append(' ');
}
SourcePrinter.this.visit_(_each);
}
_stream.append(']');
return this;
}
@Override
public SourcePrinter visitInstanceTypeNode_(final InstanceTypeNode _anObject) {
_stream.append("Instance");
return this;
}
@Override
public SourcePrinter visitIntegerLiteralNode_(final IntegerLiteralNode _anObject) {
_stream.append("" + _anObject.integer());
return this;
}
@Override
public SourcePrinter visitIntermediateNode_(final IntermediateNode _anObject) {
this.visit_(_anObject.unoptimized());
return this;
}
@Override
public SourcePrinter visitIntermediateStatement_(final IntermediateStatement _anObject) {
this.visit_(_anObject.unoptimized());
return this;
}
@Override
public SourcePrinter visitMessageNode_(final MessageNode _aNode) {
final boolean _parenthesize;
_parenthesize = (_precedence != null) && ((_aNode.precedence() > _precedence) || (st.gravel.support.jvm.IntegerExtensions.equals_(_precedence, 3) && st.gravel.support.jvm.IntegerExtensions.equals_(_aNode.precedence(), _precedence)));
this.printValueNode_using_parenthesize_(_aNode, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
SourcePrinter.this.visit_precedence_(_aNode.receiver(), _aNode.precedence());
return SourcePrinter.this.printMessage_(_aNode);
}
}, _parenthesize);
return this;
}
@Override
public SourcePrinter visitMethodNode_(final MethodNode _aNode) {
this.emphasis_while_(st.gravel.core.Symbol.value("bold"), new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
if (st.gravel.support.jvm.IntegerExtensions.equals_(_aNode.precedence(), 1)) {
return _stream.append(_aNode.selector());
} else {
return st.gravel.support.jvm.ArrayExtensions.with_do_separatedBy_(_aNode.keywords(), _aNode.arguments(), new st.gravel.support.jvm.Block2<Object, String, VariableDeclarationNode>() {
@Override
public Object value_value_(final String _s, final VariableDeclarationNode _arg) {
_stream.append(_s);
_stream.append(' ');
return SourcePrinter.this.visit_(_arg);
}
}, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return _stream.append(' ');
}
});
}
}
});
this.printDeclaredReturnType_(_aNode.returnType());
this.indentDo_(new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return SourcePrinter.this.printComment_(_aNode.comment());
}
});
this.indentDo_(new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return SourcePrinter.this.printPragmas_(_aNode.pragmas());
}
});
if (_aNode.body().isEmpty()) {
return SourcePrinter.this;
}
this.indentDo_(new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
SourcePrinter.this.crtab_(_indentation);
return SourcePrinter.this.printBlockBody_(_aNode.body());
}
});
return this;
}
@Override
public SourcePrinter visitNamespacedTypeVariableNode_(final NamespacedTypeVariableNode _anObject) {
boolean _temp1 = true;
for (final String _each : _anObject.path()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append('.');
}
_stream.append(_each);
}
return this;
}
@Override
public SourcePrinter visitNamespacedVariableNode_(final NamespacedVariableNode _anObject) {
boolean _temp1 = true;
for (final String _each : _anObject.path()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append('.');
}
_stream.append(_each);
}
return this;
}
@Override
public SourcePrinter visitNilLiteralNode_(final NilLiteralNode _anObject) {
_stream.append("nil");
return this;
}
@Override
public SourcePrinter visitPragmaNode_(final PragmaNode _aPragmaNode) {
final MessageNode _aNode;
_stream.append('<');
_aNode = _aPragmaNode.expression();
if (st.gravel.support.jvm.IntegerExtensions.equals_(_aNode.arguments().length, 0)) {
_stream.append(_aNode.selector());
} else {
st.gravel.support.jvm.ArrayExtensions.with_do_separatedBy_(_aNode.keywords(), _aNode.arguments(), new st.gravel.support.jvm.Block2<Object, String, Expression>() {
@Override
public Object value_value_(final String _key, final Expression _value) {
_stream.append(_key);
_stream.append(' ');
return SourcePrinter.this.visit_(_value);
}
}, new st.gravel.support.jvm.Block0<Object>() {
@Override
public Object value() {
return _stream.append(' ');
}
});
}
_stream.append('>');
return this;
}
@Override
public SourcePrinter visitReferenceLiteralNode_(final ReferenceLiteralNode _anObject) {
_stream.append("#{");
boolean _temp1 = true;
for (final String _each : _anObject.path()) {
if (_temp1) {
_temp1 = false;
} else {
_stream.append('.');
}
_stream.append(_each);
}
_stream.append('}');
return this;
}
@Override
public SourcePrinter visitReturnNode_(final ReturnNode _aNode) {
this.printCommentOf_(_aNode);
_stream.append('^');
this.visit_(_aNode.value());
return this;
}
@Override
public SourcePrinter visitSelfTypeNode_(final SelfTypeNode _anObject) {
_stream.append("Self");
return this;
}
@Override
public SourcePrinter visitSequenceNode_(final SequenceNode _aNode) {
this.printBlockBody_(_aNode);
return this;
}
@Override
public SourcePrinter visitStringLiteralNode_(final StringLiteralNode _anObject) {
_stream.append('\'');
int _temp2 = _anObject.value().length();
for (int _temp1 = 0; _temp1 < _temp2; _temp1++) {
char _ch = _anObject.value().charAt(_temp1);
_stream.append(_ch);
if (_ch == '\'') {
_stream.append('\'');
}
}
_stream.append('\'');
return this;
}
@Override
public SourcePrinter visitSymbolLiteralNode_(final SymbolLiteralNode _anObject) {
_stream.append("" + _anObject.value());
return this;
}
@Override
public SourcePrinter visitTypeDefNode_(final TypeDefNode _anObject) {
this.visit_(_anObject.node());
_stream.append(" def");
return this;
}
@Override
public SourcePrinter visitTypeOrNode_(final TypeOrNode _anObject) {
this.visit_(_anObject.left());
_stream.append(" | ");
this.visit_(_anObject.right());
return this;
}
@Override
public SourcePrinter visitTypeVariableNode_(final TypeVariableNode _anObject) {
_stream.append(_anObject.name());
return this;
}
@Override
public SourcePrinter visitVariableDeclarationNode_(final VariableDeclarationNode _anObject) {
_stream.append(_anObject.name());
if (_anObject.type() != null) {
_stream.append(' ');
SourcePrinter.this.printTypeNode_(_anObject.type());
}
return this;
}
@Override
public SourcePrinter visitVariableNode_(final VariableNode _anObject) {
_stream.append(_anObject.name());
return this;
}
@Override
public SourcePrinter visit_(final Node _aNode) {
_precedence = null;
this.pvtVisit_(_aNode);
return this;
}
public SourcePrinter visit_precedence_(final Node _aNode, final Integer _anIntegerOrNil) {
this.visit_precedence_indentation_(_aNode, _anIntegerOrNil, _indentation);
return this;
}
public SourcePrinter visit_precedence_indentation_(final Node _aNode, final Integer _anIntegerOrNil, final int _aLevel) {
this.visit_precedence_indentation_emphasis_(_aNode, _anIntegerOrNil, _aLevel, _emphasis);
return this;
}
public SourcePrinter visit_precedence_indentation_emphasis_(final Node _aNode, final Integer _anIntegerOrNil, final int _aLevel, final st.gravel.core.Symbol _anObject) {
this.copy().pvtSetPrecedence_indentation_emphasis_(_anIntegerOrNil, _aLevel, _anObject).pvtVisit_(_aNode);
return this;
}
public SourcePrinter when_parenthesize_(final boolean _aBoolean, final st.gravel.support.jvm.Block0<Object> _aBlock) {
if (_aBoolean) {
_stream.append('(');
_aBlock.value();
_stream.append(')');
} else {
_aBlock.value();
}
return this;
}
}