Print this page
12166 resync smatch to 0.6.1-rc1-il-3


  68         expr = alloc_tmp_expression(deref->pos, EXPR_DEREF);
  69         expr->op = op;
  70         expr->deref = deref;
  71         expr->member = member;
  72         expr->member_offset = -1;
  73         return expr;
  74 }
  75 
  76 struct expression *preop_expression(struct expression *expr, int op)
  77 {
  78         struct expression *preop;
  79 
  80         preop = alloc_tmp_expression(expr->pos, EXPR_PREOP);
  81         preop->unop = expr;
  82         preop->op = op;
  83         return preop;
  84 }
  85 
  86 struct expression *deref_expression(struct expression *expr)
  87 {


  88         return preop_expression(expr, '*');
  89 }
  90 
  91 struct expression *assign_expression(struct expression *left, int op, struct expression *right)
  92 {
  93         struct expression *expr;
  94 
  95         if (!right)
  96                 return NULL;
  97 
  98         /* FIXME: make this a tmp expression. */
  99         expr = alloc_expression(right->pos, EXPR_ASSIGNMENT);
 100         expr->op = op;
 101         expr->left = left;
 102         expr->right = right;
 103         return expr;
 104 }
 105 
 106 struct expression *binop_expression(struct expression *left, int op, struct expression *right)
 107 {


 145 
 146 struct expression *string_expression(char *str)
 147 {
 148         struct expression *ret;
 149         struct string *string;
 150         int len;
 151 
 152         len = strlen(str) + 1;
 153         string = (void *)__alloc_sname(4 + len);
 154         string->length = len;
 155         string->immutable = 0;
 156         memcpy(string->data, str, len);
 157 
 158         ret = alloc_tmp_expression(get_cur_pos(), EXPR_STRING);
 159         ret->wide = 0;
 160         ret->string = string;
 161 
 162         return ret;
 163 }
 164 











 165 static struct expression *get_expression_from_base_and_str(struct expression *base, const char *addition)
 166 {
 167         struct expression *ret = NULL;
 168         struct token *token, *prev, *end;
 169         char *alloc;
 170 
 171         if (addition[0] == '\0')
 172                 return base;
 173 
 174         alloc = alloc_string_newline(addition);
 175 
 176         token = tokenize_buffer(alloc, strlen(alloc), &end);
 177         if (!token)
 178                 goto free;
 179         if (token_type(token) != TOKEN_STREAMBEGIN)
 180                 goto free;
 181         token = token->next;
 182 
 183         ret = base;
 184         while (token_type(token) == TOKEN_SPECIAL &&




  68         expr = alloc_tmp_expression(deref->pos, EXPR_DEREF);
  69         expr->op = op;
  70         expr->deref = deref;
  71         expr->member = member;
  72         expr->member_offset = -1;
  73         return expr;
  74 }
  75 
  76 struct expression *preop_expression(struct expression *expr, int op)
  77 {
  78         struct expression *preop;
  79 
  80         preop = alloc_tmp_expression(expr->pos, EXPR_PREOP);
  81         preop->unop = expr;
  82         preop->op = op;
  83         return preop;
  84 }
  85 
  86 struct expression *deref_expression(struct expression *expr)
  87 {
  88         if (expr->type == EXPR_BINOP)
  89                 expr = preop_expression(expr, '(');
  90         return preop_expression(expr, '*');
  91 }
  92 
  93 struct expression *assign_expression(struct expression *left, int op, struct expression *right)
  94 {
  95         struct expression *expr;
  96 
  97         if (!right)
  98                 return NULL;
  99 
 100         /* FIXME: make this a tmp expression. */
 101         expr = alloc_expression(right->pos, EXPR_ASSIGNMENT);
 102         expr->op = op;
 103         expr->left = left;
 104         expr->right = right;
 105         return expr;
 106 }
 107 
 108 struct expression *binop_expression(struct expression *left, int op, struct expression *right)
 109 {


 147 
 148 struct expression *string_expression(char *str)
 149 {
 150         struct expression *ret;
 151         struct string *string;
 152         int len;
 153 
 154         len = strlen(str) + 1;
 155         string = (void *)__alloc_sname(4 + len);
 156         string->length = len;
 157         string->immutable = 0;
 158         memcpy(string->data, str, len);
 159 
 160         ret = alloc_tmp_expression(get_cur_pos(), EXPR_STRING);
 161         ret->wide = 0;
 162         ret->string = string;
 163 
 164         return ret;
 165 }
 166 
 167 struct expression *call_expression(struct expression *fn, struct expression_list *args)
 168 {
 169         struct expression *expr;
 170 
 171         expr = alloc_tmp_expression(fn->pos, EXPR_CALL);
 172         expr->fn = fn;
 173         expr->args = args;
 174 
 175         return expr;
 176 }
 177 
 178 static struct expression *get_expression_from_base_and_str(struct expression *base, const char *addition)
 179 {
 180         struct expression *ret = NULL;
 181         struct token *token, *prev, *end;
 182         char *alloc;
 183 
 184         if (addition[0] == '\0')
 185                 return base;
 186 
 187         alloc = alloc_string_newline(addition);
 188 
 189         token = tokenize_buffer(alloc, strlen(alloc), &end);
 190         if (!token)
 191                 goto free;
 192         if (token_type(token) != TOKEN_STREAMBEGIN)
 193                 goto free;
 194         token = token->next;
 195 
 196         ret = base;
 197         while (token_type(token) == TOKEN_SPECIAL &&