Start rolling in LOAD_ARG for 3.7+

This commit is contained in:
rocky
2022-05-05 21:21:59 -04:00
parent 8576117d00
commit f5043408ec
7 changed files with 323 additions and 62 deletions

View File

@@ -185,60 +185,92 @@ TABLE_R = {
# }
TABLE_DIRECT = {
"BINARY_ADD": ("+",),
"BINARY_SUBTRACT": ("-",),
"BINARY_MULTIPLY": ("*",),
"BINARY_DIVIDE": ("/",),
"BINARY_MATRIX_MULTIPLY": ("@",),
"BINARY_TRUE_DIVIDE": ("/",), # Not in <= 2.1
"BINARY_FLOOR_DIVIDE": ("//",),
"BINARY_MODULO": ("%%",),
"BINARY_POWER": ("**",),
"BINARY_LSHIFT": ("<<",),
"BINARY_RSHIFT": (">>",),
"BINARY_AND": ("&",),
"BINARY_OR": ("|",),
"BINARY_XOR": ("^",),
"DELETE_FAST": ("%|del %{pattr}\n",),
"DELETE_NAME": ("%|del %{pattr}\n",),
"DELETE_GLOBAL": ("%|del %{pattr}\n",),
"INPLACE_ADD": ("+=",),
"INPLACE_SUBTRACT": ("-=",),
"INPLACE_MULTIPLY": ("*=",),
"INPLACE_MATRIX_MULTIPLY": ("@=",),
"INPLACE_DIVIDE": ("/=",),
"INPLACE_TRUE_DIVIDE": ("/=",), # Not in <= 2.1; 2.6 generates INPLACE_DIVIDE only?
"INPLACE_FLOOR_DIVIDE": ("//=",),
"INPLACE_MODULO": ("%%=",),
"INPLACE_POWER": ("**=",),
"INPLACE_LSHIFT": ("<<=",),
"INPLACE_RSHIFT": (">>=",),
"INPLACE_AND": ("&=",),
"INPLACE_OR": ("|=",),
"INPLACE_XOR": ("^=",),
"BINARY_ADD": ( "+" ,),
"BINARY_AND": ( "&" ,),
"BINARY_DIVIDE": ( "/" ,),
"BINARY_FLOOR_DIVIDE": ( "//" ,),
"BINARY_LSHIFT": ( "<<",),
"BINARY_MATRIX_MULTIPLY": ( "@" ,),
"BINARY_MODULO": ( "%%",),
"BINARY_MULTIPLY": ( "*" ,),
"BINARY_OR": ( "|" ,),
"BINARY_POWER": ( "**",),
"BINARY_RSHIFT": ( ">>",),
"BINARY_SUBTRACT": ( "-" ,),
"BINARY_TRUE_DIVIDE": ( "/" ,), # Not in <= 2.1; 2.6 generates INPLACE_DIVIDE only?
"BINARY_XOR": ( "^" ,),
"DELETE_FAST": ( "%|del %{pattr}\n", ),
"DELETE_GLOBAL": ( "%|del %{pattr}\n", ),
"DELETE_NAME": ( "%|del %{pattr}\n", ),
"IMPORT_FROM": ( "%{pattr}", ),
"IMPORT_NAME_ATTR": ( "%{pattr}", ),
"INPLACE_ADD": ( "+=" ,),
"INPLACE_AND": ( "&=" ,),
"INPLACE_DIVIDE": ( "/=" ,),
"INPLACE_FLOOR_DIVIDE": ( "//=" ,),
"INPLACE_LSHIFT": ( "<<=",),
"INPLACE_MATRIX_MULTIPLY": ( "@=" ,),
"INPLACE_MODULO": ( "%%=",),
"INPLACE_MULTIPLY": ( "*=" ,),
"INPLACE_OR": ( "|=" ,),
"INPLACE_POWER": ( "**=",),
"INPLACE_RSHIFT": ( ">>=",),
"INPLACE_SUBTRACT": ( "-=" ,),
"INPLACE_TRUE_DIVIDE": ( "/=" ,),
"INPLACE_XOR": ( "^=" ,),
"LOAD_ARG": ( "%{pattr}", ),
"LOAD_ASSERT": ( "%{pattr}", ),
"LOAD_CLASSNAME": ( "%{pattr}", ),
"LOAD_DEREF": ( "%{pattr}", ),
"LOAD_FAST": ( "%{pattr}", ),
"LOAD_GLOBAL": ( "%{pattr}", ),
"LOAD_LOCALS": ( "locals()", ),
"LOAD_NAME": ( "%{pattr}", ),
"LOAD_STR": ( "%{pattr}", ),
"STORE_DEREF": ( "%{pattr}", ),
"STORE_FAST": ( "%{pattr}", ),
"STORE_GLOBAL": ( "%{pattr}", ),
"STORE_NAME": ( "%{pattr}", ),
"UNARY_INVERT": ( "~"),
"UNARY_NEGATIVE": ( "-",),
"UNARY_NOT": ( "not ", ),
"UNARY_POSITIVE": ( "+",),
# bin_op (formerly "binary_expr") is the Python AST BinOp
"bin_op": ("%c %c %c", 0, (-1, "binary_operator"), (1, "expr")),
"UNARY_INVERT": ("~"),
# unary_op (formerly "unary_expr") is the Python AST UnaryOp
"unary_op": ("%c%c", (1, "unary_operator"), (0, "expr")),
"unary_not": ("not %c", (0, "expr")),
"unary_convert": ("`%c`", (0, "expr"),),
"get_iter": ("iter(%c)", (0, "expr"),),
"slice0": ("%c[:]", (0, "expr"),),
"slice1": ("%c[%p:]", (0, "expr"), (1, 100)),
"slice2": ("%c[:%p]", (0, "expr"), (1, 100)),
"slice3": ("%c[%p:%p]", (0, "expr"), (1, 100), (2, 100)),
"set_iter": ( "%c", 0 ),
"slice0": (
"%c[:]",
(0, "expr"),
),
"slice1": (
"%c[%p:]",
(0, "expr"),
(1, NO_PARENTHESIS_EVER)
),
"slice2": ( "[%c:%p]",
(0, "expr"),
(1, NO_PARENTHESIS_EVER)
),
"slice3": (
"%c[%p:%p]",
(0, "expr"),
(1, NO_PARENTHESIS_EVER),
(2, NO_PARENTHESIS_EVER)
),
"IMPORT_FROM": ("%{pattr}",),
"IMPORT_NAME_ATTR": ("%{pattr}",),
"attribute": ("%c.%[1]{pattr}", (0, "expr")),
"LOAD_STR": ("%{pattr}",),
"LOAD_FAST": ("%{pattr}",),
"LOAD_NAME": ("%{pattr}",),
"LOAD_CLASSNAME": ("%{pattr}",),
"LOAD_GLOBAL": ("%{pattr}",),
"LOAD_DEREF": ("%{pattr}",),
"LOAD_LOCALS": ("locals()",),
"LOAD_ASSERT": ("%{pattr}",),
"delete_subscript": (
"%|del %p[%c]\n",
(0, "expr", PRECEDENCE["subscript"]),
@@ -258,12 +290,6 @@ TABLE_DIRECT = {
),
"store_subscript": ("%p[%c]", (0, "expr", PRECEDENCE["subscript"]), (1, "expr")),
"STORE_FAST": ("%{pattr}",),
"STORE_NAME": ("%{pattr}",),
"STORE_GLOBAL": ("%{pattr}",),
"STORE_DEREF": ("%{pattr}",),
"UNARY_POSITIVE": ("+",),
"UNARY_NEGATIVE": ("-",),
"unpack": ("%C%,", (1, maxint, ", ")),
# This nonterminal we create on the fly in semantic routines
"unpack_w_parens": ("(%C%,)", (1, maxint, ", ")),
@@ -285,7 +311,7 @@ TABLE_DIRECT = {
"set_comp_body": ("%c", 0),
"gen_comp_body": ("%c", 0),
"dict_comp_body": ("%c:%c", 1, 0),
"dict_comp_body": ("%c: %c", 1, 0),
"assign": ("%|%c = %p\n", -1, (0, 200)),
# The 2nd parameter should have a = suffix.
# There is a rule with a 4th parameter "store"