[e-cvs] cvs commit: e/src/jsrc/org/erights/e/meta/org/erights/e/elib/tables EListGuardSugar.java

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Sun, 11 Nov 2001 18:32:18 -0500


markm       01/11/11 18:32:18

  Modified:    src/esrc/com/skyhunter/e/lang vatMakerAuthor.emaker
               src/esrc/com/skyhunter/ex/swing capFrameMakerAuthor.emaker
                        dialogVowMakerAuthor.emaker
               src/esrc/com/skyhunter/installer
                        agreedCapsPetsVowMakerAuthor.emaker
               src/esrc/org/erights/e/elang/interp require.emaker
               src/esrc/scripts eBrowser.e eConfig.e eDeskPlus.e echat.e
               src/jsrc/net/captp/jcomm ImportDesc.java IncomingDesc.java
                        NewFarDesc.java NewRemotePromiseDesc.java
                        NonceLocator.java
               src/jsrc/org/erights/e/elang/interp Loader.java
                        LoaderScope.java PackageScope.java
                        UnsafeLoaderScope.java
               src/jsrc/org/erights/e/elang/syntax PrettyFeeder.java
               src/jsrc/org/erights/e/elib/base ClassDesc.java
               src/jsrc/org/erights/e/elib/deflect Deflector.java
               src/jsrc/org/erights/e/elib/prim E.java
               src/jsrc/org/erights/e/meta/java/lang ArrayGuardSugar.java
                        ByteGuardSugar.java ClassGuardSugar.java
                        DoubleGuardSugar.java FloatGuardSugar.java
                        IntegerGuardSugar.java InterfaceGuardSugar.java
                        LongGuardSugar.java ShortGuardSugar.java
                        StringGuardSugar.java ThrowableGuardSugar.java
                        VoidGuardSugar.java
               src/jsrc/org/erights/e/meta/java/math
                        BigIntegerGuardSugar.java
               src/jsrc/org/erights/e/meta/org/erights/e/elib/base
                        TypeDescGuardSugar.java
               src/jsrc/org/erights/e/meta/org/erights/e/elib/ref
                        RefGuardSugar.java
               src/jsrc/org/erights/e/meta/org/erights/e/elib/slot
                        SlotGuardGuardSugar.java ValueGuardGuardSugar.java
               src/jsrc/org/erights/e/meta/org/erights/e/elib/tables
                        EListGuardSugar.java
  Log:
  reformed 'require'

Revision  Changes    Path
1.6       +3 -3      e/src/esrc/com/skyhunter/e/lang/vatMakerAuthor.emaker

Index: vatMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/lang/vatMakerAuthor.emaker,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- vatMakerAuthor.emaker	2001/09/12 00:01:50	1.5
+++ vatMakerAuthor.emaker	2001/11/11 23:32:16	1.6
@@ -15,14 +15,14 @@
 # <p>
 # This is a very early draft of the concept, and is expected to change
 # radically in non-upwards compatible ways.
