Skip to content

Stack Overflow on Roku when constructing a "grandchild class" in a namespace #267

@markwpearce

Description

@markwpearce

The following code causes a stack overflow.

For some reason, the super() call in StackOverflowTest.ClassB_Namespace calls itself - but only when a class that extends that class is constructed.

However, there is no issue with "grandchild" classes if they aren't in a namespace.

Tested with brighterscript@0.24.1

Here's some minimalist code that reproduces the issue:

main.bs:

sub Main()
  c_notInNamespace = new ClassC_NoNamespace("Clive")
  c_notInNamespace.output()

  b_inNamespace = new StackOverflowTest.ClassB_Namespace("Betty") ' This line will NOT stack overflow
  b_inNamespace.output()

  c_inNamespace = new StackOverflowTest.ClassC_Namespace("Charles") ' This line WILL stack overflow
  c_inNamespace.output()
end sub

StackOverflowTest.bs:

namespace StackOverflowTest
  class ClassA_Namespace
    name = ""

    function new(name)
      m.name = name
    end function

    function output()
      for each item in m.Items()
        print item.key, item.value
      end for
    end function
  end class

  class ClassB_Namespace extends ClassA_Namespace
    age = 0

    function new(name, age = 10)
      super(name) ' This line will stack overflow
      m.age = age
    end function
  end class

  class ClassC_Namespace extends ClassB_Namespace
    color = ""

    function new(name, age = 10, color = "")
      super(name)
      m.color = color
    end function
  end class

end namespace

class ClassA_NoNamespace
  name = ""

  function new(name)
    m.name = name
  end function

  function output()
    for each item in m.Items()
      print item.key, item.value
    end for
  end function
end class

class ClassB_NoNamespace extends ClassA_NoNamespace
  age = 0
  function new(name, age = 10)
    super(name)
    m.age = age
  end function
end class

class ClassC_NoNamespace extends ClassB_NoNamespace
  color = ""

  function new(name, age = 10, color = "")
    super(name)
    m.color = color
  end function
end class

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions