Class: Opal::Rewriters::ExplicitWriterReturn
- Defined in:
- opal/lib/opal/rewriters/explicit_writer_return.rb
Constant Summary collapse
- TMP_NAME =
- '$writer'
- GET_ARGS_NODE =
- s(:lvar, TMP_NAME) 
- RETURN_ARGS_NODE =
- s(:jsattr, GET_ARGS_NODE, s(:send, s(:jsattr, GET_ARGS_NODE, s(:str, 'length')), :-, s(:int, 1)), ) 
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- 
  
    
      #initialize  ⇒ ExplicitWriterReturn 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of ExplicitWriterReturn. 
- 
  
    
      #on_masgn(node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Multiple assignment is handled by Opal::Nodes::MassAssignNode. 
- #on_send(node) ⇒ Object
Methods inherited from Base
#append_to_body, #begin_with_stmts, #error, #prepend_to_body, #process, #s, s, #stmts_of
Constructor Details
#initialize ⇒ ExplicitWriterReturn
Returns a new instance of ExplicitWriterReturn.
| 8 9 10 | # File 'opal/lib/opal/rewriters/explicit_writer_return.rb', line 8 def initialize @in_masgn = false end | 
Instance Method Details
#on_masgn(node) ⇒ Object
Multiple assignment is handled by Opal::Nodes::MassAssignNode
For example, "self.a, self.b = 1, 2" parses to: s(:masgn, s(:mlhs, s(:send, s(:self), :a=), s(:send, s(:self), :b=)), s(:array, s(:int, 1), s(:int, 2)))
And this AST rewriter skips this node.
| 51 52 53 54 55 56 | # File 'opal/lib/opal/rewriters/explicit_writer_return.rb', line 51 def on_masgn(node) @in_masgn = true result = super @in_masgn = false result end | 
#on_send(node) ⇒ Object
| 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | # File 'opal/lib/opal/rewriters/explicit_writer_return.rb', line 19 def on_send(node) return super if @in_masgn recv, method_name, *args = *node if method_name.to_s =~ /#{REGEXP_START}\w+=#{REGEXP_END}/ || method_name.to_s == '[]=' set_args_node = s(:lvasgn, TMP_NAME, s(:array, *process_all(args))) s(:begin, set_args_node, node.updated(nil, [recv, method_name, s(:splat, GET_ARGS_NODE)]), RETURN_ARGS_NODE, ) else super end end |