packages feed

crucible-syntax-0.4.1: CHANGELOG.md

# 0.4.1 -- 2025-03-21

* Add a `Pretty` instance for ExprError.

* Allow exotic characters (including Unicode symbols) in fresh atom
names instead of having them be restricted to plain text identifiers.

# 0.4 -- 2024-02-05

* The type `ACFG` has been removed in favor of `Lang.Crucible.CFG.Reg.AnyCFG`,
  which serves a similar purpose (hiding the argument and return types). The
  CFG argument and return types can be recovered via
  `Lang.Crucible.CFG.Reg.{cfgArgTypes,cfgReturnType}`.
* `crucible-syntax` now supports simulating CFGs with language-specific syntax
  extensions:

  * `SimulateProgramHooks` now has a `setupHook` field that can run an arbitrary
    override action before simulation. (For example, this is used in
    `crucible-llvm-syntax` to initialize the LLVM memory global variable.)
  * `SimulateProgramHooks` now has an extra `ext` type variable so that hooks
    can be extension-specific.
* `execCommand` and related data types in `Lang.Crucible.Syntax.Prog` have been
  split off into a separate `crucible-cli` library.

# 0.3

* The return type of `prog`:

  ```hs
  TopParser s (Map GlobalName (Pair TypeRepr GlobalVar), [ACFG ext])
  ```

  Has been changed to:

  ```hs
  TopParser s (ParsedProgram ext)
  ```

  Where the `parsedProgGlobals :: Map GlobalName (Some GlobalVar)` and
  `parsedProgCFGs :: [ACFG ext]` fields of `ParsedProgram` now serve the roles
  previously filled by the first and second fields of the returned tuple. (Note
  that `Pair TypeRepr GlobalVar` has been simplified to `Some GlobalVar`, as
  the `TypeRepr` of a `GlobalVar` can be retrieved through its `globalType`
  field.)
* The type of `simulateProgram`'s last argument:

  ```hs
  simulateProgram
    :: ...
    -> (forall p sym ext t st fs. (IsSymInterface sym, sym ~ (ExprBuilder t st fs)) =>
          sym -> HandleAllocator -> IO [(FnBinding p sym ext,Position)])
    -> ...
  ```

  Has changed to the following:

  ```hs
  simulateProgram
    :: ...
    -> SimulateProgramHooks
    -> ...
  ```

  Where the `setupOverridesHook` field of `SimulateProgramHooks` now serves the
  role previously filled by the function argument.

* `crucible-syntax` now supports _forward declarations_. A forward declaration
  is like a function, but lacking a body, and is useful for situations where
  one does not know what the implementation of a function will be until after
  the `.cbl` file is parsed. See the `crucible-syntax` `README` for more
  information.

  There is also now an `extern` keyword, that acts like a forward declaration
  for global variables.

# 0.2

* Various functions now take a `?parserHooks :: ParserHooks ext` implicit
  argument, which supports arbitrary syntax extensions. Various data types now
  also have an additional `ext` type parameter, which represents the type of
  the parser extension being used. If you do not care about parser extensions,
  a reasonable default choice is `?parserHooks = defaultParserHooks`.