|
|
1.1 root 1: (* Copyright 1989 by AT&T Bell Laboratories *)
2: structure CPSsize =
3: struct
4: local open CPS
5:
6: fun cells_list (l : 'a list) = 2 * length l
7: fun descriptors_list (l : 'a list) = length l
8:
9: val rec cells =
10: fn RECORD(vl,w,ce) => 2 + 3 + cells_list vl + cells ce
11: | SELECT(i,v,w,ce) => 2 + 4 + cells ce
12: | OFFSET(i,v,w,ce) => 2 + 4 + cells ce
13: | APP(v,vl) => 2 + 2 + cells_list vl
14: | FIX(l,ce) => 2 + 2 + cells_list l + cells ce
15: + fold (fn((f,vl,e),b) => 3 + cells_list vl + cells e + b) l 0
16: | SWITCH(v,l) => 2 + 2 + cells_list l + fold (fn(a,b) => cells a + b) l 0
17: | PRIMOP(_,vl,wl,ce) =>
18: 2 + 4 + cells_list vl + cells_list wl + cells_list ce
19: + fold (fn(a,b) => cells a + b) ce 0
20:
21: val rec descriptors =
22: fn RECORD(vl,w,ce) => 2 + descriptors_list vl + descriptors ce
23: | SELECT(i,v,w,ce) => 2 + descriptors ce
24: | OFFSET(i,v,w,ce) => 2 + descriptors ce
25: | APP(v,vl) => 2 + descriptors_list vl
26: | FIX(l,ce) => 2 + descriptors_list l + descriptors ce
27: + fold (fn((f,vl,e),b) => 1 + descriptors_list vl
28: + descriptors e + b) l 0
29: | SWITCH(v,l) => 2 + descriptors_list l
30: + fold (fn(a,b) => descriptors a + b) l 0
31: | PRIMOP(_,vl,wl,ce) =>
32: 2 + descriptors_list vl + descriptors_list wl + descriptors_list ce
33: + fold (fn(a,b) => descriptors a + b) ce 0
34: in
35: fun printsize ce =
36: let val c = cells ce
37: val d = descriptors ce
38: in print "CPSsize: #cells="; print c; print "; #descriptors="; print d;
39: print "\n"; ()
40: end
41: end
42:
43: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.