Fix function calls with int64 params (#663)

Fixes #661
This commit is contained in:
Anton Medvedev
2024-05-27 12:05:19 +02:00
committed by GitHub
parent e944648160
commit 0308dbbbb4
3 changed files with 62 additions and 1 deletions
-1
View File
@@ -345,7 +345,6 @@ func (c *compiler) IntegerNode(node *ast.IntegerNode) {
}
c.emitPush(int32(node.Value))
case reflect.Int64:
panic(fmt.Sprintf("constant %d overflows int64", node.Value))
c.emitPush(int64(node.Value))
case reflect.Uint:
if node.Value < 0 {
+22
View File
@@ -628,3 +628,25 @@ func TestCompile_optimizes_jumps(t *testing.T) {
})
}
}
func TestCompile_IntegerArgsFunc(t *testing.T) {
env := mock.Env{}
tests := []struct{ code string }{
{"FuncInt(0)"},
{"FuncInt8(0)"},
{"FuncInt16(0)"},
{"FuncInt32(0)"},
{"FuncInt64(0)"},
{"FuncUint(0)"},
{"FuncUint8(0)"},
{"FuncUint16(0)"},
{"FuncUint32(0)"},
{"FuncUint64(0)"},
}
for _, tt := range tests {
t.Run(tt.code, func(t *testing.T) {
_, err := expr.Compile(tt.code, expr.Env(env))
require.NoError(t, err)
})
}
}
+40
View File
@@ -65,6 +65,46 @@ func (p Env) FuncTyped(_ string) int {
return 2023
}
func (p Env) FuncInt(_ int) int {
return 0
}
func (p Env) FuncUint(_ uint) int {
return 0
}
func (p Env) FuncInt8(_ float64) int {
return 0
}
func (p Env) FuncInt16(_ int16) int {
return 0
}
func (p Env) FuncInt32(_ int32) int {
return 0
}
func (p Env) FuncInt64(_ int64) int {
return 0
}
func (p Env) FuncUint8(_ uint8) int {
return 0
}
func (p Env) FuncUint16(_ uint16) int {
return 0
}
func (p Env) FuncUint32(_ uint32) int {
return 0
}
func (p Env) FuncUint64(_ uint64) int {
return 0
}
func (p Env) TimeEqualString(a time.Time, s string) bool {
return a.Format("2006-01-02") == s
}