[e-lang] swtgrid quasiparser broken in current SVN

Mark S. Miller markm at cs.jhu.edu
Sat Apr 21 13:39:58 EDT 2007


Kevin Reid wrote:
> I can't run SWT. Could you post the stack trace from your example?

The full E stack trace is included below. The immediate cause of this problem 
is that

     def digit(base) :nullOk[int] {
         require(base==10,
                 fn{`Base $base not yet implemented`})
         if (myChar != null && '0' <= myChar && myChar <= '9') {
             def result := myChar - '0'
             next()
             result
         } else {
             null
         }
     }

in swtGridQParserMaker, in subtracting two characters, is invoking the wrong 
overloads of the following two in CharacterSugar.java:

     static public char subtract(char self, int delta) {
         return CharacterMakerSugar.asChar((long)self - delta);
     }

     static public int subtract(char self, char other) {
         return self - other;
     }

In other words, the literal '0' is being passed as an int (48) to the first 
overloading above, which produced a character result instead of an int result.

This is probably caused by the recent changes to the overloading of Java sugar 
methods, but I haven't traced it further. Can you take it from here? Thanks.


? swtGrid`$shell:$button`
# problem: <ClassCastException: Character doesn't coerce to an int>
#
#   - BaseAuditor#coerce(Object, OneArgFunc)
#   . int.coerce('\u0000', null)
#   - static E4E#callWithPair(Object, Object[])
#   . <makeE4E>.callWithPair(int, ["coerce", ['\u0000', null]])
#   @ callWithPair/2
#   - 
org.erights.e.elang.coord.OrderedSpaceMaker$OrderedSpaceMaker0$OrderedSpace#match(String, 
ConstList)
#   . int.coerce('\u0000', null)
#   - org.erights.e.ui.swt.swtGridQParserMaker$parseTemplate$digit#run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::138:13::138:13>
#   . <digit>(10)
#   @ run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::160:27::160:27>
#   - 
org.erights.e.ui.swt.swtGridQParserMaker$parseTemplate$wholeNumber#run/0: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::159:19::159:19>
#   . <wholeNumber>()
#   @ run/0: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::184:33::184:33>
#   - org.erights.e.ui.swt.swtGridQParserMaker$parseTemplate$dollarHole#run/0: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::181:18::181:18>
#   . <dollarHole>()
#   @ run/0: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::193:29::193:29>
#   - 
org.erights.e.ui.swt.swtGridQParserMaker$parseTemplate$expectDollarHole#run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::192:24::192:24>
#   . <expectDollarHole>(0)
#   @ run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::199:20::199:20>
#   - org.erights.e.ui.swt.swtGridQParserMaker$parseTemplate#run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::80:17::80:17>
#   . <parseTemplate>("${0}:${1}")
#   @ run/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::333:57::333:57>
#   - 
org.erights.e.ui.swt.swtGridQParserMaker$swtGridQParserMaker$swtGridQParser#valueMaker/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/ui/swt/swtGridQParserMaker.emaker#:span::329:11::329:20>
#   . <swtGridQParser>.valueMaker("${0}:${1}")
#   @ valueMaker/1
#   - EExpr#evalToPair(Scope)
#   . e`swtGrid__quasiParser.value...akeList.run(shell, 
button))`.evalToPair(<a Scope>)
#   @ evalToPair/1: 
<file:/C:/Documents%20and%20Settings/millerm1/e/src/esrc/org/erights/e/elang/cmd/cmdMakerMaker.emaker#:span::129:57::129:66>



-- 
Text by me above is hereby placed in the public domain

     Cheers,
     --MarkM


More information about the e-lang mailing list