Class: Opal::Nodes::MlhsArgNode
- Defined in:
- opal/lib/opal/nodes/args/mlhsarg.rb
Overview
A node responsible for extracting a single MLHS argument
MLHS argument is the left hand side of a multiple assignment (Multiple Left Hand Side)
def m((a, b)) def m((a, *b))
MLHS can include simple arguments (see NormargNode) and rest arguments (see RestargNode)
Constant Summary
Constants included from Helpers
Helpers::BASIC_IDENTIFIER_RULES, Helpers::ES3_RESERVED_WORD_EXCLUSIVE, Helpers::ES51_RESERVED_WORD, Helpers::IMMUTABLE_PROPS, Helpers::PROTO_SPECIAL_METHODS, Helpers::PROTO_SPECIAL_PROPS, Helpers::RESERVED_FUNCTION_NAMES
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
#add_gvar, #add_ivar, #add_local, #add_temp, #children, children, #compile_to_fragments, #error, #expr, #expr?, #expr_or_nil, #fragment, handle, handlers, #has_rescue_else?, #helper, #in_ensure, #in_ensure?, #in_while?, #initialize, #process, #push, #recv, #recv?, #s, #scope, #stmt, #stmt?, truthy_optimize?, #unshift, #while_loop, #with_temp, #wrap
Methods included from Helpers
#current_indent, #empty_line, #indent, #ivar, #js_falsy, #js_truthy, #js_truthy_optimize, #line, #lvar_to_js, #mid_to_jsid, #property, #valid_ivar_name?, #valid_name?, #variable
Constructor Details
This class inherits a constructor from Opal::Nodes::Base
Instance Method Details
#compile ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'opal/lib/opal/nodes/args/mlhsarg.rb', line 20 def compile args_sexp = s(:post_args, *children) if @sexp.[:post] # In this case source is an item in the current scope.working_arguments # First we should extract mlhs as a simple argument mlhs_sexp = s(:arg, mlhs_name) mlhs_sexp.[:post] = true scope.with_inline_args([]) do push process(mlhs_sexp) end var_name = args_sexp.[:js_source] = mlhs_name else # Otherwise we already have it in our scope.working_arguments # (of course, in this case scope.working_arguments = 'arguments') var_name = args_sexp.[:js_source] = scope.mlhs_mapping[@sexp] end line "if (#{var_name} == null) {" line " #{var_name} = nil;" line "}" line "#{var_name} = Opal.to_ary(#{var_name});" scope.with_inline_args([]) do scope.in_mlhs do push process(args_sexp) end end end |
#inline_args ⇒ Object
72 73 74 |
# File 'opal/lib/opal/nodes/args/mlhsarg.rb', line 72 def inline_args @inline_args ||= children.take_while { |arg| arg.type != :restarg && arg.type != :optarg } end |
#mlhs_name ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'opal/lib/opal/nodes/args/mlhsarg.rb', line 51 def mlhs_name @mlhs_name ||= begin if @sexp.[:post] result = ["$mlhs_of"] children.each do |child| case child.type when :arg result << child[1] when :mlhs result << 'mlhs' end end result.join("_") else @sexp[1].to_s end end end |