Static Chain Argument in call_expr
Duncan Sands
baldrick@free.fr
Thu Mar 8 16:02:00 GMT 2007
> in tree.def, in DEFTREECODE for call_expr, it says operand 2 is the
> static chain argument, or NULL. Can someone tell me or reference me to
> what static chain argument is?
It's for nested functions, eg
int parent (int n)
{
int child (int m) { return m * n; }
return child (2);
}
Notice how child using a variable of parent, namely
the parameter n. This gets lowered to something like:
struct frame { int n; };
int child (struct frame *static_chain, int m) { return m * static_chain->n; }
int parent (int n)
{
struct frame FRAME;
FRAME.n = n;
return child (&FRAME, 2);
}
Ciao,
Duncan.
More information about the Gcc
mailing list