From: merch-redmine@... Date: 2019-07-07T16:20:38+00:00 Subject: [ruby-core:93591] [Ruby master Bug#11016] method calls without parenthesis makes SyntaxError when DVAR exists Issue #11016 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed The `ng_assoc19.rb` and `ng_assoc19_strvalue.rb` examples are no longer syntax errors, so I think this can be closed. ---------------------------------------- Bug #11016: method calls without parenthesis makes SyntaxError when DVAR exists https://bugs.ruby-lang.org/issues/11016#change-79180 * Author: sorah (Sorah Fukumori) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- It seems like the following situation makes SyntaxError 1. Try to call method which same name of local variable exists, without parenthesis 2. Argument part contains colon (':') All the following test cases contain empty method definition, but it's not required (if you omit it, the expected result is NoMethodError instead of SyntaxError) ### ng_assoc.rb ``` def var(h); end var = 1 var :a => :b ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ng_assoc.rb:3: warning: `:' after local variable or literal is interpreted as binary operator ng_assoc.rb:3: warning: even though it seems like symbol literal ng_assoc.rb:3: warning: possibly useless use of a variable in void context ng_assoc.rb:3: syntax error, unexpected ':', expecting end-of-input var :a => :b ^ ``` ### ng_assoc19.rb ``` def var(h); end var = 1 var a: :b ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ng_assoc19.rb:3: syntax error, unexpected ':', expecting end-of-input var a: :b ^ ``` ### ng_assoc19_strvalue.rb ``` def var(h); end var = 1 var a: 2 ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ng_assoc19_strvalue.rb:4: syntax error, unexpected ':', expecting end-of-input var a: 2 ^ ``` ### ng_sym.rb ``` def var(h); end var = 1 var :sym ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ng_sym.rb:3: warning: `:' after local variable or literal is interpreted as binary operator ng_sym.rb:3: warning: even though it seems like symbol literal ng_sym.rb:3: warning: possibly useless use of a variable in void context ng_sym.rb:3: syntax error, unexpected ':', expecting end-of-input var :sym ^ ``` ### ok_assoc19_paren.rb ``` def var(h); end var = 1 var(a: :b) ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ``` ### ok_assoc_paren.rb ``` def var(h); end var = 1 var(:a => :b) ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ``` ### ok_different_name.rb ``` def var(h); end var2 = 1 var :a => :b ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ok_different_name.rb:2: warning: assigned but unused variable - var2 ``` ### ok_string.rb ``` def var(h); end var = 1 var "str" ``` ``` ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14] ``` ---- This may be another issue, but I also surprised to the following result. ``` module M class A end end m = M p m ::A #=> M::A p M ::A #=> uninitialized constant A (NameError) ``` -- https://bugs.ruby-lang.org/ Unsubscribe: