cgen: minor fixes
parent
c514f0b672
commit
fe6707b26d
|
@ -338,7 +338,7 @@ pub fn (a array) reverse() array {
|
||||||
data: vcalloc(a.cap * a.element_size)
|
data: vcalloc(a.cap * a.element_size)
|
||||||
}
|
}
|
||||||
for i in 0..a.len {
|
for i in 0..a.len {
|
||||||
C.memcpy(arr.data + i * arr.element_size, &a[a.len - 1 - i], arr.element_size)
|
C.memcpy(arr.data + i * arr.element_size, &a.data[a.len - 1 - i], arr.element_size)
|
||||||
}
|
}
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
|
@ -392,10 +392,10 @@ fn (s string) add(a string) string {
|
||||||
str: malloc(new_len + 1)
|
str: malloc(new_len + 1)
|
||||||
}
|
}
|
||||||
for j in 0..s.len {
|
for j in 0..s.len {
|
||||||
res[j] = s[j]
|
res.str[j] = s.str[j]
|
||||||
}
|
}
|
||||||
for j in 0..a.len {
|
for j in 0..a.len {
|
||||||
res[s.len + j] = a[j]
|
res.str[s.len + j] = a.str[j]
|
||||||
}
|
}
|
||||||
res.str[new_len] = `\0` // V strings are not null terminated, but just in case
|
res.str[new_len] = `\0` // V strings are not null terminated, but just in case
|
||||||
return res
|
return res
|
||||||
|
|
|
@ -883,7 +883,7 @@ pub fn (c mut Checker) match_expr(node mut ast.MatchExpr) table.Type {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (c mut Checker) if_expr(node mut ast.IfExpr) table.Type {
|
pub fn (c mut Checker) if_expr(node mut ast.IfExpr) table.Type {
|
||||||
if c.expected_type != 0 {
|
if c.expected_type != table.void_type {
|
||||||
// sym := c.table.get_type_symbol(c.expected_type)
|
// sym := c.table.get_type_symbol(c.expected_type)
|
||||||
// println('$c.file.path $node.pos.line_nr IF: checker exp type = ' + sym.name)
|
// println('$c.file.path $node.pos.line_nr IF: checker exp type = ' + sym.name)
|
||||||
node.is_expr = true
|
node.is_expr = true
|
||||||
|
|
|
@ -1089,7 +1089,7 @@ fn (g mut Gen) ident(node ast.Ident) {
|
||||||
// TODO `is`
|
// TODO `is`
|
||||||
match node.info {
|
match node.info {
|
||||||
ast.IdentVar {
|
ast.IdentVar {
|
||||||
if it.is_optional {
|
if it.is_optional && !g.is_assign_expr {
|
||||||
g.write('/*opt*/')
|
g.write('/*opt*/')
|
||||||
styp := g.typ(it.typ)[7..] // Option_int => int TODO perf?
|
styp := g.typ(it.typ)[7..] // Option_int => int TODO perf?
|
||||||
g.write('(*($styp*)${name}.data)')
|
g.write('(*($styp*)${name}.data)')
|
||||||
|
@ -1103,6 +1103,7 @@ fn (g mut Gen) ident(node ast.Ident) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (g mut Gen) if_expr(node ast.IfExpr) {
|
fn (g mut Gen) if_expr(node ast.IfExpr) {
|
||||||
|
// g.writeln('/* if is_expr=$node.is_expr */')
|
||||||
// If expression? Assign the value to a temp var.
|
// If expression? Assign the value to a temp var.
|
||||||
// Previously ?: was used, but it's too unreliable.
|
// Previously ?: was used, but it's too unreliable.
|
||||||
type_sym := g.table.get_type_symbol(node.typ)
|
type_sym := g.table.get_type_symbol(node.typ)
|
||||||
|
@ -1240,7 +1241,7 @@ fn (g mut Gen) index_expr(node ast.IndexExpr) {
|
||||||
g.write('))')
|
g.write('))')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if sym.kind == .string {
|
else if sym.kind == .string && !table.type_is_ptr(node.container_type) {
|
||||||
g.write('string_at(')
|
g.write('string_at(')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.write(', ')
|
g.write(', ')
|
||||||
|
|
Loading…
Reference in New Issue