parser: small optimizations
parent
794cd561cd
commit
76a89c832e
|
@ -511,7 +511,8 @@ fn (p mut Parser) struct_decl() {
|
||||||
if !is_c && !p.builtin_mod && p.mod != 'main' {
|
if !is_c && !p.builtin_mod && p.mod != 'main' {
|
||||||
name = p.prepend_mod(name)
|
name = p.prepend_mod(name)
|
||||||
}
|
}
|
||||||
if p.pass == .decl && p.table.known_type(name) {
|
mut typ := p.table.find_type(name)
|
||||||
|
if p.pass == .decl && p.table.known_type_fast(typ) {
|
||||||
p.error('`$name` redeclared')
|
p.error('`$name` redeclared')
|
||||||
}
|
}
|
||||||
if !is_c {
|
if !is_c {
|
||||||
|
@ -519,7 +520,6 @@ fn (p mut Parser) struct_decl() {
|
||||||
p.gen_typedef('typedef $kind $name $name;')
|
p.gen_typedef('typedef $kind $name $name;')
|
||||||
}
|
}
|
||||||
// Register the type
|
// Register the type
|
||||||
mut typ := p.table.find_type(name)
|
|
||||||
mut is_ph := false
|
mut is_ph := false
|
||||||
if typ.is_placeholder {
|
if typ.is_placeholder {
|
||||||
// Update the placeholder
|
// Update the placeholder
|
||||||
|
@ -1472,8 +1472,8 @@ fn (p mut Parser) name_expr() string {
|
||||||
}
|
}
|
||||||
// //////////////////////////
|
// //////////////////////////
|
||||||
// module ?
|
// module ?
|
||||||
// Allow shadowing (gg = gg.newcontext(); gg.draw_triangle())
|
// (Allow shadowing `gg = gg.newcontext(); gg.draw_triangle();` )
|
||||||
if ((name == p.mod && p.table.known_mod(name)) || p.import_table.known_alias(name))
|
if p.peek() == .dot && ((name == p.mod && p.table.known_mod(name)) || p.import_table.known_alias(name))
|
||||||
&& !p.cur_fn.known_var(name) && !is_c {
|
&& !p.cur_fn.known_var(name) && !is_c {
|
||||||
mut mod := name
|
mut mod := name
|
||||||
// must be aliased module
|
// must be aliased module
|
||||||
|
|
|
@ -320,6 +320,10 @@ fn (table &Table) known_type(typ_ string) bool {
|
||||||
return t.name.len > 0 && !t.is_placeholder
|
return t.name.len > 0 && !t.is_placeholder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (table &Table) known_type_fast(t &Type) bool {
|
||||||
|
return t.name.len > 0 && !t.is_placeholder
|
||||||
|
}
|
||||||
|
|
||||||
fn (t &Table) find_fn(name string) Fn {
|
fn (t &Table) find_fn(name string) Fn {
|
||||||
f := t.fns[name]
|
f := t.fns[name]
|
||||||
if !isnil(f.name.str) {
|
if !isnil(f.name.str) {
|
||||||
|
@ -345,7 +349,7 @@ fn (t mut Table) register_type(typ string) {
|
||||||
}
|
}
|
||||||
if typ in t.typesmap {
|
if typ in t.typesmap {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
t.typesmap[typ] = Type{name:typ}
|
t.typesmap[typ] = Type{name:typ}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -684,6 +688,7 @@ fn (t &Table) main_exists() bool {
|
||||||
|
|
||||||
// TODO use `?Var`
|
// TODO use `?Var`
|
||||||
fn (t &Table) find_const(name string) Var {
|
fn (t &Table) find_const(name string) Var {
|
||||||
|
//println('find const l=$t.consts.len')
|
||||||
for c in t.consts {
|
for c in t.consts {
|
||||||
if c.name == name {
|
if c.name == name {
|
||||||
return c
|
return c
|
||||||
|
|
|
@ -58,7 +58,7 @@ fn (m mut map) insert(n mut mapnode, key string, val voidptr) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if n.key > key {
|
if n.key > key {
|
||||||
if isnil(n.left) {
|
if n.left == 0 {
|
||||||
n.left = new_node(key, val, m.element_size)
|
n.left = new_node(key, val, m.element_size)
|
||||||
m.size++
|
m.size++
|
||||||
} else {
|
} else {
|
||||||
|
@ -66,7 +66,7 @@ fn (m mut map) insert(n mut mapnode, key string, val voidptr) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if isnil(n.right) {
|
if n.right == 0 {
|
||||||
n.right = new_node(key, val, m.element_size)
|
n.right = new_node(key, val, m.element_size)
|
||||||
m.size++
|
m.size++
|
||||||
} else {
|
} else {
|
||||||
|
@ -80,14 +80,14 @@ fn (n & mapnode) find(key string, out voidptr, element_size int) bool{
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else if n.key > key {
|
else if n.key > key {
|
||||||
if isnil(n.left) {
|
if n.left == 0 {
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return n.left.find(key, out, element_size)
|
return n.left.find(key, out, element_size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if isnil(n.right) {
|
if n.right == 0 {
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return n.right.find(key, out, element_size)
|
return n.right.find(key, out, element_size)
|
||||||
|
@ -178,7 +178,7 @@ pub fn (m mut map) keys() []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (m map) get(key string, out voidptr) bool {
|
fn (m map) get(key string, out voidptr) bool {
|
||||||
if isnil(m.root) {
|
if m.root == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return m.root.find(key, out, m.element_size)
|
return m.root.find(key, out, m.element_size)
|
||||||
|
|
Loading…
Reference in New Issue