From 7e930c2a75d4f58216b5054de2292d3f7b0462e9 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 25 Feb 2020 11:52:41 +0100 Subject: [PATCH] cgen: enum --- vlib/v/gen/cgen.v | 11 +++++++++-- vlib/v/gen/tests/1.c | 6 ++++++ vlib/v/gen/tests/1.vv | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index b59981a6f6..f58886a928 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -60,7 +60,6 @@ fn (g mut Gen) stmt(node ast.Stmt) { // println('cgen.stmt()') // g.writeln('//// stmt start') match node { - ast.Import {} ast.ConstDecl { for i, field in it.fields { field_type_sym := g.table.get_type_symbol(field.typ) @@ -69,6 +68,14 @@ fn (g mut Gen) stmt(node ast.Stmt) { g.writeln(';') } } + ast.EnumDecl { + g.writeln('enum $it.name {') + for i, val in it.vals { + g.writeln('\t${it.name}_$val, // $i') + } + g.writeln('}') + } + ast.Import {} ast.FnDecl { g.reset_tmp_count() g.fn_decl = it // &it @@ -194,7 +201,7 @@ fn (g mut Gen) stmt(node ast.Stmt) { } } else { - verror('cgen.stmt(): bad node') + verror('cgen.stmt(): unhandled node ' + typeof(node)) } } } diff --git a/vlib/v/gen/tests/1.c b/vlib/v/gen/tests/1.c index e23ba02e11..2df6123115 100644 --- a/vlib/v/gen/tests/1.c +++ b/vlib/v/gen/tests/1.c @@ -15,6 +15,12 @@ typedef struct { int age; } User; +enum Color { + Color_red, // 0 + Color_green, // 1 + Color_blue, // 2 +} + int main() { int a = 10; a++; diff --git a/vlib/v/gen/tests/1.vv b/vlib/v/gen/tests/1.vv index e6a780d0e7..baca70c79c 100644 --- a/vlib/v/gen/tests/1.vv +++ b/vlib/v/gen/tests/1.vv @@ -11,6 +11,10 @@ struct User { age int } +enum Color { + red green blue +} + /* struct One { two Two