package st.gravel.support.compiler.jvm; /* 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.jvm.JVMType; import st.gravel.support.compiler.jvm.JVMDynamicObjectType; import st.gravel.support.compiler.jvm.JVMDefinedObjectType; public class JVMStack extends Object implements Cloneable { public static JVMStack_Factory factory = new JVMStack_Factory(); JVMType[] _elements; public static class JVMStack_Factory extends st.gravel.support.jvm.SmalltalkFactory { public JVMStack basicNew() { JVMStack newInstance = new JVMStack(); newInstance.initialize(); return newInstance; } } public JVMStack copy() { try { JVMStack _temp1 = (JVMStack) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public JVMStack elementsDo_(final st.gravel.support.jvm.Block1<Object, JVMType> _aBlock) { for (final JVMType _temp1 : _elements) { _aBlock.value_(_temp1); } return this; } public JVMStack_Factory factory() { return factory; } public JVMStack initialize() { _elements = new JVMType[] {}; return this; } public boolean isEmpty() { return _elements.length == 0; } public JVMType peek() { return this.peek_(1); } public JVMType peek_(final int _anInteger) { return _elements[(_elements.length - (_anInteger - 1)) - 1]; } public JVMType pop() { final JVMType _last; _last = _elements[_elements.length - 1]; if (_last.isWide()) { throw new RuntimeException("Cannot pop a wide element"); } _elements = st.gravel.support.jvm.ArrayExtensions.copyWithoutLast(_elements); return _last; } public JVMType popLast() { st.gravel.support.jvm.ObjectExtensions.assert_(this, st.gravel.support.jvm.IntegerExtensions.equals_(this.size(), 1)); return this.pop(); } public JVMStack popType_(final JVMType _aJVMType) { final JVMType _last; _last = _aJVMType.isWide() ? this.popWide() : this.pop(); st.gravel.support.jvm.ObjectExtensions.assert_(this, st.gravel.support.jvm.ObjectExtensions.equals_(_last, _aJVMType) || (st.gravel.support.jvm.ObjectExtensions.equals_(_last, JVMDynamicObjectType.factory.basicNew()) && st.gravel.support.jvm.ObjectExtensions.equals_(_aJVMType, JVMDefinedObjectType.factory.object()))); return this; } public JVMType popWide() { final JVMType _last; _last = _elements[_elements.length - 1]; if (!_last.isWide()) { throw new RuntimeException("Cannot pop a small element"); } _elements = st.gravel.support.jvm.ArrayExtensions.copyWithoutLast(_elements); return _last; } public JVMStack postCopy() { return this; } public JVMStack push_(final JVMType _aType) { st.gravel.support.jvm.ObjectExtensions.deny_(this, _aType.isBottomType()); _elements = st.gravel.support.jvm.ArrayExtensions.copyWith_(_elements, _aType); return this; } public int size() { return _elements.length; } }