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

org.jruby.truffle.interop.InteropNodesFactory Maven / Gradle / Ivy

// CheckStyle: start generated
package org.jruby.truffle.interop;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
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.dsl.internal.SuppressFBWarnings;
import com.oracle.truffle.api.frame.Frame;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.DirectCallNode;
import com.oracle.truffle.api.nodes.IndirectCallNode;
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.CoreMethodNode;
import org.jruby.truffle.core.cast.NameToJavaStringNode;
import org.jruby.truffle.core.rope.Rope;
import org.jruby.truffle.core.string.StringCachingGuards;
import org.jruby.truffle.interop.InteropNodes.BoxedNode;
import org.jruby.truffle.interop.InteropNodes.EvalNode;
import org.jruby.truffle.interop.InteropNodes.ExecuteNode;
import org.jruby.truffle.interop.InteropNodes.ExportNode;
import org.jruby.truffle.interop.InteropNodes.HasSizeNode;
import org.jruby.truffle.interop.InteropNodes.ImportFileNode;
import org.jruby.truffle.interop.InteropNodes.ImportNode;
import org.jruby.truffle.interop.InteropNodes.InteropFromJavaStringNode;
import org.jruby.truffle.interop.InteropNodes.InteropToJavaStringNode;
import org.jruby.truffle.interop.InteropNodes.InvokeNode;
import org.jruby.truffle.interop.InteropNodes.IsExecutableNode;
import org.jruby.truffle.interop.InteropNodes.KeysNode;
import org.jruby.truffle.interop.InteropNodes.MimeTypeSupportedNode;
import org.jruby.truffle.interop.InteropNodes.NullNode;
import org.jruby.truffle.interop.InteropNodes.ReadNode;
import org.jruby.truffle.interop.InteropNodes.SizeNode;
import org.jruby.truffle.interop.InteropNodes.UnboxNode;
import org.jruby.truffle.interop.InteropNodes.WriteNode;
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(InteropNodes.class)
public final class InteropNodesFactory {

    public static List> getFactories() {
        return Arrays.asList(ImportFileNodeFactory.getInstance(), IsExecutableNodeFactory.getInstance(), ExecuteNodeFactory.getInstance(), InvokeNodeFactory.getInstance(), HasSizeNodeFactory.getInstance(), SizeNodeFactory.getInstance(), BoxedNodeFactory.getInstance(), UnboxNodeFactory.getInstance(), NullNodeFactory.getInstance(), ReadNodeFactory.getInstance(), WriteNodeFactory.getInstance(), KeysNodeFactory.getInstance(), ExportNodeFactory.getInstance(), ImportNodeFactory.getInstance(), MimeTypeSupportedNodeFactory.getInstance(), EvalNodeFactory.getInstance(), InteropToJavaStringNodeFactory.getInstance(), InteropFromJavaStringNodeFactory.getInstance());
    }

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

        private static ImportFileNodeFactory importFileNodeFactoryInstance;

        private ImportFileNodeFactory() {
        }

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

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

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

