mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
v: reduce the memory usage of the compiler (analysed with heaptrack)
This commit is contained in:
parent
84f9789e72
commit
2eafea6308
@ -742,7 +742,7 @@ pub fn (s string) index(p string) ?int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// index_kmp does KMP search.
|
// index_kmp does KMP search.
|
||||||
[manualfree]
|
[direct_array_access; manualfree]
|
||||||
fn (s string) index_kmp(p string) int {
|
fn (s string) index_kmp(p string) int {
|
||||||
if p.len > s.len {
|
if p.len > s.len {
|
||||||
return -1
|
return -1
|
||||||
|
@ -14,8 +14,8 @@ fn nr_next(prev u32) u32 {
|
|||||||
// time_seed_array returns the required number of u32s generated from system time.
|
// time_seed_array returns the required number of u32s generated from system time.
|
||||||
[inline]
|
[inline]
|
||||||
pub fn time_seed_array(count int) []u32 {
|
pub fn time_seed_array(count int) []u32 {
|
||||||
ctime := time.now()
|
ctime := time.sys_mono_now()
|
||||||
mut seed := u32(ctime.unix_time() ^ ctime.microsecond)
|
mut seed := u32(ctime >> 32 ^ (ctime & 0x0000_0000_FFFF_FFFF))
|
||||||
mut seed_data := []u32{cap: count}
|
mut seed_data := []u32{cap: count}
|
||||||
for _ in 0 .. count {
|
for _ in 0 .. count {
|
||||||
seed = nr_next(seed)
|
seed = nr_next(seed)
|
||||||
|
@ -764,12 +764,12 @@ pub fn (mut t Table) find_or_register_thread(return_type Type) int {
|
|||||||
|
|
||||||
pub fn (mut t Table) find_or_register_array(elem_type Type) int {
|
pub fn (mut t Table) find_or_register_array(elem_type Type) int {
|
||||||
name := t.array_name(elem_type)
|
name := t.array_name(elem_type)
|
||||||
cname := t.array_cname(elem_type)
|
|
||||||
// existing
|
// existing
|
||||||
existing_idx := t.type_idxs[name]
|
existing_idx := t.type_idxs[name]
|
||||||
if existing_idx > 0 {
|
if existing_idx > 0 {
|
||||||
return existing_idx
|
return existing_idx
|
||||||
}
|
}
|
||||||
|
cname := t.array_cname(elem_type)
|
||||||
// register
|
// register
|
||||||
array_type_ := TypeSymbol{
|
array_type_ := TypeSymbol{
|
||||||
parent_idx: array_type_idx
|
parent_idx: array_type_idx
|
||||||
|
@ -5231,10 +5231,16 @@ fn (mut g Gen) struct_init(struct_init ast.StructInit) {
|
|||||||
}
|
}
|
||||||
// g.zero_struct_fields(info, inited_fields)
|
// g.zero_struct_fields(info, inited_fields)
|
||||||
// nr_fields = info.fields.len
|
// nr_fields = info.fields.len
|
||||||
for field in info.fields {
|
for mut field in info.fields {
|
||||||
if mut sym.info is ast.Struct {
|
if mut sym.info is ast.Struct {
|
||||||
equal_fields := sym.info.fields.filter(it.name == field.name)
|
mut found_equal_fields := 0
|
||||||
if equal_fields.len == 0 {
|
for mut sifield in sym.info.fields {
|
||||||
|
if sifield.name == field.name {
|
||||||
|
found_equal_fields++
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if found_equal_fields == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user