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.