File: HeredocAmbig.rb

package info (click to toggle)
dlr-languages 20090805%2Bgit.e6b28d27%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 51,484 kB
  • ctags: 59,257
  • sloc: cs: 298,829; ruby: 159,643; xml: 19,872; python: 2,820; yacc: 1,960; makefile: 96; sh: 65
file content (48 lines) | stat: -rw-r--r-- 739 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
=begin

IDENTIFIER whitespaceopt1 '<<' whitespaceopt2 (IDENTIFIER | string)
1. not whitespace1 or whitespace2 => left shift
2. IDENTIFIER is local variable => left shift
3. here-doc

see http://seclib.blogspot.com/2005/11/more-on-leftshift-and-heredoc.html

=end

HEREDOC = 1

def function(*a) print "F:"; a end
def both(*a) print "B:"; a end

var = 0
both = 0

# whitespace
print function<<HEREDOC
puts "shift"
HEREDOC

# whitespace
print function << HEREDOC
puts "shift"
HEREDOC

# whitespace
print function<< HEREDOC
puts "shift"
HEREDOC

# "function" not a local
print function <<HEREDOC
puts "heredoc"
HEREDOC

# "var" is a local
print var <<HEREDOC
puts "shift"
HEREDOC

# "both" is a local
print both <<HEREDOC
puts "shift"
HEREDOC