[e-cvs] cvs commit: e/src/jsrc/org/erights/e/ui/elmer EInterpAdapter.java ElmerMain.java

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Sat, 18 Aug 2001 01:19:38 -0400


markm       01/08/18 01:19:38

  Modified:    src/esrc/org/erights/e/elang/cmd cmdMakerMaker.updoc
               src/esrc/scripts eBrowser.e elmer.e
               src/jsrc/org/erights/e/elang/evm Evaluator.java
               src/jsrc/org/erights/e/elib/ref Ref.java
               src/jsrc/org/erights/e/elib/serial Serializer.java
               src/jsrc/org/erights/e/elib/tables ConstMap.java
                        FlexList.java FlexMap.java
               src/jsrc/org/erights/e/ui/elmer EInterpAdapter.java
                        ElmerMain.java
  Added:       src/esrc/scripts elmer2.e
  Log:
  cmdLoop based elmer2 begins

Revision  Changes    Path
1.2       +0 -13     e/src/esrc/org/erights/e/elang/cmd/cmdMakerMaker.updoc

Index: cmdMakerMaker.updoc
===================================================================
RCS file: /cvs/e/src/esrc/org/erights/e/elang/cmd/cmdMakerMaker.updoc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- cmdMakerMaker.updoc	2001/08/17 05:48:57	1.1
+++ cmdMakerMaker.updoc	2001/08/18 05:19:38	1.2
@@ -56,16 +56,3 @@
     #   e`3 floorDivide(0)` eval([org.erights.e.elang.scope.ScopeImpl@5dffbd])
     
     ? 
-
-
-
-
-
-
-
-
-
-
-
-
-



1.31      +12 -9     e/src/esrc/scripts/eBrowser.e

Index: eBrowser.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eBrowser.e,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- eBrowser.e	2001/08/13 22:07:52	1.30
+++ eBrowser.e	2001/08/18 05:19:38	1.31
@@ -154,7 +154,7 @@
         if (strippedLine size() == 0) {
             buf push('\n')
             continuationIndent := ""
-		} else if (strippedLine startsWith("//") || 
+		} else if (strippedLine startsWith("//") ||
 			strippedLine startsWith("#")) {
 			buf append(continuationIndent)
 			buf append(tab * flowIndentLevel)
@@ -274,9 +274,10 @@
     def eui__uriGetter := <unsafe:org.erights.e.ui.*>
     def EditGroupMaker := <eui:jed.EditGroup>
     def ElmerMainMaker := <eui:elmer.ElmerMain>
+    def EInterpAdapterMaker := <eui:elmer.EInterpAdapter>
 
     def group := EditGroupMaker new(false)
-    def first := ElmerMainMaker new(group)
+    def first := ElmerMainMaker new(group, EInterpAdapterMaker)
     first setVisible(true)
 }
 
@@ -375,8 +376,8 @@
                     traceln("floating syntax exception")
                 }
             } else {
-                resultPane append("\n# problem: " + problem + "\n\n" + 
-                                  problem eStack() + "\n\n" + 
+                resultPane append("\n# problem: " + problem + "\n\n" +
+                                  problem eStack() + "\n\n" +
                                   problem javaStack())
             }
             traceln("problem shown")
@@ -484,7 +485,7 @@
     #    "Sync Outline","refreshFuncs",eBrowser)
     def elmerButton :=  newToolButton(
         <icons:elmer.gif>,
-        "Scratchpad","scratchpad",eBrowser)
+        "Elmer scratchpad","scratchpad",eBrowser)
     def runHiLiteButton :=  newToolButton(
         <icons:runhilite.gif>,
         "Run HiLite","executeHiLite",eBrowser)
