Reduce code duplication for pre-3.11 binary ops, based on #348
This commit is contained in:
72
ASTNode.cpp
72
ASTNode.cpp
@@ -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
|
||||
{
|
||||
|
Reference in New Issue
Block a user