Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deftype and defmethod syntax major changes #3094

Merged
merged 27 commits into from
Oct 30, 2023
Merged

Conversation

ManDude
Copy link
Member

@ManDude ManDude commented Oct 18, 2023

Major change to how deftype shows up in our code:

  • the decompiler will no longer emit the offset-assert, method-count-assert, size-assert and flag-assert parameters. There are extremely few cases where having this in the decompiled code is helpful, as the types there come from all-types which already has those parameters. This also doesn't break type consistency because:
    • the asserts aren't compared.
    • the first step of the test uses all-types, which has the asserts, which will throw an error if they're bad.
  • the decompiler won't emit the heap-base parameter unless necessary now.
  • the decompiler will try its hardest to turn a fixed-offset field into an overlay-at field. It falls back to the old offset if all else fails.
  • overlay-at now supports field "dereferencing" to specify the offset that's within a field that's a structure, e.g.:
(deftype foobar (structure)
  ((vec    vector  :inline)
   (flags  int32   :overlay-at (-> vec w))
   )
  )

in this structure, the offset of flags will be 12 because that is the final offset of vec's w field within this structure.

  • removed ID from all method declarations. IDs are only ever automatically assigned now. Fixes [opengoal] delete method IDs and method asserts from language syntax #3068.
  • added an :overlay parameter to method declarations, in order to declare a new method that goes on top of a previously-defined method. Syntax is :overlay <method-name>. Please do not ever use this.
  • added state-methods list parameter. This lets you quickly specify a list of states to be put in the method table. Same syntax as the states list parameter. The decompiler will try to put as many states in this as it can without messing with the method ID order.

Also changes defmethod to make the first type definition (before the arguments) optional. The type can now be inferred from the first argument. Fixes #3093.

@ManDude ManDude changed the title deftype and defmethod syntax changes deftype and defmethod syntax major changes Oct 18, 2023
@ManDude ManDude marked this pull request as ready for review October 29, 2023 16:26
@ManDude ManDude merged commit cd68cb6 into master Oct 30, 2023
8 of 9 checks passed
@ManDude ManDude deleted the d/state-methods-def branch October 30, 2023 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
2 participants