From b8ee7ab5b988f424e34e778fe3a679710d675efa Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Fri, 8 Sep 2017 00:10:10 +0300
Subject: [PATCH] py/runtime0.h: Put inplace arith ops in front of normal
 operations.

This is to allow to place reverse ops immediately after normal ops, so
they can be tested as one range (which is optimization for reverse ops
introduction in the next patch).
---
 py/objint_mpz.c                 |  2 +-
 py/runtime0.h                   | 28 ++++++++++++++--------------
 tests/cmdline/cmd_showbc.py.exp | 14 +++++++-------
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/py/objint_mpz.c b/py/objint_mpz.c
index c7a3074ba..0e318b492 100644
--- a/py/objint_mpz.c
+++ b/py/objint_mpz.c
@@ -221,7 +221,7 @@ mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i
         return mp_obj_new_float(flhs / frhs);
 #endif
 
-    } else if (op >= MP_BINARY_OP_OR) {
+    } else if (op >= MP_BINARY_OP_INPLACE_OR) {
         mp_obj_int_t *res = mp_obj_int_new_mpz();
 
         switch (op) {
diff --git a/py/runtime0.h b/py/runtime0.h
index b34211d57..3cf5e530d 100644
--- a/py/runtime0.h
+++ b/py/runtime0.h
@@ -70,20 +70,6 @@ typedef enum {
     MP_BINARY_OP_IS_NOT,
 
     // Arithmetic operations
-    MP_BINARY_OP_OR,
-    MP_BINARY_OP_XOR,
-    MP_BINARY_OP_AND,
-    MP_BINARY_OP_LSHIFT,
-    MP_BINARY_OP_RSHIFT,
-    MP_BINARY_OP_ADD,
-
-    MP_BINARY_OP_SUBTRACT,
-    MP_BINARY_OP_MULTIPLY,
-    MP_BINARY_OP_FLOOR_DIVIDE,
-    MP_BINARY_OP_TRUE_DIVIDE,
-    MP_BINARY_OP_MODULO,
-    MP_BINARY_OP_POWER,
-
     MP_BINARY_OP_INPLACE_OR,
     MP_BINARY_OP_INPLACE_XOR,
     MP_BINARY_OP_INPLACE_AND,
@@ -98,6 +84,20 @@ typedef enum {
     MP_BINARY_OP_INPLACE_MODULO,
     MP_BINARY_OP_INPLACE_POWER,
 
+    MP_BINARY_OP_OR,
+    MP_BINARY_OP_XOR,
+    MP_BINARY_OP_AND,
+    MP_BINARY_OP_LSHIFT,
+    MP_BINARY_OP_RSHIFT,
+    MP_BINARY_OP_ADD,
+
+    MP_BINARY_OP_SUBTRACT,
+    MP_BINARY_OP_MULTIPLY,
+    MP_BINARY_OP_FLOOR_DIVIDE,
+    MP_BINARY_OP_TRUE_DIVIDE,
+    MP_BINARY_OP_MODULO,
+    MP_BINARY_OP_POWER,
+
     // Operations below this line don't appear in bytecode, they
     // just identify special methods.
 
diff --git a/tests/cmdline/cmd_showbc.py.exp b/tests/cmdline/cmd_showbc.py.exp
index 0919aac53..0e66a013d 100644
--- a/tests/cmdline/cmd_showbc.py.exp
+++ b/tests/cmdline/cmd_showbc.py.exp
@@ -43,9 +43,9 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
   bc=\\d\+ line=126
 00 LOAD_CONST_NONE
 01 LOAD_CONST_FALSE
-02 BINARY_OP 16 __add__
+02 BINARY_OP 28 __add__
 03 LOAD_CONST_TRUE
-04 BINARY_OP 16 __add__
+04 BINARY_OP 28 __add__
 05 STORE_FAST 0
 06 LOAD_CONST_SMALL_INT 0
 07 STORE_FAST 0
@@ -84,7 +84,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
 \\d\+ STORE_FAST 7
 \\d\+ LOAD_FAST 0
 \\d\+ LOAD_DEREF 14
-\\d\+ BINARY_OP 16 __add__
+\\d\+ BINARY_OP 28 __add__
 \\d\+ STORE_FAST 8
 \\d\+ LOAD_FAST 0
 \\d\+ UNARY_OP 4
@@ -132,7 +132,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
 \\d\+ DUP_TOP_TWO
 \\d\+ LOAD_SUBSCR
 \\d\+ LOAD_FAST 12
-\\d\+ BINARY_OP 28 __iadd__
+\\d\+ BINARY_OP 16 __iadd__
 \\d\+ ROT_THREE
 \\d\+ STORE_SUBSCR
 \\d\+ LOAD_DEREF 14
@@ -369,7 +369,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
 42 STORE_FAST_N 19
 44 LOAD_FAST 9
 45 LOAD_FAST_N 19
-47 BINARY_OP 16 __add__
+47 BINARY_OP 28 __add__
 48 POP_TOP
 49 LOAD_CONST_NONE
 50 RETURN_VALUE
@@ -521,7 +521,7 @@ arg names: *
   bc=\\d\+ line=113
 00 LOAD_DEREF 0
 02 LOAD_CONST_SMALL_INT 1
-03 BINARY_OP 16 __add__
+03 BINARY_OP 28 __add__
 04 STORE_FAST 1
 05 LOAD_CONST_SMALL_INT 1
 06 STORE_DEREF 0
@@ -540,7 +540,7 @@ arg names: * b
   bc=\\d\+ line=139
 00 LOAD_FAST 1
 01 LOAD_DEREF 0
-03 BINARY_OP 16 __add__
+03 BINARY_OP 28 __add__
 04 RETURN_VALUE
 mem: total=\\d\+, current=\\d\+, peak=\\d\+
 stack: \\d\+ out of \\d\+
-- 
GitLab