checker: is_number()
parent
527377dc86
commit
6dac2edeef
|
@ -574,8 +574,7 @@ pub fn (c mut Checker) postfix_expr(node ast.PostfixExpr) table.Type {
|
|||
}
|
||||
*/
|
||||
typ := c.expr(node.expr)
|
||||
// if typ.typ.kind != .int {
|
||||
if table.type_idx(typ) != table.int_type_idx {
|
||||
if !table.is_number(typ) {
|
||||
typ_sym := c.table.get_type_symbol(typ)
|
||||
c.error('invalid operation: $node.op.str() (non-numeric type `$typ_sym.name`)', node.pos)
|
||||
}
|
||||
|
@ -601,7 +600,7 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
|
|||
}
|
||||
if !is_range {
|
||||
index_type := c.expr(node.index)
|
||||
if table.type_idx(index_type) != table.int_type_idx {
|
||||
if !(table.type_idx(index_type) in table.number_idxs) {
|
||||
index_type_sym := c.table.get_type_symbol(index_type)
|
||||
c.error('non-integer index (type `$index_type_sym.name`)', node.pos)
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ pub fn type_idx(t Type) int {
|
|||
return u16(t) & 0xffff
|
||||
}
|
||||
|
||||
|
||||
// return nr_muls
|
||||
[inline]
|
||||
pub fn type_nr_muls(t Type) int {
|
||||
|
@ -92,6 +91,15 @@ pub fn new_type_ptr(idx int, nr_muls int) Type {
|
|||
return (nr_muls<<16) | u16(idx)
|
||||
}
|
||||
|
||||
pub const (
|
||||
number_idxs = [int_type_idx, byte_type_idx, u64_type_idx]
|
||||
)
|
||||
|
||||
pub fn is_number(typ Type) bool {
|
||||
idx := type_idx(typ)
|
||||
return idx in [int_type_idx, byte_type_idx, u64_type_idx]
|
||||
}
|
||||
|
||||
pub const (
|
||||
void_type = new_type(void_type_idx)
|
||||
voidptr_type = new_type(voidptr_type_idx)
|
||||
|
|
Loading…
Reference in New Issue