mirror of
https://github.com/open-goal/jak-project
synced 2026-09-08 20:02:39 -04:00
allow quoting :key symbols + further optimize defpart (#2592)
This should hopefully improve build times in general, especially for files with `defpart`.
This commit is contained in:
+12
-12
@@ -697,8 +697,8 @@
|
||||
(define *sparticle-fields* '())
|
||||
(doenum (name val 'sp-field-id)
|
||||
(append!! *sparticle-fields* (list (if (string-starts-with? (symbol->string name) "spt-")
|
||||
(string-substr (symbol->string name) 4 0)
|
||||
(symbol->string name))
|
||||
(string->symbol (string-substr (symbol->string name) 4 0))
|
||||
name)
|
||||
val name (member name '(spt-vel-x
|
||||
spt-vel-y
|
||||
spt-vel-z
|
||||
@@ -740,13 +740,13 @@
|
||||
,@(apply (lambda (x)
|
||||
(let* ((head (symbol->string (car x)))
|
||||
(params (cdr x))
|
||||
(field-name (string-substr head 1 0))
|
||||
(field-name (string->symbol (string-substr head 1 0)))
|
||||
(field (assoc field-name *sparticle-fields*)))
|
||||
(when (not field)
|
||||
(fmt #t "unknown sparticle field {}\n" x))
|
||||
(when (neq? (string-ref head 0) #\:)
|
||||
(fmt #t "invalid sparticle field {}\n" x))
|
||||
(when (member (string->symbol field-name) *sparticle-fields-banned*)
|
||||
(when (member field-name *sparticle-fields-banned*)
|
||||
(fmt #t "you cannot use sparticle field {}\n" field-name))
|
||||
(let* ((field-id (cadr field))
|
||||
(field-enum-name (caddr field))
|
||||
@@ -759,20 +759,20 @@
|
||||
(fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*))))
|
||||
(set! last-field-id field-id)
|
||||
(cond
|
||||
((eq? field-name "flags")
|
||||
((eq? field-name 'flags)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1)
|
||||
)
|
||||
((eq? field-name "texture")
|
||||
((eq? field-name 'texture)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int))
|
||||
)
|
||||
((eq? field-name "next-launcher")
|
||||
((eq? field-name 'next-launcher)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher))
|
||||
)
|
||||
((eq? field-name "sound")
|
||||
((eq? field-name 'sound)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object))
|
||||
)
|
||||
((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy"))
|
||||
(let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*))
|
||||
((and (= 2 param-count) (symbol? param0) (eq? param0 ':copy))
|
||||
(let* ((other-field (assoc (cadr (member ':copy params)) *sparticle-fields*))
|
||||
(other-field-id (cadr other-field)))
|
||||
(when (>= other-field-id field-id)
|
||||
(fmt #t "warning copying to sparticle field {} - you can only copy from fields before this one!\n" field-name))
|
||||
@@ -780,9 +780,9 @@
|
||||
:initial-value ,(- other-field-id field-id) :random-mult 1)
|
||||
)
|
||||
)
|
||||
((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data"))
|
||||
((and (= 2 param-count) (symbol? param0) (eq? param0 ':data))
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object)
|
||||
:pntr (the-as pointer ,(cadr (member (string->symbol ":data") params))))
|
||||
:pntr (the-as pointer ,(cadr (member ':data params))))
|
||||
)
|
||||
((and (= 1 param-count) (param-symbol? param0))
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol)
|
||||
|
||||
+13
-13
@@ -1041,8 +1041,8 @@
|
||||
(define *sparticle-fields* '())
|
||||
(doenum (name val 'sp-field-id)
|
||||
(append!! *sparticle-fields* (list (if (string-starts-with? (symbol->string name) "spt-")
|
||||
(string-substr (symbol->string name) 4 0)
|
||||
(symbol->string name))
|
||||
(string->symbol (string-substr (symbol->string name) 4 0))
|
||||
name)
|
||||
val name (member name '(spt-vel-x
|
||||
spt-vel-y
|
||||
spt-vel-z
|
||||
@@ -1084,18 +1084,18 @@
|
||||
,@(apply (lambda (x)
|
||||
(let* ((head (symbol->string (car x)))
|
||||
(params (cdr x))
|
||||
(field-name (string-substr head 1 0))
|
||||
(field-name (string->symbol (string-substr head 1 0)))
|
||||
(field (assoc field-name *sparticle-fields*)))
|
||||
(when (not field)
|
||||
(fmt #t "unknown sparticle field {}\n" x))
|
||||
(when (neq? (string-ref head 0) #\:)
|
||||
(fmt #t "invalid sparticle field {}\n" x))
|
||||
(when (member (string->symbol field-name) *sparticle-fields-banned*)
|
||||
(when (member field-name *sparticle-fields-banned*)
|
||||
(fmt #t "you cannot use sparticle field {}\n" field-name))
|
||||
(let* ((field-id (cadr field))
|
||||
(field-enum-name (caddr field))
|
||||
(vel? (and #f (cadddr field)))
|
||||
(store? (member (string->symbol ":store") params))
|
||||
(store? (member ':store params))
|
||||
(param-count (if store? (1- (length params)) (length params)))
|
||||
(param0 (and (>= param-count 1) (first params)))
|
||||
(param1 (and (>= param-count 2) (second params)))
|
||||
@@ -1104,20 +1104,20 @@
|
||||
(fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*))))
|
||||
(set! last-field-id field-id)
|
||||
(cond
|
||||
((eq? field-name "flags")
|
||||
((eq? field-name 'flags)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1)
|
||||
)
|
||||
((eq? field-name "texture")
|
||||
((eq? field-name 'texture)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int))
|
||||
)
|
||||
((eq? field-name "next-launcher")
|
||||
((eq? field-name 'next-launcher)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher))
|
||||
)
|
||||
((eq? field-name "sound")
|
||||
((eq? field-name 'sound)
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object))
|
||||
)
|
||||
((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy"))
|
||||
(let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*))
|
||||
((and (= 2 param-count) (symbol? param0) (eq? param0 ':copy))
|
||||
(let* ((other-field (assoc (cadr (member ':copy params)) *sparticle-fields*))
|
||||
(other-field-id (cadr other-field)))
|
||||
(when (>= other-field-id field-id)
|
||||
(fmt #t "warning copying to sparticle field {} - you can only copy from fields before this one!\n" field-name))
|
||||
@@ -1125,9 +1125,9 @@
|
||||
:initial-value ,(- other-field-id field-id) :random-mult 1)
|
||||
)
|
||||
)
|
||||
((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data"))
|
||||
((and (= 2 param-count) (symbol? param0) (eq? param0 ':data))
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object)
|
||||
:object ,(cadr (member (string->symbol ":data") params)))
|
||||
:object ,(cadr (member ':data params)))
|
||||
)
|
||||
((and (= 1 param-count) (param-symbol? param0))
|
||||
`(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol)
|
||||
|
||||
Reference in New Issue
Block a user