scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

typechecker throws NoSuchElementException: key not found: trait Nothing #4593

Closed scabug closed 13 years ago

scabug commented 13 years ago

=== What steps will reproduce the problem (please be specific and use wikiformatting)? === Compile the following code:

trait A {

  class B
  case object D extends B

  class C {

    var x: B = D

    def y = synchronized {
      x match {
        case D => {}
      }
    }

  }

}

=== What is the expected behavior? === Successful compilation. (Succeeds under 2.8.)

=== What do you see instead? ===

exception when typing if (C.this.A$$C$$$$$$outer().D().==(temp2))
  {
    ()
  }
else
  fail%1(){
    throw new MatchError(temp2)
  }
exception when typing {
  <synthetic> val temp2: A#B = C.this.x();
  if (C.this.A$$C$$$$$$outer().D().==(temp2))
    {
      ()
    }
  else
    fail%1(){
      throw new MatchError(temp2)
    }
}
exception when typing C.this.synchronized({
  <synthetic> val temp2: A#B = C.this.x();
  if (C.this.A$$C$$$$$$outer().D().==(temp2))
    {
      ()
    }
  else
    fail%1(){
      throw new MatchError(temp2)
    }
})
exception when typing def y(): Unit = C.this.synchronized({
  <synthetic> val temp2: A#B = C.this.x();
  if (C.this.A$$C$$$$$$outer().D().==(temp2))
    {
      ()
    }
  else
    fail%1(){
      throw new MatchError(temp2)
    }
})
exception when typing class C extends java.lang.Object with ScalaObject {
  def this($$outer: A): A#C = {
    C.super.this();
    ()
  };
  private[this] var x: A#B = C.this.A$$C$$$$$$outer().D();
  <accessor> def x(): A#B = C.this.x;
  <accessor> def x_=(x$$1: A#B): Unit = C.this.x = x$$1;
  def y(): Unit = C.this.synchronized({
    <synthetic> val temp2: A#B = C.this.x();
    if (C.this.A$$C$$$$$$outer().D().==(temp2))
      {
        ()
      }
    else
      fail%1(){
        throw new MatchError(temp2)
      }
  });
  protected <synthetic> <paramaccessor> val $$outer: A = _;
  <synthetic> <stable> def A$$C$$$$$$outer(): A = C.this.$$outer
}
exception when typing abstract trait A extends java.lang.Object with ScalaObject {
  class B extends java.lang.Object with ScalaObject {
    def this($$outer: A): A#B = {
      B.super.this();
      ()
    };
    protected <synthetic> <paramaccessor> val $$outer: A = _;
    <synthetic> <stable> def A$$B$$$$$$outer(): A = B.this.$$outer
  };
  final case object D extends A#B with ScalaObject with Product with Serializable {
    def this($$outer: A): object A#D = {
      D.super.this($$outer);
      D.this./*Product$$class*/$$init$$();
      ()
    };
    final override def toString(): java.lang.String = "D";
    override def productPrefix(): java.lang.String = "D";
    override def productArity(): Int = 0;
    override def productElement(x$$1: Int): java.lang.Object = {
      <synthetic> val temp1: Int = x$$1;
      {
        throw new java.lang.IndexOutOfBoundsException(x$$1.toString())
      }
    };
    override def canEqual(x$$1: java.lang.Object): Boolean = x$$1.$$isInstanceOf[object A#D]();
    <synthetic> <stable> def A$$D$$$$$$outer(): A = D.this.$$outer
  };
  final case <stable> def D(): object A#D;
  class C extends java.lang.Object with ScalaObject {
    def this($$outer: A): A#C = {
      C.super.this();
      ()
    };
    private[this] var x: A#B = C.this.A$$C$$$$$$outer().D();
    <accessor> def x(): A#B = C.this.x;
    <accessor> def x_=(x$$1: A#B): Unit = C.this.x = x$$1;
    def y(): Unit = C.this.synchronized({
      <synthetic> val temp2: A#B = C.this.x();
      if (C.this.A$$C$$$$$$outer().D().==(temp2))
        {
          ()
        }
      else
        fail%1(){
          throw new MatchError(temp2)
        }
    });
    protected <synthetic> <paramaccessor> val $$outer: A = _;
    <synthetic> <stable> def A$$C$$$$$$outer(): A = C.this.$$outer
  }
}
exception when typing package <empty> {
  abstract trait A extends java.lang.Object with ScalaObject {
    class B extends java.lang.Object with ScalaObject {
      def this($$outer: A): A#B = {
        B.super.this();
        ()
      };
      protected <synthetic> <paramaccessor> val $$outer: A = _;
      <synthetic> <stable> def A$$B$$$$$$outer(): A = B.this.$$outer
    };
    final case object D extends A#B with ScalaObject with Product with Serializable {
      def this($$outer: A): object A#D = {
        D.super.this($$outer);
        D.this./*Product$$class*/$$init$$();
        ()
      };
      final override def toString(): java.lang.String = "D";
      override def productPrefix(): java.lang.String = "D";
      override def productArity(): Int = 0;
      override def productElement(x$$1: Int): java.lang.Object = {
        <synthetic> val temp1: Int = x$$1;
        {
          throw new java.lang.IndexOutOfBoundsException(x$$1.toString())
        }
      };
      override def canEqual(x$$1: java.lang.Object): Boolean = x$$1.$$isInstanceOf[object A#D]();
      <synthetic> <stable> def A$$D$$$$$$outer(): A = D.this.$$outer
    };
    final case <stable> def D(): object A#D;
    class C extends java.lang.Object with ScalaObject {
      def this($$outer: A): A#C = {
        C.super.this();
        ()
      };
      private[this] var x: A#B = C.this.A$$C$$$$$$outer().D();
      <accessor> def x(): A#B = C.this.x;
      <accessor> def x_=(x$$1: A#B): Unit = C.this.x = x$$1;
      def y(): Unit = C.this.synchronized({
        <synthetic> val temp2: A#B = C.this.x();
        if (C.this.A$$C$$$$$$outer().D().==(temp2))
          {
            ()
          }
        else
          fail%1(){
            throw new MatchError(temp2)
          }
      });
      protected <synthetic> <paramaccessor> val $$outer: A = _;
      <synthetic> <stable> def A$$C$$$$$$outer(): A = C.this.$$outer
    }
  };
  abstract trait A$$class extends java.lang.Object with ScalaObject with A {
    def /*A$$class*/$$init$$(): Unit = {
      ()
    };
    @volatile <local> <synthetic> var A$$$$D$$module: object A#D = _;
    final case <stable> def D(): object A#D = new object A#D(A$$class.this)
  }
}
error: java.util.NoSuchElementException: key not found: trait Nothing
    at scala.collection.MapLike$$class.default(MapLike.scala:224)
    at scala.collection.immutable.HashMap.default(HashMap.scala:36)
    at scala.collection.MapLike$$class.apply(MapLike.scala:135)
    at scala.collection.immutable.HashMap.apply(HashMap.scala:36)
    at scala.tools.nsc.transform.Erasure$$Eraser.box(Erasure.scala:545)
    at scala.tools.nsc.transform.Erasure$$Eraser.box(Erasure.scala:525)
    at scala.tools.nsc.transform.Erasure$$Eraser.adaptToType(Erasure.scala:597)
    at scala.tools.nsc.transform.Erasure$$Eraser.adapt(Erasure.scala:679)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4219)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4276)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedIf$$1(Typers.scala:3146)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3942)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedBlock(Typers.scala:1914)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3906)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedArg(Typers.scala:2185)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2198)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2197)
    at scala.Tuple3$$Zipped$$$$anonfun$$map$$1.apply(Tuple3.scala:66)
    at scala.Tuple3$$Zipped$$$$anonfun$$map$$1.apply(Tuple3.scala:64)
    at scala.collection.LinearSeqOptimized$$class.foreach(LinearSeqOptimized.scala:59)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at scala.Tuple3$$Zipped.map(Tuple3.scala:64)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedArgs(Typers.scala:2197)
    at scala.tools.nsc.typechecker.Typers$$Typer.doTypedApply(Typers.scala:2415)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedApply$$1(Typers.scala:3344)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:4059)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.transformedOrTyped(Typers.scala:4360)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedDefDef(Typers.scala:1754)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3874)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedTemplate(Typers.scala:1506)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedClassDef(Typers.scala:1271)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3865)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedTemplate(Typers.scala:1506)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedClassDef(Typers.scala:1271)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3865)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3861)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4263)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1120)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1115)
    at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:96)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer.transform(Erasure.scala:1115)
    at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:892)
    at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:30)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:326)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:326)
    at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:47)
    at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:326)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:294)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:294)
    at scala.collection.Iterator$$class.foreach(Iterator.scala:652)
    at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:311)
    at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:294)
    at scala.tools.nsc.Global$$Run.compileSources(Global.scala:949)
    at scala.tools.nsc.Global$$Run.compile(Global.scala:1034)
    at scala.tools.nsc.Main$$.process(Main.scala:106)
    at scala.tools.nsc.Main$$.main(Main.scala:123)
    at scala.tools.nsc.Main.main(Main.scala)

