All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jruby.truffle.extra.TrufflePosixNodesFactory Maven / Gradle / Ivy

The newest version!
// CheckStyle: start generated
package org.jruby.truffle.extra;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.dsl.GeneratedBy;
import com.oracle.truffle.api.dsl.NodeFactory;
import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
import com.oracle.truffle.api.dsl.internal.SpecializationNode;
import com.oracle.truffle.api.dsl.internal.SpecializedNode;
import com.oracle.truffle.api.frame.Frame;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.nodes.NodeCost;
import com.oracle.truffle.api.nodes.UnexpectedResultException;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.profiles.BranchProfile;
import java.util.Arrays;
import java.util.List;
import org.jruby.truffle.builtins.CoreMethodArrayArgumentsNode;
import org.jruby.truffle.extra.TrufflePosixNodes.AccessNode;
import org.jruby.truffle.extra.TrufflePosixNodes.BindNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ChdirNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ChmodNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ChownNode;
import org.jruby.truffle.extra.TrufflePosixNodes.CloseNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ConnectNode;
import org.jruby.truffle.extra.TrufflePosixNodes.Dup2Node;
import org.jruby.truffle.extra.TrufflePosixNodes.DupNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ErrnoAssignNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ErrnoNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FchmodNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FchownNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FcntlNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FlockNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FreeAddrInfoNode;
import org.jruby.truffle.extra.TrufflePosixNodes.FsyncNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetAddrInfoNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetEGIDNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetEUIDNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetGIDNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetGroupsNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetHostNameNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetNameInfoNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetPeerNameNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetPriorityNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetRLimitNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetSockNameNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetSockOptNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetUIDNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetcwdNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetenvNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetpgidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetpgrpNode;
import org.jruby.truffle.extra.TrufflePosixNodes.GetppidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.IsATTYNode;
import org.jruby.truffle.extra.TrufflePosixNodes.KillNode;
import org.jruby.truffle.extra.TrufflePosixNodes.LchmodNode;
import org.jruby.truffle.extra.TrufflePosixNodes.LinkNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ListenNode;
import org.jruby.truffle.extra.TrufflePosixNodes.MajorNode;
import org.jruby.truffle.extra.TrufflePosixNodes.MemsetNode;
import org.jruby.truffle.extra.TrufflePosixNodes.MinorNode;
import org.jruby.truffle.extra.TrufflePosixNodes.MkdirNode;
import org.jruby.truffle.extra.TrufflePosixNodes.MkfifoNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ReadlinkNode;
import org.jruby.truffle.extra.TrufflePosixNodes.RenameNode;
import org.jruby.truffle.extra.TrufflePosixNodes.RmdirNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SendNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetEuidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetPriorityNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetRLimitNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetResuidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetReuidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetRuidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetSidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetSockOptNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetUidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetenvNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetgidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SetpgidNode;
import org.jruby.truffle.extra.TrufflePosixNodes.ShutdownNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SocketNode;
import org.jruby.truffle.extra.TrufflePosixNodes.SymlinkNode;
import org.jruby.truffle.extra.TrufflePosixNodes.UmaskNode;
import org.jruby.truffle.extra.TrufflePosixNodes.UnlinkNode;
import org.jruby.truffle.extra.TrufflePosixNodes.UnsetenvNode;
import org.jruby.truffle.extra.TrufflePosixNodes.UtimesNode;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.RubyTypes;
import org.jruby.truffle.language.RubyTypesGen;
import org.jruby.truffle.language.SnippetNode;

@GeneratedBy(TrufflePosixNodes.class)
public final class TrufflePosixNodesFactory {

    public static List> getFactories() {
        return Arrays.asList(AccessNodeFactory.getInstance(), ChmodNodeFactory.getInstance(), ChownNodeFactory.getInstance(), DupNodeFactory.getInstance(), Dup2NodeFactory.getInstance(), FchmodNodeFactory.getInstance(), FsyncNodeFactory.getInstance(), FchownNodeFactory.getInstance(), GetEGIDNodeFactory.getInstance(), GetenvNodeFactory.getInstance(), GetEUIDNodeFactory.getInstance(), GetGIDNodeFactory.getInstance(), GetGroupsNodeFactory.getInstance(), GetRLimitNodeFactory.getInstance(), GetUIDNodeFactory.getInstance(), MemsetNodeFactory.getInstance(), MkfifoNodeFactory.getInstance(), ReadlinkNodeFactory.getInstance(), SetenvNodeFactory.getInstance(), LchmodNodeFactory.getInstance(), LinkNodeFactory.getInstance(), UnlinkNodeFactory.getInstance(), UmaskNodeFactory.getInstance(), UnsetenvNodeFactory.getInstance(), UtimesNodeFactory.getInstance(), MkdirNodeFactory.getInstance(), ChdirNodeFactory.getInstance(), GetPriorityNodeFactory.getInstance(), SetgidNodeFactory.getInstance(), SetpgidNodeFactory.getInstance(), SetPriorityNodeFactory.getInstance(), SetResuidNodeFactory.getInstance(), SetEuidNodeFactory.getInstance(), SetReuidNodeFactory.getInstance(), SetRLimitNodeFactory.getInstance(), SetRuidNodeFactory.getInstance(), SetUidNodeFactory.getInstance(), SetSidNodeFactory.getInstance(), FlockNodeFactory.getInstance(), MajorNodeFactory.getInstance(), MinorNodeFactory.getInstance(), RenameNodeFactory.getInstance(), RmdirNodeFactory.getInstance(), GetcwdNodeFactory.getInstance(), ErrnoNodeFactory.getInstance(), ErrnoAssignNodeFactory.getInstance(), FcntlNodeFactory.getInstance(), GetpgidNodeFactory.getInstance(), GetpgrpNodeFactory.getInstance(), IsATTYNodeFactory.getInstance(), GetppidNodeFactory.getInstance(), SendNodeFactory.getInstance(), SymlinkNodeFactory.getInstance(), GetAddrInfoNodeFactory.getInstance(), ConnectNodeFactory.getInstance(), FreeAddrInfoNodeFactory.getInstance(), GetNameInfoNodeFactory.getInstance(), ShutdownNodeFactory.getInstance(), SocketNodeFactory.getInstance(), SetSockOptNodeFactory.getInstance(), BindNodeFactory.getInstance(), ListenNodeFactory.getInstance(), GetHostNameNodeFactory.getInstance(), GetPeerNameNodeFactory.getInstance(), GetSockNameNodeFactory.getInstance(), GetSockOptNodeFactory.getInstance(), CloseNodeFactory.getInstance(), KillNodeFactory.getInstance());
    }

