File: accumulator.tlc.src

package info (click to toggle)
pypy 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 107,216 kB
  • sloc: python: 1,201,787; ansic: 62,419; asm: 5,169; cpp: 3,017; sh: 2,534; makefile: 545; xml: 243; lisp: 45; awk: 4
file content (60 lines) | stat: -rw-r--r-- 1,327 bytes parent folder | download | duplicates (9)
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
main:
    PUSHARG
    PUSH 0              # [n, 0]
    LT
    BR_COND negative

positive:

    NEW value,accumulate=add
    PICK 0
    PUSH 0
    SETATTR value
    PUSHARG             # [obj, n]
    PUSH 1
    BR_COND loop

negative:
    NEW value,accumulate=count
    PICK 0
    PUSH 0
    SETATTR value       # [obj]
    PUSH 0              # [obj, 0]
    PUSHARG             # [obj, 0, n]
    SUB                 # [obj, -n]

loop:                   # [obj, n]
    PICK 0              # [obj, n, n]
    BR_COND continue

exit:                   # [obj, n]
    POP
    GETATTR value
    RETURN

continue:               # [obj, n]
    PUSH 1
    SUB                 # [obj, n-1]
    PICK 1              # [obj, n-1, obj]
    PICK 1              # [obj, n-1, obj, n-1]
    SEND accumulate/1   # [obj, n-1]
    PUSH 1
    BR_COND loop

add: # (x)
    PUSHARG             # [self]
    PUSHARG             # [self, self]
    GETATTR value       # [self, self.value]
    PUSHARGN 1          # [self, self.value, x]
    ADD                 # [self, self.value+x]
    SETATTR value       # []
    RETURN

count: # (x)
    PUSHARG             # [self]
    PUSHARG             # [self, self]
    GETATTR value       # [self, self.value]
    PUSH 1
    ADD                 # [self, self.value+1]
    SETATTR value       # []
    RETURN