-# 
+#
 # @author Marc Stiegler
 # @author Mark S. Miller
 # @author Terry Stanley
 def vatMakerAuthor(unsafe__uriGetter, introducer, traceln) :near {
 
-    # XXX Kludge: The sourceCode expression must not print to stdout or 
-    # stderr when it's evaluated, although the objects it spawns may do 
+    # XXX Kludge: The sourceCode expression must not print to stdout or
+    # stderr when it's evaluated, although the objects it spawns may do
     # so later
     class vatMaker(sourceCode, args, props, vatName) :near {
         def io__uriGetter := <unsafe:java.io.*>



1.4       +1 -1      e/src/esrc/com/skyhunter/ex/swing/capFrameMakerAuthor.emaker

Index: capFrameMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/capFrameMakerAuthor.emaker,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- capFrameMakerAuthor.emaker	2001/11/10 19:40:36	1.3
+++ capFrameMakerAuthor.emaker	2001/11/11 23:32:16	1.4
@@ -51,7 +51,7 @@
         def contentPane := <swing:JPanel> new()
         def powerPane := <swing:JPanel> new()
         def innerPane := JPanel`$contentPane.Y
-        $powerPane`
+                                $powerPane`
         innerFrame getContentPane() add(innerPane)
         powerboxController reactToPowerbar(powerPane)
         def capFrame {



1.3       +2 -2      e/src/esrc/com/skyhunter/ex/swing/dialogVowMakerAuthor.emaker

Index: dialogVowMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/dialogVowMakerAuthor.emaker,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- dialogVowMakerAuthor.emaker	2001/11/10 19:40:36	1.2
+++ dialogVowMakerAuthor.emaker	2001/11/11 23:32:16	1.3
@@ -64,8 +64,8 @@
             def buttonPane := uiTools makeGridRow(buttons)
             def dialogPane :=
               JPanel`$labelScrollPane.X.Y
-            $myTextField
-            $buttonPane `
+                     $myTextField
+                     $buttonPane `
             #traceln("made buttons")
             def border := <awt:BorderLayout> new()
             mainPane setLayout(border)



1.4       +7 -7      e/src/esrc/com/skyhunter/installer/agreedCapsPetsVowMakerAuthor.emaker

Index: agreedCapsPetsVowMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/installer/agreedCapsPetsVowMakerAuthor.emaker,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- agreedCapsPetsVowMakerAuthor.emaker	2001/11/10 19:40:37	1.3
+++ agreedCapsPetsVowMakerAuthor.emaker	2001/11/11 23:32:16	1.4
@@ -100,7 +100,7 @@
                 def helpLabel := <swing:JLabel> new(stringDataKit  getUrlProtocolHelp())
                 def urlProtocolsMainPanel :=
                   JPanel`$urlProtocolsListPanel
-                $helpLabel.Y`
+                         $helpLabel.Y`
                 urlProtocolsMainPanel setName("Web")
                 capTabsPane add(urlProtocolsMainPanel)
             }
@@ -141,10 +141,10 @@
                     def helpLabel := <swing:JLabel> new(stringDataKit getPetHelp())
                     def petListPanel :=
                       JPanel`$petNameLabel    $petNameField.X
-                               ${lbl(" ")}      ${lbl(" ")}
-                               $petSuffixLabel  $petSuffixField
-                               ${lbl(" ")}      ${lbl(" ")}
-                               $petIconLabel    $petIconField`
+                             ${lbl(" ")}      ${lbl(" ")}
+                             $petSuffixLabel  $petSuffixField
+                             ${lbl(" ")}      ${lbl(" ")}
+                             $petIconLabel    $petIconField`
                     def petMainPanel :=
                       JPanel`$petListPanel
                              $helpLabel.Y`
@@ -196,8 +196,8 @@
             def spacer := <swing:JLabel> new(" ")
             def realPane :=
               JPanel`$capTabsPane.Y
-                $spacer
-        $grantButton `
+                     $spacer
+                     $grantButton `
             frame getContentPane() add(realPane)
             frame pack()
             frame setSize(600,600)



1.10      +21 -4     e/src/esrc/org/erights/e/elang/interp/require.emaker

Index: require.emaker
===================================================================
RCS file: /cvs/e/src/esrc/org/erights/e/elang/interp/require.emaker,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- require.emaker	2001/03/11 04:32:56	1.9
+++ require.emaker	2001/11/11 23:32:16	1.10
@@ -3,13 +3,24 @@
 # condition isn't true, the complaint is thrown
 #
 
+def EE := <import:org.erights.e.elib.prim.E>
+
 def require0 {
-    to (cond, aThunk) {
-        if (! cond) { throw(aThunk()) }
-    }
     to (cond) {
-        require0(cond, thunk{"required condition failed"})
+        EE require(cond)
+    }
+    to (cond, problem) {
+        EE require(cond, problem)
     }
+    match [`run`, [cond, prob0] + probRest] {
+	if (! cond) {
+	    var problem := prob0
+	    for prob in probRest {
+		problem := problem + prob
+	    }
+	    EE require(false, problem)
+	}
+    }
 }
 
     ? require(2 == 3, thunk{"foo"})
@@ -29,3 +40,9 @@
     #   <interp> evalPrint(e`require run(Ref same(2, 3))`)
 
     ? require(2 == 2)
+    ? require(2 == 3, "foobar")
+    # problem: foobar
+    #
+    #   <import:org.erights.e.elib.prim.E> require(false, "foobar")
+    #   <require0>(false, "foobar")
+    #   <interactive interp> evalPrint(e`require run(equalizer isSame(2, 3), "foobar")`)



1.47      +2 -2      e/src/esrc/scripts/eBrowser.e

Index: eBrowser.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eBrowser.e,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- eBrowser.e	2001/11/10 23:51:51	1.46
+++ eBrowser.e	2001/11/11 23:32:16	1.47
@@ -680,8 +680,8 @@
       JPanel`$saveButton $reformatButton $s1 $pasteUpdocButton $elmerButton $s2 $runHiLiteButton $runButton $s3 $gotoButton $findButton  $searchField.X`
     def realPane :=
       JPanel`$buttonPane
-    $outLineSplitter.X.Y
-    $statusPane   `
+             $outLineSplitter.X.Y
+             $statusPane   `
 
     # def text replacer function
     def replaceSelectionHilite(replacement) {



1.15      +1 -1      e/src/esrc/scripts/eConfig.e

Index: eConfig.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eConfig.e,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- eConfig.e	2001/03/26 19:39:44	1.14
+++ eConfig.e	2001/11/11 23:32:16	1.15
@@ -86,7 +86,7 @@
                         <swing:SwingConstants> CENTER()])
 
 root getContentPane() add(JPanel`$label.Y
-                ${JPanel``} $okButton ${JPanel``}`)
+                                 ${JPanel``} $okButton ${JPanel``}`)
 
 def ClassLoader := <unsafe:java.lang.ClassLoader>
 def iconURL := <resource:org/erights/e/icons/carrot2.gif>



1.3       +2 -2      e/src/esrc/scripts/eDeskPlus.e

Index: eDeskPlus.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eDeskPlus.e,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- eDeskPlus.e	2001/08/08 05:39:17	1.2
+++ eDeskPlus.e	2001/11/11 23:32:16	1.3
@@ -523,8 +523,8 @@
         JPanel`$refreshButton $upButton $homeButton $gotoButton $fullPathTextField.X `
     def realPane :=
         JPanel`$toolbarPane
-    $filesDirsSplitPane.Y
-    $statusPanel`
+               $filesDirsSplitPane.Y
+               $statusPanel`
     mainPane add(realPane)
     traceln("about to call refreshLocal")
     refreshLocal()



1.13      +5 -6      e/src/esrc/scripts/echat.e

Index: echat.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/echat.e,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- echat.e	2001/08/20 05:07:43	1.12
+++ echat.e	2001/11/11 23:32:16	1.13
@@ -178,12 +178,11 @@
     def sendMessageButton := newButton("Send", "send")
     sendMessageButton setEnabled(false)
 
-    chatPane add(JPanel`
-    $setNameButton
-    $offerChatButton $findFriendButton
-    $chatScroller.Y
-    $nextMessageBox
-    $sendMessageButton`)
+    chatPane add(JPanel`$setNameButton
+                        $offerChatButton $findFriendButton
+                        $chatScroller.Y
+                        $nextMessageBox
+                        $sendMessageButton`)
 
     chatWin pack()
     chatWin show()



1.7       +3 -3      e/src/jsrc/net/captp/jcomm/ImportDesc.java

Index: ImportDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/ImportDesc.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ImportDesc.java	2001/10/02 01:29:17	1.6
+++ ImportDesc.java	2001/11/11 23:32:16	1.7
@@ -21,6 +21,7 @@
 
 import org.erights.e.develop.trace.Trace;
 import org.erights.e.elib.ref.Ref;
+import org.erights.e.elib.prim.E;
 
 /**
  * The re-encoding of an exported reference. <p>
@@ -41,9 +42,8 @@
      *
      */
     private void validate() {
-        if (myImportPos <= 0) {
-            throw new RuntimeException("must be positive: " + myImportPos);
-        }
+        E.requireSI(myImportPos >= 1,
+                    "must be positive: ", myImportPos);
     }
 
     /**



1.7       +3 -4      e/src/jsrc/net/captp/jcomm/IncomingDesc.java

Index: IncomingDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/IncomingDesc.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- IncomingDesc.java	2001/10/02 01:29:17	1.6
+++ IncomingDesc.java	2001/11/11 23:32:16	1.7
@@ -20,6 +20,7 @@
 */
 
 import org.erights.e.develop.trace.Trace;
+import org.erights.e.elib.prim.E;
 
 /**
  * The encoding of an remote ref over the wire to the ref's
@@ -42,10 +43,8 @@
      *
      */
     private void validate() {
-        if (myIncomingPos == 0) {
-            throw new RuntimeException("can't directly reify nonce locator: "
-                                       + myIncomingPos);
-        }
+        E.requireSI(myIncomingPos != 0,
+                    "can't directly reify nonce locator: ", myIncomingPos);
     }
 
     /**



1.8       +5 -8      e/src/jsrc/net/captp/jcomm/NewFarDesc.java

Index: NewFarDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/NewFarDesc.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- NewFarDesc.java	2001/10/02 01:29:17	1.7
+++ NewFarDesc.java	2001/11/11 23:32:16	1.8
@@ -21,6 +21,7 @@
 
 import org.erights.e.develop.trace.Trace;
 import org.erights.e.elib.ref.Ref;
+import org.erights.e.elib.prim.E;
 
 import java.math.BigInteger;
 
@@ -46,14 +47,10 @@
      *
      */
     private void validate() {
-        if (myImportPos <= 0) {
-            throw new RuntimeException("importPos must be positive: " +
-                                       myImportPos);
-        }
-        if (null == mySwissHash || mySwissHash.signum() <= 0) {
-            throw new RuntimeException("swissHash must be positive: " +
-                                       mySwissHash);
-        }
+        E.requireSI(myImportPos >= 1,
+                    "importPos must be positive: ", myImportPos);
+        E.require(null != mySwissHash && mySwissHash.signum() >= 1,
+                  "swissHash must be positive: ", mySwissHash);
     }
 
     /**



1.5       +7 -12     e/src/jsrc/net/captp/jcomm/NewRemotePromiseDesc.java

Index: NewRemotePromiseDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/NewRemotePromiseDesc.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- NewRemotePromiseDesc.java	2001/10/02 01:29:17	1.4
+++ NewRemotePromiseDesc.java	2001/11/11 23:32:16	1.5
@@ -20,6 +20,7 @@
 */
 
 import org.erights.e.develop.trace.Trace;
+import org.erights.e.elib.prim.E;
 
 import java.math.BigInteger;
 
@@ -46,18 +47,12 @@
      *
      */
     private void validate() {
-        if (myImportPos <= 0) {
-            throw new RuntimeException("importPos must be positive: " +
-                                       myImportPos);
-        }
-        if (myRdrPos >= 0) {
-            throw new RuntimeException("rdrPos must be negative: " +
-                                       myRdrPos);
-        }
-        if (null == myRdrBase || myRdrBase.signum() <= 0) {
-            throw new RuntimeException("rdrBase must be positive: " +
-                                       myRdrBase);
-        }
+        E.requireSI(myImportPos >= 1,
+                    "importPos must be positive: ", myImportPos);
+        E.requireSI(myRdrPos <= -1,
+                    "rdrPos must be negative: ", myRdrPos);
+        E.require(null != myRdrBase && myRdrBase.signum() >= 1,
+                  "rdrBase must be positive: ", myRdrBase);
     }
 
     /**



1.10      +4 -6      e/src/jsrc/net/captp/jcomm/NonceLocator.java

Index: NonceLocator.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/NonceLocator.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- NonceLocator.java	2001/10/02 01:29:17	1.9
+++ NonceLocator.java	2001/11/11 23:32:16	1.10
@@ -102,16 +102,14 @@
                            BigInteger nonce,
                            BigInteger swissHash)
     {
-        if (! Ref.isNear(gift)) {
-            throw new RuntimeException("not Near: " + gift);
-        }
+        E.require(Ref.isNear(gift),
+                  "Must be Near: ", gift);
         //If gift isn't Selfish, this will throw an exception,
         //which is as it should be.
         BigInteger giftSwiss = mySwissTable.getIdentity(gift);
         BigInteger giftHash = BigIntegerSugar.cryptoHash(giftSwiss);
-        if (! giftHash.equals(swissHash)) {
-            throw new RuntimeException("wrong hash: " + swissHash);
-        }
+        E.require(giftHash.equals(swissHash),
+                  "wrong hash: ", swissHash);
         return myNGifts.provideFor(gift, recipID, nonce, swissHash);
     }
 



1.4       +1 -9      e/src/jsrc/org/erights/e/elang/interp/Loader.java

Index: Loader.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/Loader.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Loader.java	2001/11/10 23:51:51	1.3
+++ Loader.java	2001/11/11 23:32:16	1.4
@@ -25,19 +25,11 @@
 import java.io.IOException;
 
 /**
- * Provides access to the java fully-qualified class namespace as a scope
+ * Provides access to the java fully-qualified class namespace
  *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
  */
 public abstract class Loader implements EPrintable {
 
     public abstract Object get(String name);
-
-    /**
-     *
-     */
-    public void printOn(TextWriter out) throws IOException {
-        out.print("<import:*>");
-    }
-
 }



1.38      +1 -2      e/src/jsrc/org/erights/e/elang/interp/LoaderScope.java

Index: LoaderScope.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/LoaderScope.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- LoaderScope.java	2001/11/11 00:15:30	1.37
+++ LoaderScope.java	2001/11/11 23:32:16	1.38
@@ -39,7 +39,7 @@
 import java.net.URL;
 
 /**
- * Provides access to the java fully-qualified class namespace as a scope
+ * The Loader bound to import__uriGetter.
  *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
  */
@@ -200,5 +200,4 @@
     public void printOn(TextWriter out) throws IOException {
         out.print("<import:*>");
     }
-
 }



