From 43051efcf6c89baddc367649c352ced94893645b Mon Sep 17 00:00:00 2001 From: kitasuke Date: Sat, 16 Feb 2019 23:51:46 +0900 Subject: [PATCH] Uncomment test code --- compiler/compiler_test.go | 188 +++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/compiler/compiler_test.go b/compiler/compiler_test.go index dccee2c..215e041 100644 --- a/compiler/compiler_test.go +++ b/compiler/compiler_test.go @@ -862,100 +862,100 @@ func TestClosure(t *testing.T) { code.Make(code.OpPop), }, }, - //{ - // input: ` - // fn(a) { - // fn(b) { - // fn(c) { - // a + b + c - // } - // } - // } - // `, - // expectedConstants: []interface{}{ - // []code.Instructions{ - // code.Make(code.OpGetFree, 0), - // code.Make(code.OpGetFree, 1), - // code.Make(code.OpAdd), - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpAdd), - // code.Make(code.OpReturnValue), - // }, - // []code.Instructions{ - // code.Make(code.OpGetFree, 0), - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpClosure, 0, 2), - // code.Make(code.OpReturnValue), - // }, - // []code.Instructions{ - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpClosure, 1, 1), - // code.Make(code.OpReturnValue), - // }, - // }, - // expectedInstructions: []code.Instructions{ - // code.Make(code.OpClosure, 2, 0), - // code.Make(code.OpPop), - // }, - //}, - //{ - // input: ` - // let global = 55; - // - // fn() { - // let a = 66; - // - // fn() { - // let b = 77; - // - // fn() { - // let c = 88; - // - // global + a + b + c; - // } - // } - // } - // `, - // expectedConstants: []interface{}{ - // 55, - // 66, - // 77, - // 88, - // []code.Instructions{ - // code.Make(code.OpConstant, 3), - // code.Make(code.OpSetLocal, 0), - // code.Make(code.OpGetGlobal, 0), - // code.Make(code.OpGetFree, 0), - // code.Make(code.OpAdd), - // code.Make(code.OpGetFree, 1), - // code.Make(code.OpAdd), - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpAdd), - // code.Make(code.OpReturnValue), - // }, - // []code.Instructions{ - // code.Make(code.OpConstant, 2), - // code.Make(code.OpSetLocal, 0), - // code.Make(code.OpGetFree, 0), - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpClosure, 4, 2), - // code.Make(code.OpReturnValue), - // }, - // []code.Instructions{ - // code.Make(code.OpConstant, 1), - // code.Make(code.OpSetLocal, 0), - // code.Make(code.OpGetLocal, 0), - // code.Make(code.OpClosure, 5, 1), - // code.Make(code.OpReturnValue), - // }, - // }, - // expectedInstructions: []code.Instructions{ - // code.Make(code.OpConstant, 0), - // code.Make(code.OpSetGlobal, 0), - // code.Make(code.OpClosure, 6, 0), - // code.Make(code.OpPop), - // }, - //}, + { + input: ` + fn(a) { + fn(b) { + fn(c) { + a + b + c + } + } + } + `, + expectedConstants: []interface{}{ + []code.Instructions{ + code.Make(code.OpGetFree, 0), + code.Make(code.OpGetFree, 1), + code.Make(code.OpAdd), + code.Make(code.OpGetLocal, 0), + code.Make(code.OpAdd), + code.Make(code.OpReturnValue), + }, + []code.Instructions{ + code.Make(code.OpGetFree, 0), + code.Make(code.OpGetLocal, 0), + code.Make(code.OpClosure, 0, 2), + code.Make(code.OpReturnValue), + }, + []code.Instructions{ + code.Make(code.OpGetLocal, 0), + code.Make(code.OpClosure, 1, 1), + code.Make(code.OpReturnValue), + }, + }, + expectedInstructions: []code.Instructions{ + code.Make(code.OpClosure, 2, 0), + code.Make(code.OpPop), + }, + }, + { + input: ` + let global = 55; + + fn() { + let a = 66; + + fn() { + let b = 77; + + fn() { + let c = 88; + + global + a + b + c; + } + } + } + `, + expectedConstants: []interface{}{ + 55, + 66, + 77, + 88, + []code.Instructions{ + code.Make(code.OpConstant, 3), + code.Make(code.OpSetLocal, 0), + code.Make(code.OpGetGlobal, 0), + code.Make(code.OpGetFree, 0), + code.Make(code.OpAdd), + code.Make(code.OpGetFree, 1), + code.Make(code.OpAdd), + code.Make(code.OpGetLocal, 0), + code.Make(code.OpAdd), + code.Make(code.OpReturnValue), + }, + []code.Instructions{ + code.Make(code.OpConstant, 2), + code.Make(code.OpSetLocal, 0), + code.Make(code.OpGetFree, 0), + code.Make(code.OpGetLocal, 0), + code.Make(code.OpClosure, 4, 2), + code.Make(code.OpReturnValue), + }, + []code.Instructions{ + code.Make(code.OpConstant, 1), + code.Make(code.OpSetLocal, 0), + code.Make(code.OpGetLocal, 0), + code.Make(code.OpClosure, 5, 1), + code.Make(code.OpReturnValue), + }, + }, + expectedInstructions: []code.Instructions{ + code.Make(code.OpConstant, 0), + code.Make(code.OpSetGlobal, 0), + code.Make(code.OpClosure, 6, 0), + code.Make(code.OpPop), + }, + }, } runCompilerTests(t, tests)