eval/refused_programs_no_parens.rb

tests/_examples/eval/refused_programs_no_parens.rb in the metorex repository.

# Code the interpreter could read but Ruby's grammar refuses raises a
# SyntaxError from eval, laid out as prism lays it out.
def report source
  eval source
rescue SyntaxError => error
  puts error.message.sub /\A\(eval at [^)]*\)/, "(eval)"
end

report "1 2"
report "first = 1\nsecond = 2 3"
report "def pair(left, left); end"
total = 4
puts eval "total -2"

Output:

(eval):1: syntax error found
> 1 | 1 2
    |   ^ unexpected integer, expecting end-of-input
(eval):2: syntax error found
  1 | first = 1
> 2 | second = 2 3
    |            ^ unexpected integer, expecting end-of-input
(eval):1: syntax error found
> 1 | def pair(left, left); end
    |                ^~~~ duplicated argument name
2