package wasm
import (
"github.com/tetratelabs/wazero/api"
"github.com/tetratelabs/wazero/internal/internalapi"
)
func (m *Module ) ImportedMemories () (ret []api .MemoryDefinition ) {
for i := range m .MemoryDefinitionSection {
d := &m .MemoryDefinitionSection [i ]
if d .importDesc != nil {
ret = append (ret , d )
}
}
return
}
func (m *Module ) ExportedMemories () map [string ]api .MemoryDefinition {
ret := map [string ]api .MemoryDefinition {}
for i := range m .MemoryDefinitionSection {
d := &m .MemoryDefinitionSection [i ]
for _ , e := range d .exportNames {
ret [e ] = d
}
}
return ret
}
func (m *Module ) BuildMemoryDefinitions () {
var moduleName string
if m .NameSection != nil {
moduleName = m .NameSection .ModuleName
}
memoryCount := m .ImportMemoryCount
if m .MemorySection != nil {
memoryCount ++
}
if memoryCount == 0 {
return
}
m .MemoryDefinitionSection = make ([]MemoryDefinition , 0 , memoryCount )
importMemIdx := Index (0 )
for i := range m .ImportSection {
imp := &m .ImportSection [i ]
if imp .Type != ExternTypeMemory {
continue
}
m .MemoryDefinitionSection = append (m .MemoryDefinitionSection , MemoryDefinition {
importDesc : &[2 ]string {imp .Module , imp .Name },
index : importMemIdx ,
memory : imp .DescMem ,
})
importMemIdx ++
}
if m .MemorySection != nil {
m .MemoryDefinitionSection = append (m .MemoryDefinitionSection , MemoryDefinition {
index : importMemIdx ,
memory : m .MemorySection ,
})
}
for i := range m .MemoryDefinitionSection {
d := &m .MemoryDefinitionSection [i ]
d .moduleName = moduleName
for i := range m .ExportSection {
e := &m .ExportSection [i ]
if e .Type == ExternTypeMemory && e .Index == d .index {
d .exportNames = append (d .exportNames , e .Name )
}
}
}
}
type MemoryDefinition struct {
internalapi .WazeroOnlyType
moduleName string
index Index
importDesc *[2 ]string
exportNames []string
memory *Memory
}
func (f *MemoryDefinition ) ModuleName () string {
return f .moduleName
}
func (f *MemoryDefinition ) Index () uint32 {
return f .index
}
func (f *MemoryDefinition ) Import () (moduleName , name string , isImport bool ) {
if importDesc := f .importDesc ; importDesc != nil {
moduleName , name , isImport = importDesc [0 ], importDesc [1 ], true
}
return
}
func (f *MemoryDefinition ) ExportNames () []string {
return f .exportNames
}
func (f *MemoryDefinition ) Min () uint32 {
return f .memory .Min
}
func (f *MemoryDefinition ) Max () (max uint32 , encoded bool ) {
max = f .memory .Max
encoded = f .memory .IsMaxEncoded
return
}
The pages are generated with Golds v0.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 .