@@ -755,7 +756,7 @@
 
 	#make the menus
 	def mm := <import:com.skyhunter.ex.swing.menuMakerAuthor> (
-		swing__uriGetter, 
+		swing__uriGetter,
 		<unsafe:org.erights.e.ui.jed.EAction>,
 		menuReactor)
 	def menuBar := mm menuBar([
@@ -766,7 +767,7 @@
 			mm action("Save &As...")
 		]),
 		mm menu("For&mat", [
-			defaultIndentItem := 
+			defaultIndentItem :=
 				mm radio(indentGroup, mm action("Use Spaces")),
 			mm radio(indentGroup, mm action("Use Tabs")),
 			"--",
@@ -1056,7 +1057,7 @@
 	def source := "<import:com.skyhunter.eBrowser.syncServerMakerAuthor> run(unsafe__uriGetter, stdout)"
 	def vat := vatMaker new(source, [], interp getProps(), "Sync Server Maker")
 	def farSyncServerMaker := vat promisePrimorialObj()
-	farBrowseServerResolver resolve(farSyncServerMaker) 
+	farBrowseServerResolver resolve(farSyncServerMaker)
 }
 makeFarSyncServer()
 
@@ -1067,6 +1068,8 @@
     optBrowseFile := <file: name>
 }
 def browser := eBrowserMaker new(textModelMaker new(optBrowseFile))
-if (optBrowseFile != null) {openFiles[optBrowseFile getCanonicalPath()] := browser}
+if (optBrowseFile != null) {
+    openFiles[optBrowseFile getCanonicalPath()] := browser
+}
 interp blockAtTop()
 



1.9       +2 -1      e/src/esrc/scripts/elmer.e

Index: elmer.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/elmer.e,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- elmer.e	2001/03/11 04:32:57	1.8
+++ elmer.e	2001/08/18 05:19:38	1.9
@@ -3,9 +3,10 @@
 def eui__uriGetter := <unsafe:org.erights.e.ui.*>
 def EditGroupMaker := <eui:jed.EditGroup>
 def ElmerMainMaker := <eui:elmer.ElmerMain>
+def EInterpAdapterMaker := <eui:elmer.EInterpAdapter>
 
 def group := EditGroupMaker new(true)
-def first := ElmerMainMaker new(group)
+def first := ElmerMainMaker new(group, EInterpAdapterMaker)
 for arg in interp getArgs() {
     first menuOpen(<file: arg>)
 }



1.1                  e/src/esrc/scripts/elmer2.e

Index: elmer2.e
===================================================================
#!/usr/bin/env e

def StringWriterMaker := <unsafe:java.io.StringWriter>
def TextWriterMaker := <import:org.erights.e.elib.base.TextWriter>
def EParserMaker := <import:org.erights.e.elang.syntax.EParser>
def SyntaxException := 
    <import:org.erights.e.elang.syntax.SyntaxException> asType()

def eui__uriGetter := <unsafe:org.erights.e.ui.*>
def EditGroupMaker := <eui:jed.EditGroup>
def ElmerMainMaker := <eui:elmer.ElmerMain>

def cmd__uriGetter := <import:org.erights.e.elang.cmd.*>
def cmdMakerMaker := <cmd:cmdMakerMaker>
def QueueMaker := <unsafe:org.erights.e.elib.prim.Queue>
def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>

def SystemGC {
    to gc() {
        println("System.gc()")
        <unsafe:java.lang.System> gc()
    }
}
def cmdLoopMaker := <cmd:cmdLoopMakerAuthor>(QueueMaker, SystemGC)

class cmdAdapterMaker(elmer) :any {
    def textArea := elmer textArea()
    def stringWriter := StringWriterMaker new()
    def outBuf := stringWriter getBuffer()
    def outs := TextWriterMaker new(stringWriter)

    def cmdLoop
    def scope := ScopeSetupMaker privileged(true,
                                            outs,
                                            outs,
                                            cmdLoop)
    def bind cmdLoop := cmdLoopMaker new(["elmer2"],
                                         interp getProps(),
                                         scope)
    def cmdMaker := cmdMakerMaker new(cmdLoop, outs, outs, outs)

    def getOptSource(text, var pos) :any {
        escape return {
            var result := ""
            while (true) {
                def prev := text lastIndexOf("\n", pos -1)
                def line := text(prev +1, pos)
                def trimmed := line trim()
                if (trimmed =~ ``) {
                    return(null)
                }
                def first := trimmed[0]
                if (first != '?' && first != '>') {
                    return(null)
                }
                result := trimmed(1, trimmed size()) + "\n" + result
                if (first == '?') {
                    return(result)
                }
                pos := prev
            }
        }
    }

