procedure coc_codegen_expression(c : TcocILCode);
var
i : Integer;
pf0 : PvmpfConvContext;
postfixdata : array[0..9999] of TcocILCode;
cur : TcocILCode;
begin
// create postfix representation
pf0 := vmpf_ConvContextGen;
vmpf_SetConvCBGetID(pf0, @cocOnGetTalID);
vmpf_SetConvCBGetHigherPrec(pf0, @cocOnGetHigherPrec);
for i:=0 to c.GetCodeCount-1 do
vmpf_AddConvToken(pf0, c.GetCode(i));
vmpf_ConvTokenFlush(pf0);
vmpf_ConvTokenCopy(pf0, @postfixdata[0]);
// generate code for each token
for i:=0 to vmpf_GetConvTokenCount(pf0)-1 do
begin
cur := postfixdata[i];
case postfixdata[i].Kind of
tckOperator : coc_codegen_emitoperator_clean(cur, 'i', '');
tckIdentresolve : coc_codegen_emitident(cur);
tckConstant : coc_codegen_emitconst(cur);
tckExpression : coc_codegen_expression(cur);
end;
end;
// free postfix context
vmpf_ConvContextDel(pf0);
end;