Interestingly, if I change the code to this:
def getSelectedTag(tags: List[Tag], cookieName: String, urlParam:
String) : Tag = {
var t : Tag = null
if(tags.length == 0) {
return null
}
try {
// See if tag name is present in the URL
val tagName = getParamValue(urlParam, "")
// If yes, check if a tag with this name is present in
tags
t = findTagWithName(tags, tagName)
// If it is, write out the right cookie and return
if(t != null) {
return t
}
// if no, check the corresponding cookie
val cv = getCookieValue(cookieName, "")
if(cv != null) {
// and check if the tag with a name stored in cookie
is present in tags
t = findTagWithName(tags, cv)
if(t != null) {
return t
}
}
// otherwise just select the last tag from the list and
write out the cookie
t = tags.last
return t
} finally {
var c = HTTPCookie(cookieName, t.name).setMaxAge(365 * 24
* 60 * 60)
S.addCookie(c)
}
}
it also compiles OK. I don't feel comfortable with the change, though,
since List could contain a null, which tags.last would gladly return.
On Nov 16, 8:45 pm, DMB <[email protected]> wrote:
> I wonder if anyone else finds this stack trace familiar. As often is
> the case with non-mainstream languages, Google turns up nothing of
> value. The code fragment goes below. If I comment out the code inside
> the finally statement, everything compiles fine. If I keep it, I get
> the stack trace below. I have tried to create a minimal repro, but did
> not have any success. I understand this is not a Lift issue, but this
> group has a sizable chunk of Scala enthusiasts, so hopefully someone
> has encountered something like this
>
> block #9 :
> CONSTANT (Constant(null))
> LOAD_LOCAL variable t
> DUP
> STORE_LOCAL variable eqEqTemp$2
> CZJUMP (REFERENCE(java.lang.Object))EQ ? 13 : 15
> Successors: 3 15 13 3
> trying to emit: DROP REFERENCE(scala.Null)
> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.scala_tools.maven.executions.MainHelper.runMain
> (MainHelper.java:151)
> at org.scala_tools.maven.executions.MainWithArgsInFile.main
> (MainWithArgsInFile.java:26)
> Caused by: java.lang.AssertionError: assertion failed: BasicBlock
> closed
> at scala.Predef$.assert(Predef.scala:92)
> at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.emit
> (BasicBlocks.scala:327)
> at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.emit
> (BasicBlocks.scala:317)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase.adapt
> (GenICode.scala:1006)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala
> $tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:
> 496)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala
> $tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:
> 447)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala
> $tools$nsc$backend$icode$GenICode$ICodePhase$$genStat(GenICode.scala:
> 183)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun
> $genStat$1.apply(GenICode.scala:146)
> at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun
> $genStat$1.apply(GenICode.scala:145)
> etc, etc...
>
> The code fragment:
>
> def findTagWithName(tags: List[Tag], name: String) : Tag = {
> val t = tags.find(x => x.name == name)
> return t.getOrElse(null)
> }
>
> def getCookieValue(name: String, default: String) : String = {
> for(cookie <- S.findCookie(name); v <- cookie.value) {
> return v
> }
> return default
> }
>
> def getParamValue(name: String, default: String) : String = {
> for(v <- S.param(name)) {
> return v
> }
> return default
> }
>
> def getSelectedTag(tags: List[Tag], cookieName: String, urlParam:
> String) : Tag = {
> var t : Tag = null
> try {
> if(tags.length == 0) {
> return null
> }
>
> // See if tag name is present in the URL
> val tagName = getParamValue(urlParam, "")
> // If yes, check if a tag with this name is present in
> tags
> t = findTagWithName(tags, tagName)
> // If it is, write out the right cookie and return
> if(t != null) {
> return t
> }
>
> // if no, check the corresponding cookie
> val cv = getCookieValue(cookieName, "")
> if(cv != null) {
> // and check if the tag with a name stored in cookie
> is present in tags
> t = findTagWithName(tags, cv)
> if(t != null) {
> return t
> }
> }
>
> // otherwise just select the last tag from the list and
> write out the cookie
> t = tags.last
> return t
> } finally {
> if(t != null) {
> var c = HTTPCookie(cookieName, t.name).setMaxAge(365 *
> 24 * 60 * 60)
> S.addCookie(c)
> }
> }
> }
--
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=.