    def leadingWhiteSpace(text, pos) :any {
        def prev := text lastIndexOf("\n", pos -1)
        def line := text(prev +1, pos)
        def trimmed := line trim()
        if (line =~ `@result$trimmed@_`) {
            result
        } else {
            ""
        }
    }

    def cmdAdapter {
        to keyTyped(e) {
            escape return {
                def c := e getKeyChar()
                if (c == '\n' && c == '\r') {
                    return()
                }
                def text := textArea getText()
                def pos := textArea getCaretPosition() -1
                def optSource := getOptSource(text, pos)
                if (optSource == null) {
                    return()
                }
                def left := leadingWhiteSpace(text, pos)
                def optExpr := try {
                    EParserMaker(optSource)
                } catch sex :SyntaxException {
                    outs indent("# ") print("# ", sex)
                    null
                }
                # XXX needs to deal with NeedMoreException
                if (optExpr != null) {
                    def cmd := cmdMaker new(optExpr)
                    cmdLoop enqueue(cmd)
                }
                # XXX what to do about later output?
            }
        }
    }
}
                                        


def group := EditGroupMaker new(true)
def first := ElmerMainMaker new(group)
for arg in interp getArgs() {
    first menuOpen(<file: arg>)
}
first setVisible(true)

interp blockAtTop()



1.7       +1 -1      e/src/jsrc/org/erights/e/elang/evm/Evaluator.java

Index: Evaluator.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/Evaluator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Evaluator.java	2001/04/13 08:08:34	1.6
+++ Evaluator.java	2001/08/18 05:19:38	1.7
@@ -140,7 +140,7 @@
  * 
  *     def [powOverThere, powOverThere__Resolver] := PromiseMaker()
  *     remoteEvaluator <- eval(e`def powOverThere(x) { x**2 }`,
- *                             [] asMap,
+ *                             [] asMap(),
  *                             false,
  *                             ["powOverThere" => powOverThere__Resolver])
  *     def y := powOverThere <- (3)



1.21      +26 -1     e/src/jsrc/org/erights/e/elib/ref/Ref.java

Index: Ref.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/ref/Ref.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- Ref.java	2001/08/17 03:11:33	1.20
+++ Ref.java	2001/08/18 05:19:38	1.21
@@ -472,11 +472,36 @@
     }
     
     /**
+     *
+     */
+    /*static public boolean isPersistent(Object ref) {
+        ref = resolution(ref);
+        if (! isNear(ref)) {
+            return false;
+        }
+        if (null == ref) {
+            //null is trivially PassByCopy
+            return true;
+        }
+        Class clazz = ref.getClass();
+        if (Persistent.class.isAssignableFrom(clazz)) {
+            return true;
+        }
+        if (clazz.isArray()) {
+            //Because we try to pretend that arrays are ConstLists, we treat 
+            //them as Persistent.
+            return true;
+        }
+        return Persistent.HONORARY.has(clazz);
+    }        
+    */
+    /**
      * Being PassByCopy == being Selfless && being PassByConstruction. <p>
      */
