-
Notifications
You must be signed in to change notification settings - Fork 5
/
op.pir
118 lines (96 loc) · 1.76 KB
/
op.pir
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
## $Id$
=head1 NAME
src/builtins/op.pir - Cardinal ops
=head1 Functions
=over 4
=cut
.namespace []
.sub 'infix:+' :multi(_,_)
.param num a
.param num b
$P0 = new 'CardinalInteger'
$N0 = add a, b
$P0 = $N0
.return ($P0)
.end
.sub 'infix:-' :multi(_,_)
.param num a
.param num b
$P0 = new 'CardinalInteger'
$N0 = sub a, b
$P0 = $N0
.return ($P0)
.end
.sub 'infix:*' :multi(_,_)
.param num a
.param num b
$P0 = new 'CardinalInteger'
$N0 = mul a, b
$P0 = $N0
.return ($P0)
.end
.sub 'infix:/' :multi(_,_)
.param num a
.param num b
$P0 = new 'CardinalInteger'
$N0 = div a, b
$P0 = $N0
.return ($P0)
.end
.sub 'infix:+' :multi(CardinalString,_)
.param pmc a
.param pmc b
$P0 = new 'CardinalString'
$P0 = concat a, b
.return ($P0)
.end
.sub 'infix:+' :multi(CardinalArray,CardinalArray)
.param pmc a
.param pmc b
$P0 = new 'CardinalArray'
$P0 = 'list'(a :flat, b :flat)
.return ($P0)
.end
.sub 'infix:-=' :multi(_,_)
.param pmc a
.param pmc b
a -= b
.return (a)
.end
.sub 'infix:+=' :multi(_,_)
.param pmc a
.param pmc b
a += b
.return (a)
.end
.sub 'infix:+=' :multi(CardinalString,_)
.param pmc a
.param pmc b
$P0 = 'infix:+'(a,b)
assign a, $P0
.return (a)
.end
.sub 'infix:&' :multi(_,_)
.param int a
.param int b
$I0 = band a, b
.return ($I0)
.end
.sub 'infix:*' :multi(CardinalString,CardinalInteger)
.param pmc a
.param pmc b
$P0 = new 'CardinalString'
$P0 = repeat a, b
.return ($P0)
.end
.sub 'circumfix:( )'
.param pmc a
.return (a)
.end
=back
=cut
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: