package binaryimport ()// dataSegmentPrefix represents three types of data segments.//// https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/binary/modules.html#data-sectiontype dataSegmentPrefix = uint32const (// dataSegmentPrefixActive is the prefix for the version 1.0 compatible data segment, which is classified as "active" in 2.0. dataSegmentPrefixActive dataSegmentPrefix = 0x0// dataSegmentPrefixPassive prefixes the "passive" data segment as in version 2.0 specification. dataSegmentPrefixPassive dataSegmentPrefix = 0x1// dataSegmentPrefixActiveWithMemoryIndex is the active prefix with memory index encoded which is defined for futur use as of 2.0. dataSegmentPrefixActiveWithMemoryIndex dataSegmentPrefix = 0x2)func decodeDataSegment( *bytes.Reader, api.CoreFeatures, *wasm.DataSegment) ( error) { , , := leb128.DecodeUint32()if != nil { = fmt.Errorf("read data segment prefix: %w", )return }if != dataSegmentPrefixActive {if = .RequireEnabled(api.CoreFeatureBulkMemoryOperations); != nil { = fmt.Errorf("non-zero prefix for data segment is invalid as %w", )return } }switch {casedataSegmentPrefixActive,dataSegmentPrefixActiveWithMemoryIndex:// Active data segment as in // https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/binary/modules.html#data-sectionif == 0x2 { , , := leb128.DecodeUint32()if != nil {returnfmt.Errorf("read memory index: %v", ) } elseif != 0 {returnfmt.Errorf("memory index must be zero but was %d", ) } } = decodeConstantExpression(, , &.OffsetExpression)if != nil {returnfmt.Errorf("read offset expression: %v", ) }casedataSegmentPrefixPassive:// Passive data segment doesn't need const expr nor memory index encoded. // https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/binary/modules.html#data-section .Passive = truedefault: = fmt.Errorf("invalid data segment prefix: 0x%x", )return } , , := leb128.DecodeUint32()if != nil { = fmt.Errorf("get the size of vector: %v", )return } .Init = make([]byte, )if _, = io.ReadFull(, .Init); != nil { = fmt.Errorf("read bytes for init: %v", ) }return}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.