-    static public boolean isPassByCopy(Object ref) {
+    /*static public boolean isPassByCopy(Object ref) {
         return isSelfless(ref) && isPBC(ref);
     }
+    */
 
     /**
      * If two object references are the same(), they are indistinguishable up 



1.6       +4 -5      e/src/jsrc/org/erights/e/elib/serial/Serializer.java

Index: Serializer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/serial/Serializer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Serializer.java	2001/08/17 20:59:26	1.5
+++ Serializer.java	2001/08/18 05:19:38	1.6
@@ -31,12 +31,11 @@
  * Made usable from E by parameterization rather than subclassing.
  * This stream should be used at least for persistence and pluribus.  It will 
  * probably need more parameters, but we should add them as we find we need 
- * them, rather than create another subclass. <p>
- * 
+ * them, rather than create another subclass. 
+ * <p>
  * Note that reset() is considered legitimate usage of a Serializer.
- *
- * Likely additional parameters:
- *   version string
+ * <p>
+ * Likely additional parameters: version string
  *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
  */



1.19      +1 -1      e/src/jsrc/org/erights/e/elib/tables/ConstMap.java

Index: ConstMap.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/ConstMap.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- ConstMap.java	2001/04/01 08:13:42	1.18
+++ ConstMap.java	2001/08/18 05:19:38	1.19
@@ -161,7 +161,7 @@
      */
     public void printOn(TextWriter out) throws IOException {
         if (size() == 0) {
-            out.print("[] asMap");
+            out.print("[] asMap()");
         } else {
             printOn("[", " => ", ", ", "]", out);
         }



1.14      +3 -2      e/src/jsrc/org/erights/e/elib/tables/FlexList.java

Index: FlexList.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/FlexList.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- FlexList.java	2001/04/13 08:08:35	1.13
+++ FlexList.java	2001/08/18 05:19:38	1.14
@@ -146,10 +146,11 @@
     }
 
     /**
-     * Prints use E list syntax followed by "diverge" (to indicate flexible).
+     * Prints use E list syntax followed by "diverge()" (to indicate 
+     * flexible). 
      */
     public void printOn(TextWriter out) throws IOException {
-        printOn("[", ", ", "] diverge", out);
+        printOn("[", ", ", "] diverge()", out);
     }
 
     /**



1.24      +2 -2      e/src/jsrc/org/erights/e/elib/tables/FlexMap.java

Index: FlexMap.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/FlexMap.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- FlexMap.java	2001/05/01 08:42:04	1.23
+++ FlexMap.java	2001/08/18 05:19:38	1.24
@@ -175,9 +175,9 @@
      */
     public void printOn(TextWriter out) throws IOException {
         if (size() == 0) {
-            out.print("[] asMap diverge");
+            out.print("[] asMap() diverge()");
         } else {
-            printOn("[", " => ", ", ", "] diverge", out);
+            printOn("[", " => ", ", ", "] diverge()", out);
         }
     }
     



1.30      +3 -2      e/src/jsrc/org/erights/e/ui/elmer/EInterpAdapter.java

Index: EInterpAdapter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/ui/elmer/EInterpAdapter.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- EInterpAdapter.java	2001/08/05 07:01:25	1.29
+++ EInterpAdapter.java	2001/08/18 05:19:38	1.30
@@ -112,9 +112,10 @@
 
         int indentPos = line.indexOf(trimmed);
         if (indentPos < 0) {
-            indentPos = 0;
+            return "";
+        } else {
+            return line.substring(0, indentPos);
         }
-        return line.substring(0, indentPos);
     }
     
     /**



1.19      +10 -3     e/src/jsrc/org/erights/e/ui/elmer/ElmerMain.java

Index: ElmerMain.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/ui/elmer/ElmerMain.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- ElmerMain.java	2001/08/13 21:03:21	1.18
+++ ElmerMain.java	2001/08/18 05:19:38	1.19
@@ -20,9 +20,11 @@
 */
 
 import java.awt.Image;
+import java.awt.event.KeyListener;
 import java.net.URL;
 import javax.swing.ImageIcon;
 import javax.swing.JOptionPane;
+import org.erights.e.elib.prim.E;
 import org.erights.e.ui.jed.EditGroup;
 import org.erights.e.ui.jed.JedMain;
 
@@ -36,6 +38,8 @@
     
     static private Image OurLogo = null;
     
+    private Object myKeyListenerMaker;
+    
     static private Image TheLogo() {
         if (null == OurLogo) {
             String rName = "org/erights/e/icons/carrot2.gif";
@@ -49,9 +53,12 @@
     /**
      *
      */
-    public ElmerMain(EditGroup group) {
+    public ElmerMain(EditGroup group, Object keyListenerMaker) {
         super(group);
-        textArea().addKeyListener(new EInterpAdapter(this));
+        myKeyListenerMaker = keyListenerMaker;
+        KeyListener listener = 
+            (KeyListener)E.call(keyListenerMaker, "new", this);
+        textArea().addKeyListener(listener);
         setIconImage(TheLogo());
     }
 
@@ -81,6 +88,6 @@
      *
      */
     public JedMain newJed(EditGroup group) {
-        return new ElmerMain(group);
+        return new ElmerMain(group, myKeyListenerMaker);
     }
 }