[armedbear-devel] Changes to ConditionThrowable

logicmoo at gmail.com logicmoo at gmail.com
Sun Nov 8 04:16:39 UTC 2009


Yep I had *improperly* tried to divide the three type of ControlTransfers
They are indeed undistinguishable by class.  

In fact my now I remember:

3rd party code didn't catch the ControlTransfers but instead override  ERROR/%DEBUGGER-HOOK-FUNCTION

Symbol sym = Lisp.PACKAGE_CL_USER.findAccessibleSymbol("ERROR");           
sym.setSymbolFunction(new CSThrowError(sym.getSymbolFunction()));     
sym = Lisp.PACKAGE_SYS.findAccessibleSymbol("%DEBUGGER-HOOK-FUNCTION"); 
sym.setSymbolFunction(new CSThrowError(sym.getSymbolFunction())); 


Then had to decide to handle it with inspecting the arguments  with lines: 32-54 of 

http://code.google.com/p/opensim4opencog/source/browse/trunk/Cogbot/ScriptEngines/ABCLInterpreter.cs

Thanks for he clarity.


----- Original Message ----- 
From: "Erik Huelsmann" <ehuels at gmail.com>
To: <dmiles at users.sourceforge.net>
Sent: Friday, November 06, 2009 11:39 PM
Subject: Re: [armedbear-devel] Changes to ConditionThrowable


Hi Douglas,

On Sat, Nov 7, 2009 at 1:33 AM,  <logicmoo at gmail.com> wrote:
> My two cents:
>
> Those who call Lisp.eval(...) or mySymbol.execute() should at least be
> capable of catching RuntimeCondition But should not be forced to also catch
> Go and Throw
>
> The way it is now..
> I have a Primitive that I implement outside of ABCL.
> It catches certain condition throwables but should not have to catch
> Throw/Go
>
> which means:
> ABCL calls my primitive.
> My code is calling back into ABCL
> I must catch ConditionThrowable.
> I must also check to see if ConditionThrowable instanceof Go or instanceof
> Throw.
> If one of these things are true, I have to rethrow the Go or Throw
> However I do not rethrow SeriousCondtions.. I have a different handler.
> that may change the type of condition.
>
>
> I suggest dividing the ontology of ConditionThrowable into two types:
>
> ControlTransfer
> RuntimeCondition
> Derive them both from RuntimeException if you'd like.

The thing is: SeriousCondition is never thrown in terms of Java
'throw': it's either signalled or error-ed, which don't use the Java
throw primitive. I think these conditions really *are*
transfer-of-control events.

Thanks for your feedback!

Bye,

Erik.




More information about the armedbear-devel mailing list