| // 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. |
| |
| package expressions |
| |
| type T struct { |
| x, y, z int |
| } |
| |
| var ( |
| a, b, c, d, e int; |
| under_bar int; |
| longIdentifier1, longIdentifier2, longIdentifier3 int; |
| t0, t1, t2 T; |
| s string; |
| p *int; |
| ) |
| |
| |
| func _() { |
| // no spaces around simple or parenthesized expressions |
| _ = a+b; |
| _ = a+b+c; |
| _ = a+b-c; |
| _ = a-b-c; |
| _ = a+(b*c); |
| _ = a+(b/c); |
| _ = a-(b%c); |
| _ = 1+a; |
| _ = a+1; |
| _ = a+b+1; |
| _ = s[1:2]; |
| _ = s[a:b]; |
| _ = s[0:len(s)]; |
| _ = s[0]<<1; |
| _ = (s[0]<<1)&0xf; |
| _ = s[0] << 2 | s[1] >> 4; |
| _ = "foo"+s; |
| _ = s+"foo"; |
| _ = 'a'+'b'; |
| _ = len(s)/2; |
| _ = len(t0.x)/a; |
| |
| // spaces around expressions of different precedence or expressions containing spaces |
| _ = a + -b; |
| _ = a - ^b; |
| _ = a / *p; |
| _ = a + b*c; |
| _ = 1 + b*c; |
| _ = a + 2*c; |
| _ = a + c*2; |
| _ = 1 + 2*3; |
| _ = s[1 : 2*3]; |
| _ = s[a : b-c]; |
| _ = s[a+b : len(s)]; |
| _ = s[len(s) : -a]; |
| _ = s[a : len(s)+1]; |
| _ = s[a : len(s)+1]+s; |
| |
| // spaces around operators with equal or lower precedence than comparisons |
| _ = a == b; |
| _ = a != b; |
| _ = a > b; |
| _ = a >= b; |
| _ = a < b; |
| _ = a <= b; |
| _ = a < b && c > d; |
| _ = a < b || c > d; |
| |
| // spaces around "long" operands |
| _ = a + longIdentifier1; |
| _ = longIdentifier1 + a; |
| _ = longIdentifier1 + longIdentifier2 * longIdentifier3; |
| _ = s + "a longer string"; |
| |
| // some selected cases |
| _ = a + t0.x; |
| _ = a + t0.x + t1.x * t2.x; |
| _ = a + b + c + d + e + 2*3; |
| _ = a + b + c + 2*3 + d + e; |
| _ = (a+b+c)*2; |
| _ = a - b + c - d + (a+b+c) + d&e; |
| _ = under_bar-1; |
| _ = Open(dpath + "/file", O_WRONLY | O_CREAT, 0666); |
| _ = int(c0&_Mask4)<<18 | int(c1&_Maskx)<<12 | int(c2&_Maskx)<<6 | int(c3&_Maskx); |
| } |
| |
| |
| func _() { |
| a+b; |
| a+b+c; |
| a+b*c; |
| a+(b*c); |
| (a+b)*c; |
| a+(b*c*d); |
| a+(b*c+d); |
| |
| 1<<x; |
| -1<<x; |
| 1<<x-1; |
| -1<<x-1; |
| |
| f(a+b); |
| f(a+b+c); |
| f(a+b*c); |
| f(a+(b*c)); |
| f(1<<x-1, 1<<x-2); |
| |
| 1<<d.logWindowSize-1; |
| |
| buf = make(x, 2*cap(b.buf) + n); |
| |
| dst[i*3+2] = dbuf[0]<<2; |
| dst[i*3+2] = dbuf[0]<<2 | dbuf[1]>>4; |
| |
| b.buf = b.buf[0:b.off+m+n]; |
| b.buf = b.buf[0:b.off+m*n]; |
| f(b.buf[0:b.off+m+n]); |
| |
| signed += ' '*8; |
| tw.octal(header[148:155], chksum); |
| |
| x > 0 && i >= 0; |
| |
| x1, x0 := x>>w2, x&m2; |
| z0 = t1<<w2+t0; |
| z1 = (t1+t0>>w2)>>w2; |
| q1, r1 := x1/d1, x1%d1; |
| r1 = r1*b2 | x0>>w2; |
| x1 = (x1<<z)|(x0>>(uint(w)-z)); |
| x1 = x1<<z | x0>>(uint(w)-z); |
| |
| buf[0:len(buf)+1]; |
| buf[0:n+1]; |
| |
| a,b = b,a; |
| a = b+c; |
| a = b*c+d; |
| a*b+c; |
| a-b-c; |
| a-(b-c); |
| a-b*c; |
| a-(b*c); |
| a*b/c; |
| a/ *b; |
| x[a|^b]; |
| x[a/ *b]; |
| a& ^b; |
| a+ +b; |
| a- -b; |
| x[a*-b]; |
| x[a+ +b]; |
| x^y^z; |
| b[a>>24] ^ b[(a>>16)&0xFF] ^ b[(a>>8)&0xFF] ^ b[a&0xFF]; |
| len(longVariableName)*2; |
| |
| token(matchType + xlength<<lengthShift + xoffset); |
| } |
| |
| |
| func _() { |
| _ = T{}; |
| _ = struct{}{}; |
| _ = [10]T{}; |
| _ = [...]T{}; |
| _ = []T{}; |
| _ = map[int]T{}; |
| |
| _ = (T){}; |
| _ = (struct{}){}; |
| _ = ([10]T){}; |
| _ = ([...]T){}; |
| _ = ([]T){}; |
| _ = (map[int]T){}; |
| } |
| |
| |
| // one-line structs/interfaces in composite literals (up to a threshold) |
| func _() { |
| _ = struct{}{}; |
| _ = struct{ x int }{0}; |
| _ = struct{ x, y, z int }{0, 1, 2}; |
| _ = struct{ int }{0}; |
| _ = struct{ s struct { int } }{struct{ int}{0}}; // compositeLit context not propagated => multiLine result |
| } |
| |
| |
| func _() { |
| // do not modify literals |
| _ = "tab1 tab2 tab3 end"; // string contains 3 tabs |
| _ = "tab1 tab2 tab3 end"; // same string with 3 blanks - may be unaligned because editors see tabs in strings |
| _ = ""; // this comment should be aligned with the one on the previous line |
| _ = ``; |
| _ = ` |
| `; |
| _ = `foo |
| bar`; |
| } |
| |
| |
| func _() { |
| // one-line function literals |
| _ = func() {}; |
| _ = func() int { |
| return 0; |
| }; |
| _ = func(x, y int) bool { |
| return x < y |
| }; |
| |
| f(func() {}); |
| f(func() int { |
| return 0; |
| }); |
| f(func(x, y int) bool { |
| return x < y |
| }); |
| } |
| |
| |
| func _() { |
| // not not add extra indentation to multi-line string lists |
| _ = "foo" "bar"; |
| _ = "foo" |
| "bar" |
| "bah"; |
| _ = []string { |
| "abc" |
| "def", |
| "foo" |
| "bar" |
| } |
| } |
| |
| |
| const _ = F1 + |
| `string = "%s";` |
| `ptr = *;` |
| `datafmt.T2 = s ["-" p "-"];` |
| |
| |
| const _ = |
| `datafmt "datafmt";` |
| `default = "%v";` |
| `array = *;` |
| `datafmt.T3 = s {" " a a / ","};` |
| |
| |
| const _ = `datafmt "datafmt";` |
| `default = "%v";` |
| `array = *;` |
| `datafmt.T3 = s {" " a a / ","};` |
| |
| |
| func _() { |
| _ = F1 + |
| `string = "%s";` |
| `ptr = *;` |
| `datafmt.T2 = s ["-" p "-"];`; |
| |
| _ = |
| `datafmt "datafmt";` |
| `default = "%v";` |
| `array = *;` |
| `datafmt.T3 = s {" " a a / ","};`; |
| |
| _ = `datafmt "datafmt";` |
| `default = "%v";` |
| `array = *;` |
| `datafmt.T3 = s {" " a a / ","};` |
| } |
| |
| |
| func _() { |
| // respect source lines in multi-line expressions |
| _ = a+ |
| b+ |
| c; |
| _ = a < b || |
| b < a; |
| _ = "933262154439441526816992388562667004907159682643816214685929" |
| "638952175999932299156089414639761565182862536979208272237582" |
| "51185210916864000000000000000000000000"; // 100! |
| _ = "170141183460469231731687303715884105727"; // prime |
| } |
| |
| |
| // Alignment after overlong lines |
| const ( |
| _ = "991"; |
| _ = "2432902008176640000"; // 20! |
| _ = "933262154439441526816992388562667004907159682643816214685929" |
| "638952175999932299156089414639761565182862536979208272237582" |
| "51185210916864000000000000000000000000"; // 100! |
| _ = "170141183460469231731687303715884105727"; // prime |
| ) |
| |
| |
| func same(t, u *Time) bool { |
| // respect source lines in multi-line expressions |
| return t.Year == u.Year |
| && t.Month == u.Month |
| && t.Day == u.Day |
| && t.Hour == u.Hour |
| && t.Minute == u.Minute |
| && t.Second == u.Second |
| && t.Weekday == u.Weekday |
| && t.ZoneOffset == u.ZoneOffset |
| && t.Zone == u.Zone |
| } |
| |
| |
| func (p *parser) charClass() { |
| // respect source lines in multi-line expressions |
| if cc.negate && len(cc.ranges) == 2 && |
| cc.ranges[0] == '\n' && cc.ranges[1] == '\n' { |
| nl := new(_NotNl); |
| p.re.add(nl); |
| } |
| } |
| |
| |
| func addState(s []state, inst instr, match []int) { |
| // handle comments correctly in multi-line expressions |
| for i := 0; i < l; i++ { |
| if s[i].inst.index() == index && // same instruction |
| s[i].match[0] < pos { // earlier match already going; leftmost wins |
| return s |
| } |
| } |
| } |