From ddb52dbce5756bbf7b0269a9fac9003dd141bf22 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Fri, 27 May 2022 14:31:07 +1000 Subject: [PATCH] Assemble classes --- src/vstc/assemble.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/vstc/assemble.rs b/src/vstc/assemble.rs index 736cad2..b690306 100644 --- a/src/vstc/assemble.rs +++ b/src/vstc/assemble.rs @@ -167,6 +167,8 @@ impl<'a> Assembler<'a> { if c == 'f' { self.assemble_function(); + } else if c == 'c' { + self.assemble_class(); } else { self.assemble_value(); } @@ -445,6 +447,23 @@ impl<'a> Assembler<'a> { self.fn_data.labels_map.resolve(&mut self.output); } + fn assemble_class(&mut self) { + self.parse_exact("class("); + self.output.push(ValueType::Class as u8); + self.parse_optional_whitespace(); + + self.assemble_value(); + self.parse_optional_whitespace(); + + self.parse_exact(","); + self.parse_optional_whitespace(); + + self.assemble_value(); + self.parse_optional_whitespace(); + + self.parse_exact(")"); + } + fn assemble_instruction(&mut self) { let instr = self.parse_instruction_word(); @@ -897,6 +916,7 @@ enum ValueType { Register = 0x0e, External = 0x0f, Builtin = 0x10, + Class = 0x11, } fn advance_chars(iter: &mut std::iter::Peekable, len: usize) {