From b4bb970e1852e9f5340b846379ce4a434a1b9d26 Mon Sep 17 00:00:00 2001 From: Stephen Ma Date: Mon, 13 Jun 2011 22:50:51 +1000 Subject: [PATCH] gc: handle go print() and go println() Fixes #1952. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/4611041 --- src/cmd/gc/walk.c | 11 ++++++++++- test/golden.out | 3 +++ test/goprint.go | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 test/goprint.go diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 65a504bff5..4d06179eb8 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -243,7 +243,16 @@ walkstmt(Node **np) break; case OPROC: - walkexpr(&n->left, &n->ninit); + switch(n->left->op) { + case OPRINT: + case OPRINTN: + walkexprlist(n->left->list, &n->ninit); + n->left = walkprint(n->left, &n->ninit, 1); + break; + default: + walkexpr(&n->left, &n->ninit); + break; + } break; case ORETURN: diff --git a/test/golden.out b/test/golden.out index 4400e41dd1..655ceda565 100644 --- a/test/golden.out +++ b/test/golden.out @@ -21,6 +21,9 @@ panic: runtime error: hash of unhashable type []int printing: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 42 true false true +1.500000e+000 world 0x0 [0/0]0x0 0x0 0x0 255 +=========== ./goprint.go +42 true false true +1.500000e+000 world 0x0 [0/0]0x0 0x0 0x0 255 + =========== ./helloworld.go hello, world diff --git a/test/goprint.go b/test/goprint.go new file mode 100644 index 0000000000..c0e34c750e --- /dev/null +++ b/test/goprint.go @@ -0,0 +1,14 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import "time" + +func main() { + go println(42, true, false, true, 1.5, "world", (chan int)(nil), []int(nil), (map[string]int)(nil), (func())(nil), byte(255)) + time.Sleep(1e6) +}