|
| 1 | +diff --git a/misc.py b/misc.py |
| 2 | +index 99a41ad..f063b97 100644 |
| 3 | +--- a/misc.py |
| 4 | ++++ b/misc.py |
| 5 | +@@ -136,41 +136,29 @@ def change_function( function, **kwds ): |
| 6 | + |
| 7 | + will change the func's co_filename to the specified string. |
| 8 | + |
| 9 | +- The types.CodeType constructor differs between Python 2 and 3; see |
| 10 | +- type help(types.CodeType) at the interpreter prompt for information: |
| 11 | ++ The types.CodeType constructor differs between Python versions; see |
| 12 | ++ type help(types.CodeType) at the interpreter prompt for information. |
| 13 | + |
| 14 | +- Python2: |
| 15 | +- code(argcount, nlocals, stacksize, flags, codestring, |
| 16 | +- | constants, names, varnames, filename, name, firstlineno, |
| 17 | +- | lnotab[, freevars[, cellvars]]) |
| 18 | ++ """ |
| 19 | + |
| 20 | +- Python3: |
| 21 | +- code(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring, |
| 22 | +- | constants, names, varnames, filename, name, firstlineno, |
| 23 | +- | lnotab[, freevars[, cellvars]]) |
| 24 | ++ version_lookup = { |
| 25 | ++ (2, 7): ["co_argcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_firstlineno", "co_lnotab", "co_freevars", "co_cellvars"], |
| 26 | ++ (3, 7): ["co_argcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_firstlineno", "co_lnotab", "co_freevars", "co_cellvars"], |
| 27 | ++ (3, 8): ["co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_firstlineno", "co_lnotab", "co_freevars", "co_cellvars"], |
| 28 | ++ (3, 9): ["co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_firstlineno", "co_lnotab", "co_freevars", "co_cellvars"], |
| 29 | ++ (3, 10): ["co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_firstlineno", "co_linetable", "co_freevars", "co_cellvars"], |
| 30 | ++ (3, 11): ["co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_code", "co_consts", "co_names", "co_varnames", "co_filename", "co_name", "co_qualname", "co_firstlineno", "co_linetable", "co_exceptiontable", "co_freevars", "co_cellvars"] |
| 31 | ++ } |
| 32 | + |
| 33 | ++ version, minor = sys.version_info[0], sys.version_info[1] |
| 34 | + |
| 35 | +- """ |
| 36 | +- # Enumerate all the __code__ attributes in the same order; types.CodeTypes |
| 37 | +- # doesn't accept keyword args, only position. |
| 38 | +- attrs = [ "co_argcount" ] |
| 39 | +- if sys.version_info[0] >= 3: |
| 40 | +- attrs += [ "co_kwonlyargcount" ] |
| 41 | +- if sys.version_info[1] >= 8: |
| 42 | +- attrs += [ "co_posonlyargcount" ] |
| 43 | +- attrs += [ "co_nlocals", |
| 44 | +- "co_stacksize", |
| 45 | +- "co_flags", |
| 46 | +- "co_code", |
| 47 | +- "co_consts", |
| 48 | +- "co_names", |
| 49 | +- "co_varnames", |
| 50 | +- "co_filename", |
| 51 | +- "co_name", |
| 52 | +- "co_firstlineno", |
| 53 | +- "co_lnotab", |
| 54 | +- "co_freevars", |
| 55 | +- "co_cellvars" ] |
| 56 | ++ # Clamp major version to 2 or 3 |
| 57 | ++ version = max(min(version, 3), 2) |
| 58 | ++ |
| 59 | ++ # Clamp minor version to 7-11 |
| 60 | ++ minor = max(min(minor, 11), 7) |
| 61 | ++ |
| 62 | ++ attrs = version_lookup[(version, minor)] |
| 63 | + |
| 64 | + assert all( k in attrs for k in kwds ), \ |
| 65 | + "Invalid function keyword(s) supplied: %s" % ( ", ".join( kwds.keys() )) |
0 commit comments