@@ -29,6 +29,10 @@ import (
29
29
30
30
var account_CapabilitiesTypeID = sema .AccountCapabilitiesType .ID ()
31
31
var account_CapabilitiesStaticType StaticType = PrimitiveStaticTypeAccount_Capabilities
32
+ var account_CapabilitiesFieldNames = []string {
33
+ sema .Account_CapabilitiesTypeStorageFieldName ,
34
+ sema .Account_CapabilitiesTypeAccountFieldName ,
35
+ }
32
36
33
37
func NewAccountCapabilitiesValue (
34
38
gauge common.MemoryGauge ,
@@ -42,27 +46,39 @@ func NewAccountCapabilitiesValue(
42
46
accountCapabilitiesConstructor func () Value ,
43
47
) Value {
44
48
45
- var storageCapabilities Value
46
- var accountCapabilities Value
49
+ var capabilities * SimpleCompositeValue
50
+
51
+ fields := map [string ]Value {}
47
52
48
- computeField := func (name string , inter * Interpreter , locationRange LocationRange ) Value {
53
+ computeLazyStoredField := func (name string ) Value {
49
54
switch name {
50
55
case sema .Account_CapabilitiesTypeStorageFieldName :
51
- if storageCapabilities == nil {
52
- storageCapabilities = storageCapabilitiesConstructor ()
53
- }
54
- return storageCapabilities
55
-
56
+ return storageCapabilitiesConstructor ()
56
57
case sema .Account_CapabilitiesTypeAccountFieldName :
57
- if accountCapabilities == nil {
58
- accountCapabilities = accountCapabilitiesConstructor ()
59
- }
60
- return accountCapabilities
58
+ return accountCapabilitiesConstructor ()
59
+ case sema .Account_CapabilitiesTypeGetFunctionName :
60
+ return getFunction (capabilities )
61
+ case sema .Account_CapabilitiesTypeBorrowFunctionName :
62
+ return borrowFunction (capabilities )
63
+ case sema .Account_CapabilitiesTypeExistsFunctionName :
64
+ return existsFunction (capabilities )
65
+ case sema .Account_CapabilitiesTypePublishFunctionName :
66
+ return publishFunction (capabilities )
67
+ case sema .Account_CapabilitiesTypeUnpublishFunctionName :
68
+ return unpublishFunction (capabilities )
61
69
}
62
70
63
71
return nil
64
72
}
65
73
74
+ computeField := func (name string , _ * Interpreter , _ LocationRange ) Value {
75
+ field := computeLazyStoredField (name )
76
+ if field != nil {
77
+ fields [name ] = field
78
+ }
79
+ return field
80
+ }
81
+
66
82
var str string
67
83
stringer := func (interpreter * Interpreter , seenReferences SeenReferences , locationRange LocationRange ) string {
68
84
if str == "" {
@@ -73,24 +89,16 @@ func NewAccountCapabilitiesValue(
73
89
return str
74
90
}
75
91
76
- capabilities : = NewSimpleCompositeValue (
92
+ capabilities = NewSimpleCompositeValue (
77
93
gauge ,
78
94
account_CapabilitiesTypeID ,
79
95
account_CapabilitiesStaticType ,
80
- nil ,
81
- nil ,
96
+ account_CapabilitiesFieldNames ,
97
+ fields ,
82
98
computeField ,
83
99
nil ,
84
100
stringer ,
85
101
)
86
102
87
- capabilities .Fields = map [string ]Value {
88
- sema .Account_CapabilitiesTypeGetFunctionName : getFunction (capabilities ),
89
- sema .Account_CapabilitiesTypeBorrowFunctionName : borrowFunction (capabilities ),
90
- sema .Account_CapabilitiesTypeExistsFunctionName : existsFunction (capabilities ),
91
- sema .Account_CapabilitiesTypePublishFunctionName : publishFunction (capabilities ),
92
- sema .Account_CapabilitiesTypeUnpublishFunctionName : unpublishFunction (capabilities ),
93
- }
94
-
95
103
return capabilities
96
104
}
0 commit comments