This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [GSoC] replacing op in c_expr
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Prathamesh Kulkarni <bilbotheelffriend at gmail dot com>
- Cc: Diego Novillo <dnovillo at google dot com>, gcc <gcc at gcc dot gnu dot org>, Maxim Kuvyrkov <maxim dot kuvyrkov at linaro dot org>
- Date: Tue, 29 Jul 2014 12:59:23 +0200
- Subject: Re: [GSoC] replacing op in c_expr
- Authentication-results: sourceware.org; auth=none
- References: <CAJXstsDCU-8k_oV7VPUfg2BEE_bpTPzCxVeynJ1mVE1q5SkOCQ at mail dot gmail dot com>
On Mon, Jul 28, 2014 at 10:02 PM, Prathamesh Kulkarni
<bilbotheelffriend@gmail.com> wrote:
> 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.
Together with the vector of tokens recorded at parse_c_expr time
record a vector of token mappings (op -> plus, op2 -> ...) and do
the replacement at code-generation time where we also special-case
captures.
Yeah, it's a but unfortunate that c_expr parsing is done the way it
is done....
Richard.
> Thanks,
> Prathamesh.