v2: enum fixes
parent
7e930c2a75
commit
f6c2b3a54b
|
@ -69,11 +69,11 @@ fn (g mut Gen) stmt(node ast.Stmt) {
|
|||
}
|
||||
}
|
||||
ast.EnumDecl {
|
||||
g.writeln('enum $it.name {')
|
||||
g.writeln('typedef enum {')
|
||||
for i, val in it.vals {
|
||||
g.writeln('\t${it.name}_$val, // $i')
|
||||
}
|
||||
g.writeln('}')
|
||||
g.writeln('} $it.name;')
|
||||
}
|
||||
ast.Import {}
|
||||
ast.FnDecl {
|
||||
|
|
|
@ -15,11 +15,11 @@ typedef struct {
|
|||
int age;
|
||||
} User;
|
||||
|
||||
enum Color {
|
||||
typedef enum {
|
||||
Color_red, // 0
|
||||
Color_green, // 1
|
||||
Color_blue, // 2
|
||||
}
|
||||
} Color;
|
||||
|
||||
int main() {
|
||||
int a = 10;
|
||||
|
|
|
@ -37,6 +37,8 @@ fn main() {
|
|||
foo(3)
|
||||
ak := 10
|
||||
mypi := pi
|
||||
//color := Color.red
|
||||
//Color color = Color_red;
|
||||
}
|
||||
/*
|
||||
user := User{}
|
||||
|
|
|
@ -577,6 +577,12 @@ pub fn (p mut Parser) name_expr() ast.Expr {
|
|||
// || p.table.known_type(p.tok.lit)) {
|
||||
return p.struct_init()
|
||||
}
|
||||
/*
|
||||
else if p.peek_tok.kind == .dot {
|
||||
p.warn('enum val $name')
|
||||
}
|
||||
*/
|
||||
|
||||
else {
|
||||
mut ident := ast.Ident{}
|
||||
ident = p.parse_ident(is_c)
|
||||
|
@ -1649,6 +1655,13 @@ fn (p mut Parser) enum_decl() ast.EnumDecl {
|
|||
}
|
||||
}
|
||||
p.check(.rcbr)
|
||||
p.table.register_type_symbol(table.TypeSymbol{
|
||||
kind: .enum_
|
||||
name: name
|
||||
info: table.Enum{
|
||||
vals: vals
|
||||
}
|
||||
})
|
||||
return ast.EnumDecl{
|
||||
name: name
|
||||
is_pub: is_pub
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
)
|
||||
|
||||
pub type TypeInfo = Array | ArrayFixed | Map | Struct |
|
||||
MultiReturn | Alias
|
||||
MultiReturn | Alias | Enum
|
||||
|
||||
pub struct TypeSymbol {
|
||||
pub:
|
||||
|
@ -86,6 +86,7 @@ pub enum Kind {
|
|||
multi_return
|
||||
sum_type
|
||||
alias
|
||||
enum_
|
||||
}
|
||||
|
||||
[inline]
|
||||
|
@ -364,6 +365,11 @@ pub mut:
|
|||
fields []Field
|
||||
}
|
||||
|
||||
pub struct Enum {
|
||||
pub mut:
|
||||
vals []Field
|
||||
}
|
||||
|
||||
pub struct Alias {
|
||||
pub:
|
||||
foo string
|
||||
|
@ -411,7 +417,6 @@ pub fn (table &Table) type_to_str(t Type) string {
|
|||
res += ')'
|
||||
return res
|
||||
}
|
||||
|
||||
mut res := sym.name.replace('array_', '[]')
|
||||
// mod.submod.submod2.Type => submod2.Type
|
||||
if res.contains('.') {
|
||||
|
|
Loading…
Reference in New Issue