diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-03-12 10:36:36 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-03-12 10:36:36 +0100 |
commit | 6f6546ebfc26564843621e79d840209a5103d3c8 (patch) | |
tree | 6b81b4c1da5f79bf930508e49abb0e8c1e495057 /src/main/scala/scala/async | |
parent | 6ced55dceca6b92b30cafc145c952345c87708c3 (diff) | |
download | scala-async-6f6546ebfc26564843621e79d840209a5103d3c8.tar.gz scala-async-6f6546ebfc26564843621e79d840209a5103d3c8.tar.bz2 scala-async-6f6546ebfc26564843621e79d840209a5103d3c8.zip |
Fix "not a class" crasher in live variable analysis
Predicate the `asClass` cast with an `isClass` check.
Fixes #63
Diffstat (limited to 'src/main/scala/scala/async')
-rw-r--r-- | src/main/scala/scala/async/internal/LiveVariables.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/main/scala/scala/async/internal/LiveVariables.scala b/src/main/scala/scala/async/internal/LiveVariables.scala index 6c67e99..7f386c8 100644 --- a/src/main/scala/scala/async/internal/LiveVariables.scala +++ b/src/main/scala/scala/async/internal/LiveVariables.scala @@ -55,7 +55,8 @@ trait LiveVariables { // determine which fields should be live also at the end (will not be nulled out) val noNull: Set[Symbol] = liftedSyms.filter { sym => - tpe(sym).typeSymbol.asClass.isPrimitive || liftables.exists { tree => + val typeSym = tpe(sym).typeSymbol + (typeSym.isClass && typeSym.asClass.isPrimitive) || liftables.exists { tree => !liftedSyms.contains(tree.symbol) && tree.exists(_.symbol == sym) } } |