- | 'foreign' STRING expr '(' hint_exprs0 ')' vols ';'
- {% foreignCall $2 [] $3 $5 $7 }
- | lreg '=' 'foreign' STRING expr '(' hint_exprs0 ')' vols ';'
- {% let result = do r <- $1; return (r,NoHint) in
- foreignCall $4 [result] $5 $7 $9 }
- | 'prim' '%' NAME '(' hint_exprs0 ')' vols ';'
- {% primCall [] $3 $5 $7 }
- | lreg '=' 'prim' '%' NAME '(' hint_exprs0 ')' vols ';'
- {% let result = do r <- $1; return (r,NoHint) in
- primCall [result] $5 $7 $9 }
- | STRING lreg '=' 'foreign' STRING expr '(' hint_exprs0 ')' vols ';'
- {% do h <- parseHint $1;
- let result = do r <- $2; return (r,h) in
- foreignCall $5 [result] $6 $8 $10 }
+ | maybe_results 'foreign' STRING expr '(' hint_exprs0 ')' vols ';'
+ {% foreignCall $3 $1 $4 $6 $8 }
+ | maybe_results 'prim' '%' NAME '(' hint_exprs0 ')' vols ';'
+ {% primCall $1 $4 $6 $8 }