|
|
@@ -628,7 +628,7 @@ func TestFunctionCalls(t *testing.T) {
|
|
|
},
|
|
|
expectedInstructions: []code.Instructions{
|
|
|
code.Make(code.OpConstant, 1), // The compiled function
|
|
|
- code.Make(code.OpCall),
|
|
|
+ code.Make(code.OpCall, 0),
|
|
|
code.Make(code.OpPop),
|
|
|
},
|
|
|
},
|
|
|
@@ -644,7 +644,54 @@ func TestFunctionCalls(t *testing.T) {
|
|
|
code.Make(code.OpConstant, 1), // The compiled function
|
|
|
code.Make(code.OpSetGlobal, 0),
|
|
|
code.Make(code.OpGetGlobal, 0),
|
|
|
- code.Make(code.OpCall),
|
|
|
+ code.Make(code.OpCall, 0),
|
|
|
+ code.Make(code.OpPop),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ input: `let oneArg = fn(a) { a };oneArg(24);`,
|
|
|
+ expectedConstants: []interface{}{
|
|
|
+ []code.Instructions{
|
|
|
+ code.Make(code.OpGetLocal, 0),
|
|
|
+ code.Make(code.OpReturnValue),
|
|
|
+ },
|
|
|
+ 24,
|
|
|
+ },
|
|
|
+ expectedInstructions: []code.Instructions{
|
|
|
+ code.Make(code.OpConstant, 0),
|
|
|
+ code.Make(code.OpSetGlobal, 0),
|
|
|
+ code.Make(code.OpGetGlobal, 0),
|
|
|
+ code.Make(code.OpConstant, 1),
|
|
|
+ code.Make(code.OpCall, 1),
|
|
|
+ code.Make(code.OpPop),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ input: `
|
|
|
+ let manyArg = fn(a, b, c) { a; b; c;};
|
|
|
+ manyArg(24, 25, 26);
|
|
|
+ `,
|
|
|
+ expectedConstants: []interface{}{
|
|
|
+ []code.Instructions{
|
|
|
+ code.Make(code.OpGetLocal, 0),
|
|
|
+ code.Make(code.OpPop),
|
|
|
+ code.Make(code.OpGetLocal, 1),
|
|
|
+ code.Make(code.OpPop),
|
|
|
+ code.Make(code.OpGetLocal, 2),
|
|
|
+ code.Make(code.OpReturnValue),
|
|
|
+ },
|
|
|
+ 24,
|
|
|
+ 25,
|
|
|
+ 26,
|
|
|
+ },
|
|
|
+ expectedInstructions: []code.Instructions{
|
|
|
+ code.Make(code.OpConstant, 0),
|
|
|
+ code.Make(code.OpSetGlobal, 0),
|
|
|
+ code.Make(code.OpGetGlobal, 0),
|
|
|
+ code.Make(code.OpConstant, 1),
|
|
|
+ code.Make(code.OpConstant, 2),
|
|
|
+ code.Make(code.OpConstant, 3),
|
|
|
+ code.Make(code.OpCall, 3),
|
|
|
code.Make(code.OpPop),
|
|
|
},
|
|
|
},
|