Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 18.118.252.215
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /proc/thread-self/root/proc/thread-self/root/opt/alt/ruby33/share/ruby/prism/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/thread-self/root/proc/thread-self/root/opt/alt/ruby33/share/ruby/prism/serialize.rb
# frozen_string_literal: true
=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/serialize.rb.erb
if you are looking to modify the template
=end

require "stringio"

# Polyfill for String#unpack1 with the offset parameter.
if String.instance_method(:unpack1).parameters.none? { |_, name| name == :offset }
  String.prepend(
    Module.new {
      def unpack1(format, offset: 0) # :nodoc:
        offset == 0 ? super(format) : self[offset..].unpack1(format)
      end
    }
  )
end

module Prism
  # A module responsible for deserializing parse results.
  module Serialize
    # The major version of prism that we are expecting to find in the serialized
    # strings.
    MAJOR_VERSION = 0

    # The minor version of prism that we are expecting to find in the serialized
    # strings.
    MINOR_VERSION = 19

    # The patch version of prism that we are expecting to find in the serialized
    # strings.
    PATCH_VERSION = 0

    # Deserialize the AST represented by the given string into a parse result.
    def self.load(input, serialized)
      input = input.dup
      source = Source.new(input)
      loader = Loader.new(source, serialized)
      result = loader.load_result

      input.force_encoding(loader.encoding)
      result
    end

    # Deserialize the tokens represented by the given string into a parse
    # result.
    def self.load_tokens(source, serialized)
      Loader.new(source, serialized).load_tokens_result
    end

    class Loader # :nodoc:
      attr_reader :encoding, :input, :serialized, :io
      attr_reader :constant_pool_offset, :constant_pool, :source
      attr_reader :start_line

      def initialize(source, serialized)
        @encoding = Encoding::UTF_8

        @input = source.source.dup
        @serialized = serialized
        @io = StringIO.new(serialized)
        @io.set_encoding(Encoding::BINARY)

        @constant_pool_offset = nil
        @constant_pool = nil

        @source = source
        define_load_node_lambdas unless RUBY_ENGINE == "ruby"
      end

      def load_header
        raise "Invalid serialization" if io.read(5) != "PRISM"
        raise "Invalid serialization" if io.read(3).unpack("C3") != [MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION]
        only_semantic_fields = io.read(1).unpack1("C")
        unless only_semantic_fields == 0
          raise "Invalid serialization (location fields must be included but are not)"
        end
      end

      def load_encoding
        @encoding = Encoding.find(io.read(load_varuint))
        @input = input.force_encoding(@encoding).freeze
        @encoding
      end

      def load_start_line
        source.start_line = load_varsint
      end

      def load_comments
        load_varuint.times.map do
          case load_varuint
          when 0 then InlineComment.new(load_location)
          when 1 then EmbDocComment.new(load_location)
          when 2 then DATAComment.new(load_location)
          end
        end
      end

      def load_metadata
        comments = load_comments
        magic_comments = load_varuint.times.map { MagicComment.new(load_location, load_location) }
        data_loc = load_optional_location
        errors = load_varuint.times.map { ParseError.new(load_embedded_string, load_location) }
        warnings = load_varuint.times.map { ParseWarning.new(load_embedded_string, load_location) }
        [comments, magic_comments, data_loc, errors, warnings]
      end

      def load_tokens
        tokens = []
        while type = TOKEN_TYPES.fetch(load_varuint)
          start = load_varuint
          length = load_varuint
          lex_state = load_varuint
          location = Location.new(@source, start, length)
          tokens << [Prism::Token.new(type, location.slice, location), lex_state]
        end

        tokens
      end

      def load_tokens_result
        tokens = load_tokens
        encoding = load_encoding
        load_start_line
        comments, magic_comments, data_loc, errors, warnings = load_metadata
        tokens.each { |token,| token.value.force_encoding(encoding) }

        raise "Expected to consume all bytes while deserializing" unless @io.eof?
        Prism::ParseResult.new(tokens, comments, magic_comments, data_loc, errors, warnings, @source)
      end

      def load_nodes
        load_header
        load_encoding
        load_start_line

        comments, magic_comments, data_loc, errors, warnings = load_metadata

        @constant_pool_offset = io.read(4).unpack1("L")
        @constant_pool = Array.new(load_varuint, nil)

        [load_node, comments, magic_comments, data_loc, errors, warnings]
      end

      def load_result
        node, comments, magic_comments, data_loc, errors, warnings = load_nodes
        Prism::ParseResult.new(node, comments, magic_comments, data_loc, errors, warnings, @source)
      end

      private

      # variable-length integer using https://en.wikipedia.org/wiki/LEB128
      # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints
      def load_varuint
        n = io.getbyte
        if n < 128
          n
        else
          n -= 128
          shift = 0
          while (b = io.getbyte) >= 128
            n += (b - 128) << (shift += 7)
          end
          n + (b << (shift + 7))
        end
      end

      def load_varsint
        n = load_varuint
        (n >> 1) ^ (-(n & 1))
      end

      def load_serialized_length
        io.read(4).unpack1("L")
      end

      def load_optional_node
        if io.getbyte != 0
          io.pos -= 1
          load_node
        end
      end

      def load_embedded_string
        io.read(load_varuint).force_encoding(encoding)
      end

      def load_string
        type = io.getbyte
        case type
        when 1
          input.byteslice(load_varuint, load_varuint).force_encoding(encoding)
        when 2
          load_embedded_string
        else
          raise "Unknown serialized string type: #{type}"
        end
      end

      def load_location
        Location.new(source, load_varuint, load_varuint)
      end

      def load_optional_location
        load_location if io.getbyte != 0
      end

      def load_constant(index)
        constant = constant_pool[index]

        unless constant
          offset = constant_pool_offset + index * 8
          start = serialized.unpack1("L", offset: offset)
          length = serialized.unpack1("L", offset: offset + 4)

          constant =
            if start.nobits?(1 << 31)
              input.byteslice(start, length).to_sym
            else
              serialized.byteslice(start & ((1 << 31) - 1), length).to_sym
            end

          constant_pool[index] = constant
        end

        constant
      end

      def load_required_constant
        load_constant(load_varuint - 1)
      end

      def load_optional_constant
        index = load_varuint
        load_constant(index - 1) if index != 0
      end

      if RUBY_ENGINE == 'ruby'
        def load_node
          type = io.getbyte
          location = load_location

          case type
          when 1 then
            AliasGlobalVariableNode.new(load_node, load_node, load_location, location)
          when 2 then
            AliasMethodNode.new(load_node, load_node, load_location, location)
          when 3 then
            AlternationPatternNode.new(load_node, load_node, load_location, location)
          when 4 then
            AndNode.new(load_node, load_node, load_location, location)
          when 5 then
            ArgumentsNode.new(load_varuint, Array.new(load_varuint) { load_node }, location)
          when 6 then
            ArrayNode.new(load_varuint, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
          when 7 then
            ArrayPatternNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
          when 8 then
            AssocNode.new(load_node, load_optional_node, load_optional_location, location)
          when 9 then
            AssocSplatNode.new(load_optional_node, load_location, location)
          when 10 then
            BackReferenceReadNode.new(load_required_constant, location)
          when 11 then
            BeginNode.new(load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location, location)
          when 12 then
            BlockArgumentNode.new(load_optional_node, load_location, location)
          when 13 then
            BlockLocalVariableNode.new(load_required_constant, location)
          when 14 then
            BlockNode.new(Array.new(load_varuint) { load_required_constant }, load_varuint, load_optional_node, load_optional_node, load_location, load_location, location)
          when 15 then
            BlockParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
          when 16 then
            BlockParametersNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
          when 17 then
            BreakNode.new(load_optional_node, load_location, location)
          when 18 then
            CallAndWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node, location)
          when 19 then
            CallNode.new(load_varuint, load_optional_node, load_optional_location, load_required_constant, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
          when 20 then
            CallOperatorWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_required_constant, load_location, load_node, location)
          when 21 then
            CallOrWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node, location)
          when 22 then
            CallTargetNode.new(load_varuint, load_node, load_location, load_required_constant, load_location, location)
          when 23 then
            CapturePatternNode.new(load_node, load_node, load_location, location)
          when 24 then
            CaseMatchNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location, location)
          when 25 then
            CaseNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location, location)
          when 26 then
            ClassNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_required_constant, location)
          when 27 then
            ClassVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 28 then
            ClassVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
          when 29 then
            ClassVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 30 then
            ClassVariableReadNode.new(load_required_constant, location)
          when 31 then
            ClassVariableTargetNode.new(load_required_constant, location)
          when 32 then
            ClassVariableWriteNode.new(load_required_constant, load_location, load_node, load_optional_location, location)
          when 33 then
            ConstantAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 34 then
            ConstantOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
          when 35 then
            ConstantOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 36 then
            ConstantPathAndWriteNode.new(load_node, load_location, load_node, location)
          when 37 then
            ConstantPathNode.new(load_optional_node, load_node, load_location, location)
          when 38 then
            ConstantPathOperatorWriteNode.new(load_node, load_location, load_node, load_required_constant, location)
          when 39 then
            ConstantPathOrWriteNode.new(load_node, load_location, load_node, location)
          when 40 then
            ConstantPathTargetNode.new(load_optional_node, load_node, load_location, location)
          when 41 then
            ConstantPathWriteNode.new(load_node, load_location, load_node, location)
          when 42 then
            ConstantReadNode.new(load_required_constant, location)
          when 43 then
            ConstantTargetNode.new(load_required_constant, location)
          when 44 then
            ConstantWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
          when 45 then
            load_serialized_length
            DefNode.new(load_required_constant, load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varuint) { load_required_constant }, load_varuint, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, location)
          when 46 then
            DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
          when 47 then
            ElseNode.new(load_location, load_optional_node, load_optional_location, location)
          when 48 then
            EmbeddedStatementsNode.new(load_location, load_optional_node, load_location, location)
          when 49 then
            EmbeddedVariableNode.new(load_location, load_node, location)
          when 50 then
            EnsureNode.new(load_location, load_optional_node, load_location, location)
          when 51 then
            FalseNode.new(location)
          when 52 then
            FindPatternNode.new(load_optional_node, load_node, Array.new(load_varuint) { load_node }, load_node, load_optional_location, load_optional_location, location)
          when 53 then
            FlipFlopNode.new(load_varuint, load_optional_node, load_optional_node, load_location, location)
          when 54 then
            FloatNode.new(location)
          when 55 then
            ForNode.new(load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location, location)
          when 56 then
            ForwardingArgumentsNode.new(location)
          when 57 then
            ForwardingParameterNode.new(location)
          when 58 then
            ForwardingSuperNode.new(load_optional_node, location)
          when 59 then
            GlobalVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 60 then
            GlobalVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
          when 61 then
            GlobalVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 62 then
            GlobalVariableReadNode.new(load_required_constant, location)
          when 63 then
            GlobalVariableTargetNode.new(load_required_constant, location)
          when 64 then
            GlobalVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
          when 65 then
            HashNode.new(load_location, Array.new(load_varuint) { load_node }, load_location, location)
          when 66 then
            HashPatternNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_location, load_optional_location, location)
          when 67 then
            IfNode.new(load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
          when 68 then
            ImaginaryNode.new(load_node, location)
          when 69 then
            ImplicitNode.new(load_node, location)
          when 70 then
            ImplicitRestNode.new(location)
          when 71 then
            InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
          when 72 then
            IndexAndWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node, location)
          when 73 then
            IndexOperatorWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_required_constant, load_location, load_node, location)
          when 74 then
            IndexOrWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node, location)
          when 75 then
            IndexTargetNode.new(load_varuint, load_node, load_location, load_optional_node, load_location, load_optional_node, location)
          when 76 then
            InstanceVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 77 then
            InstanceVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
          when 78 then
            InstanceVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 79 then
            InstanceVariableReadNode.new(load_required_constant, location)
          when 80 then
            InstanceVariableTargetNode.new(load_required_constant, location)
          when 81 then
            InstanceVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
          when 82 then
            IntegerNode.new(load_varuint, location)
          when 83 then
            InterpolatedMatchLastLineNode.new(load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location, location)
          when 84 then
            InterpolatedRegularExpressionNode.new(load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location, location)
          when 85 then
            InterpolatedStringNode.new(load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location, location)
          when 86 then
            InterpolatedSymbolNode.new(load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location, location)
          when 87 then
            InterpolatedXStringNode.new(load_location, Array.new(load_varuint) { load_node }, load_location, location)
          when 88 then
            KeywordHashNode.new(load_varuint, Array.new(load_varuint) { load_node }, location)
          when 89 then
            KeywordRestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
          when 90 then
            LambdaNode.new(Array.new(load_varuint) { load_required_constant }, load_varuint, load_location, load_location, load_location, load_optional_node, load_optional_node, location)
          when 91 then
            LocalVariableAndWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varuint, location)
          when 92 then
            LocalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_required_constant, load_required_constant, load_varuint, location)
          when 93 then
            LocalVariableOrWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varuint, location)
          when 94 then
            LocalVariableReadNode.new(load_required_constant, load_varuint, location)
          when 95 then
            LocalVariableTargetNode.new(load_required_constant, load_varuint, location)
          when 96 then
            LocalVariableWriteNode.new(load_required_constant, load_varuint, load_location, load_node, load_location, location)
          when 97 then
            MatchLastLineNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
          when 98 then
            MatchPredicateNode.new(load_node, load_node, load_location, location)
          when 99 then
            MatchRequiredNode.new(load_node, load_node, load_location, location)
          when 100 then
            MatchWriteNode.new(load_node, Array.new(load_varuint) { load_node }, location)
          when 101 then
            MissingNode.new(location)
          when 102 then
            ModuleNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant, location)
          when 103 then
            MultiTargetNode.new(Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
          when 104 then
            MultiWriteNode.new(Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, load_location, load_node, location)
          when 105 then
            NextNode.new(load_optional_node, load_location, location)
          when 106 then
            NilNode.new(location)
          when 107 then
            NoKeywordsParameterNode.new(load_location, load_location, location)
          when 108 then
            NumberedParametersNode.new(io.getbyte, location)
          when 109 then
            NumberedReferenceReadNode.new(load_varuint, location)
          when 110 then
            OptionalKeywordParameterNode.new(load_required_constant, load_location, load_node, location)
          when 111 then
            OptionalParameterNode.new(load_required_constant, load_location, load_location, load_node, location)
          when 112 then
            OrNode.new(load_node, load_node, load_location, location)
          when 113 then
            ParametersNode.new(Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_node, location)
          when 114 then
            ParenthesesNode.new(load_optional_node, load_location, load_location, location)
          when 115 then
            PinnedExpressionNode.new(load_node, load_location, load_location, load_location, location)
          when 116 then
            PinnedVariableNode.new(load_node, load_location, location)
          when 117 then
            PostExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
          when 118 then
            PreExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
          when 119 then
            ProgramNode.new(Array.new(load_varuint) { load_required_constant }, load_node, location)
          when 120 then
            RangeNode.new(load_varuint, load_optional_node, load_optional_node, load_location, location)
          when 121 then
            RationalNode.new(load_node, location)
          when 122 then
            RedoNode.new(location)
          when 123 then
            RegularExpressionNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
          when 124 then
            RequiredKeywordParameterNode.new(load_required_constant, load_location, location)
          when 125 then
            RequiredParameterNode.new(load_required_constant, location)
          when 126 then
            RescueModifierNode.new(load_node, load_location, load_node, location)
          when 127 then
            RescueNode.new(load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
          when 128 then
            RestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
          when 129 then
            RetryNode.new(location)
          when 130 then
            ReturnNode.new(load_location, load_optional_node, location)
          when 131 then
            SelfNode.new(location)
          when 132 then
            SingletonClassNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
          when 133 then
            SourceEncodingNode.new(location)
          when 134 then
            SourceFileNode.new(load_string, location)
          when 135 then
            SourceLineNode.new(location)
          when 136 then
            SplatNode.new(load_location, load_optional_node, location)
          when 137 then
            StatementsNode.new(Array.new(load_varuint) { load_node }, location)
          when 138 then
            StringNode.new(load_varuint, load_optional_location, load_location, load_optional_location, load_string, location)
          when 139 then
            SuperNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
          when 140 then
            SymbolNode.new(load_varuint, load_optional_location, load_optional_location, load_optional_location, load_string, location)
          when 141 then
            TrueNode.new(location)
          when 142 then
            UndefNode.new(Array.new(load_varuint) { load_node }, load_location, location)
          when 143 then
            UnlessNode.new(load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
          when 144 then
            UntilNode.new(load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
          when 145 then
            WhenNode.new(load_location, Array.new(load_varuint) { load_node }, load_optional_node, location)
          when 146 then
            WhileNode.new(load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
          when 147 then
            XStringNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
          when 148 then
            YieldNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, location)
          end
        end
      else
        def load_node
          type = io.getbyte
          @load_node_lambdas[type].call
        end

        def define_load_node_lambdas
          @load_node_lambdas = [
            nil,
            -> {
              location = load_location
              AliasGlobalVariableNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              AliasMethodNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              AlternationPatternNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              AndNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              ArgumentsNode.new(load_varuint, Array.new(load_varuint) { load_node }, location)
            },
            -> {
              location = load_location
              ArrayNode.new(load_varuint, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              ArrayPatternNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              AssocNode.new(load_node, load_optional_node, load_optional_location, location)
            },
            -> {
              location = load_location
              AssocSplatNode.new(load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              BackReferenceReadNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              BeginNode.new(load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location, location)
            },
            -> {
              location = load_location
              BlockArgumentNode.new(load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              BlockLocalVariableNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              BlockNode.new(Array.new(load_varuint) { load_required_constant }, load_varuint, load_optional_node, load_optional_node, load_location, load_location, location)
            },
            -> {
              location = load_location
              BlockParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
            },
            -> {
              location = load_location
              BlockParametersNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              BreakNode.new(load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              CallAndWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node, location)
            },
            -> {
              location = load_location
              CallNode.new(load_varuint, load_optional_node, load_optional_location, load_required_constant, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
            },
            -> {
              location = load_location
              CallOperatorWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_required_constant, load_location, load_node, location)
            },
            -> {
              location = load_location
              CallOrWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node, location)
            },
            -> {
              location = load_location
              CallTargetNode.new(load_varuint, load_node, load_location, load_required_constant, load_location, location)
            },
            -> {
              location = load_location
              CapturePatternNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              CaseMatchNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location, location)
            },
            -> {
              location = load_location
              CaseNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location, location)
            },
            -> {
              location = load_location
              ClassNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_required_constant, location)
            },
            -> {
              location = load_location
              ClassVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              ClassVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
            },
            -> {
              location = load_location
              ClassVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              ClassVariableReadNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              ClassVariableTargetNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              ClassVariableWriteNode.new(load_required_constant, load_location, load_node, load_optional_location, location)
            },
            -> {
              location = load_location
              ConstantAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              ConstantOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
            },
            -> {
              location = load_location
              ConstantOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              ConstantPathAndWriteNode.new(load_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              ConstantPathNode.new(load_optional_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              ConstantPathOperatorWriteNode.new(load_node, load_location, load_node, load_required_constant, location)
            },
            -> {
              location = load_location
              ConstantPathOrWriteNode.new(load_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              ConstantPathTargetNode.new(load_optional_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              ConstantPathWriteNode.new(load_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              ConstantReadNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              ConstantTargetNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              ConstantWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
            },
            -> {
              location = load_location
              load_serialized_length
              DefNode.new(load_required_constant, load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varuint) { load_required_constant }, load_varuint, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              DefinedNode.new(load_optional_location, load_node, load_optional_location, load_location, location)
            },
            -> {
              location = load_location
              ElseNode.new(load_location, load_optional_node, load_optional_location, location)
            },
            -> {
              location = load_location
              EmbeddedStatementsNode.new(load_location, load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              EmbeddedVariableNode.new(load_location, load_node, location)
            },
            -> {
              location = load_location
              EnsureNode.new(load_location, load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              FalseNode.new(location)
            },
            -> {
              location = load_location
              FindPatternNode.new(load_optional_node, load_node, Array.new(load_varuint) { load_node }, load_node, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              FlipFlopNode.new(load_varuint, load_optional_node, load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              FloatNode.new(location)
            },
            -> {
              location = load_location
              ForNode.new(load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location, location)
            },
            -> {
              location = load_location
              ForwardingArgumentsNode.new(location)
            },
            -> {
              location = load_location
              ForwardingParameterNode.new(location)
            },
            -> {
              location = load_location
              ForwardingSuperNode.new(load_optional_node, location)
            },
            -> {
              location = load_location
              GlobalVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              GlobalVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
            },
            -> {
              location = load_location
              GlobalVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              GlobalVariableReadNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              GlobalVariableTargetNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              GlobalVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
            },
            -> {
              location = load_location
              HashNode.new(load_location, Array.new(load_varuint) { load_node }, load_location, location)
            },
            -> {
              location = load_location
              HashPatternNode.new(load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              IfNode.new(load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
            },
            -> {
              location = load_location
              ImaginaryNode.new(load_node, location)
            },
            -> {
              location = load_location
              ImplicitNode.new(load_node, location)
            },
            -> {
              location = load_location
              ImplicitRestNode.new(location)
            },
            -> {
              location = load_location
              InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
            },
            -> {
              location = load_location
              IndexAndWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              IndexOperatorWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_required_constant, load_location, load_node, location)
            },
            -> {
              location = load_location
              IndexOrWriteNode.new(load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              IndexTargetNode.new(load_varuint, load_node, load_location, load_optional_node, load_location, load_optional_node, location)
            },
            -> {
              location = load_location
              InstanceVariableAndWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              InstanceVariableOperatorWriteNode.new(load_required_constant, load_location, load_location, load_node, load_required_constant, location)
            },
            -> {
              location = load_location
              InstanceVariableOrWriteNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              InstanceVariableReadNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              InstanceVariableTargetNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              InstanceVariableWriteNode.new(load_required_constant, load_location, load_node, load_location, location)
            },
            -> {
              location = load_location
              IntegerNode.new(load_varuint, location)
            },
            -> {
              location = load_location
              InterpolatedMatchLastLineNode.new(load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location, location)
            },
            -> {
              location = load_location
              InterpolatedRegularExpressionNode.new(load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location, location)
            },
            -> {
              location = load_location
              InterpolatedStringNode.new(load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location, location)
            },
            -> {
              location = load_location
              InterpolatedSymbolNode.new(load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location, location)
            },
            -> {
              location = load_location
              InterpolatedXStringNode.new(load_location, Array.new(load_varuint) { load_node }, load_location, location)
            },
            -> {
              location = load_location
              KeywordHashNode.new(load_varuint, Array.new(load_varuint) { load_node }, location)
            },
            -> {
              location = load_location
              KeywordRestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
            },
            -> {
              location = load_location
              LambdaNode.new(Array.new(load_varuint) { load_required_constant }, load_varuint, load_location, load_location, load_location, load_optional_node, load_optional_node, location)
            },
            -> {
              location = load_location
              LocalVariableAndWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varuint, location)
            },
            -> {
              location = load_location
              LocalVariableOperatorWriteNode.new(load_location, load_location, load_node, load_required_constant, load_required_constant, load_varuint, location)
            },
            -> {
              location = load_location
              LocalVariableOrWriteNode.new(load_location, load_location, load_node, load_required_constant, load_varuint, location)
            },
            -> {
              location = load_location
              LocalVariableReadNode.new(load_required_constant, load_varuint, location)
            },
            -> {
              location = load_location
              LocalVariableTargetNode.new(load_required_constant, load_varuint, location)
            },
            -> {
              location = load_location
              LocalVariableWriteNode.new(load_required_constant, load_varuint, load_location, load_node, load_location, location)
            },
            -> {
              location = load_location
              MatchLastLineNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
            },
            -> {
              location = load_location
              MatchPredicateNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              MatchRequiredNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              MatchWriteNode.new(load_node, Array.new(load_varuint) { load_node }, location)
            },
            -> {
              location = load_location
              MissingNode.new(location)
            },
            -> {
              location = load_location
              ModuleNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant, location)
            },
            -> {
              location = load_location
              MultiTargetNode.new(Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
            },
            -> {
              location = load_location
              MultiWriteNode.new(Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              NextNode.new(load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              NilNode.new(location)
            },
            -> {
              location = load_location
              NoKeywordsParameterNode.new(load_location, load_location, location)
            },
            -> {
              location = load_location
              NumberedParametersNode.new(io.getbyte, location)
            },
            -> {
              location = load_location
              NumberedReferenceReadNode.new(load_varuint, location)
            },
            -> {
              location = load_location
              OptionalKeywordParameterNode.new(load_required_constant, load_location, load_node, location)
            },
            -> {
              location = load_location
              OptionalParameterNode.new(load_required_constant, load_location, load_location, load_node, location)
            },
            -> {
              location = load_location
              OrNode.new(load_node, load_node, load_location, location)
            },
            -> {
              location = load_location
              ParametersNode.new(Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_node, location)
            },
            -> {
              location = load_location
              ParenthesesNode.new(load_optional_node, load_location, load_location, location)
            },
            -> {
              location = load_location
              PinnedExpressionNode.new(load_node, load_location, load_location, load_location, location)
            },
            -> {
              location = load_location
              PinnedVariableNode.new(load_node, load_location, location)
            },
            -> {
              location = load_location
              PostExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
            },
            -> {
              location = load_location
              PreExecutionNode.new(load_optional_node, load_location, load_location, load_location, location)
            },
            -> {
              location = load_location
              ProgramNode.new(Array.new(load_varuint) { load_required_constant }, load_node, location)
            },
            -> {
              location = load_location
              RangeNode.new(load_varuint, load_optional_node, load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              RationalNode.new(load_node, location)
            },
            -> {
              location = load_location
              RedoNode.new(location)
            },
            -> {
              location = load_location
              RegularExpressionNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
            },
            -> {
              location = load_location
              RequiredKeywordParameterNode.new(load_required_constant, load_location, location)
            },
            -> {
              location = load_location
              RequiredParameterNode.new(load_required_constant, location)
            },
            -> {
              location = load_location
              RescueModifierNode.new(load_node, load_location, load_node, location)
            },
            -> {
              location = load_location
              RescueNode.new(load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
            },
            -> {
              location = load_location
              RestParameterNode.new(load_optional_constant, load_optional_location, load_location, location)
            },
            -> {
              location = load_location
              RetryNode.new(location)
            },
            -> {
              location = load_location
              ReturnNode.new(load_location, load_optional_node, location)
            },
            -> {
              location = load_location
              SelfNode.new(location)
            },
            -> {
              location = load_location
              SingletonClassNode.new(Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
            },
            -> {
              location = load_location
              SourceEncodingNode.new(location)
            },
            -> {
              location = load_location
              SourceFileNode.new(load_string, location)
            },
            -> {
              location = load_location
              SourceLineNode.new(location)
            },
            -> {
              location = load_location
              SplatNode.new(load_location, load_optional_node, location)
            },
            -> {
              location = load_location
              StatementsNode.new(Array.new(load_varuint) { load_node }, location)
            },
            -> {
              location = load_location
              StringNode.new(load_varuint, load_optional_location, load_location, load_optional_location, load_string, location)
            },
            -> {
              location = load_location
              SuperNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
            },
            -> {
              location = load_location
              SymbolNode.new(load_varuint, load_optional_location, load_optional_location, load_optional_location, load_string, location)
            },
            -> {
              location = load_location
              TrueNode.new(location)
            },
            -> {
              location = load_location
              UndefNode.new(Array.new(load_varuint) { load_node }, load_location, location)
            },
            -> {
              location = load_location
              UnlessNode.new(load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
            },
            -> {
              location = load_location
              UntilNode.new(load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
            },
            -> {
              location = load_location
              WhenNode.new(load_location, Array.new(load_varuint) { load_node }, load_optional_node, location)
            },
            -> {
              location = load_location
              WhileNode.new(load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
            },
            -> {
              location = load_location
              XStringNode.new(load_varuint, load_location, load_location, load_location, load_string, location)
            },
            -> {
              location = load_location
              YieldNode.new(load_location, load_optional_location, load_optional_node, load_optional_location, location)
            },
          ]
        end
      end
    end

    # The token types that can be indexed by their enum values.
    TOKEN_TYPES = [
      nil,
      :EOF,
      :MISSING,
      :NOT_PROVIDED,
      :AMPERSAND,
      :AMPERSAND_AMPERSAND,
      :AMPERSAND_AMPERSAND_EQUAL,
      :AMPERSAND_DOT,
      :AMPERSAND_EQUAL,
      :BACKTICK,
      :BACK_REFERENCE,
      :BANG,
      :BANG_EQUAL,
      :BANG_TILDE,
      :BRACE_LEFT,
      :BRACE_RIGHT,
      :BRACKET_LEFT,
      :BRACKET_LEFT_ARRAY,
      :BRACKET_LEFT_RIGHT,
      :BRACKET_LEFT_RIGHT_EQUAL,
      :BRACKET_RIGHT,
      :CARET,
      :CARET_EQUAL,
      :CHARACTER_LITERAL,
      :CLASS_VARIABLE,
      :COLON,
      :COLON_COLON,
      :COMMA,
      :COMMENT,
      :CONSTANT,
      :DOT,
      :DOT_DOT,
      :DOT_DOT_DOT,
      :EMBDOC_BEGIN,
      :EMBDOC_END,
      :EMBDOC_LINE,
      :EMBEXPR_BEGIN,
      :EMBEXPR_END,
      :EMBVAR,
      :EQUAL,
      :EQUAL_EQUAL,
      :EQUAL_EQUAL_EQUAL,
      :EQUAL_GREATER,
      :EQUAL_TILDE,
      :FLOAT,
      :FLOAT_IMAGINARY,
      :FLOAT_RATIONAL,
      :FLOAT_RATIONAL_IMAGINARY,
      :GLOBAL_VARIABLE,
      :GREATER,
      :GREATER_EQUAL,
      :GREATER_GREATER,
      :GREATER_GREATER_EQUAL,
      :HEREDOC_END,
      :HEREDOC_START,
      :IDENTIFIER,
      :IGNORED_NEWLINE,
      :INSTANCE_VARIABLE,
      :INTEGER,
      :INTEGER_IMAGINARY,
      :INTEGER_RATIONAL,
      :INTEGER_RATIONAL_IMAGINARY,
      :KEYWORD_ALIAS,
      :KEYWORD_AND,
      :KEYWORD_BEGIN,
      :KEYWORD_BEGIN_UPCASE,
      :KEYWORD_BREAK,
      :KEYWORD_CASE,
      :KEYWORD_CLASS,
      :KEYWORD_DEF,
      :KEYWORD_DEFINED,
      :KEYWORD_DO,
      :KEYWORD_DO_LOOP,
      :KEYWORD_ELSE,
      :KEYWORD_ELSIF,
      :KEYWORD_END,
      :KEYWORD_END_UPCASE,
      :KEYWORD_ENSURE,
      :KEYWORD_FALSE,
      :KEYWORD_FOR,
      :KEYWORD_IF,
      :KEYWORD_IF_MODIFIER,
      :KEYWORD_IN,
      :KEYWORD_MODULE,
      :KEYWORD_NEXT,
      :KEYWORD_NIL,
      :KEYWORD_NOT,
      :KEYWORD_OR,
      :KEYWORD_REDO,
      :KEYWORD_RESCUE,
      :KEYWORD_RESCUE_MODIFIER,
      :KEYWORD_RETRY,
      :KEYWORD_RETURN,
      :KEYWORD_SELF,
      :KEYWORD_SUPER,
      :KEYWORD_THEN,
      :KEYWORD_TRUE,
      :KEYWORD_UNDEF,
      :KEYWORD_UNLESS,
      :KEYWORD_UNLESS_MODIFIER,
      :KEYWORD_UNTIL,
      :KEYWORD_UNTIL_MODIFIER,
      :KEYWORD_WHEN,
      :KEYWORD_WHILE,
      :KEYWORD_WHILE_MODIFIER,
      :KEYWORD_YIELD,
      :KEYWORD___ENCODING__,
      :KEYWORD___FILE__,
      :KEYWORD___LINE__,
      :LABEL,
      :LABEL_END,
      :LAMBDA_BEGIN,
      :LESS,
      :LESS_EQUAL,
      :LESS_EQUAL_GREATER,
      :LESS_LESS,
      :LESS_LESS_EQUAL,
      :METHOD_NAME,
      :MINUS,
      :MINUS_EQUAL,
      :MINUS_GREATER,
      :NEWLINE,
      :NUMBERED_REFERENCE,
      :PARENTHESIS_LEFT,
      :PARENTHESIS_LEFT_PARENTHESES,
      :PARENTHESIS_RIGHT,
      :PERCENT,
      :PERCENT_EQUAL,
      :PERCENT_LOWER_I,
      :PERCENT_LOWER_W,
      :PERCENT_LOWER_X,
      :PERCENT_UPPER_I,
      :PERCENT_UPPER_W,
      :PIPE,
      :PIPE_EQUAL,
      :PIPE_PIPE,
      :PIPE_PIPE_EQUAL,
      :PLUS,
      :PLUS_EQUAL,
      :QUESTION_MARK,
      :REGEXP_BEGIN,
      :REGEXP_END,
      :SEMICOLON,
      :SLASH,
      :SLASH_EQUAL,
      :STAR,
      :STAR_EQUAL,
      :STAR_STAR,
      :STAR_STAR_EQUAL,
      :STRING_BEGIN,
      :STRING_CONTENT,
      :STRING_END,
      :SYMBOL_BEGIN,
      :TILDE,
      :UAMPERSAND,
      :UCOLON_COLON,
      :UDOT_DOT,
      :UDOT_DOT_DOT,
      :UMINUS,
      :UMINUS_NUM,
      :UPLUS,
      :USTAR,
      :USTAR_STAR,
      :WORDS_SEP,
      :__END__,
    ]
  end
end

Youez - 2016 - github.com/yon3zu
LinuXploit