[ruby-core:93591] [Ruby master Bug#11016] method calls without parenthesis makes SyntaxError when DVAR exists
From:
merch-redmine@...
Date:
2019-07-07 16:20:38 UTC
List:
ruby-core #93591
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>