shrink tokenkind

This commit is contained in:
caandt 2025-05-30 00:01:15 -05:00
parent 19bdba61e2
commit e285a6338e

View file

@ -1,7 +1,16 @@
const std = @import("std");
pub const TokenKind = enum(u24) {
name,
const op_chars = "!@$%^&*()-+=~[]{}|:<>,.?/";
const op_map = l: {
var m = [_]u8{0}**256;
for (op_chars, 0..) |c, i| {
m[c] = i;
}
break :l m;
};
pub const TokenKind = enum(u16) {
name = 1 << 15,
number,
eof,
semicolon,
@ -43,10 +52,10 @@ fn is_op(c: u8) bool {
}
pub fn op_kind(op: []const u8) TokenKind {
const v: u24 = switch (op.len) {
1 => @intCast(op[0]),
2 => @intCast(@as(u16, @bitCast(op[0..2].*))),
3 => @bitCast(op[0..3].*),
const v: u16 = switch (op.len) {
1 => op_map[op[0]],
2 => op_map[op[0]] + (@as(u16, op_map[op[1]]) << 5),
3 => op_map[op[0]] + (@as(u16, op_map[op[1]]) << 5) + (@as(u16, op_map[op[2]]) << 10),
else => @intFromEnum(TokenKind.invalid),
};
return @enumFromInt(v);