desugarize datas and elems
This commit is contained in:
@@ -1168,14 +1168,18 @@ desugarize fields =
|
|||||||
mems = extract extractMemory fields,
|
mems = extract extractMemory fields,
|
||||||
globals = extract extractGlobal fields,
|
globals = extract extractGlobal fields,
|
||||||
elems = extract extractElemSegment fields,
|
elems = extract extractElemSegment fields,
|
||||||
datas = extract extractDataSegment fields
|
datas = extract extractDataSegment fields,
|
||||||
|
start = extractStart fields
|
||||||
} in
|
} in
|
||||||
S.emptyModule {
|
S.emptyModule {
|
||||||
S.types = map synTypeDefToStruct $ types mod,
|
S.types = map synTypeDefToStruct $ types mod,
|
||||||
S.functions = map (synFunctionToStruct mod) $ functions mod,
|
S.functions = map (synFunctionToStruct mod) $ functions mod,
|
||||||
S.tables = map synTableToStruct $ tables mod,
|
S.tables = map synTableToStruct $ tables mod,
|
||||||
S.imports = map (synImportToStruct $ types mod) $ imports mod,
|
S.imports = map (synImportToStruct $ types mod) $ imports mod,
|
||||||
S.mems = map synMemoryToStruct $ mems mod
|
S.elems = map (synElemToStruct mod) $ elems mod,
|
||||||
|
S.datas = map (synDataToStruct mod) $ datas mod,
|
||||||
|
S.mems = map synMemoryToStruct $ mems mod,
|
||||||
|
S.start = fmap (synStartToStruct mod) $ start mod
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
-- utils
|
-- utils
|
||||||
@@ -1465,12 +1469,39 @@ desugarize fields =
|
|||||||
else Nothing
|
else Nothing
|
||||||
|
|
||||||
-- elem segment
|
-- elem segment
|
||||||
|
synElemToStruct :: Module -> ElemSegment -> S.ElemSegment
|
||||||
|
synElemToStruct mod ElemSegment { tableIndex, offset, funcIndexes } =
|
||||||
|
let ctx = FunCtx mod [] [] [] in
|
||||||
|
let offsetInstrs = map (synInstrToStruct ctx) offset in
|
||||||
|
let idx = fromJust $ getTableIndex mod tableIndex in
|
||||||
|
let indexes = map (fromJust . getFuncIndex mod) funcIndexes in
|
||||||
|
S.ElemSegment idx offsetInstrs indexes
|
||||||
|
|
||||||
extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]
|
extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]
|
||||||
extractElemSegment elems (MFElem elem) = elem : elems
|
extractElemSegment elems (MFElem elem) = elem : elems
|
||||||
extractElemSegment elems _ = elems
|
extractElemSegment elems _ = elems
|
||||||
|
|
||||||
-- data segment
|
-- data segment
|
||||||
|
synDataToStruct :: Module -> DataSegment -> S.DataSegment
|
||||||
|
synDataToStruct mod DataSegment { memIndex, offset, datastring } =
|
||||||
|
let ctx = FunCtx mod [] [] [] in
|
||||||
|
let offsetInstrs = map (synInstrToStruct ctx) offset in
|
||||||
|
let idx = fromJust $ getMemIndex mod memIndex in
|
||||||
|
S.DataSegment idx offsetInstrs $ TLEncoding.encodeUtf8 datastring
|
||||||
|
|
||||||
extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]
|
extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]
|
||||||
extractDataSegment datas (MFData dataSegment) = dataSegment : datas
|
extractDataSegment datas (MFData dataSegment) = dataSegment : datas
|
||||||
extractDataSegment datas _ = datas
|
extractDataSegment datas _ = datas
|
||||||
|
|
||||||
|
-- start
|
||||||
|
synStartToStruct :: Module -> StartFunction -> S.StartFunction
|
||||||
|
synStartToStruct mod (StartFunction funIdx) =
|
||||||
|
S.StartFunction $ fromJust $ getFuncIndex mod funIdx
|
||||||
|
|
||||||
|
extractStart :: [ModuleField] -> Maybe StartFunction
|
||||||
|
extractStart = foldl' extractStart' Nothing
|
||||||
|
|
||||||
|
extractStart' :: Maybe StartFunction -> ModuleField -> Maybe StartFunction
|
||||||
|
extractStart' _ (MFStart start) = Just start
|
||||||
|
extractStart' start _ = start
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user