<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Tony, does m3front tend or tend not to ask the backend<br>to evaluate the same expression multiple times, or does it<br>tend to allocate a temporary if it would do so?<br><br><br>It's just that my current approach, if not given temporaries,<br>may tend to evaluate expressions multiple times that either<br>must not (for correctness) or ought not (for efficiency).<br><br>I guess I'll learn soon enough.<br><br><br>My current "stack" is just TEXTs.<br>Very simple.<br><br><br>If I had to eliminate multiple evaluations I'd have to consider<br>a few alternatives:<br><br><br>1) for every, push, do something like<br><br><br>"{ T s0 = expr;"<br><br><br>for every pop "}"<br><br><br>That would require I always "use before pop", not<br>"use not after pop" as I tend do. That isn't always easy.<br>The above is also wrong. Instead of "s0", it'd be "sN"<br>where N is the current stack depth, then "get(n)" would,<br>like, get N-n.<br><br><br>2) Alternatively, if I knew the maximum stack depth such<br>as by making two passes, I could have an array of unions.<br>That would make casts less verbose -- they'd be via union member access,<br>if no size change.<br><br><br>2b) I could maintain a stack pointer at compile time or runtime.<br>Runtime easier but slower.<br><br><br>I still might want to record types with my texts, like to avoid extra casts.<br>
Or maybe m3front does that already?<br>
<br><br>Anyway, for now I can ignore it. I'm just starting in on function<br>calls, and I still haven't handled nested functions.<br><br><br><br> - Jay<br>                                          </div></body>
</html>