Update to 1.87 (#125)

This commit is contained in:
Alexander Bondarenko 2022-02-13 00:26:39 +03:00 committed by GitHub
parent 265d143261
commit dc11fad07f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 33 deletions

View File

@ -146,6 +146,8 @@ headers = do
_ <- skipManyTill anySingle ( namedSection "Viewports" ) _ <- skipManyTill anySingle ( namedSection "Viewports" )
_ <- skipManyTill anySingle ( namedSection "Platform Dependent Interfaces" ) -- XXX: since 1.87
_ <- skipManyTill anySingle ( namedSection "Obsolete functions and types" ) _ <- skipManyTill anySingle ( namedSection "Obsolete functions and types" )
let let
@ -254,13 +256,21 @@ patternNameAndValue enumName =
where where
count :: StateT EnumState m Integer count :: StateT EnumState m Integer
count = do count = do
_ <- single ( Identifier $ enumName <> "COUNT" ) let idName = enumName <> "COUNT"
_ <- single ( Identifier idName )
mbVal <- optional do mbVal <- optional do
_ <- reservedSymbol '=' _ <- reservedSymbol '='
integerExpression EnumState{enumValues} <- get
case mbVal of integerExpression enumValues
countVal <- case mbVal of
Nothing -> currEnumTag <$> get Nothing -> currEnumTag <$> get
Just ct -> pure ct Just ct -> pure ct
modify' ( \ st -> st { enumValues = HashMap.insert idName countVal ( enumValues st ) } )
pure countVal
value :: StateT EnumState m ( Text, Integer ) value :: StateT EnumState m ( Text, Integer )
value = do value = do
name <- identifier name <- identifier
@ -271,13 +281,16 @@ patternNameAndValue enumName =
patternRHS = patternRHS =
( do ( do
reservedSymbol '=' reservedSymbol '='
try integerExpression <|> try disjunction EnumState{enumValues} <- get
try disjunction <|> try (integerExpression enumValues)
) )
<|> ( currEnumTag <$> get ) <|> ( currEnumTag <$> get )
disjunction :: StateT EnumState m Integer disjunction :: StateT EnumState m Integer
disjunction = do disjunction = do
( summands :: [Text] ) <- identifier `sepBy1` symbol "|" initial <- identifier <* symbol "|"
( rest :: [Text] ) <- identifier `sepBy1` symbol "|"
let summands = initial : rest
valsMap <- enumValues <$> get valsMap <- enumValues <$> get
let let
res :: Either [ Text ] Integer res :: Either [ Text ] Integer
@ -327,28 +340,47 @@ symbol :: MonadParsec e [ Tok ] m => Text -> m ()
symbol s = token ( \ case { Symbolic s' | s == s' -> Just (); _ -> Nothing } ) mempty symbol s = token ( \ case { Symbolic s' | s == s' -> Just (); _ -> Nothing } ) mempty
<?> ( Text.unpack s <> " (symbol)" ) <?> ( Text.unpack s <> " (symbol)" )
integerExpression :: MonadParsec e [ Tok ] m => m Integer integerExpression :: MonadParsec e [ Tok ] m => HashMap Text Integer -> m Integer
integerExpression = try integerPower <|> integer integerExpression enums = try integerPower <|> try integerAdd <|> try integerSub <|> integer
where
integerPower :: MonadParsec e [ Tok ] m => m Integer integerPower :: MonadParsec e [ Tok ] m => m Integer
integerPower = do integerPower = do
a <- integer a <- integer
_ <- symbol "<<" _ <- symbol "<<"
i <- integer i <- integer
pure ( a `shiftL` fromIntegral i ) pure ( a `shiftL` fromIntegral i )
integer :: forall e m. MonadParsec e [ Tok ] m => m Integer integerAdd :: MonadParsec e [ Tok ] m => m Integer
integer = integerAdd = do
a <- integer
_ <- symbol "+"
i <- integer
pure ( a + i )
integerSub :: MonadParsec e [ Tok ] m => m Integer
integerSub = do
a <- integer
_ <- symbol "-"
i <- integer
pure ( a - i )
integer :: forall e m. MonadParsec e [ Tok ] m => m Integer
integer =
option id mkSign <*> option id mkSign <*>
token token
( \ case { ( \case
Number i suff Number i suff
| Just _ <- toBoundedInteger @Int64 i | Just _ <- toBoundedInteger @Int64 i
, Right i' <- floatingOrInteger @Float @Integer i , Right i' <- floatingOrInteger @Float @Integer i
, not ( Text.any ( (== 'f' ) . toLower ) suff ) , not ( Text.any ( (== 'f' ) . toLower ) suff )
-> Just i'; ->
_ -> Nothing Just i'
}
Identifier name ->
HashMap.lookup name enums
_ ->
Nothing
) )
mempty mempty
<?> "integer" <?> "integer"

2
imgui

@ -1 +1 @@
Subproject commit 512c54bbc062c41c74f8a8bd8ff1fd6bebd1e6d0 Subproject commit c71a50deb5ddf1ea386b91e60fa2e4a26d080074