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.MethodNode; import st.gravel.support.compiler.ast.MethodNode.MethodNode_Factory; import st.gravel.support.compiler.ast.VariableDeclarationNode; import st.gravel.support.compiler.ast.SequenceNode; import st.gravel.support.compiler.ast.TypeNode; import st.gravel.support.compiler.ast.PragmaNode; import st.gravel.support.compiler.ast.NodeVisitor; import st.gravel.support.compiler.ast.Node; import st.gravel.support.compiler.ast.Reference; import st.gravel.support.compiler.ast.StringLiteralNode; import st.gravel.support.compiler.ast.Expression; import st.gravel.support.compiler.ast.SymbolLiteralNode; import st.gravel.support.compiler.ast.KeywordMessageNode; import st.gravel.support.compiler.ast.NilLiteralNode; import st.gravel.support.compiler.ast.SourcePrinter; import st.gravel.support.compiler.ast.SourcePosition; public class BinaryMethodNode extends MethodNode implements Cloneable { public static BinaryMethodNode_Factory factory = new BinaryMethodNode_Factory(); VariableDeclarationNode _argument; public static class BinaryMethodNode_Factory extends MethodNode_Factory { public BinaryMethodNode basicNew() { BinaryMethodNode newInstance = new BinaryMethodNode(); newInstance.initialize(); return newInstance; } public BinaryMethodNode selector_argument_body_returnType_pragmas_protocol_(final String _aString, final VariableDeclarationNode _aVariableDeclarationNode, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol) { return ((BinaryMethodNode) this.selector_argument_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aVariableDeclarationNode, _aSequenceNode, _anUndefinedObject, _anArray, _protocol, null)); } public BinaryMethodNode selector_argument_body_returnType_pragmas_protocol_nlrMarker_(final String _aString, final VariableDeclarationNode _aVariableDeclarationNode, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol, final String _nlrMarker) { return ((BinaryMethodNode) this.basicNew().initializeSelector_argument_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aVariableDeclarationNode, _aSequenceNode, _anUndefinedObject, _anArray, _protocol, _nlrMarker)); } @Override public BinaryMethodNode selector_body_returnType_pragmas_protocol_(final String _aString, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol) { return ((BinaryMethodNode) this.selector_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aSequenceNode, _anUndefinedObject, _anArray, _protocol, null)); } @Override public BinaryMethodNode selector_body_returnType_pragmas_protocol_nlrMarker_(final String _aString, final SequenceNode _aSequenceNode, final TypeNode _returnType, final PragmaNode[] _anArray, final String _protocol, final String _nlrMarker) { return ((BinaryMethodNode) this.basicNew().initializeSelector_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aSequenceNode, _returnType, _anArray, _protocol, _nlrMarker)); } } static public BinaryMethodNode _selector_argument_body_returnType_pragmas_protocol_(Object receiver, final String _aString, final VariableDeclarationNode _aVariableDeclarationNode, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol) { return factory.selector_argument_body_returnType_pragmas_protocol_(_aString, _aVariableDeclarationNode, _aSequenceNode, _anUndefinedObject, _anArray, _protocol); } static public BinaryMethodNode _selector_argument_body_returnType_pragmas_protocol_nlrMarker_(Object receiver, final String _aString, final VariableDeclarationNode _aVariableDeclarationNode, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol, final String _nlrMarker) { return factory.selector_argument_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aVariableDeclarationNode, _aSequenceNode, _anUndefinedObject, _anArray, _protocol, _nlrMarker); } static public BinaryMethodNode _selector_body_returnType_pragmas_protocol_(Object receiver, final String _aString, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocol) { return factory.selector_body_returnType_pragmas_protocol_(_aString, _aSequenceNode, _anUndefinedObject, _anArray, _protocol); } static public BinaryMethodNode _selector_body_returnType_pragmas_protocol_nlrMarker_(Object receiver, final String _aString, final SequenceNode _aSequenceNode, final TypeNode _returnType, final PragmaNode[] _anArray, final String _protocol, final String _nlrMarker) { return factory.selector_body_returnType_pragmas_protocol_nlrMarker_(_aString, _aSequenceNode, _returnType, _anArray, _protocol, _nlrMarker); } @Override public <X> X accept_(final NodeVisitor<X> _visitor) { return _visitor.visitBinaryMethodNode_(this); } @Override public BinaryMethodNode 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 BinaryMethodNode 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 BinaryMethodNode.this; } }); return this; } public VariableDeclarationNode argument() { return _argument; } @Override public VariableDeclarationNode[] arguments() { return st.gravel.support.jvm.ArrayFactory.with_(_argument); } public BinaryMethodNode argumentsDo_(final st.gravel.support.jvm.Block1<Object, VariableDeclarationNode> _aBlock) { _aBlock.value_(_argument); return this; } public BinaryMethodNode copy() { try { BinaryMethodNode _temp1 = (BinaryMethodNode) 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._argument == null) { if (!(((BinaryMethodNode) _anObject)._argument == null)) { return false; } } else { if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._argument, ((BinaryMethodNode) _anObject)._argument)) { return false; } } return true; } public BinaryMethodNode_Factory factory() { return factory; } @Override public boolean hasCompleteArgumentSignature() { return _argument.type() != null; } @Override public int hashCode() { return (super.hashCode() ^ (_argument == null ? 0 : _argument.hashCode())); } public BinaryMethodNode initializeSelector_argument_body_returnType_pragmas_protocol_nlrMarker_(final String _aString, final VariableDeclarationNode _aVariableDeclarationNode, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocolString, final String _nlrMarkerString) { _selector = _aString; _argument = _aVariableDeclarationNode; _body = _aSequenceNode; _returnType = _anUndefinedObject; _pragmas = _anArray; _protocol = _protocolString; _nlrMarker = _nlrMarkerString; this.initialize(); return this; } @Override public BinaryMethodNode initializeSelector_body_returnType_pragmas_protocol_nlrMarker_(final String _aString, final SequenceNode _aSequenceNode, final TypeNode _anUndefinedObject, final PragmaNode[] _anArray, final String _protocolString, final String _anObject) { _selector = _aString; _body = _aSequenceNode; _returnType = _anUndefinedObject; _pragmas = _anArray; _protocol = _protocolString; _nlrMarker = _anObject; this.initialize(); return this; } @Override public BinaryMethodNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) { return this; } @Override public BinaryMethodNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { _aBlock.value_(_body); _aBlock.value_(_argument); return this; } @Override public int numArgs() { return 1; } @Override public BinaryMethodNode ofTrait_(final Reference _aReference) { return this.withPropertyAt_put_(st.gravel.core.Symbol.value("trait"), StringLiteralNode.factory.value_(_aReference.toString())); } @Override public int precedence() { return 2; } @Override public BinaryMethodNode prettySourceOn_(final StringBuilder _aStream) { SourcePrinter.factory.on_(_aStream).visit_(this); return this; } @Override public BinaryMethodNode 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 BinaryMethodNode pvtSetBody_(final SequenceNode _aSequenceNode) { _body = _aSequenceNode; return this; } @Override public BinaryMethodNode pvtSetNlrMarker_(final String _anObject) { _nlrMarker = _anObject; return this; } @Override public BinaryMethodNode pvtSetPragmas_(final PragmaNode[] _anArray) { _pragmas = _anArray; return this; } @Override public BinaryMethodNode pvtSetProtocol_(final String _aString) { _protocol = _aString; return this; } @Override public BinaryMethodNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) { _sourcePosition = _aSourcePosition; return this; } @Override public BinaryMethodNode returnTypeAndBodySourceOn_(final StringBuilder _aStream) { if (_returnType != null) { _aStream.append(' '); _aStream.append("{^"); _returnType.sourceOn_(_aStream); _aStream.append('}'); } for (final PragmaNode _each : _pragmas) { _aStream.append('\n'); _aStream.append(' '); _each.sourceOn_(_aStream); } _body.methodSourceOn_(_aStream); return this; } @Override public BinaryMethodNode sourceOn_(final StringBuilder _aStream) { _aStream.append(_selector); _aStream.append(' '); _argument.sourceOn_(_aStream); this.returnTypeAndBodySourceOn_(_aStream); return this; } @Override public BinaryMethodNode typeDefsDo_(final st.gravel.support.jvm.Block1<Object, TypeNode> _aBlock) { _argument.typeDefsDo_(_aBlock); if (_returnType != null) { _returnType.typeDefsDo_(_aBlock); } return this; } @Override public BinaryMethodNode updatePragmas_(final st.gravel.support.jvm.Block1<PragmaNode, PragmaNode> _aBlock) { return this.withPragmas_(st.gravel.support.jvm.ArrayExtensions.collect_(_pragmas, _aBlock)); } @Override public BinaryMethodNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { _aBlock.value_(this); this.allNodesDo_(_aBlock); return this; } @Override public BinaryMethodNode 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 BinaryMethodNode withBody_(final SequenceNode _aSequenceNode) { return this.copy().pvtSetBody_(_aSequenceNode); } @Override public BinaryMethodNode withNlrMarker_(final String _anObject) { return this.copy().pvtSetNlrMarker_(_anObject); } @Override public BinaryMethodNode withPragmas_(final PragmaNode[] _anArray) { return this.copy().pvtSetPragmas_(_anArray); } @Override public BinaryMethodNode withPropertyAt_put_(final st.gravel.core.Symbol _aKey, final Expression _aValue) { if (st.gravel.support.jvm.ArrayExtensions.anySatisfy_(_pragmas, new st.gravel.support.jvm.Predicate1<PragmaNode>() { @Override public boolean value_(final PragmaNode _each) { return _each.isPropertyPragmaAt_(_aKey); } })) { return BinaryMethodNode.this.updatePragmas_(((st.gravel.support.jvm.Block1<PragmaNode, PragmaNode>) (new st.gravel.support.jvm.Block1<PragmaNode, PragmaNode>() { @Override public PragmaNode value_(final PragmaNode _each) { if (_each.isPropertyPragmaAt_(_aKey)) { return _each.withArguments_(st.gravel.support.jvm.ArrayFactory.with_with_(SymbolLiteralNode.factory.value_(_aKey), _aValue)); } else { return _each; } } }))); } else { return BinaryMethodNode.this.withPragmas_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_pragmas, PragmaNode.factory.expression_(KeywordMessageNode.factory.receiver_selector_arguments_(NilLiteralNode.factory.basicNew(), "propertyAt:put:", st.gravel.support.jvm.ArrayFactory.with_with_(SymbolLiteralNode.factory.value_(_aKey), _aValue))))); } } @Override public BinaryMethodNode withProtocol_(final String _aString) { return this.copy().pvtSetProtocol_(_aString); } @Override public BinaryMethodNode withSourcePosition_(final SourcePosition _aSourcePosition) { if (_sourcePosition == _aSourcePosition) { return BinaryMethodNode.this; } return this.copy().pvtSetSourcePosition_(_aSourcePosition); } }