<HTML><BODY><div>Hi, Sergey!</div><div> </div><div>Thanks for the patch!</div><div> </div><div>LGTM, except for the single nit below.</div><div> </div><div><snipped></div><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;"><div><br>+def dump_lj_tv_lightud(tv):<br>+ return dump_lj_gco_lightud(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_str(tv):<br>+ return dump_lj_gco_str(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_upval(tv):<br>+ return dump_lj_gco_upval(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_thread(tv):<br>+ return dump_lj_gco_thread(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_proto(tv):<br>+ return dump_lj_gco_proto(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_func(tv):<br>+ return dump_lj_gco_func(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_trace(tv):<br>+ return dump_lj_gco_trace(gcval(tv['gcr']))<br> <br>-def dump_lj_tnumx(tv):<br>+def dump_lj_tv_cdata(tv):<br>+ return dump_lj_gco_cdata(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_tab(tv):<br>+ return dump_lj_gco_tab(gcval(tv['gcr']))<br>+<br>+def dump_lj_tv_udata(tv):<br>+ return dump_lj_gco_udata(gcval(tv['gcr']))<br>+</div></blockquote><div>I think we can replace that load of wrappers with something</div><div>that looks more or less like that:</div><div> </div><div><div><div>1 | gco_to_wrap = [func for func in globals().keys() if func.startswith('dump_lj_gco')]</div></div><div>2 |</div><div><div>3 | for func_name in gco_to_wrap:</div><div>4 |    wrapped_func_name = func_name.replace('gco', 'tv')</div><div>5 |    globals()[wrapped_func_name] = lambda tv: globals()[func_name](gcval(tv['gcr']))</div></div></div><div> </div><div>I am not really sure if it is harder to read for those who are not really familiar</div><div>with python, so feel free to ignore.</div><div> </div><div><snipped></div><div><div>--<br>Best regards,</div><div>Maxim Kokryashkin</div></div><div> </div></BODY></HTML>