Class: Opal::Nodes::JsCallNode
- Defined in:
- opal/lib/opal/nodes/call_special.rb
Overview
recv.JS.prop recv.JS[1] recv.JS.meth(arg1, arg2)
Constant Summary
Constants inherited from CallNode
CallNode::OPERATORS, CallNode::SPECIALS
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
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from CallNode
add_special, #attr_assignment?, #compile, #compile_assignment, #compile_default!, #compile_default?, #compile_irb_var, #handle_special, #recv_sexp, #using_irb?
Methods inherited from Base
#add_gvar, #add_ivar, #add_local, #add_temp, children, #children, #compile, #compile_to_fragments, #error, #expr, #expr?, #expr_or_nil, #fragment, handle, handlers, #helper, #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
#default_compile ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'opal/lib/opal/nodes/call_special.rb', line 53 def default_compile if meth == :[] push recv(recv_sexp), '[', expr(arglist), ']' else mid = ".#{meth}" splat = arglist[1..-1].any? { |a| a.first == :splat } if Sexp === arglist.last and arglist.last.type == :block_pass block = arglist.pop elsif iter block = iter end blktmp = scope.new_temp if block tmprecv = scope.new_temp if splat # must do this after assigning temp variables block = expr(block) if block recv_code = recv(recv_sexp) call_recv = s(:js_tmp, blktmp || recv_code) if blktmp arglist.push call_recv end args = expr(arglist) if tmprecv push "(#{tmprecv} = ", recv_code, ")#{mid}" else push recv_code, mid end if blktmp unshift "(#{blktmp} = ", block, ", " push ")" end if splat push ".apply(", tmprecv, ", ", args, ")" else push "(", args, ")" end scope.queue_temp blktmp if blktmp end end |
#record_method? ⇒ Boolean
49 50 51 |
# File 'opal/lib/opal/nodes/call_special.rb', line 49 def record_method? false end |