TK_BITWISE_OR_EQUAL,
TK_BITWISE_XOR,
TK_BITWISE_XOR_EQUAL,
+ TK_BITWISE_SHIFT_LEFT,
+ TK_BITWISE_SHIFT_RIGHT,
TK_LOGICAL_AND,
TK_LOGICAL_OR,
case TK_BITWISE_OR_EQUAL: return "BITWISE_OR_EQUAL";
case TK_BITWISE_XOR: return "BITWISE_XOR";
case TK_BITWISE_XOR_EQUAL: return "BITWISE_XOR_EQUAL";
+ case TK_BITWISE_SHIFT_LEFT: return "BITWISE_SHIFT_LEFT";
+ case TK_BITWISE_SHIFT_RIGHT: return "BITWISE_SHIFT_RIGHT";
case TK_LOGICAL_AND: return "LOGICAL_AND";
case TK_LOGICAL_OR: return "LOGICAL_OR";
case TK_COUNT:
LEX_N_CHAR_TOKEN(TK_EQUAL, 1);
} break;
+ case '<': {
+ // < could be << or <=
+ char next = next_char(l);
+
+ switch (next) {
+ case '<': {
+ LEX_N_CHAR_TOKEN(TK_BITWISE_SHIFT_LEFT, 2);
+ } break;
+ case '=': {
+ LEX_N_CHAR_TOKEN(TK_LTE, 2);
+ } break;
+ }
+
+ LEX_N_CHAR_TOKEN(TK_LT, 1);
+ } break;
+ case '>': {
+ // > could be >> or >=
+ char next = next_char(l);
+
+ switch (next) {
+ case '>': {
+ LEX_N_CHAR_TOKEN(TK_BITWISE_SHIFT_RIGHT, 2);
+ } break;
+ case '=': {
+ LEX_N_CHAR_TOKEN(TK_GTE, 2);
+ } break;
+ }
+
+ LEX_N_CHAR_TOKEN(TK_GT, 1);
+ } break;
// NOTE: Sanity check
case ' ': {
consume_char(l);
TESTS_DIR="./tests/"
SUFFIX=".momo"
+
+# TODO: Use Colored logging
+
class Test:
expected_stdout = ''
expected_stderr = ''
if stop_on_error: exit(1)
else: continue
else:
+ if res.stdout != test.build_expected_stdout:
+ print('[FAILED]', file=sys.stderr)
+ print(f"build_Expected: >>>{test.build_expected_stdout}>>>")
+ print(f"But Got: >>>{res.stdout}>>>")
+ if stop_on_error: exit(1)
+ if res.stderr != test.build_expected_stderr:
+ print('[FAILED]', file=sys.stderr)
+ print(f"build_Expected: >>>{test.build_expected_stderr}>>>")
+ print(f"But Got: >>>{res.stderr}>>>")
+ if stop_on_error: exit(1)
passing_tests_count += 1
print("[PASS] ", end='')
o = False
operators.momo:16:0 [BITWISE_AND_EQUAL] '&='
operators.momo:17:0 [BITWISE_XOR] '^'
operators.momo:18:0 [BITWISE_XOR_EQUAL] '^='
-operators.momo:19:0 [BITWISE_NOT] '~'
-operators.momo:20:0 [BITWISE_OR] '|'
-operators.momo:21:0 [BITWISE_OR_EQUAL] '|='
-operators.momo:23:0 [NOT] '!'
-operators.momo:24:0 [NOT_EQUAL] '!='
-operators.momo:25:0 [LOGICAL_AND] '&&'
-operators.momo:26:0 [LOGICAL_OR] '||'
-operators.momo:28:0 [EQUAL] '='
-operators.momo:29:0 [EQUAL_EQUAL] '=='
+operators.momo:19:0 [BITWISE_SHIFT_LEFT] '<<'
+operators.momo:20:0 [BITWISE_SHIFT_RIGHT] '>>'
+operators.momo:21:0 [BITWISE_NOT] '~'
+operators.momo:22:0 [BITWISE_OR] '|'
+operators.momo:23:0 [BITWISE_OR_EQUAL] '|='
+operators.momo:25:0 [NOT] '!'
+operators.momo:26:0 [NOT_EQUAL] '!='
+operators.momo:27:0 [LOGICAL_AND] '&&'
+operators.momo:28:0 [LOGICAL_OR] '||'
+operators.momo:30:0 [EQUAL] '='
+operators.momo:31:0 [EQUAL_EQUAL] '=='
+operators.momo:33:0 [LT] '<'
+operators.momo:34:0 [GT] '>'
+operators.momo:35:0 [LTE] '<='
+operators.momo:36:0 [GTE] '>='
[INFO] OK
&=
^
^=
+<<
+>>
~
|
|=
=
==
+
+<
+>
+<=
+>=