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

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 webmaster@9p.io.