From 7df6d7256b5da63fb4318ff9e929388052d11e90 Mon Sep 17 00:00:00 2001 From: fy Date: Sat, 15 Jun 2024 15:55:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E4=B8=80=E7=A7=8D?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=87=BD=E6=95=B0=E8=B0=83=E7=94=A8=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollvm.go | 4 ++-- types.go | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/rollvm.go b/rollvm.go index 619e111d..ac459c9a 100644 --- a/rollvm.go +++ b/rollvm.go @@ -34,7 +34,7 @@ func NewVM() *Context { } // RunExpr 注: 最后不一定叫这个名字,这个函数作用是,即使当前vm被占用,也能执行语句,是为了指令hack而服务的 -func (ctx *Context) RunExpr(value string) (*VMValue, error) { +func (ctx *Context) RunExpr(value string, useUpCtxLocal bool) (*VMValue, error) { val := NewFunctionValRaw(&FunctionData{ Expr: value, Name: "", @@ -43,7 +43,7 @@ func (ctx *Context) RunExpr(value string) (*VMValue, error) { codeIndex: 0, }) - v := val.FuncInvoke(ctx, nil) + v := val.FuncInvokeRaw(ctx, nil, useUpCtxLocal) return v, ctx.Error } diff --git a/types.go b/types.go index 9a7b8b7d..7aca1c10 100644 --- a/types.go +++ b/types.go @@ -1430,11 +1430,19 @@ func (v *VMValue) ComputedExecute(ctx *Context) *VMValue { } func (v *VMValue) FuncInvoke(ctx *Context, params []*VMValue) *VMValue { + return v.FuncInvokeRaw(ctx, params, false) +} + +func (v *VMValue) FuncInvokeRaw(ctx *Context, params []*VMValue, useUpCtxLocal bool) *VMValue { // TODO: 先复制computed代码修改,后续重构 vm := NewVM() cd, _ := v.ReadFunctionData() - vm.Attrs = &ValueMap{} + if useUpCtxLocal { + vm.Attrs = ctx.Attrs + } else { + vm.Attrs = &ValueMap{} + } // 设置参数 if len(cd.Params) != len(params) { @@ -1487,7 +1495,9 @@ func (v *VMValue) FuncInvoke(ctx *Context, params []*VMValue) *VMValue { } ctx.NumOpCount = vm.NumOpCount - vm.Attrs = &ValueMap{} // 清空 + if !useUpCtxLocal { + vm.Attrs = &ValueMap{} // 清空 + } return ret }