From aae3401ff6552f32b02d0dcc7801c84b2d1938a1 Mon Sep 17 00:00:00 2001 From: Ilya Rezvov Date: Thu, 25 Jan 2018 11:51:43 -0800 Subject: [PATCH] add abbreviation for memory inline data definition --- src/Language/Wasm/Parser.y | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Language/Wasm/Parser.y b/src/Language/Wasm/Parser.y index 864edd0..a927bb1 100644 --- a/src/Language/Wasm/Parser.y +++ b/src/Language/Wasm/Parser.y @@ -656,6 +656,8 @@ locals_body1 :: { ([LocalType], [Instruction]) } -- FUNCTION END -- +-- GLOBAL -- + global :: { [ModuleField] } : 'global' opt(ident) global_type_export_import { $3 $2 } @@ -676,6 +678,10 @@ global_mut_export_import :: { Maybe Ident -> [ModuleField] } \ident -> [MFImport $ Import $2 $3 $ ImportGlobal ident $5] } +-- GLOBAL END -- + +-- MEMORY -- + memory :: { [ModuleField] } : 'memory' opt(ident) memory_limits_export_import { $3 $2 } @@ -690,10 +696,20 @@ memory_limits_export_import1 :: { Maybe Ident -> [ModuleField] } | 'import' name name ')' limits ')' { \ident -> [MFImport $ Import $2 $3 $ ImportMemory ident $5] } + | 'data' string ')' ')' { + \ident -> + let m = fromIntegral $ TL.length $2 in + [ + MFMem $ Memory ident $ Limit m $ Just m, + MFData $ DataSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] $2 + ] + } memory_limits :: { Maybe Ident -> [ModuleField] } : limits ')' { \ident -> [MFMem $ Memory ident $1] } +-- MEMOTY END -- + -- TABLE -- limits :: { Limit } : u32 opt(u32) { Limit (fromIntegral $1) (fromIntegral `fmap` $2) }