v2: small type cleanup
parent
b325320f29
commit
15c288b444
|
@ -6,7 +6,7 @@ import (
|
|||
v.table
|
||||
)
|
||||
|
||||
pub fn (p mut Parser) parse_array_type(nr_muls int) table.Type {
|
||||
pub fn (p mut Parser) parse_array_type() table.Type {
|
||||
p.check(.lsbr)
|
||||
// fixed array
|
||||
if p.tok.kind == .number {
|
||||
|
@ -15,7 +15,7 @@ pub fn (p mut Parser) parse_array_type(nr_muls int) table.Type {
|
|||
p.check(.rsbr)
|
||||
elem_type := p.parse_type()
|
||||
idx := p.table.find_or_register_array_fixed(elem_type, size, 1)
|
||||
return table.new_type_ptr(idx, nr_muls)
|
||||
return table.new_type(idx)
|
||||
}
|
||||
// array
|
||||
p.check(.rsbr)
|
||||
|
@ -27,13 +27,13 @@ pub fn (p mut Parser) parse_array_type(nr_muls int) table.Type {
|
|||
nr_dims++
|
||||
}
|
||||
idx := p.table.find_or_register_array(elem_type, nr_dims)
|
||||
return table.new_type_ptr(idx, nr_muls)
|
||||
return table.new_type(idx)
|
||||
}
|
||||
|
||||
pub fn (p mut Parser) parse_map_type(nr_muls int) table.Type {
|
||||
pub fn (p mut Parser) parse_map_type() table.Type {
|
||||
p.next()
|
||||
if p.tok.kind != .lsbr {
|
||||
return table.new_type(table.map_type_idx)
|
||||
return table.map_type
|
||||
}
|
||||
p.check(.lsbr)
|
||||
key_type := p.parse_type()
|
||||
|
@ -45,7 +45,7 @@ pub fn (p mut Parser) parse_map_type(nr_muls int) table.Type {
|
|||
p.check(.rsbr)
|
||||
value_type := p.parse_type()
|
||||
idx := p.table.find_or_register_map(key_type, value_type)
|
||||
return table.new_type_ptr(idx, nr_muls)
|
||||
return table.new_type(idx)
|
||||
}
|
||||
|
||||
pub fn (p mut Parser) parse_multi_return_type() table.Type {
|
||||
|
@ -94,10 +94,7 @@ pub fn (p mut Parser) parse_type() table.Type {
|
|||
p.next()
|
||||
p.check(.dot)
|
||||
}
|
||||
//if p.tok.kind == .question {
|
||||
// p.next()
|
||||
//}
|
||||
mut typ := p.parse_any_type(nr_muls)
|
||||
mut typ := p.parse_any_type(nr_muls > 0)
|
||||
if is_optional {
|
||||
typ = table.type_to_optional(typ)
|
||||
}
|
||||
|
@ -107,7 +104,7 @@ pub fn (p mut Parser) parse_type() table.Type {
|
|||
return typ
|
||||
}
|
||||
|
||||
pub fn (p mut Parser) parse_any_type(nr_muls int) table.Type {
|
||||
pub fn (p mut Parser) parse_any_type(is_ptr bool) table.Type {
|
||||
mut name := p.tok.lit
|
||||
// `module.Type`
|
||||
if p.peek_tok.kind == .dot {
|
||||
|
@ -133,11 +130,11 @@ pub fn (p mut Parser) parse_any_type(nr_muls int) table.Type {
|
|||
}
|
||||
// array
|
||||
.lsbr {
|
||||
return p.parse_array_type(nr_muls)
|
||||
return p.parse_array_type()
|
||||
}
|
||||
// multiple return
|
||||
.lpar {
|
||||
if nr_muls > 0 {
|
||||
if is_ptr {
|
||||
p.error('parse_type: unexpected `&` before multiple returns')
|
||||
}
|
||||
return p.parse_multi_return_type()
|
||||
|
@ -145,71 +142,71 @@ pub fn (p mut Parser) parse_any_type(nr_muls int) table.Type {
|
|||
else {
|
||||
// no defer
|
||||
if name == 'map' {
|
||||
return p.parse_map_type(nr_muls)
|
||||
return p.parse_map_type()
|
||||
}
|
||||
defer {
|
||||
p.next()
|
||||
}
|
||||
match name {
|
||||
'voidptr' {
|
||||
return table.new_type_ptr(table.voidptr_type_idx, nr_muls)
|
||||
return table.voidptr_type
|
||||
}
|
||||
'byteptr' {
|
||||
return table.new_type_ptr(table.byteptr_type_idx, nr_muls)
|
||||
return table.byteptr_type
|
||||
}
|
||||
'charptr' {
|
||||
return table.new_type_ptr(table.charptr_type_idx, nr_muls)
|
||||
return table.charptr_type
|
||||
}
|
||||
'i8' {
|
||||
return table.new_type_ptr(table.i8_type_idx, nr_muls)
|
||||
return table.i8_type
|
||||
}
|
||||
'i16' {
|
||||
return table.new_type_ptr(table.i16_type_idx, nr_muls)
|
||||
return table.i16_type
|
||||
}
|
||||
'int' {
|
||||
return table.new_type_ptr(table.int_type_idx, nr_muls)
|
||||
return table.int_type
|
||||
}
|
||||
'i64' {
|
||||
return table.new_type_ptr(table.i64_type_idx, nr_muls)
|
||||
return table.i64_type
|
||||
}
|
||||
'byte' {
|
||||
return table.new_type_ptr(table.byte_type_idx, nr_muls)
|
||||
return table.byte_type
|
||||
}
|
||||
'u16' {
|
||||
return table.new_type_ptr(table.u16_type_idx, nr_muls)
|
||||
return table.u16_type
|
||||
}
|
||||
'u32' {
|
||||
return table.new_type_ptr(table.u32_type_idx, nr_muls)
|
||||
return table.u32_type
|
||||
}
|
||||
'u64' {
|
||||
return table.new_type_ptr(table.u64_type_idx, nr_muls)
|
||||
return table.u64_type
|
||||
}
|
||||
'f32' {
|
||||
return table.new_type_ptr(table.f32_type_idx, nr_muls)
|
||||
return table.f32_type
|
||||
}
|
||||
'f64' {
|
||||
return table.new_type_ptr(table.f64_type_idx, nr_muls)
|
||||
return table.f64_type
|
||||
}
|
||||
'string' {
|
||||
return table.new_type_ptr(table.string_type_idx, nr_muls)
|
||||
return table.string_type
|
||||
}
|
||||
'char' {
|
||||
return table.new_type_ptr(table.char_type_idx, nr_muls)
|
||||
return table.char_type
|
||||
}
|
||||
'bool' {
|
||||
return table.new_type_ptr(table.bool_type_idx, nr_muls)
|
||||
return table.bool_type
|
||||
}
|
||||
// struct / enum / placeholder
|
||||
else {
|
||||
// struct / enum
|
||||
mut idx := p.table.find_type_idx(name)
|
||||
if idx > 0 {
|
||||
return table.new_type_ptr(idx, nr_muls)
|
||||
return table.new_type(idx)
|
||||
}
|
||||
// not found - add placeholder
|
||||
idx = p.table.add_placeholder_type(name)
|
||||
// println('NOT FOUND: $name - adding placeholder - $idx')
|
||||
return table.new_type_ptr(idx, nr_muls)
|
||||
return table.new_type(idx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -530,7 +530,7 @@ pub fn (p mut Parser) name_expr() ast.Expr {
|
|||
}
|
||||
// `map[string]int` initialization
|
||||
if p.tok.lit == 'map' && p.peek_tok.kind == .lsbr {
|
||||
map_type := p.parse_map_type(0)
|
||||
map_type := p.parse_map_type()
|
||||
return node
|
||||
}
|
||||
// p.warn('name expr $p.tok.lit $p.peek_tok.str()')
|
||||
|
|
|
@ -19,12 +19,6 @@ pub fn type_nr_muls(t Type) int {
|
|||
return (int(t)>>16) & 0xff
|
||||
}
|
||||
|
||||
// return extra
|
||||
[inline]
|
||||
pub fn type_extra(t Type) TypeExtra {
|
||||
return ((int(t)>>24) & 0xff)
|
||||
}
|
||||
|
||||
// return true if pointer (nr_muls>0)
|
||||
[inline]
|
||||
pub fn type_is_ptr(t Type) bool {
|
||||
|
@ -60,6 +54,18 @@ pub fn type_deref(t Type) Type {
|
|||
return (int(type_extra(t))<<24) | ((nr_muls - 1)<<16) | u16(type_idx(t))
|
||||
}
|
||||
|
||||
// return extra info
|
||||
[inline]
|
||||
pub fn type_extra(t Type) TypeExtra {
|
||||
return (int(t)>>24) & 0xff
|
||||
}
|
||||
|
||||
// set extra info
|
||||
[inline]
|
||||
pub fn type_set_extra(t Type, extra TypeExtra) Type {
|
||||
return (int(extra)<<24) | (type_nr_muls(t)<<16) | u16(type_idx(t))
|
||||
}
|
||||
|
||||
[inline]
|
||||
pub fn type_is_optional(t Type) bool {
|
||||
return type_extra(t) == .optional
|
||||
|
@ -67,7 +73,7 @@ pub fn type_is_optional(t Type) bool {
|
|||
|
||||
[inline]
|
||||
pub fn type_to_optional(t Type) Type {
|
||||
return (int(TypeExtra.optional)<<24) | (type_nr_muls(t)<<16) | u16(type_idx(t))
|
||||
return type_set_extra(t, .optional)
|
||||
}
|
||||
|
||||
// new type with idx of TypeSymbol, not pointer (nr_muls=0)
|
||||
|
@ -76,7 +82,7 @@ pub fn new_type(idx int) Type {
|
|||
if idx < 1 || idx > 65536 {
|
||||
panic('new_type_id: idx must be between 1 & 65536')
|
||||
}
|
||||
return u16(idx)
|
||||
return idx
|
||||
}
|
||||
|
||||
// return Type idx of TypeSymbol & specify if ptr (nr_muls)
|
||||
|
|
Loading…
Reference in New Issue