        @Override
        public ImportFileNode 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 (importFileNodeFactoryInstance == null) {
                importFileNodeFactoryInstance = new ImportFileNodeFactory();
            }
            return importFileNodeFactoryInstance;
        }

        public static ImportFileNode create(RubyNode[] arguments) {
            return new ImportFileNodeGen(arguments);
        }

        @GeneratedBy(ImportFileNode.class)
        public static final class ImportFileNodeGen extends ImportFileNode {

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

            private ImportFileNodeGen(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.importFile(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(IsExecutableNode.class)
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static final class IsExecutableNodeFactory implements NodeFactory {

        private static IsExecutableNodeFactory isExecutableNodeFactoryInstance;

        private IsExecutableNodeFactory() {
        }

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

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

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

        @Override
        public IsExecutableNode 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 (isExecutableNodeFactoryInstance == null) {
                isExecutableNodeFactoryInstance = new IsExecutableNodeFactory();
            }
            return isExecutableNodeFactoryInstance;
        }

        public static IsExecutableNode create(RubyNode[] arguments) {
            return new IsExecutableNodeGen(arguments);
        }

        @GeneratedBy(IsExecutableNode.class)
        public static final class IsExecutableNodeGen extends IsExecutableNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private IsExecutableNodeGen(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 boolean executeBoolean(VirtualFrame frameValue) {
                return specialization_.executeBoolean(frameValue);
            }

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

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

            private static TruffleObject expectTruffleObject(Object value) throws UnexpectedResultException {
                if (value instanceof TruffleObject) {
                    return (TruffleObject) value;
                }
                throw new UnexpectedResultException(value);
            }

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

                @CompilationFinal protected IsExecutableNodeGen root;

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

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

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

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

                public abstract boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value);

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

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

                public boolean executeBoolean(VirtualFrame frameValue) {
                    return (boolean) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        Node isExecutableNode1 = (root.createIsExecutableNode());
                        return IsExecutableNode_.create(root, isExecutableNode1);
                    }
                    return null;
                }

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

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

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

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    return (boolean) uninitialized(frameValue, arguments0Value);
                }

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

            }
            @GeneratedBy(methodName = "isExecutable(VirtualFrame, TruffleObject, Node)", value = IsExecutableNode.class)
            private static final class IsExecutableNode_ extends BaseNode_ {

                @Child private Node isExecutableNode;

                IsExecutableNode_(IsExecutableNodeGen root, Node isExecutableNode) {
                    super(root, 1);
                    this.isExecutableNode = isExecutableNode;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    TruffleObject arguments0Value_;
                    try {
                        arguments0Value_ = expectTruffleObject(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isExecutable(frameValue, arguments0Value_, this.isExecutableNode);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.isExecutable(frameValue, arguments0Value_, this.isExecutableNode);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(IsExecutableNodeGen root, Node isExecutableNode) {
                    return new IsExecutableNode_(root, isExecutableNode);
                }

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

        private static ExecuteNodeFactory executeNodeFactoryInstance;

        private ExecuteNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ExecuteNode.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 ExecuteNode 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 (executeNodeFactoryInstance == null) {
                executeNodeFactoryInstance = new ExecuteNodeFactory();
            }
            return executeNodeFactoryInstance;
        }

        public static ExecuteNode create(RubyNode[] arguments) {
            return new ExecuteNodeGen(arguments);
        }

        @GeneratedBy(ExecuteNode.class)
        @SuppressFBWarnings("SA_LOCAL_SELF_COMPARISON")
        public static final class ExecuteNodeGen extends ExecuteNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean excludeExecuteForeignCached_;
            @Child private BaseNode_ specialization_;

            private ExecuteNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected ExecuteNodeGen root;

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

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ExecuteNodeGen) 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.execute_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof Object[]) {
                        Object[] arguments1Value_ = (Object[]) arguments1Value;
                        int cachedArgsLength1 = (arguments1Value_.length);
                        if ((arguments1Value_.length == cachedArgsLength1)) {
                            if (!root.excludeExecuteForeignCached_) {
                                Node executeNode1 = (root.createExecuteNode(cachedArgsLength1));
                                BranchProfile exceptionProfile1 = (BranchProfile.create());
                                SpecializationNode s = ExecuteForeignCachedNode_.create(root, cachedArgsLength1, executeNode1, exceptionProfile1);
                                if (countSame(s) < (root.getCacheLimit())) {
                                    return s;
                                }
                            }
                        }
                        root.excludeExecuteForeignCached_ = true;
                        return ExecuteForeignUncachedNode_.create(root);
                    }
                    return null;
                }

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

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

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

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

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

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

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

                PolymorphicNode_(ExecuteNodeGen 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 Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

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

            }
            @GeneratedBy(methodName = "executeForeignCached(VirtualFrame, TruffleObject, Object[], int, Node, BranchProfile)", value = ExecuteNode.class)
            private static final class ExecuteForeignCachedNode_ extends BaseNode_ {

                private final int cachedArgsLength;
                @Child private Node executeNode;
                private final BranchProfile exceptionProfile;

                ExecuteForeignCachedNode_(ExecuteNodeGen root, int cachedArgsLength, Node executeNode, BranchProfile exceptionProfile) {
                    super(root, 1);
                    this.cachedArgsLength = cachedArgsLength;
                    this.executeNode = executeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (newNode.getClass() == ExecuteForeignUncachedNode_.class) {
                        removeSame("Contained by executeForeignUncached(VirtualFrame, TruffleObject, Object[])");
                    }
                    return super.merge(newNode, frameValue, arguments0Value, arguments1Value);
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof Object[]) {
                        Object[] arguments1Value_ = (Object[]) arguments1Value;
                        if ((arguments1Value_.length == this.cachedArgsLength)) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof Object[]) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        Object[] arguments1Value_ = (Object[]) arguments1Value;
                        if ((arguments1Value_.length == this.cachedArgsLength)) {
                            return root.executeForeignCached(frameValue, arguments0Value_, arguments1Value_, this.cachedArgsLength, this.executeNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ExecuteNodeGen root, int cachedArgsLength, Node executeNode, BranchProfile exceptionProfile) {
                    return new ExecuteForeignCachedNode_(root, cachedArgsLength, executeNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "executeForeignUncached(VirtualFrame, TruffleObject, Object[])", value = ExecuteNode.class)
            private static final class ExecuteForeignUncachedNode_ extends BaseNode_ {

                ExecuteForeignUncachedNode_(ExecuteNodeGen root) {
                    super(root, 2);
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof Object[]) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        Object[] arguments1Value_ = (Object[]) arguments1Value;
                        return root.executeForeignUncached(frameValue, arguments0Value_, arguments1Value_);
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ExecuteNodeGen root) {
                    return new ExecuteForeignUncachedNode_(root);
                }

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

        private static InvokeNodeFactory invokeNodeFactoryInstance;

        private InvokeNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return InvokeNode.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 InvokeNode 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 (invokeNodeFactoryInstance == null) {
                invokeNodeFactoryInstance = new InvokeNodeFactory();
            }
            return invokeNodeFactoryInstance;
        }

        public static InvokeNode create(RubyNode[] arguments) {
            return new InvokeNodeGen(arguments);
        }

        @GeneratedBy(InvokeNode.class)
        @SuppressFBWarnings("SA_LOCAL_SELF_COMPARISON")
        public static final class InvokeNodeGen extends InvokeNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private boolean excludeInvokeCached_;
            @Child private BaseNode_ specialization_;

            private InvokeNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected InvokeNodeGen root;

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

                @Override
                protected final void setRoot(Node root) {
                    this.root = (InvokeNodeGen) 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.execute_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract Object execute_(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_ = root.arguments2_.execute(frameValue);
                    return execute_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof Object[]) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        Object[] arguments2Value_ = (Object[]) arguments2Value;
                        int cachedArgsLength1 = (arguments2Value_.length);
                        if ((RubyGuards.isRubyString(arguments1Value_) || RubyGuards.isRubySymbol(arguments1Value_)) && (arguments2Value_.length == cachedArgsLength1)) {
                            if (!root.excludeInvokeCached_) {
                                Node invokeNode1 = (root.createInvokeNode(cachedArgsLength1));
                                NameToJavaStringNode toJavaStringNode1 = (NameToJavaStringNode.create());
                                BranchProfile exceptionProfile1 = (BranchProfile.create());
                                SpecializationNode s = InvokeCachedNode_.create(root, cachedArgsLength1, invokeNode1, toJavaStringNode1, exceptionProfile1);
                                if (countSame(s) < (root.getCacheLimit())) {
                                    return s;
                                }
                            }
                        }
                        if ((RubyGuards.isRubyString(arguments1Value_) || RubyGuards.isRubySymbol(arguments1Value_))) {
                            root.excludeInvokeCached_ = true;
                            return InvokeUncachedNode_.create(root);
                        }
                    }
                    return null;
                }

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

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

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

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

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

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

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

                PolymorphicNode_(InvokeNodeGen 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 Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

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

            }
            @GeneratedBy(methodName = "invokeCached(VirtualFrame, TruffleObject, DynamicObject, Object[], int, Node, NameToJavaStringNode, BranchProfile)", value = InvokeNode.class)
            private static final class InvokeCachedNode_ extends BaseNode_ {

                private final int cachedArgsLength;
                @Child private Node invokeNode;
                @Child private NameToJavaStringNode toJavaStringNode;
                private final BranchProfile exceptionProfile;

                InvokeCachedNode_(InvokeNodeGen root, int cachedArgsLength, Node invokeNode, NameToJavaStringNode toJavaStringNode, BranchProfile exceptionProfile) {
                    super(root, 1);
                    this.cachedArgsLength = cachedArgsLength;
                    this.invokeNode = invokeNode;
                    this.toJavaStringNode = toJavaStringNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (newNode.getClass() == InvokeUncachedNode_.class) {
                        removeSame("Contained by invokeUncached(VirtualFrame, TruffleObject, DynamicObject, Object[])");
                    }
                    return super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof Object[]) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        Object[] arguments2Value_ = (Object[]) arguments2Value;
                        if ((RubyGuards.isRubyString(arguments1Value_) || RubyGuards.isRubySymbol(arguments1Value_)) && (arguments2Value_.length == this.cachedArgsLength)) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof Object[]) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        Object[] arguments2Value_ = (Object[]) arguments2Value;
                        if ((RubyGuards.isRubyString(arguments1Value_) || RubyGuards.isRubySymbol(arguments1Value_)) && (arguments2Value_.length == this.cachedArgsLength)) {
                            return root.invokeCached(frameValue, arguments0Value_, arguments1Value_, arguments2Value_, this.cachedArgsLength, this.invokeNode, this.toJavaStringNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(InvokeNodeGen root, int cachedArgsLength, Node invokeNode, NameToJavaStringNode toJavaStringNode, BranchProfile exceptionProfile) {
                    return new InvokeCachedNode_(root, cachedArgsLength, invokeNode, toJavaStringNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "invokeUncached(VirtualFrame, TruffleObject, DynamicObject, Object[])", value = InvokeNode.class)
            private static final class InvokeUncachedNode_ extends BaseNode_ {

                InvokeUncachedNode_(InvokeNodeGen root) {
                    super(root, 2);
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject && arguments2Value instanceof Object[]) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        Object[] arguments2Value_ = (Object[]) arguments2Value;
                        if ((RubyGuards.isRubyString(arguments1Value_) || RubyGuards.isRubySymbol(arguments1Value_))) {
                            return root.invokeUncached(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(InvokeNodeGen root) {
                    return new InvokeUncachedNode_(root);
                }

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

        private static HasSizeNodeFactory hasSizeNodeFactoryInstance;

        private HasSizeNodeFactory() {
        }

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

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

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

        @Override
        public HasSizeNode 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 (hasSizeNodeFactoryInstance == null) {
                hasSizeNodeFactoryInstance = new HasSizeNodeFactory();
            }
            return hasSizeNodeFactoryInstance;
        }

        public static HasSizeNode create(RubyNode[] arguments) {
            return new HasSizeNodeGen(arguments);
        }

        @GeneratedBy(HasSizeNode.class)
        public static final class HasSizeNodeGen extends HasSizeNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private HasSizeNodeGen(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 boolean executeBoolean(VirtualFrame frameValue) {
                return specialization_.executeBoolean(frameValue);
            }

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

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

            private static TruffleObject expectTruffleObject(Object value) throws UnexpectedResultException {
                if (value instanceof TruffleObject) {
                    return (TruffleObject) value;
                }
                throw new UnexpectedResultException(value);
            }

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

                @CompilationFinal protected HasSizeNodeGen root;

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

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

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

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

                public abstract boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value);

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

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

                public boolean executeBoolean(VirtualFrame frameValue) {
                    return (boolean) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        Node hasSizeNode1 = (root.createHasSizeNode());
                        return HasSizeNode_.create(root, hasSizeNode1);
                    }
                    return null;
                }

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

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

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

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    return (boolean) uninitialized(frameValue, arguments0Value);
                }

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

            }
            @GeneratedBy(methodName = "hasSize(VirtualFrame, TruffleObject, Node)", value = HasSizeNode.class)
            private static final class HasSizeNode_ extends BaseNode_ {

                @Child private Node hasSizeNode;

                HasSizeNode_(HasSizeNodeGen root, Node hasSizeNode) {
                    super(root, 1);
                    this.hasSizeNode = hasSizeNode;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    TruffleObject arguments0Value_;
                    try {
                        arguments0Value_ = expectTruffleObject(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.hasSize(frameValue, arguments0Value_, this.hasSizeNode);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.hasSize(frameValue, arguments0Value_, this.hasSizeNode);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(HasSizeNodeGen root, Node hasSizeNode) {
                    return new HasSizeNode_(root, hasSizeNode);
                }

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

        private static SizeNodeFactory sizeNodeFactoryInstance;

        private SizeNodeFactory() {
        }

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

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

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

        @Override
        public SizeNode 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 (sizeNodeFactoryInstance == null) {
                sizeNodeFactoryInstance = new SizeNodeFactory();
            }
            return sizeNodeFactoryInstance;
        }

        public static SizeNode create(RubyNode[] arguments) {
            return new SizeNodeGen(arguments);
        }

        @GeneratedBy(SizeNode.class)
        public static final class SizeNodeGen extends SizeNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private SizeNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected SizeNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof String) {
                        return Size0Node_.create(root);
                    }
                    if (arguments0Value instanceof TruffleObject) {
                        Node getSizeNode2 = (root.createGetSizeNode());
                        BranchProfile exceptionProfile2 = (BranchProfile.create());
                        return Size1Node_.create(root, getSizeNode2, exceptionProfile2);
                    }
                    return null;
                }

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

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

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

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

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

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

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

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

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

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

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

            }
            @GeneratedBy(methodName = "size(String)", value = SizeNode.class)
            private static final class Size0Node_ extends BaseNode_ {

                Size0Node_(SizeNodeGen root) {
                    super(root, 1);
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof String) {
                        String arguments0Value_ = (String) arguments0Value;
                        return root.size(arguments0Value_);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SizeNodeGen root) {
                    return new Size0Node_(root);
                }

            }
            @GeneratedBy(methodName = "size(VirtualFrame, TruffleObject, Node, BranchProfile)", value = SizeNode.class)
            private static final class Size1Node_ extends BaseNode_ {

                @Child private Node getSizeNode;
                private final BranchProfile exceptionProfile;

                Size1Node_(SizeNodeGen root, Node getSizeNode, BranchProfile exceptionProfile) {
                    super(root, 2);
                    this.getSizeNode = getSizeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.size(frameValue, arguments0Value_, this.getSizeNode, this.exceptionProfile);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(SizeNodeGen root, Node getSizeNode, BranchProfile exceptionProfile) {
                    return new Size1Node_(root, getSizeNode, exceptionProfile);
                }

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

        private static BoxedNodeFactory boxedNodeFactoryInstance;

        private BoxedNodeFactory() {
        }

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

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

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

        @Override
        public BoxedNode 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 (boxedNodeFactoryInstance == null) {
                boxedNodeFactoryInstance = new BoxedNodeFactory();
            }
            return boxedNodeFactoryInstance;
        }

        public static BoxedNode create(RubyNode[] arguments) {
            return new BoxedNodeGen(arguments);
        }

        @GeneratedBy(BoxedNode.class)
        public static final class BoxedNodeGen extends BoxedNode implements SpecializedNode {

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

            private BoxedNodeGen(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 boolean executeBoolean(VirtualFrame frameValue) {
                return specialization_.executeBoolean(frameValue);
            }

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

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

            private static CharSequence expectCharSequence(Object value) throws UnexpectedResultException {
                if (value instanceof CharSequence) {
                    return (CharSequence) value;
                }
                throw new UnexpectedResultException(value);
            }

            private static TruffleObject expectTruffleObject(Object value) throws UnexpectedResultException {
                if (value instanceof TruffleObject) {
                    return (TruffleObject) value;
                }
                throw new UnexpectedResultException(value);
            }

            private static byte expectByte(Object value) throws UnexpectedResultException {
                if (value instanceof Byte) {
                    return (byte) value;
                }
                throw new UnexpectedResultException(value);
            }

            private static float expectFloat(Object value) throws UnexpectedResultException {
                if (value instanceof Float) {
                    return (float) value;
                }
                throw new UnexpectedResultException(value);
            }

            private static short expectShort(Object value) throws UnexpectedResultException {
                if (value instanceof Short) {
                    return (short) value;
                }
                throw new UnexpectedResultException(value);
            }

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

                @CompilationFinal protected BoxedNodeGen root;

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

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

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

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

                public abstract boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value);

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

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

                public boolean executeBoolean(VirtualFrame frameValue) {
                    return (boolean) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof Boolean) {
                        return IsBoxed0Node_.create(root);
                    }
                    if (arguments0Value instanceof Byte) {
                        return IsBoxed1Node_.create(root);
                    }
                    if (arguments0Value instanceof Short) {
                        return IsBoxed2Node_.create(root);
                    }
                    if (RubyTypesGen.isImplicitInteger(arguments0Value)) {
                        return IsBoxed3Node_.create(root, arguments0Value);
                    }
                    if (RubyTypesGen.isImplicitLong(arguments0Value)) {
                        return IsBoxed4Node_.create(root, arguments0Value);
                    }
                    if (arguments0Value instanceof Float) {
                        return IsBoxed5Node_.create(root);
                    }
                    if (RubyTypesGen.isImplicitDouble(arguments0Value)) {
                        return IsBoxed6Node_.create(root, arguments0Value);
                    }
                    if (arguments0Value instanceof CharSequence) {
                        return IsBoxed7Node_.create(root);
                    }
                    if (arguments0Value instanceof TruffleObject) {
                        Node isBoxedNode9 = (root.createIsBoxedNode());
                        BranchProfile exceptionProfile9 = (BranchProfile.create());
                        return IsBoxed8Node_.create(root, isBoxedNode9, exceptionProfile9);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createFallback() {
                    return FallbackNode_.create(root);
                }

                @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_ == boolean.class) {
                            return root.arguments0_.executeBoolean((VirtualFrame) frameValue);
                        } else if (arguments0Type_ == double.class) {
                            return root.arguments0_.executeDouble((VirtualFrame) frameValue);
                        } else 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 Boolean) {
                                    _type = boolean.class;
                                } else if (_value instanceof Double) {
                                    _type = double.class;
                                } else 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(BoxedNode.class)
            private static final class UninitializedNode_ extends BaseNode_ {

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return (boolean) uninitialized(frameValue, arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    return (boolean) uninitialized(frameValue, arguments0Value);
                }

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

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

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

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    return getNext().executeBoolean_(frameValue, arguments0Value_);
                }

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

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

            }
            @GeneratedBy(methodName = "isBoxed(boolean)", value = BoxedNode.class)
            private static final class IsBoxed0Node_ extends BaseNode_ {

                IsBoxed0Node_(BoxedNodeGen root) {
                    super(root, 1);
                }

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    boolean arguments0Value_;
                    try {
                        arguments0Value_ = root.arguments0_.executeBoolean(frameValue);
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof Boolean) {
                        boolean arguments0Value_ = (boolean) arguments0Value;
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new IsBoxed0Node_(root);
                }

            }
            @GeneratedBy(methodName = "isBoxed(byte)", value = BoxedNode.class)
            private static final class IsBoxed1Node_ extends BaseNode_ {

                IsBoxed1Node_(BoxedNodeGen root) {
                    super(root, 2);
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    byte arguments0Value_;
                    try {
                        arguments0Value_ = expectByte(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof Byte) {
                        byte arguments0Value_ = (byte) arguments0Value;
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new IsBoxed1Node_(root);
                }

            }
            @GeneratedBy(methodName = "isBoxed(short)", value = BoxedNode.class)
            private static final class IsBoxed2Node_ extends BaseNode_ {

                IsBoxed2Node_(BoxedNodeGen root) {
                    super(root, 3);
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    short arguments0Value_;
                    try {
                        arguments0Value_ = expectShort(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof Short) {
                        short arguments0Value_ = (short) arguments0Value;
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new IsBoxed2Node_(root);
                }

            }
            @GeneratedBy(methodName = "isBoxed(int)", value = BoxedNode.class)
            private static final class IsBoxed3Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                IsBoxed3Node_(BoxedNodeGen root, Object arguments0Value) {
                    super(root, 4);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitIntegerClass(arguments0Value);
                }

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

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

                @Override
                public boolean executeBoolean(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().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

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

                static BaseNode_ create(BoxedNodeGen root, Object arguments0Value) {
                    return new IsBoxed3Node_(root, arguments0Value);
                }

            }
            @GeneratedBy(methodName = "isBoxed(long)", value = BoxedNode.class)
            private static final class IsBoxed4Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                IsBoxed4Node_(BoxedNodeGen root, Object arguments0Value) {
                    super(root, 5);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitLongClass(arguments0Value);
                }

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

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

                @Override
                public boolean executeBoolean(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().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitLong(arguments0Value, arguments0ImplicitType)) {
                        long arguments0Value_ = RubyTypesGen.asImplicitLong(arguments0Value, arguments0ImplicitType);
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root, Object arguments0Value) {
                    return new IsBoxed4Node_(root, arguments0Value);
                }

            }
            @GeneratedBy(methodName = "isBoxed(float)", value = BoxedNode.class)
            private static final class IsBoxed5Node_ extends BaseNode_ {

                IsBoxed5Node_(BoxedNodeGen root) {
                    super(root, 6);
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    float arguments0Value_;
                    try {
                        arguments0Value_ = expectFloat(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof Float) {
                        float arguments0Value_ = (float) arguments0Value;
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new IsBoxed5Node_(root);
                }

            }
            @GeneratedBy(methodName = "isBoxed(double)", value = BoxedNode.class)
            private static final class IsBoxed6Node_ extends BaseNode_ {

                private final Class arguments0ImplicitType;

                IsBoxed6Node_(BoxedNodeGen root, Object arguments0Value) {
                    super(root, 7);
                    this.arguments0ImplicitType = RubyTypesGen.getImplicitDoubleClass(arguments0Value);
                }

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

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    double arguments0Value_;
                    try {
                        if (arguments0ImplicitType == double.class) {
                            arguments0Value_ = root.arguments0_.executeDouble(frameValue);
                        } else {
                            Object arguments0Value__ = executeArguments0_(frameValue);
                            arguments0Value_ = RubyTypesGen.expectImplicitDouble(arguments0Value__, arguments0ImplicitType);
                        }
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (RubyTypesGen.isImplicitDouble(arguments0Value, arguments0ImplicitType)) {
                        double arguments0Value_ = RubyTypesGen.asImplicitDouble(arguments0Value, arguments0ImplicitType);
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root, Object arguments0Value) {
                    return new IsBoxed6Node_(root, arguments0Value);
                }

            }
            @GeneratedBy(methodName = "isBoxed(CharSequence)", value = BoxedNode.class)
            private static final class IsBoxed7Node_ extends BaseNode_ {

                IsBoxed7Node_(BoxedNodeGen root) {
                    super(root, 8);
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    CharSequence arguments0Value_;
                    try {
                        arguments0Value_ = expectCharSequence(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof CharSequence) {
                        CharSequence arguments0Value_ = (CharSequence) arguments0Value;
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new IsBoxed7Node_(root);
                }

            }
            @GeneratedBy(methodName = "isBoxed(VirtualFrame, TruffleObject, Node, BranchProfile)", value = BoxedNode.class)
            private static final class IsBoxed8Node_ extends BaseNode_ {

                @Child private Node isBoxedNode;
                private final BranchProfile exceptionProfile;

                IsBoxed8Node_(BoxedNodeGen root, Node isBoxedNode, BranchProfile exceptionProfile) {
                    super(root, 9);
                    this.isBoxedNode = isBoxedNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    TruffleObject arguments0Value_;
                    try {
                        arguments0Value_ = expectTruffleObject(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isBoxed(frameValue, arguments0Value_, this.isBoxedNode, this.exceptionProfile);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.isBoxed(frameValue, arguments0Value_, this.isBoxedNode, this.exceptionProfile);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root, Node isBoxedNode, BranchProfile exceptionProfile) {
                    return new IsBoxed8Node_(root, isBoxedNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "isBoxed(Object)", value = BoxedNode.class)
            private static final class FallbackNode_ extends BaseNode_ {

                FallbackNode_(BoxedNodeGen root) {
                    super(root, 2147483646);
                }

                @TruffleBoundary
                private boolean guardFallback(Object arguments0Value) {
                    return createNext(null, arguments0Value) == null;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = executeArguments0_(frameValue);
                    if (guardFallback(arguments0Value_)) {
                        return root.isBoxed(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (guardFallback(arguments0Value)) {
                        return root.isBoxed(arguments0Value);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(BoxedNodeGen root) {
                    return new FallbackNode_(root);
                }

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

        private static UnboxNodeFactory unboxNodeFactoryInstance;

        private UnboxNodeFactory() {
        }

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

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

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

        @Override
        public UnboxNode 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 (unboxNodeFactoryInstance == null) {
                unboxNodeFactoryInstance = new UnboxNodeFactory();
            }
            return unboxNodeFactoryInstance;
        }

        public static UnboxNode create(RubyNode[] arguments) {
            return new UnboxNodeGen(arguments);
        }

        @GeneratedBy(UnboxNode.class)
        public static final class UnboxNodeGen extends UnboxNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private UnboxNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected UnboxNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof CharSequence) {
                        return Unbox0Node_.create(root);
                    }
                    if (arguments0Value instanceof TruffleObject) {
                        Node unboxNode2 = (root.createUnboxNode());
                        BranchProfile exceptionProfile2 = (BranchProfile.create());
                        return Unbox1Node_.create(root, unboxNode2, exceptionProfile2);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createFallback() {
                    return FallbackNode_.create(root);
                }

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

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

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

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

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

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

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

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

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

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

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

            }
            @GeneratedBy(methodName = "unbox(CharSequence)", value = UnboxNode.class)
            private static final class Unbox0Node_ extends BaseNode_ {

                Unbox0Node_(UnboxNodeGen root) {
                    super(root, 1);
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof CharSequence) {
                        CharSequence arguments0Value_ = (CharSequence) arguments0Value;
                        return root.unbox(arguments0Value_);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(UnboxNodeGen root) {
                    return new Unbox0Node_(root);
                }

            }
            @GeneratedBy(methodName = "unbox(VirtualFrame, TruffleObject, Node, BranchProfile)", value = UnboxNode.class)
            private static final class Unbox1Node_ extends BaseNode_ {

                @Child private Node unboxNode;
                private final BranchProfile exceptionProfile;

                Unbox1Node_(UnboxNodeGen root, Node unboxNode, BranchProfile exceptionProfile) {
                    super(root, 2);
                    this.unboxNode = unboxNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.unbox(frameValue, arguments0Value_, this.unboxNode, this.exceptionProfile);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(UnboxNodeGen root, Node unboxNode, BranchProfile exceptionProfile) {
                    return new Unbox1Node_(root, unboxNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "unbox(Object)", value = UnboxNode.class)
            private static final class FallbackNode_ extends BaseNode_ {

                FallbackNode_(UnboxNodeGen root) {
                    super(root, 2147483646);
                }

                @TruffleBoundary
                private boolean guardFallback(Object arguments0Value) {
                    return createNext(null, arguments0Value) == null;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (guardFallback(arguments0Value)) {
                        return root.unbox(arguments0Value);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(UnboxNodeGen root) {
                    return new FallbackNode_(root);
                }

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

        private static NullNodeFactory nullNodeFactoryInstance;

        private NullNodeFactory() {
        }

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

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

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

        @Override
        public NullNode 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 (nullNodeFactoryInstance == null) {
                nullNodeFactoryInstance = new NullNodeFactory();
            }
            return nullNodeFactoryInstance;
        }

        public static NullNode create(RubyNode[] arguments) {
            return new NullNodeGen(arguments);
        }

        @GeneratedBy(NullNode.class)
        public static final class NullNodeGen extends NullNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private NullNodeGen(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 boolean executeBoolean(VirtualFrame frameValue) {
                return specialization_.executeBoolean(frameValue);
            }

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

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

            private static TruffleObject expectTruffleObject(Object value) throws UnexpectedResultException {
                if (value instanceof TruffleObject) {
                    return (TruffleObject) value;
                }
                throw new UnexpectedResultException(value);
            }

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

                @CompilationFinal protected NullNodeGen root;

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

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

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

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

                public abstract boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value);

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

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

                public boolean executeBoolean(VirtualFrame frameValue) {
                    return (boolean) execute(frameValue);
                }

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        Node isNullNode1 = (root.createIsNullNode());
                        return IsNullNode_.create(root, isNullNode1);
                    }
                    return null;
                }

                @Override
                protected final SpecializationNode createFallback() {
                    return FallbackNode_.create(root);
                }

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

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

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

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    return (boolean) uninitialized(frameValue, arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    return (boolean) uninitialized(frameValue, arguments0Value);
                }

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

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

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

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

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    return getNext().executeBoolean_(frameValue, arguments0Value_);
                }

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

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

            }
            @GeneratedBy(methodName = "isNull(VirtualFrame, TruffleObject, Node)", value = NullNode.class)
            private static final class IsNullNode_ extends BaseNode_ {

                @Child private Node isNullNode;

                IsNullNode_(NullNodeGen root, Node isNullNode) {
                    super(root, 1);
                    this.isNullNode = isNullNode;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    TruffleObject arguments0Value_;
                    try {
                        arguments0Value_ = expectTruffleObject(root.arguments0_.execute(frameValue));
                    } catch (UnexpectedResultException ex) {
                        return getNext().executeBoolean_(frameValue, ex.getResult());
                    }
                    return root.isNull(frameValue, arguments0Value_, this.isNullNode);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.isNull(frameValue, arguments0Value_, this.isNullNode);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(NullNodeGen root, Node isNullNode) {
                    return new IsNullNode_(root, isNullNode);
                }

            }
            @GeneratedBy(methodName = "isNull(Object)", value = NullNode.class)
            private static final class FallbackNode_ extends BaseNode_ {

                FallbackNode_(NullNodeGen root) {
                    super(root, 2147483646);
                }

                @TruffleBoundary
                private boolean guardFallback(Object arguments0Value) {
                    return createNext(null, arguments0Value) == null;
                }

                @Override
                public boolean executeBoolean(VirtualFrame frameValue) {
                    Object arguments0Value_ = root.arguments0_.execute(frameValue);
                    if (guardFallback(arguments0Value_)) {
                        return root.isNull(arguments0Value_);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value_);
                }

                @Override
                public boolean executeBoolean_(VirtualFrame frameValue, Object arguments0Value) {
                    if (guardFallback(arguments0Value)) {
                        return root.isNull(arguments0Value);
                    }
                    return getNext().executeBoolean_(frameValue, arguments0Value);
                }

                static BaseNode_ create(NullNodeGen root) {
                    return new FallbackNode_(root);
                }

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

        private static ReadNodeFactory readNodeFactoryInstance;

        private ReadNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ReadNode.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 ReadNode 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 (readNodeFactoryInstance == null) {
                readNodeFactoryInstance = new ReadNodeFactory();
            }
            return readNodeFactoryInstance;
        }

        public static ReadNode create(RubyNode[] arguments) {
            return new ReadNodeGen(arguments);
        }

        @GeneratedBy(ReadNode.class)
        @SuppressFBWarnings("SA_LOCAL_SELF_COMPARISON")
        public static final class ReadNodeGen extends ReadNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean excludeReadCached_;
            @Child private BaseNode_ specialization_;

            private ReadNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected ReadNodeGen root;

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

                @Override
                protected final void setRoot(Node root) {
                    this.root = (ReadNodeGen) 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.execute_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        if ((!(RubyGuards.isRubySymbol(arguments1Value))) && (!(RubyGuards.isRubyString(arguments1Value)))) {
                            Node readNode1 = (ReadNode.createReadNode());
                            BranchProfile exceptionProfile1 = (BranchProfile.create());
                            return Read0Node_.create(root, readNode1, exceptionProfile1);
                        }
                        if (arguments1Value instanceof DynamicObject) {
                            DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                            DynamicObject cachedIdentifier2 = (arguments1Value_);
                            if ((arguments1Value_ == cachedIdentifier2) && (RubyGuards.isRubySymbol(cachedIdentifier2))) {
                                String identifierString2 = (cachedIdentifier2.toString());
                                Node readNode2 = (ReadNode.createReadNode());
                                BranchProfile exceptionProfile2 = (BranchProfile.create());
                                SpecializationNode s = Read1Node_.create(root, cachedIdentifier2, identifierString2, readNode2, exceptionProfile2);
                                if (countSame(s) < (3)) {
                                    return s;
                                }
                            }
                            Rope cachedIdentifier3 = (StringCachingGuards.privatizeRope(arguments1Value_));
                            if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, cachedIdentifier3))) {
                                if (!root.excludeReadCached_) {
                                    String identifierString3 = (cachedIdentifier3.toString());
                                    Node readNode3 = (ReadNode.createReadNode());
                                    BranchProfile exceptionProfile3 = (BranchProfile.create());
                                    SpecializationNode s = ReadCachedNode_.create(root, cachedIdentifier3, identifierString3, readNode3, exceptionProfile3);
                                    if (countSame(s) < (root.getCacheLimit())) {
                                        return s;
                                    }
                                }
                            }
                            if ((RubyGuards.isRubyString(arguments1Value_))) {
                                Node readNode4 = (ReadNode.createReadNode());
                                BranchProfile exceptionProfile4 = (BranchProfile.create());
                                root.excludeReadCached_ = true;
                                return ReadUncachedNode_.create(root, readNode4, exceptionProfile4);
                            }
                        }
                    }
                    return null;
                }

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

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

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

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

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

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

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

                PolymorphicNode_(ReadNodeGen 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 Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

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

            }
            @GeneratedBy(methodName = "read(VirtualFrame, TruffleObject, Object, Node, BranchProfile)", value = ReadNode.class)
            private static final class Read0Node_ extends BaseNode_ {

                @Child private Node readNode;
                private final BranchProfile exceptionProfile;

                Read0Node_(ReadNodeGen root, Node readNode, BranchProfile exceptionProfile) {
                    super(root, 1);
                    this.readNode = readNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        if ((!(RubyGuards.isRubySymbol(arguments1Value))) && (!(RubyGuards.isRubyString(arguments1Value)))) {
                            return root.read(frameValue, arguments0Value_, arguments1Value, this.readNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ReadNodeGen root, Node readNode, BranchProfile exceptionProfile) {
                    return new Read0Node_(root, readNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "read(VirtualFrame, TruffleObject, DynamicObject, DynamicObject, String, Node, BranchProfile)", value = ReadNode.class)
            private static final class Read1Node_ extends BaseNode_ {

                private final DynamicObject cachedIdentifier;
                private final String identifierString;
                @Child private Node readNode;
                private final BranchProfile exceptionProfile;

                Read1Node_(ReadNodeGen root, DynamicObject cachedIdentifier, String identifierString, Node readNode, BranchProfile exceptionProfile) {
                    super(root, 2);
                    this.cachedIdentifier = cachedIdentifier;
                    this.identifierString = identifierString;
                    this.readNode = readNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((arguments1Value_ == this.cachedIdentifier)) {
                            assert (RubyGuards.isRubySymbol(this.cachedIdentifier));
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((arguments1Value_ == this.cachedIdentifier)) {
                            assert (RubyGuards.isRubySymbol(this.cachedIdentifier));
                            return root.read(frameValue, arguments0Value_, arguments1Value_, this.cachedIdentifier, this.identifierString, this.readNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ReadNodeGen root, DynamicObject cachedIdentifier, String identifierString, Node readNode, BranchProfile exceptionProfile) {
                    return new Read1Node_(root, cachedIdentifier, identifierString, readNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "readCached(VirtualFrame, TruffleObject, DynamicObject, Rope, String, Node, BranchProfile)", value = ReadNode.class)
            private static final class ReadCachedNode_ extends BaseNode_ {

                private final Rope cachedIdentifier;
                private final String identifierString;
                @Child private Node readNode;
                private final BranchProfile exceptionProfile;

                ReadCachedNode_(ReadNodeGen root, Rope cachedIdentifier, String identifierString, Node readNode, BranchProfile exceptionProfile) {
                    super(root, 3);
                    this.cachedIdentifier = cachedIdentifier;
                    this.identifierString = identifierString;
                    this.readNode = readNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (newNode.getClass() == ReadUncachedNode_.class) {
                        removeSame("Contained by readUncached(VirtualFrame, TruffleObject, DynamicObject, Node, BranchProfile)");
                    }
                    return super.merge(newNode, frameValue, arguments0Value, arguments1Value);
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedIdentifier))) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedIdentifier))) {
                            return root.readCached(frameValue, arguments0Value_, arguments1Value_, this.cachedIdentifier, this.identifierString, this.readNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ReadNodeGen root, Rope cachedIdentifier, String identifierString, Node readNode, BranchProfile exceptionProfile) {
                    return new ReadCachedNode_(root, cachedIdentifier, identifierString, readNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "readUncached(VirtualFrame, TruffleObject, DynamicObject, Node, BranchProfile)", value = ReadNode.class)
            private static final class ReadUncachedNode_ extends BaseNode_ {

                @Child private Node readNode;
                private final BranchProfile exceptionProfile;

                ReadUncachedNode_(ReadNodeGen root, Node readNode, BranchProfile exceptionProfile) {
                    super(root, 4);
                    this.readNode = readNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_))) {
                            return root.readUncached(frameValue, arguments0Value_, arguments1Value_, this.readNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(ReadNodeGen root, Node readNode, BranchProfile exceptionProfile) {
                    return new ReadUncachedNode_(root, readNode, exceptionProfile);
                }

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

        private static WriteNodeFactory writeNodeFactoryInstance;

        private WriteNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return WriteNode.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 WriteNode 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 (writeNodeFactoryInstance == null) {
                writeNodeFactoryInstance = new WriteNodeFactory();
            }
            return writeNodeFactoryInstance;
        }

        public static WriteNode create(RubyNode[] arguments) {
            return new WriteNodeGen(arguments);
        }

        @GeneratedBy(WriteNode.class)
        @SuppressFBWarnings("SA_LOCAL_SELF_COMPARISON")
        public static final class WriteNodeGen extends WriteNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @Child private RubyNode arguments2_;
            @CompilationFinal private boolean excludeWriteCached_;
            @Child private BaseNode_ specialization_;

            private WriteNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected WriteNodeGen root;

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

                @Override
                protected final void setRoot(Node root) {
                    this.root = (WriteNodeGen) 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.execute_((VirtualFrame) frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                public abstract Object execute_(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_ = root.arguments2_.execute(frameValue);
                    return execute_(frameValue, arguments0Value_, arguments1Value_, arguments2Value_);
                }

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        if ((!(RubyGuards.isRubySymbol(arguments1Value))) && (!(RubyGuards.isRubyString(arguments1Value)))) {
                            Node writeNode1 = (WriteNode.createWriteNode());
                            BranchProfile exceptionProfile1 = (BranchProfile.create());
                            return Write0Node_.create(root, writeNode1, exceptionProfile1);
                        }
                        if (arguments1Value instanceof DynamicObject) {
                            DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                            DynamicObject cachedIdentifier2 = (arguments1Value_);
                            if ((arguments1Value_ == cachedIdentifier2) && (RubyGuards.isRubySymbol(cachedIdentifier2))) {
                                String identifierString2 = (cachedIdentifier2.toString());
                                Node writeNode2 = (WriteNode.createWriteNode());
                                BranchProfile exceptionProfile2 = (BranchProfile.create());
                                SpecializationNode s = Write1Node_.create(root, cachedIdentifier2, identifierString2, writeNode2, exceptionProfile2);
                                if (countSame(s) < (3)) {
                                    return s;
                                }
                            }
                            Rope cachedIdentifier3 = (StringCachingGuards.privatizeRope(arguments1Value_));
                            if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, cachedIdentifier3))) {
                                if (!root.excludeWriteCached_) {
                                    String identifierString3 = (cachedIdentifier3.toString());
                                    Node writeNode3 = (WriteNode.createWriteNode());
                                    BranchProfile exceptionProfile3 = (BranchProfile.create());
                                    SpecializationNode s = WriteCachedNode_.create(root, cachedIdentifier3, identifierString3, writeNode3, exceptionProfile3);
                                    if (countSame(s) < (root.getCacheLimit())) {
                                        return s;
                                    }
                                }
                            }
                            if ((RubyGuards.isRubyString(arguments1Value_))) {
                                Node writeNode4 = (WriteNode.createWriteNode());
                                BranchProfile exceptionProfile4 = (BranchProfile.create());
                                root.excludeWriteCached_ = true;
                                return WriteUncachedNode_.create(root, writeNode4, exceptionProfile4);
                            }
                        }
                    }
                    return null;
                }

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

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

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

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

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

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

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

                PolymorphicNode_(WriteNodeGen 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 Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

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

            }
            @GeneratedBy(methodName = "write(VirtualFrame, TruffleObject, Object, Object, Node, BranchProfile)", value = WriteNode.class)
            private static final class Write0Node_ extends BaseNode_ {

                @Child private Node writeNode;
                private final BranchProfile exceptionProfile;

                Write0Node_(WriteNodeGen root, Node writeNode, BranchProfile exceptionProfile) {
                    super(root, 1);
                    this.writeNode = writeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        if ((!(RubyGuards.isRubySymbol(arguments1Value))) && (!(RubyGuards.isRubyString(arguments1Value)))) {
                            return root.write(frameValue, arguments0Value_, arguments1Value, arguments2Value, this.writeNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(WriteNodeGen root, Node writeNode, BranchProfile exceptionProfile) {
                    return new Write0Node_(root, writeNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "write(VirtualFrame, TruffleObject, DynamicObject, Object, DynamicObject, String, Node, BranchProfile)", value = WriteNode.class)
            private static final class Write1Node_ extends BaseNode_ {

                private final DynamicObject cachedIdentifier;
                private final String identifierString;
                @Child private Node writeNode;
                private final BranchProfile exceptionProfile;

                Write1Node_(WriteNodeGen root, DynamicObject cachedIdentifier, String identifierString, Node writeNode, BranchProfile exceptionProfile) {
                    super(root, 2);
                    this.cachedIdentifier = cachedIdentifier;
                    this.identifierString = identifierString;
                    this.writeNode = writeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((arguments1Value_ == this.cachedIdentifier)) {
                            assert (RubyGuards.isRubySymbol(this.cachedIdentifier));
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((arguments1Value_ == this.cachedIdentifier)) {
                            assert (RubyGuards.isRubySymbol(this.cachedIdentifier));
                            return root.write(frameValue, arguments0Value_, arguments1Value_, arguments2Value, this.cachedIdentifier, this.identifierString, this.writeNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(WriteNodeGen root, DynamicObject cachedIdentifier, String identifierString, Node writeNode, BranchProfile exceptionProfile) {
                    return new Write1Node_(root, cachedIdentifier, identifierString, writeNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "writeCached(VirtualFrame, TruffleObject, DynamicObject, Object, Rope, String, Node, BranchProfile)", value = WriteNode.class)
            private static final class WriteCachedNode_ extends BaseNode_ {

                private final Rope cachedIdentifier;
                private final String identifierString;
                @Child private Node writeNode;
                private final BranchProfile exceptionProfile;

                WriteCachedNode_(WriteNodeGen root, Rope cachedIdentifier, String identifierString, Node writeNode, BranchProfile exceptionProfile) {
                    super(root, 3);
                    this.cachedIdentifier = cachedIdentifier;
                    this.identifierString = identifierString;
                    this.writeNode = writeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (newNode.getClass() == WriteUncachedNode_.class) {
                        removeSame("Contained by writeUncached(VirtualFrame, TruffleObject, DynamicObject, Object, Node, BranchProfile)");
                    }
                    return super.merge(newNode, frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedIdentifier))) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedIdentifier))) {
                            return root.writeCached(frameValue, arguments0Value_, arguments1Value_, arguments2Value, this.cachedIdentifier, this.identifierString, this.writeNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(WriteNodeGen root, Rope cachedIdentifier, String identifierString, Node writeNode, BranchProfile exceptionProfile) {
                    return new WriteCachedNode_(root, cachedIdentifier, identifierString, writeNode, exceptionProfile);
                }

            }
            @GeneratedBy(methodName = "writeUncached(VirtualFrame, TruffleObject, DynamicObject, Object, Node, BranchProfile)", value = WriteNode.class)
            private static final class WriteUncachedNode_ extends BaseNode_ {

                @Child private Node writeNode;
                private final BranchProfile exceptionProfile;

                WriteUncachedNode_(WriteNodeGen root, Node writeNode, BranchProfile exceptionProfile) {
                    super(root, 4);
                    this.writeNode = writeNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value, Object arguments2Value) {
                    if (arguments0Value instanceof TruffleObject && arguments1Value instanceof DynamicObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments1Value_))) {
                            return root.writeUncached(frameValue, arguments0Value_, arguments1Value_, arguments2Value, this.writeNode, this.exceptionProfile);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value, arguments2Value);
                }

                static BaseNode_ create(WriteNodeGen root, Node writeNode, BranchProfile exceptionProfile) {
                    return new WriteUncachedNode_(root, writeNode, exceptionProfile);
                }

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

        private static KeysNodeFactory keysNodeFactoryInstance;

        private KeysNodeFactory() {
        }

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

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

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

        @Override
        public KeysNode 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 (keysNodeFactoryInstance == null) {
                keysNodeFactoryInstance = new KeysNodeFactory();
            }
            return keysNodeFactoryInstance;
        }

        public static KeysNode create(RubyNode[] arguments) {
            return new KeysNodeGen(arguments);
        }

        @GeneratedBy(KeysNode.class)
        public static final class KeysNodeGen extends KeysNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private KeysNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected KeysNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        Node keysNode1 = (root.createKeysNode());
                        SnippetNode snippetNode1 = (new SnippetNode());
                        BranchProfile exceptionProfile1 = (BranchProfile.create());
                        return SizeNode_.create(root, keysNode1, snippetNode1, exceptionProfile1);
                    }
                    return null;
                }

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

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

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

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

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

            }
            @GeneratedBy(methodName = "size(VirtualFrame, TruffleObject, Node, SnippetNode, BranchProfile)", value = KeysNode.class)
            private static final class SizeNode_ extends BaseNode_ {

                @Child private Node keysNode;
                @Child private SnippetNode snippetNode;
                private final BranchProfile exceptionProfile;

                SizeNode_(KeysNodeGen root, Node keysNode, SnippetNode snippetNode, BranchProfile exceptionProfile) {
                    super(root, 1);
                    this.keysNode = keysNode;
                    this.snippetNode = snippetNode;
                    this.exceptionProfile = exceptionProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    if (arguments0Value instanceof TruffleObject) {
                        TruffleObject arguments0Value_ = (TruffleObject) arguments0Value;
                        return root.size(frameValue, arguments0Value_, this.keysNode, this.snippetNode, this.exceptionProfile);
                    }
                    return getNext().execute_(frameValue, arguments0Value);
                }

                static BaseNode_ create(KeysNodeGen root, Node keysNode, SnippetNode snippetNode, BranchProfile exceptionProfile) {
                    return new SizeNode_(root, keysNode, snippetNode, exceptionProfile);
                }

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

        private static ExportNodeFactory exportNodeFactoryInstance;

        private ExportNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return ExportNode.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 ExportNode 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 (exportNodeFactoryInstance == null) {
                exportNodeFactoryInstance = new ExportNodeFactory();
            }
            return exportNodeFactoryInstance;
        }

        public static ExportNode create(RubyNode[] arguments) {
            return new ExportNodeGen(arguments);
        }

        @GeneratedBy(ExportNode.class)
        public static final class ExportNodeGen extends ExportNode {

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

            private ExportNodeGen(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) {
                DynamicObject arguments0Value_;
                try {
                    arguments0Value_ = arguments0_.executeDynamicObject(frameValue);
                } catch (UnexpectedResultException ex) {
                    Object arguments1Value = arguments1_.execute(frameValue);
                    throw unsupported(ex.getResult(), arguments1Value);
                }
                TruffleObject arguments1Value_;
                try {
                    arguments1Value_ = expectTruffleObject(arguments1_.execute(frameValue));
                } catch (UnexpectedResultException ex) {
                    throw unsupported(arguments0Value_, ex.getResult());
                }
                if ((RubyGuards.isRubyString(arguments0Value_) || RubyGuards.isRubySymbol(arguments0Value_))) {
                    return this.export(arguments0Value_, arguments1Value_);
                }
                throw unsupported(arguments0Value_, arguments1Value_);
            }

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

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

            private static TruffleObject expectTruffleObject(Object value) throws UnexpectedResultException {
                if (value instanceof TruffleObject) {
                    return (TruffleObject) value;
                }
                throw new UnexpectedResultException(value);
            }

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

        private static ImportNodeFactory importNodeFactoryInstance;

        private ImportNodeFactory() {
        }

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

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

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

        @Override
        public ImportNode 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 (importNodeFactoryInstance == null) {
                importNodeFactoryInstance = new ImportNodeFactory();
            }
            return importNodeFactoryInstance;
        }

        public static ImportNode create(RubyNode name) {
            return new ImportNodeGen(name);
        }

        @GeneratedBy(ImportNode.class)
        public static final class ImportNodeGen extends ImportNode implements SpecializedNode {

            @Child private RubyNode name_;
            @Child private BaseNode_ specialization_;

            private ImportNodeGen(RubyNode name) {
                this.name_ = coercetNameToString(name);
                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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected ImportNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object nameValue);

                public Object execute(VirtualFrame frameValue) {
                    Object nameValue_ = root.name_.execute(frameValue);
                    return execute_(frameValue, nameValue_);
                }

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object nameValue) {
                    if (nameValue instanceof String) {
                        BranchProfile errorProfile1 = (BranchProfile.create());
                        return ImportObjectNode_.create(root, errorProfile1);
                    }
                    return null;
                }

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

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

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

                @Override
                public Object execute_(VirtualFrame frameValue, Object nameValue) {
                    return uninitialized(frameValue, nameValue);
                }

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

            }
            @GeneratedBy(methodName = "importObject(String, BranchProfile)", value = ImportNode.class)
            private static final class ImportObjectNode_ extends BaseNode_ {

                private final BranchProfile errorProfile;

                ImportObjectNode_(ImportNodeGen root, BranchProfile errorProfile) {
                    super(root, 1);
                    this.errorProfile = errorProfile;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object nameValue) {
                    if (nameValue instanceof String) {
                        String nameValue_ = (String) nameValue;
                        return root.importObject(nameValue_, this.errorProfile);
                    }
                    return getNext().execute_(frameValue, nameValue);
                }

                static BaseNode_ create(ImportNodeGen root, BranchProfile errorProfile) {
                    return new ImportObjectNode_(root, errorProfile);
                }

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

        private static MimeTypeSupportedNodeFactory mimeTypeSupportedNodeFactoryInstance;

        private MimeTypeSupportedNodeFactory() {
        }

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

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

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

        @Override
        public MimeTypeSupportedNode 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 (mimeTypeSupportedNodeFactoryInstance == null) {
                mimeTypeSupportedNodeFactoryInstance = new MimeTypeSupportedNodeFactory();
            }
            return mimeTypeSupportedNodeFactoryInstance;
        }

        public static MimeTypeSupportedNode create(RubyNode[] arguments) {
            return new MimeTypeSupportedNodeGen(arguments);
        }

        @GeneratedBy(MimeTypeSupportedNode.class)
        public static final class MimeTypeSupportedNodeGen extends MimeTypeSupportedNode {

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

            private MimeTypeSupportedNodeGen(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 executeBoolean(frameValue);
            }

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

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

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

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

        private static EvalNodeFactory evalNodeFactoryInstance;

        private EvalNodeFactory() {
        }

        @Override
        public Class getNodeClass() {
            return EvalNode.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 EvalNode 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 (evalNodeFactoryInstance == null) {
                evalNodeFactoryInstance = new EvalNodeFactory();
            }
            return evalNodeFactoryInstance;
        }

        public static EvalNode create(RubyNode[] arguments) {
            return new EvalNodeGen(arguments);
        }

        @GeneratedBy(EvalNode.class)
        public static final class EvalNodeGen extends EvalNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private RubyNode arguments1_;
            @CompilationFinal private boolean excludeEvalCached_;
            @Child private BaseNode_ specialization_;

            private EvalNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected EvalNodeGen root;

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

                @Override
                protected final void setRoot(Node root) {
                    this.root = (EvalNodeGen) 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.execute_((VirtualFrame) frameValue, arguments0Value, arguments1Value);
                }

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        Rope cachedMimeType1 = (StringCachingGuards.privatizeRope(arguments0Value_));
                        Rope cachedSource1 = (StringCachingGuards.privatizeRope(arguments1Value_));
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments0Value_, cachedMimeType1)) && (StringCachingGuards.ropesEqual(arguments1Value_, cachedSource1))) {
                            if (!root.excludeEvalCached_) {
                                DirectCallNode callNode1 = (DirectCallNode.create(root.parse(arguments0Value_, arguments1Value_)));
                                SpecializationNode s = EvalCachedNode_.create(root, cachedMimeType1, cachedSource1, callNode1);
                                if (countSame(s) < (root.getCacheLimit())) {
                                    return s;
                                }
                            }
                        }
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            IndirectCallNode callNode2 = (IndirectCallNode.create());
                            root.excludeEvalCached_ = true;
                            return EvalUncachedNode_.create(root, callNode2);
                        }
                    }
                    return null;
                }

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

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

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

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

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

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

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

                PolymorphicNode_(EvalNodeGen 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 Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

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

            }
            @GeneratedBy(methodName = "evalCached(VirtualFrame, DynamicObject, DynamicObject, Rope, Rope, DirectCallNode)", value = EvalNode.class)
            private static final class EvalCachedNode_ extends BaseNode_ {

                private final Rope cachedMimeType;
                private final Rope cachedSource;
                @Child private DirectCallNode callNode;

                EvalCachedNode_(EvalNodeGen root, Rope cachedMimeType, Rope cachedSource, DirectCallNode callNode) {
                    super(root, 1);
                    this.cachedMimeType = cachedMimeType;
                    this.cachedSource = cachedSource;
                    this.callNode = callNode;
                }

                @Override
                public SpecializationNode merge(SpecializationNode newNode, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (newNode.getClass() == EvalUncachedNode_.class) {
                        removeSame("Contained by evalUncached(VirtualFrame, DynamicObject, DynamicObject, IndirectCallNode)");
                    }
                    return super.merge(newNode, frameValue, arguments0Value, arguments1Value);
                }

                @Override
                public boolean isIdentical(SpecializationNode other, Frame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments0Value_, this.cachedMimeType)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedSource))) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_)) && (StringCachingGuards.ropesEqual(arguments0Value_, this.cachedMimeType)) && (StringCachingGuards.ropesEqual(arguments1Value_, this.cachedSource))) {
                            return root.evalCached(frameValue, arguments0Value_, arguments1Value_, this.cachedMimeType, this.cachedSource, this.callNode);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(EvalNodeGen root, Rope cachedMimeType, Rope cachedSource, DirectCallNode callNode) {
                    return new EvalCachedNode_(root, cachedMimeType, cachedSource, callNode);
                }

            }
            @GeneratedBy(methodName = "evalUncached(VirtualFrame, DynamicObject, DynamicObject, IndirectCallNode)", value = EvalNode.class)
            private static final class EvalUncachedNode_ extends BaseNode_ {

                @Child private IndirectCallNode callNode;

                EvalUncachedNode_(EvalNodeGen root, IndirectCallNode callNode) {
                    super(root, 2);
                    this.callNode = callNode;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value, Object arguments1Value) {
                    if (arguments0Value instanceof DynamicObject && arguments1Value instanceof DynamicObject) {
                        DynamicObject arguments0Value_ = (DynamicObject) arguments0Value;
                        DynamicObject arguments1Value_ = (DynamicObject) arguments1Value;
                        if ((RubyGuards.isRubyString(arguments0Value_)) && (RubyGuards.isRubyString(arguments1Value_))) {
                            return root.evalUncached(frameValue, arguments0Value_, arguments1Value_, this.callNode);
                        }
                    }
                    return getNext().execute_(frameValue, arguments0Value, arguments1Value);
                }

                static BaseNode_ create(EvalNodeGen root, IndirectCallNode callNode) {
                    return new EvalUncachedNode_(root, callNode);
                }

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

        private static InteropToJavaStringNodeFactory interopToJavaStringNodeFactoryInstance;

        private InteropToJavaStringNodeFactory() {
        }

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

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

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

        @Override
        public InteropToJavaStringNode 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 (interopToJavaStringNodeFactoryInstance == null) {
                interopToJavaStringNodeFactoryInstance = new InteropToJavaStringNodeFactory();
            }
            return interopToJavaStringNodeFactoryInstance;
        }

        public static InteropToJavaStringNode create(RubyNode[] arguments) {
            return new InteropToJavaStringNodeGen(arguments);
        }

        @GeneratedBy(InteropToJavaStringNode.class)
        public static final class InteropToJavaStringNodeGen extends InteropToJavaStringNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private InteropToJavaStringNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected InteropToJavaStringNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    NameToJavaStringNode toJavaStringNode1 = (NameToJavaStringNode.create());
                    return ToJavaStringNode_.create(root, toJavaStringNode1);
                }

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

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

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

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

            }
            @GeneratedBy(methodName = "toJavaString(VirtualFrame, Object, NameToJavaStringNode)", value = InteropToJavaStringNode.class)
            private static final class ToJavaStringNode_ extends BaseNode_ {

                @Child private NameToJavaStringNode toJavaStringNode;

                ToJavaStringNode_(InteropToJavaStringNodeGen root, NameToJavaStringNode toJavaStringNode) {
                    super(root, 1);
                    this.toJavaStringNode = toJavaStringNode;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    return root.toJavaString(frameValue, arguments0Value, this.toJavaStringNode);
                }

                static BaseNode_ create(InteropToJavaStringNodeGen root, NameToJavaStringNode toJavaStringNode) {
                    return new ToJavaStringNode_(root, toJavaStringNode);
                }

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

        private static InteropFromJavaStringNodeFactory interopFromJavaStringNodeFactoryInstance;

        private InteropFromJavaStringNodeFactory() {
        }

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

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

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

        @Override
        public InteropFromJavaStringNode 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 (interopFromJavaStringNodeFactoryInstance == null) {
                interopFromJavaStringNodeFactoryInstance = new InteropFromJavaStringNodeFactory();
            }
            return interopFromJavaStringNodeFactoryInstance;
        }

        public static InteropFromJavaStringNode create(RubyNode[] arguments) {
            return new InteropFromJavaStringNodeGen(arguments);
        }

        @GeneratedBy(InteropFromJavaStringNode.class)
        public static final class InteropFromJavaStringNodeGen extends InteropFromJavaStringNode implements SpecializedNode {

            @Child private RubyNode arguments0_;
            @Child private BaseNode_ specialization_;

            private InteropFromJavaStringNodeGen(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 SpecializationNode getSpecializationNode() {
                return specialization_;
            }

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

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

                @CompilationFinal protected InteropFromJavaStringNodeGen root;

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

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

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

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

                public abstract Object execute_(VirtualFrame frameValue, Object arguments0Value);

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

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

                @Override
                protected final SpecializationNode createNext(Frame frameValue, Object arguments0Value) {
                    ForeignToRubyNode foreignToRubyNode1 = (root.createForeignToRubyNode());
                    return FromJavaStringNode_.create(root, foreignToRubyNode1);
                }

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

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

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

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

            }
            @GeneratedBy(methodName = "fromJavaString(VirtualFrame, Object, ForeignToRubyNode)", value = InteropFromJavaStringNode.class)
            private static final class FromJavaStringNode_ extends BaseNode_ {

                @Child private ForeignToRubyNode foreignToRubyNode;

                FromJavaStringNode_(InteropFromJavaStringNodeGen root, ForeignToRubyNode foreignToRubyNode) {
                    super(root, 1);
                    this.foreignToRubyNode = foreignToRubyNode;
                }

                @Override
                public Object execute_(VirtualFrame frameValue, Object arguments0Value) {
                    return root.fromJavaString(frameValue, arguments0Value, this.foreignToRubyNode);
                }

                static BaseNode_ create(InteropFromJavaStringNodeGen root, ForeignToRubyNode foreignToRubyNode) {
                    return new FromJavaStringNode_(root, foreignToRubyNode);
                }

            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy