shithub: scc

Download patch

ref: b20db931867df763206ca9856fc0ec2a34af54cb
parent: 4f051c93ff2993d15cce71a5097fcb172a1c3df8
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Mon Aug 11 18:44:56 EDT 2014

Add relational operators

--- a/cc2/cc2.h
+++ b/cc2/cc2.h
@@ -78,6 +78,12 @@
 #define OBXOR     '^'
 #define OPTR      '@'
 #define OADDR     'a'
+#define OLT       '<'
+#define OGT       '>'
+#define OGE       ']'
+#define OLE       '['
+#define OEQ       '='
+#define ONE       '!'
 
 extern void error(unsigned nerror, ...);
 extern void genaddable(Node *list[]);
--- a/cc2/cgen.c
+++ b/cc2/cgen.c
@@ -126,6 +126,7 @@
 	switch (np->op) {
 	case OPTR:   case OADDR:
 	case OINC:
+	case OLT:    case OGT:   case OGE:    case OLE:  case OEQ:  case ONE:
 	case OADD:   case OSUB:  case OASSIG: case OMOD: case ODIV:
 	case OSHL:   case OSHR:
 	case OBAND:  case OBOR:  case OBXOR:
@@ -196,6 +197,7 @@
 	case OPTR:   case OADDR:
 		xaddable(lp);
 		break;
+	case OLT:    case OGT:  case OGE:  case OLE:  case OEQ:  case ONE:
 	case OINC:
 	case OASSIG: case OADD: case OSUB: case OMOD: case ODIV:
 	case OSHL:   case OSHR:
--- a/cc2/parser.c
+++ b/cc2/parser.c
@@ -294,6 +294,12 @@
 	['#'] = immediate,
 	['@'] = unary,
 	['a'] = unary,
+	['<'] = operator,
+	['>'] = operator,
+	[']'] = operator,
+	['['] = operator,
+	['='] = operator,
+	['!'] = operator,
 	['\177'] = NULL
 };
 
--