Add methods inheritance

main
Olivier Abrivard 1 year ago
parent fa461db4f2
commit fc0a56d4f8

@ -12,8 +12,14 @@ class LoxClass(private val name: String, private val superClass: LoxClass?, priv
}
fun findMethod(name: String): LoxFunction? {
if (methods.containsKey(name)) {
return methods[name]
}
if (superClass != null) {
return superClass.findMethod(name)
}
return null
}
override fun arity() = findMethod("init")?.arity() ?: 0

@ -989,4 +989,41 @@ var a = "global";
System.setOut(standardOut)
}
}
@Test
fun `Inheriting a method should work`() {
val standardOut = System.out
val outputStreamCaptor = ByteArrayOutputStream()
System.setOut(PrintStream(outputStreamCaptor))
try {
val code = """
class Doughnut {
cook() {
print "Fry until golden brown.";
}
}
class BostonCream < Doughnut {}
BostonCream().cook();
""".trimIndent()
val scanner = Scanner(code)
val tokens = scanner.scanTokens()
val parser = Parser(tokens)
val statements = parser.parse()
assertEquals(3, statements.size)
val interpreter = Interpreter()
val resolver = Resolver(interpreter)
resolver.resolve(statements)
interpreter.interpret(statements)
val output = outputStreamCaptor.toString().trim()
assertEquals("Fry until golden brown.", output)
} finally {
System.setOut(standardOut)
}
}}

Loading…
Cancel
Save