diff --git a/gnovm/pkg/gnolang/uverse_test.go b/gnovm/pkg/gnolang/uverse_test.go index 15fddf2112e..ae793903082 100644 --- a/gnovm/pkg/gnolang/uverse_test.go +++ b/gnovm/pkg/gnolang/uverse_test.go @@ -55,6 +55,11 @@ func TestComposite(t *testing.T) { assertOutput(t, c, "slice[(0 int),(2 int),(0 int),(4 int)]\n") } +// 현재 메인 함수에서 println은 실행되지만, defer는 실행되지 않음. +// 아마 내 생각엔 메모리 오류가 발생하는게 이것과 관련이 있을 것 같음. +// 즉, 함수 호출이 끝나면서 스택에 쌓인 defer를 실행하려고 하면, 이미 스택이 비워져서 오류가 발생하는 듯? +// 그럼 어떻게 해결해야 하나? + func TestSimpleRecover(t *testing.T) { m := NewMachine("test", nil) c := `package test @@ -114,3 +119,24 @@ func TestNestedRecover(t *testing.T) { assertOutput(t, c, "simple panic\nnested panic\nouter recover\n") } + +func TestFunction(t *testing.T) { + m := NewMachine("test", nil) + c := `package test + func f() func() { + return nil + } + + func main() { + g := f() + println(g) + if g == nil { + println("nil func") + } + }` + n := MustParseFile("main.go", c) + m.RunFiles(n) + m.RunMain() + + assertOutput(t, c, "func()()\nnil func\n") +} \ No newline at end of file diff --git a/gnovm/tests/files/fun10.gno b/gnovm/tests/files/fun10.gno index 55896395775..7443217eead 100644 --- a/gnovm/tests/files/fun10.gno +++ b/gnovm/tests/files/fun10.gno @@ -13,5 +13,5 @@ func main() { } // Output: -// nil func()() +// func()() // nil func