Releases: kengorab/abra-lang
Releases · kengorab/abra-lang
v0.0.40: Typechecker: support decorator declarations (#559)
This involves rudimentary typechecking of fields, and adding the backing struct of the decorator into the scope like any ordinary `type` declaration. Also, in order to get things to typecheck properly, I added decorator declarations for the existing usages of decorators in the compiler: `@noreturn`, `@external`, and `@intrinsic`.
v0.0.39
Add short-circuit in case of errors typechecking prelude
v0.0.38
Last step of the cleanup (#555)
v0.0.37
Step 2 of the cleanup (#554)
v0.0.36: Officially adding syntax for decorators (#553)
Step 0 is a cleanup of existing decorators. Currently there's `@Intrinsic`, `@CBinding`, and `@Stub` which are used throughout the compiler and standard library. These can be consolidated and reformatted to fit the eventual future design ideas. For one, `@Stub` does not need to exist now that `todo` exists. Additionally since `@Intrinsic` and `@CBinding` really are more like language-level keywords, they should be lowercased (and `@CBinding` is being renamed to something more self-explanatory - `@external`).
v0.0.35
Ensure qbe names remain below the length limit
v0.0.34: LSP: Handle `textDocument/documentSymbol` (#548)
This change allows the LSP to provide a list of symbols for the current document, which includes a nested hierarchical view of types and their fields, enums and their variants, instance and static methods for each, as well as top-level variables and functions. Doing this caused a few bugs and gaps to surface, which are also fixed as part of this changeset. These include: Lexer: Consider a \t as a whitespace character when previously it wasn't. Typechecker: When adding a TypedModule to the Project, make sure to use the normalized path name, with `/a/b/../c` resolved to `/a/c` (previously this wasn't the case). Language service: If the TypedModule isn't currently present in the project, pre-emptively typecheck the current module rather than waiting for a save. This is helpful because it allows for more seamless go-to-definition and hover commands, but also because I think if the symbols aren't resolved correctly when the file first opens, vscode will ignore subsequent symbols provided by `textDocument/documentSymbol`. I also cleaned up residual "virtual file system" changes which had been commented out but which can now be disregarded because I don't think I'm going to be doing that any time soon.
v0.0.33: Visibility modifiers for methods (#546)
Enforce visibility modifiers for instance methods and static methods for types and enums. This required modifying a lot of builtin modules as well as the compiler and lsp itself.
v0.0.32: Continuing with visibility modifiers (#545)
Raise a typechecker error when trying to set non-pub fields when instantiating a type. In the future, there will be more work surrounding non-pub fields on types, especially if they don't have default values.
v0.0.31: Enforcing `pub` visibility for fields (#544)
* Enforcing `pub` visibility for fields Ensure that a non-`pub` field on a type cannot be accessed outside of the module (file) in which it was defined. This involved a lot of changes across a ton of files in order to maintain compliance. There will be even more things that change once methods' visibility with `pub` are also enforced. * Allowing non-pub access within std For performance reasons, don't require modules within std/ to use wrapper methods in order to access non-pub fields on standard library types.