scanner: cut keyword lookups in half
parent
a19aaf2b90
commit
34af7ccba9
|
@ -580,8 +580,8 @@ pub fn (mut s Scanner) scan() token.Token {
|
|||
// tmp hack to detect . in ${}
|
||||
// Check if not .eof to prevent panic
|
||||
next_char := if s.pos + 1 < s.text.len { s.text[s.pos + 1] } else { `\0` }
|
||||
if token.is_key(name) {
|
||||
kind := token.key_to_token(name)
|
||||
kind := token.keywords[name]
|
||||
if kind != .unknown {
|
||||
if kind == .key_fn {
|
||||
s.struct_name = s.ident_struct_name()
|
||||
s.fn_name = s.ident_fn_name()
|
||||
|
|
|
@ -14,6 +14,7 @@ pub:
|
|||
}
|
||||
|
||||
pub enum Kind {
|
||||
unknown
|
||||
eof
|
||||
name // user
|
||||
number // 123
|
||||
|
@ -133,8 +134,8 @@ const (
|
|||
)
|
||||
// build_keys genereates a map with keywords' string values:
|
||||
// Keywords['return'] == .key_return
|
||||
fn build_keys() map[string]int {
|
||||
mut res := map[string]int
|
||||
fn build_keys() map[string]Kind {
|
||||
mut res := map[string]Kind
|
||||
for t in int(Kind.keyword_beg) + 1 .. int(Kind.keyword_end) {
|
||||
key := token_str[t]
|
||||
res[key] = t
|
||||
|
@ -145,6 +146,7 @@ fn build_keys() map[string]int {
|
|||
// TODO remove once we have `enum Kind { name('name') if('if') ... }`
|
||||
fn build_token_str() []string {
|
||||
mut s := [''].repeat(nr_tokens)
|
||||
s[Kind.unknown] = 'unknown'
|
||||
s[Kind.eof] = 'eof'
|
||||
s[Kind.name] = 'name'
|
||||
s[Kind.number] = 'number'
|
||||
|
|
Loading…
Reference in New Issue