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

cgen: print: support all the same functionality as println

This commit is contained in:
krischerven 2020-04-02 03:19:57 -04:00 committed by GitHub
parent 3eff266eb9
commit dac304195e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 9 deletions

View File

@ -323,7 +323,7 @@ pub fn (c mut Checker) call_expr(call_expr mut ast.CallExpr) table.Type {
return f.return_type
}
// println can print anything
if fn_name == 'println' {
if fn_name == 'println' || fn_name == 'print' {
c.expected_type = table.string_type
call_expr.args[0].typ = c.expr(call_expr.args[0].expr)
return f.return_type

View File

@ -2362,7 +2362,13 @@ fn (g mut Gen) method_call(node ast.CallExpr) {
fn (g mut Gen) fn_call(node ast.CallExpr) {
mut name := node.name
is_print := name == 'println'
is_print := name == 'println' || name == 'print'
print_method := if name == 'println' {
'println'
}
else {
'print'
}
if node.is_c {
// Skip "C."
g.is_c_call = true
@ -2384,7 +2390,6 @@ fn (g mut Gen) fn_call(node ast.CallExpr) {
}
}
*/
if is_print && node.args[0].typ != table.string_type_idx {
typ := node.args[0].typ
mut styp := g.typ(typ)
@ -2403,17 +2408,17 @@ fn (g mut Gen) fn_call(node ast.CallExpr) {
// tmps << tmp
g.write('string $tmp = ${styp}_str(')
g.expr(node.args[0].expr)
g.writeln('); println($tmp); string_free($tmp); //MEM2 $styp')
g.writeln('); ${print_method}($tmp); string_free($tmp); //MEM2 $styp')
}
else if sym.kind == .enum_ {
g.write('println(tos3("')
g.write('${print_method}(tos3("')
g.enum_expr(node.args[0].expr)
g.write('"))')
}
else {
// `println(int_str(10))`
// sym := g.table.get_type_symbol(node.args[0].typ)
g.write('println(${styp}_str(')
g.write('${print_method}(${styp}_str(')
if table.type_is_ptr(typ) {
// dereference
g.write('*')

View File

@ -236,10 +236,15 @@ pub fn (g mut Gen) save_main_fn_addr() {
g.main_fn_addr = g.buf.len
}
pub fn (g mut Gen) gen_print_from_expr(expr ast.Expr) {
pub fn (g mut Gen) gen_print_from_expr(expr ast.Expr, newline bool) {
match expr {
ast.StringLiteral {
g.gen_print(it.val)
if newline {
g.gen_print(it.val+'\n')
}
else {
g.gen_print(it.val)
}
}
else {}
}
@ -362,7 +367,7 @@ fn (g mut Gen) expr(node ast.Expr) {
ast.CallExpr {
if it.name == 'println' || it.name == 'print' {
expr := it.args[0].expr
g.gen_print_from_expr(expr)
g.gen_print_from_expr(expr, it.name == 'println')
}
/*
g.write('${it.name}(')