1.24      +3 -2      e/src/jsrc/org/erights/e/elang/interp/PackageScope.java

Index: PackageScope.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/PackageScope.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- PackageScope.java	2001/11/11 00:15:30	1.23
+++ PackageScope.java	2001/11/11 23:32:16	1.24
@@ -24,7 +24,7 @@
 import java.io.IOException;
 
 /**
- * Provides access to the java fully-qualified class namespace as a scope
+ * The subtree of a Loader under a package-prefix.
  *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
  */
@@ -41,7 +41,8 @@
      */
     /*package*/ PackageScope(Loader substrate,
                              String protocol,
-                             String fqName) {
+                             String fqName)
+    {
         mySubstrate = substrate;
         myProtocol = protocol;
         if (!fqName.endsWith(".*")) {



1.11      +1 -1      e/src/jsrc/org/erights/e/elang/interp/UnsafeLoaderScope.java

Index: UnsafeLoaderScope.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/UnsafeLoaderScope.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- UnsafeLoaderScope.java	2001/11/11 00:15:30	1.10
+++ UnsafeLoaderScope.java	2001/11/11 23:32:16	1.11
@@ -32,7 +32,7 @@
 import java.io.IOException;
 
 /**
- * Provides access to the java fully-qualified class namespace as a scope
+ * The Loader bound to unsafe__uriGetter.
  *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
  */



1.4       +2 -2      e/src/jsrc/org/erights/e/elang/syntax/PrettyFeeder.java

Index: PrettyFeeder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/PrettyFeeder.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PrettyFeeder.java	2001/11/10 19:40:42	1.3
+++ PrettyFeeder.java	2001/11/11 23:32:17	1.4
@@ -52,8 +52,8 @@
         PrettyFeeder feeder = new PrettyFeeder(sourceCode);
         ELexer lexer = new ELexer(feeder, true, false);
 
-        //XXX once we get rid of parser-to-lexer feedback, pretty() should
-        //only require the lexer.
+        //XXX now that we've gotten rid of parser-to-lexer feedback, pretty()
+        //should only require the lexer.
         EParser parser = new EParser(lexer);
         try {
             parser.parse(); //don't care about the result



1.28      +0 -9      e/src/jsrc/org/erights/e/elib/base/ClassDesc.java

Index: ClassDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/base/ClassDesc.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- ClassDesc.java	2001/11/10 19:40:43	1.27
+++ ClassDesc.java	2001/11/11 23:32:17	1.28
@@ -275,15 +275,6 @@
     }
 
     /**
-     * For use by subclasses.  XXX should move to a more general place.
-     */
-    static protected void require(boolean cond, String msg) {
-        if (!cond) {
-            throw new RuntimeException(msg);
-        }
-    }
-
-    /**
      *
      */
     static private final Class[] IntegralTypeList = {



1.13      +2 -4      e/src/jsrc/org/erights/e/elib/deflect/Deflector.java

Index: Deflector.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/deflect/Deflector.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Deflector.java	2001/11/10 19:40:44	1.12
+++ Deflector.java	2001/11/11 23:32:17	1.13
@@ -101,9 +101,7 @@
 
     /**
      * Deflects target to face by wrapping it in a Deflector, and wrapping
-     * that in a deflection (a Proxy).  If face is or extends EventListener,
-     * then we use an EventualDeflector.  Otherwise we use an
-     * ImmediateDeflector.  target must be NEAR.
+     * that in a deflection (a Proxy).  target must be NEAR.
      */
     static public Object deflect(Object target, Class face) {
         target = Ref.resolution(target);
@@ -132,7 +130,7 @@
     /**
      * Makes a deflector which will wrap and deflect a Callable.
      */
-    public Deflector(Callable target) {
+    private Deflector(Callable target) {
         myDeflected = target;
     }
 



1.61      +77 -0     e/src/jsrc/org/erights/e/elib/prim/E.java

Index: E.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/prim/E.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- E.java	2001/11/10 19:40:45	1.60
+++ E.java	2001/11/11 23:32:17	1.61
@@ -24,6 +24,8 @@
 import org.erights.e.elib.base.Callable;
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.base.Script;
+import org.erights.e.elib.base.Thunk;
+import org.erights.e.elib.base.Ejector;
 import org.erights.e.elib.eio.TextWriter;
 import org.erights.e.elib.ref.Ref;
 import org.erights.e.elib.ref.Resolver;
@@ -567,5 +569,80 @@
      */
     static public RuntimeException asRTE(Object problem) {
         return (RuntimeException)as(problem, RuntimeException.class);
+    }
+
+    /**
+     * 'problem' defaults to "required condition failed"
+     */
+    static public void require(boolean cond) {
+        require(cond, "required condition failed");
+    }
+
+    /**
+     * If cond isn't true, report problem or problem().
+     * <p>
+     * If problem coerces to a Thunk, then reassign problem to be the result
+     * of calling this thunk with 'run()'.  Then, in either case, coerce this
+     * problem to a RuntimeException and throw it.
+     */
+    static public void require(boolean cond, Object problem) {
+        if (cond) {
+            return;
+        }
+        Thunk optThunk = null;
+        Ejector ej = new Ejector();
+        try {
+            optThunk = (Thunk)E.as(problem, Thunk.class, ej);
+        } catch (Throwable t) {
+            //rethrows if not this Ejector's Ejection
+            ej.result(t);
+            //do nothing
+        } finally {
+            ej.disable();
+        }
+        if (null != optThunk) {
+            problem = optThunk.run();
+        }
+        throw asRTE(problem);
+    }
+
+    /**
+     * If cond isn't true, then 'require(false, prob0 + prob1)'
+     */
+    static public void require(boolean cond,
+                               Object prob0,
+                               Object prob1)
+    {
+        if (cond) {
+            return;
+        }
+        require(false, E.call(prob0, "add", prob1));
+    }
+
+    /**
+     * For use only from Java: Optimizes for a common special case -- require
+     * with a <bold>S</bold>tring and an <bold>i</bold>nt.
+     */
+    static public void requireSI(boolean cond, String prob, int i) {
+        if (cond) {
+            return;
+        }
+        require(false, prob + i);
+    }
+
+    /**
+     * If cond isn't true, then 'require(false, prob0 + prob1 + prob2)'
+     */
+    static public void require(boolean cond,
+                               Object prob0,
+                               Object prob1,
+                               Object prob2)
+    {
+        if (cond) {
+            return;
+        }
+        require(false, E.call(E.call(prob0, "add", prob1),
+                              "add",
+                              prob2));
     }
 }



1.9       +2 -2      e/src/jsrc/org/erights/e/meta/java/lang/ArrayGuardSugar.java

Index: ArrayGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/ArrayGuardSugar.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ArrayGuardSugar.java	2001/10/02 23:38:32	1.8
+++ ArrayGuardSugar.java	2001/11/11 23:32:17	1.9
@@ -41,8 +41,8 @@
      */
     public ArrayGuardSugar(Class clazz) {
         super(clazz);
-        require(clazz.isArray(),
-                "internal: " + clazz + " must be an array type");
+        E.require(clazz.isArray(),
+                  "internal: " + clazz + " must be an array type");
     }
 
     /**



1.10      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/ByteGuardSugar.java

Index: ByteGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/ByteGuardSugar.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ByteGuardSugar.java	2001/11/10 19:40:50	1.9
+++ ByteGuardSugar.java	2001/11/11 23:32:17	1.10
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public ByteGuardSugar(Class clazz) {
         super(clazz);
-        require(Byte.class == clazz,
-                "internal: " + clazz + " must represent the 'byte' type");
+        E.require(Byte.class == clazz,
+                  "internal: " + clazz + " must represent the 'byte' type");
     }
 
     /**



1.8       +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/ClassGuardSugar.java

Index: ClassGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/ClassGuardSugar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ClassGuardSugar.java	2001/09/06 09:55:55	1.7
+++ ClassGuardSugar.java	2001/11/11 23:32:17	1.8
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.Callable;
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -42,8 +43,8 @@
      */
     public ClassGuardSugar(Class clazz) {
         super(clazz);
-        require(Class.class == clazz,
-                "internal: " + clazz + " must be Class.class");
+        E.require(Class.class == clazz,
+                  "internal: " + clazz + " must be Class.class");
     }
 
     /**



1.11      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/DoubleGuardSugar.java

Index: DoubleGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/DoubleGuardSugar.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- DoubleGuardSugar.java	2001/11/10 19:40:50	1.10
+++ DoubleGuardSugar.java	2001/11/11 23:32:17	1.11
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public DoubleGuardSugar(Class clazz) {
         super(clazz);
-        require(Double.class == clazz,
-                "internal: " + clazz + " must represent the 'double' type");
+        E.require(Double.class == clazz,
+                  "internal: " + clazz + " must represent the 'double' type");
     }
 
     /**



1.11      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/FloatGuardSugar.java

Index: FloatGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/FloatGuardSugar.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- FloatGuardSugar.java	2001/11/10 19:40:50	1.10
+++ FloatGuardSugar.java	2001/11/11 23:32:17	1.11
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public FloatGuardSugar(Class clazz) {
         super(clazz);
-        require(Float.class == clazz,
-                "internal: " + clazz + " must be a float32 type");
+        E.require(Float.class == clazz,
+                  "internal: " + clazz + " must be a float32 type");
     }
 
     /**



1.10      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/IntegerGuardSugar.java

Index: IntegerGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/IntegerGuardSugar.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- IntegerGuardSugar.java	2001/11/10 19:40:50	1.9
+++ IntegerGuardSugar.java	2001/11/11 23:32:17	1.10
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public IntegerGuardSugar(Class clazz) {
         super(clazz);
-        require(Integer.class == clazz,
-                "internal: " + clazz + " must be an 'int' (int32) type");
+        E.require(Integer.class == clazz,
+                  "internal: " + clazz + " must be an 'int' (int32) type");
     }
 
     /**



1.11      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/InterfaceGuardSugar.java

Index: InterfaceGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/InterfaceGuardSugar.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- InterfaceGuardSugar.java	2001/10/02 23:38:32	1.10
+++ InterfaceGuardSugar.java	2001/11/11 23:32:17	1.11
@@ -25,6 +25,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.deflect.Deflector;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  * {@link Callable}s (eg, objects defined in the E language) coerce to
@@ -40,8 +41,8 @@
      */
     public InterfaceGuardSugar(Class clazz) {
         super(clazz);
-        require(clazz.isInterface(),
-                "internal: " + clazz + " must be an interface type");
+        E.require(clazz.isInterface(),
+                  "internal: " + clazz + " must be an interface type");
     }
 
     /**



1.10      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/LongGuardSugar.java

Index: LongGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/LongGuardSugar.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- LongGuardSugar.java	2001/11/10 19:40:50	1.9
+++ LongGuardSugar.java	2001/11/11 23:32:17	1.10
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public LongGuardSugar(Class clazz) {
         super(clazz);
-        require(Long.class == clazz,
-                "internal: " + clazz + " must be a 'long' type");
+        E.require(Long.class == clazz,
+                  "internal: " + clazz + " must be a 'long' type");
     }
 
     /**



1.10      +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/ShortGuardSugar.java

Index: ShortGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/ShortGuardSugar.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ShortGuardSugar.java	2001/11/10 19:40:50	1.9
+++ ShortGuardSugar.java	2001/11/11 23:32:17	1.10
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public ShortGuardSugar(Class clazz) {
         super(clazz);
-        require(Short.class == clazz,
-                "internal: " + clazz + " must be a 'short' type");
+        E.require(Short.class == clazz,
+                  "internal: " + clazz + " must be a 'short' type");
     }
 
     /**



1.9       +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/StringGuardSugar.java

Index: StringGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/StringGuardSugar.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StringGuardSugar.java	2001/10/01 08:31:05	1.8
+++ StringGuardSugar.java	2001/11/11 23:32:17	1.9
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.tables.Twine;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  * Twine coerces to String by becoming bare.
@@ -37,8 +38,8 @@
      */
     public StringGuardSugar(Class clazz) {
         super(clazz);
-        require(String.class == clazz,
-                "internal: " + clazz + " must be String.class");
+        E.require(String.class == clazz,
+                  "internal: " + clazz + " must be String.class");
     }
 
     /**



1.4       +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/ThrowableGuardSugar.java

Index: ThrowableGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/ThrowableGuardSugar.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ThrowableGuardSugar.java	2001/11/10 19:40:50	1.3
+++ ThrowableGuardSugar.java	2001/11/11 23:32:17	1.4
@@ -24,6 +24,7 @@
 import org.erights.e.elib.tables.Twine;
 import org.erights.e.elib.util.OneArgFunc;
 import org.erights.e.elib.util.TwineException;
+import org.erights.e.elib.prim.E;
 
 /**
  * Coerces Strings, Twine, and Throwables to kinds of Throwbles.
@@ -40,8 +41,8 @@
      */
     public ThrowableGuardSugar(Class clazz) {
         super(clazz);
-        require(Throwable.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a type of Throwable");
+        E.require(Throwable.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a type of Throwable");
     }
 
     /**



1.8       +3 -2      e/src/jsrc/org/erights/e/meta/java/lang/VoidGuardSugar.java

Index: VoidGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/lang/VoidGuardSugar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- VoidGuardSugar.java	2001/11/10 19:40:50	1.7
+++ VoidGuardSugar.java	2001/11/11 23:32:17	1.8
@@ -23,6 +23,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -36,8 +37,8 @@
      */
     public VoidGuardSugar(Class clazz) {
         super(clazz);
-        require(Void.class == clazz,
-                "internal: " + clazz + " must represent the 'void' type");
+        E.require(Void.class == clazz,
+                  "internal: " + clazz + " must represent the 'void' type");
     }
 
     /**



1.8       +3 -2      e/src/jsrc/org/erights/e/meta/java/math/BigIntegerGuardSugar.java

Index: BigIntegerGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/math/BigIntegerGuardSugar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- BigIntegerGuardSugar.java	2001/11/10 19:40:52	1.7
+++ BigIntegerGuardSugar.java	2001/11/11 23:32:17	1.8
@@ -21,6 +21,7 @@
 
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 import java.math.BigInteger;
 
@@ -36,8 +37,8 @@
      */
     public BigIntegerGuardSugar(Class clazz) {
         super(clazz);
-        require(BigInteger.class == clazz,
-                "internal: " + clazz + " must be an integer type");
+        E.require(BigInteger.class == clazz,
+                  "internal: " + clazz + " must be an integer type");
     }
 
     /**



1.7       +3 -2      e/src/jsrc/org/erights/e/meta/org/erights/e/elib/base/TypeDescGuardSugar.java

Index: TypeDescGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/org/erights/e/elib/base/TypeDescGuardSugar.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TypeDescGuardSugar.java	2001/09/06 09:55:57	1.6
+++ TypeDescGuardSugar.java	2001/11/11 23:32:17	1.7
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.base.TypeDesc;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  *
@@ -37,8 +38,8 @@
      */
     public TypeDescGuardSugar(Class clazz) {
         super(clazz);
-        require(TypeDesc.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a kind of TypeDesc");
+        E.require(TypeDesc.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a kind of TypeDesc");
     }
 
     /**



1.4       +3 -2      e/src/jsrc/org/erights/e/meta/org/erights/e/elib/ref/RefGuardSugar.java

Index: RefGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/org/erights/e/elib/ref/RefGuardSugar.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RefGuardSugar.java	2001/09/06 09:55:57	1.3
+++ RefGuardSugar.java	2001/11/11 23:32:17	1.4
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.ref.Ref;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  * Refines the 'coerce/2' behavior of the Ref type, so that it may be useful
@@ -43,8 +44,8 @@
      */
     public RefGuardSugar(Class clazz) {
         super(clazz);
-        require(Ref.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a kind of Ref");
+        E.require(Ref.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a kind of Ref");
     }
 
     /**



1.8       +3 -2      e/src/jsrc/org/erights/e/meta/org/erights/e/elib/slot/SlotGuardGuardSugar.java

Index: SlotGuardGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/org/erights/e/elib/slot/SlotGuardGuardSugar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SlotGuardGuardSugar.java	2001/09/06 09:55:57	1.7
+++ SlotGuardGuardSugar.java	2001/11/11 23:32:17	1.8
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.slot.SlotGuard;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 import org.erights.e.meta.java.lang.InterfaceGuardSugar;
 
 /**
@@ -38,8 +39,8 @@
      */
     public SlotGuardGuardSugar(Class clazz) {
         super(SlotGuard.class); //XXX kludge, but must be an interface
-        require(SlotGuard.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a kind of SlotGuard");
+        E.require(SlotGuard.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a kind of SlotGuard");
     }
 
     /**



1.8       +3 -2      e/src/jsrc/org/erights/e/meta/org/erights/e/elib/slot/ValueGuardGuardSugar.java

Index: ValueGuardGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/org/erights/e/elib/slot/ValueGuardGuardSugar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ValueGuardGuardSugar.java	2001/09/06 09:55:57	1.7
+++ ValueGuardGuardSugar.java	2001/11/11 23:32:17	1.8
@@ -24,6 +24,7 @@
 import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.slot.ValueGuard;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 import org.erights.e.meta.java.lang.InterfaceGuardSugar;
 
 /**
@@ -38,8 +39,8 @@
      */
     public ValueGuardGuardSugar(Class clazz) {
         super(ValueGuard.class);  //XXX kludge, but must be an interface
-        require(ValueGuard.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a kind of ValueGuard");
+        E.require(ValueGuard.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a kind of ValueGuard");
     }
 
     /**



1.9       +3 -2      e/src/jsrc/org/erights/e/meta/org/erights/e/elib/tables/EListGuardSugar.java

Index: EListGuardSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/org/erights/e/elib/tables/EListGuardSugar.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- EListGuardSugar.java	2001/09/06 09:55:57	1.8
+++ EListGuardSugar.java	2001/11/11 23:32:18	1.9
@@ -26,6 +26,7 @@
 import org.erights.e.elib.tables.EList;
 import org.erights.e.elib.tables.Twine;
 import org.erights.e.elib.util.OneArgFunc;
+import org.erights.e.elib.prim.E;
 
 /**
  * Refines the 'coerce/2' behavior of the EList type, so that it may be
@@ -40,8 +41,8 @@
      */
     public EListGuardSugar(Class clazz) {
         super(clazz);
-        require(EList.class.isAssignableFrom(clazz),
-                "internal: " + clazz + " must be a kind of EList");
+        E.require(EList.class.isAssignableFrom(clazz),
+                  "internal: " + clazz + " must be a kind of EList");
     }
 
     /**