Embedding a REPL in a Java application

Jamison Hope jrh@theptrgroup.com
Sun Nov 15 21:44:00 GMT 2009


On Nov 15, 2009, at 11:31 AM, Per Bothner wrote:

> On 11/15/2009 07:47 AM, Jamison Hope wrote:
>> It sounds like for this to work, I would need to create and hold  
>> onto a
>> special initial ReplDocument (with shared=false) and then all  
>> subsequent
>> ReplDocument instances I would create from it with the proposed copy
>> constructor.
>
> It seems like it shoudl work for your application to create and hold
> on to:
>
> Language language = Language.getDefaultLanguage();
> // or whatever.
> Environment environment = Environment.getCurrent();
>
> Then when you create a new ReplDocument you do:
>
>  new ReplDocument(language, environment, true)
>
> I.e. always set shared.

I tried that, actually. It led to a stream of  
ArrayIndexOutOfBoundsExceptions like this:

Exception in thread "AWT-EventQueue-0"  
java.lang.ArrayIndexOutOfBoundsException: 24387
	at gnu.lists.StableVector.allocPositionIndex(StableVector.java:111)
	at gnu.lists.StableVector.createPos(StableVector.java:123)
	at gnu.lists.SeqPosition.<init>(SeqPosition.java:55)
	at gnu.kawa.swingviews.GapPosition.<init>(SwingContent.java:116)
	at gnu.kawa.swingviews.SwingContent.createPosition(SwingContent.java: 
104)
	at  
javax.swing.text.AbstractDocument.createPosition(AbstractDocument.java: 
836)
	at javax.swing.text.AbstractDocument 
$LeafElement.<init>(AbstractDocument.java:2508)
	at  
javax 
.swing.text.AbstractDocument.createLeafElement(AbstractDocument.java: 
1280)
	at javax.swing.text.DefaultStyledDocument 
$ElementBuffer.fractureDeepestLeaf(DefaultStyledDocument.java:2189)
	at javax.swing.text.DefaultStyledDocument 
$ElementBuffer.insertUpdate(DefaultStyledDocument.java:1382)
	at javax.swing.text.DefaultStyledDocument 
$ElementBuffer.insert(DefaultStyledDocument.java:1259)
	at  
javax 
.swing 
.text.DefaultStyledDocument.insertUpdate(DefaultStyledDocument.java:630)
	at  
javax 
.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java: 
751)
	at  
javax.swing.text.AbstractDocument.insertString(AbstractDocument.java: 
711)
	at kawa.ReplDocument.insertString(ReplDocument.java:127)
	at kawa.ReplDocument$3.run(ReplDocument.java:150)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
	at  
java 
.awt 
.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java: 
269)
	at  
java 
.awt 
.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java: 
190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java: 
184)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java: 
176)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

until finally an OutOfMemoryError.

I'm attaching a pared-down test program which triggers it for me. If  
you change "true" to "false" in the ReplDocument contructor call, then  
the REPL works normally (but in a not-shared manner).

-Jamie

--
Jamison Hope
The PTR Group
www.theptrgroup.com


-------------- next part --------------
A non-text attachment was scrubbed...
Name: SchemeReplTest.java
Type: application/octet-stream
Size: 1287 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/kawa/attachments/20091115/6143250d/attachment.obj>


More information about the Kawa mailing list