[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