From 4708cf715c9299c3461f6ed6986366c51bec8614 Mon Sep 17 00:00:00 2001 From: fy Date: Sat, 22 Jun 2024 16:02:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3IsComputedLoaded?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E4=B8=8D=E5=87=86=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollvm_test.go | 39 +++++++++++++++++++++++++++++++++++++++ types.go | 9 ++------- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/rollvm_test.go b/rollvm_test.go index 1dd0b207..538d1343 100644 --- a/rollvm_test.go +++ b/rollvm_test.go @@ -1412,6 +1412,45 @@ func TestIsDiceCalculateExists(t *testing.T) { if assert.NoError(t, err) { assert.False(t, vm.IsCalculateExists()) } + + err = vm.Parse("1+2") + if assert.NoError(t, err) { + assert.True(t, vm.IsCalculateExists()) + } + + err = vm.Parse("f()") + if assert.NoError(t, err) { + assert.True(t, vm.IsCalculateExists()) + } +} + +func TestIsDiceCalculateExists2(t *testing.T) { + vm := NewVM() + assert.Equal(t, vm.IsComputedLoaded, false) + err := vm.Run("&a=4d1; a") + if assert.NoError(t, err) { + assert.Equal(t, vm.IsComputedLoaded, true) + } + + err = vm.Run("1+1") + if assert.NoError(t, err) { + assert.Equal(t, vm.IsComputedLoaded, false) + } +} + +func TestIsDiceCalculateExists3(t *testing.T) { + vm := NewVM() + vm.GlobalValueLoadFunc = func(name string) *VMValue { + if name == "a" { + return NewComputedVal("4d1") + } + return nil + } + err := vm.Run("a") + if assert.NoError(t, err) { + assert.True(t, valueEqual(ni(4), vm.Ret)) + assert.Equal(t, vm.IsComputedLoaded, true) + } } func TestDiceExprIndexBug(t *testing.T) { diff --git a/types.go b/types.go index 6c103d23..88e4a928 100644 --- a/types.go +++ b/types.go @@ -272,7 +272,6 @@ func (ctx *Context) LoadNameLocal(name string, isRaw bool) *VMValue { } if !isRaw && ret.TypeId == VMTypeComputedValue { ret = ret.ComputedExecute(ctx) - ctx.IsComputedLoaded = true if ctx.Error != nil { return nil } @@ -1444,9 +1443,7 @@ func (v *VMValue) ComputedExecute(ctx *Context) *VMValue { } ctx.NumOpCount = vm.NumOpCount - if vm.IsComputedLoaded { - ctx.IsComputedLoaded = true - } + ctx.IsComputedLoaded = true return ret } @@ -1519,9 +1516,7 @@ func (v *VMValue) FuncInvokeRaw(ctx *Context, params []*VMValue, useUpCtxLocal b if !useUpCtxLocal { vm.Attrs = &ValueMap{} // 清空 } - if vm.IsComputedLoaded { - ctx.IsComputedLoaded = true - } + ctx.IsComputedLoaded = true return ret }