summaryrefslogtreecommitdiff
path: root/compiler/rename/RnSource.lhs
Commit message (Collapse)AuthorAgeFilesLines
...
* Several TH/quasiquote changessimonpj@microsoft.com2010-02-101-1/+84
| | | | | | | | | | | | | | | | | | | | | | a) Added quasi-quote forms for declarations types e.g. f :: [$qq| ... |] b) Allow Template Haskell pattern quotes (but not splices) e.g. f x = [p| Int -> $x |] c) Improve pretty-printing for HsPat to remove superfluous parens. (This isn't TH related really, but it affects some of the same code.) A consequence of (a) is that when gathering and grouping declarations in RnSource.findSplice, we must expand quasiquotes as we do so. Otherwise it's all fairly straightforward. I did a little bit of refactoring in TcSplice. User-manual changes still to come.
* Fix Trac #3850simonpj@microsoft.com2010-02-081-3/+13
| | | | | This patch simply avoids a needless difference in behaviour from 6.10, and one that happens to affect HList. See Note [Stupid theta].
* Refactor PackageTarget back into StaticTargetBen.Lippmeier@anu.edu.au2010-01-041-2/+2
|
* Tag ForeignCalls with the package they correspond toBen.Lippmeier@anu.edu.au2010-01-021-3/+39
|
* Fix Trac #3640, plus associated refactoringsimonpj@microsoft.com2009-11-051-34/+29
| | | | | | | | | | | | | In fixing this bug (to do with record puns), I had the usual rush of blood to the head, and I did quite a bit of refactoring in the way that duplicate/shadowed names are reported. I think the result is shorter as well as clearer. In one place I found it convenient for the renamer to use the ErrCtxt carried in the monad. (The renamer used not to have such a context, but years ago the typechecker and renamer monads became one, so now it does.) So now it's availble if you want it in future.
* Combine treatment of vanialla/GADT data decls, and fix assert failuresimonpj@microsoft.com2009-10-021-73/+43
|
* remove Haddock-lexing/parsing/renaming from GHCIsaac Dupree2009-08-261-1/+1
|
* Move the standalone-deriving flag test from parser to renamersimonpj@microsoft.com2009-08-251-3/+10
| | | | | | This is just a tiny refactoring. In general, we're trying to get rid of parser errors in favour of later, more civlised, errors.
* Improvements to record puns, wildcardssimonpj@microsoft.com2009-08-201-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | * Make C { A.a } work with punning, expanding to C { A.a = a } * Make it so that, with -fwarn-unused-matches, f (C {..}) = x does not complain about the bindings introduced by the "..". * Make -XRecordWildCards implies -XDisambiguateRecordFields. * Overall refactoring of RnPat, which had become very crufty. In particular, there is now a monad, CpsRn, private to RnPat, which deals with the cps-style plumbing. This is why so many lines of RnPat have changed. * Refactor the treatment of renaming of record fields into two passes - rnHsRecFields1, used both for patterns and expressions, which expands puns, wild-cards - a local renamer in RnPat for fields in patterns - a local renamer in RnExpr for fields in construction and update This make it all MUCH easier to understand * Improve documentation of record puns, wildcards, and disambiguation
* Remove old 'foreign import dotnet' codeSimon Marlow2009-07-271-2/+2
| | | | It still lives in darcs, if anyone wants to revive it sometime.
* Remove GHC's haskell98 dependencyIan Lynagh2009-07-241-1/+1
|
* Add tuple sections as a new featuresimonpj@microsoft.com2009-07-231-1/+0
| | | | | | | | | | | | | | | | This patch adds tuple sections, so that (x,,z) means \y -> (x,y,z) Thanks for Max Bolinbroke for doing the hard work. In the end, instead of using two constructors in HsSyn, I used just one (still called ExplicitTuple) whose arguments can be Present (LHsExpr id) or Missing PostTcType While I was at it, I did a bit of refactoring too.
* Remove unused importsIan Lynagh2009-07-071-1/+0
|
* Type synonym families may be nullaryManuel M T Chakravarty2009-07-021-9/+1
|
* New syntax for GADT-style record declarations, and associated refactoringsimonpj@microsoft.com2009-07-021-66/+57
| | | | | | | | | | | | | | | | | | | | | | | The main purpose of this patch is to fix Trac #3306, by fleshing out the syntax for GADT-style record declraations so that you have a context in the type. The new form is data T a where MkT :: forall a. Eq a => { x,y :: !a } -> T a See discussion on the Trac ticket. The old form is still allowed, but give a deprecation warning. When we remove the old form we'll also get rid of the one reduce/reduce error in the grammar. Hurrah! While I was at it, I failed as usual to resist the temptation to do lots of refactoring. The parsing of data/type declarations is now much simpler and more uniform. Less code, less chance of errors, and more functionality. Took longer than I planned, though. ConDecl has record syntax, but it was not being used consistently, so I pushed that through the compiler.
* Fix Trac #3221: renamer warnings for deriving clausessimonpj@microsoft.com2009-05-271-2/+4
| | | | | | This patch arranges to gather the variables used by 'deriving' clauses, so that unused bindings are correctly reported.
* Template Haskell: allow type splicessimonpj@microsoft.com2009-05-271-58/+3
| | | | | | | | | | | | | | | | | | | | | At last! Trac #1476 and #3177 This patch extends Template Haskell by allowing splices in types. For example f :: Int -> $(burble 3) A type splice should work anywhere a type is expected. This feature has been long requested, and quite a while ago I'd re-engineered the type checker to make it easier, but had never got around to finishing the job. With luck, this does it. There's a ToDo in the HsSpliceTy case of RnTypes.rnHsType, where I am not dealing properly with the used variables; but that's awaiting the refactoring of the way we report unused names.
* Use return instead of returnM, and similar tidy-upssimonpj@microsoft.com2009-04-091-42/+31
|
* Fix Trac #2914: record wild cards and assoicated typessimonpj@microsoft.com2009-01-081-7/+11
|
* Add (a) CoreM monad, (b) new Annotations featuresimonpj@microsoft.com2008-10-301-7/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch, written by Max Bolingbroke, does two things 1. It adds a new CoreM monad (defined in simplCore/CoreMonad), which is used as the top-level monad for all the Core-to-Core transformations (starting at SimplCore). It supports * I/O (for debug printing) * Unique supply * Statistics gathering * Access to the HscEnv, RuleBase, Annotations, Module The patch therefore refactors the top "skin" of every Core-to-Core pass, but does not change their functionality. 2. It adds a completely new facility to GHC: Core "annotations". The idea is that you can say {#- ANN foo (Just "Hello") #-} which adds the annotation (Just "Hello") to the top level function foo. These annotations can be looked up in any Core-to-Core pass, and are persisted into interface files. (Hence a Core-to-Core pass can also query the annotations of imported things.) Furthermore, a Core-to-Core pass can add new annotations (eg strictness info) of its own, which can be queried by importing modules. The design of the annotation system is somewhat in flux. It's designed to work with the (upcoming) dynamic plug-ins mechanism, but is meanwhile independently useful. Do not merge to 6.10!
* Fix Trac #2723: keep track of record field names in the renamersimonpj@microsoft.com2008-10-281-6/+8
| | | | | | | | | | The idea here is that with -XNamedFieldPuns and -XRecordWildCards we don't want to report shadowing errors for let fld = <blah> in C { .. } But to suppress such shadowing errors, the renamer needs to know that 'fld' *is* a record selector. Hence the new NameSet in TcRnFypes.RecFieldEnv
* Fix Trac #2713: refactor and tidy up renaming of fixity declssimonpj@microsoft.com2008-10-271-19/+28
| | | | | | | | In fixing #2713, this patch also eliminates two almost-unused functions from RnEnv (lookupBndr and lookupBndr_maybe). The net lines of code is prety much unchanged, but more of them are comments!
* Allow type families to use GADT syntax (and be GADTs)simonpj@microsoft.com2008-09-231-9/+8
| | | | | | | | | | | | | | We've always intended to allow you to use GADT syntax for data families: data instance T [a] where T1 :: a -> T [a] and indeed to allow data instances to *be* GADTs data intsance T [a] where T1 :: Int -> T [Int] T2 :: a -> b -> T [(a,b)] This patch fixes the renamer and type checker to allow this.
* Expunge ThFake, cure Trac #2632simonpj@microsoft.com2008-10-031-9/+4
| | | | | | | | | | | | | | | This patch fixes a dirty hack (the fake ThFake module), which in turn was causing Trac #2632. The new scheme is that the top-level binders in a TH [d| ... |] decl splice get Internal names. That breaks a previous invariant that things like TyCons always have External names, but these TyCons are never long-lived; they live only long enough to typecheck the TH quotation; the result is discarded. So it seems cool. Nevertheless -- Template Haskell folk: please test your code. The testsuite is OK but it's conceivable that I've broken something in TH. Let's see.
* TFs: Allow repeated variables in left-hand sides of instancesManuel M T Chakravarty2008-10-021-8/+42
| | | | MERGE TO 6.10
* Fix flaggery for RULES (cf Trac #2497)simonpj@microsoft.com2008-08-261-1/+3
| | | | | | | | | | | | | | | | | | | | This patch executes the plan described in the discussion in Trac #2497. Specficially: * Inside a RULE, switch on the forall-as-keyword in the lexer, unconditionally. (Actually this is done by an earlier patch.) * Merge the -XScopedTypeVariables and -XPatternSignatures flags, and deprecate the latter. Distinguishing them isn't senseless, but it's jolly confusing. * Inside a RULE, switch on -XScopedTypeVariables unconditionally. * Change -frewrite-rules to -fenable-rewrite-rules; deprecate the former. Internally the DynFlag is now Opt_EnableRewriteRules. There's a test in typecheck/should_compile/T2497.hs
* Use do-notationsimonpj@microsoft.com2008-08-111-7/+8
|
* Fix Haddock errors.Thomas Schilling2008-07-201-1/+1
|
* Add a WARNING pragmaIan Lynagh2008-07-201-17/+17
|
* Fix Trac #2292: improve error message for lone signaturessimonpj@microsoft.com2008-05-201-3/+4
| | | | | Refactoring reduces code and improves error messages
* Change a mappM to mapM_Ian Lynagh2008-05-031-2/+2
|
* Make RnSource warning-freeIan Lynagh2008-05-031-35/+58
|
* (F)SLIT -> (f)sLit in RnSourceIan Lynagh2008-04-121-16/+16
|
* Fix Trac #2205, which I introduced recentlysimonpj@microsoft.com2008-04-101-9/+12
|
* Fix Trac #2188: scoping in TH declarations quotessimonpj@microsoft.com2008-04-041-18/+16
| | | | | | | | | | | | | | | | | | | This patch fixes a rather tiresome issue, namely the fact that a TH declaration quote *shadows* bindings in outer scopes: f g = [d| f :: Int f = g g :: Int g = 4 |] Here, the outer bindings for 'f' (top-level) and 'g' (local) are shadowed, and the inner bindings for f,g should not be reported as duplicates. (Remember they are top-level bindings.) The actual bug was that we'd forgotten to delete 'g' from the LocalRdrEnv, so the type sig for 'g' was binding to the outer 'g' not the inner one.
* Don't import FastString in HsVersions.hIan Lynagh2008-03-291-0/+1
| | | | Modules that need it import it themselves instead.
* Convert more UniqFM's back to LazyUniqFM'sIan Lynagh2008-02-071-1/+1
| | | | | | | | | | | | | | | These fix these failures: break008(ghci) break009(ghci) break026(ghci) ghci.prog009(ghci) ghci025(ghci) print007(ghci) prog001(ghci) prog002(ghci) prog003(ghci) at least some of which have this symptom: Exception: expectJust prune
* Fix the buildIan Lynagh2008-01-241-0/+21
| | | | | Work around various problems caused by some of the monadification patches not being applied.
* seqMaybe is more commonly known as mplusTwan van Laarhoven2008-01-171-7/+7
|
* Add quasi-quotation, courtesy of Geoffrey Mainlandsimonpj@microsoft.com2008-01-181-21/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds quasi-quotation, as described in "Nice to be Quoted: Quasiquoting for Haskell" (Geoffrey Mainland, Haskell Workshop 2007) Implemented by Geoffrey and polished by Simon. Overview ~~~~~~~~ The syntax for quasiquotation is very similar to the existing Template haskell syntax: [$q| stuff |] where 'q' is the "quoter". This syntax differs from the paper, by using a '$' rather than ':', to avoid clashing with parallel array comprehensions. The "quoter" is a value of type Language.Haskell.TH.Quote.QuasiQuoter, which contains two functions for quoting expressions and patterns, respectively. quote = Language.Haskell.TH.Quote.QuasiQuoter quoteExp quotePat quoteExp :: String -> Language.Haskell.TH.ExpQ quotePat :: String -> Language.Haskell.TH.PatQ TEXT is passed unmodified to the quoter. The context of the quasiquotation statement determines which of the two quoters is called: if the quasiquotation occurs in an expression context, quoteExp is called, and if it occurs in a pattern context, quotePat is called. The result of running the quoter on its arguments is spliced into the program using Template Haskell's existing mechanisms for splicing in code. Note that although Template Haskell does not support pattern brackets, with this patch binding occurrences of variables in patterns are supported. Quoters must also obey the same stage restrictions as Template Haskell; in particular, in this example quote may not be defined in the module where it is used as a quasiquoter, but must be imported from another module. Points to notice ~~~~~~~~~~~~~~~~ * The whole thing is enabled with the flag -XQuasiQuotes * There is an accompanying patch to the template-haskell library. This involves one interface change: currentModule :: Q String is replaced by location :: Q Loc where Loc is a data type defined in TH.Syntax thus: data Loc = Loc { loc_filename :: String , loc_package :: String , loc_module :: String , loc_start :: CharPos , loc_end :: CharPos } type CharPos = (Int, Int) -- Line and character position So you get a lot more info from 'location' than from 'currentModule'. The location you get is the location of the splice. This works in Template Haskell too of course, and lets a TH program generate much better error messages. * There's also a new module in the template-haskell package called Language.Haskell.TH.Quote, which contains support code for the quasi-quoting feature. * Quasi-quote splices are run *in the renamer* because they can build *patterns* and hence the renamer needs to see the output of running the splice. This involved a bit of rejigging in the renamer, especially concerning the reporting of duplicate or shadowed names. (In fact I found and removed a few calls to checkDupNames in RnSource that are redundant, becuase top-level duplicate decls are handled in RnNames.)
* View patterns, record wildcards, and record punsDan Licata2007-10-101-113/+171
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch implements three new features: * view patterns (syntax: expression -> pat in a pattern) * working versions of record wildcards and record puns See the manual for detailed descriptions. Other minor observable changes: * There is a check prohibiting local fixity declarations when the variable being fixed is not defined in the same let * The warn-unused-binds option now reports warnings for do and mdo stmts Implementation notes: * The pattern renamer is now in its own module, RnPat, and the implementation is now in a CPS style so that the correct context is delivered to pattern expressions. * These features required a fairly major upheaval to the renamer. Whereas the old version used to collect up all the bindings from a let (or top-level, or recursive do statement, ...) and put them into scope before renaming anything, the new version does the collection as it renames. This allows us to do the right thing with record wildcard patterns (which need to be expanded to see what names should be collected), and it allows us to implement the desired semantics for view patterns in lets. This change had a bunch of domino effects brought on by fiddling with the top-level renaming. * Prior to this patch, there was a tricky bug in mkRecordSelId in HEAD, which did not maintain the invariant necessary for loadDecl. See note [Tricky iface loop] for details.
* Fix CodingStyle#Warnings URLsIan Lynagh2007-09-041-1/+1
|
* Use OPTIONS rather than OPTIONS_GHC for pragmasIan Lynagh2007-09-031-2/+2
| | | | | | | Older GHCs can't parse OPTIONS_GHC. This also changes the URL referenced for the -w options from WorkingConventions#Warnings to CodingStyle#Warnings for the compiler modules.
* Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modulesIan Lynagh2007-09-011-0/+7
|
* Remove commentDavid Waern2007-07-111-1/+0
|
* Use the correct flag for controlling scoped type variables in an instance declsimonpj@microsoft.com2007-06-211-5/+5
|
* Add several new record featuresLemmih2007-06-211-51/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Record disambiguation (-fdisambiguate-record-fields) In record construction and pattern matching (although not in record updates) it is clear which field name is intended even if there are several in scope. This extension uses the constructor to disambiguate. Thus C { x=3 } uses the 'x' field from constructor C (assuming there is one) even if there are many x's in scope. 2. Record punning (-frecord-puns) In a record construction or pattern match or update you can omit the "=" part, thus C { x, y } This is just syntactic sugar for C { x=x, y=y } 3. Dot-dot notation for records (-frecord-dot-dot) In record construction or pattern match (but not update) you can use ".." to mean "all the remaining fields". So C { x=v, .. } means to fill in the remaining fields to give C { x=v, y=y } (assuming C has fields x and y). This might reasonably considered very dodgy stuff. For pattern-matching it brings into scope a bunch of things that are not explictly mentioned; and in record construction it just picks whatver 'y' is in scope for the 'y' field. Still, Lennart Augustsson really wants it, and it's a feature that is extremely easy to explain. Implementation ~~~~~~~~~~~~~~ I thought of using the "parent" field in the GlobalRdrEnv, but that's really used for import/export and just isn't right for this. For example, for import/export a field is a subordinate of the *type constructor* whereas here we need to know what fields belong to a particular *data* constructor. The main thing is that we need to map a data constructor to its fields, and we need to do so in the renamer. For imported modules it's easy: just look in the imported TypeEnv. For the module being compiled, we make a new field tcg_field_env in the TcGblEnv. The important functions are RnEnv.lookupRecordBndr RnEnv.lookupConstructorFields There is still a significant infelicity in the way the renamer works on patterns, which I'll tackle next. I also did quite a bit of refactoring in the representation of record fields (mainly in HsPat).***END OF DESCRIPTION*** Place the long patch description above the ***END OF DESCRIPTION*** marker. The first line of this file will be the patch name. This patch contains the following changes: M ./compiler/deSugar/Check.lhs -3 +5 M ./compiler/deSugar/Coverage.lhs -6 +7 M ./compiler/deSugar/DsExpr.lhs -6 +13 M ./compiler/deSugar/DsMeta.hs -8 +8 M ./compiler/deSugar/DsUtils.lhs -1 +1 M ./compiler/deSugar/MatchCon.lhs -2 +2 M ./compiler/hsSyn/Convert.lhs -3 +3 M ./compiler/hsSyn/HsDecls.lhs -9 +25 M ./compiler/hsSyn/HsExpr.lhs -13 +3 M ./compiler/hsSyn/HsPat.lhs -25 +63 M ./compiler/hsSyn/HsUtils.lhs -3 +3 M ./compiler/main/DynFlags.hs +6 M ./compiler/parser/Parser.y.pp -13 +17 M ./compiler/parser/RdrHsSyn.lhs -16 +18 M ./compiler/rename/RnBinds.lhs -2 +2 M ./compiler/rename/RnEnv.lhs -22 +82 M ./compiler/rename/RnExpr.lhs -34 +12 M ./compiler/rename/RnHsSyn.lhs -3 +2 M ./compiler/rename/RnSource.lhs -50 +78 M ./compiler/rename/RnTypes.lhs -50 +84 M ./compiler/typecheck/TcExpr.lhs -18 +18 M ./compiler/typecheck/TcHsSyn.lhs -20 +21 M ./compiler/typecheck/TcPat.lhs -8 +6 M ./compiler/typecheck/TcRnMonad.lhs -6 +15 M ./compiler/typecheck/TcRnTypes.lhs -2 +11 M ./compiler/typecheck/TcTyClsDecls.lhs -3 +4 M ./docs/users_guide/flags.xml +7 M ./docs/users_guide/glasgow_exts.xml +42
* Trivial fix to clear Trac #1386simonpj@microsoft.com2007-06-201-1/+1
|
* Remove the distinction between data and newtype familiesManuel M T Chakravarty2007-05-111-2/+2
| | | | | | | | | - This patch removes "newtype family" declarations. - "newtype instance" declarations can now be instances of data families - This also fixes bug #1331 ** This patch changes the interface format. All libraries and all of ** ** Stage 2 & 3 need to be re-compiled from scratch. **
* Tidy up refactoring only simonpj@microsoft.com2007-03-231-21/+16
|