File tree 4 files changed +62
-3
lines changed
4 files changed +62
-3
lines changed Original file line number Diff line number Diff line change @@ -941,6 +941,7 @@ stats: native [
941
941
/profile {Returns profiler object}
942
942
/timer {High resolution time difference from start}
943
943
/evals {Number of values evaluated by interpreter}
944
+ /dump-series pool-id [integer! ] {Dump all series in pool pool-id, -1 for all pools}
944
945
]
945
946
946
947
do-codec: native [
Original file line number Diff line number Diff line change 27
27
**
28
28
***********************************************************************/
29
29
30
+ #include <stdio.h>
30
31
#include "sys-core.h"
31
32
32
33
49
50
SERIES_REST (series ),
50
51
SERIES_FLAGS (series )
51
52
);
52
- if (SERIES_WIDE (series ) == sizeof (REBVAL ))
53
+ if (SERIES_WIDE (series ) == sizeof (REBVAL )) {
53
54
Dump_Values (BLK_HEAD (series ), SERIES_TAIL (series ));
54
- else
55
+ } else
55
56
Dump_Bytes (series -> data , (SERIES_TAIL (series )+ 1 ) * SERIES_WIDE (series ));
56
57
}
57
58
122
123
123
124
cp = buf ;
124
125
for (l = 0 ; l < count ; l ++ ) {
126
+ REBVAL * val = (REBVAL * )bp ;
125
127
cp = Form_Hex_Pad (cp , l , 8 );
126
128
127
129
* cp ++ = ':' ;
137
139
cp = Form_Hex_Pad (cp , * bp ++ , 8 );
138
140
* cp ++ = ' ' ;
139
141
}
142
+ n = 0 ;
143
+ if (IS_WORD ((REBVAL * )val ) || IS_GET_WORD ((REBVAL * )val ) || IS_SET_WORD ((REBVAL * )val )) {
144
+ char * name = Get_Word_Name ((REBVAL * )val );
145
+ n = snprintf (cp , sizeof (buf ) - (cp - buf ), " (%s)" , name );
146
+ }
140
147
141
- * cp = 0 ;
148
+ * ( cp + n ) = 0 ;
142
149
Debug_Str (buf );
143
150
cp = buf ;
144
151
}
Original file line number Diff line number Diff line change @@ -701,6 +701,51 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
701
701
}
702
702
}
703
703
704
+ /***********************************************************************
705
+ **
706
+ */ void Dump_Series_In_Pool (int pool_id )
707
+ /*
708
+ ** Dump all series in the pool @pool_id, -1 for all pools
709
+ **
710
+ ***********************************************************************/
711
+ {
712
+ REBSEG * seg ;
713
+ REBSER * series ;
714
+ REBCNT count ;
715
+ REBCNT n = 0 ;
716
+
717
+ for (seg = Mem_Pools [SERIES_POOL ].segs ; seg ; seg = seg -> next ) {
718
+ series = (REBSER * ) (seg + 1 );
719
+ for (count = Mem_Pools [SERIES_POOL ].units ; count > 0 ; count -- ) {
720
+ SKIP_WALL (series );
721
+ if (!SERIES_FREED (series )) {
722
+ if (pool_id < 0 || FIND_POOL (SERIES_TOTAL (series )) == pool_id ) {
723
+ Debug_Fmt (
724
+ Str_Dump [0 ], //"%s Series %x %s: Wide: %2d Size: %6d - Bias: %d Tail: %d Rest: %d Flags: %x"
725
+ "Dump" ,
726
+ series ,
727
+ (SERIES_LABEL (series ) ? SERIES_LABEL (series ) : "-" ),
728
+ SERIES_WIDE (series ),
729
+ SERIES_TOTAL (series ),
730
+ SERIES_BIAS (series ),
731
+ SERIES_TAIL (series ),
732
+ SERIES_REST (series ),
733
+ SERIES_FLAGS (series )
734
+ );
735
+ //Dump_Series(series, "Dump");
736
+ if (SERIES_WIDE (series ) == sizeof (REBVAL )) {
737
+ Debug_Values (BLK_HEAD (series ), SERIES_TAIL (series ), 1024 ); /* FIXME limit */
738
+ } else {
739
+ Dump_Bytes (series -> data , (SERIES_TAIL (series )+ 1 ) * SERIES_WIDE (series ));
740
+ }
741
+ }
742
+ }
743
+ series ++ ;
744
+ SKIP_WALL (series );
745
+ }
746
+ }
747
+ }
748
+
704
749
705
750
/***********************************************************************
706
751
**
Original file line number Diff line number Diff line change 162
162
return R_RET ;
163
163
}
164
164
165
+ if (D_REF (5 )) {
166
+ REBVAL * pool_id = D_ARG (6 );
167
+ Dump_Series_In_Pool (VAL_INT32 (pool_id ));
168
+ return R_NONE ;
169
+ }
170
+
165
171
if (D_REF (1 )) flags = 3 ;
166
172
n = Inspect_Series (flags );
167
173
You can’t perform that action at this time.
0 commit comments