Number fields within procedures with a depth-first numbering system

This commit is contained in:
gingerBill
2025-02-19 10:59:05 +00:00
parent 827cd45f04
commit 0bac34eec8
3 changed files with 12 additions and 1 deletions
+4
View File
@@ -358,6 +358,10 @@ gb_internal void check_open_scope(CheckerContext *c, Ast *node) {
scope->flags |= ScopeFlag_Type;
break;
}
if (c->decl && c->decl->proc_lit) {
// Number the scopes within a procedure body depth-first
scope->index = c->decl->scope_index++;
}
c->scope = scope;
c->state_flags |= StateFlag_bounds_check;
}
+4
View File
@@ -229,6 +229,8 @@ struct DeclInfo {
Array<BlockLabel> labels;
i32 scope_index;
Array<VariadicReuseData> variadic_reuses;
i64 variadic_reuse_max_bytes;
i64 variadic_reuse_max_align;
@@ -273,6 +275,8 @@ struct Scope {
std::atomic<Scope *> next;
std::atomic<Scope *> head_child;
i32 index; // within a procedure
RwMutex mutex;
StringMap<Entity *> elements;
PtrSet<Scope *> imported;
+4 -1
View File
@@ -464,7 +464,10 @@ gb_internal void write_canonical_entity_name(TypeWriter *w, Entity *e) {
if (s->decl_info != nullptr && s->decl_info->entity) {
Entity *parent = s->decl_info->entity;
write_canonical_parent_prefix(w, parent);
type_writer_append_fmt(w, CANONICAL_TYPE_SEPARATOR "[%d]", e->token.pos.offset);
if (e->scope->index > 0) {
type_writer_append_fmt(w, CANONICAL_TYPE_SEPARATOR "[%d]", e->scope->index);
}
// type_writer_append_fmt(w, CANONICAL_TYPE_SEPARATOR "[%d]", e->token.pos.offset);
goto write_base_name;
} else if ((s->flags & ScopeFlag_File) && s->file != nullptr) {