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 }