Print this page
11506 smatch resync
@@ -163,11 +163,11 @@
}
struct expression *gen_expression_from_key(struct expression *arg, const char *key)
{
struct expression *ret;
- struct token *token, *end;
+ struct token *token, *prev, *end;
const char *p = key;
char buf[4095];
char *alloc;
size_t len;
@@ -187,16 +187,19 @@
return NULL;
token = token->next;
ret = arg;
while (token_type(token) == TOKEN_SPECIAL &&
- token->special == SPECIAL_DEREFERENCE) {
+ (token->special == SPECIAL_DEREFERENCE || token->special == '.')) {
+ prev = token;
token = token->next;
if (token_type(token) != TOKEN_IDENT)
return NULL;
ret = deref_expression(ret);
- ret = member_expression(ret, '*', token->ident);
+ ret = member_expression(ret,
+ (prev->special == SPECIAL_DEREFERENCE) ? '*' : '.',
+ token->ident);
token = token->next;
}
if (token_type(token) != TOKEN_STREAMEND)
return NULL;