Skip to content

Commit d148676

Browse files
committed
fix ordering of symbols in flat namespace
1 parent cb9f965 commit d148676

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

src/codegen/codegen.zig

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,11 @@ fn renderMetaModel(gpa: std.mem.Allocator, meta_model: *MetaModel) error{ OutOfM
10151015
}
10161016

10171017
{
1018+
var ordered_symbol_map: std.array_hash_map.String(void) = .empty;
1019+
defer ordered_symbol_map.deinit(gpa);
1020+
try ordered_symbol_map.ensureTotalCapacity(gpa, config.symbols.len);
1021+
for (config.symbols) |symbol| ordered_symbol_map.putAssumeCapacityNoClobber(symbol[0], {});
1022+
10181023
var original_symbol_names: std.array_hash_map.String(void) = .empty;
10191024
defer original_symbol_names.deinit(gpa);
10201025
try original_symbol_names.ensureTotalCapacity(gpa, meta_model.structures.len + meta_model.enumerations.len + meta_model.typeAliases.len);
@@ -1024,12 +1029,13 @@ fn renderMetaModel(gpa: std.mem.Allocator, meta_model: *MetaModel) error{ OutOfM
10241029

10251030
original_symbol_names.sort(struct {
10261031
names: []const []const u8,
1032+
ordered_symbol_map: std.array_hash_map.String(void),
10271033
pub fn lessThan(ctx: @This(), a_index: usize, b_index: usize) bool {
10281034
const a_name = ctx.names[a_index];
10291035
const b_name = ctx.names[b_index];
1030-
return symbol_map.getIndex(a_name).? < symbol_map.getIndex(b_name).?;
1036+
return ctx.ordered_symbol_map.getIndex(a_name).? < ctx.ordered_symbol_map.getIndex(b_name).?;
10311037
}
1032-
}{ .names = original_symbol_names.keys() });
1038+
}{ .names = original_symbol_names.keys(), .ordered_symbol_map = ordered_symbol_map });
10331039

10341040
try renderer.w.writeAll(
10351041
\\/// A flat namespace that aliases all LSP types under their original name from the official specification.

0 commit comments

Comments
 (0)