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;