ref: 53e36437d86d46131b359596f1e62ff9f3166a0b
parent: 1f93655144cbf4a81858966ea37b38a792a16aa5
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Sun Aug 10 19:29:39 EDT 2014
Add shift operators to cc2
--- a/cc2/cc2.h
+++ b/cc2/cc2.h
@@ -71,6 +71,8 @@
#define OINC ';'
#define OMOD '%'
#define ODIV '/'
+#define OSHL 'l'
+#define OSHR 'r'
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 OINC:
case OADD: case OASSIG: case OMOD: case ODIV:
+ case OSHL: case OSHR:
break;
default:
abort();
@@ -192,6 +193,7 @@
break;
case OINC:
case OASSIG: case OADD: case OSUB: case OMOD: case ODIV:
+ case OSHL: case OSHR:
xaddable(lp);
xaddable(rp);
break;
--- a/cc2/parser.c
+++ b/cc2/parser.c
@@ -250,6 +250,8 @@
['*'] = operator,
['/'] = operator,
[':'] = operator,
+ ['l'] = operator,
+ ['r'] = operator,
[';'] = increment,
['A'] = variable,
['T'] = variable,
--
⑨