eliminate watch view fill kind; extend rtti & eval type system with 'external' pointers, for e.g. meta-space vaddr u64s pointing into an address space; begin sketching out paths for mutational rows in watch collections, use to add 'add target' fastpath in targets collection evaluations

This commit is contained in:
Ryan Fleury
2024-09-23 10:57:43 -07:00
parent ebaad35813
commit f728614e0b
13 changed files with 873 additions and 819 deletions
+18 -4
View File
@@ -44,7 +44,8 @@ typed_data_rebase_ptrs(Type *type, String8 data, void *base_ptr)
switch(t->type->kind)
{
default:{}break;
case TypeKind_Ptr:
case TypeKind_Ptr:
if(!t->type->is_external)
{
*(U64 *)t->ptr = ((U64)(*(U8 **)t->ptr - (U8 *)base_ptr));
}break;
@@ -106,7 +107,7 @@ serialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerialize
str8_serial_push_string(scratch.arena, &strings, str8(t->src, t->type->size*t->count));
}break;
//- rjf: pointers -> try to interpret/understand pointer & read/write, otherwise skip
//- rjf: pointers -> try to interpret/understand pointer & read/write, otherwise just write as plain data
case TypeKind_Ptr:
{
// rjf: unpack info about this pointer
@@ -172,7 +173,13 @@ serialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerialize
task->containing_type = t->containing_type;
task->containing_ptr = t->containing_ptr;
SLLQueuePush(first_task, last_task, task);
}
}
// rjf: catch-all: write pointer value
else
{
str8_serial_push_string(scratch.arena, &strings, str8(t->src, t->type->size*t->count));
}
}break;
//- rjf: arrays -> descend to underlying type, + count
@@ -338,7 +345,14 @@ deserialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSeriali
task->containing_type = t->containing_type;
task->containing_ptr = t->containing_ptr;
SLLQueuePush(first_task, last_task, task);
}
}
// rjf: catch-all: read pointer value
else
{
MemoryCopy(t->dst, t_src, t->type->size*t->count);
read_off += t->type->size*t->count;
}
}break;
//- rjf: arrays -> descend to underlying type, + count
+2 -1
View File
@@ -100,7 +100,7 @@ TypeKind;
typedef U32 MemberFlags;
enum
{
MemberFlag_DoNotSerialize = (1<<0),
MemberFlag_DoNotSerialize = (1<<0),
};
typedef struct Type Type;
@@ -123,6 +123,7 @@ struct Type
String8 count_delimiter_name; // gathered from surrounding members, turns *->[1] into *->[N]
U64 count;
Member *members;
B32 is_external;
};
////////////////////////////////