UNPKG

796 Btext/coffeescriptView Raw
1
2
3Eval_mod = ->
4 push(cadr(p1))
5 Eval()
6 push(caddr(p1))
7 Eval()
8 mod()
9
10mod = ->
11 n = 0
12
13 save()
14
15 p2 = pop()
16 p1 = pop()
17
18 if (iszero(p2))
19 stop("mod function: divide by zero")
20
21 if (!isnum(p1) || !isnum(p2))
22 push_symbol(MOD)
23 push(p1)
24 push(p2)
25 list(3)
26 restore()
27 return
28
29 if (isdouble(p1))
30 push(p1)
31 n = pop_integer()
32 if (isNaN(n))
33 stop("mod function: cannot convert float value to integer")
34 push_integer(n)
35 p1 = pop()
36
37 if (isdouble(p2))
38 push(p2)
39 n = pop_integer()
40 if (isNaN(n))
41 stop("mod function: cannot convert float value to integer")
42 push_integer(n)
43 p2 = pop()
44
45 if (!isinteger(p1) || !isinteger(p2))
46 stop("mod function: integer arguments expected")
47
48 p3 = new U()
49 p3.k = NUM
50 p3.q.a = mmod(p1.q.a, p2.q.a)
51 p3.q.b = mint(1)
52 push(p3)
53
54 restore()
55