Print this page
12724 update smatch to 0.6.1-rc1-il-5


  10         static struct position none;
  11         struct expression *expr;
  12         struct statement *stmt;
  13 
  14         expr = last_ptr_list((struct ptr_list *)big_expression_stack);
  15         stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
  16         if (expr)
  17                 pos = expr->pos;
  18         else if (stmt)
  19                 pos = stmt->pos;
  20         else
  21                 pos = none;
  22         return pos;
  23 }
  24 
  25 struct expression *alloc_tmp_expression(struct position pos, int type)
  26 {
  27         struct expression *expr;
  28 
  29         expr = __alloc_tmp_expression(0);
  30         expr->smatch_flags |= Fake;
  31         expr->type = type;
  32         expr->pos = pos;
  33         return expr;
  34 }
  35 
  36 void free_tmp_expressions(void)
  37 {
  38         clear_tmp_expression_alloc();
  39 }
  40 
  41 struct expression *zero_expr(void)
  42 {
  43         struct expression *zero;
  44 
  45         zero = alloc_tmp_expression(get_cur_pos(), EXPR_VALUE);
  46         zero->value = 0;
  47         zero->ctype = &int_ctype;
  48         return zero;
  49 }
  50 


 283                 token = token->next;
 284                 if (token_type(token) != TOKEN_IDENT)
 285                         return NULL;
 286                 ret = deref_expression(ret);
 287                 ret = member_expression(ret,
 288                                         (prev->special == SPECIAL_DEREFERENCE) ? '*' : '.',
 289                                         token->ident);
 290                 token = token->next;
 291         }
 292 
 293         if (token_type(token) != TOKEN_STREAMEND)
 294                 return NULL;
 295 
 296         return ret;
 297 }
 298 
 299 void expr_set_parent_expr(struct expression *expr, struct expression *parent)
 300 {
 301         if (!expr)
 302                 return;
 303         if (parent->smatch_flags & Fake)
 304                 return;
 305 
 306         expr->parent = (unsigned long)parent | 0x1UL;
 307 }
 308 
 309 void expr_set_parent_stmt(struct expression *expr, struct statement *parent)
 310 {
 311         if (!expr)
 312                 return;
 313         expr->parent = (unsigned long)parent;
 314 }
 315 
 316 struct expression *expr_get_parent_expr(struct expression *expr)
 317 {
 318         if (!expr)
 319                 return NULL;
 320         if (!(expr->parent & 0x1UL))
 321                 return NULL;
 322         return (struct expression *)(expr->parent & ~0x1UL);
 323 }


  10         static struct position none;
  11         struct expression *expr;
  12         struct statement *stmt;
  13 
  14         expr = last_ptr_list((struct ptr_list *)big_expression_stack);
  15         stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
  16         if (expr)
  17                 pos = expr->pos;
  18         else if (stmt)
  19                 pos = stmt->pos;
  20         else
  21                 pos = none;
  22         return pos;
  23 }
  24 
  25 struct expression *alloc_tmp_expression(struct position pos, int type)
  26 {
  27         struct expression *expr;
  28 
  29         expr = __alloc_tmp_expression(0);
  30         expr->smatch_flags |= Tmp;
  31         expr->type = type;
  32         expr->pos = pos;
  33         return expr;
  34 }
  35 
  36 void free_tmp_expressions(void)
  37 {
  38         clear_tmp_expression_alloc();
  39 }
  40 
  41 struct expression *zero_expr(void)
  42 {
  43         struct expression *zero;
  44 
  45         zero = alloc_tmp_expression(get_cur_pos(), EXPR_VALUE);
  46         zero->value = 0;
  47         zero->ctype = &int_ctype;
  48         return zero;
  49 }
  50 


 283                 token = token->next;
 284                 if (token_type(token) != TOKEN_IDENT)
 285                         return NULL;
 286                 ret = deref_expression(ret);
 287                 ret = member_expression(ret,
 288                                         (prev->special == SPECIAL_DEREFERENCE) ? '*' : '.',
 289                                         token->ident);
 290                 token = token->next;
 291         }
 292 
 293         if (token_type(token) != TOKEN_STREAMEND)
 294                 return NULL;
 295 
 296         return ret;
 297 }
 298 
 299 void expr_set_parent_expr(struct expression *expr, struct expression *parent)
 300 {
 301         if (!expr)
 302                 return;
 303         if (parent && parent->smatch_flags & Tmp)
 304                 return;
 305 
 306         expr->parent = (unsigned long)parent | 0x1UL;
 307 }
 308 
 309 void expr_set_parent_stmt(struct expression *expr, struct statement *parent)
 310 {
 311         if (!expr)
 312                 return;
 313         expr->parent = (unsigned long)parent;
 314 }
 315 
 316 struct expression *expr_get_parent_expr(struct expression *expr)
 317 {
 318         if (!expr)
 319                 return NULL;
 320         if (!(expr->parent & 0x1UL))
 321                 return NULL;
 322         return (struct expression *)(expr->parent & ~0x1UL);
 323 }