packages feed

language-python 0.5.6 → 0.5.8

raw patch · 10 files changed

+38/−27 lines, 10 filesdep ~containersdep ~monads-tfdep ~transformers

Dependency ranges changed: containers, monads-tf, transformers

Files

language-python.cabal view
@@ -1,6 +1,6 @@ name:                language-python-version:             0.5.6-cabal-version:       >= 1.6+version:             0.5.8+cabal-version:       >= 1.10  synopsis:            Parsing and pretty printing of Python code.  description:         language-python is a Haskell library for lexical analysis, parsing                       and pretty printing Python code. It supports versions 2.x and 3.x of Python. @@ -24,11 +24,12 @@    location: https://github.com/bjpop/language-python  Library+   default-language: Haskell2010    hs-source-dirs: src     ghc-options: -fwarn-incomplete-patterns -fwarn-unused-imports -fwarn-warnings-deprecations    build-depends:       base == 4.*,-      containers == 0.5.*,+      containers >= 0.5 && < 0.7,       pretty == 1.1.*,       array >= 0.4 && < 0.6,       transformers >= 0.3 && < 0.6,
src/Language/Python/Common/LexerUtils.hs view
@@ -14,7 +14,6 @@ module Language.Python.Common.LexerUtils where  import Control.Monad (liftM)-import Control.Monad.Error.Class (throwError) import Data.List (foldl') import Data.Word (Word8) import Language.Python.Common.Token as Token@@ -115,6 +114,11 @@ notEOF _user _inputBeforeToken _tokenLength (_loc, _bs, inputAfterToken)     = not (null inputAfterToken) +delUnderscores :: String -> String+delUnderscores []       = []+delUnderscores ('_':xs) = delUnderscores xs+delUnderscores (x  :xs) = x : delUnderscores xs+ readBinary :: String -> Integer readBinary     = toBinary . drop 2 @@ -122,6 +126,7 @@    toBinary = foldl' acc 0    acc b '0' = 2 * b    acc b '1' = 2 * b + 1+   acc _ _ = error "Lexer ensures all digits passed to readBinary are 0 or 1."  readFloat :: String -> Double readFloat str@('.':cs) = read ('0':readFloatRest str)@@ -230,3 +235,4 @@  readOctNoO :: String -> Integer readOctNoO (zero:rest) = read (zero:'O':rest)+readOctNoO [] = error "Lexer ensures readOctNoO is never called on an empty string"
src/Language/Python/Common/ParseError.hs view
@@ -14,14 +14,9 @@  import Language.Python.Common.SrcLocation (SrcLocation) import Language.Python.Common.Token (Token)-import Control.Monad.Error.Class  data ParseError      = UnexpectedToken Token           -- ^ An error from the parser. Token found where it should not be. Note: tokens contain their own source span.    | UnexpectedChar Char SrcLocation -- ^ An error from the lexer. Character found where it should not be.    | StrError String                 -- ^ A generic error containing a string message. No source location.    deriving (Eq, Ord, Show)--instance Error ParseError where-   noMsg = StrError ""-   strMsg = StrError 
src/Language/Python/Common/ParserMonad.hs view
@@ -43,6 +43,7 @@    , addComment    , getComments    , spanError+   , throwError    ) where  import Language.Python.Common.SrcLocation (SrcLocation (..), SrcSpan (..), Span (..))@@ -51,7 +52,6 @@ import Control.Applicative ((<$>)) import Control.Monad.State.Class import Control.Monad.State.Strict as State-import Control.Monad.Error as Error import Language.Python.Common.Pretty  internalError :: String -> P a @@ -90,6 +90,9 @@    }  type P a = StateT ParseState (Either ParseError) a++throwError :: ParseError -> P a+throwError = lift . Left  execParser :: P a -> ParseState -> Either ParseError a execParser = evalStateT 
src/Language/Python/Common/ParserUtils.hs view
@@ -15,7 +15,6 @@  import Data.List (foldl') import Data.Maybe (isJust)-import Control.Monad.Error.Class (throwError) import Language.Python.Common.AST as AST import Language.Python.Common.Token as Token  import Language.Python.Common.ParserMonad hiding (location)@@ -98,6 +97,7 @@ makeTupleOrExpr [e] Nothing = e makeTupleOrExpr es@(_:_) (Just t) = Tuple es (spanning es t)  makeTupleOrExpr es@(_:_) Nothing  = Tuple es (getSpan es)+makeTupleOrExpr [] _ = error "makeTupleOrExpr should never be called with an empty list"  makeAssignmentOrExpr :: ExprSpan -> Either [ExprSpan] (AssignOpSpan, ExprSpan) -> StatementSpan makeAssignmentOrExpr e (Left es) @@ -188,6 +188,7 @@ -- parser guarantees that the first list is non-empty makeDecorated :: [DecoratorSpan] -> StatementSpan -> StatementSpan makeDecorated ds@(d:_) def = Decorated ds def (spanning d def)+makeDecorated [] _ = error "parser guarantees that makeDecorated's first argument is non-empty"  -- suite can't be empty so it is safe to take span over it makeFun :: Token -> IdentSpan -> [ParameterSpan] -> Maybe ExprSpan -> SuiteSpan -> StatementSpan@@ -220,6 +221,7 @@    countDots count (Left token:rest) = countDots (count + dots token) rest     dots (DotToken {}) = 1    dots (EllipsisToken {}) = 3+   dots _ = error "Parser ensures dots is only called on DotToken or EllipsisToken."  {-    See: http://docs.python.org/3.0/reference/expressions.html#calls@@ -254,9 +256,11 @@          ArgKeyword {}             | state `elem` [1,2] -> check 2 rest             | state `elem` [3,4] -> check 4 rest+            | otherwise -> error "state should always be in range 1..4 here"          ArgVarArgsPos {}             | state `elem` [1,2] -> check 3 rest             | state `elem` [3,4] -> spanError arg "there must not be two *arguments in an argument list"+            | otherwise -> error "state should always be in range 1..4 here"          ArgVarArgsKeyword {} -> check 5 rest  {-@@ -290,9 +294,11 @@          UnPackTuple {}             | state `elem` [1,3] -> check state rest             | state == 2 -> check 3 rest +            | otherwise -> error "state should always be in range 1..3 here"          Param {}             | state `elem` [1,3] -> check state rest             | state == 2 -> check 3 rest +            | otherwise -> error "state should always be in range 1..3 here"          EndPositional {}             | state == 1 -> check 2 rest             | otherwise -> spanError param "there must not be two *parameters in a parameter list"
src/Language/Python/Common/PrettyAST.hs view
@@ -19,7 +19,7 @@  import Language.Python.Common.Pretty import Language.Python.Common.AST-import Data.Maybe (isJust, fromMaybe)+import Data.Maybe (fromMaybe)  -------------------------------------------------------------------------------- 
src/Language/Python/Common/PrettyParseError.hs view
@@ -15,7 +15,7 @@ import Language.Python.Common.Pretty import Language.Python.Common.ParseError (ParseError (..)) import Language.Python.Common.SrcLocation -import Language.Python.Common.PrettyToken+import Language.Python.Common.PrettyToken()  instance Pretty ParseError where     pretty (UnexpectedToken t) = pretty (getSpan t) <+> text "unexpected token:" <+> pretty t
src/Language/Python/Common/SrcLocation.hs view
@@ -104,6 +104,7 @@ incColumn :: Int -> SrcLocation -> SrcLocation incColumn n loc@(Sloc { sloc_column = col })    = loc { sloc_column = col + n }+incColumn _ NoLocation = NoLocation  -- | Increment the column of a location by one tab stop. incTab :: SrcLocation -> SrcLocation@@ -111,11 +112,13 @@    = loc { sloc_column = newCol }     where    newCol = col + 8 - (col - 1) `mod` 8+incTab NoLocation = NoLocation  -- | Increment the line number (row) of a location by one. incLine :: Int -> SrcLocation -> SrcLocation incLine n loc@(Sloc { sloc_row = row })     = loc { sloc_column = 1, sloc_row = row + n }+incLine _ NoLocation = NoLocation  {- Inspired heavily by compiler/basicTypes/SrcLoc.lhs 
src/Language/Python/Version2.hs view
@@ -13,7 +13,7 @@ -- -- * <http://docs.python.org/2.6/reference/index.html> for an overview of the language.  ---  -- * <http://docs.python.org/2.6/reference/grammar.html> for the full grammar.+-- * <http://docs.python.org/2.6/reference/grammar.html> for the full grammar. --  -- * <http://docs.python.org/2.6/reference/toplevel_components.html> for a description of  -- the various Python top-levels, which correspond to the parsers provided here.
src/Language/Python/Version3/Parser/Lexer.x view
@@ -9,7 +9,7 @@ -- Portability : ghc -- -- Implementation of a lexer for Python version 3.x programs. Generated by--- alex. +-- alex. Edited by Curran McConnell to conform to PEP515. -----------------------------------------------------------------------------  module Language.Python.Version3.Parser.Lexer @@ -20,9 +20,6 @@ import Language.Python.Common.SrcLocation import Language.Python.Common.LexerUtils import qualified Data.Map as Map-import Control.Monad (liftM)-import Data.List (foldl')-import Numeric (readHex, readOct) }  -- character sets@@ -46,9 +43,9 @@ $not_double_quote = [. \n] # \"  -- macro definitions-@exponent = (e | E) (\+ | \-)? $digit+ -@fraction = \. $digit+-@int_part = $digit++@exponent = (e | E) (\+ | \-)? $digit(_?$digit+)*+@fraction = \. $digit(_?$digit+)*+@int_part = $digit(_?$digit+)* @point_float = (@int_part? @fraction) | @int_part \. @exponent_float = (@int_part | @point_float) @exponent @float_number = @point_float | @exponent_float@@ -88,13 +85,13 @@ \\ @eol_pattern { lineJoin } -- line join   <0> {-   @float_number { token FloatToken readFloat }-   $non_zero_digit $digit* { token IntegerToken read }  +   @float_number { token FloatToken (readFloat.delUnderscores) }+   $non_zero_digit (_?$digit)* { token IntegerToken (read.delUnderscores) }    (@float_number | @int_part) (j | J) { token ImaginaryToken (readFloat.init) }-   0+ { token IntegerToken read }  -   0 (o | O) $oct_digit+ { token IntegerToken read }-   0 (x | X) $hex_digit+ { token IntegerToken read }-   0 (b | B) $bin_digit+ { token IntegerToken readBinary }+   0+(_?0+)* { token IntegerToken (read.delUnderscores) }+   0 (o | O) (_?$oct_digit+)+ { token IntegerToken (read.delUnderscores) }+   0 (x | X) (_?$hex_digit+)+ { token IntegerToken (read.delUnderscores) }+   0 (b | B) (_?$bin_digit+)+ { token IntegerToken (readBinary.delUnderscores) } }  -- String literals