Sha256: 1799c977b504422ef174ede5013ceea04744803bcd379d398930114ae7ef8fe3

Contents?: true

Size: 1019 Bytes

Versions: 18

Compression:

Stored size: 1019 Bytes

Contents

# frozen_string_literal: true

require 'opal/nodes/base'

module Opal
  module Nodes
    module Args
      # This node is responsible for extracting a single
      # optional post-argument
      #
      # args_to_keep is the number of required post-arguments
      #
      #   def m(a = 1, b, c, d); end
      # becomes something like:
      #   if post_args.length > 3
      #     a = post_args[0]
      #     post_args = post_args[1..-1]
      #   end
      #
      class ExtractPostOptarg < Base
        handle :extract_post_optarg
        children :name, :default_value, :args_to_keep

        def compile
          add_temp name

          line "if ($post_args.length > #{args_to_keep}) {"
          line "  #{name} = $post_args[0];"
          line "  $post_args.splice(0, 1);"
          line "}"

          return if default_value.children[1] == :undefined

          line "if (#{name} == null) {"
          line "  #{name} = ", expr(default_value), ";"
          line "}"
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
opal-1.3.2 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.3.1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.3.0 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.3.0.rc1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.3.0.alpha1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.2.0 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.2.0.beta1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.1.1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.1.1.rc1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.1.0 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.1.0.rc1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.5 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.4 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.3 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.2 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.1 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.0 lib/opal/nodes/args/extract_post_optarg.rb
opal-1.0.0.beta1 lib/opal/nodes/args/extract_post_optarg.rb