Class: Opal::Rewriters::InlineArgs::Initializer
- Defined in:
- opal/lib/opal/rewriters/inline_args.rb
Constant Summary
- STEPS =
%i[extract_blockarginitialize_shadowargsextract_argsprepare_post_argsprepare_kwargsextract_optargsextract_restargextract_post_argsextract_kwargsextract_kwoptargsextract_kwrestarg].freeze
Constants inherited from Base
Instance Attribute Summary collapse
-
#initialization ⇒ Object
readonly
Returns the value of attribute initialization.
-
#inline ⇒ Object
readonly
Returns the value of attribute inline.
Attributes inherited from Base
Instance Method Summary collapse
- #args_to_keep ⇒ Object
- #extract_args ⇒ Object
- #extract_blockarg ⇒ Object
- #extract_kwargs ⇒ Object
- #extract_kwoptargs ⇒ Object
- #extract_kwrestarg ⇒ Object
- #extract_optargs ⇒ Object
- #extract_post_args ⇒ Object
- #extract_restarg ⇒ Object
-
#initialize(args, type:) ⇒ Initializer
constructor
A new instance of Initializer.
- #initialize_shadowargs ⇒ Object
- #prepare_kwargs ⇒ Object
- #prepare_post_args ⇒ Object
Methods inherited from Base
#append_to_body , #begin_with_stmts , #error , #prepend_to_body , #process , #s , s , #stmts_of
Constructor Details
#initialize(args, type:) ⇒ Initializer
Returns a new instance of Initializer
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
# File 'opal/lib/opal/rewriters/inline_args.rb', line 87 def initialize(args, type:) @args = Arguments .new (args.children) @inline = [] @initialization = [] @type = type @underscore_found = false STEPS .each do |step| send(step) end if @initialization.any? @initialization = s(:begin, *@initialization) else @initialization = nil end end
Instance Attribute Details
#initialization ⇒ Object (readonly)
Returns the value of attribute initialization
68 69 70
# File 'opal/lib/opal/rewriters/inline_args.rb', line 68 def initialization @initialization end
#inline ⇒ Object (readonly)
Returns the value of attribute inline
68 69 70
# File 'opal/lib/opal/rewriters/inline_args.rb', line 68 def inline @inline end
Instance Method Details
#args_to_keep ⇒ Object
214 215 216
# File 'opal/lib/opal/rewriters/inline_args.rb', line 214 def args_to_keep @args.postargs.length end
#extract_args ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
# File 'opal/lib/opal/rewriters/inline_args.rb', line 119 def extract_args @args.args.each do |arg| if @type == :iter # block args are not required, # so we neeed to tell compiler that required args # must be initialized with nil-s @initialization << arg.updated(:initialize_iter_arg) if arg.children[0] == :_ if @underscore_found # for proc { |_, _| _ }.call(1, 2) result must be 1 # here we convert all underscore args starting from the 2nd # to a "fake" arg arg = s(:fake_arg) end @underscore_found = true end else # required inline def argument like 'def m(req)' # no initialization is required end @inline << arg end end
#extract_blockarg ⇒ Object
107 108 109 110 111
# File 'opal/lib/opal/rewriters/inline_args.rb', line 107 def extract_blockarg if (arg = @args.blockarg) @initialization << arg.updated(:extract_blockarg) end end
#extract_kwargs ⇒ Object
164 165 166 167 168
# File 'opal/lib/opal/rewriters/inline_args.rb', line 164 def extract_kwargs @args.kwargs.each do |arg| @initialization << arg.updated(:extract_kwarg) end end
#extract_kwoptargs ⇒ Object
170 171 172 173 174
# File 'opal/lib/opal/rewriters/inline_args.rb', line 170 def extract_kwoptargs @args.kwoptargs.each do |arg| @initialization << arg.updated(:extract_kwoptarg) end end
#extract_kwrestarg ⇒ Object
176 177 178 179 180
# File 'opal/lib/opal/rewriters/inline_args.rb', line 176 def extract_kwrestarg if (arg = @args.kwrestarg) @initialization << arg.updated(:extract_kwrestarg) end end
#extract_optargs ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
# File 'opal/lib/opal/rewriters/inline_args.rb', line 190 def extract_optargs has_post_args = @args.has_post_args? @args.optargs.each do |arg| if has_post_args # optional post argument like 'def m(opt = 1, a)' arg_name, default_value = *arg @initialization << arg.updated(:extract_post_optarg, [arg_name, default_value, args_to_keep]) @inline << s(:fake_arg) else # optional inline argument like 'def m(a, opt = 1)' @inline << arg.updated(:arg) @initialization << arg.updated(:extract_optarg) end end end
#extract_post_args ⇒ Object
182 183 184 185 186 187 188
# File 'opal/lib/opal/rewriters/inline_args.rb', line 182 def extract_post_args # post arguments must be extracted with an offset @args.postargs.each do |arg| @initialization << arg.updated(:extract_post_arg) @inline << s(:fake_arg) end end
#extract_restarg ⇒ Object
206 207 208 209 210 211 212
# File 'opal/lib/opal/rewriters/inline_args.rb', line 206 def extract_restarg if (arg = @args.restarg) arg_name = arg.children[0] @initialization << arg.updated(:extract_restarg, [arg_name, args_to_keep]) @inline << s(:fake_arg) end end
#initialize_shadowargs ⇒ Object
113 114 115 116 117
# File 'opal/lib/opal/rewriters/inline_args.rb', line 113 def initialize_shadowargs @args.shadowargs.each do |arg| @initialization << arg.updated(:initialize_shadowarg) end end
#prepare_kwargs ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162
# File 'opal/lib/opal/rewriters/inline_args.rb', line 151 def prepare_kwargs return unless @args.has_any_kwargs? if @args.can_inline_kwargs? @inline << s(:arg, :$kwargs') else @initialization << s(:extract_kwargs) @inline << s(:fake_arg) end @initialization << s(:ensure_kwargs_are_kwargs) end
#prepare_post_args ⇒ Object
145 146 147 148 149
# File 'opal/lib/opal/rewriters/inline_args.rb', line 145 def prepare_post_args if @args.has_post_args? @initialization << s(:prepare_post_args, @args.args.length) end end