-
Notifications
You must be signed in to change notification settings - Fork 135
/
identifier.t
119 lines (97 loc) · 2.81 KB
/
identifier.t
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use v6;
use Test;
plan 22;
# L<S02/Names/An identifier is composed of an alphabetic character>
{
sub don't($x) { !$x }
ok don't(0), "don't() is a valid sub name (1)";
ok !don't(1), "don't() is a valid sub name (2)";
my $a'b'c = 'foo';
is $a'b'c, 'foo', "\$a'b'c is a valid variable name";
throws-like { EVAL q[sub foo-($x) { ... }] },
X::Syntax::Missing,
'foo- (trailing hyphen) is not an identifier';
throws-like { EVAL q[sub foo'($x) { ... }] },
X::Syntax::Missing,
"foo' (trailing apostrophe) is not an identifier";
throws-like { EVAL q[sub foob'4($x) { ... }] },
X::Syntax::Missing,
"foob'4 is not a valid identifier (not alphabetic after apostrophe)";
throws-like { EVAL q[sub foob-4($x) { ... }] },
X::Syntax::Missing,
"foob-4 is not a valid identifier (not alphabetic after hyphen)";
lives-ok { EVAL q[sub foo4'b($x) { ... }] },
"foo4'b is a valid identifier";
}
{
# This confirms that '-' in a sub name is legal.
my sub foo-bar { 'foo-bar' }
is foo-bar(), 'foo-bar', 'can call foo-bar()';
}
# RT #64656
{
my sub do-check { 'do-check' }
is do-check(), 'do-check', 'can call do-check()';
}
{
# check with a different keyword
sub if'a($x) {$x}
is if'a(5), 5, "if'a is a valid sub name";
}
{
my sub sub-check { 'sub-check' }
is sub-check(), 'sub-check', 'can call sub-check';
}
{
my sub method-check { 'method-check' }
is method-check(), 'method-check', 'can call method-check';
}
{
my sub last-check { 'last-check' }
is last-check(), 'last-check', 'can call last-check';
}
{
my sub next-check { 'next-check' }
is next-check(), 'next-check', 'can call next-check';
}
{
my sub redo-check { 'redo-check' }
is redo-check(), 'redo-check', 'can call redo-check';
}
# RT #65804
{
sub sub($foo) { $foo }
is sub('RT #65804'), 'RT #65804', 'sub named "sub" works';
}
# RT #68358
{
my ($x);
sub my($a) { $a + 17 }
$x = 5;
is my($x), 22, 'call to sub named "my" works';
}
# RT #72898
{
sub loop($a) { $a + 1 }
is loop(5), 6, 'sub named "loop" works';
}
# RT #77218
# Rakudo had troubles with identifiers whos prefix is an alphanumeric infix
# operator; for example 'sub order' would fail because 'order' begins with
# 'or'
{
my $res;
sub order-beer($what) { $res = "a $what please!" };
order-beer('Pils');
is $res, 'a Pils please!',
'can call subroutines whos name begin with an alphabetic infix (or)';
my $tempo;
sub andante() { $tempo = 'walking pace' }
andante;
is $tempo, 'walking pace',
'can call subroutines whos name begin with an alphabetic infix (and)';
# RT #75710
eval-lives-ok q{our sub xyz($abc) { $abc }; xyz(1);},
'can call subroutine which starts with infix x';
}
# vim: ft=perl6