From baa1a68b53f36f41271142b24887ba44c137be3a Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Mon, 15 Jun 2020 13:50:07 +0200 Subject: [PATCH] Remove declarations in an order-preserving way --- generator/generator.zig | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/generator/generator.zig b/generator/generator.zig index 558f4e6..2a5280b 100644 --- a/generator/generator.zig +++ b/generator/generator.zig @@ -132,22 +132,22 @@ const DeclarationResolver = struct { } } - // Swap-remove all declarations that are not required. - // Some declarations may exist in `self.declarations` that do not exit in - // `self.registry.decls`, these are mostly macros and other stuff not parsed. - var i: usize = 0; - var count = self.registry.decls.len; - while (i < count) { - const decl = self.registry.decls[i]; + // Remove all declarations that are not required. + // Some declarations may exist in `self.declarations` that do not exit in + // `self.registry.decls`, these are mostly macros and other stuff not pa + var read_index: usize = 0; + var write_index: usize = 0; + while (read_index < self.registry.decls.len) { + const decl = self.registry.decls[read_index]; if (self.declarations.contains(decl.name)) { - i += 1; - } else { - count -= 1; - self.registry.decls[i] = self.registry.decls[count]; + self.registry.decls[write_index] = decl; + write_index += 1; } + + read_index += 1; } - self.registry.decls = self.reg_arena.shrink(self.registry.decls, count); + self.registry.decls = self.reg_arena.shrink(self.registry.decls, write_index); } };