This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
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