From 01ab2545b9722fe9f9ef4f73111fa3c248ca2614 Mon Sep 17 00:00:00 2001 From: ketmar Date: Mon, 20 Aug 2012 20:50:59 +0000 Subject: [PATCH] added '<<' and '>>' FossilOrigin-Name: 65867eb2065d846860539d3a9a8ba4721bc1494553a7e8f3af5f8eb8580e856b --- dox/urasm.txt | 30 ++++++++++++++++++++++++++++++ src/liburasm/liburasm.c | 43 ++++++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/dox/urasm.txt b/dox/urasm.txt index e5ee32c..4eae15c 100644 --- a/dox/urasm.txt +++ b/dox/urasm.txt @@ -146,3 +146,33 @@ align(xxx[, what]) -- AF' ÍÏÖÎÏ ÐÉÓÁÔØ ËÁË AFX. ËÏÍÁÎÄÙ ÍÏÖÎÏ ÒÁÚÄÅÌÑÔØ Ä×ÏÅÔÏÞÉÅÍ. + + +ÐÒÉÏÒÉÔÅÔÙ ÍÁÔÅÍÁÔÉËÉ (÷îéíáîéå! îéèõñ îå ëáë ÷ ãü!) + << + >> +------------ + & +------------ + | + ^ +------------ + * + / + % +------------ + + + - +------------ + && +------------ + || +------------ + < + > + = (ÔÏ ÖÅ, ÞÔÏ É '==') + == + != + <> + <= + >= diff --git a/src/liburasm/liburasm.c b/src/liburasm/liburasm.c index 05679c4..4dae91b 100644 --- a/src/liburasm/liburasm.c +++ b/src/liburasm/liburasm.c @@ -1274,6 +1274,8 @@ static void mdoLogNot (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val = !op0 static void mdoBitAnd (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val &= op1->val; } static void mdoBitOr (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val |= op1->val; } static void mdoBitXor (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val ^= op1->val; } +static void mdoLShift (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val <<= op1->val; } +static void mdoRShift (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val >>= op1->val; } static void mdoMul (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { op0->val *= op1->val; } static void mdoDiv (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { if (op1->val == 0) EERROR(ERR_DIV0); op0->val /= op1->val; } static void mdoMod (ExprOp *op0, ExprOp *op1, ExprInfo *ei) { if (op1->val == 0) EERROR(ERR_DIV0); op0->val %= op1->val; } @@ -1306,33 +1308,36 @@ static const ExprOperator operators[] = { { '~', NULL, 2, mdoBitNot }, { '!', NULL, 2, mdoLogNot }, // - { '&', NULL, 3, mdoBitAnd }, + { 0, "<<", 3, mdoLShift }, + { 0, ">>", 3, mdoRShift }, // - { '|', NULL, 4, mdoBitOr }, - { '^', NULL, 4, mdoBitXor }, + { '&', NULL, 4, mdoBitAnd }, // - { '*', NULL, 5, mdoMul }, - { '/', NULL, 5, mdoDiv }, - { '%', NULL, 5, mdoMod }, + { '|', NULL, 5, mdoBitOr }, + { '^', NULL, 5, mdoBitXor }, // - { '+', NULL, 6, mdoAdd }, - { '-', NULL, 6, mdoSub }, + { '*', NULL, 6, mdoMul }, + { '/', NULL, 6, mdoDiv }, + { '%', NULL, 6, mdoMod }, // - { 0, "&&", 7, mdoLogAnd }, + { '+', NULL, 7, mdoAdd }, + { '-', NULL, 7, mdoSub }, // - { 0, "||", 8, mdoLogOr }, + { 0, "&&", 8, mdoLogAnd }, // - { '<', NULL, 9, mdoLogLess }, - { '>', NULL, 9, mdoLogGreat }, - { '=', NULL, 9, mdoLogEqu }, - { 0, "==", 9, mdoLogEqu }, - { 0, "!=", 9, mdoLogNEqu }, - { 0, "<>", 9, mdoLogNEqu }, - { 0, "<=", 9, mdoLogLEqu }, - { 0, ">=", 9, mdoLogGEqu }, + { 0, "||", 9, mdoLogOr }, + // + { '<', NULL, 10, mdoLogLess }, + { '>', NULL, 10, mdoLogGreat }, + { '=', NULL, 10, mdoLogEqu }, + { 0, "==", 10, mdoLogEqu }, + { 0, "!=", 10, mdoLogNEqu }, + { 0, "<>", 10, mdoLogNEqu }, + { 0, "<=", 10, mdoLogLEqu }, + { 0, ">=", 10, mdoLogGEqu }, { 0, NULL, -1, NULL }, }; -#define MAX_PRIO 9 +#define MAX_PRIO 10 #define UNARY_PRIO 2 -- 2.11.4.GIT