|
|
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.