...
1 package binary
2
3 import (
4 "bytes"
5 "fmt"
6
7 "github.com/tetratelabs/wazero/api"
8 "github.com/tetratelabs/wazero/internal/wasm"
9 )
10
11
12
13
14 func decodeGlobal(r *bytes.Reader, enabledFeatures api.CoreFeatures, ret *wasm.Global) (err error) {
15 ret.Type, err = decodeGlobalType(r)
16 if err != nil {
17 return err
18 }
19
20 err = decodeConstantExpression(r, enabledFeatures, &ret.Init)
21 return
22 }
23
24
25
26
27 func decodeGlobalType(r *bytes.Reader) (wasm.GlobalType, error) {
28 vt, err := decodeValueTypes(r, 1)
29 if err != nil {
30 return wasm.GlobalType{}, fmt.Errorf("read value type: %w", err)
31 }
32
33 ret := wasm.GlobalType{
34 ValType: vt[0],
35 }
36
37 b, err := r.ReadByte()
38 if err != nil {
39 return wasm.GlobalType{}, fmt.Errorf("read mutablity: %w", err)
40 }
41
42 switch mut := b; mut {
43 case 0x00:
44 case 0x01:
45 ret.Mutable = true
46 default:
47 return wasm.GlobalType{}, fmt.Errorf("%w for mutability: %#x != 0x00 or 0x01", ErrInvalidByte, mut)
48 }
49 return ret, nil
50 }
51
View as plain text