shithub: scc

Download patch

ref: 235aee1ffddb12ecbab5823365199931283e5ea4
parent: b4d92e02bc635472f47ca877add11b4581392238
author: Roberto E. Vargas Caballero <[email protected]>
date: Tue Apr 15 09:24:59 EDT 2014

Add unary *

These operator take the content of a pointer.

--- a/expr.c
+++ b/expr.c
@@ -395,7 +395,7 @@
 		return incdec(unary(), op); /* TODO: unary or cast? */
 	case '!': op = OEXC; break;
 	case '&': op = OADDR; break;
-	/* TODO: case '*': */
+	case '*': op = OPTR; break;
 	case '+': op = OADD; break;
 	case '~': op = OCPL; break;
 	case '-':  op = ONEG; break;
@@ -408,6 +408,17 @@
 	t = tp->op;
 
 	switch (op) {
+	case OPTR:
+		switch (t) {
+		case ARY: case FTN:
+			np = addr2ptr(np);
+		case PTR:
+			tp = tp->type;
+			break;
+		default:
+			goto bad_operand;
+		}
+		break;
 	case OADDR:
 		if (!np->b.lvalue)
 			goto no_lvalue;