Reduce code duplication for pre-3.11 binary ops, based on #348

This commit is contained in:
Michael Hansen
2023-06-01 13:55:17 -07:00
parent 90815b47ca
commit 409f175827
6 changed files with 101 additions and 245 deletions

View File

@@ -1,4 +1,5 @@
#include "ASTNode.h"
#include "bytecode.h"
/* ASTNodeList */
void ASTNodeList::removeLast()
@@ -37,7 +38,71 @@ const char* ASTBinary::op_str() const
return s_op_strings[op()];
}
ASTBinary::BinOp ASTBinary::getBinOpFromOperand(int operand)
ASTBinary::BinOp ASTBinary::from_opcode(int opcode)
{
switch (opcode) {
case Pyc::BINARY_ADD:
return BIN_ADD;
case Pyc::BINARY_AND:
return BIN_AND;
case Pyc::BINARY_DIVIDE:
return BIN_DIVIDE;
case Pyc::BINARY_FLOOR_DIVIDE:
return BIN_FLOOR_DIVIDE;
case Pyc::BINARY_LSHIFT:
return BIN_LSHIFT;
case Pyc::BINARY_MODULO:
return BIN_MODULO;
case Pyc::BINARY_MULTIPLY:
return BIN_MULTIPLY;
case Pyc::BINARY_OR:
return BIN_OR;
case Pyc::BINARY_POWER:
return BIN_POWER;
case Pyc::BINARY_RSHIFT:
return BIN_RSHIFT;
case Pyc::BINARY_SUBTRACT:
return BIN_SUBTRACT;
case Pyc::BINARY_TRUE_DIVIDE:
return BIN_DIVIDE;
case Pyc::BINARY_XOR:
return BIN_XOR;
case Pyc::BINARY_MATRIX_MULTIPLY:
return BIN_MAT_MULTIPLY;
case Pyc::INPLACE_ADD:
return BIN_IP_ADD;
case Pyc::INPLACE_AND:
return BIN_IP_AND;
case Pyc::INPLACE_DIVIDE:
return BIN_IP_DIVIDE;
case Pyc::INPLACE_FLOOR_DIVIDE:
return BIN_IP_FLOOR_DIVIDE;
case Pyc::INPLACE_LSHIFT:
return BIN_IP_LSHIFT;
case Pyc::INPLACE_MODULO:
return BIN_IP_MODULO;
case Pyc::INPLACE_MULTIPLY:
return BIN_IP_MULTIPLY;
case Pyc::INPLACE_OR:
return BIN_IP_OR;
case Pyc::INPLACE_POWER:
return BIN_IP_POWER;
case Pyc::INPLACE_RSHIFT:
return BIN_IP_RSHIFT;
case Pyc::INPLACE_SUBTRACT:
return BIN_IP_SUBTRACT;
case Pyc::INPLACE_TRUE_DIVIDE:
return BIN_IP_DIVIDE;
case Pyc::INPLACE_XOR:
return BIN_IP_XOR;
case Pyc::INPLACE_MATRIX_MULTIPLY:
return BIN_IP_MAT_MULTIPLY;
default:
return BIN_INVALID;
}
}
ASTBinary::BinOp ASTBinary::from_binary_op(int operand)
{
switch (operand) {
case 0:
@@ -45,7 +110,7 @@ ASTBinary::BinOp ASTBinary::getBinOpFromOperand(int operand)
case 1:
return BIN_AND;
case 2:
return BIN_FLOOR;
return BIN_FLOOR_DIVIDE;
case 3:
return BIN_LSHIFT;
case 4:
@@ -71,7 +136,7 @@ ASTBinary::BinOp ASTBinary::getBinOpFromOperand(int operand)
case 14:
return BIN_IP_AND;
case 15:
return BIN_IP_FLOOR;
return BIN_IP_FLOOR_DIVIDE;
case 16:
return BIN_IP_LSHIFT;
case 17:
@@ -97,6 +162,7 @@ ASTBinary::BinOp ASTBinary::getBinOpFromOperand(int operand)
}
}
/* ASTCompare */
const char* ASTCompare::op_str() const
{