packages feed

hprotoc 1.8.2 → 1.8.3

raw patch · 3 files changed

+91/−674 lines, 3 filesdep ~protocol-buffersdep ~protocol-buffers-descriptor

Dependency ranges changed: protocol-buffers, protocol-buffers-descriptor

Files

Text/ProtocolBuffers/ProtoCompile/Gen.hs view
@@ -21,6 +21,8 @@  import Text.ProtocolBuffers.ProtoCompile.BreakRecursion(Result(..),VertexKind(..),pKey,pfKey,getKind,Part(..)) +--import Paths_hprotoc(version)+--import Data.Version(showVersion) import qualified Data.ByteString.Lazy.Char8 as LC(unpack) import qualified Data.Foldable as F(foldr,toList) import Data.List(sortBy,foldl',foldl1',group,sort,union)@@ -28,6 +30,7 @@ import Language.Haskell.Exts.Pretty(prettyPrint) import Language.Haskell.Exts.Syntax hiding (Int,String) import Language.Haskell.Exts.Syntax as Hse+import Data.Char(isLower,isUpper) import qualified Data.Map as M import Data.Maybe(mapMaybe) import qualified Data.Sequence as Seq(null,length)@@ -67,6 +70,7 @@ litIntP x | x<0 = PParen $ PLit (Hse.Int (toInteger x))           | otherwise = PLit (Hse.Int (toInteger x)) +-- Pin down the type inference litIntP' :: Int -> Pat litIntP' = litIntP @@ -80,26 +84,54 @@ typeApp :: String -> Type -> Type typeApp s =  TyApp (TyCon (private s)) +-- private is for Text.ProtocolBuffers.Header, prelude is for Prelude, local is unqualified private :: String -> QName private t = Qual (ModuleName "P'") (Ident t) +prelude :: String -> QName+prelude t = Qual (ModuleName "Prelude'") (Ident t)+ local :: String -> QName local t = UnQual (Ident t) +-- pvar and preludevar and lvar are for lower-case identifiers+isVar :: String -> Bool+isVar (x:_) = isLower x+isVar _ = False++isCon :: String -> Bool+isCon (x:_) = isUpper x+isCon _ = False+ pvar :: String -> Exp-pvar t = Var (private t)+pvar t | isVar t = Var (private t)+       | otherwise = error $ "hprotoc Gen.hs assertion failed: pvar expected lower-case first letter in " ++ show t -pcon :: String -> Exp-pcon t = Con (private t)+preludevar :: String -> Exp+preludevar t | isVar t = Var (prelude t)+             | otherwise = error $ "hprotoc Gen.hs assertion failed: preludevar expected lower-case first letter in " ++ show t  lvar :: String -> Exp-lvar t = Var (local t)+lvar t | isVar t = Var (local t)+       | otherwise = error $ "hprotoc Gen.hs assertion failed: lvar expected lower-case first letter in " ++ show t +-- pcon and preludecon and lcon are for upper-case identifiers+pcon :: String -> Exp+pcon t | isCon t = Con (private t)+       | otherwise = error $ "hprotoc Gen.hs assertion failed: pcon expected upper-case first letter in " ++ show t++preludecon :: String -> Exp+preludecon t | isCon t = Con (prelude t)+             | otherwise = error $ "hprotoc Gen.hs assertion failed: preludecon expected upper-case first letter in " ++ show t+ lcon :: String -> Exp-lcon t = Con (local t)+lcon t | isCon t = Con (local t)+       | otherwise = error $ "hprotoc Gen.hs assertion failed: lcon expected upper-case first letter in " ++ show t +-- patvar is a pattern that binds a new lower-case variable name patvar :: String -> Pat-patvar t = PVar (Ident t)+patvar t | isVar t = PVar (Ident t)+         | otherwise = error $ "hprotoc Gen.hs assertion failed: patvar expected lower-case first letter in " ++ show t  match :: String -> [Pat] -> Exp -> Match match s p r = Match src (Ident s) p Nothing (UnGuardedRhs r) noWhere@@ -215,12 +247,18 @@     else qualFName name           -- name is imported, make Qual  --------------------------------------------+-- Define LANGUAGE options as [ModulePramga]+--------------------------------------------+modulePragmas :: [ModulePragma]+modulePragmas = [ LanguagePragma src (map Ident ["DeriveDataTypeable","MultiParamTypeClasses","FlexibleInstances"]) ]++-------------------------------------------- -- EnumDescriptorProto module creation -------------------------------------------- enumModule :: EnumInfo -> Module enumModule ei     = let protoName = enumName ei-      in Module src (ModuleName (fqMod protoName)) [] Nothing+      in Module src (ModuleName (fqMod protoName)) modulePragmas Nothing            (Just [EThingAll (unqualName protoName)])            (standardImports True False) (enumDecls ei) @@ -248,7 +286,7 @@  instanceBounded :: EnumInfo -> Decl instanceBounded ei-    = InstDecl src [] (private "Bounded") [TyCon (unqualName (enumName ei))] +    = InstDecl src [] (prelude "Bounded") [TyCon (unqualName (enumName ei))]           [set "minBound" (head values),set "maxBound" (last values)] -- values cannot be null in a well formed enum   where values = enumValues ei         set f (_,n) = inst f [] (lcon n)@@ -272,28 +310,28 @@  declToEnum :: EnumInfo -> [Decl] declToEnum ei = [ TypeSig src [Ident "toMaybe'Enum"]-                    (TyFun (TyCon (private "Int"))+                    (TyFun (TyCon (prelude "Int"))                            (typeApp "Maybe" (TyCon (unqualName (enumName ei)))))                 , FunBind (map toEnum'one values ++ [final]) ]   where values = enumValues ei-        toEnum'one (v,n) = match "toMaybe'Enum" [litIntP (getEnumCode v)] (pcon "Just" $$ lcon n)-        final = match "toMaybe'Enum" [PWildCard] (pcon "Nothing")+        toEnum'one (v,n) = match "toMaybe'Enum" [litIntP (getEnumCode v)] (preludecon "Just" $$ lcon n)+        final = match "toMaybe'Enum" [PWildCard] (preludecon "Nothing")  instanceEnum :: EnumInfo -> Decl instanceEnum ei-    = InstDecl src [] (private "Enum") [TyCon (unqualName (enumName ei))]+    = InstDecl src [] (prelude "Enum") [TyCon (unqualName (enumName ei))]         (map (InsDecl . FunBind) [fromEnum',toEnum',succ',pred'])   where values = enumValues ei         fromEnum' = map fromEnum'one values         fromEnum'one (v,n) = match "fromEnum" [PApp (local n) []] (litInt (getEnumCode v))         toEnum' = [ match "toEnum" [] (compose mayErr (lvar "toMaybe'Enum")) ]-        mayErr = pvar "fromMaybe" $$ (Paren (pvar "error" $$  (litStr $ +        mayErr = pvar "fromMaybe" $$ (Paren (preludevar "error" $$  (litStr $                     "hprotoc generated code: toEnum failure for type "++ fqMod (enumName ei))))         succ' = zipWith (equate "succ") values (tail values) ++-                [ match "succ" [PWildCard] (pvar "error" $$  (litStr $ +                [ match "succ" [PWildCard] (preludevar "error" $$  (litStr $                     "hprotoc generated code: succ failure for type "++ fqMod (enumName ei))) ]         pred' = zipWith (equate "pred") (tail values) values ++-                [ match "pred" [PWildCard] (pvar "error" $$  (litStr $ +                [ match "pred" [PWildCard] (preludevar "error" $$  (litStr $                     "hprotoc generated code: pred failure for type "++ fqMod (enumName ei))) ]         equate f (_,n1) (_,n2) = match f [PApp (local n1) []] (lcon n2) @@ -304,7 +342,7 @@         [ withName "wireSize", withName "wirePut", withGet, withGetErr,withGetPacked,withGetPackedErr ]   where withName foo = inst foo [patvar "ft'",patvar "enum"] rhs           where rhs = pvar foo $$ lvar "ft'" $$-                        (Paren $ pvar "fromEnum" $$ lvar "enum")+                        (Paren $ preludevar "fromEnum" $$ lvar "enum")         withGet = inst "wireGet" [litIntP' 14] rhs           where rhs = pvar "wireGetEnum" $$ lvar "toMaybe'Enum"         withGetErr = inst "wireGet" [patvar "ft'"] rhs@@ -354,7 +392,7 @@         imports = (protoImports ++) . mergeImports $                     mapMaybe (importPN result m Normal) $                       extendees ++ mapMaybe typeName myKeys-    in Module src m [] Nothing (Just (exportKeys++exportNames)) imports+    in Module src m modulePragmas Nothing (Just (exportKeys++exportNames)) imports          (keysXTypeVal protoName (extensionKeys pri) ++ embed'ProtoInfo pri ++ embed'fdpBS fdpBS)  where protoImports = standardImports False (not . Seq.null . extensionKeys $ pri) ++          [ ImportDecl src (ModuleName "Text.DescriptorProtos.FileDescriptorProto") False False Nothing Nothing@@ -368,7 +406,7 @@ embed'ProtoInfo pri = [ myType, myValue ]   where myType = TypeSig src [ Ident "protoInfo" ] (TyCon (local "ProtoInfo"))         myValue = PatBind src (PApp (local "protoInfo") []) Nothing (UnGuardedRhs $-                    pvar "read" $$ litStr (show pri)) noWhere+                    preludevar "read" $$ litStr (show pri)) noWhere  embed'fdpBS :: ByteString -> [Decl] embed'fdpBS bs = [ myType, myValue ]@@ -400,14 +438,15 @@ descriptorBootModule di   = let protoName = descName di         un = unqualName protoName-        classes = ["Show","Eq","Ord","Typeable","Mergeable","Default","Wire","GPB","ReflectDescriptor"]-                  ++ if hasExt di then ["ExtendMessage"] else []-                  ++ if storeUnknown di then ["UnknownMessage"] else []+        classes = [prelude "Show",prelude "Eq",prelude "Ord",prelude "Typeable"+                  ,private "Mergeable",private "Default",private "Wire",private "GPB",private "ReflectDescriptor"]+                  ++ if hasExt di then [private "ExtendMessage"] else []+                  ++ if storeUnknown di then [private "UnknownMessage"] else []         instMesAPI = InstDecl src [] (private "MessageAPI")                        [TyVar (Ident "msg'"), TyFun (TyVar (Ident "msg'")) (TyCon un),  (TyCon un)] []         dataDecl = DataDecl src DataType [] (baseIdent protoName) [] [] []-        mkInst s = InstDecl src [] (private s) [TyCon un] []-    in Module src (ModuleName (fqMod protoName)) [] Nothing (Just [EAbs un]) minimalImports+        mkInst s = InstDecl src [] s [TyCon un] []+    in Module src (ModuleName (fqMod protoName)) modulePragmas Nothing (Just [EAbs un]) minimalImports          (dataDecl : instMesAPI : map mkInst classes)  -- This builds on the output of descriptorBootModule and declares a hs-boot that@@ -433,7 +472,7 @@         importTypes = mergeImports . mapMaybe (importPN result mBase KeyFile) . nubSort $                         extendees ++ mapMaybe typeName myKeys         declKeys = keysXTypeVal protoName'Key (keys di)-    in Module src m [] Nothing (Just exportKeys) (minimalImports++importTypes) declKeys+    in Module src m modulePragmas Nothing (Just exportKeys) (minimalImports++importTypes) declKeys  -- This builds the normal module descriptorNormalModule :: Result -> DescriptorInfo -> Module@@ -453,23 +492,25 @@                     , mapMaybe (importPFN result m) (map fieldName (myKeys ++ F.toList (knownKeys di))) ]         declKeys | sepKey = []                  | otherwise = keysXTypeVal (descName di) (keys di)-    in Module src m [] Nothing (Just (EThingAll un : exportKeys)) imports+    in Module src m modulePragmas Nothing (Just (EThingAll un : exportKeys)) imports          (descriptorX di : declKeys ++ instancesDescriptor di)  minimalImports :: [ImportDecl] minimalImports =-  [ ImportDecl src (ModuleName "Prelude") True False Nothing (Just (ModuleName "P'")) Nothing+  [ ImportDecl src (ModuleName "Prelude") True False Nothing (Just (ModuleName "Prelude'")) Nothing+  , ImportDecl src (ModuleName "Data.Typeable") True False Nothing (Just (ModuleName "Prelude'")) Nothing   , ImportDecl src (ModuleName "Text.ProtocolBuffers.Header") True False Nothing (Just (ModuleName "P'")) Nothing ]  standardImports :: Bool -> Bool -> [ImportDecl] standardImports isEnumMod ext =   [ ImportDecl src (ModuleName "Prelude") False False Nothing Nothing (Just (False,ops))-  , ImportDecl src (ModuleName "Prelude") True False Nothing (Just (ModuleName "P'")) Nothing+  , ImportDecl src (ModuleName "Prelude") True False Nothing (Just (ModuleName "Prelude'")) Nothing+  , ImportDecl src (ModuleName "Data.Typeable") True False Nothing (Just (ModuleName "Prelude'")) Nothing   , ImportDecl src (ModuleName "Text.ProtocolBuffers.Header") True False Nothing (Just (ModuleName "P'")) Nothing ]  where ops | ext = map (IVar . Symbol) $ base ++ ["==","<=","&&"]            | otherwise = map (IVar . Symbol) base-       base | isEnumMod = ["+","."]-            | otherwise = ["+"]+       base | isEnumMod = ["+","/","."]+            | otherwise = ["+","/"]  keysXType :: ProtoName -> Seq KeyInfo -> [Decl] keysXType self ks = map (makeKeyType self) . F.toList $ ks@@ -499,18 +540,18 @@ makeKeyVal _self (_extendee,f) = keyVal   where typeNumber = getFieldType . typeCode $ f         keyVal = PatBind src (PApp (unqualFName . fieldName $ f) []) Nothing (UnGuardedRhs-                   (pvar "Key" $$ litInt (getFieldId (fieldNumber f))+                   (pcon "Key" $$ litInt (getFieldId (fieldNumber f))                                $$ litInt typeNumber-                               $$ maybe (pvar "Nothing")-                                        (Paren . (pvar "Just" $$) . (defToSyntax (typeCode f)))+                               $$ maybe (preludecon "Nothing")+                                        (Paren . (preludecon "Just" $$) . (defToSyntax (typeCode f)))                                         (hsDefault f)                    )) noWhere  defToSyntax :: FieldType -> HsDefault -> Exp defToSyntax tc x =   case x of-    HsDef'Bool b -> pcon (show b)-    HsDef'ByteString bs -> (if tc == 9 then (\ xx -> Paren (pvar "Utf8" $$ xx)) else id) $+    HsDef'Bool b -> preludecon (show b)+    HsDef'ByteString bs -> (if tc == 9 then (\ xx -> Paren (pcon "Utf8" $$ xx)) else id) $                            (Paren $ pvar "pack" $$ litStr (LC.unpack bs))     HsDef'RealFloat (SRF'Rational r) | r < 0 -> Paren $ Lit (Frac r)                                      | otherwise -> Lit (Frac r)@@ -518,7 +559,7 @@     HsDef'RealFloat SRF'ninf -> litInt'   1  /! litInt' 0     HsDef'RealFloat SRF'inf  -> litInt' (-1) /! litInt' 0     HsDef'Integer i -> litInt i-    HsDef'Enum s -> Paren $ pvar "read" $$ litStr s+    HsDef'Enum s -> Paren $ preludevar "read" $$ litStr s  where (/!) a b = Paren (mkOp "/" a b)  descriptorX :: DescriptorInfo -> Decl@@ -578,7 +619,7 @@ instanceMergeable :: DescriptorInfo -> Decl instanceMergeable di     = InstDecl src [] (private "Mergeable") [TyCon un]-        [ inst "mergeEmpty" [] (foldl' App (Con un) (replicate len (pcon "mergeEmpty")))+        [ inst "mergeEmpty" [] (foldl' App (Con un) (replicate len (pvar "mergeEmpty")))         , inst "mergeAppend" [PApp un patternVars1, PApp un patternVars2]                              (foldl' App (Con un) (zipWith append vars1 vars2))         ]@@ -615,7 +656,7 @@                         Just hsdef -> defToSyntax (typeCode fi) hsdef                 dv2 = case hsDefault fi of                         Nothing -> pvar "defaultValue"-                        Just hsdef -> Paren $ pcon "Just" $$ defToSyntax (typeCode fi) hsdef+                        Just hsdef -> Paren $ preludecon "Just" $$ defToSyntax (typeCode fi) hsdef  instanceMessageAPI :: ProtoName -> Decl instanceMessageAPI protoName@@ -675,7 +716,7 @@           (pvar "wirePutErr" $$ lvar "ft'" $$ lvar "self'")         wherePutFields = BDecls [defun "put'Fields" [] (Do putStmts)]         putStmts = putStmtsContent-          where putStmtsContent | null putStmtsAll = [Qualifier $ pvar "return" $$ Con (Special UnitCon)]+          where putStmtsContent | null putStmtsAll = [Qualifier $ preludevar "return" $$ Con (Special UnitCon)]                                 | otherwise = putStmtsAll                 putStmtsAll | Just v <- mUnknown = putStmtsListExt ++ [ Qualifier $ pvar "wirePutUnknownField" $$ v ]                              | otherwise = putStmtsListExt@@ -718,7 +759,7 @@                           | otherwise = unknownBranch                 unknownBranch = argPair (pvar "unknown")                 argPair x = x $$ lvar "field'Number" $$ lvar "wire'Type" $$ lvar "old'Self"-        isAllowedExt x = pvar "or" $$ List ranges where+        isAllowedExt x = preludevar "or" $$ List ranges where           (<=!) = mkOp "<="; (&&!) = mkOp "&&"; (==!) = mkOp "=="; (FieldId maxHi) = maxBound           ranges = map (\ (FieldId lo,FieldId hi) ->                             if hi < maxHi@@ -745,7 +786,7 @@                     | otherwise                      = [toUpdateUnpacked (wireTag fi) fi]         toUpdateUnpacked wt1 fi =           Alt src (litIntP . getWireTag $ wt1) (UnGuardedAlt $ -            pvar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $+            preludevar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $                               RecUpdate (lvar "old'Self")                                         [FieldUpdate (unqualFName . fieldName $ fi)                                                      (labelUpdateUnpacked fi)])@@ -754,7 +795,7 @@                                                                              $$ lvar "old'Self")                                                               $$ lvar "new'Field"                                | isRequired fi = qMerge (lvar "new'Field")-                               | otherwise = qMerge (pcon "Just" $$ lvar "new'Field")+                               | otherwise = qMerge (preludecon "Just" $$ lvar "new'Field")             where qMerge x | fromIntegral (getFieldType (typeCode fi)) `elem` [10,(11::Int)] =                                pvar "mergeAppend" $$ Paren ( (Var . unqualFName . fieldName $ fi)                                                                $$ lvar "old'Self" )@@ -762,7 +803,7 @@                            | otherwise = x         toUpdatePacked wt2 fi =           Alt src (litIntP . getWireTag $ wt2) (UnGuardedAlt $ -            pvar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $+            preludevar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $                               RecUpdate (lvar "old'Self")                                         [FieldUpdate (unqualFName . fieldName $ fi)                                                      (labelUpdatePacked fi)])@@ -771,122 +812,6 @@                                                                  $$ lvar "old'Self")                                                   $$ lvar "new'Field" -----{--        getCases = UnGuardedRhs $ cases-          (pvar "getBareMessageWith" $$ lvar "check'allowed")-          (pvar "getMessageWith" $$ lvar "check'allowed")-          (pvar "wireGetErr" $$ lvar "ft'")-        whereDecls = BDecls [whereUpdateSelf,whereAllowed,whereCheckAllowed]-        whereAllowed = defun "allowed'wire'Tags" [] (pvar "fromDistinctAscList" $$ List (map litInt allowed))---        allowed = sort $ [ getWireTag (wireTag fi) | fi <- F.toList (fields di)] ++-        allowed = sort . concat $ [ allowedList fi | fi <- F.toList (fields di)] ++-                                  [ allowedList fi | fi <- F.toList (knownKeys di)]-          where allowedList fi | Just (wt1,wt2) <- packedTag fi = [getWireTag wt1,getWireTag wt2]-                               | otherwise = [getWireTag (wireTag fi)]-        locals = ["wire'Tag","field'Number","wire'Type","old'Self"]-        whereCheckAllowed = defun "check'allowed" (map patvar locals) process-         where process = if storeUnknown di then catchUn updateBranch else updateBranch-               catchUn s = pvar "catchError" $$ Paren s-                 $$ Paren (Lambda src [PWildCard] (args (pvar "loadUnknown")))-               updateBranch | null allowed = extBranch-                            | otherwise = If (pvar "member" $$ lvar "wire'Tag" $$ lvar "allowed'wire'Tags")---                                           (lvar "update'Self" $$ lvar "field'Number" $$ lvar "old'Self")-                                             (lvar "update'Self" $$ lvar "wire'Tag" $$ lvar "old'Self")-                                             extBranch-               extBranch | extensible = If (isAllowedExt (lvar "field'Number"))-                                           (args (pvar "loadExtension"))-                                           unknownBranch-                         | otherwise = unknownBranch-               unknownBranch = args (pvar "unknown")-               args x = x $$ field'Number $$ lvar "wire'Type" $$ lvar "old'Self"-        field'Number = Paren (pvar "fieldIdOf" $$ lvar "wire'Tag")-        isAllowedExt x = pvar "or" $$ List ranges where-          (<=!) = mkOp "<="; (&&!) = mkOp "&&"; (==!) = mkOp "=="-          ranges = map (\ (FieldId lo,FieldId hi) -> if hi < maxHi-                                                       then if lo == hi-                                                              then (x ==! litInt lo)-                                                              else (litInt lo <=! x) &&! (x <=! litInt hi)-                                                       else litInt lo <=! x) allowedExts-             where FieldId maxHi = maxBound----- New for 1.5.6 on way to compatibility with protobuf-2.3.0-        whereUpdateSelf = defun "update'Self" [patvar "wire'Tag", patvar "old'Self"]-                          (Case (lvar "wire'Tag") updateAlts)-        updateAlts = concatMap toUpdate (F.toList fieldInfos)-                     ++ (if extensible && (not (Seq.null fieldExts)) then map toUpdateExt (F.toList fieldExts) else [])-                     ++ [Alt src PWildCard (UnGuardedAlt $-                           pvar "unknownField" $$ (lvar "old'Self") $$ field'Number) noWhere]--        toUpdateExt fi = Alt src (litIntP . getFieldId . fieldNumber $ fi) (UnGuardedAlt $-                           pvar "wireGetKey" $$ Var (mayQualName protoName (fieldName fi)) $$ lvar "old'Self") noWhere--        toUpdate fi | Just (wt1,wt2) <- packedTag fi = [toUpdateUnpacked wt1 fi, toUpdatePacked wt2 fi]-                    | otherwise                      = [toUpdateUnpacked (wireTag fi) fi]-        toUpdateUnpacked wt1 fi =-          Alt src (litIntP . getWireTag $ wt1) (UnGuardedAlt $ -            pvar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $-                              RecUpdate (lvar "old'Self")-                                        [FieldUpdate (unqualFName . fieldName $ fi)-                                                     (labelUpdateUnpacked fi)])-                        $$ (Paren (pvar "wireGet" $$ (litInt . getFieldType . typeCode $ fi)))) noWhere-        labelUpdateUnpacked fi | canRepeat fi = pvar "append" $$ Paren ((Var . unqualFName . fieldName $ fi)-                                                                             $$ lvar "old'Self")-                                                              $$ lvar "new'Field"-                               | isRequired fi = qMerge (lvar "new'Field")-                               | otherwise = qMerge (pcon "Just" $$ lvar "new'Field")-            where qMerge x | fromIntegral (getFieldType (typeCode fi)) `elem` [10,11] =-                               pvar "mergeAppend" $$ Paren ( (Var . unqualFName . fieldName $ fi)-                                                               $$ lvar "old'Self" )-                                                  $$ Paren x-                           | otherwise = x-        toUpdatePacked wt2 fi =-          Alt src (litIntP . getWireTag $ wt2) (UnGuardedAlt $ -            pvar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $-                              RecUpdate (lvar "old'Self")-                                        [FieldUpdate (unqualFName . fieldName $ fi)-                                                     (labelUpdatePacked fi)])-                        $$ (Paren (pvar "wireGetPacked" $$ (litInt . getFieldType . typeCode $ fi)))) noWhere-        labelUpdatePacked fi = pvar "mergeAppend" $$ Paren ((Var . unqualFName . fieldName $ fi)-                                                                 $$ lvar "old'Self")-                                                  $$ lvar "new'Field"--}--- removed after version 1.5.5 to make compatible with protobuf-2.3.0-{--        whereUpdateSelf = defun "update'Self" [patvar "field'Number", patvar "old'Self"]-                            (Case (lvar "field'Number") updateAlts)-        updateAlts = map toUpdate (F.toList fieldInfos)-                     ++ (if extensible && (not (Seq.null fieldExts)) then map toUpdateExt (F.toList fieldExts) else [])-                     ++ [Alt src PWildCard (UnGuardedAlt $-                           pvar "unknownField" $$ (lvar "old'Self") $$ (lvar "field'Number")) noWhere]-        toUpdateExt fi = Alt src (litIntP . getFieldId . fieldNumber $ fi) (UnGuardedAlt $-                           pvar "wireGetKey" $$ Var (mayQualName protoName (fieldName fi)) $$ lvar "old'Self") noWhere-        toUpdate fi = Alt src (litIntP . getFieldId . fieldNumber $ fi) (UnGuardedAlt $ -                        pvar "fmap" $$ (Paren $ Lambda src [patvar "new'Field"] $-                                          RecUpdate (lvar "old'Self")-                                                    [FieldUpdate (unqualFName . fieldName $ fi)-                                                                 (labelUpdate fi)])-                                    $$ (Paren (pvar wireGet'Name $$ (litInt . getFieldType . typeCode $ fi)))) noWhere-          where wireGet'Name | isPacked fi = "wireGetPacked"-                             | otherwise = "wireGet"-        labelUpdate fi | isPacked fi = pvar "mergeAppend" $$ Paren ((Var . unqualFName . fieldName $ fi)-                                                                    $$ lvar "old'Self")-                                                          $$ lvar "new'Field"-                       | canRepeat fi = pvar "append" $$ Paren ((Var . unqualFName . fieldName $ fi)-                                                                     $$ lvar "old'Self")-                                                           $$ lvar "new'Field"-                       | isRequired fi = qMerge (lvar "new'Field")-                       | otherwise = qMerge (pcon "Just" $$ lvar "new'Field")-            where qMerge x | fromIntegral (getFieldType (typeCode fi)) `elem` [10,11] =-                               pvar "mergeAppend" $$ Paren ( (Var . unqualFName . fieldName $ fi)-                                                               $$ lvar "old'Self" )-                                                  $$ Paren x-                           | otherwise = x--}         -- in the above, the [10,11] check optimizes using the         -- knowledge that only TYPE_MESSAGE and TYPE_GROUP have merges         -- that are not right-biased replacements.  The "mergeAppend" uses@@ -905,7 +830,7 @@         , inst "reflectDescriptorInfo" [ PWildCard ] rdi ]   where -- massive shortcut through show and read         rdi :: Exp-        rdi = pvar "read" $$ litStr (show di)+        rdi = preludevar "read" $$ litStr (show di)         gmi,reqId,allId :: Exp         gmi = pcon "GetMessageInfo" $$ Paren reqId $$ Paren allId         reqId = pvar "fromDistinctAscList" $$@@ -919,9 +844,10 @@ ------------------------------------------------------------------  derives,derivesEnum :: [Deriving]-derives = map (\ x -> (private x,[])) ["Show","Eq","Ord","Typeable"]-derivesEnum = map (\ x -> (private x,[])) ["Read","Show","Eq","Ord","Typeable"]+derives = map (\ x -> (prelude x,[])) ["Show","Eq","Ord","Typeable"]+derivesEnum = map (\ x -> (prelude x,[])) ["Read","Show","Eq","Ord","Typeable"] +-- All of these type names are also exported by Text.ProtocolBuffers.Header via Text.ProtocolBuffers.Basic useType :: Int -> Maybe String useType  1 = Just "Double" useType  2 = Just "Float"@@ -942,3 +868,5 @@ useType 17 = Just "Int32" useType 18 = Just "Int64" useType  x = imp $ "useType: Unknown type code (expected 1 to 18) of "++show x++
− dist/build/hprotoc/hprotoc-tmp/Text/ProtocolBuffers/ProtoCompile/Lexer.hs
@@ -1,511 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 1 "Text/ProtocolBuffers/ProtoCompile/Lexer.x" #-}--{-# OPTIONS_GHC -Wwarn #-}-module Text.ProtocolBuffers.ProtoCompile.Lexer (Lexed(..), alexScanTokens,getLinePos)  where--import Control.Monad.Error()-import Codec.Binary.UTF8.String(encode)-import qualified Data.ByteString.Lazy as L-import Data.Char(ord,isHexDigit,isOctDigit,toLower)-import Data.Word(Word8)-import Numeric(readHex,readOct,readDec,readSigned,readFloat)---#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Char (ord)-import Data.Array.Base (unsafeAt)-#else-import Array-import Char (ord)-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/wrappers.hs" #-}--- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.----import qualified Data.ByteString.Lazy.Char8 as ByteString------------ -------------------------------------------------------------------------------- The input type--{-# LINE 35 "templates/wrappers.hs" #-}---type AlexInput = (AlexPosn,     -- current position,-                  Char,         -- previous char-                  ByteString.ByteString)        -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar (p,_,cs) | ByteString.null cs = Nothing-                     | otherwise = let c   = ByteString.head cs-                                       cs' = ByteString.tail cs-                                       p'  = alexMove p c-                                    in p' `seq` cs' `seq` Just (c, (p', c, cs'))----- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text.  It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.---data AlexPosn = AlexPn !Int !Int !Int-        deriving (Eq,Show)--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)----- -------------------------------------------------------------------------------- Default monad--{-# LINE 162 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Monad (with ByteString input)--{-# LINE 251 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper--{-# LINE 273 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper, ByteString version--{-# LINE 297 "templates/wrappers.hs" #-}--{-# LINE 322 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Posn wrapper---- Adds text positions to the basic model.--{-# LINE 339 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Posn wrapper, ByteString version-----alexScanTokens :: ByteString -> [token]-alexScanTokens str = go (alexStartPos,'\n',str)-  where go inp@(pos,_,str) =-          case alexScan inp 0 of-                AlexEOF -> []-                AlexError ((AlexPn _ line column),_,_) -> error $ "lexical error at " ++ (show line) ++ " line, " ++ (show column) ++ " column"-                AlexSkip  inp' len     -> go inp'-                AlexToken inp' len act -> act pos (ByteString.take (fromIntegral len) str) : go inp'------ -------------------------------------------------------------------------------- GScan wrapper---- For compatibility with previous versions of Alex, and because we can.--alex_base :: AlexAddr-alex_base = AlexA# "\xf8\xff\xff\xff\xfd\xff\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xff\xff\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\xed\xff\xff\xff\xef\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xf9\xff\xff\xff\x4a\x00\x00\x00\x4c\x00\x00\x00\x62\x00\x00\x00\x84\x00\x00\x00\x56\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x0c\x01\x00\x00\x9f\x00\x00\x00\x44\x01\x00\x00\x00\x00\x00\x00\x8f\x01\x00\x00\xa6\x01\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\x19\x02\x00\x00\x23\x02\x00\x00\x6c\x00\x00\x00\x00\x01\x00\x00\x39\x02\x00\x00\x43\x02\x00\x00\x59\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x01\x00\x00\x48\x01\x00\x00\x5d\x02\x00\x00\xd4\x02\x00\x00\xd5\x02\x00\x00\xec\x02\x00\x00\x24\x03\x00\x00\xd6\x02\x00\x00\x3c\x03\x00\x00\x6b\x03\x00\x00\x81\x03\x00\x00\x99\x03\x00\x00\xaf\x03\x00\x00\xd7\x02\x00\x00\xd8\x02\x00\x00\xed\x02\x00\x00\xba\x03\x00\x00\xf7\x03\x00\x00\x02\x04\x00\x00\xee\x02\x00\x00\x40\x04\x00\x00\x4b\x04\x00\x00\x56\x04\x00\x00\x61\x04\x00\x00\x84\x04\x00\x00\x78\x03\x00\x00\xa0\x04\x00\x00\xed\x04\x00\x00\x3a\x05\x00\x00\x87\x05\x00\x00\xd4\x05\x00\x00\x0e\x06\x00\x00\x48\x06\x00\x00\x00\x00\x00\x00\xcc\xff\xff\xff\xc6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x02\x00\x01\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0a\x00\x09\x00\x02\x00\x09\x00\x35\x00\x07\x00\x04\x00\x01\x00\x03\x00\x29\x00\x4b\x00\x4b\x00\x01\x00\x0a\x00\x4b\x00\x12\x00\x46\x00\x0e\x00\x16\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x48\x00\x4b\x00\x49\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x4b\x00\x0b\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x05\x00\x21\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x15\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x21\x00\x22\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x21\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x1e\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x1e\x00\x1e\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x21\x00\x22\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x1e\x00\x1e\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\xff\xff\x22\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x26\x00\x1b\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\xff\xff\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x23\x00\xff\xff\x22\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x26\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x38\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\xff\xff\x00\x00\x2c\x00\x38\x00\x38\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x2b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\xff\xff\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x00\x00\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\xff\xff\x00\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\x26\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x2c\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x2c\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x2c\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x28\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\xff\xff\xff\xff\x26\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\xff\xff\x00\x00\x26\x00\x00\x00\x37\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x26\x00\x00\x00\x00\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x26\x00\xff\xff\x00\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\xff\xff\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x47\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x47\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x47\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x47\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x2a\x00\x2a\x00\x2a\x00\x20\x00\x2a\x00\x22\x00\x23\x00\x2f\x00\x20\x00\x2f\x00\x27\x00\x28\x00\x29\x00\x20\x00\x2a\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x66\x00\x3b\x00\x6e\x00\x3d\x00\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x2a\x00\x7d\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\x45\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x65\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\x45\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x0a\x00\x45\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\x27\x00\x78\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5f\x00\x5c\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x0a\x00\x45\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x65\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\x5c\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0a\x00\x0a\x00\xff\xff\x22\x00\x27\x00\x27\x00\x27\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\x0a\x00\xff\xff\x5c\x00\x5c\x00\x5c\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x78\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x00\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x0a\x00\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x00\x00\x0a\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x00\x00\x22\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x0a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\x5c\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x5c\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x5c\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x0a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x22\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x0a\x00\x00\x00\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x0a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x0a\x00\x00\x00\x22\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x0a\x00\xff\xff\x22\x00\xff\xff\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x22\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x22\x00\x00\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x0a\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\x4c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x06\x00\x06\x00\x08\x00\x08\x00\x0c\x00\x0d\x00\x0c\x00\x0c\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\x2a\x00\x36\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,76) [[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[],[],[],[],[(AlexAcc (alex_action_14))],[(AlexAccPred  (alex_action_2) (alexRightContext 19)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_6))],[(AlexAccPred  (alex_action_2) (alexRightContext 19)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_6))],[(AlexAccPred  (alex_action_2) (alexRightContext 19)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_14))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_3) (alexRightContext 24)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_7))],[(AlexAccPred  (alex_action_3) (alexRightContext 24)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_7))],[(AlexAccPred  (alex_action_3) (alexRightContext 24)),(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_7))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) (alexRightContext 28)),(AlexAcc (alex_action_8))],[],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_9))],[(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_9))],[(AlexAccPred  (alex_action_5) (alexRightContext 36)),(AlexAcc (alex_action_9))],[],[],[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_14))],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_14))],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))]]-{-# LINE 57 "Text/ProtocolBuffers/ProtoCompile/Lexer.x" #-}--line :: AlexPosn -> Int-line (AlexPn _byte lineNum _col) = lineNum-{-# INLINE line #-}--data Lexed = L_Integer !Int !Integer-           | L_Double !Int !Double-           | L_Name !Int !L.ByteString-           | L_String !Int !L.ByteString !L.ByteString-           | L !Int !Char-           | L_Error !Int !String-  deriving (Show,Eq)--getLinePos :: Lexed -> Int-getLinePos x = case x of-                 L_Integer i _ -> i-                 L_Double  i _ -> i-                 L_Name    i _ -> i-                 L_String  i _ _ -> i-                 L         i _ -> i-                 L_Error   i _ -> i---- 'errAt' is the only access to L_Error, so I can see where it is created with pos-errAt pos msg =  L_Error (line pos) $ "Lexical error (in Text.ProtocolBuffers.Lexer): "++ msg ++ ", at "++see pos where-  see (AlexPn char lineNum col) = "character "++show char++" line "++show lineNum++" column "++show col++"."-dieAt msg pos _s = errAt pos msg-wtfAt pos s = errAt pos $ "unknown character "++show c++" (decimal "++show (ord c)++")"-  where (c:_) = ByteString.unpack s--{-# INLINE mayRead #-}-mayRead :: ReadS a -> String -> Maybe a-mayRead f s = case f s of [(a,"")] -> Just a; _ -> Nothing---- Given the regexps above, the "parse* failed" messages should be impossible.-parseDec pos s = maybe (errAt pos "Impossible? parseDec failed")-                       (L_Integer (line pos)) $ mayRead (readSigned readDec) (ByteString.unpack s)-parseOct pos s = maybe (errAt pos "Impossible? parseOct failed")-                       (L_Integer (line pos)) $ mayRead (readSigned readOct) (ByteString.unpack s)-parseHex pos s = maybe (errAt pos "Impossible? parseHex failed")-                       (L_Integer (line pos)) $ mayRead (readSigned (readHex . drop 2)) (ByteString.unpack s)-parseDouble pos s = maybe (errAt pos "Impossible? parseDouble failed")-                          (L_Double (line pos)) $ mayRead (readSigned readFloat) (ByteString.unpack s)--- The sDecode of the string contents may fail-parseStr pos s = let middle = ByteString.init . ByteString.tail $ s-                 in either (errAt pos) (L_String (line pos) middle . L.pack)-                    . sDecode . ByteString.unpack $ middle---- Here s is always "-inf" matched by @ninf-parseNinf pos s = L_Name (line pos) s--parseName pos s = L_Name (line pos) s-parseChar pos s = L (line pos) (ByteString.head s)---- Generalization of concat . unfoldr to monadic-Either form:-op :: ( [Char] -> Either String (Maybe ([Word8],[Char]))) -> [Char] -> Either String [Word8]-op one = go id where-  go f cs = case one cs of-              Left msg -> Left msg-              Right Nothing -> Right (f [])-              Right (Just (ws,cs')) -> go (f . (ws++)) cs'---- Put this mess in the lexer, so the rest of the code can assume--- everything is saner.  The input is checked to really be "Char8"--- values in the range [0..255] and to be c-escaped (in order to--- render binary information printable).  This decodes the c-escaping--- and returns the binary data as Word8.--- --- A decoding error causes (Left msg) to be returned.-sDecode :: [Char] -> Either String [Word8]-sDecode = op one where-  one :: [Char] -> Either String (Maybe ([Word8],[Char]))-  one ('\\':xs) = unescape xs-  one (x:xs) = do x' <- checkChar8 x-                  return $ Just (x',xs)  -- main case of unescaped value-  one [] = return Nothing-  unescape [] = Left "cannot understand a string that ends with a backslash"-  unescape ys | 1 <= len =-      case mayRead readOct oct of-        Just w -> do w' <- checkByte w-                     return $ Just (w',rest)-        Nothing -> Left $ "failed to decode octal sequence "++ys-    where oct = takeWhile isOctDigit (take 3 ys)-          len = length oct-          rest = drop len ys-  unescape (x:ys) | 'x' == toLower x && 1 <= len =-      case mayRead readHex hex of-        Just w -> do w' <- checkByte w-                     return $ Just (w',rest)-        Nothing -> Left $ "failed to decode hex sequence "++ys-    where hex = takeWhile isHexDigit (take 2 ys)-          len = length hex-          rest = drop len ys          -  unescape ('u':ys) | ok =-      case mayRead readHex hex of-        Just w -> do w' <- checkUnicode w-                     return $ Just (w',rest)-        Nothing -> Left $ "failed to decode 4 char unicode sequence "++ys-    where ok = all isHexDigit hex && 4 == length hex-          (hex,rest) = splitAt 4 ys-  unescape ('U':ys) | ok =-      case mayRead readHex hex of-        Just w -> do w' <- checkUnicode w-                     return $ Just (w',rest)-        Nothing -> Left $ "failed to decode 8 char unicode sequence "++ys-    where ok = all isHexDigit hex && 8 == length hex-          (hex,rest) = splitAt 8 ys-  unescape (x:xs) = do x' <- decode x-                       return $ Just ([x'],xs)-  decode :: Char -> Either String Word8-  decode 'a' = return 7-  decode 'b' = return 8-  decode 't' = return 9-  decode 'n' = return 10-  decode 'v' = return 11-  decode 'f' = return 12-  decode 'r' = return 13-  decode '\"' = return 34-  decode '\'' = return 39-  decode '?' = return 63    -- C99 rule : "\?" is '?'-  decode '\\' = return 92-  decode x | toLower x == 'x' = Left "cannot understand your 'xX' hexadecimal escaped value"-  decode x | toLower x == 'u' = Left "cannot understand your 'uU' unicode UTF-8 hexadecimal escaped value"-  decode _ = Left "cannot understand your backslash-escaped value"-  checkChar8 :: Char -> Either String [Word8]-  checkChar8 c | (0 <= i) && (i <= 255) = Right [toEnum i]-               | otherwise = Left $ "found Char out of range 0..255, value="++show (ord c)-    where i = fromEnum c-  checkByte :: Integer -> Either String [Word8]-  checkByte i | (0 <= i) && (i <= 255) = Right [fromInteger i]-              | otherwise = Left $ "found Oct/Hex Int out of range 0..255, value="++show i-  checkUnicode :: Integer -> Either String [Word8]-  checkUnicode i | (0 <= i) && (i <= 127) = Right [fromInteger i]-                 | i <= maxChar = Right $ encode [ toEnum . fromInteger $ i ]-                 | otherwise = Left $ "found Unicode Char out of range 0..0x10FFFF, value="++show i-    where maxChar = toInteger (fromEnum (maxBound ::Char)) -- 0x10FFFF---alex_action_2 =  parseDec -alex_action_3 =  parseOct -alex_action_4 =  parseHex -alex_action_5 =  parseDouble -alex_action_6 =  dieAt "decimal followed by invalid character" -alex_action_7 =  dieAt "octal followed by invalid character" -alex_action_8 =  dieAt "hex followed by invalid character" -alex_action_9 =  dieAt "floating followed by invalid character" -alex_action_10 =  parseStr -alex_action_11 =  parseName -alex_action_12 =  parseNinf -alex_action_13 =  parseChar -alex_action_14 =  wtfAt -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine--{-# LINE 37 "templates/GenericTemplate.hs" #-}--{-# LINE 47 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN-  narrow16Int# i-  where-        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)-        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-        low  = int2Word# (ord# (indexCharOffAddr# arr off'))-        off' = off *# 2#-#else-  indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN-  narrow32Int# i-  where-   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`-		     (b2 `uncheckedShiftL#` 16#) `or#`-		     (b1 `uncheckedShiftL#` 8#) `or#` b0)-   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))-   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))-   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))-   off' = off *# 4#-#else-  indexInt32OffAddr# arr off-#endif------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a-  = AlexEOF-  | AlexError  !AlexInput-  | AlexSkip   !AlexInput !Int-  | AlexToken  !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))-  = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))-  = case alex_scan_tkn user input 0# input sc AlexNone of-	(AlexNone, input') ->-		case alexGetChar input of-			Nothing -> ----				   AlexEOF-			Just _ ->----				   AlexError input'--	(AlexLastSkip input'' len, _) ->----		AlexSkip input'' len--	(AlexLastAcc k input''' len, _) ->----		AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =-  input `seq` -- strict in the input-  let -	new_acc = check_accs (alex_accept `quickIndex` (I# (s)))-  in-  new_acc `seq`-  case alexGetChar input of-     Nothing -> (new_acc, input)-     Just (c, new_input) -> ----	let-		(base) = alexIndexInt32OffAddr alex_base s-		((I# (ord_c))) = ord c-		(offset) = (base +# ord_c)-		(check)  = alexIndexInt16OffAddr alex_check offset-		-		(new_s) = if (offset >=# 0#) && (check ==# ord_c)-			  then alexIndexInt16OffAddr alex_table offset-			  else alexIndexInt16OffAddr alex_deflt s-	in-	case new_s of -	    -1# -> (new_acc, input)-		-- on an error, we want to keep the input *before* the-		-- character that failed, not after.-    	    _ -> alex_scan_tkn user orig_input (len +# 1#) -			new_input new_s new_acc--  where-	check_accs [] = last_acc-	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))-	check_accs (AlexAccPred a predx : rest)-	   | predx user orig_input (I# (len)) input-	   = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkipPred predx : rest)-	   | predx user orig_input (I# (len)) input-	   = AlexLastSkip input (I# (len))-	check_accs (_ : rest) = check_accs rest--data AlexLastAcc a-  = AlexNone-  | AlexLastAcc a !AlexInput !Int-  | AlexLastSkip  !AlexInput !Int--data AlexAcc a user-  = AlexAcc a-  | AlexAccSkip-  | AlexAccPred a (AlexAccPred user)-  | AlexAccSkipPred (AlexAccPred user)--type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool---- -------------------------------------------------------------------------------- Predicates on a rule--alexAndPred p1 p2 user in1 len in2-  = p1 user in1 len in2 && p2 user in1 len in2----alexPrevCharIsPred :: Char -> AlexAccPred _ -alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ -alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (I# (sc)) user _ _ input = -     case alex_scan_tkn user input 0# input sc AlexNone of-	  (AlexNone, _) -> False-	  _ -> True-	-- TODO: there's no need to find the longest-	-- match when checking the right context, just-	-- the first match will do.---- used by wrappers-iUnbox (I# (i)) = i
hprotoc.cabal view
@@ -1,5 +1,5 @@ name:           hprotoc-version:        1.8.2+version:        1.8.3 cabal-version:  >= 1.6 build-type:     Simple license:        BSD3@@ -24,7 +24,7 @@   Hs-Source-Dirs:  .,protoc-gen-haskell   build-tools:     alex   ghc-options:     -O2 -Wall -fspec-constr-count=10-  build-depends:   protocol-buffers == 1.8.2, protocol-buffers-descriptor == 1.8.2+  build-depends:   protocol-buffers == 1.8.3, protocol-buffers-descriptor == 1.8.3   build-depends:   binary, utf8-string   build-depends:   parsec < 3, haskell-src-exts >= 1.7.0,                    containers,bytestring,array,