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.MessageSendRewriter; import st.gravel.support.compiler.ast.MessageSendRewriter.MessageSendRewriter_Factory; import java.util.HashMap; import st.gravel.support.compiler.ast.Statement; import st.gravel.support.compiler.ast.MessageNode; import st.gravel.support.compiler.ast.BlockNode; import st.gravel.support.compiler.ast.NilLiteralNode; import st.gravel.support.compiler.ast.TypeVariableNode; import st.gravel.support.compiler.ast.Node; import st.gravel.support.compiler.ast.Expression; import st.gravel.support.compiler.ast.BooleanAndNode; import st.gravel.support.compiler.ast.SequenceNode; import st.gravel.support.compiler.ast.ArrayAtNode; import st.gravel.support.compiler.ast.ArrayAtPutNode; import st.gravel.support.compiler.ast.IdentityComparisonNode; import st.gravel.support.compiler.ast.IfTrueIfFalseNode; import st.gravel.support.compiler.ast.TypeOrNode; import st.gravel.support.compiler.ast.BooleanOrNode; import st.gravel.support.compiler.ast.ToDoNode; import st.gravel.support.compiler.ast.IntegerLiteralNode; import st.gravel.support.compiler.ast.WhileFalseNode; import st.gravel.support.compiler.ast.WhileTrueNode; import st.gravel.support.compiler.ast.ArraySizeNode; public class IntermediateNodeRewriter extends MessageSendRewriter implements Cloneable { public static IntermediateNodeRewriter_Factory factory = new IntermediateNodeRewriter_Factory(); public static class IntermediateNodeRewriter_Factory extends MessageSendRewriter_Factory { public IntermediateNodeRewriter basicNew() { IntermediateNodeRewriter newInstance = new IntermediateNodeRewriter(); newInstance.initialize(); return newInstance; } } public IntermediateNodeRewriter copy() { try { IntermediateNodeRewriter _temp1 = (IntermediateNodeRewriter) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public IntermediateNodeRewriter_Factory factory() { return factory; } @Override public IntermediateNodeRewriter initialize() { super.initialize(); this.initializeSpecialSelectors(); return this; } @Override public IntermediateNodeRewriter initializeSpecialSelectors() { _specialSelectors = new java.util.HashMap<st.gravel.core.Symbol, st.gravel.support.jvm.Block1<Statement, MessageNode>>(); _specialSelectors.put(st.gravel.core.Symbol.value("ifTrue:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_ifTrue_(_node.receiver(), _node.argument()); } }); _specialSelectors.put(st.gravel.core.Symbol.value("ifFalse:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_ifFalse_(_node.receiver(), _node.argument()); } }); _specialSelectors.put(st.gravel.core.Symbol.value("ifTrue:ifFalse:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_ifTrue_ifFalse_(_node.receiver(), _node.arguments()[0], _node.arguments()[1]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("ifFalse:ifTrue:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_ifTrue_ifFalse_(_node.receiver(), _node.arguments()[1], _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("whileTrue"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce$underscore$whileTrue_(_node.receiver()); } }); _specialSelectors.put(st.gravel.core.Symbol.value("whileFalse"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce$underscore$whileFalse_(_node.receiver()); } }); _specialSelectors.put(st.gravel.core.Symbol.value("whileTrue:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_whileTrue_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("whileFalse:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_whileFalse_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("to:do:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_to_do_(_node.receiver(), _node.arguments()[0], _node.arguments()[1]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("to:by:do:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_to_by_do_(_node.receiver(), _node.arguments()[0], _node.arguments()[1], _node.arguments()[2]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("=="), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_identityEquals_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("and:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_and_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("or:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_or_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("basicSize"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce$underscore$basicSize_(_node.receiver()); } }); _specialSelectors.put(st.gravel.core.Symbol.value("basicAt:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_basicAt_(_node.receiver(), _node.arguments()[0]); } }); _specialSelectors.put(st.gravel.core.Symbol.value("basicAt:put:"), new st.gravel.support.jvm.Block1<Statement, MessageNode>() { @Override public Statement value_(final MessageNode _node) { return (Statement) IntermediateNodeRewriter.this.produce_basicAt_put_(_node.receiver(), _node.arguments()[0], _node.arguments()[1]); } }); return this; } public BlockNode nilReturningBlockNode() { return BlockNode.factory.expression_returnType_(NilLiteralNode.factory.basicNew(), TypeVariableNode.factory.nil()); } public ArraySizeNode produce$underscore$basicSize_(final Expression _expression) { return ArraySizeNode.factory.receiver_(((Expression) this.visit_(_expression))); } public WhileFalseNode produce$underscore$whileFalse_(final Expression _testExpr) { final BlockNode _testBlockNode; if (!_testExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); return WhileFalseNode.factory.testSequence_doSequence_(((SequenceNode) this.visit_(_testBlockNode.body())), null); } public WhileTrueNode produce$underscore$whileTrue_(final Expression _testExpr) { final BlockNode _testBlockNode; if (!_testExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); return WhileTrueNode.factory.testSequence_doSequence_(((SequenceNode) this.visit_(_testBlockNode.body())), null); } public BooleanAndNode produce_and_(final Node _receiver, final Expression _testExpr) { final BlockNode _testBlockNode; if (!_testExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); return BooleanAndNode.factory.left_right_(((Expression) this.visit_(_receiver)), ((SequenceNode) this.visit_(_testBlockNode.body()))); } public ArrayAtNode produce_basicAt_(final Expression _receiver, final Expression _index) { return ArrayAtNode.factory.receiver_index_(((Expression) this.visit_(_receiver)), ((Expression) this.visit_(_index))); } public ArrayAtPutNode produce_basicAt_put_(final Expression _receiver, final Expression _index, final Expression _value) { return ArrayAtPutNode.factory.receiver_index_value_(((Expression) this.visit_(_receiver)), ((Expression) this.visit_(_index)), ((Expression) this.visit_(_value))); } public IdentityComparisonNode produce_identityEquals_(final Node _receiver, final Node _anObject) { return IdentityComparisonNode.factory.left_right_(((Expression) this.visit_(_receiver)), ((Expression) this.visit_(_anObject))); } public IfTrueIfFalseNode produce_ifFalse_(final Node _receiver, final Expression _aBlockNode) { return this.produce_ifTrue_ifFalse_(_receiver, this.nilReturningBlockNode(), _aBlockNode); } public IfTrueIfFalseNode produce_ifTrue_(final Node _receiver, final Expression _aBlockNode) { return this.produce_ifTrue_ifFalse_(_receiver, _aBlockNode, this.nilReturningBlockNode()); } public IfTrueIfFalseNode produce_ifTrue_ifFalse_(final Node _receiver, final Expression _trueExpr, final Expression _falseExpr) { final BlockNode _trueBlockNode; final BlockNode _falseBlockNode; if (!_trueExpr.isBlockNode()) { return null; } if (!_falseExpr.isBlockNode()) { return null; } _trueBlockNode = ((BlockNode) _trueExpr); _falseBlockNode = ((BlockNode) _falseExpr); return IfTrueIfFalseNode.factory.test_trueSequence_falseSequence_returnType_(((Expression) this.visit_(_receiver)), ((SequenceNode) this.visit_(_trueBlockNode.body())), ((SequenceNode) this.visit_(_falseBlockNode.body())), TypeOrNode.factory.left_right_(_trueBlockNode.returnType(), _falseBlockNode.returnType())); } public BooleanOrNode produce_or_(final Node _receiver, final Expression _testExpr) { final BlockNode _testBlockNode; if (!_testExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); return BooleanOrNode.factory.left_right_(((Expression) this.visit_(_receiver)), ((SequenceNode) this.visit_(_testBlockNode.body()))); } public ToDoNode produce_to_by_do_(final Expression _start, final Expression _stop, final Expression _step, final Expression _loopExpr) { final BlockNode _loopBlockNode; if (!_loopExpr.isBlockNode()) { return null; } if (!_step.isIntegerLiteralNode()) { return null; } _loopBlockNode = ((BlockNode) _loopExpr); return ToDoNode.factory.start_stop_step_counterName_doSequence_(((Expression) this.visit_(_start)), ((Expression) this.visit_(_stop)), ((Expression) this.visit_(_step)), _loopBlockNode.arguments()[0].name(), ((SequenceNode) this.visit_(_loopBlockNode.body()))); } public ToDoNode produce_to_do_(final Expression _start, final Expression _stop, final Expression _loopExpr) { final BlockNode _loopBlockNode; if (!_loopExpr.isBlockNode()) { return null; } _loopBlockNode = ((BlockNode) _loopExpr); return ToDoNode.factory.start_stop_step_counterName_doSequence_(((Expression) this.visit_(_start)), ((Expression) this.visit_(_stop)), IntegerLiteralNode.factory.integer_(((java.math.BigInteger) java.math.BigInteger.ONE)), _loopBlockNode.arguments()[0].name(), ((SequenceNode) this.visit_(_loopBlockNode.body()))); } public WhileFalseNode produce_whileFalse_(final Expression _testExpr, final Expression _loopExpr) { final BlockNode _testBlockNode; final BlockNode _loopBlockNode; if (!_testExpr.isBlockNode()) { return null; } if (!_loopExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); _loopBlockNode = ((BlockNode) _loopExpr); return WhileFalseNode.factory.testSequence_doSequence_(((SequenceNode) this.visit_(_testBlockNode.body())), ((SequenceNode) this.visit_(_loopBlockNode.body()))); } public WhileTrueNode produce_whileTrue_(final Expression _testExpr, final Expression _loopExpr) { final BlockNode _testBlockNode; final BlockNode _loopBlockNode; if (!_testExpr.isBlockNode()) { return null; } if (!_loopExpr.isBlockNode()) { return null; } _testBlockNode = ((BlockNode) _testExpr); _loopBlockNode = ((BlockNode) _loopExpr); return WhileTrueNode.factory.testSequence_doSequence_(((SequenceNode) this.visit_(_testBlockNode.body())), ((SequenceNode) this.visit_(_loopBlockNode.body()))); } }