Skip to content

Commit dc11fad

Browse files
authored
Update to 1.87 (#125)
1 parent 265d143 commit dc11fad

File tree

2 files changed

+65
-33
lines changed

2 files changed

+65
-33
lines changed

generator/DearImGui/Generator/Parser.hs

Lines changed: 64 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ headers = do
146146

147147
_ <- skipManyTill anySingle ( namedSection "Viewports" )
148148

149+
_ <- skipManyTill anySingle ( namedSection "Platform Dependent Interfaces" ) -- XXX: since 1.87
150+
149151
_ <- skipManyTill anySingle ( namedSection "Obsolete functions and types" )
150152

151153
let
@@ -254,13 +256,21 @@ patternNameAndValue enumName =
254256
where
255257
count :: StateT EnumState m Integer
256258
count = do
257-
_ <- single ( Identifier $ enumName <> "COUNT" )
259+
let idName = enumName <> "COUNT"
260+
_ <- single ( Identifier idName )
261+
258262
mbVal <- optional do
259263
_ <- reservedSymbol '='
260-
integerExpression
261-
case mbVal of
264+
EnumState{enumValues} <- get
265+
integerExpression enumValues
266+
267+
countVal <- case mbVal of
262268
Nothing -> currEnumTag <$> get
263269
Just ct -> pure ct
270+
271+
modify' ( \ st -> st { enumValues = HashMap.insert idName countVal ( enumValues st ) } )
272+
pure countVal
273+
264274
value :: StateT EnumState m ( Text, Integer )
265275
value = do
266276
name <- identifier
@@ -271,13 +281,16 @@ patternNameAndValue enumName =
271281
patternRHS =
272282
( do
273283
reservedSymbol '='
274-
try integerExpression <|> try disjunction
284+
EnumState{enumValues} <- get
285+
try disjunction <|> try (integerExpression enumValues)
275286
)
276287
<|> ( currEnumTag <$> get )
277288

278289
disjunction :: StateT EnumState m Integer
279290
disjunction = do
280-
( summands :: [Text] ) <- identifier `sepBy1` symbol "|"
291+
initial <- identifier <* symbol "|"
292+
( rest :: [Text] ) <- identifier `sepBy1` symbol "|"
293+
let summands = initial : rest
281294
valsMap <- enumValues <$> get
282295
let
283296
res :: Either [ Text ] Integer
@@ -327,34 +340,53 @@ symbol :: MonadParsec e [ Tok ] m => Text -> m ()
327340
symbol s = token ( \ case { Symbolic s' | s == s' -> Just (); _ -> Nothing } ) mempty
328341
<?> ( Text.unpack s <> " (symbol)" )
329342

330-
integerExpression :: MonadParsec e [ Tok ] m => m Integer
331-
integerExpression = try integerPower <|> integer
332-
333-
integerPower :: MonadParsec e [ Tok ] m => m Integer
334-
integerPower = do
335-
a <- integer
336-
_ <- symbol "<<"
337-
i <- integer
338-
pure ( a `shiftL` fromIntegral i )
339-
340-
integer :: forall e m. MonadParsec e [ Tok ] m => m Integer
341-
integer =
342-
option id mkSign <*>
343-
token
344-
( \ case {
345-
Number i suff
346-
| Just _ <- toBoundedInteger @Int64 i
347-
, Right i' <- floatingOrInteger @Float @Integer i
348-
, not ( Text.any ( (== 'f' ) . toLower ) suff )
349-
-> Just i';
350-
_ -> Nothing
351-
}
352-
)
353-
mempty
354-
<?> "integer"
343+
integerExpression :: MonadParsec e [ Tok ] m => HashMap Text Integer -> m Integer
344+
integerExpression enums = try integerPower <|> try integerAdd <|> try integerSub <|> integer
355345
where
356-
mkSign :: m ( Integer -> Integer )
357-
mkSign = ( symbol "+" $> id ) <|> ( symbol "-" $> negate )
346+
integerPower :: MonadParsec e [ Tok ] m => m Integer
347+
integerPower = do
348+
a <- integer
349+
_ <- symbol "<<"
350+
i <- integer
351+
pure ( a `shiftL` fromIntegral i )
352+
353+
integerAdd :: MonadParsec e [ Tok ] m => m Integer
354+
integerAdd = do
355+
a <- integer
356+
_ <- symbol "+"
357+
i <- integer
358+
pure ( a + i )
359+
360+
integerSub :: MonadParsec e [ Tok ] m => m Integer
361+
integerSub = do
362+
a <- integer
363+
_ <- symbol "-"
364+
i <- integer
365+
pure ( a - i )
366+
367+
integer :: forall e m. MonadParsec e [ Tok ] m => m Integer
368+
integer =
369+
option id mkSign <*>
370+
token
371+
( \case
372+
Number i suff
373+
| Just _ <- toBoundedInteger @Int64 i
374+
, Right i' <- floatingOrInteger @Float @Integer i
375+
, not ( Text.any ( (== 'f' ) . toLower ) suff )
376+
->
377+
Just i'
378+
379+
Identifier name ->
380+
HashMap.lookup name enums
381+
382+
_ ->
383+
Nothing
384+
)
385+
mempty
386+
<?> "integer"
387+
where
388+
mkSign :: m ( Integer -> Integer )
389+
mkSign = ( symbol "+" $> id ) <|> ( symbol "-" $> negate )
358390

359391
section :: MonadParsec e [ Tok ] m => m [Text]
360392
section =

imgui

Submodule imgui updated 54 files

0 commit comments

Comments
 (0)