@@ -147,21 +147,22 @@ public struct Module {
147147 try ? store. nameRegistry. register ( instance: instance, nameSection: nameSection)
148148 }
149149
150+ let constEvalContext = ConstEvaluationContext ( instance: instance, moduleImports: moduleImports)
150151 // Step 12-13.
151152
152153 // Steps 14-15.
153154 do {
154155 for element in elements {
155156 guard case let . active( tableIndex, offset) = element. mode else { continue }
156- let offsetValue = try offset. evaluate ( context: instance )
157+ let offsetValue = try offset. evaluate ( context: constEvalContext )
157158 let table = try instance. tables [ validating: Int ( tableIndex) ]
158159 try table. withValue { table in
159160 guard let offset = offsetValue. maybeAddressOffset ( table. limits. isMemory64) else {
160161 throw InstantiationError . unsupported (
161162 " Expect \( ValueType . addressType ( isMemory64: table. limits. isMemory64) ) offset of active element segment but got \( offsetValue) "
162163 )
163164 }
164- let references = try element. evaluateInits ( context: instance )
165+ let references = try element. evaluateInits ( context: constEvalContext )
165166 try table. initialize (
166167 references, from: 0 , to: Int ( offset) , count: references. count
167168 )
@@ -176,7 +177,7 @@ public struct Module {
176177 // Step 16.
177178 do {
178179 for case let . active( data) in data {
179- let offsetValue = try data. offset. evaluate ( context: instance )
180+ let offsetValue = try data. offset. evaluate ( context: constEvalContext )
180181 let memory = try instance. memories [ validating: Int ( data. index) ]
181182 try memory. withValue { memory in
182183 guard let offset = offsetValue. maybeAddressOffset ( memory. limit. isMemory64) else {
0 commit comments