help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-smalltalk] [PATCH] fix minidebugger bitrot


From: Paolo Bonzini
Subject: [Help-smalltalk] [PATCH] fix minidebugger bitrot
Date: Wed, 11 Jul 2007 12:06:38 -0400
User-agent: Thunderbird 2.0.0.4 (Macintosh/20070604)

The changes were minor, except that I didn't anticipate having to modify the interpreter. I'll check if this has to be backported to 2.3 too.

Paolo
2007-07-11  Paolo Bonzini  <address@hidden>

        * examples/MiniDebugger.st: Fix bitrot, use #lines.
        * kernel/CompildCode.st: Fix generation of source code line map.

        * libgst/interp-bc.inl: Reset _gst_except_flag to false at beginning
        of monitor_byte_codes.

        * packages/browser/Debugger.st: Highlight line 1 for nil context.


--- orig/examples/MiniDebugger.st
+++ mod/examples/MiniDebugger.st
@@ -331,6 +331,7 @@ continue
 !MiniDebugger methodsFor: 'source code'!
 
 currentMethodSource
+    activeContext isNil ifTrue: [ ^#() ].
     ^methodSourceCodeCache at: activeContext method ifAbsentPut: [
        self linesOf: activeContext method methodSourceString
     ]
@@ -338,6 +339,7 @@ currentMethodSource
 
 currentLine
     | lineMap |
+    activeContext isNil ifTrue: [ ^self ].
     lineMap := methodLineMapCache at: activeContext method ifAbsentPut: [
        activeContext method sourceCodeMap
     ].
@@ -345,23 +347,15 @@ currentLine
 !
 
 linesOf: aString
-    | oc start |
-    aString isNil ifTrue: [ ^#() ].
-    oc := OrderedCollection new.
-    start := 0.
-    aString keysAndValuesDo: [ :index :each |
-       each == Character nl
-           ifTrue: [
-               oc add: (aString copyFrom: start to: index - 1).
-               start := index + 1
-           ]
-    ].
-    oc add: (aString copyFrom: start).
-    ^oc
+    aString isNil ifTrue: [ ^nil ].
+    ^aString readStream lines contents
 !
 
 printCurrentMethod
-    self currentMethodSource keysAndValuesDo: [ :line :code |
+    | source |
+    source := self currentMethodSource.
+    source isNil ifTrue: [ ^self ].
+    source keysAndValuesDo: [ :line :code |
        self rightJustify: line.
        stdout
            space;
@@ -371,14 +365,16 @@ printCurrentMethod
 !
 
 printCurrentLine
-    | line |
+    | line source |
+    source := self currentMethodSource.
+    source isNil ifTrue: [ ^self ].
     line := self currentLine.
     line = 0 ifTrue: [ ^self ].
 
     self rightJustify: line.
     stdout
        space;
-       nextPutAll: (self currentMethodSource at: line ifAbsent: [ '' ]);
+       nextPutAll: (source at: line ifAbsent: [ '' ]);
        nl
 ! !
 
@@ -402,8 +398,10 @@ doStepCommand
        (command == $c) ifTrue: [ self continue ].
     ].
 
-    activeContext == context ifFalse: [ activeContext printNl ].
-    self printCurrentLine.
+    activeContext isNil ifFalse: [
+       activeContext == context ifFalse: [ activeContext printNl ].
+       self printCurrentLine ].
+
     ^true
 !
 
@@ -519,8 +517,8 @@ initializeFor: aProcess
     [ activeContext isInternalExceptionHandlingContext ]
        whileTrue: [ self finish ].
 
-    process suspendedContext backtraceOn: stdout.
-    ObjectMemory globalGarbageCollect.
+    self backtraceOf: process.
+    self printCurrentLine.
 !
 
 backtraceOf: aProcess


--- orig/kernel/CompildCode.st
+++ mod/kernel/CompildCode.st
@@ -474,7 +474,7 @@ sourceCodeMap
     map := ByteArray new: self size.
     line := 1.
     self allByteCodeIndicesDo: [ :each :byte :operand |
-        (self class bytecodeInfoTable at: byte * 4 + 4) > 128 ifTrue: [
+        (self class bytecodeInfoTable at: byte * 4 + 4) >= 128 ifTrue: [
            line := operand.
             operand > 255 ifTrue: [ map := map asArray ]
         ].



--- orig/libgst/interp-bc.inl
+++ mod/libgst/interp-bc.inl
@@ -506,6 +506,7 @@ _gst_interpret (OOP processOOP)
   IMPORT_REGS ();
 
 monitor_byte_codes:
+  SET_EXCEPT_FLAG (false);
   if (!disable_preemption)
     {
       _gst_disable_interrupts ();      /* block out everything! */
@@ -571,12 +572,12 @@ monitor_byte_codes:
 
       printf ("%5td:", (ptrdiff_t) (ip - method_base));
       _gst_print_bytecode_name (ip, ip - method_base, _gst_literals, "");
+      SET_EXCEPT_FLAG (true);
     }
 
   if UNCOMMON (time_to_preempt)
     set_preemption_timer ();
 
-  SET_EXCEPT_FLAG (_gst_execution_tracing);
   FETCH (normal_byte_codes);
 
   /* Some more routines we need... */


--- orig/packages/browser/Debugger.st
+++ mod/packages/browser/Debugger.st
@@ -297,6 +297,7 @@ currentLine
 
 lineFor: context
     | lineMap |
+    context isNil ifTrue: [ ^1 ].
     lineMap := methodLineMapCache at: context method
        ifAbsentPut: [ context method sourceCodeMap ].
     ^lineMap at: context ip + 1 ifAbsent: [ 1 ]!




reply via email to

[Prev in Thread] Current Thread [Next in Thread]