Re: Exception: Optimistic invariant violated but no fallback expression

"Ben Simon" <[email protected]> Mon, 6 Nov 2006 22:56:06 -0500
Newsgroups gmane.comp.java.sisc.user
Message-ID <[email protected]>
Matthias -

I tried setting to |hedged-inlining| but that made no difference.

I then started tearing apart my code looking for the expression that was
breaking things. Along the way I realized that I was sending in a procedure
where a list was expected. I fixed this error and the exception went away.

Sorry for the false alarm.

Thanks again.

-Ben

On 11/6/06, Matthias Radestock <[email protected]> wrote:
>
> "Ben Simon" <[email protected]> writes:
>
> > I'm developing a web app using SISCweb.  Tonight I was working with one
> of
> > the sisclets, and managed to encounter the following error.  I've never
> seen
> > anything like, and it looks awfully scary. Any suggestions of what it
> means,
> > or how I should fix it?  I'm just curious if this means anything to
> someone,
> > if not, I'll just start debugging it like it were any other issue.
> >
> > sisc.nativefun.PrimRuntimeException: Optimistic invariant violated but
> > no fallback expression.
> >       sisc.data.Procedure.throwPrimException(Unknown Source)
> >       sisc.exprs.fp.FixedAppExp_0.revert(Unknown Source)
> >       sisc.exprs.fp.FixedAppExp_0.forceRevert(Unknown Source)
> >       sisc.exprs.fp.FixedAppExp_0.getValue(Unknown Source)
> >       sisc.exprs.FillRibExp.eval(Unknown Source)
> >       sisc.interpreter.Interpreter.interpret(Unknown Source)
> >       sisc.interpreter.Interpreter.interpret(Unknown Source)
> >       sisc.interpreter.Interpreter.eval(Unknown Source)
> >       siscweb.web.SISCAdapterServlet$1.execute(SISCAdapterServlet.java
> :160)
> >       sisc.interpreter.Context.execute(Unknown Source)
> >       sisc.interpreter.Context.execute(Unknown Source)
> >       siscweb.web.SISCAdapterServlet.doGet(SISCAdapterServlet.java:154)
> >       siscweb.web.SISCAdapterServlet.doPost(SISCAdapterServlet.java:179)
> >       javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
> >       javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>
> Simon,
>
> I can give you some background to the error.
>
> When the SISC compiler (to micro expressions) optimises code it
> sometimes does so on the basis of conditions that hold at the time but
> can later change. A typical example is inlining of calls to primitives,
> which can become invalid if the primitives get re-defined as ordinary
> functions. When such code is executed and the conditions have change
> then the code gets unoptimised. This involves construction of a
> replacement micro expression and informing the surrounding expression
> (the 'host') of the change. Unoptimisation also happens when an error is
> encountered, so that we can produce stack traces as if optimisation had
> never occurred.
>
> In the above example a zero-operand application, e.g. something like
> (foo) is being unoptimised, either because |foo| is undefined or some
> error occurred when it was called. However, the micro expression does
> not have a host. That shouldn't happen. Notice that we are in the
> process of evaluating a FillRibExp. That is a micro expression for
> evaluating the operands of an application, i.e. we are actually in the
> process of evaluating something like (bar (foo)). The host of such a
> micro expression should always be the surrounding micro-expression.
>
> This most likely is caused by a bug in the SISC compiler/optimiser, or
> the unoptimiser. It must be a fairly unusual case though since we
> haven't encountered it before. Another possibility is that the host
> ended up being null due to some deserialisation problem. Or you had
> the |hedged-inlining| dynamic parameter set to #f when the scheme code
> was being compiled, which causes host references to be dropped.
>
> The latter actually looks like the likely cause. It appears that we set
> |hedged-inlining| to #f during heap build (see top of
> init.{scm,sce}). That is probably safe in most cases since SISC's
> environment model prevents mutation of system bindings by user
> code, which is the main cause for optimisation assumptions changing
> dynamically. However, we also unoptimise on error, which will break if
> we don't have host references.
>
> So as a first try I'd recommend changing the hedged-inlining setting in
> init.{scm,sce}. If that doesn't fix it then I suggest you
>
> 1) find out what expression on your source code the evaluation
> corresponds to,
>
> 2) determine why it is being unoptimised,
>
> 3) watch what happens to the 'host' member variable to figure out why it
> ends up being null at the time of unoptimisation.
>
>
> Matthias
>



-- 
Ben Simon
My blog: http://benjisimon.blogspot.com
Have a software idea?: http://i2x.blogspot.com

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

_______________________________________________
Sisc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sisc-users