Exception in thread "main" java.util.NoSuchElementException: key not found: trait Nothing
    at scala.collection.MapLike$$class.default(MapLike.scala:224)
    at scala.collection.immutable.HashMap.default(HashMap.scala:36)
    at scala.collection.MapLike$$class.apply(MapLike.scala:135)
    at scala.collection.immutable.HashMap.apply(HashMap.scala:36)
    at scala.tools.nsc.transform.Erasure$$Eraser.box(Erasure.scala:545)
    at scala.tools.nsc.transform.Erasure$$Eraser.box(Erasure.scala:525)
    at scala.tools.nsc.transform.Erasure$$Eraser.adaptToType(Erasure.scala:597)
    at scala.tools.nsc.transform.Erasure$$Eraser.adapt(Erasure.scala:679)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4219)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4276)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedIf$$1(Typers.scala:3146)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3942)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedBlock(Typers.scala:1914)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3906)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedArg(Typers.scala:2185)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2198)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2197)
    at scala.Tuple3$$Zipped$$$$anonfun$$map$$1.apply(Tuple3.scala:66)
    at scala.Tuple3$$Zipped$$$$anonfun$$map$$1.apply(Tuple3.scala:64)
    at scala.collection.LinearSeqOptimized$$class.foreach(LinearSeqOptimized.scala:59)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at scala.Tuple3$$Zipped.map(Tuple3.scala:64)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedArgs(Typers.scala:2197)
    at scala.tools.nsc.typechecker.Typers$$Typer.doTypedApply(Typers.scala:2415)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedApply$$1(Typers.scala:3344)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:4059)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.transformedOrTyped(Typers.scala:4360)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedDefDef(Typers.scala:1754)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3874)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedTemplate(Typers.scala:1506)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedClassDef(Typers.scala:1271)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3865)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedTemplate(Typers.scala:1506)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedClassDef(Typers.scala:1271)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3865)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2094)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$24.apply(Typers.scala:2178)
    at scala.collection.immutable.List.loop$$1(List.scala:117)
    at scala.collection.immutable.List.mapConserve(List.scala:133)
    at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2178)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3861)
    at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:685)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4214)
    at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4263)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1120)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1115)
    at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:96)
    at scala.tools.nsc.transform.Erasure$$ErasureTransformer.transform(Erasure.scala:1115)
    at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:892)
    at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:30)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:326)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:326)
    at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:47)
    at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:326)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:294)
    at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:294)
    at scala.collection.Iterator$$class.foreach(Iterator.scala:652)
    at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:311)
    at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:294)
    at scala.tools.nsc.Global$$Run.compileSources(Global.scala:949)
    at scala.tools.nsc.Global$$Run.compile(Global.scala:1034)
    at scala.tools.nsc.Main$$.process(Main.scala:106)
    at scala.tools.nsc.Main$$.main(Main.scala:123)
    at scala.tools.nsc.Main.main(Main.scala)

=== What versions of the following are you using? ===

scabug commented 13 years ago

Imported From: https://issues.scala-lang.org/browse/SI-4593?orig=1 Reporter: John Thywissen (jthywiss)

scabug commented 13 years ago

John Thywissen (jthywiss) said: Work around (in the few cases we've hit this bug) is as simple as re-arranging the cases in the match.

scabug commented 13 years ago

@dragos said: (In r24986) Fixed #4593. Don't box Nothing types. review by extempore, odersky.

scabug commented 13 years ago

@harrah said: I assume this was intended to be closed.