This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Embedding a REPL in a Java application


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


Attachment: SchemeReplTest.java
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]