diff --git a/ghc/compiler/parser/hsparser.y b/ghc/compiler/parser/hsparser.y index 8a691fdcaf37e65d69af2c308ea92af6713c4bab..30bfa6f2b7bbb45e3c20b16d38f7bedc28e94d16 100644 --- a/ghc/compiler/parser/hsparser.y +++ b/ghc/compiler/parser/hsparser.y @@ -555,6 +555,8 @@ callconv: STDCALL { $$ = CALLCONV_STDCALL; } | C_CALL { $$ = CALLCONV_CCALL; } | PASCAL { $$ = CALLCONV_PASCAL; } | FASTCALL { $$ = CALLCONV_FASTCALL; } +/* If you leave out the specification of a calling convention, you'll get C's. */ + | /*empty*/ { $$ = CALLCONV_CCALL; } ; ext_name: STRING { $$ = mkjust(lsing($1)); } diff --git a/ghc/compiler/reader/ReadPrefix.lhs b/ghc/compiler/reader/ReadPrefix.lhs index 33ef93b7c0e31d81166bf36e6eecef2ae58aabda..8024e08f60669e9d4309fdcd22ddc44d382a66aa 100644 --- a/ghc/compiler/reader/ReadPrefix.lhs +++ b/ghc/compiler/reader/ReadPrefix.lhs @@ -608,7 +608,7 @@ wlkBinding binding wlkHsType ty `thenUgn` \ h_ty -> wlkExtName ext_name `thenUgn` \ h_ext_name -> rdCallConv cconv `thenUgn` \ h_cconv -> - rdImpExp imp_exp (cvFlag unsafe_flag) `thenUgn` \ h_imp_exp -> + rdForKind imp_exp (cvFlag unsafe_flag) `thenUgn` \ h_imp_exp -> returnUgn (RdrForeignDecl (ForeignDecl h_id h_imp_exp h_ty h_ext_name h_cconv src_loc)) a_sig_we_hope -> @@ -967,8 +967,9 @@ rdCallConv x = returnUgn x rdForKind :: Int -> Bool -> UgnM ForKind rdForKind 0 isUnsafe = -- foreign import returnUgn (FoImport isUnsafe) -rdImpExp 1 _ = -- foreign export +rdForKind 1 _ = -- foreign export returnUgn FoExport -rdImpExp 2 _ = -- foreign label +rdForKind 2 _ = -- foreign label returnUgn FoLabel + \end{code}