Project

General

Profile

Actions

Bug #11016

closed

method calls without parenthesis makes SyntaxError when DVAR exists

Added by sorah (Sorah Fukumori) almost 9 years ago. Updated over 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-03-30 trunk 50121) [x86_64-darwin14]
[ruby-core:<unknown>]

Description

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)
Actions

Also available in: Atom PDF

Like0
Like0Like0