<HTML><BODY><div>Hello, Igor!</div><div>Thanks for your comments!</div><div> </div><div>Here is the new commit message:</div><div>=========================================================</div><div><div>gdb: support LJ_DUALNUM mode</div><div> </div><div>luajit-gdb.py displays integers in LJ_DUALNUM mode as nan-s. The<br>dumper function produces output considering any input value as a<br>double. However, in LJ_DUALNUM mode, integers and doubles are stored<br>differently, so the `itype` of a double must be less than<br>`LJ_TISNUM`, and the `itype` of an integer must be `LJ_TISNUM`. With<br>this fact in mind, we can easily differentiate one from another.</div><div> </div><div>Closes tarantool/tarantool#6224<br>=========================================================</div></div><div> </div><div>Here is the diff:</div><div>=========================================================</div><div><div>diff --git a/src/luajit-gdb.py b/src/luajit-gdb.py<br>index 9ccca66a..25428745 100644<br>--- a/src/luajit-gdb.py<br>+++ b/src/luajit-gdb.py<br>@@ -507,10 +507,14 @@ pointers respectively.<br>     '''</div><div>     def invoke(self, arg, from_tty):<br>-        gdb.write('LJ_64: {LJ_64}, LJ_GC64: {LJ_GC64}\n'.format(<br>-            LJ_64 = LJ_64,<br>-            LJ_GC64 = LJ_GC64<br>-        ))<br>+        gdb.write(<br>+            'LJ_64: {LJ_64}, LJ_GC64: {LJ_GC64}, LJ_DUALNUM : {LJ_DUALNUM}\n'<br>+            .format(<br>+                LJ_64 = LJ_64,<br>+                LJ_GC64 = LJ_GC64,<br>+                LJ_DUALNUM = LJ_DUALNUM<br>+            )<br>+        )</div><div> class LJDumpTValue(LJBase):<br>     '''<br>@@ -690,7 +694,7 @@ The command requires no args and dumps current GC stats:<br>         ))</div><div> def init(commands):<br>-    global LJ_64, LJ_GC64, LJ_DUALNUM, LJ_TISNUM, LJ_FR2, PADDING<br>+    global LJ_64, LJ_GC64, LJ_FR2, LJ_DUALNUM, LJ_TISNUM, PADDING</div><div>     # XXX Fragile: though connecting the callback looks like a crap but it<br>     # respects both Python 2 and Python 3 (see #4828).<br>@@ -731,7 +735,7 @@ def init(commands):<br>     try:<br>         LJ_64 = str(gdb.parse_and_eval('IRT_PTR')) == 'IRT_P64'<br>         LJ_FR2 = LJ_GC64 = str(gdb.parse_and_eval('IRT_PGC')) == 'IRT_P64'<br>-        LJ_DUALNUM = lookup('lj_lib_checknumber') is not None<br>+        LJ_DUALNUM = gdb.lookup_global_symbol('lj_lib_checknumber') is not None<br>     except:<br>         gdb.write('luajit-gdb.py failed to load: '<br>                   'no debugging symbols found for libluajit\n')<br>=========================================================</div></div><div> </div><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;"><div> <blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;"><div id=""><div class="js-helper js-readmsg-msg"><div><div id="style_16291051631725839802_BODY">Max,<br><br>Thanks for the patch! Please consider the comments below.</div></div></div></div></blockquote><div><snipped></div><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;"><div><div class="js-helper js-readmsg-msg"><div><div>> def tvislightud(o):<br>> if LJ_64 and not LJ_GC64:<br>> @@ -343,7 +346,10 @@ def dump_lj_tudata(tv):<br>> return 'userdata @ {}'.format(strx64(gcval(tv['gcr'])))<br>><br>> def dump_lj_tnumx(tv):<br>> - return 'number {}'.format(cast('double', tv['n']))<br>> + if tvisint(tv):<br>> + return 'number {}'.format(cast('int32_t', tv['i']))<br><br>Side note: Agree with Sergey here. It is more convenient to understand<br>that TValue structure for integer slot differs from double.</div></div></div></div></blockquote><div>I have already fixed the output format here with the fix for v2 of the patch.</div><div><snipped></div><div> </div><div>Best regards,</div><div>Maxim Kokryashkin</div><div> </div></div></blockquote></BODY></HTML>