|
|
1.1 ! root 1: (* Copyright 1989 by AT&T Bell Laboratories *) ! 2: structure CPSprint = ! 3: struct ! 4: ! 5: open CPS Prim ! 6: ! 7: fun show say ctable = ! 8: let fun sayv v = ! 9: (case ctable v ! 10: of INTconst i => say(makestring i) ! 11: | REALconst r => say r ! 12: | STRINGconst s => (say "\""; say s; say "\"") ! 13: ) handle Ctable => say (Access.lvarName v) ! 14: fun sayvlist [v] = sayv v ! 15: | sayvlist nil = () ! 16: | sayvlist (v::vl) = (sayv v; say ","; sayvlist vl) ! 17: fun saypath(OFFp 0) = () ! 18: | saypath(OFFp i) = (say "+"; say(makestring i)) ! 19: | saypath(SELp(j,p)) = (say "."; say(makestring j); saypath p) ! 20: fun sayvp (v,path) = (sayv v; saypath path) ! 21: fun saylist f [x] = f x | saylist f nil = () ! 22: | saylist f (x::r) = (f x; say ","; saylist f r) ! 23: fun indent n = ! 24: let fun space 0 = () | space k = (say " "; space(k-1)) ! 25: fun nl() = say "\n" ! 26: val rec f = ! 27: fn RECORD(vl,v,c) => ! 28: (space n; say "{"; saylist sayvp vl; say "} -> "; sayv v; ! 29: nl(); f c) ! 30: | SELECT(i,v,w,c) => ! 31: (space n; sayv v; say "."; say(makestring i); say " -> "; ! 32: sayv w; nl(); f c) ! 33: | OFFSET(i,v,w,c) => ! 34: (space n; sayv v; say "+"; say(makestring i); say " -> "; ! 35: sayv w; nl(); f c) ! 36: | APP(w,vl) => ! 37: (space n; sayv w; say "("; sayvlist vl; say ")\n") ! 38: | FIX(bl,c) => ! 39: let fun g(v,wl,d) = ! 40: (space n; sayv v; say "("; sayvlist wl; ! 41: say ") =\n"; indent (n+3) d) ! 42: in app g bl; f c ! 43: end ! 44: | SWITCH(v,cl) => ! 45: let fun g(i,c::cl) = ! 46: (space(n+1); say(makestring(i:int)); ! 47: say " =>\n"; indent (n+3) c; g(i+1,cl)) ! 48: | g(_,nil) = () ! 49: in space n; say "case "; sayv v; say " of\n"; g(0,cl) ! 50: end ! 51: | PRIMOP(_,nil,nil,nil) => () ! 52: | PRIMOP(i,vl,wl,[c]) => ! 53: (space n; say(inLineName i); say "("; sayvlist vl; ! 54: say ") -> "; sayvlist wl; nl(); f c) ! 55: | PRIMOP(i,vl,nil,[t,f]) => ! 56: (space n; say "if "; say(inLineName i); ! 57: say "("; sayvlist vl; say ") then\n"; ! 58: indent (n+3) t; ! 59: space n; say "else\n"; ! 60: indent (n+3) f ! 61: ) ! 62: | PRIMOP(i,vl,wl,cl) => ! 63: (space n; say "case "; say(inLineName i); ! 64: say "("; sayvlist vl; say ") -> "; ! 65: sayvlist wl; say " of\n"; ! 66: let fun g(i,c::cl) = ! 67: (space(n+1); say(makestring i); say " =>\n"; ! 68: indent (n+3) c; g(i+1,cl)) ! 69: | g(_,nil) = () ! 70: in g(0,cl) ! 71: end) ! 72: in f ! 73: end ! 74: in indent 0 ! 75: end ! 76: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.