I am having few issues replacing op in c_expr.
I thought of following possibilities:
a) create a new vec<cpp_token> vector new_code.
for each token in code
{
if token.type is not CPP_NAME
new_code.safe_push (token);
else
{
cpp_token new_token =
??? create new token of type CPP_NAME
with contents as name of operator ???
}
}
I tried to go this way, but am stuck with creating a new token type.
i started by:
cpp_token new_token = token; // get same attrs as token.
CPP_HASHNODE (new_token.val.node.node)->ident.str = name of operator.
CPP_HASHNODE (new_token.val.node.node)->ident.len = len of operator name.
name of operator is obtained from opers[i] in parse_for.
however this does not work because I guess
new_token = token, shallow copies
the token (default assignment operator, i didn't find an overloaded version).
b) create new struct c_expr_elem and use
vec<c_expr_elem> code, instead of vec<cpp_token> code;
sth like:
struct c_expr_elem
{
enum c_expr_elem_type { ID, TOKEN };
enum c_expr_elem_type type;
union {
cpp_token token;
const char *id;
};
};
while replacing op, compare token with op, and if it matches,
create a new c_expr_elem with type = ID, and id = name of operator.
This shall probably work, but shall require many changes to other parts
since we change c_expr::code.
I would like to hear any other suggestions.
Thanks,
Prathamesh.