1. 24 Nov, 2014 5 commits
  2. 23 Nov, 2014 6 commits
  3. 22 Nov, 2014 10 commits
  4. 21 Nov, 2014 19 commits
    • thomie's avatar
      Deprecate Data.Version.versionTags (#2496) · 137b3313
      thomie authored
      The library submission was accepted:
      
        http://www.haskell.org/pipermail/libraries/2014-September/023777.html
      
      The T5892ab testcases were changed to use `Data.Tree` instead of `Data.Version`
      
      Reviewed By: ekmett
      
      Differential Revision: https://phabricator.haskell.org/D395
      137b3313
    • Merijn Verstraaten's avatar
      Add -fdefer-typed-holes flag which defers hole errors to runtime. · 2cc854b7
      Merijn Verstraaten authored
      Summary:
      As proposed by Richard on Trac. This patch adds a new flag -fdefer-typed-holes
      and changes the semantics of the -fno-warn-typed-holes flag.
      
      To summarise, by default GHC has typed holes enabled and produces a compile
      error when it encounters a typed hole.
      
      When -fdefer-type-errors OR -fdefer-typed-holes is enabled, hole errors are
      converted to warnings and result in runtime errors when evaluated.
      
      The warning flag -fwarn-typed-holes is on by default. Without -fdefer-type-errors
      or -fdefer-typed-holes this flag is a no-op, since typed holes are an error
      under these conditions. If either of the defer flags are enabled (converting
      typed hole errors into warnings) the -fno-warn-typed-holes flag disables the
      warnings. This means compilation silently succeeds and evaluating a hole will
      produce a runtime error.
      
      The rationale behind allowing typed holes warnings to be silenced is that tools
      like Syntastic for vim highlight warnings and hole warnings may be undesirable.
      Signed-off-by: Merijn Verstraaten's avatarMerijn Verstraaten <merijn@inconsistent.nl>
      
      Test Plan: validate
      
      Reviewers: austin, simonpj, thomie
      
      Reviewed By: simonpj, thomie
      
      Subscribers: Fuuzetsu, thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D442
      
      GHC Trac Issues: #9497
      
      Conflicts:
      	compiler/main/DynFlags.hs
      2cc854b7
    • Lennart Kolmodin's avatar
      ghc: allow --show-options and --interactive together · 624a7c5a
      Lennart Kolmodin authored
      Summary:
      Previously 'ghc --show-options' showed all options that GHC can possibly
      accept. With this patch, it'll only show the options that have effect in
      non-interactive modes.
      This change also adds support for using 'ghc --interactive --show-options'
      which previously was disallowed. This command will show all options that have
      effect in the interactive mode.
      The CmdLineParser is updated to know about the GHC modes, and then each flag
      is annotated with which mode it has effect.
      This fixes #9259.
      
      Test Plan:
      Try out --show-options with --interactive on the command line. With and without
      --interactive should give different results.
      Run the test suite, mode001 has been updated to verify this new flag
      combination.
      
      Reviewers: austin, jstolarek
      
      Reviewed By: austin, jstolarek
      
      Subscribers: jstolarek, thomie, carter, simonmar
      
      Differential Revision: https://phabricator.haskell.org/D337
      
      GHC Trac Issues: #9259
      624a7c5a
    • spl's avatar
      Add function for size-checked conversion of Integral types · 02f8f6ad
      spl authored
      The new function `Data.Bits.toIntegralSized` provides a similar
      functionality to `fromIntegral` but adds validation that the
      argument fits in the result type's size.
      
      The implementation of `toIntegralSized` has been derived from `intCastMaybe`
      (which is part of Herbert Valerio Riedel's `int-cast` package,
      see http://hackage.haskell.org/package/int-cast)
      
      Addresses #9816
      
      Reviewed By: ekmett, austin
      
      Differential Revision: https://phabricator.haskell.org/D512
      02f8f6ad
    • snoyberg's avatar
      Add displayException method to Exception (#9822) · 3222b7ae
      snoyberg authored
      Defaults to using `show` to prevent any breakage of existing code.  Also
      provide a custom implementation for `SomeException` which uses the
      underlying exception's `displayException`.
      
      Differential Revision: https://phabricator.haskell.org/D517
      3222b7ae
    • Ben Gamari's avatar
      llvmGen: Compatibility with LLVM 3.5 (re #9142) · e16a342d
      Ben Gamari authored
      Due to changes in LLVM 3.5 aliases now may only refer to definitions.
      Previously to handle symbols defined outside of the current commpilation
      unit GHC would emit both an `external` declaration, as well as an alias
      pointing to it, e.g.,
      
          @stg_BCO_info = external global i8
          @stg_BCO_info$alias = alias private i8* @stg_BCO_info
      
      Where references to `stg_BCO_info` will use the alias
      `stg_BCO_info$alias`. This is not permitted under the new alias
      behavior, resulting in errors resembling,
      
          Alias must point to a definition
          i8* @"stg_BCO_info$alias"
      
      To fix this, we invert the naming relationship between aliases and
      definitions. That is, now the symbol definition takes the name
      `@stg_BCO_info$def` and references use the actual name, `@stg_BCO_info`.
      This means the external symbols can be handled by simply emitting an
      `external` declaration,
      
          @stg_BCO_info = external global i8
      
      Whereas in the case of a forward declaration we emit,
      
          @stg_BCO_info = alias private i8* @stg_BCO_info$def
      
      Reviewed By: austin
      
      Differential Revision: https://phabricator.haskell.org/D155
      e16a342d
    • David Terei's avatar
    • David Terei's avatar
      5f84bd1d
    • David Terei's avatar
    • David Terei's avatar
    • Joachim Breitner's avatar
      Add T7220a.stderr · 6265f1c3
      Joachim Breitner authored
      which presumably was just forgotten when creating the testcase in
      commit 7b1a8562.
      6265f1c3
    • Alex Petrov's avatar
      Add 'fillBytes' to Foreign.Marshal.Utils. · 35833122
      Alex Petrov authored
      fillBytes uses 'memset' to fill a memory area with a given byte value.
      
      Reviewed By: austin, hvr
      
      Differential Revision: https://phabricator.haskell.org/D465
      35833122
    • Alan Zimmerman's avatar
      Capture original source for literals · c0ad5bc0
      Alan Zimmerman authored
      Summary:
      Make HsLit and OverLitVal have original source strings, for source to
      source conversions using the GHC API
      
      This is part of the ongoing AST Annotations work, as captured in
      https://ghc.haskell.org/trac/ghc/wiki/GhcAstAnnotations and
      https://ghc.haskell.org/trac/ghc/ticket/9628#comment:28
      
      The motivations for the literals is as follows
      
      ```lang=haskell
      x,y :: Int
      x = 0003
      y = 0x04
      
      s :: String
      s = "\x20"
      
      c :: Char
      c = '\x20'
      
      d :: Double
      d = 0.00
      
      blah = x
        where
          charH = '\x41'#
          intH = 0004#
          wordH = 005##
          floatH = 3.20#
          doubleH = 04.16##
          x = 1
      ```
      
      Test Plan: ./sh validate
      
      Reviewers: simonpj, austin
      
      Reviewed By: simonpj, austin
      
      Subscribers: thomie, goldfire, carter, simonmar
      
      Differential Revision: https://phabricator.haskell.org/D412
      
      GHC Trac Issues: #9628
      c0ad5bc0
    • Herbert Valerio Riedel's avatar
      Add Data.Void to base (re #9814) · a97f90ce
      Herbert Valerio Riedel authored
      This adds the module `Data.Void` (formerly provided by Edward Kmett's `void`
      package) to `base`.
      
      The original Haskell98 compatible implementation has been modified to use
      modern GHC features (among others this makes use of `EmptyCase` as
      motivated by #2431), and `vacuousM` was dropped since it's redundant now
      with the AMP in place.  Instances for classes not part of `base` had to be
      dropped as well.
      
      TODO: Documentation could be improved
      
      Reviewed By: ekmett, austin
      
      Differential Revision: https://phabricator.haskell.org/D506
      a97f90ce
    • Luite Stegeman's avatar
      Export more Packages functions · 3793d3b2
      Luite Stegeman authored
      Summary:
      This patch exports functions for finding the active package
      databases and their locations from the Packages module. This
      allows GHC API clients to use other tools, like Cabal, to gather
      package information that's not directly available from the
      binary package db.
      
      Reviewers: duncan, austin
      
      Reviewed By: austin
      
      Subscribers: thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D514
      3793d3b2
    • leroux's avatar
      Fixes ghci :unset -X<ext> so that it doesn't fail to reverse option. (fixes trac #9293) · 3e4f49b0
      leroux authored
      Summary: ghci unset could not reverse language extensions.
      
      Reviewers: hvr, thomie, austin
      
      Reviewed By: hvr, thomie, austin
      
      Subscribers: goldfire, hvr, thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D516
      
      GHC Trac Issues: #9293
      3e4f49b0
    • Alan Zimmerman's avatar
      Add API Annotations · 803fc5db
      Alan Zimmerman authored
      Summary:
      The final design and discussion is captured at
      https://ghc.haskell.org/trac/ghc/wiki/GhcAstAnnotations
      
      This is a proof of concept implementation of a completely
      separate annotation structure, populated in the parser,and tied to the
      AST by means of a virtual "node-key" comprising the surrounding
      SrcSpan and a value derived from the specific constructor used for the
      node.
      
      The key parts of the design are the following.
      
      == The Annotations ==
      
      In `hsSyn/ApiAnnotation.hs`
      
      ```lang=haskell
      type ApiAnns = (Map.Map ApiAnnKey SrcSpan, Map.Map SrcSpan [Located Token])
      
      type ApiAnnKey = (SrcSpan,AnnKeywordId)
      
      -- ---------------------------------------------------------------------
      
      -- | Retrieve an annotation based on the @SrcSpan@ of the annotated AST
      -- element, and the known type of the annotation.
      getAnnotation :: ApiAnns -> SrcSpan -> AnnKeywordId -> Maybe SrcSpan
      getAnnotation (anns,_) span ann = Map.lookup (span,ann) anns
      
      -- |Retrieve the comments allocated to the current @SrcSpan@
      getAnnotationComments :: ApiAnns -> SrcSpan -> [Located Token]
      getAnnotationComments (_,anns) span =
        case Map.lookup span anns of
          Just cs -> cs
          Nothing -> []
      
      -- | Note: in general the names of these are taken from the
      -- corresponding token, unless otherwise noted
      data AnnKeywordId
               = AnnAs
               | AnnBang
               | AnnClass
               | AnnClose -- ^ } or ] or ) or #) etc
               | AnnComma
               | AnnDarrow
               | AnnData
               | AnnDcolon
               ....
      ```
      
      == Capturing in the lexer/parser ==
      
      The annotations are captured in the lexer / parser by extending PState to include a field
      
      In `parser/Lexer.x`
      
      ```lang=haskell
      data PState = PState {
              ....
              annotations :: [(ApiAnnKey,SrcSpan)]
              -- Annotations giving the locations of 'noise' tokens in the
              -- source, so that users of the GHC API can do source to
              -- source conversions.
           }
      ```
      
      The lexer exposes a helper function to add an annotation
      
      ```lang=haskell
      addAnnotation :: SrcSpan -> Ann -> SrcSpan -> P ()
      addAnnotation l a v = P $ \s -> POk s {
        annotations = ((AK l a), v) : annotations s
        } ()
      
      ```
      
      The parser also has some helper functions of the form
      
      ```lang=haskell
      type MaybeAnn = Maybe (SrcSpan -> P ())
      
      gl = getLoc
      gj x = Just (gl x)
      
      ams :: Located a -> [MaybeAnn] -> P (Located a)
      ams a@(L l _) bs = (mapM_ (\a -> a l) $ catMaybes bs) >> return a
      ```
      
      This allows annotations to be captured in the parser by means of
      
      ```
      ctypedoc :: { LHsType RdrName }
              : 'forall' tv_bndrs '.' ctypedoc {% hintExplicitForall (getLoc $1) >>
                                                  ams (LL $ mkExplicitHsForAllTy $2 (noLoc []) $4)
                                                      [mj AnnForall $1,mj AnnDot $3] }
              | context '=>' ctypedoc         {% ams (LL $ mkQualifiedHsForAllTy   $1 $3)
                                                     [mj AnnDarrow $2] }
              | ipvar '::' type               {% ams (LL (HsIParamTy (unLoc $1) $3))
                                                     [mj AnnDcolon $2] }
              | typedoc                       { $1 }
      ```
      
      == Parse result ==
      
      ```lang-haskell
      data HsParsedModule = HsParsedModule {
          hpm_module    :: Located (HsModule RdrName),
          hpm_src_files :: [FilePath],
             -- ^ extra source files (e.g. from #includes).  The lexer collects
             -- these from '# <file> <line>' pragmas, which the C preprocessor
             -- leaves behind.  These files and their timestamps are stored in
             -- the .hi file, so that we can force recompilation if any of
             -- them change (#3589)
          hpm_annotations :: ApiAnns
        }
      
      -- | The result of successful parsing.
      data ParsedModule =
        ParsedModule { pm_mod_summary   :: ModSummary
                     , pm_parsed_source :: ParsedSource
                     , pm_extra_src_files :: [FilePath]
                     , pm_annotations :: ApiAnns }
      ```
      
      This diff depends on D426
      
      Test Plan: sh ./validate
      
      Reviewers: austin, simonpj, Mikolaj
      
      Reviewed By: simonpj, Mikolaj
      
      Subscribers: Mikolaj, goldfire, thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D438
      
      GHC Trac Issues: #9628
      803fc5db
    • Alan Zimmerman's avatar
      AST changes to prepare for API annotations, for #9628 · 7927658e
      Alan Zimmerman authored
      Summary:
      AST changes to prepare for API annotations
      
      Add locations to parts of the AST so that API annotations can
      then be added.
      
      The outline of the whole process is captured here
      https://ghc.haskell.org/trac/ghc/wiki/GhcAstAnnotations
      
      This change updates the haddock submodule.
      
      Test Plan: sh ./validate
      
      Reviewers: austin, simonpj, Mikolaj
      
      Reviewed By: simonpj, Mikolaj
      
      Subscribers: thomie, goldfire, carter
      
      Differential Revision: https://phabricator.haskell.org/D426
      
      GHC Trac Issues: #9628
      7927658e
    • eir@cis.upenn.edu's avatar
      cfa574ce