Plan 9 from Bell Labs’s /usr/web/sources/contrib/ericvh/go-plan9/src/pkg/go/printer/testdata/expressions.input

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


// 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[0:];
	_ = s[a+b];
	_ = s[a+b :];
	_ = a[a<<b+1];
	_ = a[a<<b+1 :];
	_ = 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
		 }
	}
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].