Skip to content

Commit 8f638e6

Browse files
committed
Add list of ancestors to class struct
1 parent 9ae5091 commit 8f638e6

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

src/ast.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,19 @@ impl Function
324324
#[derive(Default, Clone, Debug)]
325325
pub struct Class
326326
{
327+
// Class name
327328
pub name: String,
328329

329330
// Name of the parent class
330331
pub parent_name: Option<String>,
331332

332-
// TODO: list of ancestors
333+
// List of parent/ancestor classes
334+
// Immediate parent listed first
335+
pub ancestors: Vec<ClassId>,
336+
337+
// Flag to indicate this class has subclasses
338+
// This is used to accelerate instanceof checks
339+
pub subclassed: bool,
333340

334341
// Map of field names to slot indices
335342
pub fields: HashMap<String, usize>,

src/parser.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,6 +1314,8 @@ fn parse_class(input: &mut Lexer, prog: &mut Program, pos: SrcPos) -> Result<(St
13141314
let class_id = prog.reg_class(Class {
13151315
name: class_name.clone(),
13161316
parent_name,
1317+
ancestors: Vec::default(),
1318+
subclassed: false,
13171319
fields: HashMap::default(),
13181320
methods: methods.clone(),
13191321
pos,

0 commit comments

Comments
 (0)