mirror of
https://github.com/open-goal/jak-project
synced 2026-08-16 05:09:45 -04:00
deftype and defmethod syntax major changes (#3094)
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.: ```lisp (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 #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. --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
This commit is contained in:
+35
-35
@@ -21,7 +21,7 @@
|
||||
|
||||
;; definition for method 24 of type level-group
|
||||
;; WARN: Return type mismatch object vs pair.
|
||||
(defmethod alt-load-command-get-index level-group ((this level-group) (arg0 symbol) (arg1 int))
|
||||
(defmethod alt-load-command-get-index ((this level-group) (arg0 symbol) (arg1 int))
|
||||
(let ((v1-1 (-> (lookup-level-info arg0) alt-load-commands)))
|
||||
(while (nonzero? arg1)
|
||||
(+! arg1 -1)
|
||||
@@ -35,12 +35,12 @@
|
||||
)
|
||||
|
||||
;; definition for method 29 of type level-group
|
||||
(defmethod load-in-progress? level-group ((this level-group))
|
||||
(defmethod load-in-progress? ((this level-group))
|
||||
(!= (-> *level* loading-level) (-> *level* default-level))
|
||||
)
|
||||
|
||||
;; definition for method 11 of type level-group
|
||||
(defmethod get-level-by-heap-ptr-and-status level-group ((this level-group) (arg0 pointer) (arg1 symbol))
|
||||
(defmethod get-level-by-heap-ptr-and-status ((this level-group) (arg0 pointer) (arg1 symbol))
|
||||
(case arg1
|
||||
(('active)
|
||||
(dotimes (v1-1 (-> this length))
|
||||
@@ -81,7 +81,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 21 of type level
|
||||
(defmethod get-art-group-by-name level ((this level) (arg0 string))
|
||||
(defmethod get-art-group-by-name ((this level) (arg0 string))
|
||||
(countdown (s4-0 (-> this art-group art-group-array length))
|
||||
(if (name= (-> this art-group art-group-array s4-0 name) arg0)
|
||||
(return (-> this art-group art-group-array s4-0))
|
||||
@@ -91,7 +91,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 13 of type level
|
||||
(defmethod bsp-name level ((this level))
|
||||
(defmethod bsp-name ((this level))
|
||||
(if (and (!= (-> this status) 'inactive) (-> this bsp) (nonzero? (-> this bsp name)))
|
||||
(-> this bsp name)
|
||||
(-> this name)
|
||||
@@ -108,13 +108,13 @@
|
||||
)
|
||||
|
||||
;; definition for method 2 of type level
|
||||
(defmethod print level ((this level))
|
||||
(defmethod print ((this level))
|
||||
(format #t "#<~A ~A ~S @ #x~X>" (-> this type) (-> this status) (-> this name) this)
|
||||
this
|
||||
)
|
||||
|
||||
;; definition for method 7 of type bsp-header
|
||||
(defmethod relocate bsp-header ((this bsp-header) (arg0 int))
|
||||
(defmethod relocate ((this bsp-header) (arg0 int))
|
||||
(let ((s5-0 (-> *level* loading-level)))
|
||||
(when s5-0
|
||||
(cond
|
||||
@@ -153,7 +153,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 27 of type level
|
||||
(defmethod load-required-packages level ((this level))
|
||||
(defmethod load-required-packages ((this level))
|
||||
(when (not (or (not (-> this bsp)) (= *kernel-boot-mode* 'debug-boot)))
|
||||
(if (not (null? (-> this info packages)))
|
||||
(load-package "common" global)
|
||||
@@ -165,7 +165,7 @@
|
||||
;; definition for method 29 of type level
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod vis-clear level ((this level))
|
||||
(defmethod vis-clear ((this level))
|
||||
(countdown (v1-0 8)
|
||||
(nop!)
|
||||
(set! (-> this vis-info v1-0) #f)
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
;; definition for method 28 of type level
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod init-vis-from-bsp level ((this level))
|
||||
(defmethod init-vis-from-bsp ((this level))
|
||||
(when (not (or (= (-> this status) 'inactive) (not (-> this bsp))))
|
||||
(set! (-> this all-visible?) 'loading)
|
||||
(dotimes (s5-0 8)
|
||||
@@ -211,7 +211,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 12 of type level-group
|
||||
(defmethod level-get-for-use level-group ((this level-group) (arg0 symbol) (arg1 symbol))
|
||||
(defmethod level-get-for-use ((this level-group) (arg0 symbol) (arg1 symbol))
|
||||
(local-vars (s5-1 level))
|
||||
(alloc-levels-if-needed this #f)
|
||||
(let* ((s2-0 (lookup-level-info arg0))
|
||||
@@ -259,7 +259,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 28 of type level-group
|
||||
(defmethod level-status level-group ((this level-group) (arg0 symbol))
|
||||
(defmethod level-status ((this level-group) (arg0 symbol))
|
||||
(let ((v1-1 (level-get *level* arg0)))
|
||||
(if v1-1
|
||||
(-> v1-1 status)
|
||||
@@ -269,7 +269,7 @@
|
||||
|
||||
;; definition for method 26 of type level
|
||||
;; INFO: Used lq/sq
|
||||
(defmethod level-status-update! level ((this level) (arg0 symbol))
|
||||
(defmethod level-status-update! ((this level) (arg0 symbol))
|
||||
(case arg0
|
||||
(('inactive)
|
||||
(-> this status)
|
||||
@@ -368,7 +368,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 17 of type level
|
||||
(defmethod load-continue level ((this level))
|
||||
(defmethod load-continue ((this level))
|
||||
(local-vars (sv-16 symbol))
|
||||
(when (-> this linking)
|
||||
(when (nonzero? (link-resume))
|
||||
@@ -494,7 +494,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 18 of type level
|
||||
(defmethod load-begin level ((this level))
|
||||
(defmethod load-begin ((this level))
|
||||
(local-vars (bits-to-use int) (borrow-from-lev level) (found-borrow symbol))
|
||||
(dotimes (v1-0 2)
|
||||
(set! (-> this borrow-level v1-0) #f)
|
||||
@@ -773,7 +773,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 19 of type level
|
||||
(defmethod login-begin level ((this level))
|
||||
(defmethod login-begin ((this level))
|
||||
(set! (-> *texture-pool* allocate-func) texture-page-default-allocate)
|
||||
(cond
|
||||
((-> this bsp)
|
||||
@@ -1099,7 +1099,7 @@
|
||||
|
||||
;; definition for method 25 of type level
|
||||
;; INFO: Used lq/sq
|
||||
(defmethod birth level ((this level))
|
||||
(defmethod birth ((this level))
|
||||
(local-vars (sv-96 int))
|
||||
(case (-> this status)
|
||||
(('loaded)
|
||||
@@ -1173,7 +1173,7 @@
|
||||
|
||||
;; definition for method 9 of type level
|
||||
;; INFO: Used lq/sq
|
||||
(defmethod deactivate level ((this level))
|
||||
(defmethod deactivate ((this level))
|
||||
(case (-> this status)
|
||||
(('active 'alive)
|
||||
(format 0 "----------- kill ~A (status ~A)~%" this (-> this status))
|
||||
@@ -1219,7 +1219,7 @@
|
||||
|
||||
;; definition for method 12 of type level
|
||||
;; WARN: Using new Jak 2 rtype-of
|
||||
(defmethod unload! level ((this level))
|
||||
(defmethod unload! ((this level))
|
||||
(deactivate this)
|
||||
(when (!= (-> this status) 'inactive)
|
||||
(dotimes (s5-0 2)
|
||||
@@ -1377,7 +1377,7 @@
|
||||
|
||||
;; definition for method 10 of type level
|
||||
;; ERROR: Unsupported inline assembly instruction kind - [addiu a0, a0, 56]
|
||||
(defmethod is-object-visible? level ((this level) (arg0 int))
|
||||
(defmethod is-object-visible? ((this level) (arg0 int))
|
||||
(local-vars (a0-1 int) (a0-3 int))
|
||||
(let ((v1-0 (-> this vis-bits)))
|
||||
(shift-arith-right-32 a0-1 arg0 3)
|
||||
@@ -1391,7 +1391,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 15 of type level
|
||||
(defmethod inside-boxes-check level ((this level) (arg0 vector))
|
||||
(defmethod inside-boxes-check ((this level) (arg0 vector))
|
||||
(cond
|
||||
((not (-> this bsp))
|
||||
#f
|
||||
@@ -1407,7 +1407,7 @@
|
||||
|
||||
;; definition for method 20 of type level
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod debug-print-region-splitbox level ((this level) (arg0 vector) (arg1 object))
|
||||
(defmethod debug-print-region-splitbox ((this level) (arg0 vector) (arg1 object))
|
||||
(cond
|
||||
((or (not (-> this bsp)) (zero? (-> this bsp region-tree)))
|
||||
)
|
||||
@@ -1420,7 +1420,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 8 of type level
|
||||
(defmethod mem-usage level ((this level) (arg0 memory-usage-block) (arg1 int))
|
||||
(defmethod mem-usage ((this level) (arg0 memory-usage-block) (arg1 int))
|
||||
(when (= (-> this status) 'active)
|
||||
(set! (-> arg0 length) (max 67 (-> arg0 length)))
|
||||
(set! (-> arg0 data 66 name) "entity-links")
|
||||
@@ -1476,7 +1476,7 @@
|
||||
|
||||
;; definition for method 21 of type level-group
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod alloc-levels-if-needed level-group ((this level-group) (arg0 symbol))
|
||||
(defmethod alloc-levels-if-needed ((this level-group) (arg0 symbol))
|
||||
(when (zero? (-> *level* heap base))
|
||||
(kmemopen global "level-heaps")
|
||||
(when (nmember "game" *kernel-packages*)
|
||||
@@ -1506,7 +1506,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 10 of type level-group
|
||||
(defmethod level-get-with-status level-group ((this level-group) (arg0 symbol))
|
||||
(defmethod level-get-with-status ((this level-group) (arg0 symbol))
|
||||
(dotimes (v1-0 (-> this length))
|
||||
(if (= (-> this level v1-0 status) arg0)
|
||||
(return (-> this level v1-0))
|
||||
@@ -1516,7 +1516,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 30 of type level-group
|
||||
(defmethod level-get-most-disposable level-group ((this level-group))
|
||||
(defmethod level-get-most-disposable ((this level-group))
|
||||
(dotimes (v1-0 (-> this length))
|
||||
(case (-> this level v1-0 status)
|
||||
(('inactive)
|
||||
@@ -1555,7 +1555,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 9 of type level-group
|
||||
(defmethod level-get level-group ((this level-group) (arg0 symbol))
|
||||
(defmethod level-get ((this level-group) (arg0 symbol))
|
||||
(dotimes (v1-0 (-> this length))
|
||||
(if (and (!= (-> this level v1-0 status) 'inactive)
|
||||
(or (= (-> this level v1-0 name) arg0) (= (-> this level v1-0 load-name) arg0))
|
||||
@@ -1567,7 +1567,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 23 of type level-group
|
||||
(defmethod art-group-get-by-name level-group ((this level-group) (arg0 string) (arg1 (pointer uint32)))
|
||||
(defmethod art-group-get-by-name ((this level-group) (arg0 string) (arg1 (pointer uint32)))
|
||||
(countdown (s4-0 7)
|
||||
(let ((s3-0 (-> *level* level s4-0)))
|
||||
(when (or (= (-> s3-0 status) 'active) (= (-> s3-0 status) 'reserved))
|
||||
@@ -1586,7 +1586,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 13 of type level-group
|
||||
(defmethod activate-levels! level-group ((this level-group))
|
||||
(defmethod activate-levels! ((this level-group))
|
||||
(dotimes (s5-0 (-> this length))
|
||||
(level-status-update! (-> this level s5-0) 'active)
|
||||
)
|
||||
@@ -1594,7 +1594,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 20 of type level-group
|
||||
(defmethod level-get-target-inside level-group ((this level-group))
|
||||
(defmethod level-get-target-inside ((this level-group))
|
||||
(let ((s5-0 (target-pos 0)))
|
||||
(let ((v1-1 (-> *load-state* vis-nick)))
|
||||
(when v1-1
|
||||
@@ -1665,14 +1665,14 @@
|
||||
|
||||
;; definition for method 22 of type level-group
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod load-commands-set! level-group ((this level-group) (arg0 pair))
|
||||
(defmethod load-commands-set! ((this level-group) (arg0 pair))
|
||||
(set! (-> this load-commands) arg0)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for method 8 of type level-group
|
||||
(defmethod mem-usage level-group ((this level-group) (arg0 memory-usage-block) (arg1 int))
|
||||
(defmethod mem-usage ((this level-group) (arg0 memory-usage-block) (arg1 int))
|
||||
(dotimes (s3-0 (-> this length))
|
||||
(mem-usage (-> this level s3-0) arg0 arg1)
|
||||
)
|
||||
@@ -1971,7 +1971,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 10 of type load-state
|
||||
(defmethod update! load-state ((this load-state))
|
||||
(defmethod update! ((this load-state))
|
||||
(local-vars (all-levels-inactive symbol))
|
||||
(let ((discarded-level #f))
|
||||
(let ((most-recent-load-order 0))
|
||||
@@ -2156,7 +2156,7 @@
|
||||
|
||||
;; definition for method 16 of type level-group
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod assign-draw-indices level-group ((this level-group))
|
||||
(defmethod assign-draw-indices ((this level-group))
|
||||
(local-vars (t0-3 symbol))
|
||||
(set! (-> this draw-level-count) 0)
|
||||
(dotimes (v1-0 7)
|
||||
@@ -2211,7 +2211,7 @@
|
||||
|
||||
;; definition for method 19 of type level-group
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod level-update level-group ((this level-group))
|
||||
(defmethod level-update ((this level-group))
|
||||
(local-vars (v1-101 symbol))
|
||||
(camera-pos)
|
||||
(new 'static 'boxed-array :type symbol :length 0 :allocated-length 6)
|
||||
|
||||
Reference in New Issue
Block a user