Project

General

Profile

Actions

Bug #7615

closed

assignment to context variable changes the precedence order of function call with followed by ' (' (whitespace-bracket)

Added by snoble (Steven Noble) over 11 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-darwin12.2.0]
[ruby-core:51111]

Description

this is similar to http://bugs.ruby-lang.org/issues/1801 but it wasn't pointed out then that ruby will use two different parsings at different times

note that in this code a and b have the same assignment code but are assigned different values
code:
def foo(x); 99; end
a = foo (44) / 11
foo = 99999999
b = foo (44) / 11
puts "a: #{a} b: #{b}" #output of "a: 99 b: 9"

The output of ruby_parser is:
s(:block,
s(:defn, :foo, s(:args, :x), s(:lit, 99))
s(:lasgn, :a, s(:call, nil, :foo, s(:call, s(:lit, 44), :/, s(:lit, 11)))),
s(:lasgn, :foo, s(:lit, 999999999)),
s(:lasgn, :b, s(:call, s(:call, nil, :foo, s(:lit, 44)), :/, s(:lit, 11)))
)

observed in 1.9.4 and 2.0.0-preview2, but does not occur in 1.8.7

Updated by snoble (Steven Noble) over 11 years ago

is this result not extremely surprising to anyone else? I would expect a and b to be assigned the same value

Updated by ko1 (Koichi Sasada) about 11 years ago

  • Category set to core
  • Assignee set to nobu (Nobuyoshi Nakada)
  • Target version set to 2.0.0

Nobu, could you check it?

Updated by mame (Yusuke Endoh) about 11 years ago

  • Subject changed from assignment to context variable changes the precedence order of function call with followed by ' (' (whitespace-bracket) to assignment to context variable changes the precedence order of function call with followed by ' (' (whitespace-bracket)
  • Status changed from Open to Assigned
  • Target version changed from 2.0.0 to 2.6

Interesting, but I'm reluctant to fix this in 2.0.0 because it looks impractical and incompatible to 1.9.X.

--
Yusuke Endoh

Actions #4

Updated by naruse (Yui NARUSE) over 6 years ago

  • Target version deleted (2.6)

Updated by jeremyevans0 (Jeremy Evans) over 4 years ago

  • Status changed from Assigned to Closed

This was fixed between Ruby 2.4 and 2.5:

$ ruby24 -e '
> def foo(x); 99; end
> a = foo (44) / 11
> foo = 99999999
> b = foo (44) / 11
> puts "a: #{a} b: #{b}"'
a: 99 b: 9

$ ruby25 -e '
> def foo(x); 99; end
> a = foo (44) / 11
> foo = 99999999
> b = foo (44) / 11
> puts "a: #{a} b: #{b}"'
a: 99 b: 99
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0