shrink tokenkind
This commit is contained in:
parent
19bdba61e2
commit
e285a6338e
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue