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.JVMClassCompiler; import st.gravel.support.compiler.jvm.BlockInnerClass; import st.gravel.support.compiler.jvm.JVMDefinedObjectType; import st.gravel.support.compiler.jvm.JVMClass; import st.gravel.support.compiler.jvm.JVMMethod; import st.gravel.support.compiler.jvm.JVMField; import st.gravel.support.compiler.jvm.JVMMethodCompiler; import st.gravel.support.compiler.jvm.JVMVariable; import st.gravel.support.compiler.jvm.BlockSendArgument; import java.util.List; import st.gravel.support.compiler.jvm.JVMInstruction; import st.gravel.support.compiler.jvm.Load; import st.gravel.support.compiler.jvm.JVMLocalDeclaration; import java.util.ArrayList; import st.gravel.support.compiler.jvm.PutField; import st.gravel.support.compiler.jvm.InvokeSpecial; import st.gravel.support.compiler.jvm.JVMType; import st.gravel.support.compiler.jvm.Return; public class JVMBlockCompiler extends Object implements Cloneable { public static JVMBlockCompiler_Factory factory = new JVMBlockCompiler_Factory(); BlockInnerClass _block; JVMClassCompiler _parent; public static class JVMBlockCompiler_Factory extends st.gravel.support.jvm.SmalltalkFactory { public JVMBlockCompiler basicNew() { JVMBlockCompiler newInstance = new JVMBlockCompiler(); newInstance.initialize(); return newInstance; } public JVMBlockCompiler parent_block_(final JVMClassCompiler _aJVMClassCompiler, final BlockInnerClass _aBlockInnerClass) { return this.basicNew().initializeParent_block_(_aJVMClassCompiler, _aBlockInnerClass); } } static public JVMBlockCompiler _parent_block_(Object receiver, final JVMClassCompiler _aJVMClassCompiler, final BlockInnerClass _aBlockInnerClass) { return factory.parent_block_(_aJVMClassCompiler, _aBlockInnerClass); } public BlockInnerClass block() { return _block; } public JVMDefinedObjectType blockSuperType_(final int _anInteger) { return JVMDefinedObjectType.factory.block_(_anInteger); } public JVMClass compileBlock() { final JVMMethod _m; final JVMField[] _fields; final JVMMethodCompiler _methodCompiler; final JVMClass _jvmClass; _fields = st.gravel.support.jvm.ArrayExtensions.collect_(_block.copiedVariables(), ((st.gravel.support.jvm.Block1<JVMField, JVMVariable>) (new st.gravel.support.jvm.Block1<JVMField, JVMVariable>() { @Override public JVMField value_(final JVMVariable _each) { return (JVMField) _each.asField_isStatic_(_block.ownerType(), false); } }))); _methodCompiler = JVMMethodCompiler.factory.parent_(_parent); _methodCompiler.isStatic_(false); _m = _methodCompiler.buildBlock_copiedVariables_blockType_(_block.blockNode(), _fields, _block.ownerType()); _jvmClass = JVMClass.factory.type_superType_fields_methods_astConstants_(_block.ownerType(), this.superType(), _fields, st.gravel.support.jvm.ArrayFactory.with_with_(_m, this.createInit()), new BlockSendArgument[] {}); if (_block.blockNode().sourcePosition() != null) { _jvmClass.source_(_block.blockNode().sourcePosition().sourceFile().name()); } return _jvmClass; } public JVMBlockCompiler copy() { try { JVMBlockCompiler _temp1 = (JVMBlockCompiler) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public JVMMethod createInit() { final List<JVMInstruction>[] _instructions; final Load[] _read0; final JVMLocalDeclaration[] _locals; _instructions = new List[1]; _read0 = new Load[1]; _instructions[0] = new java.util.ArrayList(); _read0[0] = Load.factory.index_type_(0, _block.ownerType()); for (int _temp1 = 0; _temp1 < _block.copiedVariables().length; _temp1++) { final int _i = _temp1 + 1; final JVMVariable _elem = _block.copiedVariables()[_temp1]; _instructions[0].add(_read0[0]); _instructions[0].add(Load.factory.index_type_(_i, _elem.type())); _instructions[0].add(PutField.factory.ownerType_name_type_(_block.ownerType(), _elem.varName(), _elem.type())); } _instructions[0].add(_read0[0]); _instructions[0].add(InvokeSpecial.factory.init_voidArguments_(this.superType(), new JVMType[] {})); _instructions[0].add(Return.factory.basicNew()); _locals = st.gravel.support.jvm.ArrayExtensions.copyWithFirst_(st.gravel.support.jvm.ArrayExtensions.keysAndValuesCollect_(_block.copiedVariables(), new st.gravel.support.jvm.Block2<JVMLocalDeclaration, Integer, JVMVariable>() { @Override public JVMLocalDeclaration value_value_(final Integer _i, final JVMVariable _var) { return (JVMLocalDeclaration) _var.asLocalDeclaration_(_i); } }), JVMLocalDeclaration.factory.blockSelf()); return JVMMethod.factory.name_locals_instructions_isStatic_signature_("<init>", _locals, _instructions[0].toArray(new JVMInstruction[_instructions[0].size()]), false, _block.initSignature()); } public JVMBlockCompiler_Factory factory() { return factory; } public JVMBlockCompiler initialize() { return this; } public JVMBlockCompiler initializeParent_block_(final JVMClassCompiler _aJVMClassCompiler, final BlockInnerClass _aBlockInnerClass) { _parent = _aJVMClassCompiler; _block = _aBlockInnerClass; this.initialize(); return this; } public JVMClassCompiler parent() { return _parent; } public JVMBlockCompiler postCopy() { return this; } public JVMDefinedObjectType superType() { return this.blockSuperType_(_block.blockNode().numArgs()); } }