139 mtag_t arg_tag;
140 mtag_t alias;
141 int arg_offset;
142
143 arg = get_argument_from_call_expr(expr->args, param);
144 if (!arg)
145 return;
146
147 gen_expr = gen_expression_from_key(arg, key);
148 if (!gen_expr)
149 return;
150
151 get_absolute_rl(gen_expr, &rl);
152
153 if (!create_mtag_alias(tag, expr, &alias))
154 return;
155
156 // insert_mtag_data(alias, offset, rl);
157
158 // FIXME: is arg_offset handled correctly?
159 if (expr_to_mtag_offset(gen_expr, &arg_tag, &arg_offset) && arg_offset == 0)
160 sql_insert_mtag_map(arg_tag, -offset, alias);
161 }
162
163 static void call_does_mtag_assign(struct expression *expr, int param, char *key, char *value)
164 {
165 char *p;
166 mtag_t tag;
167 int offset;
168
169 while (expr->type == EXPR_ASSIGNMENT)
170 expr = strip_expr(expr->right);
171 if (expr->type != EXPR_CALL)
172 return;
173
174 tag = strtoul(value, NULL, 10);
175 p = strchr(value, '+');
176 if (!p)
177 return;
178 offset = atoi(p + 1);
179
180 // save_mtag_to_map(expr, tag, offset, param, key, value);
|
139 mtag_t arg_tag;
140 mtag_t alias;
141 int arg_offset;
142
143 arg = get_argument_from_call_expr(expr->args, param);
144 if (!arg)
145 return;
146
147 gen_expr = gen_expression_from_key(arg, key);
148 if (!gen_expr)
149 return;
150
151 get_absolute_rl(gen_expr, &rl);
152
153 if (!create_mtag_alias(tag, expr, &alias))
154 return;
155
156 // insert_mtag_data(alias, offset, rl);
157
158 // FIXME: is arg_offset handled correctly?
159 if (expr_to_mtag_offset(gen_expr, &arg_tag, &arg_offset) &&
160 arg_offset < MTAG_OFFSET_MASK)
161 sql_insert_mtag_map(alias, offset, arg_tag, arg_offset);
162 }
163
164 static void call_does_mtag_assign(struct expression *expr, int param, char *key, char *value)
165 {
166 char *p;
167 mtag_t tag;
168 int offset;
169
170 while (expr->type == EXPR_ASSIGNMENT)
171 expr = strip_expr(expr->right);
172 if (expr->type != EXPR_CALL)
173 return;
174
175 tag = strtoul(value, NULL, 10);
176 p = strchr(value, '+');
177 if (!p)
178 return;
179 offset = atoi(p + 1);
180
181 // save_mtag_to_map(expr, tag, offset, param, key, value);
|