Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/typeprof/core/ast/misc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def install0(genv)
if @rights
@rights.each {|lhs| lhs.install(genv) }
@rights.each {|lhs| lhs.rhs.ret || raise(lhs.rhs.inspect) }
rights = @rights.map {|rhs| rhs.ret }
rights = @rights.map {|lhs| lhs.rhs.ret }
end

box = @changes.add_masgn_box(genv, value, lefts, rest_elem, rights)
Expand Down
30 changes: 30 additions & 0 deletions scenario/variable/masgn_nested.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,41 @@ def test_nested_with_rest_and_rights
[a, b, rest, c]
end

def test_rest_then_nested
*a, (b, c) = [1, 2, [3, 4]]
[a, b, c]
end

def test_rest_then_nested_and_right
*a, (b, c), d = [1, ["str", :sym], 2.0]
[a, b, c, d]
end

def test_rest_then_deeper_nesting
*a, (b, (c, d)) = [1, [2, [3, 4]]]
[a, b, c, d]
end

def test_rest_then_nested_with_rest
*a, (b, *rest) = [1, [2, 3, 4]]
[a, b, rest]
end

def test_rest_then_nested_generic
*a, (b, c) = [[1, 2], [3, 4]].map {|x| x }
[a, b, c]
end

## assert
class Object
def test_nested_destructuring: -> [Integer, Integer, Integer]
def test_nested_with_strings: -> [String, String, String]
def test_deeper_nesting: -> [Integer, Integer, Integer, Integer]
def test_nested_with_rest: -> [Integer, Integer, Array[Integer]]
def test_nested_with_rest_and_rights: -> [Integer, Integer, Array[Integer], Integer]
def test_rest_then_nested: -> [Array[Integer], Integer, Integer]
def test_rest_then_nested_and_right: -> [Array[Integer], String, :sym, Float]
def test_rest_then_deeper_nesting: -> [Array[Integer], Integer, Integer, Integer]
def test_rest_then_nested_with_rest: -> [Array[Integer], Integer, Array[Integer]]
def test_rest_then_nested_generic: -> [Array[[Integer, Integer]], Integer, Integer]
end
33 changes: 33 additions & 0 deletions scenario/variable/masgn_rest_then_writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## update: test.rb
class C
def []=(i, v)
@v = v
end

def x=(v)
@x = v
end
end

def check(c)
*a, c[0], c.x = 1, 2, "str", :sym
a
end

def check_nested(c)
*a, (c[0], c.x) = 1, 2, ["str", :sym]
a
end

check(C.new)
check_nested(C.new)

## assert
class C
def []=: (Integer, String) -> String
def x=: (:sym) -> :sym
end
class Object
def check: (C) -> Array[Integer]
def check_nested: (C) -> Array[Integer]
end
Loading