X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fdbxrc;h=bae532ee3851a810697e9b62648a128c353f8c4d;hb=8afb64af7147481903a263cd94cd2f42ec9a8b67;hp=bb2b78b8fd59f274353e86aeec86b2285b072ccf;hpb=4c0c5d1d054e60fb9ffa3dd9ec1c1d7bb8eedef0;p=chise%2Fxemacs-chise.git- diff --git a/src/dbxrc b/src/dbxrc index bb2b78b..bae532e 100644 --- a/src/dbxrc +++ b/src/dbxrc @@ -58,10 +58,21 @@ function ldp { # A bug in dbx prevents string variables from having values beginning with `-'!! function XEmacsInit { - eval $(echo $(whatis -t `alloc.c`dbg_constants) | \ - perl -e 'print "@{[map {s/=(-\d+)/sprintf(q[=0x%x],$1)/oge; /\w+=[0-9a-fx]+/og} <>]}\n"') + function ToInt { eval "$1=\$[(int) $1]"; } + ToInt dbg_USE_UNION_TYPE + ToInt Lisp_Type_Int + ToInt Lisp_Type_Char + ToInt Lisp_Type_Cons + ToInt Lisp_Type_String + ToInt Lisp_Type_Vector + ToInt Lisp_Type_Symbol + ToInt Lisp_Type_Record + ToInt dbg_valbits + ToInt dbg_gctypebits + function ToLong { eval "$1=\$[(unsigned long) $1]"; } + ToLong dbg_valmask + ToLong dbg_typemask xemacs_initted=yes - #printvar dbg_valbits dbg_valmask } function printvar { @@ -87,47 +98,28 @@ function decode_object { else obj="$[(unsigned long)($1)]"; fi - if test $dbg_USE_MINIMAL_TAGBITS = 1; then - if test $[(int)($obj & 1)] = 1; then - # It's an int - val=$[(long)(((unsigned long long)$obj) >> 1)] - type=$dbg_Lisp_Type_Int - else - type=$[(int)(((void*)$obj) & $dbg_typemask)] - if test $type = $dbg_Lisp_Type_Char; then - val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] - else - # It's a record pointer - val=$[(void*)$obj] - if test "$val" = "(nil)"; then type=null_pointer; fi - fi - fi + if test $[(int)($obj & 1)] = 1; then + # It's an int + val=$[(long)(((unsigned long long)$obj) >> 1)] + type=$Lisp_Type_Int else - # not dbg_USE_MINIMAL_TAGBITS - type=$[(int)(((unsigned long long)($obj & $dbg_typemask)) >> ($dbg_valbits + 1))] - if test "$[$type == Lisp_Type_Int]" = 1; then - val=$[(int)($obj & $dbg_valmask)] - elif test "$[$type == Lisp_Type_Char]" = 1; then - val=$[(int)($obj & $dbg_valmask)] + type=$[(int)(((void*)$obj) & $dbg_typemask)] + if test $type = $Lisp_Type_Char; then + val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] else - val=$[(void*)($obj & $dbg_valmask)] + # It's a record pointer + val=$[(void*)$obj] if test "$val" = "(nil)"; then type=null_pointer; fi fi - #val=$[(void*)($obj & $dbg_valmask)] - #printvar val type obj fi - if test $type = $dbg_Lisp_Type_Record; then + if test $type = $Lisp_Type_Record; then typeset lheader="((struct lrecord_header *) $val)" - if test $dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1; then - imp=$[(void*)(lrecord_implementations_table[$lheader->type])] - else - imp=$[(void*)($lheader->implementation)] - fi + imp=$[(void*)(lrecord_implementations_table[$lheader->type])] else imp="0xdeadbeef" fi - #printvar obj val type imp + # printvar obj val type imp } function xint { @@ -137,18 +129,28 @@ function xint { function xtype { decode_object "$*" - if test $type = $dbg_Lisp_Type_Int; then echo "int" - elif test $type = $dbg_Lisp_Type_Char; then echo "char" - elif test $type = $dbg_Lisp_Type_Symbol; then echo "symbol" - elif test $type = $dbg_Lisp_Type_String; then echo "string" - elif test $type = $dbg_Lisp_Type_Vector; then echo "vector" - elif test $type = $dbg_Lisp_Type_Cons; then echo "cons" - elif test $type = null_pointer; then echo "$type" + if test $type = $Lisp_Type_Int; then echo "int" + elif test $type = $Lisp_Type_Char; then echo "char" + elif test $type = $Lisp_Type_Symbol; then echo "symbol" + elif test $type = $Lisp_Type_String; then echo "string" + elif test $type = $Lisp_Type_Vector; then echo "vector" + elif test $type = $Lisp_Type_Cons; then echo "cons" + elif test $type = null_pointer; then echo "null_pointer" else echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]" fi } +function lisp-shadows { + run -batch -vanilla -f list-load-path-shadows +} + +function environment-to-run-temacs { + unset EMACSLOADPATH + export EMACSBOOTSTRAPLOADPATH=../lisp/:.. + export EMACSBOOTSTRAPMODULEPATH=../modules/:.. +} + document run-temacs << 'end' Usage: run-temacs Run temacs interactively, like xemacs. @@ -157,8 +159,7 @@ or when temacs builds successfully, but xemacs does not. end function run-temacs { - unset EMACSLOADPATH - export EMACSBOOTSTRAPLOADPATH=../lisp/:.. + environment-to-run-temacs run -batch -l ../lisp/loadup.el run-temacs -q } @@ -170,15 +171,13 @@ Use this when temacs builds successfully, but xemacs does not. end function update-elc { - unset EMACSLOADPATH - export EMACSBOOTSTRAPLOADPATH=../lisp/:.. + environment-to-run-temacs run -batch -l ../lisp/update-elc.el } function dump-temacs { - unset EMACSLOADPATH - export EMACSBOOTSTRAPLOADPATH=../lisp/:.. + environment-to-run-temacs run -batch -l ../lisp/loadup.el dump } @@ -206,22 +205,22 @@ end function pobj { decode_object $1 - if test $type = $dbg_Lisp_Type_Int; then + if test $type = $Lisp_Type_Int; then print -f"Integer: %d" $val - elif test $type = $dbg_Lisp_Type_Char; then - if $val < 128; then + elif test $type = $Lisp_Type_Char; then + if test $[$val > 32 && $val < 128] = 1; then print -f"Char: %c" $val else print -f"Char: %d" $val fi - elif test $type = $dbg_Lisp_Type_String || lrecord_type_p string; then + elif test $type = $Lisp_Type_String || lrecord_type_p string; then pstruct Lisp_String - elif test $type = $dbg_Lisp_Type_Cons || lrecord_type_p cons; then + elif test $type = $Lisp_Type_Cons || lrecord_type_p cons; then pstruct Lisp_Cons - elif test $type = $dbg_Lisp_Type_Symbol || lrecord_type_p symbol; then + elif test $type = $Lisp_Type_Symbol || lrecord_type_p symbol; then pstruct Lisp_Symbol - echo "Symbol name: $[(char *)($xstruct->name->_data)]" - elif test $type = $dbg_Lisp_Type_Vector || lrecord_type_p vector; then + echo "Symbol name: $[(char *)($xstruct->name->data)]" + elif test $type = $Lisp_Type_Vector || lrecord_type_p vector; then pstruct Lisp_Vector echo "Vector of length $[$xstruct->size]" elif lrecord_type_p bit_vector; then @@ -337,3 +336,27 @@ function dp_core { function print_shell { print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget) } + +# ------------------------------------------------------------- +# functions to test the debugging support itself. +# If you change this file, make sure the following still work... +# ------------------------------------------------------------- +function test_xtype { + function doit { echo -n "$1: "; xtype "$1"; } + test_various_objects +} + +function test_pobj { + function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; } + test_various_objects +} + +function test_various_objects { + doit Vemacs_major_version + doit Vhelp_char + doit Qnil + doit Qunbound + doit Vobarray + doit Vall_weak_lists + doit Vxemacs_codename +}