Skip to content

Releases: kengorab/abra-lang

v0.0.40: Typechecker: support decorator declarations (#559)

13 Feb 01:30
de54761
Compare
Choose a tag to compare
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

13 Feb 00:49
Compare
Choose a tag to compare
Add short-circuit in case of errors typechecking prelude

v0.0.38

09 Feb 02:23
7c1b9ce
Compare
Choose a tag to compare
Last step of the cleanup (#555)

v0.0.37

09 Feb 02:05
65a8f18
Compare
Choose a tag to compare
Step 2 of the cleanup (#554)

v0.0.36: Officially adding syntax for decorators (#553)

08 Feb 03:09
80c4d6b
Compare
Choose a tag to compare
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

01 Feb 17:03
Compare
Choose a tag to compare
Ensure qbe names remain below the length limit

v0.0.34: LSP: Handle `textDocument/documentSymbol` (#548)

30 Jan 01:45
c4fb57f
Compare
Choose a tag to compare
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)

28 Jan 03:06
2771ad6
Compare
Choose a tag to compare
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)

27 Jan 01:57
644757e
Compare
Choose a tag to compare
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)

26 Jan 03:03
dc7ed3e
Compare
Choose a tag to compare
* 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.