mirror of
https://github.com/golang/go
synced 2024-11-21 18:14:42 -07:00
remove unused labels
R=golang-dev, gri CC=golang-dev https://golang.org/cl/4274052
This commit is contained in:
parent
35cee9f5d8
commit
e72156b316
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
package net
|
package net
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
// IP address lengths (bytes).
|
// IP address lengths (bytes).
|
||||||
const (
|
const (
|
||||||
IPv4len = 4
|
IPv4len = 4
|
||||||
@ -39,11 +41,7 @@ type IPMask []byte
|
|||||||
// IPv4 address a.b.c.d.
|
// IPv4 address a.b.c.d.
|
||||||
func IPv4(a, b, c, d byte) IP {
|
func IPv4(a, b, c, d byte) IP {
|
||||||
p := make(IP, IPv6len)
|
p := make(IP, IPv6len)
|
||||||
for i := 0; i < 10; i++ {
|
copy(p, v4InV6Prefix)
|
||||||
p[i] = 0
|
|
||||||
}
|
|
||||||
p[10] = 0xff
|
|
||||||
p[11] = 0xff
|
|
||||||
p[12] = a
|
p[12] = a
|
||||||
p[13] = b
|
p[13] = b
|
||||||
p[14] = c
|
p[14] = c
|
||||||
@ -51,6 +49,8 @@ func IPv4(a, b, c, d byte) IP {
|
|||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var v4InV6Prefix = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff}
|
||||||
|
|
||||||
// IPv4Mask returns the IP mask (in 16-byte form) of the
|
// IPv4Mask returns the IP mask (in 16-byte form) of the
|
||||||
// IPv4 mask a.b.c.d.
|
// IPv4 mask a.b.c.d.
|
||||||
func IPv4Mask(a, b, c, d byte) IPMask {
|
func IPv4Mask(a, b, c, d byte) IPMask {
|
||||||
@ -140,9 +140,24 @@ func (ip IP) DefaultMask() IPMask {
|
|||||||
return nil // not reached
|
return nil // not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func allFF(b []byte) bool {
|
||||||
|
for _, c := range b {
|
||||||
|
if c != 0xff {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// Mask returns the result of masking the IP address ip with mask.
|
// Mask returns the result of masking the IP address ip with mask.
|
||||||
func (ip IP) Mask(mask IPMask) IP {
|
func (ip IP) Mask(mask IPMask) IP {
|
||||||
n := len(ip)
|
n := len(ip)
|
||||||
|
if len(mask) == 16 && len(ip) == 4 && allFF(mask[:12]) {
|
||||||
|
mask = mask[12:]
|
||||||
|
}
|
||||||
|
if len(mask) == 4 && len(ip) == 16 && bytesEqual(ip[:12], v4InV6Prefix) {
|
||||||
|
ip = ip[12:]
|
||||||
|
}
|
||||||
if n != len(mask) {
|
if n != len(mask) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -245,6 +260,34 @@ func (ip IP) String() string {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Equal returns true if ip and x are the same IP address.
|
||||||
|
// An IPv4 address and that same address in IPv6 form are
|
||||||
|
// considered to be equal.
|
||||||
|
func (ip IP) Equal(x IP) bool {
|
||||||
|
if len(ip) == len(x) {
|
||||||
|
return bytesEqual(ip, x)
|
||||||
|
}
|
||||||
|
if len(ip) == 4 && len(x) == 16 {
|
||||||
|
return bytesEqual(x[0:12], v4InV6Prefix) && bytesEqual(ip, x[12:])
|
||||||
|
}
|
||||||
|
if len(ip) == 16 && len(x) == 4 {
|
||||||
|
return bytesEqual(ip[0:12], v4InV6Prefix) && bytesEqual(ip[12:], x)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func bytesEqual(x, y []byte) bool {
|
||||||
|
if len(x) != len(y) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i, b := range x {
|
||||||
|
if y[i] != b {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// If mask is a sequence of 1 bits followed by 0 bits,
|
// If mask is a sequence of 1 bits followed by 0 bits,
|
||||||
// return the number of 1 bits.
|
// return the number of 1 bits.
|
||||||
func simpleMaskLength(mask IPMask) int {
|
func simpleMaskLength(mask IPMask) int {
|
||||||
@ -351,7 +394,6 @@ func parseIPv6(s string) IP {
|
|||||||
|
|
||||||
// Loop, parsing hex numbers followed by colon.
|
// Loop, parsing hex numbers followed by colon.
|
||||||
j := 0
|
j := 0
|
||||||
L:
|
|
||||||
for j < IPv6len {
|
for j < IPv6len {
|
||||||
// Hex number.
|
// Hex number.
|
||||||
n, i1, ok := xtoi(s, i)
|
n, i1, ok := xtoi(s, i)
|
||||||
@ -432,15 +474,66 @@ L:
|
|||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A SyntaxError represents a malformed text string and the type of string that was expected.
|
||||||
|
type SyntaxError struct {
|
||||||
|
Type string
|
||||||
|
Text string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *SyntaxError) String() string {
|
||||||
|
return "invalid " + e.Type + ": " + e.Text
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseIP(s string) IP {
|
||||||
|
if p := parseIPv4(s); p != nil {
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
if p := parseIPv6(s); p != nil {
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ParseIP parses s as an IP address, returning the result.
|
// ParseIP parses s as an IP address, returning the result.
|
||||||
// The string s can be in dotted decimal ("74.125.19.99")
|
// The string s can be in dotted decimal ("74.125.19.99")
|
||||||
// or IPv6 ("2001:4860:0:2001::68") form.
|
// or IPv6 ("2001:4860:0:2001::68") form.
|
||||||
// If s is not a valid textual representation of an IP address,
|
// If s is not a valid textual representation of an IP address,
|
||||||
// ParseIP returns nil.
|
// ParseIP returns nil.
|
||||||
func ParseIP(s string) IP {
|
func ParseIP(s string) IP {
|
||||||
p := parseIPv4(s)
|
if p := parseIPv4(s); p != nil {
|
||||||
if p != nil {
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
return parseIPv6(s)
|
return parseIPv6(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseCIDR parses s as a CIDR notation IP address and mask,
|
||||||
|
// like "192.168.100.1/24" or "2001:DB8::/48".
|
||||||
|
func ParseCIDR(s string) (ip IP, mask IPMask, err os.Error) {
|
||||||
|
i := byteIndex(s, '/')
|
||||||
|
if i < 0 {
|
||||||
|
return nil, nil, &SyntaxError{"CIDR address", s}
|
||||||
|
}
|
||||||
|
ipstr, maskstr := s[:i], s[i+1:]
|
||||||
|
ip = ParseIP(ipstr)
|
||||||
|
nn, i, ok := dtoi(maskstr, 0)
|
||||||
|
if ip == nil || !ok || i != len(maskstr) || nn < 0 || nn > 8*len(ip) {
|
||||||
|
return nil, nil, &SyntaxError{"CIDR address", s}
|
||||||
|
}
|
||||||
|
n := uint(nn)
|
||||||
|
if len(ip) == 4 {
|
||||||
|
v4mask := ^uint32(0xffffffff >> n)
|
||||||
|
mask = IPMask(IPv4(byte(v4mask>>24), byte(v4mask>>16), byte(v4mask>>8), byte(v4mask)))
|
||||||
|
return ip, mask, nil
|
||||||
|
}
|
||||||
|
mask = make(IPMask, 16)
|
||||||
|
for i := 0; i < 16; i++ {
|
||||||
|
if n >= 8 {
|
||||||
|
mask[i] = 0xff
|
||||||
|
n -= 8
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mask[i] = ^byte(0xff >> n)
|
||||||
|
n = 0
|
||||||
|
}
|
||||||
|
return ip, mask, nil
|
||||||
|
}
|
||||||
|
@ -267,7 +267,6 @@ func (t *Template) nextItem() []byte {
|
|||||||
}
|
}
|
||||||
leadingSpace := i > start
|
leadingSpace := i > start
|
||||||
// What's left is nothing, newline, delimited string, or plain text
|
// What's left is nothing, newline, delimited string, or plain text
|
||||||
Switch:
|
|
||||||
switch {
|
switch {
|
||||||
case i == len(t.buf):
|
case i == len(t.buf):
|
||||||
// EOF; nothing to do
|
// EOF; nothing to do
|
||||||
|
@ -815,7 +815,6 @@ Input:
|
|||||||
// Parsers are required to recognize lt, gt, amp, apos, and quot
|
// Parsers are required to recognize lt, gt, amp, apos, and quot
|
||||||
// even if they have not been declared. That's all we allow.
|
// even if they have not been declared. That's all we allow.
|
||||||
var i int
|
var i int
|
||||||
CharLoop:
|
|
||||||
for i = 0; i < len(p.tmp); i++ {
|
for i = 0; i < len(p.tmp); i++ {
|
||||||
var ok bool
|
var ok bool
|
||||||
p.tmp[i], ok = p.getc()
|
p.tmp[i], ok = p.getc()
|
||||||
|
@ -7,16 +7,21 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var i int;
|
var i int
|
||||||
var j int;
|
var j int
|
||||||
if true {}
|
if true {
|
||||||
{ return }
|
}
|
||||||
i = 0;
|
{
|
||||||
if true {} else i++;
|
return
|
||||||
type s struct {};
|
}
|
||||||
i = 0;
|
i = 0
|
||||||
type s2 int;
|
if true {
|
||||||
var k = func (a int) int { return a+1 }(3);
|
} else {
|
||||||
_, _ = j, k;
|
i++
|
||||||
ro: ;
|
}
|
||||||
|
type s struct{}
|
||||||
|
i = 0
|
||||||
|
type s2 int
|
||||||
|
var k = func(a int) int { return a + 1 }(3)
|
||||||
|
_, _ = j, k
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// $G $D/$F.go && $L $F.$A && ./$A.out
|
// $G $D/$F.go && $L $F.$A
|
||||||
|
|
||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
@ -7,12 +7,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func f() {
|
func f() {
|
||||||
exit: ;
|
exit:
|
||||||
|
;
|
||||||
|
goto exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
exit: ; // this should be legal (labels not properly scoped?)
|
exit:
|
||||||
|
; // this should be legal (labels not properly scoped?)
|
||||||
|
goto exit
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var exit int;
|
var exit int
|
||||||
exit:
|
exit:
|
||||||
_ = exit;
|
_ = exit
|
||||||
|
goto exit
|
||||||
}
|
}
|
||||||
|
@ -7,18 +7,19 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func f1() {
|
func f1() {
|
||||||
exit:
|
exit:
|
||||||
print("hi\n");
|
print("hi\n")
|
||||||
|
goto exit
|
||||||
}
|
}
|
||||||
|
|
||||||
func f2() {
|
func f2() {
|
||||||
const c = 1234;
|
const c = 1234
|
||||||
}
|
}
|
||||||
|
|
||||||
func f3() {
|
func f3() {
|
||||||
i := c; // ERROR "undef"
|
i := c // ERROR "undef"
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
f3();
|
f3()
|
||||||
}
|
}
|
||||||
|
@ -8,16 +8,21 @@ package main
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
L1:
|
L1:
|
||||||
L2: for i := 0; i < 10; i++ {
|
L2:
|
||||||
print(i);
|
for i := 0; i < 10; i++ {
|
||||||
break L2;
|
print(i)
|
||||||
|
break L2
|
||||||
}
|
}
|
||||||
|
|
||||||
L3: ;
|
L3:
|
||||||
L4: for i := 0; i < 10; i++ {
|
;
|
||||||
print(i);
|
L4:
|
||||||
break L4;
|
for i := 0; i < 10; i++ {
|
||||||
|
print(i)
|
||||||
|
break L4
|
||||||
}
|
}
|
||||||
|
goto L1
|
||||||
|
goto L3
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7,8 +7,17 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if true {} else L1: ;
|
if true {
|
||||||
if true {} else L2: main() ;
|
} else {
|
||||||
|
L1:
|
||||||
|
}
|
||||||
|
if true {
|
||||||
|
} else {
|
||||||
|
L2:
|
||||||
|
main()
|
||||||
|
}
|
||||||
|
goto L1
|
||||||
|
goto L2
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -9,19 +9,25 @@ package main
|
|||||||
func main() {
|
func main() {
|
||||||
L:
|
L:
|
||||||
for i := 0; i < 1; i++ {
|
for i := 0; i < 1; i++ {
|
||||||
L1:
|
L1:
|
||||||
for {
|
for {
|
||||||
break L;
|
break L
|
||||||
}
|
}
|
||||||
panic("BUG: not reached - break");
|
panic("BUG: not reached - break")
|
||||||
}
|
}
|
||||||
|
|
||||||
L2:
|
L2:
|
||||||
for i := 0; i < 1; i++ {
|
for i := 0; i < 1; i++ {
|
||||||
L3:
|
L3:
|
||||||
for {
|
for {
|
||||||
continue L2;
|
continue L2
|
||||||
}
|
}
|
||||||
panic("BUG: not reached - continue");
|
panic("BUG: not reached - continue")
|
||||||
|
}
|
||||||
|
if false {
|
||||||
|
goto L1
|
||||||
|
}
|
||||||
|
if false {
|
||||||
|
goto L3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,16 +10,18 @@ func main() {
|
|||||||
L:
|
L:
|
||||||
for {
|
for {
|
||||||
for {
|
for {
|
||||||
break L2; // ERROR "L2"
|
break L2 // ERROR "L2"
|
||||||
continue L2; // ERROR "L2"
|
continue L2 // ERROR "L2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
L1:
|
L1:
|
||||||
x := 1;
|
x := 1
|
||||||
_ = x;
|
_ = x
|
||||||
for {
|
for {
|
||||||
break L1; // ERROR "L1"
|
break L1 // ERROR "L1"
|
||||||
continue L1; // ERROR "L1"
|
continue L1 // ERROR "L1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
goto L
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user