func readInitExpr(load loader.L, m *Module) (valueBits uint64, t types.T) { op := opcode(load.Byte()) switch op { case opcodeI32Const: valueBits = uint64(int64(load.Varint32())) t = types.I32 case opcodeI64Const: valueBits = uint64(load.Varint64()) t = types.I64 case opcodeF32Const: valueBits = uint64(load.Uint32()) t = types.F32 case opcodeF64Const: valueBits = load.Uint64() t = types.F64 case opcodeGetGlobal: i := load.Varuint32() if i >= uint32(m.numImportGlobals) { panic(fmt.Errorf("import global index out of bounds in initializer expression: %d", i)) } g := m.globals[i] valueBits = g.init t = g.t default: panic(fmt.Errorf("unsupported operation in initializer expression: %s", op)) } if op := opcode(load.Byte()); op != opcodeEnd { panic(fmt.Errorf("unexpected operation in initializer expression when expecting end: %s", op)) } return }