282 __get_variable_from_expr(sym_ptr, buf, expr->left, len, complicated, no_parens);
283 snprintf(tmp, sizeof(tmp), " %s ", show_special(expr->op));
284 append(buf, tmp, len);
285 }
286 __get_variable_from_expr(NULL, buf, expr->right, len, complicated, no_parens);
287 if (array_expr)
288 append(buf, "]", len);
289 return;
290 }
291 case EXPR_VALUE: {
292 sval_t sval = {};
293 char tmp[25];
294
295 *complicated = 1;
296 if (!get_value(expr, &sval))
297 return;
298 snprintf(tmp, 25, "%s", sval_to_numstr(sval));
299 append(buf, tmp, len);
300 return;
301 }
302 case EXPR_STRING:
303 append(buf, "\"", len);
304 if (expr->string)
305 append(buf, expr->string->data, len);
306 append(buf, "\"", len);
307 return;
308 case EXPR_CALL: {
309 struct expression *tmp;
310 int i;
311
312 *complicated = 1;
313 __get_variable_from_expr(NULL, buf, expr->fn, len, complicated, no_parens);
314 append(buf, "(", len);
315 i = 0;
316 FOR_EACH_PTR(expr->args, tmp) {
317 if (i++)
318 append(buf, ", ", len);
319 __get_variable_from_expr(NULL, buf, tmp, len, complicated, no_parens);
320 } END_FOR_EACH_PTR(tmp);
321 append(buf, ")", len);
1049 return i;
1050 i++;
1051 } END_FOR_EACH_PTR(tmp);
1052 return -1;
1053 }
1054
1055 int get_param_num(struct expression *expr)
1056 {
1057 struct symbol *sym;
1058 char *name;
1059
1060 if (!cur_func_sym)
1061 return -1;
1062 name = expr_to_var_sym(expr, &sym);
1063 free_string(name);
1064 if (!sym)
1065 return -1;
1066 return get_param_num_from_sym(sym);
1067 }
1068
1069 int ms_since(struct timeval *start)
1070 {
1071 struct timeval end;
1072 double diff;
1073
1074 gettimeofday(&end, NULL);
1075 diff = (end.tv_sec - start->tv_sec) * 1000.0;
1076 diff += (end.tv_usec - start->tv_usec) / 1000.0;
1077 return (int)diff;
1078 }
1079
1080 int parent_is_gone_var_sym(const char *name, struct symbol *sym)
1081 {
1082 if (!name || !sym)
1083 return 0;
1084
1085 if (parent_is_null_var_sym(name, sym) ||
1086 parent_is_free_var_sym(name, sym))
1087 return 1;
1088 return 0;
|
282 __get_variable_from_expr(sym_ptr, buf, expr->left, len, complicated, no_parens);
283 snprintf(tmp, sizeof(tmp), " %s ", show_special(expr->op));
284 append(buf, tmp, len);
285 }
286 __get_variable_from_expr(NULL, buf, expr->right, len, complicated, no_parens);
287 if (array_expr)
288 append(buf, "]", len);
289 return;
290 }
291 case EXPR_VALUE: {
292 sval_t sval = {};
293 char tmp[25];
294
295 *complicated = 1;
296 if (!get_value(expr, &sval))
297 return;
298 snprintf(tmp, 25, "%s", sval_to_numstr(sval));
299 append(buf, tmp, len);
300 return;
301 }
302 case EXPR_FVALUE: {
303 sval_t sval = {};
304 char tmp[25];
305
306 *complicated = 1;
307 if (!get_value(expr, &sval))
308 return;
309 snprintf(tmp, 25, "%s", sval_to_numstr(sval));
310 append(buf, tmp, len);
311 return;
312 }
313 case EXPR_STRING:
314 append(buf, "\"", len);
315 if (expr->string)
316 append(buf, expr->string->data, len);
317 append(buf, "\"", len);
318 return;
319 case EXPR_CALL: {
320 struct expression *tmp;
321 int i;
322
323 *complicated = 1;
324 __get_variable_from_expr(NULL, buf, expr->fn, len, complicated, no_parens);
325 append(buf, "(", len);
326 i = 0;
327 FOR_EACH_PTR(expr->args, tmp) {
328 if (i++)
329 append(buf, ", ", len);
330 __get_variable_from_expr(NULL, buf, tmp, len, complicated, no_parens);
331 } END_FOR_EACH_PTR(tmp);
332 append(buf, ")", len);
1060 return i;
1061 i++;
1062 } END_FOR_EACH_PTR(tmp);
1063 return -1;
1064 }
1065
1066 int get_param_num(struct expression *expr)
1067 {
1068 struct symbol *sym;
1069 char *name;
1070
1071 if (!cur_func_sym)
1072 return -1;
1073 name = expr_to_var_sym(expr, &sym);
1074 free_string(name);
1075 if (!sym)
1076 return -1;
1077 return get_param_num_from_sym(sym);
1078 }
1079
1080 struct symbol *get_param_sym_from_num(int num)
1081 {
1082 struct symbol *sym;
1083 int i;
1084
1085 if (!cur_func_sym)
1086 return NULL;
1087
1088 i = 0;
1089 FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, sym) {
1090 if (i++ == num)
1091 return sym;
1092 } END_FOR_EACH_PTR(sym);
1093 return NULL;
1094 }
1095
1096 int ms_since(struct timeval *start)
1097 {
1098 struct timeval end;
1099 double diff;
1100
1101 gettimeofday(&end, NULL);
1102 diff = (end.tv_sec - start->tv_sec) * 1000.0;
1103 diff += (end.tv_usec - start->tv_usec) / 1000.0;
1104 return (int)diff;
1105 }
1106
1107 int parent_is_gone_var_sym(const char *name, struct symbol *sym)
1108 {
1109 if (!name || !sym)
1110 return 0;
1111
1112 if (parent_is_null_var_sym(name, sym) ||
1113 parent_is_free_var_sym(name, sym))
1114 return 1;
1115 return 0;
|