home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
mprocs
/
emutils.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
17KB
|
509 lines
############################################################################
#
# File: emutils.icn
#
# Subject: Procedures to support MT-Icon monitors
#
# Author: Ralph E. Griswold
#
# Date: April 16, 1997
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# evname(s) maps the event code to a standard descriptive phrases and vice
# versa.
#
############################################################################
#
# Links: convert, tables
#
############################################################################
#
# Includes: evdefs.icn
#
############################################################################
link convert
link tables
$include "evdefs.icn"
procedure evname(s)
local result
static namemap
initial {
namemap := table()
namemap[E_Aconv] := "conversion attempt"
namemap[E_Argp] := "argument pointer"
namemap[E_Alien] := "alien allocation"
namemap[E_Assign] := "assignment"
# namemap[E_Base] := "base address of storage region"
namemap[E_BlkDeAlc] := "block deallocation"
namemap[E_Bsusp] := "suspension from operation"
namemap[E_Coact] := "co-expression activation"
namemap[E_Cocreate] := "co-expression creation"
namemap[E_Coexpr] := "co-expression allocation"
namemap[E_Cofail] := "co-expression failure"
namemap[E_Collect] := "garbage collection"
# namemap[E_Comment] := "comment"
namemap[E_Coret] := "co-expression return"
namemap[E_Cset] := "cset allocation"
namemap[E_Deref] := "variable dereference"
namemap[E_Ecall] := "call of operation"
namemap[E_Efail] := "failure from expression"
namemap[E_Efp] := "expression frame pointer"
namemap[E_EndCollect] := "end of garbage collection"
namemap[E_Erem] := "removal of a suspended generator"
namemap[E_Eresum] := "resumption of expression"
# namemap[E_Eret] := "return from expression"
namemap[E_Error] := "run-time error"
namemap[E_Esusp] := "suspension from alternation"
namemap[E_Exit] := "program exit"
namemap[E_External] := "external allocation"
namemap[E_Fcall] := "function call"
namemap[E_Fclose] := "file close"
namemap[E_Fconv] := "conversion failure"
namemap[E_Ffail] := "function failure"
namemap[E_File] := "file allocation"
namemap[E_Floc] := "file location"
namemap[E_Fmode] := "file open mode"
namemap[E_Fopen] := "file open"
namemap[E_Fread] := "file read"
namemap[E_Freads] := "file reads"
namemap[E_Free] := "free region"
namemap[E_Frem] := "function suspension removal"
namemap[E_Fresum] := "function resumption"
namemap[E_Fret] := "function return"
namemap[E_Fseek] := "file seek"
namemap[E_Fstring] := "string read or written"
namemap[E_Fsusp] := "function suspension"
namemap[E_Fwhere] := "file location"
namemap[E_Fwrite] := "function write"
namemap["\223"] := "function writes"
namemap[E_Gfp] := "generator frame pointer"
# namemap[E_Highlight] := "allocation highlight"
namemap[E_Ilevel] := "interpreter call level"
namemap[E_Intcall] := "interpreter call"
namemap[E_Integer] := "integer value pseudo-event"
namemap[E_Intret] := "interpreter return"
namemap[E_Ipc] := "interpreter program counter"
namemap[E_Kywdint] := "integer keyword value pseudo-event"
namemap[E_Kywdpos] := "position value pseudo-event"
namemap[E_Kywdsubj] := "subject value pseudo-event"
namemap[E_Lbang] := "list generation"
namemap[E_Lcreate] := "list creation"
namemap[E_Lelem] := "list element allocation"
namemap[E_Lget] := "list get"
namemap[E_Line] := "line change"
namemap[E_List] := "list allocation"
namemap[E_Loc] := "location change"
namemap[E_Lpop] := "list pop"
namemap[E_Lpull] := "list pull"
namemap[E_Lpush] := "list push"
namemap[E_Lput] := "list put"
namemap[E_Lrand] := "list random reference"
# namemap[E_Lref] := "list reference"
namemap[E_Lrgint] := "large integer allocation"
namemap[E_Lsub] := "list subscript"
namemap[E_Lsusp] := "suspension from limitation"
namemap[E_MXevent] := "monitor input event"
namemap[E_Nconv] := "conversion not needed"
namemap[E_NewRegion] := "new storage region"
namemap[E_Null] := "null value value pseudo-event"
namemap[E_Ocall] := "operator call"
namemap[E_Ofail] := "operator failure"
# namemap[E_Offset] := "address offset"
# namemap[E_Op] := "interpreter operation"
namemap[E_Opcode] := "virtual-machine instruction"
namemap[E_Orem] := "operator suspension removal"
namemap[E_Oresum] := "operator resumption"
namemap[E_Oret] := "operator return"
namemap[E_Osusp] := "operator suspension"
# namemap[E_Pause] := "memory monitoring comment"
namemap[E_Pcall] := "procedure call"
namemap[E_Pfail] := "procedure failure"
namemap[E_Pfp] := "procedure frame pointer"
# namemap[E_Pid] := "symbol name"
namemap[E_Prem] := "suspended procedure removal"
namemap[E_Presum] := "procedure resumption"
namemap[E_Pret] := "procedure return"
namemap[E_Proc] := "procedure value pseudo-event"
namemap[E_Psusp] := "procedure suspension"
namemap[E_Rbang] := "record generation"
namemap[E_Rcreate] := "record creation"
namemap[E_Real] := "real allocation"
namemap[E_Record] := "record allocation"
namemap[E_Refresh] := "refresh allocation"
# namemap[E_Region] := "region"
namemap[E_Rrand] := "record random reference"
# namemap[E_Rref] := "record reference"
namemap[E_Rsub] := "record subscript"
namemap[E_Sbang] := "set generation"
namemap[E_Sconv] := "conversion success"
namemap[E_Screate] := "set creation"
namemap[E_Sdelete] := "set deletion"
namemap[E_Selem] := "set element allocation"
namemap[E_Set] := "set allocation"
namemap[E_Sfail] := "scanning failure"
namemap[E_Sinsert] := "set insertion"
# namemap[E_Size] := "region size"
namemap[E_Slots] := "hash header allocation"
namemap[E_Smember] := "set membership"
namemap[E_Snew] := "scanning environment creation"
namemap[E_Spos] := "scanning position"
namemap[E_Srand] := "set random reference"
namemap[E_Srem] := "scanning environment removal"
namemap[E_Sresum] := "scanning resumption"
namemap[E_Ssasgn] := "substring assignment"
namemap[E_Ssusp] := "scanning suspension"
namemap[E_Stack] := "stack depth"
namemap[E_StrDeAlc] := "string deallocation"
namemap[E_String] := "string allocation"
namemap[E_Sval] := "set value"
# namemap[E_Sym] := "symbol table entry"
namemap[E_Table] := "table allocation"
namemap[E_Tbang] := "table generation"
namemap[E_Tconv] := "conversion target"
namemap[E_Tcreate] := "table creation"
namemap[E_Tdelete] := "table deletion"
namemap[E_Telem] := "table element allocation"
namemap[E_TenureBlock] := "tenure a block region"
namemap[E_TenureString] := "tenure a string region"
namemap[E_Tick] := "clock tick"
namemap[E_Tinsert] := "table insertion"
namemap[E_Tkey] := "table key generation"
namemap[E_Tmember] := "table membership"
namemap[E_Trand] := "table random reference"
# namemap[E_Tref] := "table reference"
namemap[E_Tsub] := "table subscript"
# namemap[E_Tval] := "table value"
namemap[E_Tvsubs] := "substring trapped variable allocation"
namemap[E_Tvtbl] := "table-element trapped variable allocation"
# namemap[E_Used] := "space used"
namemap[E_Value] := "value assigned"
namemap[E_Fterm] := "write terminator"
# namemap := twt(namemap)
}
result := namemap[s]
/result := "E_\\" || exbase10(find(s, &cset) - 1, 8)
return result
end
############################################################################
#
# evsym() maps event codes to the symbolic names for the codes and vice
# versa.
#
############################################################################
procedure evsym(s)
local result
static symmap
initial {
symmap := table()
symmap[E_Aconv] := "E_Aconv"
symmap[E_Argp] := "E_Argp"
symmap[E_Alien] := "E_Alien"
symmap[E_Assign] := "E_Assign"
symmap[E_BlkDeAlc] := "E_BlkDeAlc"
symmap[E_Bsusp] := "E_Bsusp"
symmap[E_Coact] := "E_Coact"
symmap[E_Cocreate] := "E_Cocreate"
symmap[E_Coexpr] := "E_Coexpr"
symmap[E_Cofail] := "E_Cofail"
symmap[E_Cofree] := "E_Cofree"
symmap[E_Collect] := "E_Collect"
symmap[E_Coret] := "E_Coret"
symmap[E_Cset] := "E_Cset"
symmap[E_Deref] := "E_Deref"
symmap[E_Ecall] := "E_Ecall"
symmap[E_Efail] := "E_Efail"
symmap[E_Efp] := "E_Efp"
symmap[E_Eresum] := "E_Eresum"
symmap[E_Error] := "E_Error"
symmap[E_Esusp] := "E_Esusp"
symmap[E_Erem] := "E_Erem"
symmap[E_Exit] := "E_Exit"
symmap[E_External] := "E_External"
symmap[E_Fcall] := "E_Fcall"
symmap[E_Fclose] := "E_Fclose"
symmap[E_Fconv] := "E_Fconv"
symmap[E_Ffail] := "E_Ffail"
symmap[E_File] := "E_File"
symmap[E_Floc] := "E_Loc"
symmap[E_Fmode] := "E_Fmode"
symmap[E_Fopen] := "E_Fopen"
symmap[E_Fread] := "E_Fread"
symmap[E_Freads] := "E_Freads"
symmap[E_Free] := "E_Free"
symmap[E_Frem] := "E_Frem"
symmap[E_Fresum] := "E_Fresum"
symmap[E_Fret] := "E_Fret"
symmap[E_Fseek] := "E_Fseek"
symmap[E_Fstring] := "E_Fstring"
symmap[E_Fsusp] := "E_Fsusp"
symmap[E_Fwhere] := "E_Fwhere"
symmap[E_Fwrite] := "E_Fwrite"
symmap[E_Fterm] := "E_Fterm"
symmap[E_Gfp] := "E_Gfp"
symmap[E_Ilevel] := "E_Ilevel"
symmap[E_Intcall] := "E_Intcall"
symmap[E_Integer] := "E_Integer"
symmap[E_Intret] := "E_Intret"
symmap[E_Ipc] := "E_Ipc"
symmap[E_Kywdint] := "E_Kywdint"
symmap[E_Kywdpos] := "E_Kywdpos"
symmap[E_Kywdsubj] := "E_Kywdsubj"
symmap[E_Lbang] := "E_Lbang"
symmap[E_Lcreate] := "E_Lcreate"
symmap[E_Lelem] := "E_Lelem"
symmap[E_Line] := "E_Line"
symmap[E_List] := "E_List"
symmap[E_Loc] := "E_Loc"
symmap[E_Lpop] := "E_Lpop"
symmap[E_Lpull] := "E_Lpull"
symmap[E_Lpush] := "E_Lpush"
symmap[E_Lput] := "E_Lput"
symmap[E_Lrand] := "E_Lrand"
symmap[E_Lref] := "E_Lref"
symmap[E_Lrgint] := "E_Lrgint"
symmap[E_Lsub] := "E_Lsub"
symmap[E_Lsusp] := "E_Lsusp"
symmap[E_Nconv] := "E_Nconv"
symmap[E_NewRegion]:= "E_NewRegion"
symmap[E_Null] := "E_Null"
symmap[E_Ocall] := "E_Ocall"
symmap[E_Ofail] := "E_Ofail"
symmap[E_Op] := "E_Op"
symmap[E_Opcode] := "E_Opcode"
symmap[E_Oresum] := "E_Oresum"
symmap[E_Oret] := "E_Oret"
symmap[E_Osusp] := "E_Osusp"
symmap[E_Orem] := "E_Orem"
symmap[E_Pcall] := "E_Pcall"
symmap[E_Pfail] := "E_Pfail"
symmap[E_Pfp] := "E_Pfp"
symmap[E_Presum] := "E_Presum"
symmap[E_Pret] := "E_Pret"
symmap[E_Proc] := "E_Proc"
symmap[E_Psusp] := "E_Psusp"
symmap[E_Prem] := "E_Prem"
symmap[E_Rbang] := "E_Rbang"
symmap[E_Rcreate] := "E_Rcreate"
symmap[E_Real] := "E_Real"
symmap[E_Record] := "E_Record"
symmap[E_Refresh] := "E_Refresh"
symmap[E_Rrand] := "E_Rrand"
symmap[E_Rref] := "E_Rref"
symmap[E_Rsub] := "E_Rsub"
symmap[E_Sbang] := "E_Sbang"
symmap[E_Sconv] := "E_Sconv"
symmap[E_Screate] := "E_Screate"
symmap[E_Sdelete] := "E_Sdelete"
symmap[E_Selem] := "E_Selem"
symmap[E_Set] := "E_Set"
symmap[E_Sfail] := "E_Sfail"
symmap[E_Sinsert] := "E_Sinsert"
symmap[E_Slots] := "E_Slots"
symmap[E_Smember] := "E_Smember"
symmap[E_Snew] := "E_Snew"
symmap[E_Spos] := "E_Spos"
symmap[E_Srand] := "E_Srand"
symmap[E_Sresum] := "E_Sresum"
symmap[E_Ssasgn] := "E_Ssasgn"
symmap[E_Ssusp] := "E_Ssusp"
symmap[E_Stack] := "E_Stack"
symmap[E_StrDeAlc] := "E_StrDeAlc"
symmap[E_String] := "E_String"
symmap[E_Sval] := "E_Sval"
symmap[E_Srem] := "E_Srem"
symmap[E_Table] := "E_Table"
symmap[E_Tbang] := "E_Tbang"
symmap[E_Tconv] := "E_Tconv"
symmap[E_Tcreate] := "E_Tcreate"
symmap[E_Tdelete] := "E_Tdelete"
symmap[E_Telem] := "E_Telem"
symmap[E_Tick] := "E_Tick"
symmap[E_Tinsert] := "E_Tinsert"
symmap[E_Tkey] := "E_Tkey"
symmap[E_Tmember] := "E_Tmember"
symmap[E_Trand] := "E_Trand"
symmap[E_Tref] := "E_Tref"
symmap[E_Tsub] := "E_Tsub"
symmap[E_Tval] := "E_Tval"
symmap[E_Tvsubs] := "E_Tvsubs"
symmap[E_Tvtbl] := "E_Tvtbl"
symmap[E_Value] := "E_Value"
twt(symmap)
}
result := symmap[s]
/result := "E_\\" || exbase10(find(s, &cset), 8)
return result
end
procedure allocode(s)
static allocmap
initial {
allocmap := table("unknown code")
allocmap[E_Coexpr] := "co-expression"
allocmap[E_Cset] := "cset"
allocmap[E_File] := "file"
allocmap[E_List] := "list"
allocmap[E_Real] := "real"
allocmap[E_Record] := "record"
allocmap[E_Set] := "set"
allocmap[E_String] := "string"
allocmap[E_Table] := "table"
twt(allocmap)
}
return allocmap[s]
end
# Turn off output in SP.
procedure kill_output()
variable("write", EventSource) := -1
variable("writes", EventSource) := -1
return
end
############################################################################
#
# opname() maps a virtual-machine instruction number to a symbolic name.
#
############################################################################
procedure opname(i) #: map virtual-machine code to name
static opmap
initial {
opmap := table("")
opmap[1] := "Asgn"
opmap[2] := "Bang"
opmap[3] := "Cat"
opmap[4] := "Compl"
opmap[5] := "Diff"
opmap[6] := "Div"
opmap[7] := "Eqv"
opmap[8] := "Inter"
opmap[9] := "Lconcat"
opmap[10] := "Lexeq"
opmap[11] := "Lexge"
opmap[12] := "Lexgt"
opmap[13] := "Lexle"
opmap[14] := "Lexlt"
opmap[15] := "Lexne"
opmap[16] := "Minus"
opmap[17] := "Mod"
opmap[18] := "Mult"
opmap[19] := "Neg"
opmap[20] := "Neqv"
opmap[21] := "Nonnull"
opmap[22] := "Null"
opmap[23] := "Number"
opmap[24] := "Numeq"
opmap[25] := "Numge"
opmap[26] := "Numgt"
opmap[27] := "Numle"
opmap[28] := "Numlt"
opmap[29] := "Numne"
opmap[30] := "Plus"
opmap[31] := "Power"
opmap[32] := "Random"
opmap[33] := "Rasgn"
opmap[34] := "Refresh"
opmap[35] := "Rswap"
opmap[36] := "Sect"
opmap[37] := "Size"
opmap[38] := "Subsc"
opmap[39] := "Swap"
opmap[40] := "Tabmat"
opmap[41] := "Toby"
opmap[42] := "Unions"
opmap[43] := "Value"
opmap[44] := "Bscan"
opmap[45] := "Ccase"
opmap[46] := "Chfail"
opmap[47] := "Coact"
opmap[48] := "Cofail"
opmap[49] := "Coret"
opmap[50] := "Create"
opmap[51] := "Cset"
opmap[52] := "Dup"
opmap[53] := "Efail"
opmap[54] := "Eret"
opmap[55] := "Escan"
opmap[56] := "Esusp"
opmap[57] := "Field"
opmap[58] := "Goto"
opmap[59] := "Init"
opmap[60] := "Int"
opmap[61] := "Invoke"
opmap[62] := "Keywd"
opmap[63] := "Limit"
opmap[64] := "Line"
opmap[65] := "Llist"
opmap[66] := "Lsusp"
opmap[67] := "Mark"
opmap[68] := "Pfail"
opmap[69] := "Pnull"
opmap[70] := "Pop"
opmap[71] := "Pret"
opmap[72] := "Psusp"
opmap[73] := "Push1"
opmap[74] := "Pushn1"
opmap[75] := "Real"
opmap[76] := "Sdup"
opmap[77] := "Str"
opmap[78] := "Unmark"
opmap[80] := "Var"
opmap[81] := "Arg"
opmap[82] := "Static"
opmap[83] := "Local"
opmap[84] := "Global"
opmap[85] := "Mark0"
opmap[86] := "Quit"
opmap[87] := "FQuit"
opmap[88] := "Tally"
opmap[89] := "Apply"
opmap[90] := "Acset"
opmap[91] := "Areal"
opmap[92] := "Astr"
opmap[93] := "Aglobal"
opmap[94] := "Astatic"
opmap[95] := "Agoto"
opmap[96] := "Amark"
opmap[98] := "Noop"
opmap[100] := "SymEvents"
opmap[108] := "Colm"
}
return opmap[i]
end