]> gitweb.factorcode.org Git - factor.git/blob - basis/debugger/windows/windows.factor
use radix literals
[factor.git] / basis / debugger / windows / windows.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs debugger io kernel literals math.parser
4 namespaces prettyprint sequences system windows.kernel32
5 windows.ole32 windows.errors math ;
6 IN: debugger.windows
7
8 CONSTANT: seh-names
9     H{
10         { $ STATUS_GUARD_PAGE_VIOLATION       "STATUS_GUARD_PAGE_VIOLATION"     }
11         { $ STATUS_DATATYPE_MISALIGNMENT      "STATUS_DATATYPE_MISALIGNMENT"    }
12         { $ STATUS_BREAKPOINT                 "STATUS_BREAKPOINT"               }
13         { $ STATUS_SINGLE_STEP                "STATUS_SINGLE_STEP"              }
14         { $ STATUS_ACCESS_VIOLATION           "STATUS_ACCESS_VIOLATION"         }
15         { $ STATUS_IN_PAGE_ERROR              "STATUS_IN_PAGE_ERROR"            }
16         { $ STATUS_INVALID_HANDLE             "STATUS_INVALID_HANDLE"           }
17         { $ STATUS_NO_MEMORY                  "STATUS_NO_MEMORY"                }
18         { $ STATUS_ILLEGAL_INSTRUCTION        "STATUS_ILLEGAL_INSTRUCTION"      }
19         { $ STATUS_NONCONTINUABLE_EXCEPTION   "STATUS_NONCONTINUABLE_EXCEPTION" }
20         { $ STATUS_INVALID_DISPOSITION        "STATUS_INVALID_DISPOSITION"      }
21         { $ STATUS_ARRAY_BOUNDS_EXCEEDED      "STATUS_ARRAY_BOUNDS_EXCEEDED"    }
22         { $ STATUS_FLOAT_DENORMAL_OPERAND     "STATUS_FLOAT_DENORMAL_OPERAND"   }
23         { $ STATUS_FLOAT_DIVIDE_BY_ZERO       "STATUS_FLOAT_DIVIDE_BY_ZERO"     }
24         { $ STATUS_FLOAT_INEXACT_RESULT       "STATUS_FLOAT_INEXACT_RESULT"     }
25         { $ STATUS_FLOAT_INVALID_OPERATION    "STATUS_FLOAT_INVALID_OPERATION"  }
26         { $ STATUS_FLOAT_OVERFLOW             "STATUS_FLOAT_OVERFLOW"           }
27         { $ STATUS_FLOAT_STACK_CHECK          "STATUS_FLOAT_STACK_CHECK"        }
28         { $ STATUS_FLOAT_UNDERFLOW            "STATUS_FLOAT_UNDERFLOW"          }
29         { $ STATUS_INTEGER_DIVIDE_BY_ZERO     "STATUS_INTEGER_DIVIDE_BY_ZERO"   }
30         { $ STATUS_INTEGER_OVERFLOW           "STATUS_INTEGER_OVERFLOW"         }
31         { $ STATUS_PRIVILEGED_INSTRUCTION     "STATUS_PRIVILEGED_INSTRUCTION"   }
32         { $ STATUS_STACK_OVERFLOW             "STATUS_STACK_OVERFLOW"           }
33         { $ STATUS_CONTROL_C_EXIT             "STATUS_CONTROL_C_EXIT"           }
34         { $ STATUS_FLOAT_MULTIPLE_FAULTS      "STATUS_FLOAT_MULTIPLE_FAULTS"    }
35         { $ STATUS_FLOAT_MULTIPLE_TRAPS       "STATUS_FLOAT_MULTIPLE_TRAPS"     }
36         { 0xe06d7363 "Visual C++ exception" }
37     }
38
39 : seh-name. ( n -- )
40     seh-names at [ " (" ")" surround write ] when* ;
41
42 M: windows signal-error.
43     "Windows exception 0x" write
44     third [ >hex write ] [ seh-name. ] bi nl ;
45
46 M: ole32-error error.
47     "COM error 0x" write
48     dup code>> 0xffff,ffff bitand >hex write ": " write
49     message>> write ;
50
51 M: windows-error error.
52     "Win32 error 0x" write
53     dup n>> 0xffff,ffff bitand >hex write ": " write
54     string>> write ;
55