File tree Expand file tree Collapse file tree
src/test/kotlin/eu/jameshamilton/klox/compile Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package eu.jameshamilton.klox.compile
2+
3+ import eu.jameshamilton.klox.compile
4+ import eu.jameshamilton.klox.execute
5+ import eu.jameshamilton.klox.run
6+ import io.kotest.core.spec.style.FunSpec
7+ import java.io.File
8+
9+ class CompilerFunctionCompilerTest : FunSpec ({
10+ test("deeply nested closure captures variable from grandparent scope") {
11+ val loxSource = """
12+ fun outer() {
13+ var x = 42;
14+ fun middle() {
15+ fun inner() {
16+ print x;
17+ }
18+ inner();
19+ }
20+ middle();
21+ }
22+ outer(); // expect: 42
23+ """ .trimIndent()
24+
25+ val tempFile = File .createTempFile("nested_closure", ".lox")
26+ tempFile.deleteOnExit()
27+ tempFile.writeText(loxSource)
28+
29+ execute(tempFile) { compile(tempFile)?.let { run(it) } }
30+ }
31+
32+ test("deeply nested closure captures and modifies variable from grandparent scope") {
33+ val loxSource = """
34+ fun outer() {
35+ var x = 1;
36+ fun middle() {
37+ fun inner() {
38+ x = x + 10;
39+ }
40+ inner();
41+ }
42+ middle();
43+ print x; // expect: 11
44+ }
45+ outer();
46+ """ .trimIndent()
47+
48+ val tempFile = File .createTempFile("nested_closure_modify", ".lox")
49+ tempFile.deleteOnExit()
50+ tempFile.writeText(loxSource)
51+
52+ execute(tempFile) { compile(tempFile)?.let { run(it) } }
53+ }
54+ })
You can’t perform that action at this time.
0 commit comments