23 Sep 2003 13:26:09 -0400

Related articles |
---|

avoiding abandoned stack values steve@heggood.com (steve) (2003-09-23) |

From: | "steve" <steve@heggood.com> |

Newsgroups: | comp.compilers |

Date: | 23 Sep 2003 13:26:09 -0400 |

Organization: | Posted via Supernews, http://www.supernews.com |

Keywords: | code, optimize, question |

Posted-Date: | 23 Sep 2003 13:26:08 EDT |

Hi all!

the expression:

x+1;

alone has no need to leave a stack value but when used as y=x+1; it

does. Assuming I leave a stack value for each expression, a problem

results.

Since y and x+1 are both expressions and are always candidates for

rvals, and it is instictive to assume that a stack value should be

produced each time an expression is reduced. What is the best way to

cleanup unconsumed stack values? One of my early attempts was to emit

a pop each time a sem-colon was encountered. This solves some of the

problems, but is clearly not the solution. Even if it were,

inefficient run-time would result due to the extra instuctions.

I am working in the flex-bison arena. The target language is a report

writer using C-like constructs with built-in extensions for calls into

database API's. I'm starting with MYSQL, and expect to tackle other

db's once I get the core working.

I am familiar with the use of stack frames which eliminate the problem

in procedure calls, but the problem I have stated is

Thanks for any guidelines from those who have already overcome!

-steve-

[Early C compilers evaluated expressions in three ways, depending on

whether it needed the value, the side effects, or the truth value.

Top level expressions are evaluated for side effect, internal

subexpressions for value, expressions in if/while/for statements or

operands of || and && for truth value. You have to do something like

that. -John]

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.