Sha256: e32839fb49801e784ff3d5219e708ab8442cc50cb5004b564d33f0d23c0aed03
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
module Ruby2JS class Converter # (return # (int 1)) handle :return do |value=nil| if value "return #{ parse value }" else "return" end end EXPRESSIONS = [ :array, :float, :hash, :int, :lvar, :nil, :send, :attr, :str, :sym, :dstr, :dsym, :cvar, :ivar, :zsuper, :super, :or, :and, :block, :const ] handle :autoreturn do |*statements| return if statements == [nil] block = statements.dup while block.length == 1 and block.first.type == :begin block = block.first.children.dup end if EXPRESSIONS.include? block.last.type block.push s(:return, block.pop) elsif block.last.type == :if node = block.pop if node.children[1] and node.children[2] and EXPRESSIONS.include? node.children[1].type and EXPRESSIONS.include? node.children[2].type node = s(:return, node) else conditions = [[ node.children.first, node.children[1] ? s(:autoreturn, node.children[1]) : nil ]] while node.children[2] and node.children[2].type == :if node = node.children[2] conditions.unshift [ node.children.first, node.children[1] ? s(:autoreturn, node.children[1]) : nil ] end node = node.children[2] ? s(:autoreturn, node.children[2]) : nil conditions.each do |condition, statements| node = s(:if, condition, statements, node) end end block.push node end if block.length == 1 parse block.first, @state else parse s(:begin, *block), @state end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ruby2js-1.15.1 | lib/ruby2js/converter/return.rb |
ruby2js-1.15.0 | lib/ruby2js/converter/return.rb |