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