1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

ast: return types, variable declaration

This commit is contained in:
Alexander Medvednikov
2019-12-26 13:27:35 +03:00
parent 320174bd5b
commit 0a3adb5de8
8 changed files with 187 additions and 48 deletions

View File

@@ -41,12 +41,11 @@ const (
void_type = Type{'void'}
)
fn (g mut Gen) expr(node ast.Expr) Type {
fn (g mut Gen) expr(node ast.Expr) {
//println('cgen expr()')
match node {
ast.IntegerLiteral {
g.write(it.val.str())
return int_type
}
ast.UnaryExpr {
g.expr(it.left)
@@ -54,10 +53,9 @@ fn (g mut Gen) expr(node ast.Expr) Type {
}
ast.StringLiteral {
g.write('"$it.val"')
return string_type
}
ast.BinaryExpr {
typ := g.expr(it.left)
g.expr(it.left)
match it.op {
.plus { g.write(' + ') }
.minus { g.write(' - ') }
@@ -65,22 +63,24 @@ fn (g mut Gen) expr(node ast.Expr) Type {
.div { g.write(' / ') }
else {}
}
typ2 := g.expr(it.right)
if typ.name != typ2.name {
println('bad types $typ.name $typ2.name')
}
return typ
g.expr(it.right)
// if typ.name != typ2.name {
//verror('bad types $typ.name $typ2.name')
//}
}
ast.VarDecl {
g.write('var $it.name = ')
g.write('$it.typ.name $it.name = ')
g.expr(it.expr)
g.writeln(';')
return void_type
}
else {
println('bad node')
}
}
return void_type
}
fn verror(s string) {
println(s)
exit(1)
}