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.SourcePosition;
import st.gravel.support.compiler.ast.NodeVisitor;
import java.util.Set;
import java.util.HashSet;
import st.gravel.support.compiler.ast.AbsoluteReference;
import st.gravel.support.compiler.ast.SourcePrinter;
import st.gravel.support.compiler.ast.Expression;
import st.gravel.support.compiler.ast.SourcePointerRemover;
abstract public class Node extends Object implements Cloneable {
public static Node_Factory factory = new Node_Factory();
SourcePosition _sourcePosition;
public static class Node_Factory extends st.gravel.support.jvm.SmalltalkFactory {
public Node basicNew() {
throw new RuntimeException("Node is an abstract class");
}
}
public <X> X accept_(final NodeVisitor<X> _visitor) {
return _visitor.visitNode_(this);
}
public java.util.Set<String> allLocalVarNames() {
final java.util.Set<String>[] _s;
_s = new java.util.Set[1];
_s[0] = new java.util.HashSet();
this.withAllNodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _n) {
return _n.localVarNamesDo_(new st.gravel.support.jvm.Block1<Object, String>() {
@Override
public Object value_(final String _nm) {
return _s[0].add(_nm);
}
});
}
});
return _s[0];
}
public boolean allNodesContains_(final st.gravel.support.jvm.Block1<Boolean, Node> _aBlock) {
final Object _temp1 = new Object();
try {
this.allNodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
if (_aBlock.value_(_each)) {
throw new NonLocalReturn(true, _temp1);
}
return Node.this;
}
});
return false;
} catch (NonLocalReturn nlr) {
if (nlr.marker == _temp1) {
return (boolean) nlr.returnValue;
} else {
throw nlr;
}
}
}
public Node allNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
return _each.withAllNodesDo_(_aBlock);
}
});
return this;
}
public Node allNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
if (!_pruneBlock.value_(_each)) {
return _each.withAllNodesDo_pruneWhere_(_aBlock, _pruneBlock);
}
return Node.this;
}
});
return this;
}
public String[] comment() {
return new String[] {};
}
public Node copy() {
try {
Node _temp1 = (Node) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public boolean equals(final Object _anObject) {
if (!(this.getClass() == _anObject.getClass())) {
return false;
}
if (this._sourcePosition == null) {
if (!(((Node) _anObject)._sourcePosition == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._sourcePosition, ((Node) _anObject)._sourcePosition)) {
return false;
}
}
return true;
}
public Node_Factory factory() {
return factory;
}
public String getDiskSource() {
if (_sourcePosition == null) {
return null;
}
return st.gravel.support.jvm.FilenameExtensions.contentsFrom_to_(_sourcePosition.sourceFile().asFile(), _sourcePosition.start(), _sourcePosition.stop());
}
public AbsoluteReference globalNamespace() {
return null;
}
public String globalVarName() {
return null;
}
public int hashCode() {
return 3434;
}
public boolean hasReturnStatements() {
final Object _temp1 = new Object();
try {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
if (_each.hasReturnStatements()) {
throw new NonLocalReturn(true, _temp1);
}
return Node.this;
}
});
return false;
} catch (NonLocalReturn nlr) {
if (nlr.marker == _temp1) {
return (boolean) nlr.returnValue;
} else {
throw nlr;
}
}
}
public boolean hasSuperSend() {
return this.allNodesContains_(((st.gravel.support.jvm.Block1<Boolean, Node>) (new st.gravel.support.jvm.Block1<Boolean, Node>() {
@Override
public Boolean value_(final Node _each) {
return (boolean) _each.isSuperNode();
}
})));
}
public boolean hierarchyReferencesSelfOrInstanceType() {
final Object _temp1 = new Object();
try {
this.withAllNodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _node) {
if (_node.referencesSelfOrInstanceType()) {
throw new NonLocalReturn(true, _temp1);
}
return Node.this;
}
});
return false;
} catch (NonLocalReturn nlr) {
if (nlr.marker == _temp1) {
return (boolean) nlr.returnValue;
} else {
throw nlr;
}
}
}
public boolean hierarchyReferencesVariable_(final String _aString) {
final Object _temp1 = new Object();
try {
this.withAllNodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _node) {
if (_node.referencesVariable_(_aString)) {
throw new NonLocalReturn(true, _temp1);
}
return Node.this;
}
});
return false;
} catch (NonLocalReturn nlr) {
if (nlr.marker == _temp1) {
return (boolean) nlr.returnValue;
} else {
throw nlr;
}
}
}
public Node initialize() {
return this;
}
public boolean isArrayLiteralNode() {
return false;
}
public boolean isAssignable() {
return false;
}
public boolean isAssignmentNode() {
return false;
}
public boolean isBlockNode() {
return false;
}
public boolean isBlockNodeWithReturnStatements() {
return false;
}
public boolean isBlockTypeNode() {
return false;
}
public boolean isBooleanLiteralNode() {
return false;
}
public boolean isBottomTypeNode() {
return false;
}
public boolean isByteArrayLiteralNode() {
return false;
}
public boolean isCharacterLiteralNode() {
return false;
}
public boolean isCreateHolderNode() {
return false;
}
public boolean isFixedPointLiteralNode() {
return false;
}
public boolean isGenericTypeVariableNode() {
return false;
}
public boolean isIntegerLiteralNode() {
return false;
}
public boolean isMessageNode() {
return false;
}
public boolean isMetaNode() {
return false;
}
public boolean isNilLiteralNode() {
return false;
}
public boolean isNonLocalReturnNode() {
return false;
}
public boolean isReturnNode() {
return false;
}
public boolean isSelfNode() {
return false;
}
public boolean isSelfTypeNode() {
return false;
}
public boolean isSequenceNode() {
return false;
}
public boolean isStringLiteralNode() {
return false;
}
public boolean isSuperNode() {
return false;
}
public boolean isSymbolLiteralNode() {
return false;
}
public boolean isTypeDefNode() {
return false;
}
public boolean isTypeVariableNode() {
return false;
}
public boolean isVariableNode() {
return false;
}
public Node localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
return this;
}
public abstract Node nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock);
public st.gravel.core.Symbol packageName() {
if (_sourcePosition == null) {
return null;
}
return _sourcePosition.sourceFile().packageName();
}
public Node postCopy() {
return this;
}
public Node prettySourceOn_(final StringBuilder _aStream) {
SourcePrinter.factory.on_(_aStream).visit_(this);
return this;
}
public String prettySourceString() {
final StringBuilder _aStream;
_aStream = st.gravel.support.jvm.WriteStreamFactory.on_(new String());
this.prettySourceOn_(_aStream);
return _aStream.toString();
}
public Node printOn_(final StringBuilder _aStream) {
final String _title;
_title = this.factory().toString();
_aStream.append(st.gravel.support.jvm.CharacterExtensions.isVowel(_title.charAt(0)) ? "an " : "a ");
_aStream.append(_title);
_aStream.append('[');
this.sourceOn_(_aStream);
_aStream.append(']');
return this;
}
public Node pvtSetSourcePosition_(final SourcePosition _aSourcePosition) {
_sourcePosition = _aSourcePosition;
return this;
}
public boolean referencesSelfOrInstanceType() {
return false;
}
public boolean referencesVariable_(final String _aString) {
return false;
}
public Expression returnValue() {
return null;
}
public abstract Node sourceOn_(final StringBuilder _aStream);
public SourcePosition sourcePosition() {
return _sourcePosition;
}
public String sourceString() {
final StringBuilder _aStream;
_aStream = st.gravel.support.jvm.WriteStreamFactory.on_(new String());
this.sourceOn_(_aStream);
return _aStream.toString();
}
public String toString() {
final StringBuilder _aStream;
_aStream = st.gravel.support.jvm.WriteStreamFactory.on_(new String());
_aStream.append(this.factory().toString());
_aStream.append('[');
this.sourceOn_(_aStream);
_aStream.append(']');
return _aStream.toString();
}
public Node withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
_aBlock.value_(this);
this.allNodesDo_(_aBlock);
return this;
}
public Node withAllNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
_aBlock.value_(this);
this.allNodesDo_pruneWhere_(_aBlock, _pruneBlock);
return this;
}
public Node withoutSourcePointers() {
return SourcePointerRemover.factory.visit_(this);
}
public Node withSourcePosition_(final SourcePosition _aSourcePosition) {
if (_sourcePosition == _aSourcePosition) {
return Node.this;
}
return this.copy().pvtSetSourcePosition_(_aSourcePosition);
}
}