<div dir="ltr"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">I propose to make co_argcount meaning the number of positional<br> parameters (i.e. positional-only + positional-or-keyword). This would<br> remove the need of changing the code that uses <span class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"></span><span class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"></span>co_argcount.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">I like the proposal, it will certainly make handling normal cases downstream much easier because</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">if you do not care about positional-only arguments you can keep inspecting <span class="gmail_default"></span><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">co_argcount and that</span></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">will give you what you expect. Note that if we choose to do this, it has to be done now-ish IMHO to</span></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">avoid </span><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">making the change painful because it will change the semantics of </span><span style="font-family:Arial,Helvetica,sans-serif;color:rgb(34,34,34)">co_argcount.</span></div></div><div> </div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">As for the code object constructor, I propose to make posonlyargcount an<br> optional parameter (default 0) added after existing parameters.<br> <span class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"></span>PyCode_New() can be kept unchanged, but we can add new PyCode_New2() or<br> PyCode_NewEx() with different signature.</blockquote><div><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">I am not convinced about having a default argument in the code constructor. The code constructor</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">is kept with all arguments positional for efficiency and adding defaults will make it slower or having</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">a more confusing an asymmetrical interface. Also, this will be misaligned on how keyword-only</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">parameters are provided. This is by far not the first time this constructor has changed.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">On the Python side, the new code.replace should cover most of the Python-side use cases regarding</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">creating code objects from the Python side.</div></div>