add types (#559)

This commit is contained in:
water111
2021-06-05 16:58:32 -04:00
committed by GitHub
parent 2851cae13b
commit a572587a0e
32 changed files with 994 additions and 187 deletions
+16
View File
@@ -474,6 +474,22 @@ TP_Type SimpleExpression::get_type_int2(const TypeState& input,
}
}
// access with just product and no offset.
if (m_kind == Kind::ADD && arg0_type.kind == TP_Type::Kind::TYPESPEC &&
arg0_type.typespec().base_type() == "inline-array" &&
arg1_type.kind == TP_Type::Kind::PRODUCT_WITH_CONSTANT) {
FieldReverseLookupInput rd_in;
rd_in.deref = std::nullopt;
rd_in.stride = arg1_type.get_multiplier();
rd_in.offset = 0;
rd_in.base_type = arg0_type.typespec();
auto rd = dts.ts.reverse_field_lookup(rd_in);
if (rd.success) {
return TP_Type::make_from_ts(coerce_to_reg_type(rd.result_type));
}
}
if (m_kind == Kind::ADD && arg0_type.is_product() && arg1_type.kind == TP_Type::Kind::TYPESPEC) {
return TP_Type::make_object_plus_product(arg1_type.typespec(), arg0_type.get_multiplier());
}
+2
View File
@@ -1540,6 +1540,8 @@ std::string fixed_operator_to_string(FixedOperatorKind kind) {
return "symbol->string";
case FixedOperatorKind::ADDRESS_OF:
return "&";
case FixedOperatorKind::ASM_SLLV_R0:
return ".asm.sllv.r0";
default:
assert(false);
return "";
+48 -5
View File
@@ -638,6 +638,9 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
return;
}
auto addition_matcher =
GenericOpMatcher::or_match({GenericOpMatcher::fixed(FixedOperatorKind::ADDITION),
GenericOpMatcher::fixed(FixedOperatorKind::ADDITION_PTR)});
if (arg0_type.kind == TP_Type::Kind::INTEGER_CONSTANT_PLUS_VAR) {
// try to see if this is valid, from the type system.
FieldReverseLookupInput input;
@@ -648,8 +651,9 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
if (out.success) {
// it is. now we have to modify things
// first, look for the index
auto arg0_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION),
{Matcher::any(0), Matcher::integer(input.offset)});
auto arg0_matcher =
Matcher::op(addition_matcher, {Matcher::any(0), Matcher::integer(input.offset)});
auto match_result = match(arg0_matcher, args.at(0));
if (match_result.matched) {
bool used_index = false;
@@ -683,7 +687,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
if (is_power_of_two(input.stride, &p2)) {
// (+ (shl (-> a0-0 reg-count) 3) 28)
auto arg0_matcher =
Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION),
Matcher::op(addition_matcher,
{Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::MULTIPLICATION),
{Matcher::any(0), Matcher::integer(input.stride)}),
Matcher::integer(input.offset)});
@@ -709,7 +713,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
}
} else {
auto arg0_matcher =
Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION),
Matcher::op(addition_matcher,
{Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::MULTIPLICATION),
{Matcher::integer(input.stride), Matcher::any(0)}),
Matcher::integer(input.offset)});
@@ -735,6 +739,38 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
}
}
}
} else if (arg1_type.kind == TP_Type::Kind::PRODUCT_WITH_CONSTANT &&
arg0_type.kind == TP_Type::Kind::TYPESPEC &&
arg0_type.typespec().base_type() == "inline-array") {
FieldReverseLookupInput rd_in;
rd_in.deref = std::nullopt;
rd_in.stride = arg1_type.get_multiplier();
rd_in.offset = 0;
rd_in.base_type = arg0_type.typespec();
auto rd = env.dts->ts.reverse_field_lookup(rd_in);
if (rd.success) {
auto arg1_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::MULTIPLICATION),
{Matcher::any(0), Matcher::integer(rd_in.stride)});
auto match_result = match(arg1_matcher, args.at(1));
if (match_result.matched) {
bool used_index = false;
std::vector<DerefToken> tokens;
for (auto& tok : rd.tokens) {
if (tok.kind == FieldReverseLookupOutput::Token::Kind::VAR_IDX) {
assert(!used_index);
used_index = true;
tokens.push_back(DerefToken::make_int_expr(match_result.maps.forms.at(0)));
} else {
tokens.push_back(to_token(tok));
}
}
result->push_back(pool.alloc_element<DerefElement>(args.at(0), rd.addr_of, tokens));
return;
} else {
throw std::runtime_error("Failed to match product_with_constant inline array access.");
}
}
}
}
@@ -2991,13 +3027,20 @@ void push_asm_sllv_to_stack(const AsmOp* op,
auto src_var = pop_to_forms({*var}, env, pool, stack, true).at(0);
auto as_ba = src_var->try_as_element<BitfieldAccessElement>();
if (as_ba) {
// part of existing chain.
BitfieldManip step(BitfieldManip::Kind::SLLV_SEXT, 0);
auto other = as_ba->push_step(step, env.dts->ts, pool, env);
assert(other); // should immediately get a field.
stack.push_value_to_reg(*dst, pool.alloc_single_form(nullptr, other), true,
env.get_variable_type(*dst, true));
} else {
throw std::runtime_error("Got invalid bitfield manip for sllv");
// push it to a weird looking form for initial bitfield setting.
// these are lazily converted at the destination.
stack.push_value_to_reg(
*dst,
pool.alloc_single_element_form<GenericElement>(
nullptr, GenericOperator::make_fixed(FixedOperatorKind::ASM_SLLV_R0), src_var),
true, env.get_variable_type(*dst, true));
}
}
} else {
+14
View File
@@ -606,6 +606,13 @@ GenericOpMatcher GenericOpMatcher::condition(IR2_Condition::Kind condition) {
return m;
}
GenericOpMatcher GenericOpMatcher::or_match(const std::vector<GenericOpMatcher>& matchers) {
GenericOpMatcher m;
m.m_kind = Kind::OR;
m.m_sub_matchers = matchers;
return m;
}
bool GenericOpMatcher::do_match(GenericOperator& input, MatchResult::Maps* maps_out) const {
switch (m_kind) {
case Kind::FIXED:
@@ -623,6 +630,13 @@ bool GenericOpMatcher::do_match(GenericOperator& input, MatchResult::Maps* maps_
return input.condition_kind() == m_condition_kind;
}
return false;
case Kind::OR:
for (auto& m : m_sub_matchers) {
if (m.do_match(input, maps_out)) {
return true;
}
}
return false;
default:
assert(false);
return false;
+3 -1
View File
@@ -114,8 +114,9 @@ class GenericOpMatcher {
static GenericOpMatcher fixed(FixedOperatorKind kind);
static GenericOpMatcher func(const Matcher& func_matcher);
static GenericOpMatcher condition(IR2_Condition::Kind condition);
static GenericOpMatcher or_match(const std::vector<GenericOpMatcher>& matchers);
enum class Kind { FIXED, FUNC, CONDITION, INVALID };
enum class Kind { FIXED, FUNC, CONDITION, OR, INVALID };
bool do_match(GenericOperator& input, MatchResult::Maps* maps_out) const;
@@ -123,6 +124,7 @@ class GenericOpMatcher {
Kind m_kind = Kind::INVALID;
FixedOperatorKind m_fixed_kind = FixedOperatorKind::INVALID;
IR2_Condition::Kind m_condition_kind = IR2_Condition::Kind::INVALID;
std::vector<GenericOpMatcher> m_sub_matchers;
Matcher m_func_matcher;
};
+1
View File
@@ -146,6 +146,7 @@ enum class FixedOperatorKind {
PCPYLD,
SYMBOL_TO_STRING,
ADDRESS_OF,
ASM_SLLV_R0,
INVALID
};
+15
View File
@@ -289,6 +289,21 @@ std::optional<BitFieldDef> get_bitfield_initial_set(Form* form,
return def;
}
auto matcher_sllv =
Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ASM_SLLV_R0), {Matcher::any(0)});
auto mr_sllv = match(matcher_sllv, strip_int_or_uint_cast(form));
if (mr_sllv.matched) {
auto value = mr_sllv.maps.forms.at(0);
int size = 32;
int offset = 0;
auto& f = find_field(ts, type, offset, size, {});
BitFieldDef def;
def.value = value;
def.field_name = f.name();
def.is_signed = false;
return def;
}
return {};
}
+129 -58
View File
@@ -28,8 +28,9 @@
(deftype inline-array-class (basic)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(data uint8 :dynamic :offset-assert 12) ;; might not be here...
(_pad uint8 4) ;; ???
;; this is 16-byte aligned.
;; children of inline-array-class should define their own data which overlays this one.
(_data uint8 :dynamic :offset 16)
)
(:methods (new (symbol type int) _type_ 0))
:method-count-assert 9
@@ -493,6 +494,45 @@
(invalid 666)
)
(defenum bucket-id
:type uint32
:bitfield #f
(tfrag-tex0 5)
;; merc0 10
;; generic0 11
(tfrag-tex1 12)
;; merc1 17
;; generic1 18
(shrub-tex0 19)
(shrub-tex1 25)
(alpha-tex0 31)
(alpha-tex1 38)
(pris-tex0 48)
;; merc0 49
;; generic0 50
(pris-tex1 51)
;; merc1 52
;; generic1 53
(water-tex0 57)
;; merc0 58 (+ default)
;; generic0 59 (+ default)
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug text 68
(debug-draw 68)
)
(define-extern sinteger type)
(define-extern wheel type)
@@ -5326,7 +5366,9 @@
)
(deftype cspace-array (inline-array-class)
()
(
(data cspace :inline :dynamic :offset-assert 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
@@ -9271,7 +9313,7 @@
(deftype process-drawable (process)
((root trsqv :offset-assert 112)
(node-list basic :offset-assert 116)
(node-list cspace-array :offset-assert 116)
(draw draw-control :offset-assert 120)
(skel basic :offset-assert 124)
(nav basic :offset-assert 128)
@@ -9392,9 +9434,9 @@
)
;; - Unknowns
;; - Symbols
;;(define-extern *global-attack-id* object) ;; unknown type
(define-extern *global-attack-id* int)
;; ----------------------
@@ -9902,45 +9944,61 @@
;; Containing DGOs - ['GAME', 'ENGINE']
;; Version - 3
;; - Enums
(defenum joint-mod-handler-mode
:bitfield #t
:type uint32
(flex-blend 0) ;; 1
(look-at 1) ;; 2
(world-look-at 2) ;; 4
(rotate 3) ;; 8
(joint-set 4) ;; 16
(joint-set* 5) ;; 32
;; ?? ;; 64
(reset 7) ;; 128
)
;; - Types
(deftype joint-mod (basic)
((mode uint32 :offset-assert 4)
(process basic :offset-assert 8)
(joint cspace :offset-assert 12)
(target vector :inline :offset-assert 16)
(twist vector :inline :offset-assert 32)
(twist-max vector :inline :offset-assert 48)
(trans vector :inline :offset-assert 64)
(quat quaternion :inline :offset-assert 80)
(scale vector :inline :offset-assert 96)
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist float :offset-assert 128) ;; meters
(ignore-angle float :offset-assert 132) ;; deg
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
(shutting-down? basic :offset-assert 140)
(parented-scale? basic :offset 128)
((mode joint-mod-handler-mode :offset-assert 4)
(process process-drawable :offset-assert 8)
(joint cspace :offset-assert 12)
(target vector :inline :offset-assert 16)
(twist vector :inline :offset-assert 32)
(twist-max vector :inline :offset-assert 48)
(trans vector :inline :offset-assert 64)
(quat quaternion :inline :offset-assert 80)
(scale vector :inline :offset-assert 96)
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist float :offset-assert 128) ;; meters
(ignore-angle float :offset-assert 132) ;; deg
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
(shutting-down? basic :offset-assert 140)
(parented-scale? basic :offset 128)
)
:method-count-assert 16
:size-assert #x90
:flag-assert #x1000000090
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
(dummy-11 () none 11)
(dummy-12 () none 12)
(dummy-13 () none 13)
(dummy-14 () none 14)
(dummy-15 () none 15)
(new (symbol type joint-mod-handler-mode process-drawable int) _type_ 0)
(set-mode! (_type_ joint-mod-handler-mode) _type_ 9)
(set-target! (_type_ vector) none 10)
(look-at-enemy! (_type_ vector symbol process) none 11)
(reset-blend! (_type_) _type_ 12)
(set-twist! (_type_ float float float) vector 13)
(set-trs! (_type_ vector quaternion vector) none 14)
(shut-down! (_type_) float 15)
)
)
(deftype try-to-look-at-info (basic)
((who uint64 :offset-assert 8)
((who handle :offset-assert 8)
(horz float :offset-assert 16)
(vert float :offset-assert 20)
)
@@ -9950,12 +10008,15 @@
)
(deftype joint-mod-wheel (basic)
((last-position vector :inline :offset-assert 16)
(angle float :offset-assert 32)
(process basic :offset-assert 36)
(wheel-radius float :offset-assert 40)
(wheel-axis int8 :offset-assert 44)
((last-position vector :inline :offset-assert 16)
(angle float :offset-assert 32)
(process process-drawable :offset-assert 36)
(wheel-radius float :offset-assert 40)
(wheel-axis int8 :offset-assert 44)
)
(:methods
(new (symbol type process-drawable int float int) _type_)
)
:method-count-assert 9
:size-assert #x2d
:flag-assert #x90000002d
@@ -9968,6 +10029,9 @@
(set-translation basic :offset-assert 72)
(enable basic :offset-assert 76)
)
(:methods
(new (symbol type process-drawable int basic basic basic) _type_)
)
:method-count-assert 9
:size-assert #x50
:flag-assert #x900000050
@@ -9978,6 +10042,9 @@
(node-index int32 :offset-assert 64)
(enable basic :offset-assert 68)
)
(:methods
(new (symbol type process-drawable int basic) _type_)
)
:method-count-assert 9
:size-assert #x48
:flag-assert #x900000048
@@ -9990,6 +10057,9 @@
(blend float :offset-assert 116)
(enable basic :offset-assert 120)
)
(:methods
(new (symbol type process-drawable int basic) _type_)
)
:method-count-assert 9
:size-assert #x7c
:flag-assert #x90000007c
@@ -10001,6 +10071,9 @@
(spin-rate float :offset-assert 36)
(enable basic :offset-assert 40)
)
(:methods
(new (symbol type process-drawable int vector float) _type_)
)
:method-count-assert 9
:size-assert #x2c
:flag-assert #x90000002c
@@ -10008,32 +10081,30 @@
;; - Functions
(define-extern joint-mod-blend-local-callback (function joint-mod-blend-local vector none)) ;; first arg is something WITh a joint-mod, no idea yet!
(define-extern joint-mod-look-at-handler (function cspace none)) ;; TODO
(define-extern joint-mod-blend-local-callback (function cspace transformq none))
(define-extern joint-mod-look-at-handler (function cspace transformq none))
(define-extern joint-mod-world-look-at-handler (function cspace transformq none))
(define-extern joint-mod-rotate-handler (function cspace transformq none))
(define-extern joint-mod-joint-set-handler (function cspace transformq none))
(define-extern joint-mod-joint-set*-handler (function cspace transformq none))
(define-extern joint-mod-wheel-callback (function cspace transformq none))
(define-extern joint-mod-set-local-callback (function cspace transformq none))
(define-extern joint-mod-set-world-callback (function cspace transformq none))
(define-extern joint-mod-spinner-callback (function cspace transformq none))
;; - Symbols
(define-extern cspace<-parented-transformq-joint! (function cspace transformq none))
(define-extern cspace<-transformq! (function cspace transformq matrix))
(define-extern vector<-cspace! (function vector cspace vector))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba none))
(define-extern joint-mod-spinner-callback function)
(define-extern cspace<-parented-transformq-joint! function)
(define-extern joint-mod-set-world-callback function)
(define-extern cspace<-transformq! function)
(define-extern joint-mod-set-local-callback function)
(define-extern joint-mod-wheel-callback function)
(define-extern vector<-cspace! function)
(define-extern add-debug-text-sphere function)
(define-extern joint-mod-world-look-at-handler function)
(define-extern joint-mod-rotate-handler function)
(define-extern joint-mod-joint-set-handler function)
(define-extern joint-mod-joint-set*-handler function)
(define-extern add-debug-matrix function)
(define-extern joint-mod-debug-draw function)
(define-extern add-debug-matrix (function symbol bucket-id matrix none))
(define-extern joint-mod-debug-draw (function joint-mod none))
(define-extern last-try-to-look-at-data try-to-look-at-info)
(define-extern *joint-axis-vectors* (inline-array vector))
;; - Unknowns
;;(define-extern *joint-axis-vectors* object) ;; unknown type
;;(define-extern last-try-to-look-at-data object) ;; unknown type
;; ----------------------
;; File - collide-func-h
;; Source Path - engine/collide/collide-func-h.gc
@@ -478,5 +478,13 @@
"actor-link-h": [
["L79", "float", true]
],
"joint-mod-h": [
["L100", "float", true],
["L93", "float", true],
["L103", "rgba", true],
["L89", "(inline-array vector)", true, 6],
["L90", "(inline-array vector)", true, 3]
]
}
@@ -262,5 +262,35 @@
"(method 10 cam-vector-seeker)": [
[16, "vector"]
],
"joint-mod-look-at-handler": [
[16, "vector"],
[32, "vector"],
[64, "vector"],
[80, "vector"],
[96, "vector"]
],
"joint-mod-world-look-at-handler": [
[16, "vector"],
[32, "vector"],
[64, "vector"],
[80, "matrix"],
[144, "vector"],
[160, "vector"],
[176, "matrix"]
],
"joint-mod-rotate-handler": [
[16, "quaternion"],
[32, "quaternion"],
[48, "quaternion"]
],
"joint-mod-wheel-callback": [
[16, "vector"],
[32, "vector"],
[48, "vector"]
]
}
@@ -397,7 +397,7 @@
// FACT-H
"(method 0 fact-info-enemy)": [
[[3,92], "gp", "fact-info-enemy"],
[[3, 92], "gp", "fact-info-enemy"],
[16, "v0", "float"],
[28, "v0", "float"],
[40, "v0", "float"],
@@ -415,7 +415,7 @@
[86, "gp", "fact-info"]
],
"(method 0 fact-info-target)": [[[3,20], "gp", "fact-info-target"]],
"(method 0 fact-info-target)": [[[3, 20], "gp", "fact-info-target"]],
"(method 0 align-control)": [
[[8, 13], "t9", "(function object object)"],
@@ -465,5 +465,26 @@
"camera-teleport-to-entity": [[9, "a0", "transform"]],
"entity-actor-count": [["_stack_", 16, "res-tag"]]
"entity-actor-count": [["_stack_", 16, "res-tag"]],
"(method 11 joint-mod)": [
[15, "s3", "process-drawable"],
[[26, 66], "s3", "fact-info-enemy"],
[46, "v1", "(pointer process)"]
],
"joint-mod-look-at-handler": [[[2, 254], "gp", "joint-mod"]],
"joint-mod-world-look-at-handler": [[[0, 254], "gp", "joint-mod"]],
"joint-mod-rotate-handler": [[[2, 77], "s4", "joint-mod"]],
"joint-mod-joint-set-handler": [[[2, 13], "s4", "joint-mod"]],
"joint-mod-joint-set*-handler": [[[2, 31], "s5", "joint-mod"]],
"joint-mod-wheel-callback": [[[2, 63], "s4", "joint-mod-wheel"]],
"joint-mod-set-local-callback": [[[0, 23], "v1", "joint-mod-set-local"]],
"joint-mod-set-world-callback": [[[0, 23], "v1", "joint-mod-set-world"]],
"joint-mod-blend-local-callback": [[[2, 63], "gp", "joint-mod-blend-local"]],
"joint-mod-spinner-callback": [[[2, 63], "gp", "joint-mod-spinner"]]
}
@@ -1660,12 +1660,12 @@
},
"(method 0 fact-info)": {
"args":["allocation", "type-to-make", "proc", "pkup-type", "pkup-amount"],
"args": ["allocation", "type-to-make", "proc", "pkup-type", "pkup-amount"],
"vars": {
"gp-0":["obj", "fact-info"],
"s5-0":"ent",
"sv-16":"tag",
"t9-1":["go-func", "(function string none)"]
"gp-0": ["obj", "fact-info"],
"s5-0": "ent",
"sv-16": "tag",
"t9-1": ["go-func", "(function string none)"]
}
},
@@ -1773,8 +1773,39 @@
"entity-actor-count": {
"args": ["res", "name"],
"vars":{
"sv-16":"tag"
"vars": {
"sv-16": "tag"
}
}
},
"(method 0 joint-mod)": {
"args": ["allocation", "type-to-make", "mode", "proc", "joint-idx"],
"vars": {
"gp-0": "obj",
"v1-7": "twist-max"
}
},
"joint-mod-debug-draw": {
"args":["mod"]
},
"(method 9 joint-mod)": {
"args":["obj", "handler-mode"],
"vars":{"v1-0":"joint", "a0-1":"mode"}
},
"(method 10 joint-mod)": {
"args":["obj", "target-trans"],
"vars":{"f0-0":"distance"}
},
"(method 13 joint-mod)": { "args": ["obj", "x", "y", "z"] },
"(method 14 joint-mod)": { "args": ["obj", "trans", "rot", "scale"] },
"(method 11 joint-mod)": {
"args": ["obj", "target-trans", "option", "proc"],
"vars": { "s1-0": "proc-drawable", "s3-1": "enemy-facts", "f30-0": "dist" }
},
"joint-mod-look-at-handler": { "args": ["csp", "xform", "mat"] }
}
-1
View File
@@ -1136,7 +1136,6 @@ u64 call_method_of_type(u32 arg, Ptr<Type> type, u32 method_id) {
}
}
printf("[ERROR] call_method_of_type failed!\n");
assert(false);
return arg;
}
+1 -1
View File
@@ -66,7 +66,7 @@
)
(deftype cspace-array (inline-array-class)
()
((data cspace :inline :dynamic :offset-assert 16))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
+1 -1
View File
@@ -8,7 +8,7 @@
(deftype process-drawable (process)
((root trsqv :offset-assert 112)
(node-list basic :offset-assert 116)
(node-list cspace-array :offset-assert 116)
(draw draw-control :offset-assert 120)
(skel basic :offset-assert 124)
(nav basic :offset-assert 128)
+1
View File
@@ -41,6 +41,7 @@
;; merc1 61
;; generic1 62
;; debug text 68
(debug-draw 68)
)
;; Information related to visibility data for a level.
+9 -2
View File
@@ -666,8 +666,9 @@
(deftype inline-array-class (basic)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(data uint8 :dynamic :offset-assert 12) ;; might not be here...
(_pad uint8 4) ;; ???
;; this is 16-byte aligned.
;; children of inline-array-class should define their own data which overlays this one.
(_data uint8 :dynamic :offset 16)
)
(:methods (new (symbol type int) _type_ 0))
@@ -1423,3 +1424,9 @@
(the-as uint result)
)
)
(defmacro as-type (obj type)
`(if (and (nonzero? ,obj) (type-type? (-> ,obj type) ,type))
(the-as ,type ,obj)
)
)
+12
View File
@@ -414,6 +414,18 @@
)
)
(defmacro process->ppointer (proc)
`(if ,proc (the (pointer process) (-> ,proc ppointer)))
)
(defmacro ppointer->handle (pproc)
`(new 'static 'handle :process ,pproc :pid (-> ,pproc 0 pid))
)
(defmacro process->handle (proc)
`(ppointer->handle (process->ppointer ,proc))
)
(defmethod print handle ((obj handle))
;; the get-process-from-handle macro can't deal with
;; a 0 in the process field, so we check it manually here.
+1 -1
View File
@@ -308,7 +308,7 @@ Val* Compiler::compile_bitfield_definition(const goos::Object& form,
auto field_size = field_info.size;
assert(field_offset + field_size <= type_info->get_load_size() * 8);
if (is_integer(field_info.result_type)) {
if (is_integer(field_info.result_type) || field_info.result_type.base_type() == "pointer") {
// first, try as a constant
s64 value = 0;
if (!try_getting_constant_integer(field_value, &value, env)) {
@@ -438,37 +438,6 @@
;; game-h - TODO
(declare-type trsqv basic)
(declare-type draw-control basic)
(deftype process-drawable (process)
((root trsqv :offset-assert 112)
(node-list basic :offset-assert 116)
(draw draw-control :offset-assert 120)
(skel basic :offset-assert 124)
(nav basic :offset-assert 128)
(align basic :offset-assert 132)
(path basic :offset-assert 136)
(vol basic :offset-assert 140)
(fact basic :offset-assert 144)
(link basic :offset-assert 148)
(part basic :offset-assert 152)
(water basic :offset-assert 156)
(sound basic :offset-assert 160)
(state-flags uint32 :offset-assert 164)
(state-time uint64 :offset-assert 168)
)
:heap-base #x40
:method-count-assert 20
:size-assert #xb0
:flag-assert #x14004000b0
;; inherited inspect of process
(:methods
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-16 () none 16)
(dummy-17 () none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
)
)
;; game-h - TODO
(deftype vector (structure)
@@ -495,32 +464,6 @@
:flag-assert #x900000010
)
(deftype attack-info (structure)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48) ;; handle
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back float :offset-assert 72) ;; meters
(shove-up float :offset-assert 76) ;; meters
(speed float :offset-assert 80) ;; meters
(dist float :offset-assert 84) ;; meters
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to float :offset-assert 96) ;; deg
(prev-state basic :offset-assert 100)
)
:method-count-assert 10
:size-assert #x68
:flag-assert #xa00000068
;; field handle is likely a value type
(:methods
(dummy-9 () none 9)
)
)
;; definition of type quaternion
(deftype quaternion (structure)
((x float :offset-assert 0)
@@ -678,25 +621,6 @@
`(-> (the-as (pointer string) (+ SYM_TO_STRING_OFFSET (the-as int ,sym))))
)
;; TODO - from generic-obs-h
(deftype gui-query (structure)
((x-position int32 :offset-assert 0)
(y-position int32 :offset-assert 4)
(message basic :offset-assert 8)
(decision basic :offset-assert 12)
(only-allow-cancel basic :offset-assert 16)
(no-msg basic :offset-assert 20)
(message-space int32 :offset-assert 24)
)
:pack-me
:method-count-assert 11
:size-assert #x1c
:flag-assert #xb0000001c
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
)
)
(defmacro new-stack-matrix0 ()
"Get a new matrix on the stack that's set to zero."
@@ -4,7 +4,7 @@
;; definition of type align-control
(deftype align-control (basic)
((flags uint32 :offset-assert 4)
(process basic :offset-assert 8)
(process process :offset-assert 8)
(frame-group basic :offset-assert 12)
(frame-num float :offset-assert 16)
(matrix matrix 2 :inline :offset-assert 32)
@@ -80,7 +80,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -122,7 +122,8 @@
;; definition of type cspace-array
(deftype cspace-array (inline-array-class)
()
((data cspace :inline :dynamic :offset-assert 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
@@ -133,7 +134,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -154,7 +155,3 @@
;; failed to figure out what this is:
(let ((v0-6 0))
)
@@ -0,0 +1,74 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type pos-history
(deftype pos-history (structure)
((points uint32 :offset-assert 0)
(num-points int32 :offset-assert 4)
(h-first int32 :offset-assert 8)
(h-last int32 :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; definition for method 3 of type pos-history
(defmethod inspect pos-history ((obj pos-history))
(format #t "[~8x] ~A~%" obj 'pos-history)
(format #t "~Tpoints: #x~X~%" (-> obj points))
(format #t "~Tnum-points: ~D~%" (-> obj num-points))
(format #t "~Th-first: ~D~%" (-> obj h-first))
(format #t "~Th-last: ~D~%" (-> obj h-last))
obj
)
;; definition of type debug-vertex
(deftype debug-vertex (structure)
((trans vector4w :inline :offset-assert 0)
(normal vector3h :inline :offset-assert 16)
(st vector2h :inline :offset-assert 22)
(color uint32 :offset-assert 28)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
;; definition for method 3 of type debug-vertex
(defmethod inspect debug-vertex ((obj debug-vertex))
(format #t "[~8x] ~A~%" obj 'debug-vertex)
(format #t "~Ttrans: ~`vector4w`P~%" (-> obj trans))
(format #t "~Tnormal: ~`vector3h`P~%" (-> obj normal))
(format #t "~Tst: ~`vector2h`P~%" (-> obj st))
(format #t "~Tcolor: #x~X~%" (-> obj color))
obj
)
;; definition of type debug-vertex-stats
(deftype debug-vertex-stats (basic)
((length int32 :offset-assert 4)
(pos-count int32 :offset-assert 8)
(vertex debug-vertex 600 :inline :offset-assert 16)
)
:method-count-assert 9
:size-assert #x4b10
:flag-assert #x900004b10
)
;; definition for method 3 of type debug-vertex-stats
(defmethod inspect debug-vertex-stats ((obj debug-vertex-stats))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tpos-count: ~D~%" (-> obj pos-count))
(format #t "~Tvertex[600] @ #x~X~%" (-> obj vertex))
obj
)
;; failed to figure out what this is:
(let ((v0-3 0))
)
@@ -105,7 +105,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -140,7 +140,3 @@
(set! (-> perf-stat method-table 12) nothing)
(set! (-> perf-stat method-table 13) nothing)
)
@@ -37,7 +37,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -109,7 +109,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -129,7 +129,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -212,7 +212,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -312,7 +312,3 @@
;; failed to figure out what this is:
(let ((v0-12 0))
)
@@ -0,0 +1,193 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type process-drawable
(deftype process-drawable (process)
((root trsqv :offset-assert 112)
(node-list cspace-array :offset-assert 116)
(draw draw-control :offset-assert 120)
(skel basic :offset-assert 124)
(nav basic :offset-assert 128)
(align basic :offset-assert 132)
(path basic :offset-assert 136)
(vol basic :offset-assert 140)
(fact basic :offset-assert 144)
(link basic :offset-assert 148)
(part basic :offset-assert 152)
(water basic :offset-assert 156)
(sound basic :offset-assert 160)
(state-flags uint32 :offset-assert 164)
(state-time uint64 :offset-assert 168)
)
:heap-base #x40
:method-count-assert 20
:size-assert #xb0
:flag-assert #x14004000b0
(:methods
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-16 () none 16)
(dummy-17 () none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
)
)
;; definition for method 3 of type process-drawable
(defmethod inspect process-drawable ((obj process-drawable))
(let ((t9-0 (method-of-type process inspect)))
(t9-0 obj)
)
(format #t "~T~Troot: ~A~%" (-> obj root))
(format #t "~T~Tnode-list: ~A~%" (-> obj node-list))
(format #t "~T~Tdraw: ~A~%" (-> obj draw))
(format #t "~T~Tskel: ~A~%" (-> obj skel))
(format #t "~T~Tnav: ~A~%" (-> obj nav))
(format #t "~T~Talign: ~A~%" (-> obj align))
(format #t "~T~Tpath: ~A~%" (-> obj path))
(format #t "~T~Tvol: ~A~%" (-> obj vol))
(format #t "~T~Tfact: ~A~%" (-> obj fact))
(format #t "~T~Tlink: ~A~%" (-> obj link))
(format #t "~T~Tpart: ~A~%" (-> obj part))
(format #t "~T~Twater: ~A~%" (-> obj water))
(format #t "~T~Tsound: ~A~%" (-> obj sound))
(format #t "~T~Tstate-flags: ~D~%" (-> obj state-flags))
(format #t "~T~Tstate-time: ~D~%" (-> obj state-time))
obj
)
;; definition of type process-drawable-reserved
(deftype process-drawable-reserved (process-drawable)
()
:heap-base #x40
:method-count-assert 63
:size-assert #xb0
:flag-assert #x3f004000b0
(:methods
(dummy-20 () none 20)
(dummy-21 () none 21)
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(dummy-25 () none 25)
(dummy-26 () none 26)
(dummy-27 () none 27)
(dummy-28 () none 28)
(dummy-29 () none 29)
(dummy-30 () none 30)
(dummy-31 () none 31)
(dummy-32 () none 32)
(dummy-33 () none 33)
(dummy-34 () none 34)
(dummy-35 () none 35)
(dummy-36 () none 36)
(dummy-37 () none 37)
(dummy-38 () none 38)
(dummy-39 () none 39)
(dummy-40 () none 40)
(dummy-41 () none 41)
(dummy-42 () none 42)
(dummy-43 () none 43)
(dummy-44 () none 44)
(dummy-45 () none 45)
(dummy-46 () none 46)
(dummy-47 () none 47)
(dummy-48 () none 48)
(dummy-49 () none 49)
(dummy-50 () none 50)
(dummy-51 () none 51)
(dummy-52 () none 52)
(dummy-53 () none 53)
(dummy-54 () none 54)
(dummy-55 () none 55)
(dummy-56 () none 56)
(dummy-57 () none 57)
(dummy-58 () none 58)
(dummy-59 () none 59)
(dummy-60 () none 60)
(dummy-61 () none 61)
(dummy-62 () none 62)
)
)
;; definition for method 3 of type process-drawable-reserved
(defmethod inspect process-drawable-reserved ((obj process-drawable-reserved))
(let ((t9-0 (method-of-type process-drawable inspect)))
(t9-0 obj)
)
obj
)
;; definition of type attack-info
(deftype attack-info (structure)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48)
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back float :offset-assert 72)
(shove-up float :offset-assert 76)
(speed float :offset-assert 80)
(dist float :offset-assert 84)
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to float :offset-assert 96)
(prev-state basic :offset-assert 100)
)
:method-count-assert 10
:size-assert #x68
:flag-assert #xa00000068
(:methods
(dummy-9 () none 9)
)
)
;; definition for method 3 of type attack-info
(defmethod inspect attack-info ((obj attack-info))
(format #t "[~8x] ~A~%" obj 'attack-info)
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Tvector: ~`vector`P~%" (-> obj vector))
(format #t "~Tintersection: ~`vector`P~%" (-> obj intersection))
(format #t "~Tattacker: ~`handle`P~%" (-> obj attacker))
(format #t "~Tinvinc-time: ~D~%" (-> obj invinc-time))
(format #t "~Tmask: ~D~%" (-> obj mask))
(format #t "~Tmode: ~A~%" (-> obj mode))
(format #t "~Tshove-back: (meters ~m)~%" (-> obj shove-back))
(format #t "~Tshove-up: (meters ~m)~%" (-> obj shove-up))
(format #t "~Tspeed: (meters ~m)~%" (-> obj speed))
(format #t "~Tdist: (meters ~m)~%" (-> obj dist))
(format #t "~Tcontrol: ~f~%" (-> obj control))
(format #t "~Tangle: ~A~%" (-> obj angle))
(format #t "~Trotate-to: (deg ~r)~%" (-> obj rotate-to))
(format #t "~Tprev-state: ~A~%" (-> obj prev-state))
obj
)
;; definition for symbol *global-attack-id*, type int
(define *global-attack-id* 0)
;; definition of type ground-tween-info
(deftype ground-tween-info (structure)
((chan uint8 3 :offset-assert 0)
(blend uint32 3 :offset-assert 4)
(group uint32 5 :offset-assert 16)
)
:method-count-assert 9
:size-assert #x24
:flag-assert #x900000024
)
;; definition for method 3 of type ground-tween-info
(defmethod inspect ground-tween-info ((obj ground-tween-info))
(format #t "[~8x] ~A~%" obj 'ground-tween-info)
(format #t "~Tchan[3] @ #x~X~%" (-> obj chan))
(format #t "~Tblend[3] @ #x~X~%" (-> obj blend))
(format #t "~Tgroup[5] @ #x~X~%" (-> obj group))
obj
)
;; failed to figure out what this is:
(let ((v0-4 0))
)
@@ -0,0 +1,356 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type manipy
(deftype manipy (process-drawable)
((new-trans-hook function :offset-assert 176)
(cur-trans-hook function :offset-assert 180)
(cur-event-hook function :offset-assert 184)
(new-joint-anim basic :offset-assert 188)
(new-joint-anim-blend uint64 :offset-assert 192)
(anim-mode basic :offset-assert 200)
(cur-grab-handle uint64 :offset-assert 208)
(cur-target-handle uint64 :offset-assert 216)
(old-grab-pos vector :inline :offset-assert 224)
(joint joint 4 :offset-assert 240)
(new-post-hook function :offset-assert 256)
(cur-post-hook function :offset-assert 260)
(clone-copy-trans basic :offset-assert 264)
(shadow-backup basic :offset-assert 268)
(draw? symbol :offset-assert 272)
)
:heap-base #xb0
:method-count-assert 20
:size-assert #x114
:flag-assert #x1400b00114
)
;; definition for method 3 of type manipy
(defmethod inspect manipy ((obj manipy))
(let ((t9-0 (method-of-type process-drawable inspect)))
(t9-0 obj)
)
(format #t "~T~Tnew-trans-hook: ~A~%" (-> obj new-trans-hook))
(format #t "~T~Tcur-trans-hook: ~A~%" (-> obj cur-trans-hook))
(format #t "~T~Tcur-event-hook: ~A~%" (-> obj cur-event-hook))
(format #t "~T~Tnew-joint-anim: ~A~%" (-> obj new-joint-anim))
(format #t "~T~Tnew-joint-anim-blend: ~D~%" (-> obj new-joint-anim-blend))
(format #t "~T~Tanim-mode: ~A~%" (-> obj anim-mode))
(format #t "~T~Tcur-grab-handle: ~D~%" (-> obj cur-grab-handle))
(format #t "~T~Tcur-target-handle: ~D~%" (-> obj cur-target-handle))
(format #t "~T~Told-grab-pos: ~`vector`P~%" (&-> obj stack 112))
(format #t "~T~Tjoint[4] @ #x~X~%" (&-> obj stack 128))
(format #t "~T~Tnew-post-hook: ~A~%" (-> obj new-post-hook))
(format #t "~T~Tcur-post-hook: ~A~%" (-> obj cur-post-hook))
(format #t "~T~Tclone-copy-trans: ~A~%" (-> obj clone-copy-trans))
(format #t "~T~Tshadow-backup: ~A~%" (-> obj shadow-backup))
(format #t "~T~Tdraw?: ~A~%" (-> obj draw?))
obj
)
;; definition of type part-spawner
(deftype part-spawner (process-drawable)
((mode uint32 :offset-assert 176)
(enable basic :offset-assert 180)
(radius float :offset-assert 184)
(world-sphere sphere :inline :offset-assert 192)
)
:heap-base #x60
:method-count-assert 21
:size-assert #xd0
:flag-assert #x15006000d0
(:methods
(dummy-20 () none 20)
)
)
;; definition for method 3 of type part-spawner
(defmethod inspect part-spawner ((obj part-spawner))
(let ((t9-0 (method-of-type process-drawable inspect)))
(t9-0 obj)
)
(format #t "~T~Tmode: #x~X~%" (-> obj mode))
(format #t "~T~Tenable: ~A~%" (-> obj enable))
(format #t "~T~Tradius: (meters ~m)~%" (-> obj radius))
(format #t "~T~Tworld-sphere: #<sphere @ #x~X>~%" (&-> obj stack 80))
obj
)
;; definition of type part-tracker
(deftype part-tracker (process)
((root basic :offset-assert 112)
(part basic :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
(duration uint64 :offset-assert 136)
(linger-duration uint64 :offset-assert 144)
(start-time uint64 :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time uint64 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
)
:heap-base #x90
:method-count-assert 14
:size-assert #xf8
:flag-assert #xe009000f8
)
;; definition for method 3 of type part-tracker
(defmethod inspect part-tracker ((obj part-tracker))
(let ((t9-0 (method-of-type process inspect)))
(t9-0 obj)
)
(format #t "~T~Troot: ~A~%" (-> obj root))
(format #t "~T~Tpart: ~A~%" (-> obj part))
(format #t "~T~Ttarget: ~D~%" (-> obj target))
(format #t "~T~Tcallback: ~A~%" (-> obj callback))
(format #t "~T~Tlinger-callback: ~A~%" (-> obj linger-callback))
(format #t "~T~Tduration: ~D~%" (-> obj duration))
(format #t "~T~Tlinger-duration: ~D~%" (-> obj linger-duration))
(format #t "~T~Tstart-time: ~D~%" (-> obj start-time))
(format #t "~T~Toffset: ~`vector`P~%" (&-> obj stack 48))
(format #t "~T~Tuserdata: ~A~%" (-> obj userdata))
(format #t "~T~Tuser-time[2] @ #x~X~%" (&-> obj stack 72))
(format #t "~T~Tuser-vector[2] @ #x~X~%" (&-> obj stack 96))
(format #t "~T~Tuser-handle[2] @ #x~X~%" (&-> obj stack 128))
obj
)
;; definition of type camera-tracker
(deftype camera-tracker (process)
((grab-target uint64 :offset 120)
(grab-event basic :offset-assert 128)
(release-event basic :offset-assert 132)
(old-global-mask uint32 :offset-assert 136)
(old-self-mask uint32 :offset-assert 140)
(old-parent-mask uint32 :offset-assert 144)
(look-at-target uint64 :offset-assert 152)
(pov-target uint64 :offset-assert 160)
(work-process uint64 :offset-assert 168)
(anim-process uint64 :offset-assert 176)
(start-time uint64 :offset-assert 184)
(callback basic :offset-assert 192)
(userdata basic :offset-assert 196)
(message basic :offset-assert 200)
(border-value basic :offset-assert 204)
(mask-to-clear uint32 :offset-assert 208)
(script basic :offset-assert 212)
(script-line basic :offset-assert 216)
(script-func basic :offset-assert 220)
)
:heap-base #x70
:method-count-assert 15
:size-assert #xe0
:flag-assert #xf007000e0
(:methods
(dummy-14 () none 14)
)
)
;; definition for method 3 of type camera-tracker
(defmethod inspect camera-tracker ((obj camera-tracker))
(let ((t9-0 (method-of-type process inspect)))
(t9-0 obj)
)
(format #t "~T~Tname: ~A~%" (-> obj name))
(format #t "~T~Tgrab-target: ~D~%" (-> obj grab-target))
(format #t "~T~Tgrab-event: ~A~%" (-> obj grab-event))
(format #t "~T~Trelease-event: ~A~%" (-> obj release-event))
(format #t "~T~Told-global-mask: ~D~%" (-> obj old-global-mask))
(format #t "~T~Told-self-mask: ~D~%" (-> obj old-self-mask))
(format #t "~T~Told-parent-mask: ~D~%" (-> obj old-parent-mask))
(format #t "~T~Tlook-at-target: ~D~%" (-> obj look-at-target))
(format #t "~T~Tpov-target: ~D~%" (-> obj pov-target))
(format #t "~T~Twork-process: ~D~%" (-> obj work-process))
(format #t "~T~Tanim-process: ~D~%" (-> obj anim-process))
(format #t "~T~Tstart-time: ~D~%" (-> obj start-time))
(format #t "~T~Tcallback: ~A~%" (-> obj callback))
(format #t "~T~Tuserdata: ~A~%" (-> obj userdata))
(format #t "~T~Tmessage: ~A~%" (-> obj message))
(format #t "~T~Tborder-value: ~A~%" (-> obj border-value))
(format #t "~T~Tmask-to-clear: ~D~%" (-> obj mask-to-clear))
(format #t "~T~Tscript: ~A~%" (-> obj script))
(format #t "~T~Tscript-line: ~A~%" (-> obj script-line))
(format #t "~T~Tscript-func: ~A~%" (-> obj script-func))
obj
)
;; definition of type touch-tracker
(deftype touch-tracker (process-drawable)
((duration uint64 :offset-assert 176)
(target uint64 :offset-assert 184)
(event basic :offset-assert 192)
(run-function basic :offset-assert 196)
(callback basic :offset-assert 200)
(event-mode basic :offset-assert 204)
)
:heap-base #x60
:method-count-assert 20
:size-assert #xd0
:flag-assert #x14006000d0
)
;; definition for method 3 of type touch-tracker
(defmethod inspect touch-tracker ((obj touch-tracker))
(let ((t9-0 (method-of-type process-drawable inspect)))
(t9-0 obj)
)
(format #t "~T~Tduration: ~D~%" (-> obj duration))
(format #t "~T~Ttarget: ~D~%" (-> obj target))
(format #t "~T~Tevent: ~A~%" (-> obj event))
(format #t "~T~Trun-function: ~A~%" (-> obj run-function))
(format #t "~T~Tcallback: ~A~%" (-> obj callback))
(format #t "~T~Tevent-mode: ~A~%" (-> obj event-mode))
obj
)
;; definition of type swingpole
(deftype swingpole (process)
((root basic :offset-assert 112)
(dir vector :inline :offset-assert 128)
(range float :offset-assert 144)
(edge-length float :offset-assert 148)
)
:heap-base #x30
:method-count-assert 14
:size-assert #x98
:flag-assert #xe00300098
)
;; definition for method 3 of type swingpole
(defmethod inspect swingpole ((obj swingpole))
(let ((t9-0 (method-of-type process inspect)))
(t9-0 obj)
)
(format #t "~T~Troot: ~A~%" (-> obj root))
(format #t "~T~Tdir: ~`vector`P~%" (&-> obj stack 16))
(format #t "~T~Trange: (meters ~m)~%" (-> obj range))
(format #t "~T~Tedge-length: (meters ~m)~%" (-> obj edge-length))
obj
)
;; definition of type gui-query
(deftype gui-query (structure)
((x-position int32 :offset-assert 0)
(y-position int32 :offset-assert 4)
(message basic :offset-assert 8)
(decision basic :offset-assert 12)
(only-allow-cancel basic :offset-assert 16)
(no-msg basic :offset-assert 20)
(message-space int32 :offset-assert 24)
)
:pack-me
:method-count-assert 11
:size-assert #x1c
:flag-assert #xb0000001c
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
)
)
;; definition for method 3 of type gui-query
(defmethod inspect gui-query ((obj gui-query))
(format #t "[~8x] ~A~%" obj 'gui-query)
(format #t "~Tx-position: ~D~%" (-> obj x-position))
(format #t "~Ty-position: ~D~%" (-> obj y-position))
(format #t "~Tmessage: ~A~%" (-> obj message))
(format #t "~Tdecision: ~A~%" (-> obj decision))
(format #t "~Tonly-allow-cancel: ~A~%" (-> obj only-allow-cancel))
(format #t "~Tno-msg: ~A~%" (-> obj no-msg))
(format #t "~Tmessage-space: ~D~%" (-> obj message-space))
obj
)
;; definition of type othercam
(deftype othercam (process)
((hand uint64 :offset-assert 112)
(old-global-mask uint32 :offset-assert 120)
(mask-to-clear uint32 :offset-assert 124)
(cam-joint-index int32 :offset-assert 128)
(old-pos vector :inline :offset-assert 144)
(old-mat-z vector :inline :offset-assert 160)
(had-valid-frame basic :offset-assert 176)
(border-value basic :offset-assert 180)
(die? basic :offset-assert 184)
(survive-anim-end? basic :offset-assert 188)
(spooling? basic :offset-assert 192)
)
:heap-base #x60
:method-count-assert 14
:size-assert #xc4
:flag-assert #xe006000c4
)
;; definition for method 3 of type othercam
(defmethod inspect othercam ((obj othercam))
(let ((t9-0 (method-of-type process inspect)))
(t9-0 obj)
)
(format #t "~T~Thand: ~D~%" (-> obj hand))
(format #t "~T~Told-global-mask: ~D~%" (-> obj old-global-mask))
(format #t "~T~Tmask-to-clear: ~D~%" (-> obj mask-to-clear))
(format #t "~T~Tcam-joint-index: ~D~%" (-> obj cam-joint-index))
(format #t "~T~Told-pos: #<vector @ #x~X>~%" (&-> obj stack 32))
(format #t "~T~Told-mat-z: #<vector @ #x~X>~%" (&-> obj stack 48))
(format #t "~T~Thad-valid-frame: ~A~%" (-> obj had-valid-frame))
(format #t "~T~Tborder-value: ~A~%" (-> obj border-value))
(format #t "~T~Tdie?: ~A~%" (-> obj die?))
(format #t "~T~Tsurvive-anim-end?: ~A~%" (-> obj survive-anim-end?))
(format #t "~T~Tspooling?: ~A~%" (-> obj spooling?))
obj
)
;; definition of type process-hidden
(deftype process-hidden (process)
()
:method-count-assert 15
:size-assert #x70
:flag-assert #xf00000070
(:methods
(dummy-14 () none 14)
)
)
;; definition for method 3 of type process-hidden
(defmethod inspect process-hidden ((obj process-hidden))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tname: ~A~%" (-> obj name))
(format #t "~Tmask: ~D~%" (-> obj mask))
(format #t "~Tparent: #x~X~%" (-> obj parent))
(format #t "~Tbrother: #x~X~%" (-> obj brother))
(format #t "~Tchild: #x~X~%" (-> obj child))
(format #t "~Tppointer: #x~X~%" (-> obj ppointer))
(format #t "~Tself: ~A~%" (-> obj self))
(format #t "~Tpool: ~A~%" (-> obj pool))
(format #t "~Tstatus: ~A~%" (-> obj status))
(format #t "~Tpid: ~D~%" (-> obj pid))
(format #t "~Tmain-thread: ~A~%" (-> obj main-thread))
(format #t "~Ttop-thread: ~A~%" (-> obj top-thread))
(format #t "~Tentity: ~A~%" (-> obj entity))
(format #t "~Tstate: ~A~%" (-> obj state))
(format #t "~Ttrans-hook: ~A~%" (-> obj trans-hook))
(format #t "~Tpost-hook: ~A~%" (-> obj post-hook))
(format #t "~Tevent-hook: ~A~%" (-> obj event-hook))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tnext-state: ~A~%" (-> obj next-state))
(format #t "~Theap-base: #x~X~%" (-> obj heap-base))
(format #t "~Theap-top: #x~X~%" (-> obj heap-top))
(format #t "~Theap-cur: #x~X~%" (-> obj heap-cur))
(format #t "~Tstack-frame-top: ~A~%" (-> obj stack-frame-top))
(format #t "~Theap: #<kheap @ #x~X>~%" (&-> obj heap-base))
(format #t "~Tconnection-list: ~`'connectable`P~%" (-> obj connection-list))
(format #t "~Tstack[0] @ #x~X~%" (-> obj stack))
obj
)
;; failed to figure out what this is:
(let ((v0-9 0))
)
@@ -23,7 +23,7 @@
(format #t "~Tvertex-skip: ~D~%" (-> obj vertex-skip))
(format #t "~Tvertex-count: ~D~%" (-> obj vertex-count))
(format #t "~Tcurrent-loc: ~D~%" (-> obj current-loc))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 20))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj _data 16))
obj
)
@@ -359,7 +359,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -405,4 +405,3 @@
;; failed to figure out what this is:
(let ((v0-14 0))
)
@@ -542,7 +542,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -675,7 +675,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
obj
)
@@ -453,10 +453,9 @@
;; definition of type inline-array-class
(deftype inline-array-class (basic)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(data uint8 :dynamic :offset-assert 12)
(_pad uint8 4 :offset-assert 12)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(_data uint8 :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10