gccrs: Create ForeverStackBase to unify node trees
Introduces ForeverStackBase to decouple node structure from specific ForeverStack instances, enabling shared node memory.
This commit refactors gccrs by introducing ForeverStackBase as a base class for ForeverStack. The Node structure and related members, such as Link, LinkCmp, is_root, is_prelude, is_leaf, and insert_child, are moved to ForeverStackBase. This allows ForeverStack instances to share the same underlying node objects, reducing memory overhead and simplifying the management of nodes across different namespaces. This change is a precursor to unifying node trees across multiple ForeverStack instances.
In Details
The ForeverStack in gccrs uses a tree of Node objects for name resolution. This commit extracts the Node definition and its associated methods (like is_root, is_prelude, is_leaf, insert_child) and other common members (Link, LinkCmp) into a new base class, ForeverStackBase. This allows ForeverStack to inherit these common elements, making the Node type non-templated within ForeverStack itself. The goal is to enable multiple ForeverStack instances to share the same set of Node objects, improving memory efficiency and facilitating handling of nodes originating from…
- gccrs
- The GCC Rust frontend, responsible for parsing, type-checking, and generating code for Rust programs using the GCC compiler infrastructure.
- ForeverStack
- A data structure in gccrs used to represent and manage a stack of resolution scopes during name resolution. It organizes nodes hierarchically to track namespaces, types, and other linguistic constructs.
- ForeverStackBase
- A new base class introduced in gccrs that holds common definitions for nodes and other structures used by ForeverStack, facilitating memory sharing and abstraction.
- Node
- An element within the ForeverStack's tree structure, representing a specific linguistic construct or scope. Nodes are interconnected to form a hierarchical representation of the code's structure.