make all necessary structs public

pull/2463/head^2
Alexander Medvednikov 2019-10-24 12:47:21 +03:00
parent dce3275df4
commit 4a88a28a3b
9 changed files with 34 additions and 26 deletions

View File

@ -9,9 +9,9 @@ Example usage of this module:
import benchmark import benchmark
mut bmark := benchmark.new_benchmark() mut bmark := benchmark.new_benchmark()
// by default the benchmark will be verbose, i.e. it will include timing information // by default the benchmark will be verbose, i.e. it will include timing information
// if you want it to be silent, set bmark.verbose = false // if you want it to be silent, set bmark.verbose = false
for { for {
bmark.step() // call this when you want to advance the benchmark. bmark.step() // call this when you want to advance the benchmark.
// The timing info in bmark.step_message will be measured starting from the last call to bmark.step // The timing info in bmark.step_message will be measured starting from the last call to bmark.step
.... ....
@ -26,7 +26,7 @@ println( bmark.total_message('remarks about the benchmark') )
``` ```
*/ */
struct Benchmark{ pub struct Benchmark{
pub mut: pub mut:
bench_start_time i64 bench_start_time i64
bench_end_time i64 bench_end_time i64

View File

@ -6,7 +6,7 @@ module builtin
import strings import strings
struct map { pub struct map {
element_size int element_size int
root &mapnode root &mapnode
pub: pub:

View File

@ -43,7 +43,7 @@ NB: A V string should be/is immutable from the point of view of
import strconv import strconv
struct string { pub struct string {
//mut: //mut:
//hash_cache int //hash_cache int
pub: pub:
@ -51,7 +51,7 @@ pub:
len int // the length of the .str field, excluding the ending 0 byte. It is always equal to strlen(.str). len int // the length of the .str field, excluding the ending 0 byte. It is always equal to strlen(.str).
} }
struct ustring { pub struct ustring {
pub: pub:
s string s string
runes []int runes []int

View File

@ -1100,6 +1100,9 @@ fn (p mut Parser) get_type() string {
p.error('unknown type `$typ`') p.error('unknown type `$typ`')
} }
} }
else if !t.is_public && t.mod != p.mod && t.name != '' {
p.warn('type `$t.name` is private')
}
} }
if typ == 'void' { if typ == 'void' {
p.error('unknown type `$typ`') p.error('unknown type `$typ`')
@ -3179,6 +3182,9 @@ fn (p mut Parser) array_init() string {
fn (p mut Parser) struct_init(typ string) string { fn (p mut Parser) struct_init(typ string) string {
p.is_struct_init = true p.is_struct_init = true
t := p.table.find_type(typ) t := p.table.find_type(typ)
if !t.is_public && t.mod != p.mod {
p.warn('type `$t.name` is private')
}
if p.gen_struct_init(typ, t) { return typ } if p.gen_struct_init(typ, t) { return typ }
p.scanner.fmt_out.cut(typ.len) p.scanner.fmt_out.cut(typ.len)
ptr := typ.contains('*') ptr := typ.contains('*')
@ -4120,7 +4126,7 @@ fn (p mut Parser) js_decode() string {
p.gen('json__jsdecode_$typ($cjson_tmp, &$tmp); cJSON_Delete($cjson_tmp);') p.gen('json__jsdecode_$typ($cjson_tmp, &$tmp); cJSON_Delete($cjson_tmp);')
opt_type := 'Option_$typ' opt_type := 'Option_$typ'
p.cgen.typedefs << 'typedef Option $opt_type;' p.cgen.typedefs << 'typedef Option $opt_type;'
p.table.register_type(opt_type) p.table.register_builtin(opt_type)
return opt_type return opt_type
} }
else if op == 'encode' { else if op == 'encode' {

View File

@ -180,7 +180,7 @@ for (int i = 0; i < ${qprefix}rows.len; i++) {
} else if query_one { } else if query_one {
opt_type := 'Option_$table_name' opt_type := 'Option_$table_name'
p.cgen.typedefs << 'typedef Option $opt_type;' p.cgen.typedefs << 'typedef Option $opt_type;'
p.table.register_type( opt_type ) p.table.register_builtin( opt_type )
return opt_type return opt_type
} else { } else {
p.register_array('array_$table_name') p.register_array('array_$table_name')

View File

@ -234,8 +234,8 @@ fn new_table(obfuscate bool) &Table {
mut t := &Table { mut t := &Table {
obfuscate: obfuscate obfuscate: obfuscate
} }
t.register_type('int') t.register_builtin('int')
t.register_type('size_t') t.register_builtin('size_t')
t.register_type_with_parent('i8', 'int') t.register_type_with_parent('i8', 'int')
t.register_type_with_parent('byte', 'int') t.register_type_with_parent('byte', 'int')
t.register_type_with_parent('char', 'int') // for C functions only, to avoid warnings t.register_type_with_parent('char', 'int') // for C functions only, to avoid warnings
@ -244,17 +244,17 @@ fn new_table(obfuscate bool) &Table {
t.register_type_with_parent('u32', 'int') t.register_type_with_parent('u32', 'int')
t.register_type_with_parent('i64', 'int') t.register_type_with_parent('i64', 'int')
t.register_type_with_parent('u64', 'u32') t.register_type_with_parent('u64', 'u32')
t.register_type('byteptr') t.register_builtin('byteptr')
t.register_type('intptr') t.register_builtin('intptr')
t.register_type('f32') t.register_builtin('f32')
t.register_type('f64') t.register_builtin('f64')
t.register_type('rune') t.register_builtin('rune')
t.register_type('bool') t.register_builtin('bool')
t.register_type('void') t.register_builtin('void')
t.register_type('voidptr') t.register_builtin('voidptr')
t.register_type('va_list') t.register_builtin('va_list')
for c in reserved_type_param_names { for c in reserved_type_param_names {
t.register_type(c) t.register_builtin(c)
} }
t.register_const('stdin', 'int', 'main', true) t.register_const('stdin', 'int', 'main', true)
t.register_const('stdout', 'int', 'main', true) t.register_const('stdout', 'int', 'main', true)
@ -390,14 +390,14 @@ fn (t &Table) known_const(name string) bool {
return true return true
} }
fn (t mut Table) register_type(typ string) { fn (t mut Table) register_builtin(typ string) {
if typ.len == 0 { if typ.len == 0 {
return return
} }
if typ in t.typesmap { if typ in t.typesmap {
return return
} }
t.typesmap[typ] = Type{name:typ} t.typesmap[typ] = Type{name:typ, is_public:true}
} }
fn (p mut Parser) register_type_with_parent(strtyp, parent string) { fn (p mut Parser) register_type_with_parent(strtyp, parent string) {
@ -405,6 +405,7 @@ fn (p mut Parser) register_type_with_parent(strtyp, parent string) {
name: strtyp name: strtyp
parent: parent parent: parent
mod: p.mod mod: p.mod
is_public: true
} }
p.table.register_type2(typ) p.table.register_type2(typ)
} }
@ -416,6 +417,7 @@ fn (t mut Table) register_type_with_parent(typ, parent string) {
t.typesmap[typ] = Type { t.typesmap[typ] = Type {
name: typ name: typ
parent: parent parent: parent
is_public: true
//mod: mod //mod: mod
} }
} }

View File

@ -35,7 +35,7 @@ struct C.FILE {
} }
struct File { pub struct File {
cfile &FILE cfile &FILE
} }

View File

@ -4,7 +4,7 @@
module strings module strings
struct Builder { pub struct Builder {
mut: mut:
buf []byte buf []byte
pub: pub:

View File

@ -4,7 +4,7 @@
module strings module strings
struct Builder { pub struct Builder {
mut: mut:
buf []byte buf []byte
pub: pub: