Skip to content

v0.8.8

Choose a tag to compare

@rail5 rail5 released this 09 Apr 12:12
· 27 commits to main since this release
43791d9
  • Spec: Automatic object lifetime management is now explicitly
    defined by the spec. Destructors will automatically be called for
    scope-local objects at the end of all scoped constructs, including:
    Plain bash functions, class methods, curly-braced blocks, subshells,
    process substitutions, and all control-flow constructs (if/else, while
    until, for, case, select).
    Some of these cases were not properly handled before, having the spec
    state explicitly what the behavior should be helps us to verify that
    the compiler is behaving properly.
  • Spec: Define explicitly that objects instantiated within a supershell
    are owned (and therefore have their lifetimes managed) by the
    code entity containing that supershell, not by the supershell itself.
    Having this defined also illuminated another bug: namely, that the
    compiler didn't do this. This is therefore also a bug fix. To this end,
    an internal adopt() function was added to bpp::bpp_code_entity,
    used by parent scopes to adopt the objects instantiated by supershells
    that they contain.
  • Include path handling: The standard library directory is now always the
    last include path, allowing user-supplied -I directories to override
    standard library files. This behavior is now consistent between both the
    compiler and the language server.
  • Lexer bug fix: Correctly exit the class-header lexer mode after a class
    declaration that does not inherit from a parent class. This resolves
    a parser failure where ':' no-op commands would appear later in the
    source.
  • Redirections and pipes with compound constructs: Fixed a bug where 'if'
    and 'case' statements would incorrectly append delimiters after their
    terminal tokens (that is, after 'fi', 'esac').
    Added relevant test case for redirections and pipes into and out of
    all compound shell constructs (if, while, until, for, select, and case)
  • bpp-lsp: The 'UTF16' flag is now correctly propagated to included files.
  • Code hygiene (internal): Replaced legacy .rfind()/.find() string checks
    with modern .starts_with()/.contains()
    Removed unused include directives and commented out unused function
    parameters.
    Updated vendored XGetOpt version to 1.0.1
  • Documentation: Added comprehensive spec pages on scope and object
    lifetime management.
    Clarified the definition of 'system methods'
    Updated compiler and language manuals to reflect new include path
    behavior.