@@ -6,7 +6,7 @@ module YARP
6
6
class DesugarVisitorTest < TestCase
7
7
def test_and_write
8
8
assert_desugars ( "(AndNode (ClassVariableReadNode) (ClassVariableWriteNode (CallNode)))" , "@@foo &&= bar" )
9
- assert_desugars ( "(AndNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode)) (ConstantPathWriteNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode)) (CallNode)))" , "Foo::Bar &&= baz ")
9
+ assert_not_desugared ( "Foo::Bar &&= baz" , "Desugaring would execute Foo twice or need temporary variables ")
10
10
assert_desugars ( "(AndNode (ConstantReadNode) (ConstantWriteNode (CallNode)))" , "Foo &&= bar" )
11
11
assert_desugars ( "(AndNode (GlobalVariableReadNode) (GlobalVariableWriteNode (CallNode)))" , "$foo &&= bar" )
12
12
assert_desugars ( "(AndNode (InstanceVariableReadNode) (InstanceVariableWriteNode (CallNode)))" , "@foo &&= bar" )
@@ -16,7 +16,7 @@ def test_and_write
16
16
17
17
def test_or_write
18
18
assert_desugars ( "(IfNode (DefinedNode (ClassVariableReadNode)) (StatementsNode (ClassVariableReadNode)) (ElseNode (StatementsNode (ClassVariableWriteNode (CallNode)))))" , "@@foo ||= bar" )
19
- assert_desugars ( "(IfNode (DefinedNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode))) (StatementsNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode))) (ElseNode (StatementsNode (ConstantPathWriteNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode)) (CallNode)))))" , "Foo::Bar ||= baz ")
19
+ assert_not_desugared ( "Foo::Bar ||= baz" , "Desugaring would execute Foo twice or need temporary variables ")
20
20
assert_desugars ( "(IfNode (DefinedNode (ConstantReadNode)) (StatementsNode (ConstantReadNode)) (ElseNode (StatementsNode (ConstantWriteNode (CallNode)))))" , "Foo ||= bar" )
21
21
assert_desugars ( "(IfNode (DefinedNode (GlobalVariableReadNode)) (StatementsNode (GlobalVariableReadNode)) (ElseNode (StatementsNode (GlobalVariableWriteNode (CallNode)))))" , "$foo ||= bar" )
22
22
assert_desugars ( "(OrNode (InstanceVariableReadNode) (InstanceVariableWriteNode (CallNode)))" , "@foo ||= bar" )
@@ -26,7 +26,7 @@ def test_or_write
26
26
27
27
def test_operator_write
28
28
assert_desugars ( "(ClassVariableWriteNode (CallNode (ClassVariableReadNode) (ArgumentsNode (CallNode))))" , "@@foo += bar" )
29
- assert_desugars ( "(ConstantPathWriteNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode)) (CallNode (ConstantPathNode (ConstantReadNode) (ConstantReadNode)) (ArgumentsNode (CallNode))))" , "Foo::Bar += baz ")
29
+ assert_not_desugared ( "Foo::Bar += baz" , "Desugaring would execute Foo twice or need temporary variables ")
30
30
assert_desugars ( "(ConstantWriteNode (CallNode (ConstantReadNode) (ArgumentsNode (CallNode))))" , "Foo += bar" )
31
31
assert_desugars ( "(GlobalVariableWriteNode (CallNode (GlobalVariableReadNode) (ArgumentsNode (CallNode))))" , "$foo += bar" )
32
32
assert_desugars ( "(InstanceVariableWriteNode (CallNode (InstanceVariableReadNode) (ArgumentsNode (CallNode))))" , "@foo += bar" )
@@ -55,5 +55,10 @@ def assert_desugars(expected, source)
55
55
ast = YARP . parse ( source ) . value . accept ( DesugarVisitor . new )
56
56
assert_equal expected , ast_inspect ( ast . statements . body . last )
57
57
end
58
+
59
+ def assert_not_desugared ( source , reason )
60
+ ast = YARP . parse ( source ) . value
61
+ assert_equal_nodes ( ast , ast . accept ( YARP ::DesugarVisitor . new ) )
62
+ end
58
63
end
59
64
end
0 commit comments