properly handle order of params and result types in function type in call_indirect instruction

This commit is contained in:
Ilya Rezvov
2018-02-23 17:01:22 -08:00
parent 4c8a71de16
commit e7978b8d48
+18 -2
View File
@@ -649,8 +649,24 @@ raw_call_indirect_functype :: { (Maybe FuncType, [Instruction]) }
| {- empty -} { (Nothing, []) }
raw_call_indirect_functype1 :: { (Maybe FuncType, [Instruction]) }
: paramsresulttypeuse raw_call_indirect_functype {
(Just $ mergeFuncType $1 $ fromMaybe emptyFuncType $ fst $2, snd $2)
: 'param' list(valtype) ')' raw_call_indirect_functype {
let ft = fromMaybe emptyFuncType $ fst $4 in
(Just $ ft { params = map (ParamType Nothing) $2 ++ params ft }, snd $4)
}
| 'param' ident valtype ')' raw_call_indirect_functype {
let ft = fromMaybe emptyFuncType $ fst $5 in
(Just $ ft { params = (ParamType (Just $2) $3) : params ft }, snd $5)
}
| raw_call_indirect_return_functype1 { $1 }
raw_call_indirect_return_functype :: { (Maybe FuncType, [Instruction]) }
: '(' raw_call_indirect_return_functype1 { $2 }
| {- empty -} { (Nothing, []) }
raw_call_indirect_return_functype1 :: { (Maybe FuncType, [Instruction]) }
: 'result' list(valtype) ')' raw_call_indirect_return_functype {
let ft = fromMaybe emptyFuncType $ fst $4 in
(Just $ ft { results = $2 ++ results ft }, snd $4)
}
| foldedinstr1 { (Nothing, $1) }