Sha256: 7246cc299fca0d0406331134c7c5a4d2710c9fdc4ff985da59e6e1e9ad45c64f
Contents?: true
Size: 1.41 KB
Versions: 21
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true require 'opal/rewriters/base' module Opal module Rewriters class ExplicitWriterReturn < Base def initialize @in_masgn = false end 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)), ) 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 # 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. def on_masgn(node) @in_masgn = true result = super @in_masgn = false result end end end end
Version data entries
21 entries across 21 versions & 1 rubygems