X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fcalc%2Foper.h;h=757ecdbcc71a2f248ba30d27448be6b6b4642f3f;hb=cd0567b4052ee24259bc6b8a9858af9d26f3de48;hp=cf86b18b2fb2198300d79c32628126355eb90f8b;hpb=52ed5940ed0ab3cafd36fbded2e83c92563e7b2b;p=m6w6%2Fext-psi diff --git a/src/calc/oper.h b/src/calc/oper.h index cf86b18..757ecdb 100644 --- a/src/calc/oper.h +++ b/src/calc/oper.h @@ -23,7 +23,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" #include #include "token.h" @@ -36,9 +35,9 @@ static inline int psi_calc_oper(token_t op1, token_t op2) return 1; } else if (op1 == op2) { return 0; - } else if (!op1) { + } else if (!op1 || op1 == PSI_T_NUMBER) { return 1; - } else if (!op2) { + } else if (!op2 || op2 == PSI_T_NUMBER) { return -1; } @@ -46,43 +45,27 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_NOT: switch (op2) { case PSI_T_NOT: - return 0; case PSI_T_TILDE: + case PSI_T_CAST: return 0; + case PSI_T_ASTERISK: - return -1; case PSI_T_SLASH: - return -1; case PSI_T_MODULO: - return -1; case PSI_T_PLUS: - return -1; case PSI_T_MINUS: - return -1; case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -94,43 +77,59 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_TILDE: switch (op2) { case PSI_T_NOT: - return 0; case PSI_T_TILDE: + case PSI_T_CAST: return 0; + case PSI_T_ASTERISK: - return -1; case PSI_T_SLASH: - return -1; case PSI_T_MODULO: - return -1; case PSI_T_PLUS: - return -1; case PSI_T_MINUS: - return -1; case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: + case PSI_T_OR: return -1; + default: + assert(0); + break; + } + break; + + case PSI_T_CAST: + switch (op2) { + case PSI_T_NOT: + case PSI_T_TILDE: + case PSI_T_CAST: + return 0; + + case PSI_T_ASTERISK: + case PSI_T_SLASH: + case PSI_T_MODULO: + case PSI_T_PLUS: + case PSI_T_MINUS: + case PSI_T_LSHIFT: + case PSI_T_RSHIFT: + case PSI_T_LCHEVR: + case PSI_T_CMP_LE: + case PSI_T_RCHEVR: + case PSI_T_CMP_GE: + case PSI_T_AMPERSAND: + case PSI_T_CMP_EQ: + case PSI_T_CMP_NE: + case PSI_T_CARET: + case PSI_T_PIPE: + case PSI_T_AND: case PSI_T_OR: return -1; default: @@ -142,43 +141,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_ASTERISK: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: + case PSI_T_CAST: return 1; + case PSI_T_ASTERISK: - return 0; case PSI_T_SLASH: - return 0; case PSI_T_MODULO: return 0; + case PSI_T_PLUS: - return -1; case PSI_T_MINUS: - return -1; case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -190,43 +175,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_SLASH: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: + case PSI_T_CAST: return 1; + case PSI_T_ASTERISK: - return 0; case PSI_T_SLASH: - return 0; case PSI_T_MODULO: return 0; + case PSI_T_PLUS: - return -1; case PSI_T_MINUS: - return -1; case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -238,43 +209,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_MODULO: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: + case PSI_T_CAST: return 1; + case PSI_T_ASTERISK: - return 0; case PSI_T_SLASH: - return 0; case PSI_T_MODULO: return 0; + case PSI_T_PLUS: - return -1; case PSI_T_MINUS: - return -1; case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -286,43 +243,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_PLUS: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: return 1; + case PSI_T_PLUS: - return 0; case PSI_T_MINUS: return 0; + case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -334,43 +277,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_MINUS: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: return 1; + case PSI_T_PLUS: - return 0; case PSI_T_MINUS: return 0; + case PSI_T_LSHIFT: - return -1; case PSI_T_RSHIFT: - return -1; case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -382,43 +311,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_LSHIFT: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: return 1; + case PSI_T_LSHIFT: - return 0; case PSI_T_RSHIFT: return 0; + case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -430,43 +345,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_RSHIFT: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: return 1; + case PSI_T_LSHIFT: - return 0; case PSI_T_RSHIFT: return 0; + case PSI_T_LCHEVR: - return -1; case PSI_T_CMP_LE: - return -1; case PSI_T_RCHEVR: - return -1; case PSI_T_CMP_GE: - return -1; case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -478,43 +379,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_LCHEVR: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: return 1; + case PSI_T_LCHEVR: - return 0; case PSI_T_CMP_LE: - return 0; case PSI_T_RCHEVR: - return 0; case PSI_T_CMP_GE: return 0; + case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -526,43 +413,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_CMP_LE: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: return 1; + case PSI_T_LCHEVR: - return 0; case PSI_T_CMP_LE: - return 0; case PSI_T_RCHEVR: - return 0; case PSI_T_CMP_GE: return 0; + case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -574,43 +447,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_RCHEVR: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: return 1; + case PSI_T_LCHEVR: - return 0; case PSI_T_CMP_LE: - return 0; case PSI_T_RCHEVR: - return 0; case PSI_T_CMP_GE: return 0; + case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -622,43 +481,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_CMP_GE: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: return 1; + case PSI_T_LCHEVR: - return 0; case PSI_T_CMP_LE: - return 0; case PSI_T_RCHEVR: - return 0; case PSI_T_CMP_GE: return 0; + case PSI_T_AMPERSAND: - return -1; case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -670,43 +515,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_AMPERSAND: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: return 1; + case PSI_T_AMPERSAND: return 0; + case PSI_T_CMP_EQ: - return -1; case PSI_T_CMP_NE: - return -1; case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -718,43 +549,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_CMP_EQ: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: return 1; + case PSI_T_CMP_EQ: - return 0; case PSI_T_CMP_NE: return 0; + case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -766,43 +583,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_CMP_NE: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: return 1; + case PSI_T_CMP_EQ: - return 0; case PSI_T_CMP_NE: return 0; + case PSI_T_CARET: - return -1; case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -814,43 +617,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_CARET: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: - return 1; case PSI_T_CMP_EQ: - return 1; case PSI_T_CMP_NE: return 1; + case PSI_T_CARET: return 0; + case PSI_T_PIPE: - return -1; case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -862,43 +651,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_PIPE: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: - return 1; case PSI_T_CMP_EQ: - return 1; case PSI_T_CMP_NE: - return 1; case PSI_T_CARET: return 1; + case PSI_T_PIPE: return 0; + case PSI_T_AND: - return -1; case PSI_T_OR: return -1; default: @@ -910,43 +685,29 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_AND: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: - return 1; case PSI_T_CMP_EQ: - return 1; case PSI_T_CMP_NE: - return 1; case PSI_T_CARET: - return 1; case PSI_T_PIPE: return 1; + case PSI_T_AND: return 0; + case PSI_T_OR: return -1; default: @@ -958,43 +719,27 @@ static inline int psi_calc_oper(token_t op1, token_t op2) case PSI_T_OR: switch (op2) { case PSI_T_NOT: - return 1; case PSI_T_TILDE: - return 1; + case PSI_T_CAST: case PSI_T_ASTERISK: - return 1; case PSI_T_SLASH: - return 1; case PSI_T_MODULO: - return 1; case PSI_T_PLUS: - return 1; case PSI_T_MINUS: - return 1; case PSI_T_LSHIFT: - return 1; case PSI_T_RSHIFT: - return 1; case PSI_T_LCHEVR: - return 1; case PSI_T_CMP_LE: - return 1; case PSI_T_RCHEVR: - return 1; case PSI_T_CMP_GE: - return 1; case PSI_T_AMPERSAND: - return 1; case PSI_T_CMP_EQ: - return 1; case PSI_T_CMP_NE: - return 1; case PSI_T_CARET: - return 1; case PSI_T_PIPE: - return 1; case PSI_T_AND: return 1; + case PSI_T_OR: return 0; default: