-
Notifications
You must be signed in to change notification settings - Fork 2
/
NQPSetting.pm
110 lines (94 loc) · 2.02 KB
/
NQPSetting.pm
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
knowhow NQPInt is repr('P6int') {
method new() {
nqp::instance_of(self.WHAT);
}
method Bool() {
nqp::logical_not_int(nqp::equal_ints(self, 0, NQPInt), NQPInt)
}
method Int() {
self
}
method Num() {
nqp::coerce_int_to_num(self, NQPNum)
}
method Str() {
nqp::coerce_int_to_str(self, NQPStr)
}
}
knowhow NQPStr is repr('P6str') {
method new() {
nqp::instance_of(self.WHAT);
}
method Bool() {
nqp::logical_not_int(nqp::equal_strs(self, "", NQPInt), NQPInt)
}
method Str() {
self
}
}
knowhow NQPNum is repr('P6num') {
method new() {
nqp::instance_of(self.WHAT);
}
method Bool() {
nqp::logical_not_int(nqp::equal_nums(self, 0.0, NQPInt), NQPInt)
}
method Int() {
nqp::coerce_num_to_int(self, NQPStr)
}
method Num() {
self
}
method Str() {
nqp::coerce_num_to_str(self, NQPStr)
}
}
## XXX All of these should become multi when we can do that.
sub &infix:<==>($x, $y) {
nqp::equal_nums($x.Num, $y.Num, NQPInt)
}
sub &infix:<!=>($x, $y) {
!nqp::equal_nums($x.Num, $y.Num, NQPInt)
}
sub &infix:<eq>($x, $y) {
nqp::equal_strs($x.Str, $y.Str, NQPInt)
}
sub &infix:<ne>($x, $y) {
!nqp::equal_strs($x.Str, $y.Str, NQPInt)
}
sub &prefix:<!>($x) {
nqp::logical_not_int($x.Bool.Int, NQPInt)
}
sub &prefix:<?>($x) {
$x.Bool
}
sub &infix:<+>($x, $y) {
nqp::add_int($x.Int, $y.Int, NQPInt);
}
sub &infix:<->($x, $y) {
nqp::sub_int($x.Int, $y.Int, NQPInt);
}
sub &infix:<*>($x, $y) {
nqp::mul_int($x.Int, $y.Int, NQPInt);
}
sub &infix:</>($x, $y) {
nqp::div_int($x.Int, $y.Int, NQPInt);
}
sub &infix:<%>($x, $y) {
nqp::mod_int($x.Int, $y.Int, NQPInt);
}
sub &infix:<~>($x, $y) {
nqp::concat($x.Str, $y.Str, NQPStr);
}
# For tests.
my $count := NQPInt.new();
sub plan($n) {
print("1..");
say($n);
}
sub ok($check) {
$count := $count + 1;
unless $check { print("not ") }
print("ok ");
say($count);
}