class Opal::Rewriters::DotJsSyntax
def on_send(node)
def on_send(node) recv, meth, *args = *node if recv && recv.type == :send recv_of_recv, meth_of_recv, _ = *recv if meth_of_recv == :JS case meth when :[] if args.size != 1 error '.JS[:property] syntax supports only one argument' end property = args.first node = to_js_attr_call(recv_of_recv, property) when :[]= if args.size != 2 error '.JS[:property]= syntax supports only two arguments' end property, value = *args node = to_js_attr_assign_call(recv_of_recv, property, value) else node = to_native_js_call(recv_of_recv, meth, args) end super(node) else super end else super end end
def to_js_attr_assign_call(recv, property, value)
-
value
(AST::Node
) -- value of assignment -
property
(AST::Node
) -- property passed to brackets -
recv
(AST::Node
) -- receiver of .JS[]= method
def to_js_attr_assign_call(recv, property, value) s(:jsattrasgn, recv, property, value) end
def to_js_attr_call(recv, property)
-
property
(AST::Node
) -- argument passed to .JS[] method -
recv
(AST::Node
) -- receiver of .JS[] method
def to_js_attr_call(recv, property) s(:jsattr, recv, property) end
def to_native_js_call(recv, meth, args)
-
args
(Array
) -- list of the arguments passed to JS method -
meth
(Symbol
) -- name of the JS method -
recv
(AST::Node
) -- receiver of .JS. method
def to_native_js_call(recv, meth, args) s(:jscall, recv, meth, *args) end