| 
									
										
										
										
											2012-02-16 23:48:57 -05:00
										 |  |  | // run | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Copyright 2009 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-19 13:19:43 +11:00
										 |  |  | // Test types of constant expressions, using reflect. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-03 09:45:15 -07:00
										 |  |  | import "reflect" | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-25 13:39:36 -04:00
										 |  |  | func typeof(x interface{}) string { return reflect.TypeOf(x).String() } | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | func f() int { return 0 } | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | func g() int { return 0 } | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | type T func() int | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | var m = map[string]T{"f": f} | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | type A int | 
					
						
							|  |  |  | type B int | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | var a A = 1 | 
					
						
							|  |  |  | var b B = 2 | 
					
						
							|  |  |  | var x int | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | func main() { | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | 	want := typeof(g) | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 	if t := typeof(f); t != want { | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | 		println("type of f is", t, "want", want) | 
					
						
							|  |  |  | 		panic("fail") | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | 	want = typeof(a) | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 	if t := typeof(+a); t != want { | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | 		println("type of +a is", t, "want", want) | 
					
						
							|  |  |  | 		panic("fail") | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-03-24 16:46:53 -07:00
										 |  |  | 	if t := typeof(a + 0); t != want { | 
					
						
							|  |  |  | 		println("type of a+0 is", t, "want", want) | 
					
						
							|  |  |  | 		panic("fail") | 
					
						
							| 
									
										
										
										
											2009-03-12 19:04:38 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |