-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathLinguaFunctions.rakumod
More file actions
50 lines (38 loc) · 1.4 KB
/
LinguaFunctions.rakumod
File metadata and controls
50 lines (38 loc) · 1.4 KB
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
use LinguaAST;
class LinguaFunctions {
# print and say
multi method call-function(Str $function-name where 'say' | 'print', %var, $node) {
say $node.^name;
print self.gist(%var, $node);
say '' if $function-name eq 'say';
}
multi method gist(%var, AST::Variable $value) {
return %var{$value.variable-name};
}
multi method gist(%var, AST::Variable $value where %var{$value.variable-name} ~~ Array) {
return %var{$value.variable-name}.join(', '); #'
}
multi method gist(%var, AST::ArrayItem $item where %var{$item.variable-name} ~~ Str) {
return %var{$item.variable-name}.substr($item.index.value, 1);
}
multi method gist(%var, AST::ArrayItem $item where %var{$item.variable-name} ~~ Array) {
return %var{$item.variable-name}[$item.index.value];
}
multi method gist(%var, AST::Variable $value where %var{$value.variable-name} ~~ Hash) {
my $data = %var{$value.variable-name};
my @str;
for $data.keys.sort -> $key {
@str.push("$key: $data{$key}");
}
return @str.join(', '); #'
}
multi method gist(%var, AST::HashItem $item) {
return %var{$item.variable-name}{$item.key.value};
}
multi method gist(%var, ASTNode $value) {
return $value.value;
}
# len
multi method call-function('len', %var, ASTNode $node) {
}
}