    @GeneratedBy(AccessNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class AccessNodeFactory implements NodeFactory {

        private static AccessNodeFactory accessNodeFactoryInstance;

        private AccessNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return AccessNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public AccessNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (accessNodeFactoryInstance == null) {
                accessNodeFactoryInstance = new AccessNodeFactory();
            }
            return accessNodeFactoryInstance;
        }

        public static AccessNode create(RubyNode[] arguments) {
            return new AccessNodeGen(arguments);
        }

        @GeneratedBy(AccessNode.class)
        public static final class AccessNodeGen extends AccessNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private AccessNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(AccessNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected AccessNodeGen root;

                BaseNode_(AccessNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (AccessNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return AccessNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(AccessNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(AccessNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(AccessNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(AccessNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(AccessNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(AccessNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "access(DynamicObject, int)", value = AccessNode.class)
            private static final class AccessNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                AccessNode_(AccessNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((AccessNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.access(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.access(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(AccessNodeGen root, Object arguments1Value) {
                    return new AccessNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(ChmodNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ChmodNodeFactory implements NodeFactory {

        private static ChmodNodeFactory chmodNodeFactoryInstance;

        private ChmodNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ChmodNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ChmodNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (chmodNodeFactoryInstance == null) {
                chmodNodeFactoryInstance = new ChmodNodeFactory();
            }
            return chmodNodeFactoryInstance;
        }

        public static ChmodNode create(RubyNode[] arguments) {
            return new ChmodNodeGen(arguments);
        }

        @GeneratedBy(ChmodNode.class)
        public static final class ChmodNodeGen extends ChmodNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private ChmodNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ChmodNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ChmodNodeGen root;

                BaseNode_(ChmodNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ChmodNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return ChmodNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ChmodNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ChmodNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ChmodNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ChmodNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ChmodNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ChmodNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "chmod(DynamicObject, int)", value = ChmodNode.class)
            private static final class ChmodNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                ChmodNode_(ChmodNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((ChmodNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.chmod(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.chmod(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ChmodNodeGen root, Object arguments1Value) {
                    return new ChmodNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(ChownNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ChownNodeFactory implements NodeFactory {

        private static ChownNodeFactory chownNodeFactoryInstance;

        private ChownNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ChownNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ChownNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (chownNodeFactoryInstance == null) {
                chownNodeFactoryInstance = new ChownNodeFactory();
            }
            return chownNodeFactoryInstance;
        }

        public static ChownNode create(RubyNode[] arguments) {
            return new ChownNodeGen(arguments);
        }

        @GeneratedBy(ChownNode.class)
        public static final class ChownNodeGen extends ChownNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private ChownNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ChownNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ChownNodeGen root;

                BaseNode_(ChownNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ChownNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return ChownNode_.create(root, arguments1Value, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ChownNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ChownNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ChownNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ChownNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ChownNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ChownNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "chown(DynamicObject, int, int)", value = ChownNode.class)
            private static final class ChownNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                ChownNode_(ChownNodeGen root, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((ChownNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((ChownNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.chown(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.chown(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ChownNodeGen root, Object arguments1Value, Object arguments2Value) {
                    return new ChownNode_(root, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(DupNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class DupNodeFactory implements NodeFactory {

        private static DupNodeFactory dupNodeFactoryInstance;

        private DupNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return DupNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public DupNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (dupNodeFactoryInstance == null) {
                dupNodeFactoryInstance = new DupNodeFactory();
            }
            return dupNodeFactoryInstance;
        }

        public static DupNode create(RubyNode[] arguments) {
            return new DupNodeGen(arguments);
        }

        @GeneratedBy(DupNode.class)
        public static final class DupNodeGen extends DupNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private DupNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(DupNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected DupNodeGen root;

                BaseNode_(DupNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (DupNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return DupNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(DupNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(DupNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(DupNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(DupNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(DupNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(DupNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "dup(int)", value = DupNode.class)
            private static final class DupNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                DupNode_(DupNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((DupNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.dup(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.dup(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(DupNodeGen root, Object arguments0Value) {
                    return new DupNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(Dup2Node.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class Dup2NodeFactory implements NodeFactory {

        private static Dup2NodeFactory dup2NodeFactoryInstance;

        private Dup2NodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return Dup2Node.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public Dup2Node createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (dup2NodeFactoryInstance == null) {
                dup2NodeFactoryInstance = new Dup2NodeFactory();
            }
            return dup2NodeFactoryInstance;
        }

        public static Dup2Node create(RubyNode[] arguments) {
            return new Dup2NodeGen(arguments);
        }

        @GeneratedBy(Dup2Node.class)
        public static final class Dup2NodeGen extends Dup2Node implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private Dup2NodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(Dup2Node.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected Dup2NodeGen root;

                BaseNode_(Dup2NodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (Dup2NodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return Dup2Node_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(Dup2Node.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(Dup2NodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(Dup2NodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(Dup2Node.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(Dup2NodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(Dup2NodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "dup2(int, int)", value = Dup2Node.class)
            private static final class Dup2Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                Dup2Node_(Dup2NodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((Dup2Node_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((Dup2Node_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.dup2(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.dup2(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(Dup2NodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new Dup2Node_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(FchmodNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FchmodNodeFactory implements NodeFactory {

        private static FchmodNodeFactory fchmodNodeFactoryInstance;

        private FchmodNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FchmodNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FchmodNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (fchmodNodeFactoryInstance == null) {
                fchmodNodeFactoryInstance = new FchmodNodeFactory();
            }
            return fchmodNodeFactoryInstance;
        }

        public static FchmodNode create(RubyNode[] arguments) {
            return new FchmodNodeGen(arguments);
        }

        @GeneratedBy(FchmodNode.class)
        public static final class FchmodNodeGen extends FchmodNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private FchmodNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(FchmodNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected FchmodNodeGen root;

                BaseNode_(FchmodNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (FchmodNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return FchmodNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(FchmodNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(FchmodNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FchmodNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(FchmodNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(FchmodNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FchmodNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "fchmod(int, int)", value = FchmodNode.class)
            private static final class FchmodNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                FchmodNode_(FchmodNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((FchmodNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((FchmodNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.fchmod(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.fchmod(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FchmodNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new FchmodNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(FsyncNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FsyncNodeFactory implements NodeFactory {

        private static FsyncNodeFactory fsyncNodeFactoryInstance;

        private FsyncNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FsyncNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FsyncNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (fsyncNodeFactoryInstance == null) {
                fsyncNodeFactoryInstance = new FsyncNodeFactory();
            }
            return fsyncNodeFactoryInstance;
        }

        public static FsyncNode create(RubyNode[] arguments) {
            return new FsyncNodeGen(arguments);
        }

        @GeneratedBy(FsyncNode.class)
        public static final class FsyncNodeGen extends FsyncNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private FsyncNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(FsyncNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected FsyncNodeGen root;

                BaseNode_(FsyncNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (FsyncNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return FsyncNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(FsyncNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(FsyncNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(FsyncNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(FsyncNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(FsyncNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(FsyncNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "fsync(int)", value = FsyncNode.class)
            private static final class FsyncNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                FsyncNode_(FsyncNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((FsyncNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.fsync(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.fsync(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(FsyncNodeGen root, Object arguments0Value) {
                    return new FsyncNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(FchownNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FchownNodeFactory implements NodeFactory {

        private static FchownNodeFactory fchownNodeFactoryInstance;

        private FchownNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FchownNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FchownNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (fchownNodeFactoryInstance == null) {
                fchownNodeFactoryInstance = new FchownNodeFactory();
            }
            return fchownNodeFactoryInstance;
        }

        public static FchownNode create(RubyNode[] arguments) {
            return new FchownNodeGen(arguments);
        }

        @GeneratedBy(FchownNode.class)
        public static final class FchownNodeGen extends FchownNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private FchownNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(FchownNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected FchownNodeGen root;

                BaseNode_(FchownNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (FchownNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        return FchownNode_.create(root, arguments0Value, arguments1Value, arguments2Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(FchownNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(FchownNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FchownNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(FchownNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(FchownNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FchownNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "fchown(int, int, int)", value = FchownNode.class)
            private static final class FchownNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                FchownNode_(FchownNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((FchownNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((FchownNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((FchownNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    return root.fchown(arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        return root.fchown(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FchownNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new FchownNode_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(GetEGIDNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetEGIDNodeFactory implements NodeFactory {

        private static GetEGIDNodeFactory getEGIDNodeFactoryInstance;

        private GetEGIDNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetEGIDNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetEGIDNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getEGIDNodeFactoryInstance == null) {
                getEGIDNodeFactoryInstance = new GetEGIDNodeFactory();
            }
            return getEGIDNodeFactoryInstance;
        }

        public static GetEGIDNode create(RubyNode[] arguments) {
            return new GetEGIDNodeGen(arguments);
        }

        @GeneratedBy(GetEGIDNode.class)
        public static final class GetEGIDNodeGen extends GetEGIDNode {

            @SuppressWarnings("unused")
            private GetEGIDNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getEGID();
            }

        }
    }
    @GeneratedBy(GetenvNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetenvNodeFactory implements NodeFactory {

        private static GetenvNodeFactory getenvNodeFactoryInstance;

        private GetenvNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetenvNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetenvNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getenvNodeFactoryInstance == null) {
                getenvNodeFactoryInstance = new GetenvNodeFactory();
            }
            return getenvNodeFactoryInstance;
        }

        public static GetenvNode create(RubyNode[] arguments) {
            return new GetenvNodeGen(arguments);
        }

        @GeneratedBy(GetenvNode.class)
        public static final class GetenvNodeGen extends GetenvNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private GetenvNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_))) {
                    return this.getenv(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                execute(frameValue);
                return;
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(GetEUIDNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetEUIDNodeFactory implements NodeFactory {

        private static GetEUIDNodeFactory getEUIDNodeFactoryInstance;

        private GetEUIDNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetEUIDNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetEUIDNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getEUIDNodeFactoryInstance == null) {
                getEUIDNodeFactoryInstance = new GetEUIDNodeFactory();
            }
            return getEUIDNodeFactoryInstance;
        }

        public static GetEUIDNode create(RubyNode[] arguments) {
            return new GetEUIDNodeGen(arguments);
        }

        @GeneratedBy(GetEUIDNode.class)
        public static final class GetEUIDNodeGen extends GetEUIDNode {

            @SuppressWarnings("unused")
            private GetEUIDNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getEUID();
            }

        }
    }
    @GeneratedBy(GetGIDNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetGIDNodeFactory implements NodeFactory {

        private static GetGIDNodeFactory getGIDNodeFactoryInstance;

        private GetGIDNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetGIDNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetGIDNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getGIDNodeFactoryInstance == null) {
                getGIDNodeFactoryInstance = new GetGIDNodeFactory();
            }
            return getGIDNodeFactoryInstance;
        }

        public static GetGIDNode create(RubyNode[] arguments) {
            return new GetGIDNodeGen(arguments);
        }

        @GeneratedBy(GetGIDNode.class)
        public static final class GetGIDNodeGen extends GetGIDNode {

            @SuppressWarnings("unused")
            private GetGIDNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getGID();
            }

        }
    }
    @GeneratedBy(GetGroupsNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetGroupsNodeFactory implements NodeFactory {

        private static GetGroupsNodeFactory getGroupsNodeFactoryInstance;

        private GetGroupsNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetGroupsNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetGroupsNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getGroupsNodeFactoryInstance == null) {
                getGroupsNodeFactoryInstance = new GetGroupsNodeFactory();
            }
            return getGroupsNodeFactoryInstance;
        }

        public static GetGroupsNode create(RubyNode[] arguments) {
            return new GetGroupsNodeGen(arguments);
        }

        @GeneratedBy(GetGroupsNode.class)
        public static final class GetGroupsNodeGen extends GetGroupsNode {

            @SuppressWarnings("unused")
            private GetGroupsNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return this.getgroups();
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                execute(frameValue);
                return;
            }

        }
    }
    @GeneratedBy(GetRLimitNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetRLimitNodeFactory implements NodeFactory {

        private static GetRLimitNodeFactory getRLimitNodeFactoryInstance;

        private GetRLimitNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetRLimitNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetRLimitNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getRLimitNodeFactoryInstance == null) {
                getRLimitNodeFactoryInstance = new GetRLimitNodeFactory();
            }
            return getRLimitNodeFactoryInstance;
        }

        public static GetRLimitNode create(RubyNode[] arguments) {
            return new GetRLimitNodeGen(arguments);
        }

        @GeneratedBy(GetRLimitNode.class)
        public static final class GetRLimitNodeGen extends GetRLimitNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private GetRLimitNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetRLimitNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetRLimitNodeGen root;

                BaseNode_(GetRLimitNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetRLimitNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return GetrlimitNode_.create(root, arguments0Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetRLimitNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetRLimitNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetRLimitNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetRLimitNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetRLimitNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetRLimitNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getrlimit(int, DynamicObject)", value = GetRLimitNode.class)
            private static final class GetrlimitNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                GetrlimitNode_(GetRLimitNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetrlimitNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.getrlimit(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.getrlimit(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetRLimitNodeGen root, Object arguments0Value) {
                    return new GetrlimitNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(GetUIDNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetUIDNodeFactory implements NodeFactory {

        private static GetUIDNodeFactory getUIDNodeFactoryInstance;

        private GetUIDNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetUIDNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetUIDNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getUIDNodeFactoryInstance == null) {
                getUIDNodeFactoryInstance = new GetUIDNodeFactory();
            }
            return getUIDNodeFactoryInstance;
        }

        public static GetUIDNode create(RubyNode[] arguments) {
            return new GetUIDNodeGen(arguments);
        }

        @GeneratedBy(GetUIDNode.class)
        public static final class GetUIDNodeGen extends GetUIDNode {

            @SuppressWarnings("unused")
            private GetUIDNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getUID();
            }

        }
    }
    @GeneratedBy(MemsetNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class MemsetNodeFactory implements NodeFactory {

        private static MemsetNodeFactory memsetNodeFactoryInstance;

        private MemsetNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return MemsetNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public MemsetNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (memsetNodeFactoryInstance == null) {
                memsetNodeFactoryInstance = new MemsetNodeFactory();
            }
            return memsetNodeFactoryInstance;
        }

        public static MemsetNode create(RubyNode[] arguments) {
            return new MemsetNodeGen(arguments);
        }

        @GeneratedBy(MemsetNode.class)
        public static final class MemsetNodeGen extends MemsetNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private MemsetNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public DynamicObject executeDynamicObject(VirtualFrame frameValue) {
                return specialization_.executeDynamicObject(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(MemsetNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected MemsetNodeGen root;

                BaseNode_(MemsetNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (MemsetNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeDynamicObject_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract DynamicObject executeDynamicObject_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeDynamicObject_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public DynamicObject executeDynamicObject(VirtualFrame frameValue) {
                    return (DynamicObject) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitLong(arguments2Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                            return MemsetNode_.create(root, arguments1Value, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == long.class) {
                            return root.arguments2_.executeLong((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else if (_value instanceof Long) {
                                    _type = long.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(MemsetNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(MemsetNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public DynamicObject executeDynamicObject_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (DynamicObject) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(MemsetNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(MemsetNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(MemsetNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public DynamicObject executeDynamicObject_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeDynamicObject_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(MemsetNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "memset(DynamicObject, int, long)", value = MemsetNode.class)
            private static final class MemsetNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                MemsetNode_(MemsetNodeGen root, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitLongClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((MemsetNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((MemsetNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeDynamicObject(frameValue);
                }

                @Override
                public DynamicObject executeDynamicObject(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeDynamicObject_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeDynamicObject_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    long arguments2Value_;
                    try {
                        if (arguments2ImplicitType == long.class) {
                            arguments2Value_ = root.arguments2_.executeLong(frameValue);
                        } else if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = RubyTypes.promoteToLong(root.arguments2_.executeInteger(frameValue));
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitLong(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeDynamicObject_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                        return root.memset(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeDynamicObject_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public DynamicObject executeDynamicObject_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitLong(arguments2Value, arguments2ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        long arguments2Value_ = RubyTypesGen.asImplicitLong(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                            return root.memset(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeDynamicObject_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(MemsetNodeGen root, Object arguments1Value, Object arguments2Value) {
                    return new MemsetNode_(root, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(MkfifoNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class MkfifoNodeFactory implements NodeFactory {

        private static MkfifoNodeFactory mkfifoNodeFactoryInstance;

        private MkfifoNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return MkfifoNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public MkfifoNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (mkfifoNodeFactoryInstance == null) {
                mkfifoNodeFactoryInstance = new MkfifoNodeFactory();
            }
            return mkfifoNodeFactoryInstance;
        }

        public static MkfifoNode create(RubyNode[] arguments) {
            return new MkfifoNodeGen(arguments);
        }

        @GeneratedBy(MkfifoNode.class)
        public static final class MkfifoNodeGen extends MkfifoNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private MkfifoNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(MkfifoNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected MkfifoNodeGen root;

                BaseNode_(MkfifoNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (MkfifoNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return MkfifoNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(MkfifoNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(MkfifoNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkfifoNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(MkfifoNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(MkfifoNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkfifoNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "mkfifo(DynamicObject, int)", value = MkfifoNode.class)
            private static final class MkfifoNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                MkfifoNode_(MkfifoNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((MkfifoNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.mkfifo(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.mkfifo(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkfifoNodeGen root, Object arguments1Value) {
                    return new MkfifoNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(ReadlinkNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ReadlinkNodeFactory implements NodeFactory {

        private static ReadlinkNodeFactory readlinkNodeFactoryInstance;

        private ReadlinkNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ReadlinkNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ReadlinkNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (readlinkNodeFactoryInstance == null) {
                readlinkNodeFactoryInstance = new ReadlinkNodeFactory();
            }
            return readlinkNodeFactoryInstance;
        }

        public static ReadlinkNode create(RubyNode[] arguments) {
            return new ReadlinkNodeGen(arguments);
        }

        @GeneratedBy(ReadlinkNode.class)
        public static final class ReadlinkNodeGen extends ReadlinkNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private ReadlinkNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ReadlinkNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ReadlinkNodeGen root;

                BaseNode_(ReadlinkNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ReadlinkNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments1Value_))) {
                            return ReadlinkNode_.create(root, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ReadlinkNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ReadlinkNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ReadlinkNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ReadlinkNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ReadlinkNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ReadlinkNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "readlink(DynamicObject, DynamicObject, int)", value = ReadlinkNode.class)
            private static final class ReadlinkNode_ extends BaseNode_ {

                private final Class arguments2ImplicitType;

                ReadlinkNode_(ReadlinkNodeGen root, Object arguments2Value) {
                    super(root, 1);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments2ImplicitType == ((ReadlinkNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.readlink(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.readlink(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ReadlinkNodeGen root, Object arguments2Value) {
                    return new ReadlinkNode_(root, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(SetenvNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetenvNodeFactory implements NodeFactory {

        private static SetenvNodeFactory setenvNodeFactoryInstance;

        private SetenvNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetenvNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetenvNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setenvNodeFactoryInstance == null) {
                setenvNodeFactoryInstance = new SetenvNodeFactory();
            }
            return setenvNodeFactoryInstance;
        }

        public static SetenvNode create(RubyNode[] arguments) {
            return new SetenvNodeGen(arguments);
        }

        @GeneratedBy(SetenvNode.class)
        public static final class SetenvNodeGen extends SetenvNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private SetenvNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetenvNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetenvNodeGen root;

                BaseNode_(SetenvNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetenvNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            return SetenvNode_.create(root, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetenvNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetenvNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetenvNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetenvNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetenvNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetenvNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setenv(DynamicObject, DynamicObject, int)", value = SetenvNode.class)
            private static final class SetenvNode_ extends BaseNode_ {

                private final Class arguments2ImplicitType;

                SetenvNode_(SetenvNodeGen root, Object arguments2Value) {
                    super(root, 1);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments2ImplicitType == ((SetenvNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                        return root.setenv(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            return root.setenv(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetenvNodeGen root, Object arguments2Value) {
                    return new SetenvNode_(root, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(LchmodNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class LchmodNodeFactory implements NodeFactory {

        private static LchmodNodeFactory lchmodNodeFactoryInstance;

        private LchmodNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return LchmodNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public LchmodNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (lchmodNodeFactoryInstance == null) {
                lchmodNodeFactoryInstance = new LchmodNodeFactory();
            }
            return lchmodNodeFactoryInstance;
        }

        public static LchmodNode create(RubyNode[] arguments) {
            return new LchmodNodeGen(arguments);
        }

        @GeneratedBy(LchmodNode.class)
        public static final class LchmodNodeGen extends LchmodNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private LchmodNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(LchmodNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected LchmodNodeGen root;

                BaseNode_(LchmodNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (LchmodNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return LchmodNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(LchmodNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(LchmodNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(LchmodNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(LchmodNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(LchmodNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(LchmodNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "lchmod(DynamicObject, int)", value = LchmodNode.class)
            private static final class LchmodNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                LchmodNode_(LchmodNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((LchmodNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.lchmod(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.lchmod(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(LchmodNodeGen root, Object arguments1Value) {
                    return new LchmodNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(LinkNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class LinkNodeFactory implements NodeFactory {

        private static LinkNodeFactory linkNodeFactoryInstance;

        private LinkNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return LinkNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public LinkNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (linkNodeFactoryInstance == null) {
                linkNodeFactoryInstance = new LinkNodeFactory();
            }
            return linkNodeFactoryInstance;
        }

        public static LinkNode create(RubyNode[] arguments) {
            return new LinkNodeGen(arguments);
        }

        @GeneratedBy(LinkNode.class)
        public static final class LinkNodeGen extends LinkNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean seenUnsupported0;

            private LinkNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    Object arguments1Value = arguments1_.execute(frameValue);
                    throw unsupported(ex.getResult(), arguments1Value);
                }
                DynamicObject arguments1Value_;
                try {
                    arguments1Value_ = arguments1_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(arguments0Value_, ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                    return this.link(arguments0Value_, arguments1Value_);
                }
                throw unsupported(arguments0Value_, arguments1Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value, Object arguments1Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_, arguments1_}, arguments0Value, arguments1Value);
            }

        }
    }
    @GeneratedBy(UnlinkNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class UnlinkNodeFactory implements NodeFactory {

        private static UnlinkNodeFactory unlinkNodeFactoryInstance;

        private UnlinkNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return UnlinkNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public UnlinkNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (unlinkNodeFactoryInstance == null) {
                unlinkNodeFactoryInstance = new UnlinkNodeFactory();
            }
            return unlinkNodeFactoryInstance;
        }

        public static UnlinkNode create(RubyNode[] arguments) {
            return new UnlinkNodeGen(arguments);
        }

        @GeneratedBy(UnlinkNode.class)
        public static final class UnlinkNodeGen extends UnlinkNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private UnlinkNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_))) {
                    return this.unlink(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(UmaskNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class UmaskNodeFactory implements NodeFactory {

        private static UmaskNodeFactory umaskNodeFactoryInstance;

        private UmaskNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return UmaskNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public UmaskNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (umaskNodeFactoryInstance == null) {
                umaskNodeFactoryInstance = new UmaskNodeFactory();
            }
            return umaskNodeFactoryInstance;
        }

        public static UmaskNode create(RubyNode[] arguments) {
            return new UmaskNodeGen(arguments);
        }

        @GeneratedBy(UmaskNode.class)
        public static final class UmaskNodeGen extends UmaskNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private UmaskNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(UmaskNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected UmaskNodeGen root;

                BaseNode_(UmaskNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (UmaskNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return UmaskNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(UmaskNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(UmaskNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(UmaskNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(UmaskNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(UmaskNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(UmaskNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "umask(int)", value = UmaskNode.class)
            private static final class UmaskNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                UmaskNode_(UmaskNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((UmaskNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.umask(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.umask(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(UmaskNodeGen root, Object arguments0Value) {
                    return new UmaskNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(UnsetenvNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class UnsetenvNodeFactory implements NodeFactory {

        private static UnsetenvNodeFactory unsetenvNodeFactoryInstance;

        private UnsetenvNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return UnsetenvNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public UnsetenvNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (unsetenvNodeFactoryInstance == null) {
                unsetenvNodeFactoryInstance = new UnsetenvNodeFactory();
            }
            return unsetenvNodeFactoryInstance;
        }

        public static UnsetenvNode create(RubyNode[] arguments) {
            return new UnsetenvNodeGen(arguments);
        }

        @GeneratedBy(UnsetenvNode.class)
        public static final class UnsetenvNodeGen extends UnsetenvNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private UnsetenvNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_))) {
                    return this.unsetenv(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(UtimesNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class UtimesNodeFactory implements NodeFactory {

        private static UtimesNodeFactory utimesNodeFactoryInstance;

        private UtimesNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return UtimesNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public UtimesNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (utimesNodeFactoryInstance == null) {
                utimesNodeFactoryInstance = new UtimesNodeFactory();
            }
            return utimesNodeFactoryInstance;
        }

        public static UtimesNode create(RubyNode[] arguments) {
            return new UtimesNodeGen(arguments);
        }

        @GeneratedBy(UtimesNode.class)
        public static final class UtimesNodeGen extends UtimesNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean seenUnsupported0;

            private UtimesNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    Object arguments1Value = arguments1_.execute(frameValue);
                    throw unsupported(ex.getResult(), arguments1Value);
                }
                DynamicObject arguments1Value_;
                try {
                    arguments1Value_ = arguments1_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(arguments0Value_, ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments1Value_))) {
                    return this.utimes(arguments0Value_, arguments1Value_);
                }
                throw unsupported(arguments0Value_, arguments1Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value, Object arguments1Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_, arguments1_}, arguments0Value, arguments1Value);
            }

        }
    }
    @GeneratedBy(MkdirNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class MkdirNodeFactory implements NodeFactory {

        private static MkdirNodeFactory mkdirNodeFactoryInstance;

        private MkdirNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return MkdirNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public MkdirNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (mkdirNodeFactoryInstance == null) {
                mkdirNodeFactoryInstance = new MkdirNodeFactory();
            }
            return mkdirNodeFactoryInstance;
        }

        public static MkdirNode create(RubyNode[] arguments) {
            return new MkdirNodeGen(arguments);
        }

        @GeneratedBy(MkdirNode.class)
        public static final class MkdirNodeGen extends MkdirNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private MkdirNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(MkdirNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected MkdirNodeGen root;

                BaseNode_(MkdirNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (MkdirNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return MkdirNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(MkdirNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(MkdirNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkdirNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(MkdirNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(MkdirNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkdirNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "mkdir(DynamicObject, int)", value = MkdirNode.class)
            private static final class MkdirNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                MkdirNode_(MkdirNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((MkdirNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_))) {
                        return root.mkdir(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyString(arguments0Value_))) {
                            return root.mkdir(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(MkdirNodeGen root, Object arguments1Value) {
                    return new MkdirNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(ChdirNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ChdirNodeFactory implements NodeFactory {

        private static ChdirNodeFactory chdirNodeFactoryInstance;

        private ChdirNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ChdirNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ChdirNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (chdirNodeFactoryInstance == null) {
                chdirNodeFactoryInstance = new ChdirNodeFactory();
            }
            return chdirNodeFactoryInstance;
        }

        public static ChdirNode create(RubyNode[] arguments) {
            return new ChdirNodeGen(arguments);
        }

        @GeneratedBy(ChdirNode.class)
        public static final class ChdirNodeGen extends ChdirNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private ChdirNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_))) {
                    return this.chdir(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(GetPriorityNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetPriorityNodeFactory implements NodeFactory {

        private static GetPriorityNodeFactory getPriorityNodeFactoryInstance;

        private GetPriorityNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetPriorityNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetPriorityNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getPriorityNodeFactoryInstance == null) {
                getPriorityNodeFactoryInstance = new GetPriorityNodeFactory();
            }
            return getPriorityNodeFactoryInstance;
        }

        public static GetPriorityNode create(RubyNode[] arguments) {
            return new GetPriorityNodeGen(arguments);
        }

        @GeneratedBy(GetPriorityNode.class)
        public static final class GetPriorityNodeGen extends GetPriorityNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private GetPriorityNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetPriorityNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetPriorityNodeGen root;

                BaseNode_(GetPriorityNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetPriorityNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return GetpriorityNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetPriorityNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetPriorityNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetPriorityNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetPriorityNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetPriorityNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetPriorityNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getpriority(int, int)", value = GetPriorityNode.class)
            private static final class GetpriorityNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                GetpriorityNode_(GetPriorityNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetpriorityNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((GetpriorityNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.getpriority(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.getpriority(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetPriorityNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new GetpriorityNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(SetgidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetgidNodeFactory implements NodeFactory {

        private static SetgidNodeFactory setgidNodeFactoryInstance;

        private SetgidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetgidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetgidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setgidNodeFactoryInstance == null) {
                setgidNodeFactoryInstance = new SetgidNodeFactory();
            }
            return setgidNodeFactoryInstance;
        }

        public static SetgidNode create(RubyNode[] arguments) {
            return new SetgidNodeGen(arguments);
        }

        @GeneratedBy(SetgidNode.class)
        public static final class SetgidNodeGen extends SetgidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private SetgidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetgidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetgidNodeGen root;

                BaseNode_(SetgidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetgidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return SetgidNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetgidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetgidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetgidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetgidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetgidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetgidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setgid(int)", value = SetgidNode.class)
            private static final class SetgidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                SetgidNode_(SetgidNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetgidNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.setgid(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.setgid(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetgidNodeGen root, Object arguments0Value) {
                    return new SetgidNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(SetpgidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetpgidNodeFactory implements NodeFactory {

        private static SetpgidNodeFactory setpgidNodeFactoryInstance;

        private SetpgidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetpgidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetpgidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setpgidNodeFactoryInstance == null) {
                setpgidNodeFactoryInstance = new SetpgidNodeFactory();
            }
            return setpgidNodeFactoryInstance;
        }

        public static SetpgidNode create(RubyNode[] arguments) {
            return new SetpgidNodeGen(arguments);
        }

        @GeneratedBy(SetpgidNode.class)
        public static final class SetpgidNodeGen extends SetpgidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private SetpgidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetpgidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetpgidNodeGen root;

                BaseNode_(SetpgidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetpgidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return SetpgidNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetpgidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetpgidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetpgidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetpgidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetpgidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetpgidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setpgid(int, int)", value = SetpgidNode.class)
            private static final class SetpgidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                SetpgidNode_(SetpgidNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetpgidNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((SetpgidNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.setpgid(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.setpgid(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetpgidNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new SetpgidNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(SetPriorityNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetPriorityNodeFactory implements NodeFactory {

        private static SetPriorityNodeFactory setPriorityNodeFactoryInstance;

        private SetPriorityNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetPriorityNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetPriorityNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setPriorityNodeFactoryInstance == null) {
                setPriorityNodeFactoryInstance = new SetPriorityNodeFactory();
            }
            return setPriorityNodeFactoryInstance;
        }

        public static SetPriorityNode create(RubyNode[] arguments) {
            return new SetPriorityNodeGen(arguments);
        }

        @GeneratedBy(SetPriorityNode.class)
        public static final class SetPriorityNodeGen extends SetPriorityNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private SetPriorityNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetPriorityNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetPriorityNodeGen root;

                BaseNode_(SetPriorityNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetPriorityNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        return SetpriorityNode_.create(root, arguments0Value, arguments1Value, arguments2Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetPriorityNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetPriorityNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetPriorityNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetPriorityNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetPriorityNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetPriorityNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setpriority(int, int, int)", value = SetPriorityNode.class)
            private static final class SetpriorityNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                SetpriorityNode_(SetPriorityNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetpriorityNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((SetpriorityNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((SetpriorityNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    return root.setpriority(arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        return root.setpriority(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetPriorityNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new SetpriorityNode_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(SetResuidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetResuidNodeFactory implements NodeFactory {

        private static SetResuidNodeFactory setResuidNodeFactoryInstance;

        private SetResuidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetResuidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetResuidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setResuidNodeFactoryInstance == null) {
                setResuidNodeFactoryInstance = new SetResuidNodeFactory();
            }
            return setResuidNodeFactoryInstance;
        }

        public static SetResuidNode create(RubyNode[] arguments) {
            return new SetResuidNodeGen(arguments);
        }

        @GeneratedBy(SetResuidNode.class)
        public static final class SetResuidNodeGen extends SetResuidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private SetResuidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetResuidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetResuidNodeGen root;

                BaseNode_(SetResuidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetResuidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        return SetresuidNode_.create(root, arguments0Value, arguments1Value, arguments2Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetResuidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetResuidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetResuidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetResuidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetResuidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetResuidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setresuid(int, int, int)", value = SetResuidNode.class)
            private static final class SetresuidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                SetresuidNode_(SetResuidNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetresuidNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((SetresuidNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((SetresuidNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    return root.setresuid(arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        return root.setresuid(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SetResuidNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new SetresuidNode_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(SetEuidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetEuidNodeFactory implements NodeFactory {

        private static SetEuidNodeFactory setEuidNodeFactoryInstance;

        private SetEuidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetEuidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetEuidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setEuidNodeFactoryInstance == null) {
                setEuidNodeFactoryInstance = new SetEuidNodeFactory();
            }
            return setEuidNodeFactoryInstance;
        }

        public static SetEuidNode create(RubyNode[] arguments) {
            return new SetEuidNodeGen(arguments);
        }

        @GeneratedBy(SetEuidNode.class)
        public static final class SetEuidNodeGen extends SetEuidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private SetEuidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetEuidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetEuidNodeGen root;

                BaseNode_(SetEuidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetEuidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return SeteuidNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetEuidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetEuidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetEuidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetEuidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetEuidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetEuidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "seteuid(int)", value = SetEuidNode.class)
            private static final class SeteuidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                SeteuidNode_(SetEuidNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SeteuidNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.seteuid(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.seteuid(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetEuidNodeGen root, Object arguments0Value) {
                    return new SeteuidNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(SetReuidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetReuidNodeFactory implements NodeFactory {

        private static SetReuidNodeFactory setReuidNodeFactoryInstance;

        private SetReuidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetReuidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetReuidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setReuidNodeFactoryInstance == null) {
                setReuidNodeFactoryInstance = new SetReuidNodeFactory();
            }
            return setReuidNodeFactoryInstance;
        }

        public static SetReuidNode create(RubyNode[] arguments) {
            return new SetReuidNodeGen(arguments);
        }

        @GeneratedBy(SetReuidNode.class)
        public static final class SetReuidNodeGen extends SetReuidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private SetReuidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetReuidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetReuidNodeGen root;

                BaseNode_(SetReuidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetReuidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return SetreuidNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetReuidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetReuidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetReuidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetReuidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetReuidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetReuidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setreuid(int, int)", value = SetReuidNode.class)
            private static final class SetreuidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                SetreuidNode_(SetReuidNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetreuidNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((SetreuidNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.setreuid(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.setreuid(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetReuidNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new SetreuidNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(SetRLimitNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetRLimitNodeFactory implements NodeFactory {

        private static SetRLimitNodeFactory setRLimitNodeFactoryInstance;

        private SetRLimitNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetRLimitNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetRLimitNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setRLimitNodeFactoryInstance == null) {
                setRLimitNodeFactoryInstance = new SetRLimitNodeFactory();
            }
            return setRLimitNodeFactoryInstance;
        }

        public static SetRLimitNode create(RubyNode[] arguments) {
            return new SetRLimitNodeGen(arguments);
        }

        @GeneratedBy(SetRLimitNode.class)
        public static final class SetRLimitNodeGen extends SetRLimitNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private SetRLimitNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetRLimitNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetRLimitNodeGen root;

                BaseNode_(SetRLimitNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetRLimitNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            BranchProfile errorProfile1 = (BranchProfile.create());
                            return SetrlimitNode_.create(root, arguments0Value, errorProfile1);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetRLimitNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetRLimitNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetRLimitNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetRLimitNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetRLimitNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetRLimitNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setrlimit(int, DynamicObject, BranchProfile)", value = SetRLimitNode.class)
            private static final class SetrlimitNode_ extends BaseNode_ {

                private final BranchProfile errorProfile;
                private final Class arguments0ImplicitType;

                SetrlimitNode_(SetRLimitNodeGen root, Object arguments0Value, BranchProfile errorProfile) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.errorProfile = errorProfile;
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetrlimitNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.setrlimit(arguments0Value_, arguments1Value_, this.errorProfile);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.setrlimit(arguments0Value_, arguments1Value_, this.errorProfile);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(SetRLimitNodeGen root, Object arguments0Value, BranchProfile errorProfile) {
                    return new SetrlimitNode_(root, arguments0Value, errorProfile);
                }

            }
        }
    }
    @GeneratedBy(SetRuidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetRuidNodeFactory implements NodeFactory {

        private static SetRuidNodeFactory setRuidNodeFactoryInstance;

        private SetRuidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetRuidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetRuidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setRuidNodeFactoryInstance == null) {
                setRuidNodeFactoryInstance = new SetRuidNodeFactory();
            }
            return setRuidNodeFactoryInstance;
        }

        public static SetRuidNode create(RubyNode[] arguments) {
            return new SetRuidNodeGen(arguments);
        }

        @GeneratedBy(SetRuidNode.class)
        public static final class SetRuidNodeGen extends SetRuidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private SetRuidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetRuidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetRuidNodeGen root;

                BaseNode_(SetRuidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetRuidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return SetruidNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetRuidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetRuidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetRuidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetRuidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetRuidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetRuidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setruid(int)", value = SetRuidNode.class)
            private static final class SetruidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                SetruidNode_(SetRuidNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetruidNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.setruid(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.setruid(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetRuidNodeGen root, Object arguments0Value) {
                    return new SetruidNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(SetUidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetUidNodeFactory implements NodeFactory {

        private static SetUidNodeFactory setUidNodeFactoryInstance;

        private SetUidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetUidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetUidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setUidNodeFactoryInstance == null) {
                setUidNodeFactoryInstance = new SetUidNodeFactory();
            }
            return setUidNodeFactoryInstance;
        }

        public static SetUidNode create(RubyNode[] arguments) {
            return new SetUidNodeGen(arguments);
        }

        @GeneratedBy(SetUidNode.class)
        public static final class SetUidNodeGen extends SetUidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private SetUidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetUidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetUidNodeGen root;

                BaseNode_(SetUidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetUidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return SetuidNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetUidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetUidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetUidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetUidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetUidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetUidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setuid(int)", value = SetUidNode.class)
            private static final class SetuidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                SetuidNode_(SetUidNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetuidNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.setuid(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.setuid(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SetUidNodeGen root, Object arguments0Value) {
                    return new SetuidNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(SetSidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetSidNodeFactory implements NodeFactory {

        private static SetSidNodeFactory setSidNodeFactoryInstance;

        private SetSidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetSidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetSidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setSidNodeFactoryInstance == null) {
                setSidNodeFactoryInstance = new SetSidNodeFactory();
            }
            return setSidNodeFactoryInstance;
        }

        public static SetSidNode create(RubyNode[] arguments) {
            return new SetSidNodeGen(arguments);
        }

        @GeneratedBy(SetSidNode.class)
        public static final class SetSidNodeGen extends SetSidNode {

            @SuppressWarnings("unused")
            private SetSidNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.setsid();
            }

        }
    }
    @GeneratedBy(FlockNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FlockNodeFactory implements NodeFactory {

        private static FlockNodeFactory flockNodeFactoryInstance;

        private FlockNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FlockNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FlockNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (flockNodeFactoryInstance == null) {
                flockNodeFactoryInstance = new FlockNodeFactory();
            }
            return flockNodeFactoryInstance;
        }

        public static FlockNode create(RubyNode[] arguments) {
            return new FlockNodeGen(arguments);
        }

        @GeneratedBy(FlockNode.class)
        public static final class FlockNodeGen extends FlockNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private FlockNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(FlockNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected FlockNodeGen root;

                BaseNode_(FlockNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (FlockNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return FlockNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(FlockNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(FlockNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FlockNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(FlockNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(FlockNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FlockNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "flock(int, int)", value = FlockNode.class)
            private static final class FlockNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                FlockNode_(FlockNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((FlockNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((FlockNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.flock(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.flock(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(FlockNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new FlockNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(MajorNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class MajorNodeFactory implements NodeFactory {

        private static MajorNodeFactory majorNodeFactoryInstance;

        private MajorNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return MajorNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public MajorNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (majorNodeFactoryInstance == null) {
                majorNodeFactoryInstance = new MajorNodeFactory();
            }
            return majorNodeFactoryInstance;
        }

        public static MajorNode create(RubyNode[] arguments) {
            return new MajorNodeGen(arguments);
        }

        @GeneratedBy(MajorNode.class)
        public static final class MajorNodeGen extends MajorNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private MajorNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(MajorNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected MajorNodeGen root;

                BaseNode_(MajorNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (MajorNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitLong(arguments0Value)) {
                        return MajorNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == long.class) {
                            return root.arguments0_.executeLong((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else if (_value instanceof Long) {
                                    _type = long.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(MajorNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(MajorNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(MajorNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(MajorNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(MajorNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(MajorNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "major(long)", value = MajorNode.class)
            private static final class MajorNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                MajorNode_(MajorNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitLongClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((MajorNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    long arguments0Value_;
                    try {
                        if (arguments0ImplicitType == long.class) {
                            arguments0Value_ = root.arguments0_.executeLong(frameValue);
                        } else if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = RubyTypes.promoteToLong(root.arguments0_.executeInteger(frameValue));
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitLong(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.major(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitLong(arguments0Value, arguments0ImplicitType)) {
                        long arguments0Value_ = RubyTypesGen.asImplicitLong(arguments0Value, arguments0ImplicitType);
                        return root.major(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(MajorNodeGen root, Object arguments0Value) {
                    return new MajorNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(MinorNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class MinorNodeFactory implements NodeFactory {

        private static MinorNodeFactory minorNodeFactoryInstance;

        private MinorNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return MinorNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public MinorNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (minorNodeFactoryInstance == null) {
                minorNodeFactoryInstance = new MinorNodeFactory();
            }
            return minorNodeFactoryInstance;
        }

        public static MinorNode create(RubyNode[] arguments) {
            return new MinorNodeGen(arguments);
        }

        @GeneratedBy(MinorNode.class)
        public static final class MinorNodeGen extends MinorNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private MinorNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(MinorNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected MinorNodeGen root;

                BaseNode_(MinorNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (MinorNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitLong(arguments0Value)) {
                        return MinorNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == long.class) {
                            return root.arguments0_.executeLong((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else if (_value instanceof Long) {
                                    _type = long.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(MinorNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(MinorNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(MinorNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(MinorNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(MinorNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(MinorNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "minor(long)", value = MinorNode.class)
            private static final class MinorNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                MinorNode_(MinorNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitLongClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((MinorNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    long arguments0Value_;
                    try {
                        if (arguments0ImplicitType == long.class) {
                            arguments0Value_ = root.arguments0_.executeLong(frameValue);
                        } else if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = RubyTypes.promoteToLong(root.arguments0_.executeInteger(frameValue));
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitLong(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.minor(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitLong(arguments0Value, arguments0ImplicitType)) {
                        long arguments0Value_ = RubyTypesGen.asImplicitLong(arguments0Value, arguments0ImplicitType);
                        return root.minor(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(MinorNodeGen root, Object arguments0Value) {
                    return new MinorNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(RenameNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class RenameNodeFactory implements NodeFactory {

        private static RenameNodeFactory renameNodeFactoryInstance;

        private RenameNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return RenameNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public RenameNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (renameNodeFactoryInstance == null) {
                renameNodeFactoryInstance = new RenameNodeFactory();
            }
            return renameNodeFactoryInstance;
        }

        public static RenameNode create(RubyNode[] arguments) {
            return new RenameNodeGen(arguments);
        }

        @GeneratedBy(RenameNode.class)
        public static final class RenameNodeGen extends RenameNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean seenUnsupported0;

            private RenameNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    Object arguments1Value = arguments1_.execute(frameValue);
                    throw unsupported(ex.getResult(), arguments1Value);
                }
                DynamicObject arguments1Value_;
                try {
                    arguments1Value_ = arguments1_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(arguments0Value_, ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                    return this.rename(arguments0Value_, arguments1Value_);
                }
                throw unsupported(arguments0Value_, arguments1Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value, Object arguments1Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_, arguments1_}, arguments0Value, arguments1Value);
            }

        }
    }
    @GeneratedBy(RmdirNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class RmdirNodeFactory implements NodeFactory {

        private static RmdirNodeFactory rmdirNodeFactoryInstance;

        private RmdirNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return RmdirNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public RmdirNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (rmdirNodeFactoryInstance == null) {
                rmdirNodeFactoryInstance = new RmdirNodeFactory();
            }
            return rmdirNodeFactoryInstance;
        }

        public static RmdirNode create(RubyNode[] arguments) {
            return new RmdirNodeGen(arguments);
        }

        @GeneratedBy(RmdirNode.class)
        public static final class RmdirNodeGen extends RmdirNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private RmdirNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_))) {
                    return this.rmdir(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(GetcwdNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetcwdNodeFactory implements NodeFactory {

        private static GetcwdNodeFactory getcwdNodeFactoryInstance;

        private GetcwdNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetcwdNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetcwdNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getcwdNodeFactoryInstance == null) {
                getcwdNodeFactoryInstance = new GetcwdNodeFactory();
            }
            return getcwdNodeFactoryInstance;
        }

        public static GetcwdNode create(RubyNode[] arguments) {
            return new GetcwdNodeGen(arguments);
        }

        @GeneratedBy(GetcwdNode.class)
        public static final class GetcwdNodeGen extends GetcwdNode {

            @SuppressWarnings("unused")
            private GetcwdNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return this.getcwd();
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                execute(frameValue);
                return;
            }

        }
    }
    @GeneratedBy(ErrnoNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ErrnoNodeFactory implements NodeFactory {

        private static ErrnoNodeFactory errnoNodeFactoryInstance;

        private ErrnoNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ErrnoNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ErrnoNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (errnoNodeFactoryInstance == null) {
                errnoNodeFactoryInstance = new ErrnoNodeFactory();
            }
            return errnoNodeFactoryInstance;
        }

        public static ErrnoNode create(RubyNode[] arguments) {
            return new ErrnoNodeGen(arguments);
        }

        @GeneratedBy(ErrnoNode.class)
        public static final class ErrnoNodeGen extends ErrnoNode {

            @SuppressWarnings("unused")
            private ErrnoNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.errno();
            }

        }
    }
    @GeneratedBy(ErrnoAssignNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ErrnoAssignNodeFactory implements NodeFactory {

        private static ErrnoAssignNodeFactory errnoAssignNodeFactoryInstance;

        private ErrnoAssignNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ErrnoAssignNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ErrnoAssignNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (errnoAssignNodeFactoryInstance == null) {
                errnoAssignNodeFactoryInstance = new ErrnoAssignNodeFactory();
            }
            return errnoAssignNodeFactoryInstance;
        }

        public static ErrnoAssignNode create(RubyNode[] arguments) {
            return new ErrnoAssignNodeGen(arguments);
        }

        @GeneratedBy(ErrnoAssignNode.class)
        public static final class ErrnoAssignNodeGen extends ErrnoAssignNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private ErrnoAssignNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ErrnoAssignNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ErrnoAssignNodeGen root;

                BaseNode_(ErrnoAssignNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ErrnoAssignNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return ErrnoNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ErrnoAssignNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ErrnoAssignNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(ErrnoAssignNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ErrnoAssignNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ErrnoAssignNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(ErrnoAssignNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "errno(int)", value = ErrnoAssignNode.class)
            private static final class ErrnoNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                ErrnoNode_(ErrnoAssignNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((ErrnoNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.errno(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.errno(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(ErrnoAssignNodeGen root, Object arguments0Value) {
                    return new ErrnoNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(FcntlNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FcntlNodeFactory implements NodeFactory {

        private static FcntlNodeFactory fcntlNodeFactoryInstance;

        private FcntlNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FcntlNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FcntlNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (fcntlNodeFactoryInstance == null) {
                fcntlNodeFactoryInstance = new FcntlNodeFactory();
            }
            return fcntlNodeFactoryInstance;
        }

        public static FcntlNode create(RubyNode[] arguments) {
            return new FcntlNodeGen(arguments);
        }

        @GeneratedBy(FcntlNode.class)
        public static final class FcntlNodeGen extends FcntlNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private FcntlNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(FcntlNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected FcntlNodeGen root;

                BaseNode_(FcntlNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (FcntlNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        if ((root.isNil(arguments2Value))) {
                            return Fcntl0Node_.create(root, arguments0Value, arguments1Value);
                        }
                        if (RubyTypesGen.isImplicitInteger(arguments2Value)) {
                            return Fcntl1Node_.create(root, arguments0Value, arguments1Value, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(FcntlNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(FcntlNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FcntlNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(FcntlNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(FcntlNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FcntlNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "fcntl(int, int, Object)", value = FcntlNode.class)
            private static final class Fcntl0Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                Fcntl0Node_(FcntlNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((Fcntl0Node_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((Fcntl0Node_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    if ((root.isNil(arguments2Value_))) {
                        return root.fcntl(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((root.isNil(arguments2Value))) {
                            return root.fcntl(arguments0Value_, arguments1Value_, arguments2Value);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FcntlNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new Fcntl0Node_(root, arguments0Value, arguments1Value);
                }

            }
            @GeneratedBy(methodName = "fcntl(int, int, int)", value = FcntlNode.class)
            private static final class Fcntl1Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                Fcntl1Node_(FcntlNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 2);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((Fcntl1Node_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((Fcntl1Node_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((Fcntl1Node_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    return root.fcntl(arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        return root.fcntl(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(FcntlNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new Fcntl1Node_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(GetpgidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetpgidNodeFactory implements NodeFactory {

        private static GetpgidNodeFactory getpgidNodeFactoryInstance;

        private GetpgidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetpgidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetpgidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getpgidNodeFactoryInstance == null) {
                getpgidNodeFactoryInstance = new GetpgidNodeFactory();
            }
            return getpgidNodeFactoryInstance;
        }

        public static GetpgidNode create(RubyNode[] arguments) {
            return new GetpgidNodeGen(arguments);
        }

        @GeneratedBy(GetpgidNode.class)
        public static final class GetpgidNodeGen extends GetpgidNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private GetpgidNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetpgidNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetpgidNodeGen root;

                BaseNode_(GetpgidNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetpgidNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return GetpgidNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetpgidNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetpgidNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(GetpgidNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetpgidNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetpgidNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(GetpgidNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getpgid(int)", value = GetpgidNode.class)
            private static final class GetpgidNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                GetpgidNode_(GetpgidNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetpgidNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.getpgid(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.getpgid(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(GetpgidNodeGen root, Object arguments0Value) {
                    return new GetpgidNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(GetpgrpNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetpgrpNodeFactory implements NodeFactory {

        private static GetpgrpNodeFactory getpgrpNodeFactoryInstance;

        private GetpgrpNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetpgrpNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetpgrpNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getpgrpNodeFactoryInstance == null) {
                getpgrpNodeFactoryInstance = new GetpgrpNodeFactory();
            }
            return getpgrpNodeFactoryInstance;
        }

        public static GetpgrpNode create(RubyNode[] arguments) {
            return new GetpgrpNodeGen(arguments);
        }

        @GeneratedBy(GetpgrpNode.class)
        public static final class GetpgrpNodeGen extends GetpgrpNode {

            @SuppressWarnings("unused")
            private GetpgrpNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getpgrp();
            }

        }
    }
    @GeneratedBy(IsATTYNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class IsATTYNodeFactory implements NodeFactory {

        private static IsATTYNodeFactory isATTYNodeFactoryInstance;

        private IsATTYNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return IsATTYNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public IsATTYNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (isATTYNodeFactoryInstance == null) {
                isATTYNodeFactoryInstance = new IsATTYNodeFactory();
            }
            return isATTYNodeFactoryInstance;
        }

        public static IsATTYNode create(RubyNode[] arguments) {
            return new IsATTYNodeGen(arguments);
        }

        @GeneratedBy(IsATTYNode.class)
        public static final class IsATTYNodeGen extends IsATTYNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private IsATTYNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(IsATTYNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected IsATTYNodeGen root;

                BaseNode_(IsATTYNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (IsATTYNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return IsATTYNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(IsATTYNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(IsATTYNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(IsATTYNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(IsATTYNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(IsATTYNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(IsATTYNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "isATTY(int)", value = IsATTYNode.class)
            private static final class IsATTYNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                IsATTYNode_(IsATTYNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((IsATTYNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.isATTY(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.isATTY(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(IsATTYNodeGen root, Object arguments0Value) {
                    return new IsATTYNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(GetppidNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetppidNodeFactory implements NodeFactory {

        private static GetppidNodeFactory getppidNodeFactoryInstance;

        private GetppidNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetppidNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList();
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetppidNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getppidNodeFactoryInstance == null) {
                getppidNodeFactoryInstance = new GetppidNodeFactory();
            }
            return getppidNodeFactoryInstance;
        }

        public static GetppidNode create(RubyNode[] arguments) {
            return new GetppidNodeGen(arguments);
        }

        @GeneratedBy(GetppidNode.class)
        public static final class GetppidNodeGen extends GetppidNode {

            @SuppressWarnings("unused")
            private GetppidNodeGen(RubyNode[] arguments) {
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return this.getppid();
            }

        }
    }
    @GeneratedBy(SendNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SendNodeFactory implements NodeFactory {

        private static SendNodeFactory sendNodeFactoryInstance;

        private SendNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SendNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SendNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (sendNodeFactoryInstance == null) {
                sendNodeFactoryInstance = new SendNodeFactory();
            }
            return sendNodeFactoryInstance;
        }

        public static SendNode create(RubyNode[] arguments) {
            return new SendNodeGen(arguments);
        }

        @GeneratedBy(SendNode.class)
        public static final class SendNodeGen extends SendNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @Child private RubyNode arguments3_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments2Type_;
            @CompilationFinal private Class arguments3Type_;
            @Child private BaseNode_ specialization_;

            private SendNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.arguments3_ = arguments != null && 3 < arguments.length ? arguments[3] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SendNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SendNodeGen root;

                BaseNode_(SendNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SendNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_, root.arguments3_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = executeArguments3_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value) && RubyTypesGen.isImplicitInteger(arguments3Value)) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return SendNode_.create(root, arguments0Value, arguments2Value, arguments3Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments3_(Frame frameValue) {
                    Class arguments3Type_ = root.arguments3Type_;
                    try {
                        if (arguments3Type_ == int.class) {
                            return root.arguments3_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments3Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments3_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments3Type_ = _type;
                            }
                        } else {
                            return root.arguments3_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments3Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SendNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SendNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(SendNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SendNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SendNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = executeArguments3_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(SendNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "send(int, DynamicObject, int, int)", value = SendNode.class)
            private static final class SendNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments2ImplicitType;
                private final Class arguments3ImplicitType;

                SendNode_(SendNodeGen root, Object arguments0Value, Object arguments2Value, Object arguments3Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                    this.arguments3ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments3Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SendNode_) other).arguments0ImplicitType && this.arguments2ImplicitType == ((SendNode_) other).arguments2ImplicitType && this.arguments3ImplicitType == ((SendNode_) other).arguments3ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = executeArguments3_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value);
                    }
                    int arguments3Value_;
                    try {
                        if (arguments3ImplicitType == int.class) {
                            arguments3Value_ = root.arguments3_.executeInteger(frameValue);
                        } else {
                            Object arguments3Value__ = executeArguments3_(frameValue);
                            arguments3Value_ = RubyTypesGen.expectImplicitInteger(arguments3Value__, arguments3ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.send(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType) && RubyTypesGen.isImplicitInteger(arguments3Value, arguments3ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        int arguments3Value_ = RubyTypesGen.asImplicitInteger(arguments3Value, arguments3ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.send(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(SendNodeGen root, Object arguments0Value, Object arguments2Value, Object arguments3Value) {
                    return new SendNode_(root, arguments0Value, arguments2Value, arguments3Value);
                }

            }
        }
    }
    @GeneratedBy(SymlinkNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SymlinkNodeFactory implements NodeFactory {

        private static SymlinkNodeFactory symlinkNodeFactoryInstance;

        private SymlinkNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SymlinkNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SymlinkNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (symlinkNodeFactoryInstance == null) {
                symlinkNodeFactoryInstance = new SymlinkNodeFactory();
            }
            return symlinkNodeFactoryInstance;
        }

        public static SymlinkNode create(RubyNode[] arguments) {
            return new SymlinkNodeGen(arguments);
        }

        @GeneratedBy(SymlinkNode.class)
        public static final class SymlinkNodeGen extends SymlinkNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean seenUnsupported0;

            private SymlinkNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return executeInteger(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                executeInteger(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    Object arguments1Value = arguments1_.execute(frameValue);
                    throw unsupported(ex.getResult(), arguments1Value);
                }
                DynamicObject arguments1Value_;
                try {
                    arguments1Value_ = arguments1_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(arguments0Value_, ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                    return this.symlink(arguments0Value_, arguments1Value_);
                }
                throw unsupported(arguments0Value_, arguments1Value_);
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value, Object arguments1Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_, arguments1_}, arguments0Value, arguments1Value);
            }

        }
    }
    @GeneratedBy(GetAddrInfoNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetAddrInfoNodeFactory implements NodeFactory {

        private static GetAddrInfoNodeFactory getAddrInfoNodeFactoryInstance;

        private GetAddrInfoNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetAddrInfoNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetAddrInfoNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getAddrInfoNodeFactoryInstance == null) {
                getAddrInfoNodeFactoryInstance = new GetAddrInfoNodeFactory();
            }
            return getAddrInfoNodeFactoryInstance;
        }

        public static GetAddrInfoNode create(RubyNode[] arguments) {
            return new GetAddrInfoNodeGen(arguments);
        }

        @GeneratedBy(GetAddrInfoNode.class)
        public static final class GetAddrInfoNodeGen extends GetAddrInfoNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @Child private RubyNode arguments3_;
            @Child private BaseNode_ specialization_;

            private GetAddrInfoNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.arguments3_ = arguments != null && 3 < arguments.length ? arguments[3] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetAddrInfoNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetAddrInfoNodeGen root;

                BaseNode_(GetAddrInfoNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetAddrInfoNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_, root.arguments3_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject && arguments3Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        if ((root.isNil(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            return GetaddrinfoNilNode_.create(root);
                        }
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                            return GetaddrinfoStringNode_.create(root);
                        }
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (root.isNil(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                            return GetaddrinfoNode_.create(root);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

            }
            @GeneratedBy(GetAddrInfoNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetAddrInfoNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(GetAddrInfoNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetAddrInfoNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetAddrInfoNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(GetAddrInfoNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getaddrinfoNil(DynamicObject, DynamicObject, DynamicObject, DynamicObject)", value = GetAddrInfoNode.class)
            private static final class GetaddrinfoNilNode_ extends BaseNode_ {

                GetaddrinfoNilNode_(GetAddrInfoNodeGen root) {
                    super(root, 1);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult());
                    }
                    if ((root.isNil(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                        return root.getaddrinfoNil(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject && arguments3Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        if ((root.isNil(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            return root.getaddrinfoNil(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(GetAddrInfoNodeGen root) {
                    return new GetaddrinfoNilNode_(root);
                }

            }
            @GeneratedBy(methodName = "getaddrinfoString(DynamicObject, DynamicObject, DynamicObject, DynamicObject)", value = GetAddrInfoNode.class)
            private static final class GetaddrinfoStringNode_ extends BaseNode_ {

                GetaddrinfoStringNode_(GetAddrInfoNodeGen root) {
                    super(root, 2);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                        return root.getaddrinfoString(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject && arguments3Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                            return root.getaddrinfoString(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(GetAddrInfoNodeGen root) {
                    return new GetaddrinfoStringNode_(root);
                }

            }
            @GeneratedBy(methodName = "getaddrinfo(DynamicObject, DynamicObject, DynamicObject, DynamicObject)", value = GetAddrInfoNode.class)
            private static final class GetaddrinfoNode_ extends BaseNode_ {

                GetaddrinfoNode_(GetAddrInfoNodeGen root) {
                    super(root, 3);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments0Value_)) && (root.isNil(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                        return root.getaddrinfo(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject && arguments3Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (root.isNil(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_))) {
                            return root.getaddrinfo(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value);
                }

                static BaseNode_ create(GetAddrInfoNodeGen root) {
                    return new GetaddrinfoNode_(root);
                }

            }
        }
    }
    @GeneratedBy(ConnectNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ConnectNodeFactory implements NodeFactory {

        private static ConnectNodeFactory connectNodeFactoryInstance;

        private ConnectNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ConnectNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ConnectNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (connectNodeFactoryInstance == null) {
                connectNodeFactoryInstance = new ConnectNodeFactory();
            }
            return connectNodeFactoryInstance;
        }

        public static ConnectNode create(RubyNode[] arguments) {
            return new ConnectNodeGen(arguments);
        }

        @GeneratedBy(ConnectNode.class)
        public static final class ConnectNodeGen extends ConnectNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private ConnectNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ConnectNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ConnectNodeGen root;

                BaseNode_(ConnectNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ConnectNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return ConnectNode_.create(root, arguments0Value, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ConnectNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ConnectNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ConnectNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ConnectNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ConnectNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ConnectNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "connect(int, DynamicObject, int)", value = ConnectNode.class)
            private static final class ConnectNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments2ImplicitType;

                ConnectNode_(ConnectNodeGen root, Object arguments0Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((ConnectNode_) other).arguments0ImplicitType && this.arguments2ImplicitType == ((ConnectNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.connect(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.connect(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(ConnectNodeGen root, Object arguments0Value, Object arguments2Value) {
                    return new ConnectNode_(root, arguments0Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(FreeAddrInfoNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class FreeAddrInfoNodeFactory implements NodeFactory {

        private static FreeAddrInfoNodeFactory freeAddrInfoNodeFactoryInstance;

        private FreeAddrInfoNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return FreeAddrInfoNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public FreeAddrInfoNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (freeAddrInfoNodeFactoryInstance == null) {
                freeAddrInfoNodeFactoryInstance = new FreeAddrInfoNodeFactory();
            }
            return freeAddrInfoNodeFactoryInstance;
        }

        public static FreeAddrInfoNode create(RubyNode[] arguments) {
            return new FreeAddrInfoNodeGen(arguments);
        }

        @GeneratedBy(FreeAddrInfoNode.class)
        public static final class FreeAddrInfoNodeGen extends FreeAddrInfoNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private boolean seenUnsupported0;

            private FreeAddrInfoNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
            }

            @Override
            public NodeCost getCost() {
                return NodeCost.MONOMORPHIC;
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    throw unsupported(ex.getResult());
                }
                if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                    return this.freeaddrinfo(arguments0Value_);
                }
                throw unsupported(arguments0Value_);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                execute(frameValue);
                return;
            }

            private UnsupportedSpecializationException unsupported(Object arguments0Value) {
                if (!seenUnsupported0) {
                    CompilerDirectives.transferToInterpreterAndInvalidate();
                    seenUnsupported0 = true;
                }
                return new UnsupportedSpecializationException(this, new Node[] {arguments0_}, arguments0Value);
            }

        }
    }
    @GeneratedBy(GetNameInfoNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetNameInfoNodeFactory implements NodeFactory {

        private static GetNameInfoNodeFactory getNameInfoNodeFactoryInstance;

        private GetNameInfoNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetNameInfoNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetNameInfoNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getNameInfoNodeFactoryInstance == null) {
                getNameInfoNodeFactoryInstance = new GetNameInfoNodeFactory();
            }
            return getNameInfoNodeFactoryInstance;
        }

        public static GetNameInfoNode create(RubyNode[] arguments) {
            return new GetNameInfoNodeGen(arguments);
        }

        @GeneratedBy(GetNameInfoNode.class)
        public static final class GetNameInfoNodeGen extends GetNameInfoNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @Child private RubyNode arguments3_;
            @Child private RubyNode arguments4_;
            @Child private RubyNode arguments5_;
            @Child private RubyNode arguments6_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments3Type_;
            @CompilationFinal private Class arguments5Type_;
            @CompilationFinal private Class arguments6Type_;
            @Child private BaseNode_ specialization_;

            private GetNameInfoNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.arguments3_ = arguments != null && 3 < arguments.length ? arguments[3] : null;
                this.arguments4_ = arguments != null && 4 < arguments.length ? arguments[4] : null;
                this.arguments5_ = arguments != null && 5 < arguments.length ? arguments[5] : null;
                this.arguments6_ = arguments != null && 6 < arguments.length ? arguments[6] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetNameInfoNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetNameInfoNodeGen root;

                BaseNode_(GetNameInfoNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetNameInfoNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_, root.arguments3_, root.arguments4_, root.arguments5_, root.arguments6_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object... args_) {
                    return this.executeInt_((VirtualFrame) frameValue, args_[0], args_[1], args_[2], args_[3], args_[4], args_[5], args_[6]);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    Object arguments3Value_ = executeArguments3_(frameValue);
                    Object arguments4Value_ = root.arguments4_.execute(frameValue);
                    Object arguments5Value_ = executeArguments5_(frameValue);
                    Object arguments6Value_ = executeArguments6_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object... args_) {
                    if (args_[0] instanceof DynamicObject && RubyTypesGen.isImplicitInteger(args_[1]) && args_[2] instanceof DynamicObject && RubyTypesGen.isImplicitInteger(args_[3]) && args_[4] instanceof DynamicObject && RubyTypesGen.isImplicitInteger(args_[5]) && RubyTypesGen.isImplicitInteger(args_[6])) {
                        DynamicObject arguments0Value_ = (DynamicObject) args_[0];
                        DynamicObject arguments2Value_ = (DynamicObject) args_[2];
                        DynamicObject arguments4Value_ = (DynamicObject) args_[4];
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return GetnameinfoNode_.create(root, args_[1], args_[3], args_[5], args_[6]);
                        }
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (root.isNil(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return GetnameinfoNullHostNode_.create(root, args_[1], args_[3], args_[5], args_[6]);
                        }
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (root.isNil(arguments4Value_))) {
                            return GetnameinfoNullServiceNode_.create(root, args_[1], args_[3], args_[5], args_[6]);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments3_(Frame frameValue) {
                    Class arguments3Type_ = root.arguments3Type_;
                    try {
                        if (arguments3Type_ == int.class) {
                            return root.arguments3_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments3Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments3_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments3Type_ = _type;
                            }
                        } else {
                            return root.arguments3_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments3Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments5_(Frame frameValue) {
                    Class arguments5Type_ = root.arguments5Type_;
                    try {
                        if (arguments5Type_ == int.class) {
                            return root.arguments5_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments5Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments5_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments5Type_ = _type;
                            }
                        } else {
                            return root.arguments5_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments5Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments6_(Frame frameValue) {
                    Class arguments6Type_ = root.arguments6Type_;
                    try {
                        if (arguments6Type_ == int.class) {
                            return root.arguments6_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments6Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments6_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments6Type_ = _type;
                            }
                        } else {
                            return root.arguments6_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments6Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetNameInfoNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetNameInfoNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                }

                static BaseNode_ create(GetNameInfoNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetNameInfoNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetNameInfoNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object... args_) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, args_[0], args_[1], args_[2], args_[3], args_[4], args_[5], args_[6]));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    Object arguments3Value_ = executeArguments3_(frameValue);
                    Object arguments4Value_ = root.arguments4_.execute(frameValue);
                    Object arguments5Value_ = executeArguments5_(frameValue);
                    Object arguments6Value_ = executeArguments6_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                }

                static BaseNode_ create(GetNameInfoNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getnameinfo(DynamicObject, int, DynamicObject, int, DynamicObject, int, int)", value = GetNameInfoNode.class)
            private static final class GetnameinfoNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;
                private final Class arguments3ImplicitType;
                private final Class arguments5ImplicitType;
                private final Class arguments6ImplicitType;

                GetnameinfoNode_(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments3ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments3Value);
                    this.arguments5ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments5Value);
                    this.arguments6ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments6Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((GetnameinfoNode_) other).arguments1ImplicitType && this.arguments3ImplicitType == ((GetnameinfoNode_) other).arguments3ImplicitType && this.arguments5ImplicitType == ((GetnameinfoNode_) other).arguments5ImplicitType && this.arguments6ImplicitType == ((GetnameinfoNode_) other).arguments6ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments3Value_;
                    try {
                        if (arguments3ImplicitType == int.class) {
                            arguments3Value_ = root.arguments3_.executeInteger(frameValue);
                        } else {
                            Object arguments3Value__ = executeArguments3_(frameValue);
                            arguments3Value_ = RubyTypesGen.expectImplicitInteger(arguments3Value__, arguments3ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments4Value_;
                    try {
                        arguments4Value_ = root.arguments4_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult(), arguments5Value, arguments6Value);
                    }
                    int arguments5Value_;
                    try {
                        if (arguments5ImplicitType == int.class) {
                            arguments5Value_ = root.arguments5_.executeInteger(frameValue);
                        } else {
                            Object arguments5Value__ = executeArguments5_(frameValue);
                            arguments5Value_ = RubyTypesGen.expectImplicitInteger(arguments5Value__, arguments5ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, ex.getResult(), arguments6Value);
                    }
                    int arguments6Value_;
                    try {
                        if (arguments6ImplicitType == int.class) {
                            arguments6Value_ = root.arguments6_.executeInteger(frameValue);
                        } else {
                            Object arguments6Value__ = executeArguments6_(frameValue);
                            arguments6Value_ = RubyTypesGen.expectImplicitInteger(arguments6Value__, arguments6ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                        return root.getnameinfo(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && arguments2Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments3Value, arguments3ImplicitType) && arguments4Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments5Value, arguments5ImplicitType) && RubyTypesGen.isImplicitInteger(arguments6Value, arguments6ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        int arguments3Value_ = RubyTypesGen.asImplicitInteger(arguments3Value, arguments3ImplicitType);
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        int arguments5Value_ = RubyTypesGen.asImplicitInteger(arguments5Value, arguments5ImplicitType);
                        int arguments6Value_ = RubyTypesGen.asImplicitInteger(arguments6Value, arguments6ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return root.getnameinfo(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                }

                static BaseNode_ create(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    return new GetnameinfoNode_(root, arguments1Value, arguments3Value, arguments5Value, arguments6Value);
                }

            }
            @GeneratedBy(methodName = "getnameinfoNullHost(DynamicObject, int, DynamicObject, int, DynamicObject, int, int)", value = GetNameInfoNode.class)
            private static final class GetnameinfoNullHostNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;
                private final Class arguments3ImplicitType;
                private final Class arguments5ImplicitType;
                private final Class arguments6ImplicitType;

                GetnameinfoNullHostNode_(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    super(root, 2);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments3ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments3Value);
                    this.arguments5ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments5Value);
                    this.arguments6ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments6Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((GetnameinfoNullHostNode_) other).arguments1ImplicitType && this.arguments3ImplicitType == ((GetnameinfoNullHostNode_) other).arguments3ImplicitType && this.arguments5ImplicitType == ((GetnameinfoNullHostNode_) other).arguments5ImplicitType && this.arguments6ImplicitType == ((GetnameinfoNullHostNode_) other).arguments6ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments3Value_;
                    try {
                        if (arguments3ImplicitType == int.class) {
                            arguments3Value_ = root.arguments3_.executeInteger(frameValue);
                        } else {
                            Object arguments3Value__ = executeArguments3_(frameValue);
                            arguments3Value_ = RubyTypesGen.expectImplicitInteger(arguments3Value__, arguments3ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments4Value_;
                    try {
                        arguments4Value_ = root.arguments4_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult(), arguments5Value, arguments6Value);
                    }
                    int arguments5Value_;
                    try {
                        if (arguments5ImplicitType == int.class) {
                            arguments5Value_ = root.arguments5_.executeInteger(frameValue);
                        } else {
                            Object arguments5Value__ = executeArguments5_(frameValue);
                            arguments5Value_ = RubyTypesGen.expectImplicitInteger(arguments5Value__, arguments5ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, ex.getResult(), arguments6Value);
                    }
                    int arguments6Value_;
                    try {
                        if (arguments6ImplicitType == int.class) {
                            arguments6Value_ = root.arguments6_.executeInteger(frameValue);
                        } else {
                            Object arguments6Value__ = executeArguments6_(frameValue);
                            arguments6Value_ = RubyTypesGen.expectImplicitInteger(arguments6Value__, arguments6ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments0Value_)) && (root.isNil(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                        return root.getnameinfoNullHost(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && arguments2Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments3Value, arguments3ImplicitType) && arguments4Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments5Value, arguments5ImplicitType) && RubyTypesGen.isImplicitInteger(arguments6Value, arguments6ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        int arguments3Value_ = RubyTypesGen.asImplicitInteger(arguments3Value, arguments3ImplicitType);
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        int arguments5Value_ = RubyTypesGen.asImplicitInteger(arguments5Value, arguments5ImplicitType);
                        int arguments6Value_ = RubyTypesGen.asImplicitInteger(arguments6Value, arguments6ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (root.isNil(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return root.getnameinfoNullHost(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                }

                static BaseNode_ create(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    return new GetnameinfoNullHostNode_(root, arguments1Value, arguments3Value, arguments5Value, arguments6Value);
                }

            }
            @GeneratedBy(methodName = "getnameinfoNullService(DynamicObject, int, DynamicObject, int, DynamicObject, int, int)", value = GetNameInfoNode.class)
            private static final class GetnameinfoNullServiceNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;
                private final Class arguments3ImplicitType;
                private final Class arguments5ImplicitType;
                private final Class arguments6ImplicitType;

                GetnameinfoNullServiceNode_(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    super(root, 3);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments3ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments3Value);
                    this.arguments5ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments5Value);
                    this.arguments6ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments6Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((GetnameinfoNullServiceNode_) other).arguments1ImplicitType && this.arguments3ImplicitType == ((GetnameinfoNullServiceNode_) other).arguments3ImplicitType && this.arguments5ImplicitType == ((GetnameinfoNullServiceNode_) other).arguments5ImplicitType && this.arguments6ImplicitType == ((GetnameinfoNullServiceNode_) other).arguments6ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = executeArguments3_(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                    }
                    int arguments3Value_;
                    try {
                        if (arguments3ImplicitType == int.class) {
                            arguments3Value_ = root.arguments3_.executeInteger(frameValue);
                        } else {
                            Object arguments3Value__ = executeArguments3_(frameValue);
                            arguments3Value_ = RubyTypesGen.expectImplicitInteger(arguments3Value__, arguments3ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value, arguments5Value, arguments6Value);
                    }
                    DynamicObject arguments4Value_;
                    try {
                        arguments4Value_ = root.arguments4_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments5Value = executeArguments5_(frameValue);
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult(), arguments5Value, arguments6Value);
                    }
                    int arguments5Value_;
                    try {
                        if (arguments5ImplicitType == int.class) {
                            arguments5Value_ = root.arguments5_.executeInteger(frameValue);
                        } else {
                            Object arguments5Value__ = executeArguments5_(frameValue);
                            arguments5Value_ = RubyTypesGen.expectImplicitInteger(arguments5Value__, arguments5ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments6Value = executeArguments6_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, ex.getResult(), arguments6Value);
                    }
                    int arguments6Value_;
                    try {
                        if (arguments6ImplicitType == int.class) {
                            arguments6Value_ = root.arguments6_.executeInteger(frameValue);
                        } else {
                            Object arguments6Value__ = executeArguments6_(frameValue);
                            arguments6Value_ = RubyTypesGen.expectImplicitInteger(arguments6Value__, arguments6ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (root.isNil(arguments4Value_))) {
                        return root.getnameinfoNullService(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value, Object arguments5Value, Object arguments6Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && arguments2Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments3Value, arguments3ImplicitType) && arguments4Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments5Value, arguments5ImplicitType) && RubyTypesGen.isImplicitInteger(arguments6Value, arguments6ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        int arguments3Value_ = RubyTypesGen.asImplicitInteger(arguments3Value, arguments3ImplicitType);
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        int arguments5Value_ = RubyTypesGen.asImplicitInteger(arguments5Value, arguments5ImplicitType);
                        int arguments6Value_ = RubyTypesGen.asImplicitInteger(arguments6Value, arguments6ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments0Value_)) && (RubyGuards.isRubyPointer(arguments2Value_)) && (root.isNil(arguments4Value_))) {
                            return root.getnameinfoNullService(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, arguments5Value_, arguments6Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value, arguments5Value, arguments6Value);
                }

                static BaseNode_ create(GetNameInfoNodeGen root, Object arguments1Value, Object arguments3Value, Object arguments5Value, Object arguments6Value) {
                    return new GetnameinfoNullServiceNode_(root, arguments1Value, arguments3Value, arguments5Value, arguments6Value);
                }

            }
        }
    }
    @GeneratedBy(ShutdownNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ShutdownNodeFactory implements NodeFactory {

        private static ShutdownNodeFactory shutdownNodeFactoryInstance;

        private ShutdownNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ShutdownNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ShutdownNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (shutdownNodeFactoryInstance == null) {
                shutdownNodeFactoryInstance = new ShutdownNodeFactory();
            }
            return shutdownNodeFactoryInstance;
        }

        public static ShutdownNode create(RubyNode[] arguments) {
            return new ShutdownNodeGen(arguments);
        }

        @GeneratedBy(ShutdownNode.class)
        public static final class ShutdownNodeGen extends ShutdownNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private ShutdownNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ShutdownNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ShutdownNodeGen root;

                BaseNode_(ShutdownNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ShutdownNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return ShutdownNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ShutdownNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ShutdownNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ShutdownNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ShutdownNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ShutdownNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ShutdownNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "shutdown(int, int)", value = ShutdownNode.class)
            private static final class ShutdownNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                ShutdownNode_(ShutdownNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((ShutdownNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((ShutdownNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.shutdown(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.shutdown(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ShutdownNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new ShutdownNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(SocketNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SocketNodeFactory implements NodeFactory {

        private static SocketNodeFactory socketNodeFactoryInstance;

        private SocketNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SocketNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SocketNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (socketNodeFactoryInstance == null) {
                socketNodeFactoryInstance = new SocketNodeFactory();
            }
            return socketNodeFactoryInstance;
        }

        public static SocketNode create(RubyNode[] arguments) {
            return new SocketNodeGen(arguments);
        }

        @GeneratedBy(SocketNode.class)
        public static final class SocketNodeGen extends SocketNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private SocketNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SocketNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SocketNodeGen root;

                BaseNode_(SocketNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SocketNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        return GetnameinfoNode_.create(root, arguments0Value, arguments1Value, arguments2Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SocketNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SocketNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SocketNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SocketNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SocketNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SocketNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getnameinfo(int, int, int)", value = SocketNode.class)
            private static final class GetnameinfoNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                GetnameinfoNode_(SocketNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetnameinfoNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((GetnameinfoNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((GetnameinfoNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    return root.getnameinfo(arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        return root.getnameinfo(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(SocketNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new GetnameinfoNode_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(SetSockOptNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class SetSockOptNodeFactory implements NodeFactory {

        private static SetSockOptNodeFactory setSockOptNodeFactoryInstance;

        private SetSockOptNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return SetSockOptNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public SetSockOptNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (setSockOptNodeFactoryInstance == null) {
                setSockOptNodeFactoryInstance = new SetSockOptNodeFactory();
            }
            return setSockOptNodeFactoryInstance;
        }

        public static SetSockOptNode create(RubyNode[] arguments) {
            return new SetSockOptNodeGen(arguments);
        }

        @GeneratedBy(SetSockOptNode.class)
        public static final class SetSockOptNodeGen extends SetSockOptNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @Child private RubyNode arguments3_;
            @Child private RubyNode arguments4_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @CompilationFinal private Class arguments4Type_;
            @Child private BaseNode_ specialization_;

            private SetSockOptNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.arguments3_ = arguments != null && 3 < arguments.length ? arguments[3] : null;
                this.arguments4_ = arguments != null && 4 < arguments.length ? arguments[4] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(SetSockOptNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected SetSockOptNodeGen root;

                BaseNode_(SetSockOptNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (SetSockOptNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_, root.arguments3_, root.arguments4_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    Object arguments4Value_ = executeArguments4_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value) && arguments3Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments4Value)) {
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        if ((RubyGuards.isRubyPointer(arguments3Value_))) {
                            return SetsockoptNode_.create(root, arguments0Value, arguments1Value, arguments2Value, arguments4Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments4_(Frame frameValue) {
                    Class arguments4Type_ = root.arguments4Type_;
                    try {
                        if (arguments4Type_ == int.class) {
                            return root.arguments4_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments4Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments4_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments4Type_ = _type;
                            }
                        } else {
                            return root.arguments4_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments4Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(SetSockOptNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(SetSockOptNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(SetSockOptNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(SetSockOptNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(SetSockOptNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    Object arguments4Value_ = executeArguments4_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(SetSockOptNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "setsockopt(int, int, int, DynamicObject, int)", value = SetSockOptNode.class)
            private static final class SetsockoptNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;
                private final Class arguments4ImplicitType;

                SetsockoptNode_(SetSockOptNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments4Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                    this.arguments4ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments4Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((SetsockoptNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((SetsockoptNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((SetsockoptNode_) other).arguments2ImplicitType && this.arguments4ImplicitType == ((SetsockoptNode_) other).arguments4ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = executeArguments4_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = executeArguments4_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = executeArguments4_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = executeArguments4_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value);
                    }
                    int arguments4Value_;
                    try {
                        if (arguments4ImplicitType == int.class) {
                            arguments4Value_ = root.arguments4_.executeInteger(frameValue);
                        } else {
                            Object arguments4Value__ = executeArguments4_(frameValue);
                            arguments4Value_ = RubyTypesGen.expectImplicitInteger(arguments4Value__, arguments4ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments3Value_))) {
                        return root.setsockopt(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType) && arguments3Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments4Value, arguments4ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        int arguments4Value_ = RubyTypesGen.asImplicitInteger(arguments4Value, arguments4ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments3Value_))) {
                            return root.setsockopt(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(SetSockOptNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments4Value) {
                    return new SetsockoptNode_(root, arguments0Value, arguments1Value, arguments2Value, arguments4Value);
                }

            }
        }
    }
    @GeneratedBy(BindNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class BindNodeFactory implements NodeFactory {

        private static BindNodeFactory bindNodeFactoryInstance;

        private BindNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return BindNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public BindNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (bindNodeFactoryInstance == null) {
                bindNodeFactoryInstance = new BindNodeFactory();
            }
            return bindNodeFactoryInstance;
        }

        public static BindNode create(RubyNode[] arguments) {
            return new BindNodeGen(arguments);
        }

        @GeneratedBy(BindNode.class)
        public static final class BindNodeGen extends BindNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private BindNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(BindNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected BindNodeGen root;

                BaseNode_(BindNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (BindNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return BindNode_.create(root, arguments0Value, arguments2Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(BindNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(BindNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(BindNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(BindNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(BindNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(BindNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "bind(int, DynamicObject, int)", value = BindNode.class)
            private static final class BindNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments2ImplicitType;

                BindNode_(BindNodeGen root, Object arguments0Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((BindNode_) other).arguments0ImplicitType && this.arguments2ImplicitType == ((BindNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                        return root.bind(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments1Value_))) {
                            return root.bind(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(BindNodeGen root, Object arguments0Value, Object arguments2Value) {
                    return new BindNode_(root, arguments0Value, arguments2Value);
                }

            }
        }
    }
    @GeneratedBy(ListenNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class ListenNodeFactory implements NodeFactory {

        private static ListenNodeFactory listenNodeFactoryInstance;

        private ListenNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ListenNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public ListenNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (listenNodeFactoryInstance == null) {
                listenNodeFactoryInstance = new ListenNodeFactory();
            }
            return listenNodeFactoryInstance;
        }

        public static ListenNode create(RubyNode[] arguments) {
            return new ListenNodeGen(arguments);
        }

        @GeneratedBy(ListenNode.class)
        public static final class ListenNodeGen extends ListenNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private ListenNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(ListenNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected ListenNodeGen root;

                BaseNode_(ListenNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ListenNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        return ListenNode_.create(root, arguments0Value, arguments1Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(ListenNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(ListenNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ListenNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(ListenNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(ListenNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ListenNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "listen(int, int)", value = ListenNode.class)
            private static final class ListenNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                ListenNode_(ListenNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((ListenNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((ListenNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    return root.listen(arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        return root.listen(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ListenNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new ListenNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(GetHostNameNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetHostNameNodeFactory implements NodeFactory {

        private static GetHostNameNodeFactory getHostNameNodeFactoryInstance;

        private GetHostNameNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetHostNameNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetHostNameNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getHostNameNodeFactoryInstance == null) {
                getHostNameNodeFactoryInstance = new GetHostNameNodeFactory();
            }
            return getHostNameNodeFactoryInstance;
        }

        public static GetHostNameNode create(RubyNode[] arguments) {
            return new GetHostNameNodeGen(arguments);
        }

        @GeneratedBy(GetHostNameNode.class)
        public static final class GetHostNameNodeGen extends GetHostNameNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private GetHostNameNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetHostNameNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetHostNameNodeGen root;

                BaseNode_(GetHostNameNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetHostNameNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                            return GetHostNameNode_.create(root, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetHostNameNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetHostNameNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetHostNameNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetHostNameNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetHostNameNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetHostNameNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getHostName(DynamicObject, int)", value = GetHostNameNode.class)
            private static final class GetHostNameNode_ extends BaseNode_ {

                private final Class arguments1ImplicitType;

                GetHostNameNode_(GetHostNameNodeGen root, Object arguments1Value) {
                    super(root, 1);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments1ImplicitType == ((GetHostNameNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    DynamicObject arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                        return root.getHostName(arguments0Value_, arguments1Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType)) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        if ((RubyGuards.isRubyPointer(arguments0Value_))) {
                            return root.getHostName(arguments0Value_, arguments1Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(GetHostNameNodeGen root, Object arguments1Value) {
                    return new GetHostNameNode_(root, arguments1Value);
                }

            }
        }
    }
    @GeneratedBy(GetPeerNameNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetPeerNameNodeFactory implements NodeFactory {

        private static GetPeerNameNodeFactory getPeerNameNodeFactoryInstance;

        private GetPeerNameNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetPeerNameNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetPeerNameNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getPeerNameNodeFactoryInstance == null) {
                getPeerNameNodeFactoryInstance = new GetPeerNameNodeFactory();
            }
            return getPeerNameNodeFactoryInstance;
        }

        public static GetPeerNameNode create(RubyNode[] arguments) {
            return new GetPeerNameNodeGen(arguments);
        }

        @GeneratedBy(GetPeerNameNode.class)
        public static final class GetPeerNameNodeGen extends GetPeerNameNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private GetPeerNameNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetPeerNameNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetPeerNameNodeGen root;

                BaseNode_(GetPeerNameNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetPeerNameNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                            return GetPeerNameNode_.create(root, arguments0Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetPeerNameNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetPeerNameNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetPeerNameNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetPeerNameNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetPeerNameNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetPeerNameNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getPeerName(int, DynamicObject, DynamicObject)", value = GetPeerNameNode.class)
            private static final class GetPeerNameNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                GetPeerNameNode_(GetPeerNameNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetPeerNameNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                        return root.getPeerName(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                            return root.getPeerName(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetPeerNameNodeGen root, Object arguments0Value) {
                    return new GetPeerNameNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(GetSockNameNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetSockNameNodeFactory implements NodeFactory {

        private static GetSockNameNodeFactory getSockNameNodeFactoryInstance;

        private GetSockNameNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetSockNameNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetSockNameNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getSockNameNodeFactoryInstance == null) {
                getSockNameNodeFactoryInstance = new GetSockNameNodeFactory();
            }
            return getSockNameNodeFactoryInstance;
        }

        public static GetSockNameNode create(RubyNode[] arguments) {
            return new GetSockNameNodeGen(arguments);
        }

        @GeneratedBy(GetSockNameNode.class)
        public static final class GetSockNameNodeGen extends GetSockNameNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private GetSockNameNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetSockNameNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetSockNameNodeGen root;

                BaseNode_(GetSockNameNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetSockNameNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                            return GetSockNameNode_.create(root, arguments0Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetSockNameNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetSockNameNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetSockNameNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetSockNameNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetSockNameNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = root.arguments1_.execute(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetSockNameNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getSockName(int, DynamicObject, DynamicObject)", value = GetSockNameNode.class)
            private static final class GetSockNameNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                GetSockNameNode_(GetSockNameNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetSockNameNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = root.arguments1_.execute(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                        return root.getSockName(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyPointer(arguments1Value_)) && (RubyGuards.isRubyPointer(arguments2Value_))) {
                            return root.getSockName(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(GetSockNameNodeGen root, Object arguments0Value) {
                    return new GetSockNameNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(GetSockOptNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class GetSockOptNodeFactory implements NodeFactory {

        private static GetSockOptNodeFactory getSockOptNodeFactoryInstance;

        private GetSockOptNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return GetSockOptNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public GetSockOptNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (getSockOptNodeFactoryInstance == null) {
                getSockOptNodeFactoryInstance = new GetSockOptNodeFactory();
            }
            return getSockOptNodeFactoryInstance;
        }

        public static GetSockOptNode create(RubyNode[] arguments) {
            return new GetSockOptNodeGen(arguments);
        }

        @GeneratedBy(GetSockOptNode.class)
        public static final class GetSockOptNodeGen extends GetSockOptNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @Child private RubyNode arguments3_;
            @Child private RubyNode arguments4_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @CompilationFinal private Class arguments2Type_;
            @Child private BaseNode_ specialization_;

            private GetSockOptNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.arguments3_ = arguments != null && 3 < arguments.length ? arguments[3] : null;
                this.arguments4_ = arguments != null && 4 < arguments.length ? arguments[4] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(GetSockOptNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected GetSockOptNodeGen root;

                BaseNode_(GetSockOptNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (GetSockOptNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_, root.arguments3_, root.arguments4_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    Object arguments4Value_ = root.arguments4_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && arguments3Value instanceof DynamicObject && arguments4Value instanceof DynamicObject) {
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        if (RubyTypesGen.isImplicitInteger(arguments1Value) && RubyTypesGen.isImplicitInteger(arguments2Value)) {
                            if ((RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                                return GetSockOptionsNode_.create(root, arguments0Value, arguments1Value, arguments2Value);
                            }
                        }
                        if (arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject) {
                            DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                            DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                            if ((RubyGuards.isRubySymbol(arguments1Value_)) && (RubyGuards.isRubySymbol(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                                SnippetNode snippetNode2 = (new SnippetNode());
                                return GetSockOptionsSymbolsNode_.create(root, arguments0Value, snippetNode2);
                            }
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments2_(Frame frameValue) {
                    Class arguments2Type_ = root.arguments2Type_;
                    try {
                        if (arguments2Type_ == int.class) {
                            return root.arguments2_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments2Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments2_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments2Type_ = _type;
                            }
                        } else {
                            return root.arguments2_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments2Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(GetSockOptNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(GetSockOptNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(GetSockOptNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(GetSockOptNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(GetSockOptNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = executeArguments2_(frameValue);
                    Object arguments3Value_ = root.arguments3_.execute(frameValue);
                    Object arguments4Value_ = root.arguments4_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(GetSockOptNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "getSockOptions(int, int, int, DynamicObject, DynamicObject)", value = GetSockOptNode.class)
            private static final class GetSockOptionsNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;
                private final Class arguments2ImplicitType;

                GetSockOptionsNode_(GetSockOptNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                    this.arguments2ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments2Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetSockOptionsNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((GetSockOptionsNode_) other).arguments1ImplicitType && this.arguments2ImplicitType == ((GetSockOptionsNode_) other).arguments2ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value);
                    }
                    int arguments2Value_;
                    try {
                        if (arguments2ImplicitType == int.class) {
                            arguments2Value_ = root.arguments2_.executeInteger(frameValue);
                        } else {
                            Object arguments2Value__ = executeArguments2_(frameValue);
                            arguments2Value_ = RubyTypesGen.expectImplicitInteger(arguments2Value__, arguments2ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value);
                    }
                    DynamicObject arguments4Value_;
                    try {
                        arguments4Value_ = root.arguments4_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                        return root.getSockOptions(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && RubyTypesGen.isImplicitInteger(arguments2Value, arguments2ImplicitType) && arguments3Value instanceof DynamicObject && arguments4Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        int arguments2Value_ = RubyTypesGen.asImplicitInteger(arguments2Value, arguments2ImplicitType);
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        if ((RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return root.getSockOptions(arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(GetSockOptNodeGen root, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return new GetSockOptionsNode_(root, arguments0Value, arguments1Value, arguments2Value);
                }

            }
            @GeneratedBy(methodName = "getSockOptionsSymbols(VirtualFrame, int, DynamicObject, DynamicObject, DynamicObject, DynamicObject, SnippetNode)", value = GetSockOptNode.class)
            private static final class GetSockOptionsSymbolsNode_ extends BaseNode_ {

                @Child private SnippetNode snippetNode;
                private final Class arguments0ImplicitType;

                GetSockOptionsSymbolsNode_(GetSockOptNodeGen root, Object arguments0Value, SnippetNode snippetNode) {
                    super(root, 2);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.snippetNode = snippetNode;
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((GetSockOptionsSymbolsNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                    }
                    DynamicObject arguments1Value_;
                    try {
                        arguments1Value_ = root.arguments1_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = executeArguments2_(frameValue);
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value, arguments3Value, arguments4Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments3Value = root.arguments3_.execute(frameValue);
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult(), arguments3Value, arguments4Value);
                    }
                    DynamicObject arguments3Value_;
                    try {
                        arguments3Value_ = root.arguments3_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        Object arguments4Value = root.arguments4_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, ex.getResult(), arguments4Value);
                    }
                    DynamicObject arguments4Value_;
                    try {
                        arguments4Value_ = root.arguments4_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubySymbol(arguments1Value_)) && (RubyGuards.isRubySymbol(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                        return root.getSockOptionsSymbols(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, this.snippetNode);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value, Object arguments3Value, Object arguments4Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && arguments1Value instanceof DynamicObject && arguments2Value instanceof DynamicObject && arguments3Value instanceof DynamicObject && arguments4Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        DynamicObject arguments3Value_ = (DynamicObject) arguments3Value;
                        DynamicObject arguments4Value_ = (DynamicObject) arguments4Value;
                        if ((RubyGuards.isRubySymbol(arguments1Value_)) && (RubyGuards.isRubySymbol(arguments2Value_)) && (RubyGuards.isRubyPointer(arguments3Value_)) && (RubyGuards.isRubyPointer(arguments4Value_))) {
                            return root.getSockOptionsSymbols(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, arguments3Value_, arguments4Value_, this.snippetNode);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value, arguments3Value, arguments4Value);
                }

                static BaseNode_ create(GetSockOptNodeGen root, Object arguments0Value, SnippetNode snippetNode) {
                    return new GetSockOptionsSymbolsNode_(root, arguments0Value, snippetNode);
                }

            }
        }
    }
    @GeneratedBy(CloseNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class CloseNodeFactory implements NodeFactory {

        private static CloseNodeFactory closeNodeFactoryInstance;

        private CloseNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return CloseNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public CloseNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (closeNodeFactoryInstance == null) {
                closeNodeFactoryInstance = new CloseNodeFactory();
            }
            return closeNodeFactoryInstance;
        }

        public static CloseNode create(RubyNode[] arguments) {
            return new CloseNodeGen(arguments);
        }

        @GeneratedBy(CloseNode.class)
        public static final class CloseNodeGen extends CloseNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @CompilationFinal private Class arguments0Type_;
            @Child private BaseNode_ specialization_;

            private CloseNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(CloseNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected CloseNodeGen root;

                BaseNode_(CloseNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (CloseNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return executeInt_(frameValue, arguments0Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return CloseNode_.create(root, arguments0Value);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(CloseNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(CloseNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return (int) uninitialized(frameValue, arguments0Value);
                }

                static BaseNode_ create(CloseNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(CloseNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(CloseNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(CloseNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "close(int)", value = CloseNode.class)
            private static final class CloseNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                CloseNode_(CloseNodeGen root, Object arguments0Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((CloseNode_) other).arguments0ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, ex.getResult());
                    }
                    return root.close(arguments0Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType)) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        return root.close(arguments0Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value);
                }

                static BaseNode_ create(CloseNodeGen root, Object arguments0Value) {
                    return new CloseNode_(root, arguments0Value);
                }

            }
        }
    }
    @GeneratedBy(KillNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class KillNodeFactory implements NodeFactory {

        private static KillNodeFactory killNodeFactoryInstance;

        private KillNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return KillNode.class;
        }

        @Override
        public List getExecutionSignature() {
            return Arrays.asList(RubyNode.class, RubyNode.class, RubyNode.class);
        }

        @Override
        public List getNodeSignatures() {
            return Arrays.asList(Arrays.asList(RubyNode[].class));
        }

        @Override
        public KillNode createNode(Object... arguments) {
            if (arguments.length == 1 && (arguments[0] == null || arguments[0] instanceof RubyNode[])) {
                return create((RubyNode[]) arguments[0]);
            } else {
                throw new IllegalArgumentException("Invalid create signature.");
            }
        }

        public static NodeFactory getInstance() {
            if (killNodeFactoryInstance == null) {
                killNodeFactoryInstance = new KillNodeFactory();
            }
            return killNodeFactoryInstance;
        }

        public static KillNode create(RubyNode[] arguments) {
            return new KillNodeGen(arguments);
        }

        @GeneratedBy(KillNode.class)
        public static final class KillNodeGen extends KillNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private Class arguments0Type_;
            @CompilationFinal private Class arguments1Type_;
            @Child private BaseNode_ specialization_;

            private KillNodeGen(RubyNode[] arguments) {
                this.arguments0_ = arguments != null && 0 < arguments.length ? arguments[0] : null;
                this.arguments1_ = arguments != null && 1 < arguments.length ? arguments[1] : null;
                this.arguments2_ = arguments != null && 2 < arguments.length ? arguments[2] : null;
                this.specialization_ = UninitializedNode_.create(this);
            }

            @Override
            public NodeCost getCost() {
                return specialization_.getNodeCost();
            }

            @Override
            public Object execute(VirtualFrame frameValue) {
                return specialization_.execute(frameValue);
            }

            @Override
            public void executeVoid(VirtualFrame frameValue) {
                specialization_.executeVoid(frameValue);
                return;
            }

            @Override
            public int executeInteger(VirtualFrame frameValue) {
                return specialization_.executeInt(frameValue);
            }

            @Override
            public SpecializationNode getSpecializationNode() {
                return specialization_;
            }

            @Override
            public Node deepCopy() {
                return SpecializationNode.updateRoot(super.deepCopy());
            }

            @GeneratedBy(KillNode.class)
            private abstract static class BaseNode_ extends SpecializationNode {

                @CompilationFinal protected KillNodeGen root;

                BaseNode_(KillNodeGen root, int index) {
                    super(index);
                    this.root = root;
                }

                @Override
                protected final void setRoot(Node root) {
                    this.root = (KillNodeGen) root;
                }

                @Override
                protected final Node[] getSuppliedChildren() {
                    return new Node[] {root.arguments0_, root.arguments1_, root.arguments2_};
                }

                @Override
                public final Object acceptAndExecute(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return this.executeInt_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value);

                public Object execute(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                public void executeVoid(VirtualFrame frameValue) {
                    execute(frameValue);
                    return;
                }

                public int executeInt(VirtualFrame frameValue) {
                    return (int) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value) && RubyTypesGen.isImplicitInteger(arguments1Value) && arguments2Value instanceof DynamicObject) {
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyString(arguments2Value_))) {
                            return KillNode_.create(root, arguments0Value, arguments1Value);
                        }
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createPolymorphic() {
                    return PolymorphicNode_.create(root);
                }

                protected final BaseNode_ getNext() {
                    return (BaseNode_) this.next;
                }

                protected final Object executeArguments0_(Frame frameValue) {
                    Class arguments0Type_ = root.arguments0Type_;
                    try {
                        if (arguments0Type_ == int.class) {
                            return root.arguments0_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments0_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments0Type_ = _type;
                            }
                        } else {
                            return root.arguments0_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments0Type_ = Object.class;
                        return ex.getResult();
                    }
                }

                protected final Object executeArguments1_(Frame frameValue) {
                    Class arguments1Type_ = root.arguments1Type_;
                    try {
                        if (arguments1Type_ == int.class) {
                            return root.arguments1_.executeInteger((VirtualFrame) frameValue);
                        } else if (arguments1Type_ == null) {
                            CompilerDirectives.transferToInterpreterAndInvalidate();
                            Class _type = Object.class;
                            try {
                                Object _value = root.arguments1_.execute((VirtualFrame) frameValue);
                                if (_value instanceof Integer) {
                                    _type = int.class;
                                } else {
                                    _type = Object.class;
                                }
                                return _value;
                            } finally {
                                root.arguments1Type_ = _type;
                            }
                        } else {
                            return root.arguments1_.execute((VirtualFrame) frameValue);
                        }
                    } catch (UnexpectedResultException ex) {
                        root.arguments1Type_ = Object.class;
                        return ex.getResult();
                    }
                }

            }
            @GeneratedBy(KillNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

                UninitializedNode_(KillNodeGen root) {
                    super(root, 2147483647);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return (int) uninitialized(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(KillNodeGen root) {
                    return new UninitializedNode_(root);
                }

            }
            @GeneratedBy(KillNode.class)
            private static final class PolymorphicNode_ extends BaseNode_ {

                PolymorphicNode_(KillNodeGen root) {
                    super(root, 0);
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return polymorphicMerge(newNode, super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value));
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    Object arguments1Value_ = executeArguments1_(frameValue);
                    Object arguments2Value_ = root.arguments2_.execute(frameValue);
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(KillNodeGen root) {
                    return new PolymorphicNode_(root);
                }

            }
            @GeneratedBy(methodName = "kill(int, int, DynamicObject)", value = KillNode.class)
            private static final class KillNode_ extends BaseNode_ {

                private final Class arguments0ImplicitType;
                private final Class arguments1ImplicitType;

                KillNode_(KillNodeGen root, Object arguments0Value, Object arguments1Value) {
                    super(root, 1);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                    this.arguments1ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments1Value);
                }

                @Override
                public boolean isSame(SpecializationNode other) {
                    return super.isSame(other) && this.arguments0ImplicitType == ((KillNode_) other).arguments0ImplicitType && this.arguments1ImplicitType == ((KillNode_) other).arguments1ImplicitType;
                }

                @Override
                public Object execute(VirtualFrame frameValue) {
                    return executeInt(frameValue);
                }

                @Override
                public int executeInt(VirtualFrame frameValue) {
                    int arguments0Value_;
                    try {
                        if (arguments0ImplicitType == int.class) {
                            arguments0Value_ = root.arguments0_.executeInteger(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitInteger(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments1Value = executeArguments1_(frameValue);
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, ex.getResult(), arguments1Value, arguments2Value);
                    }
                    int arguments1Value_;
                    try {
                        if (arguments1ImplicitType == int.class) {
                            arguments1Value_ = root.arguments1_.executeInteger(frameValue);
                        } else {
                            Object arguments1Value__ = executeArguments1_(frameValue);
                            arguments1Value_ = RubyTypesGen.expectImplicitInteger(arguments1Value__, arguments1ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        Object arguments2Value = root.arguments2_.execute(frameValue);
                        return getNext().executeInt_(frameValue, arguments0Value_, ex.getResult(), arguments2Value);
                    }
                    DynamicObject arguments2Value_;
                    try {
                        arguments2Value_ = root.arguments2_.executeDynamicObject(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, ex.getResult());
                    }
                    if ((RubyGuards.isRubyString(arguments2Value_))) {
                        return root.kill(arguments0Value_, arguments1Value_, arguments2Value_);
                    }
                    return getNext().executeInt_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

                @Override
                public int executeInt_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (RubyTypesGen.isImplicitInteger(arguments0Value, arguments0ImplicitType) && RubyTypesGen.isImplicitInteger(arguments1Value, arguments1ImplicitType) && arguments2Value instanceof DynamicObject) {
                        int arguments0Value_ = RubyTypesGen.asImplicitInteger(arguments0Value, arguments0ImplicitType);
                        int arguments1Value_ = RubyTypesGen.asImplicitInteger(arguments1Value, arguments1ImplicitType);
                        DynamicObject arguments2Value_ = (DynamicObject) arguments2Value;
                        if ((RubyGuards.isRubyString(arguments2Value_))) {
                            return root.kill(arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().executeInt_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(KillNodeGen root, Object arguments0Value, Object arguments1Value) {
                    return new KillNode_(root, arguments0Value, arguments1Value);
                }

            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy