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.Node; import st.gravel.support.compiler.ast.Node.Node_Factory; import st.gravel.support.compiler.ast.VariableDeclarationNode; import st.gravel.support.compiler.ast.Statement; import st.gravel.support.compiler.ast.Expression; import st.gravel.support.compiler.ast.ReturnNode; import st.gravel.support.compiler.ast.NodeVisitor; import st.gravel.support.compiler.ast.NilLiteralNode; import st.gravel.support.compiler.ast.SourcePrinter; import st.gravel.support.compiler.ast.SourcePosition; public class SequenceNode extends Node implements Cloneable { public static SequenceNode_Factory factory = new SequenceNode_Factory(); Statement[] _statements; VariableDeclarationNode[] _temporaries; public static class SequenceNode_Factory extends Node_Factory { public SequenceNode basicNew() { SequenceNode newInstance = new SequenceNode(); newInstance.initialize(); return newInstance; } public SequenceNode empty() { return this.temporaries_statements_(new VariableDeclarationNode[] {}, new Statement[] {}); } public SequenceNode return_(final Expression _aNode) { return this.statement_(ReturnNode.factory.value_(_aNode)); } public SequenceNode statement_(final Statement _aNode) { return this.temporaries_statements_(new VariableDeclarationNode[] {}, st.gravel.support.jvm.ArrayFactory.with_(_aNode)); } public SequenceNode temporaries_statements_(final VariableDeclarationNode[] _anArray, final Statement[] _anArray2) { return ((SequenceNode) this.basicNew().initializeTemporaries_statements_(_anArray, _anArray2)); } } static public SequenceNode _empty(Object receiver) { return factory.empty(); } static public SequenceNode _return_(Object receiver, final Expression _aNode) { return factory.return_(_aNode); } static public SequenceNode _statement_(Object receiver, final Statement _aNode) { return factory.statement_(_aNode); } static public SequenceNode _temporaries_statements_(Object receiver, final VariableDeclarationNode[] _anArray, final Statement[] _anArray2) { return factory.temporaries_statements_(_anArray, _anArray2); } @Override public <X> X accept_(final NodeVisitor<X> _visitor) { return _visitor.visitSequenceNode_(this); } @Override public SequenceNode 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; } @Override public SequenceNode 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 SequenceNode.this; } }); return this; } public Statement asSimpleExpression() { st.gravel.support.jvm.ObjectExtensions.assert_(this, this.isSimpleExpressionSequence()); if (_statements.length == 0) { return NilLiteralNode.factory.basicNew(); } return _statements[0]; } public SequenceNode copy() { try { SequenceNode _temp1 = (SequenceNode) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } @Override public boolean equals(final Object _anObject) { if (!super.equals(_anObject)) { return false; } if (this._temporaries == null) { if (!(((SequenceNode) _anObject)._temporaries == null)) { return false; } } else { if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._temporaries, ((SequenceNode) _anObject)._temporaries)) { return false; } } if (this._statements == null) { if (!(((SequenceNode) _anObject)._statements == null)) { return false; } } else { if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._statements, ((SequenceNode) _anObject)._statements)) { return false; } } return true; } public SequenceNode_Factory factory() { return factory; } @Override public int hashCode() { return ((super.hashCode() ^ java.util.Arrays.hashCode(_temporaries)) ^ java.util.Arrays.hashCode(_statements)); } public SequenceNode initializeTemporaries_statements_(final VariableDeclarationNode[] _anArray, final Statement[] _anArray2) { _temporaries = _anArray; _statements = _anArray2; this.initialize(); return this; } public boolean isComplex() { return (_statements.length > 1) || (_temporaries.length != 0); } public boolean isEmpty() { return (_statements.length == 0) && (_temporaries.length == 0); } public boolean isNilSequence() { return (_temporaries.length == 0) && (st.gravel.support.jvm.IntegerExtensions.equals_(_statements.length, 1) && _statements[0].isNilLiteralNode()); } @Override public boolean isSequenceNode() { return true; } public boolean isSimpleExpressionSequence() { return (_temporaries.length == 0) && ((_statements.length == 0) || (st.gravel.support.jvm.IntegerExtensions.equals_(_statements.length, 1) && (!_statements[0].isReturnNode()))); } @Override public SequenceNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) { return this; } public SequenceNode methodSourceOn_(final StringBuilder _aStream) { this.sourceTemporariesOn_(_aStream); boolean _temp1 = true; for (final Statement _stmt : _statements) { if (_temp1) { _temp1 = false; } else { _aStream.append('.'); } _aStream.append('\n'); _aStream.append('\t'); _stmt.innerSourceOn_(_aStream); } return this; } @Override public SequenceNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { for (final Statement _temp1 : _statements) { _aBlock.value_(_temp1); } return this; } @Override public SequenceNode prettySourceOn_(final StringBuilder _aStream) { SourcePrinter.factory.on_(_aStream).visit_(this); return this; } @Override public SequenceNode 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; } @Override public SequenceNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) { _sourcePosition = _aSourcePosition; return this; } @Override public boolean referencesSelfOrInstanceType() { return st.gravel.support.jvm.ArrayExtensions.anySatisfy_(_temporaries, new st.gravel.support.jvm.Predicate1<VariableDeclarationNode>() { @Override public boolean value_(final VariableDeclarationNode _temporary) { return (_temporary.type() != null) && _temporary.type().referencesSelfOrInstanceType(); } }); } public boolean returnsNothingButSelf() { final Object _temp1 = new Object(); try { this.allNodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() { @Override public Object value_(final Node _each) { if (_each.isReturnNode()) { final ReturnNode _returnNode; _returnNode = ((ReturnNode) _each); if (!_returnNode.value().isSelfNode()) { throw new NonLocalReturn(false, _temp1); } } return SequenceNode.this; } }); return true; } catch (NonLocalReturn nlr) { if (nlr.marker == _temp1) { return (boolean) nlr.returnValue; } else { throw nlr; } } } @Override public SequenceNode sourceOn_(final StringBuilder _aStream) { this.sourceTemporariesOn_(_aStream); if ((_temporaries.length != 0) && (_statements.length != 0)) { _aStream.append('\n'); } boolean _temp1 = true; for (final Statement _stmt : _statements) { if (_temp1) { _temp1 = false; } else { _aStream.append('.'); _aStream.append('\n'); } _aStream.append(' '); _stmt.innerSourceOn_(_aStream); } return this; } public SequenceNode sourceTemporariesOn_(final StringBuilder _aStream) { if (_temporaries.length != 0) { _aStream.append('|'); _aStream.append(' '); for (final VariableDeclarationNode _arg : _temporaries) { _arg.sourceOn_(_aStream); _aStream.append(' '); } _aStream.append('|'); } return this; } public Statement[] statements() { return _statements; } public VariableDeclarationNode[] temporaries() { return _temporaries; } @Override public SequenceNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { _aBlock.value_(this); this.allNodesDo_(_aBlock); return this; } @Override public SequenceNode 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; } @Override public SequenceNode withSourcePosition_(final SourcePosition _aSourcePosition) { if (_sourcePosition == _aSourcePosition) { return SequenceNode.this; } return this.copy().pvtSetSourcePosition_(_aSourcePosition); } }