diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-03-26 11:07:42 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-07 21:01:30 -0700 |
| commit | 214912ea0d1ab7ae692f2d7e0d45b080f4273eb6 (patch) | |
| tree | eb3f96cbb33a05b9ab6810fa96439b849a9f8fab /expression.c | |
| parent | 16b4f3946def0869d1afa437763915d03aefff9c (diff) | |
| download | sparse-dev-214912ea0d1ab7ae692f2d7e0d45b080f4273eb6.tar.gz | |
Clean up type expression syntax.
We now require square brackets around the type, to avoid
any confusion with casts or variable declarations:
if ([typeof(x)] == [int])
...
Diffstat (limited to 'expression.c')
| -rw-r--r-- | expression.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/expression.c b/expression.c index 15838745..dc022356 100644 --- a/expression.c +++ b/expression.c @@ -211,8 +211,8 @@ struct token *primary_expression(struct token *token, struct expression **tree) * if (typeof(a) == int) .. */ if (sym && sym->namespace == NS_TYPEDEF) { - next = typename(token, &sym); - expr->type = EXPR_TYPE; + warn(token->pos, "typename in expression"); + sym = NULL; } expr->symbol_name = token->ident; expr->symbol = sym; @@ -233,6 +233,13 @@ struct token *primary_expression(struct token *token, struct expression **tree) token = parens_expression(token, &expr->unop, "in expression"); break; } + if (token->special == '[' && lookup_type(token->next)) { + expr = alloc_expression(token->pos, EXPR_TYPE); + token = typename(token->next, &expr->symbol); + token = expect(token, ']', "in type expression"); + break; + } + default: ; } |
