Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: Scala 2.9.1
    • Fix Version/s: Scala 2.10.0-M3
    • Component/s: Collections
    • Labels:
      None
    • Environment:

      Linux Mint, Scala 2.9.1

      Description

      Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_26).
      Type in expressions to have them evaluated.
      Type :help for more information.
      
      scala> import collection.mutable.{Stack,StackProxy}
      import collection.mutable.{Stack, StackProxy}
      
      scala> class A extends StackProxy[Int] {def self = Stack[Int]()}
      defined class A
      
      scala> val a = new A
      a: A = Stack()
      
      scala> a push 3
      res0: a.type = Stack()
      
      scala> a push 4
      res1: a.type = Stack()
      
      scala> a push 5
      res2: a.type = Stack()
      
      scala> a
      res3: A = Stack()
      
      scala> a pop
      java.util.NoSuchElementException: head of empty list
      	at scala.collection.immutable.Nil$.head(List.scala:371)
      	at scala.collection.immutable.Nil$.head(List.scala:368)
      	at scala.collection.mutable.Stack.pop(Stack.scala:146)
      	at scala.collection.mutable.StackProxy$class.pop(StackProxy.scala:80)
      	at A.pop(<console>:8)
      	at .<init>(<console>:11)
      	at .<clinit>(<console>)
      	at .<init>(<console>:11)
      	at .<clinit>(<console>)
      	at $print(<console>)
      	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 scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
      	at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
      	at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
      	at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
      	at java.lang.Thread.run(Thread.java:662)
      
      
      scala>
      

        Issue Links

          Activity

          Hide
          Adriaan Moors added a comment -

          Philipp, could you please take a look or re-assign?

          Show
          Adriaan Moors added a comment - Philipp, could you please take a look or re-assign?
          Hide
          Felix Dietze added a comment -

          I had a look in the source, and it seems like the push-method with only one argument is not overwritten. This could maybe fix the issue:

          override def push(elem:A): this.type = {self.push(elem); this}
          
          Show
          Felix Dietze added a comment - I had a look in the source, and it seems like the push-method with only one argument is not overwritten. This could maybe fix the issue: override def push(elem:A): this.type = {self.push(elem); this}
          Hide
          Aleksandar Prokopec added a comment -

          That's not the only issue.
          You've defined the `self` method to instantiate a new Stack[Int]() each time it is called. You should either have a val or `def` should return a stable reference.

          Show
          Aleksandar Prokopec added a comment - That's not the only issue. You've defined the `self` method to instantiate a new Stack [Int] () each time it is called. You should either have a val or `def` should return a stable reference.

            People

            • Assignee:
              Aleksandar Prokopec
              Reporter:
              Felix Dietze
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development