summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkg/debug/dwarf/buf.go108
-rw-r--r--src/pkg/debug/dwarf/const.go444
-rw-r--r--src/pkg/debug/dwarf/entry.go172
-rw-r--r--src/pkg/debug/dwarf/open.go40
-rw-r--r--src/pkg/debug/dwarf/type.go370
-rw-r--r--src/pkg/debug/dwarf/type_test.go36
-rw-r--r--src/pkg/debug/dwarf/unit.go50
-rw-r--r--src/pkg/debug/elf/elf.go1246
-rw-r--r--src/pkg/debug/elf/elf_test.go10
-rw-r--r--src/pkg/debug/elf/file.go312
-rw-r--r--src/pkg/debug/elf/file_test.go60
-rw-r--r--src/pkg/debug/gosym/pclntab.go42
-rw-r--r--src/pkg/debug/gosym/pclntab_test.go110
-rw-r--r--src/pkg/debug/gosym/symtab.go334
-rw-r--r--src/pkg/debug/macho/file.go322
-rw-r--r--src/pkg/debug/macho/file_test.go50
-rw-r--r--src/pkg/debug/macho/macho.go234
-rw-r--r--src/pkg/debug/proc/proc.go92
-rw-r--r--src/pkg/debug/proc/proc_linux.go670
-rw-r--r--src/pkg/debug/proc/proc_nacl.go4
-rw-r--r--src/pkg/debug/proc/regs_linux_386.go38
-rw-r--r--src/pkg/debug/proc/regs_linux_amd64.go36
-rw-r--r--src/pkg/debug/proc/regs_linux_arm.go24
-rw-r--r--src/pkg/ebnf/ebnf.go146
-rw-r--r--src/pkg/ebnf/ebnf_test.go12
-rw-r--r--src/pkg/ebnf/parser.go128
-rw-r--r--src/pkg/encoding/ascii85/ascii85.go190
-rw-r--r--src/pkg/encoding/ascii85/ascii85_test.go140
-rw-r--r--src/pkg/encoding/base64/base64.go176
-rw-r--r--src/pkg/encoding/base64/base64_test.go128
-rw-r--r--src/pkg/encoding/binary/binary.go210
-rw-r--r--src/pkg/encoding/binary/binary_test.go70
-rw-r--r--src/pkg/encoding/git85/git.go156
-rw-r--r--src/pkg/encoding/git85/git_test.go130
-rw-r--r--src/pkg/encoding/hex/hex.go42
-rw-r--r--src/pkg/encoding/hex/hex_test.go32
-rw-r--r--src/pkg/encoding/pem/pem.go74
-rw-r--r--src/pkg/encoding/pem/pem_test.go16
-rw-r--r--src/pkg/exec/exec.go62
-rw-r--r--src/pkg/exec/exec_test.go18
-rw-r--r--src/pkg/exp/4s/4s.go46
-rw-r--r--src/pkg/exp/4s/5s.go2
-rw-r--r--src/pkg/exp/4s/xs.go566
-rw-r--r--src/pkg/exp/datafmt/datafmt.go274
-rw-r--r--src/pkg/exp/datafmt/datafmt_test.go270
-rw-r--r--src/pkg/exp/datafmt/parser.go222
-rw-r--r--src/pkg/exp/draw/arith.go38
-rw-r--r--src/pkg/exp/draw/color.go96
-rw-r--r--src/pkg/exp/draw/draw.go96
-rw-r--r--src/pkg/exp/draw/event.go18
-rw-r--r--src/pkg/exp/draw/x11/auth.go52
-rw-r--r--src/pkg/exp/draw/x11/conn.go326
-rw-r--r--src/pkg/exp/eval/abort.go46
-rw-r--r--src/pkg/exp/eval/bridge.go74
-rw-r--r--src/pkg/exp/eval/compiler.go60
-rw-r--r--src/pkg/exp/eval/eval_test.go178
-rw-r--r--src/pkg/exp/eval/expr.go1088
-rw-r--r--src/pkg/exp/eval/expr1.go1764
-rw-r--r--src/pkg/exp/eval/expr_test.go6
-rw-r--r--src/pkg/exp/eval/func.go50
-rw-r--r--src/pkg/exp/eval/gen.go102
-rw-r--r--src/pkg/exp/eval/main.go80
-rw-r--r--src/pkg/exp/eval/scope.go98
-rw-r--r--src/pkg/exp/eval/stmt.go618
-rw-r--r--src/pkg/exp/eval/stmt_test.go2
-rw-r--r--src/pkg/exp/eval/type.go698
-rw-r--r--src/pkg/exp/eval/typec.go268
-rw-r--r--src/pkg/exp/eval/util.go26
-rw-r--r--src/pkg/exp/eval/value.go356
-rw-r--r--src/pkg/exp/eval/world.go116
-rw-r--r--src/pkg/exp/exception/exception.go22
-rw-r--r--src/pkg/exp/exception/exception_test.go18
-rw-r--r--src/pkg/exp/iterable/array.go32
-rw-r--r--src/pkg/exp/iterable/iterable.go120
-rw-r--r--src/pkg/exp/iterable/iterable_test.go302
-rw-r--r--src/pkg/exp/nacl/av/av.go172
-rw-r--r--src/pkg/exp/nacl/av/event.go698
-rw-r--r--src/pkg/exp/nacl/av/image.go50
-rw-r--r--src/pkg/exp/nacl/srpc/client.go172
-rw-r--r--src/pkg/exp/nacl/srpc/msg.go412
-rw-r--r--src/pkg/exp/nacl/srpc/server.go118
-rw-r--r--src/pkg/exp/ogle/abort.go22
-rw-r--r--src/pkg/exp/ogle/arch.go68
-rw-r--r--src/pkg/exp/ogle/cmd.go210
-rw-r--r--src/pkg/exp/ogle/event.go136
-rw-r--r--src/pkg/exp/ogle/frame.go110
-rw-r--r--src/pkg/exp/ogle/goroutine.go74
-rw-r--r--src/pkg/exp/ogle/main.go2
-rw-r--r--src/pkg/exp/ogle/process.go272
-rw-r--r--src/pkg/exp/ogle/rruntime.go224
-rw-r--r--src/pkg/exp/ogle/rtype.go262
-rw-r--r--src/pkg/exp/ogle/rvalue.go218
-rw-r--r--src/pkg/exp/ogle/vars.go134
-rw-r--r--src/pkg/exp/parser/interface.go82
-rw-r--r--src/pkg/exp/parser/parser.go1090
-rw-r--r--src/pkg/exp/parser/parser_test.go20
-rw-r--r--src/pkg/exp/spacewar/pdp1.go236
-rw-r--r--src/pkg/exp/spacewar/spacewar.go128
-rw-r--r--src/pkg/expvar/expvar.go148
-rw-r--r--src/pkg/expvar/expvar_test.go38
-rw-r--r--src/pkg/flag/flag.go312
-rw-r--r--src/pkg/flag/flag_test.go64
-rw-r--r--src/pkg/fmt/fmt_test.go132
-rw-r--r--src/pkg/fmt/format.go276
-rw-r--r--src/pkg/fmt/print.go410
105 files changed, 10478 insertions, 10476 deletions
diff --git a/src/pkg/debug/dwarf/buf.go b/src/pkg/debug/dwarf/buf.go
index 2ece903a0..2d29cebdd 100644
--- a/src/pkg/debug/dwarf/buf.go
+++ b/src/pkg/debug/dwarf/buf.go
@@ -7,20 +7,20 @@
package dwarf
import (
- "encoding/binary";
- "os";
- "strconv";
+ "encoding/binary"
+ "os"
+ "strconv"
)
// Data buffer being decoded.
type buf struct {
- dwarf *Data;
- order binary.ByteOrder;
- name string;
- off Offset;
- data []byte;
- addrsize int;
- err os.Error;
+ dwarf *Data
+ order binary.ByteOrder
+ name string
+ off Offset
+ data []byte
+ addrsize int
+ err os.Error
}
func makeBuf(d *Data, name string, off Offset, data []byte, addrsize int) buf {
@@ -29,95 +29,95 @@ func makeBuf(d *Data, name string, off Offset, data []byte, addrsize int) buf {
func (b *buf) uint8() uint8 {
if len(b.data) < 1 {
- b.error("underflow");
- return 0;
+ b.error("underflow")
+ return 0
}
- val := b.data[0];
- b.data = b.data[1:];
- b.off++;
- return val;
+ val := b.data[0]
+ b.data = b.data[1:]
+ b.off++
+ return val
}
func (b *buf) bytes(n int) []byte {
if len(b.data) < n {
- b.error("underflow");
- return nil;
+ b.error("underflow")
+ return nil
}
- data := b.data[0:n];
- b.data = b.data[n:];
- b.off += Offset(n);
- return data;
+ data := b.data[0:n]
+ b.data = b.data[n:]
+ b.off += Offset(n)
+ return data
}
-func (b *buf) skip(n int) { b.bytes(n) }
+func (b *buf) skip(n int) { b.bytes(n) }
func (b *buf) string() string {
for i := 0; i < len(b.data); i++ {
if b.data[i] == 0 {
- s := string(b.data[0:i]);
- b.data = b.data[i+1:];
- b.off += Offset(i + 1);
- return s;
+ s := string(b.data[0:i])
+ b.data = b.data[i+1:]
+ b.off += Offset(i + 1)
+ return s
}
}
- b.error("underflow");
- return "";
+ b.error("underflow")
+ return ""
}
func (b *buf) uint16() uint16 {
- a := b.bytes(2);
+ a := b.bytes(2)
if a == nil {
return 0
}
- return b.order.Uint16(a);
+ return b.order.Uint16(a)
}
func (b *buf) uint32() uint32 {
- a := b.bytes(4);
+ a := b.bytes(4)
if a == nil {
return 0
}
- return b.order.Uint32(a);
+ return b.order.Uint32(a)
}
func (b *buf) uint64() uint64 {
- a := b.bytes(8);
+ a := b.bytes(8)
if a == nil {
return 0
}
- return b.order.Uint64(a);
+ return b.order.Uint64(a)
}
// Read a varint, which is 7 bits per byte, little endian.
// the 0x80 bit means read another byte.
func (b *buf) varint() (c uint64, bits uint) {
for i := 0; i < len(b.data); i++ {
- byte := b.data[i];
- c |= uint64(byte&0x7F) << bits;
- bits += 7;
+ byte := b.data[i]
+ c |= uint64(byte&0x7F) << bits
+ bits += 7
if byte&0x80 == 0 {
- b.off += Offset(i + 1);
- b.data = b.data[i+1:];
- return c, bits;
+ b.off += Offset(i + 1)
+ b.data = b.data[i+1:]
+ return c, bits
}
}
- return 0, 0;
+ return 0, 0
}
// Unsigned int is just a varint.
func (b *buf) uint() uint64 {
- x, _ := b.varint();
- return x;
+ x, _ := b.varint()
+ return x
}
// Signed int is a sign-extended varint.
func (b *buf) int() int64 {
- ux, bits := b.varint();
- x := int64(ux);
+ ux, bits := b.varint()
+ x := int64(ux)
if x&(1<<(bits-1)) != 0 {
x |= -1 << bits
}
- return x;
+ return x
}
// Address-sized uint.
@@ -132,21 +132,21 @@ func (b *buf) addr() uint64 {
case 8:
return uint64(b.uint64())
}
- b.error("unknown address size");
- return 0;
+ b.error("unknown address size")
+ return 0
}
func (b *buf) error(s string) {
if b.err == nil {
- b.data = nil;
- b.err = DecodeError{b.name, b.off, s};
+ b.data = nil
+ b.err = DecodeError{b.name, b.off, s}
}
}
type DecodeError struct {
- Name string;
- Offset Offset;
- Error string;
+ Name string
+ Offset Offset
+ Error string
}
func (e DecodeError) String() string {
diff --git a/src/pkg/debug/dwarf/const.go b/src/pkg/debug/dwarf/const.go
index 808a80c8a..d73480cb2 100644
--- a/src/pkg/debug/dwarf/const.go
+++ b/src/pkg/debug/dwarf/const.go
@@ -12,78 +12,78 @@ import "strconv"
type Attr uint32
const (
- AttrSibling Attr = 0x01;
- AttrLocation Attr = 0x02;
- AttrName Attr = 0x03;
- AttrOrdering Attr = 0x09;
- AttrByteSize Attr = 0x0B;
- AttrBitOffset Attr = 0x0C;
- AttrBitSize Attr = 0x0D;
- AttrStmtList Attr = 0x10;
- AttrLowpc Attr = 0x11;
- AttrHighpc Attr = 0x12;
- AttrLanguage Attr = 0x13;
- AttrDiscr Attr = 0x15;
- AttrDiscrValue Attr = 0x16;
- AttrVisibility Attr = 0x17;
- AttrImport Attr = 0x18;
- AttrStringLength Attr = 0x19;
- AttrCommonRef Attr = 0x1A;
- AttrCompDir Attr = 0x1B;
- AttrConstValue Attr = 0x1C;
- AttrContainingType Attr = 0x1D;
- AttrDefaultValue Attr = 0x1E;
- AttrInline Attr = 0x20;
- AttrIsOptional Attr = 0x21;
- AttrLowerBound Attr = 0x22;
- AttrProducer Attr = 0x25;
- AttrPrototyped Attr = 0x27;
- AttrReturnAddr Attr = 0x2A;
- AttrStartScope Attr = 0x2C;
- AttrStrideSize Attr = 0x2E;
- AttrUpperBound Attr = 0x2F;
- AttrAbstractOrigin Attr = 0x31;
- AttrAccessibility Attr = 0x32;
- AttrAddrClass Attr = 0x33;
- AttrArtificial Attr = 0x34;
- AttrBaseTypes Attr = 0x35;
- AttrCalling Attr = 0x36;
- AttrCount Attr = 0x37;
- AttrDataMemberLoc Attr = 0x38;
- AttrDeclColumn Attr = 0x39;
- AttrDeclFile Attr = 0x3A;
- AttrDeclLine Attr = 0x3B;
- AttrDeclaration Attr = 0x3C;
- AttrDiscrList Attr = 0x3D;
- AttrEncoding Attr = 0x3E;
- AttrExternal Attr = 0x3F;
- AttrFrameBase Attr = 0x40;
- AttrFriend Attr = 0x41;
- AttrIdentifierCase Attr = 0x42;
- AttrMacroInfo Attr = 0x43;
- AttrNamelistItem Attr = 0x44;
- AttrPriority Attr = 0x45;
- AttrSegment Attr = 0x46;
- AttrSpecification Attr = 0x47;
- AttrStaticLink Attr = 0x48;
- AttrType Attr = 0x49;
- AttrUseLocation Attr = 0x4A;
- AttrVarParam Attr = 0x4B;
- AttrVirtuality Attr = 0x4C;
- AttrVtableElemLoc Attr = 0x4D;
- AttrAllocated Attr = 0x4E;
- AttrAssociated Attr = 0x4F;
- AttrDataLocation Attr = 0x50;
- AttrStride Attr = 0x51;
- AttrEntrypc Attr = 0x52;
- AttrUseUTF8 Attr = 0x53;
- AttrExtension Attr = 0x54;
- AttrRanges Attr = 0x55;
- AttrTrampoline Attr = 0x56;
- AttrCallColumn Attr = 0x57;
- AttrCallFile Attr = 0x58;
- AttrCallLine Attr = 0x59;
- AttrDescription Attr = 0x5A;
+ AttrSibling Attr = 0x01
+ AttrLocation Attr = 0x02
+ AttrName Attr = 0x03
+ AttrOrdering Attr = 0x09
+ AttrByteSize Attr = 0x0B
+ AttrBitOffset Attr = 0x0C
+ AttrBitSize Attr = 0x0D
+ AttrStmtList Attr = 0x10
+ AttrLowpc Attr = 0x11
+ AttrHighpc Attr = 0x12
+ AttrLanguage Attr = 0x13
+ AttrDiscr Attr = 0x15
+ AttrDiscrValue Attr = 0x16
+ AttrVisibility Attr = 0x17
+ AttrImport Attr = 0x18
+ AttrStringLength Attr = 0x19
+ AttrCommonRef Attr = 0x1A
+ AttrCompDir Attr = 0x1B
+ AttrConstValue Attr = 0x1C
+ AttrContainingType Attr = 0x1D
+ AttrDefaultValue Attr = 0x1E
+ AttrInline Attr = 0x20
+ AttrIsOptional Attr = 0x21
+ AttrLowerBound Attr = 0x22
+ AttrProducer Attr = 0x25
+ AttrPrototyped Attr = 0x27
+ AttrReturnAddr Attr = 0x2A
+ AttrStartScope Attr = 0x2C
+ AttrStrideSize Attr = 0x2E
+ AttrUpperBound Attr = 0x2F
+ AttrAbstractOrigin Attr = 0x31
+ AttrAccessibility Attr = 0x32
+ AttrAddrClass Attr = 0x33
+ AttrArtificial Attr = 0x34
+ AttrBaseTypes Attr = 0x35
+ AttrCalling Attr = 0x36
+ AttrCount Attr = 0x37
+ AttrDataMemberLoc Attr = 0x38
+ AttrDeclColumn Attr = 0x39
+ AttrDeclFile Attr = 0x3A
+ AttrDeclLine Attr = 0x3B
+ AttrDeclaration Attr = 0x3C
+ AttrDiscrList Attr = 0x3D
+ AttrEncoding Attr = 0x3E
+ AttrExternal Attr = 0x3F
+ AttrFrameBase Attr = 0x40
+ AttrFriend Attr = 0x41
+ AttrIdentifierCase Attr = 0x42
+ AttrMacroInfo Attr = 0x43
+ AttrNamelistItem Attr = 0x44
+ AttrPriority Attr = 0x45
+ AttrSegment Attr = 0x46
+ AttrSpecification Attr = 0x47
+ AttrStaticLink Attr = 0x48
+ AttrType Attr = 0x49
+ AttrUseLocation Attr = 0x4A
+ AttrVarParam Attr = 0x4B
+ AttrVirtuality Attr = 0x4C
+ AttrVtableElemLoc Attr = 0x4D
+ AttrAllocated Attr = 0x4E
+ AttrAssociated Attr = 0x4F
+ AttrDataLocation Attr = 0x50
+ AttrStride Attr = 0x51
+ AttrEntrypc Attr = 0x52
+ AttrUseUTF8 Attr = 0x53
+ AttrExtension Attr = 0x54
+ AttrRanges Attr = 0x55
+ AttrTrampoline Attr = 0x56
+ AttrCallColumn Attr = 0x57
+ AttrCallFile Attr = 0x58
+ AttrCallLine Attr = 0x59
+ AttrDescription Attr = 0x5A
)
var attrNames = [...]string{
@@ -163,22 +163,22 @@ var attrNames = [...]string{
func (a Attr) String() string {
if int(a) < len(attrNames) {
- s := attrNames[a];
+ s := attrNames[a]
if s != "" {
return s
}
}
- return strconv.Itoa(int(a));
+ return strconv.Itoa(int(a))
}
func (a Attr) GoString() string {
if int(a) < len(attrNames) {
- s := attrNames[a];
+ s := attrNames[a]
if s != "" {
return "dwarf.Attr" + s
}
}
- return "dwarf.Attr(" + strconv.Itoa64(int64(a)) + ")";
+ return "dwarf.Attr(" + strconv.Itoa64(int64(a)) + ")"
}
// A format is a DWARF data encoding format.
@@ -186,89 +186,89 @@ type format uint32
const (
// value formats
- formAddr format = 0x01;
- formDwarfBlock2 format = 0x03;
- formDwarfBlock4 format = 0x04;
- formData2 format = 0x05;
- formData4 format = 0x06;
- formData8 format = 0x07;
- formString format = 0x08;
- formDwarfBlock format = 0x09;
- formDwarfBlock1 format = 0x0A;
- formData1 format = 0x0B;
- formFlag format = 0x0C;
- formSdata format = 0x0D;
- formStrp format = 0x0E;
- formUdata format = 0x0F;
- formRefAddr format = 0x10;
- formRef1 format = 0x11;
- formRef2 format = 0x12;
- formRef4 format = 0x13;
- formRef8 format = 0x14;
- formRefUdata format = 0x15;
- formIndirect format = 0x16;
+ formAddr format = 0x01
+ formDwarfBlock2 format = 0x03
+ formDwarfBlock4 format = 0x04
+ formData2 format = 0x05
+ formData4 format = 0x06
+ formData8 format = 0x07
+ formString format = 0x08
+ formDwarfBlock format = 0x09
+ formDwarfBlock1 format = 0x0A
+ formData1 format = 0x0B
+ formFlag format = 0x0C
+ formSdata format = 0x0D
+ formStrp format = 0x0E
+ formUdata format = 0x0F
+ formRefAddr format = 0x10
+ formRef1 format = 0x11
+ formRef2 format = 0x12
+ formRef4 format = 0x13
+ formRef8 format = 0x14
+ formRefUdata format = 0x15
+ formIndirect format = 0x16
)
// A Tag is the classification (the type) of an Entry.
type Tag uint32
const (
- TagArrayType Tag = 0x01;
- TagClassType Tag = 0x02;
- TagEntryPoint Tag = 0x03;
- TagEnumerationType Tag = 0x04;
- TagFormalParameter Tag = 0x05;
- TagImportedDeclaration Tag = 0x08;
- TagLabel Tag = 0x0A;
- TagLexDwarfBlock Tag = 0x0B;
- TagMember Tag = 0x0D;
- TagPointerType Tag = 0x0F;
- TagReferenceType Tag = 0x10;
- TagCompileUnit Tag = 0x11;
- TagStringType Tag = 0x12;
- TagStructType Tag = 0x13;
- TagSubroutineType Tag = 0x15;
- TagTypedef Tag = 0x16;
- TagUnionType Tag = 0x17;
- TagUnspecifiedParameters Tag = 0x18;
- TagVariant Tag = 0x19;
- TagCommonDwarfBlock Tag = 0x1A;
- TagCommonInclusion Tag = 0x1B;
- TagInheritance Tag = 0x1C;
- TagInlinedSubroutine Tag = 0x1D;
- TagModule Tag = 0x1E;
- TagPtrToMemberType Tag = 0x1F;
- TagSetType Tag = 0x20;
- TagSubrangeType Tag = 0x21;
- TagWithStmt Tag = 0x22;
- TagAccessDeclaration Tag = 0x23;
- TagBaseType Tag = 0x24;
- TagCatchDwarfBlock Tag = 0x25;
- TagConstType Tag = 0x26;
- TagConstant Tag = 0x27;
- TagEnumerator Tag = 0x28;
- TagFileType Tag = 0x29;
- TagFriend Tag = 0x2A;
- TagNamelist Tag = 0x2B;
- TagNamelistItem Tag = 0x2C;
- TagPackedType Tag = 0x2D;
- TagSubprogram Tag = 0x2E;
- TagTemplateTypeParameter Tag = 0x2F;
- TagTemplateValueParameter Tag = 0x30;
- TagThrownType Tag = 0x31;
- TagTryDwarfBlock Tag = 0x32;
- TagVariantPart Tag = 0x33;
- TagVariable Tag = 0x34;
- TagVolatileType Tag = 0x35;
- TagDwarfProcedure Tag = 0x36;
- TagRestrictType Tag = 0x37;
- TagInterfaceType Tag = 0x38;
- TagNamespace Tag = 0x39;
- TagImportedModule Tag = 0x3A;
- TagUnspecifiedType Tag = 0x3B;
- TagPartialUnit Tag = 0x3C;
- TagImportedUnit Tag = 0x3D;
- TagMutableType Tag = 0x3E;
+ TagArrayType Tag = 0x01
+ TagClassType Tag = 0x02
+ TagEntryPoint Tag = 0x03
+ TagEnumerationType Tag = 0x04
+ TagFormalParameter Tag = 0x05
+ TagImportedDeclaration Tag = 0x08
+ TagLabel Tag = 0x0A
+ TagLexDwarfBlock Tag = 0x0B
+ TagMember Tag = 0x0D
+ TagPointerType Tag = 0x0F
+ TagReferenceType Tag = 0x10
+ TagCompileUnit Tag = 0x11
+ TagStringType Tag = 0x12
+ TagStructType Tag = 0x13
+ TagSubroutineType Tag = 0x15
+ TagTypedef Tag = 0x16
+ TagUnionType Tag = 0x17
+ TagUnspecifiedParameters Tag = 0x18
+ TagVariant Tag = 0x19
+ TagCommonDwarfBlock Tag = 0x1A
+ TagCommonInclusion Tag = 0x1B
+ TagInheritance Tag = 0x1C
+ TagInlinedSubroutine Tag = 0x1D
+ TagModule Tag = 0x1E
+ TagPtrToMemberType Tag = 0x1F
+ TagSetType Tag = 0x20
+ TagSubrangeType Tag = 0x21
+ TagWithStmt Tag = 0x22
+ TagAccessDeclaration Tag = 0x23
+ TagBaseType Tag = 0x24
+ TagCatchDwarfBlock Tag = 0x25
+ TagConstType Tag = 0x26
+ TagConstant Tag = 0x27
+ TagEnumerator Tag = 0x28
+ TagFileType Tag = 0x29
+ TagFriend Tag = 0x2A
+ TagNamelist Tag = 0x2B
+ TagNamelistItem Tag = 0x2C
+ TagPackedType Tag = 0x2D
+ TagSubprogram Tag = 0x2E
+ TagTemplateTypeParameter Tag = 0x2F
+ TagTemplateValueParameter Tag = 0x30
+ TagThrownType Tag = 0x31
+ TagTryDwarfBlock Tag = 0x32
+ TagVariantPart Tag = 0x33
+ TagVariable Tag = 0x34
+ TagVolatileType Tag = 0x35
+ TagDwarfProcedure Tag = 0x36
+ TagRestrictType Tag = 0x37
+ TagInterfaceType Tag = 0x38
+ TagNamespace Tag = 0x39
+ TagImportedModule Tag = 0x3A
+ TagUnspecifiedType Tag = 0x3B
+ TagPartialUnit Tag = 0x3C
+ TagImportedUnit Tag = 0x3D
+ TagMutableType Tag = 0x3E
)
var tagNames = [...]string{
@@ -332,22 +332,22 @@ var tagNames = [...]string{
func (t Tag) String() string {
if int(t) < len(tagNames) {
- s := tagNames[t];
+ s := tagNames[t]
if s != "" {
return s
}
}
- return strconv.Itoa(int(t));
+ return strconv.Itoa(int(t))
}
func (t Tag) GoString() string {
if int(t) < len(tagNames) {
- s := tagNames[t];
+ s := tagNames[t]
if s != "" {
return "dwarf.Tag" + s
}
}
- return "dwarf.Tag(" + strconv.Itoa64(int64(t)) + ")";
+ return "dwarf.Tag(" + strconv.Itoa64(int64(t)) + ")"
}
// Location expression operators.
@@ -356,78 +356,78 @@ func (t Tag) GoString() string {
// This package does not implement full expressions;
// the opPlusUconst operator is expected by the type parser.
const (
- opAddr = 0x03; /* 1 op, const addr */
- opDeref = 0x06;
- opConst1u = 0x08; /* 1 op, 1 byte const */
- opConst1s = 0x09; /* " signed */
- opConst2u = 0x0A; /* 1 op, 2 byte const */
- opConst2s = 0x0B; /* " signed */
- opConst4u = 0x0C; /* 1 op, 4 byte const */
- opConst4s = 0x0D; /* " signed */
- opConst8u = 0x0E; /* 1 op, 8 byte const */
- opConst8s = 0x0F; /* " signed */
- opConstu = 0x10; /* 1 op, LEB128 const */
- opConsts = 0x11; /* " signed */
- opDup = 0x12;
- opDrop = 0x13;
- opOver = 0x14;
- opPick = 0x15; /* 1 op, 1 byte stack index */
- opSwap = 0x16;
- opRot = 0x17;
- opXderef = 0x18;
- opAbs = 0x19;
- opAnd = 0x1A;
- opDiv = 0x1B;
- opMinus = 0x1C;
- opMod = 0x1D;
- opMul = 0x1E;
- opNeg = 0x1F;
- opNot = 0x20;
- opOr = 0x21;
- opPlus = 0x22;
- opPlusUconst = 0x23; /* 1 op, ULEB128 addend */
- opShl = 0x24;
- opShr = 0x25;
- opShra = 0x26;
- opXor = 0x27;
- opSkip = 0x2F; /* 1 op, signed 2-byte constant */
- opBra = 0x28; /* 1 op, signed 2-byte constant */
- opEq = 0x29;
- opGe = 0x2A;
- opGt = 0x2B;
- opLe = 0x2C;
- opLt = 0x2D;
- opNe = 0x2E;
- opLit0 = 0x30;
+ opAddr = 0x03 /* 1 op, const addr */
+ opDeref = 0x06
+ opConst1u = 0x08 /* 1 op, 1 byte const */
+ opConst1s = 0x09 /* " signed */
+ opConst2u = 0x0A /* 1 op, 2 byte const */
+ opConst2s = 0x0B /* " signed */
+ opConst4u = 0x0C /* 1 op, 4 byte const */
+ opConst4s = 0x0D /* " signed */
+ opConst8u = 0x0E /* 1 op, 8 byte const */
+ opConst8s = 0x0F /* " signed */
+ opConstu = 0x10 /* 1 op, LEB128 const */
+ opConsts = 0x11 /* " signed */
+ opDup = 0x12
+ opDrop = 0x13
+ opOver = 0x14
+ opPick = 0x15 /* 1 op, 1 byte stack index */
+ opSwap = 0x16
+ opRot = 0x17
+ opXderef = 0x18
+ opAbs = 0x19
+ opAnd = 0x1A
+ opDiv = 0x1B
+ opMinus = 0x1C
+ opMod = 0x1D
+ opMul = 0x1E
+ opNeg = 0x1F
+ opNot = 0x20
+ opOr = 0x21
+ opPlus = 0x22
+ opPlusUconst = 0x23 /* 1 op, ULEB128 addend */
+ opShl = 0x24
+ opShr = 0x25
+ opShra = 0x26
+ opXor = 0x27
+ opSkip = 0x2F /* 1 op, signed 2-byte constant */
+ opBra = 0x28 /* 1 op, signed 2-byte constant */
+ opEq = 0x29
+ opGe = 0x2A
+ opGt = 0x2B
+ opLe = 0x2C
+ opLt = 0x2D
+ opNe = 0x2E
+ opLit0 = 0x30
/* OpLitN = OpLit0 + N for N = 0..31 */
- opReg0 = 0x50;
+ opReg0 = 0x50
/* OpRegN = OpReg0 + N for N = 0..31 */
- opBreg0 = 0x70; /* 1 op, signed LEB128 constant */
+ opBreg0 = 0x70 /* 1 op, signed LEB128 constant */
/* OpBregN = OpBreg0 + N for N = 0..31 */
- opRegx = 0x90; /* 1 op, ULEB128 register */
- opFbreg = 0x91; /* 1 op, SLEB128 offset */
- opBregx = 0x92; /* 2 op, ULEB128 reg; SLEB128 off */
- opPiece = 0x93; /* 1 op, ULEB128 size of piece */
- opDerefSize = 0x94; /* 1-byte size of data retrieved */
- opXderefSize = 0x95; /* 1-byte size of data retrieved */
- opNop = 0x96;
+ opRegx = 0x90 /* 1 op, ULEB128 register */
+ opFbreg = 0x91 /* 1 op, SLEB128 offset */
+ opBregx = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */
+ opPiece = 0x93 /* 1 op, ULEB128 size of piece */
+ opDerefSize = 0x94 /* 1-byte size of data retrieved */
+ opXderefSize = 0x95 /* 1-byte size of data retrieved */
+ opNop = 0x96
/* next four new in Dwarf v3 */
- opPushObjAddr = 0x97;
- opCall2 = 0x98; /* 2-byte offset of DIE */
- opCall4 = 0x99; /* 4-byte offset of DIE */
- opCallRef = 0x9A; /* 4- or 8- byte offset of DIE */
+ opPushObjAddr = 0x97
+ opCall2 = 0x98 /* 2-byte offset of DIE */
+ opCall4 = 0x99 /* 4-byte offset of DIE */
+ opCallRef = 0x9A /* 4- or 8- byte offset of DIE */
/* 0xE0-0xFF reserved for user-specific */
)
// Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.
const (
- encAddress = 0x01;
- encBoolean = 0x02;
- encComplexFloat = 0x03;
- encFloat = 0x04;
- encSigned = 0x05;
- encSignedChar = 0x06;
- encUnsigned = 0x07;
- encUnsignedChar = 0x08;
- encImaginaryFloat = 0x09;
+ encAddress = 0x01
+ encBoolean = 0x02
+ encComplexFloat = 0x03
+ encFloat = 0x04
+ encSigned = 0x05
+ encSignedChar = 0x06
+ encUnsigned = 0x07
+ encUnsignedChar = 0x08
+ encImaginaryFloat = 0x09
)
diff --git a/src/pkg/debug/dwarf/entry.go b/src/pkg/debug/dwarf/entry.go
index a4f013c39..5f739c426 100644
--- a/src/pkg/debug/dwarf/entry.go
+++ b/src/pkg/debug/dwarf/entry.go
@@ -14,14 +14,14 @@ import "os"
// a single entry's description: a sequence of attributes
type abbrev struct {
- tag Tag;
- children bool;
- field []afield;
+ tag Tag
+ children bool
+ field []afield
}
type afield struct {
- attr Attr;
- fmt format;
+ attr Attr
+ fmt format
}
// a map from entry format ids to their descriptions
@@ -34,74 +34,74 @@ func (d *Data) parseAbbrev(off uint32) (abbrevTable, os.Error) {
return m, nil
}
- data := d.abbrev;
+ data := d.abbrev
if off > uint32(len(data)) {
data = nil
} else {
data = data[off:]
}
- b := makeBuf(d, "abbrev", 0, data, 0);
+ b := makeBuf(d, "abbrev", 0, data, 0)
// Error handling is simplified by the buf getters
// returning an endless stream of 0s after an error.
- m := make(abbrevTable);
+ m := make(abbrevTable)
for {
// Table ends with id == 0.
- id := uint32(b.uint());
+ id := uint32(b.uint())
if id == 0 {
break
}
// Walk over attributes, counting.
- n := 0;
- b1 := b; // Read from copy of b.
- b1.uint();
- b1.uint8();
+ n := 0
+ b1 := b // Read from copy of b.
+ b1.uint()
+ b1.uint8()
for {
- tag := b1.uint();
- fmt := b1.uint();
+ tag := b1.uint()
+ fmt := b1.uint()
if tag == 0 && fmt == 0 {
break
}
- n++;
+ n++
}
if b1.err != nil {
return nil, b1.err
}
// Walk over attributes again, this time writing them down.
- var a abbrev;
- a.tag = Tag(b.uint());
- a.children = b.uint8() != 0;
- a.field = make([]afield, n);
+ var a abbrev
+ a.tag = Tag(b.uint())
+ a.children = b.uint8() != 0
+ a.field = make([]afield, n)
for i := range a.field {
- a.field[i].attr = Attr(b.uint());
- a.field[i].fmt = format(b.uint());
+ a.field[i].attr = Attr(b.uint())
+ a.field[i].fmt = format(b.uint())
}
- b.uint();
- b.uint();
+ b.uint()
+ b.uint()
- m[id] = a;
+ m[id] = a
}
if b.err != nil {
return nil, b.err
}
- d.abbrevCache[off] = m;
- return m, nil;
+ d.abbrevCache[off] = m
+ return m, nil
}
// An entry is a sequence of attribute/value pairs.
type Entry struct {
- Offset Offset; // offset of Entry in DWARF info
- Tag Tag; // tag (kind of Entry)
- Children bool; // whether Entry is followed by children
- Field []Field;
+ Offset Offset // offset of Entry in DWARF info
+ Tag Tag // tag (kind of Entry)
+ Children bool // whether Entry is followed by children
+ Field []Field
}
// A Field is a single attribute/value pair in an Entry.
type Field struct {
- Attr Attr;
- Val interface{};
+ Attr Attr
+ Val interface{}
}
// Val returns the value associated with attribute Attr in Entry,
@@ -117,7 +117,7 @@ func (e *Entry) Val(a Attr) interface{} {
return f.Val
}
}
- return nil;
+ return nil
}
// An Offset represents the location of an Entry within the DWARF info.
@@ -127,25 +127,25 @@ type Offset uint32
// Entry reads a single entry from buf, decoding
// according to the given abbreviation table.
func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry {
- off := b.off;
- id := uint32(b.uint());
+ off := b.off
+ id := uint32(b.uint())
if id == 0 {
return &Entry{}
}
- a, ok := atab[id];
+ a, ok := atab[id]
if !ok {
- b.error("unknown abbreviation table index");
- return nil;
+ b.error("unknown abbreviation table index")
+ return nil
}
e := &Entry{
Offset: off,
Tag: a.tag,
Children: a.children,
Field: make([]Field, len(a.field)),
- };
+ }
for i := range e.Field {
- e.Field[i].Attr = a.field[i].attr;
- fmt := a.field[i].fmt;
+ e.Field[i].Attr = a.field[i].attr
+ fmt := a.field[i].fmt
if fmt == formIndirect {
fmt = format(b.uint())
}
@@ -204,24 +204,24 @@ func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry {
case formString:
val = b.string()
case formStrp:
- off := b.uint32(); // offset into .debug_str
+ off := b.uint32() // offset into .debug_str
if b.err != nil {
return nil
}
- b1 := makeBuf(b.dwarf, "str", 0, b.dwarf.str, 0);
- b1.skip(int(off));
- val = b1.string();
+ b1 := makeBuf(b.dwarf, "str", 0, b.dwarf.str, 0)
+ b1.skip(int(off))
+ val = b1.string()
if b1.err != nil {
- b.err = b1.err;
- return nil;
+ b.err = b1.err
+ return nil
}
}
- e.Field[i].Val = val;
+ e.Field[i].Val = val
}
if b.err != nil {
return nil
}
- return e;
+ return e
}
// A Reader allows reading Entry structures from a DWARF ``info'' section.
@@ -230,58 +230,58 @@ func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry {
// If an entry has children, its Children field will be true, and the children
// follow, terminated by an Entry with Tag 0.
type Reader struct {
- b buf;
- d *Data;
- err os.Error;
- unit int;
- lastChildren bool; // .Children of last entry returned by Next
- lastSibling Offset; // .Val(AttrSibling) of last entry returned by Next
+ b buf
+ d *Data
+ err os.Error
+ unit int
+ lastChildren bool // .Children of last entry returned by Next
+ lastSibling Offset // .Val(AttrSibling) of last entry returned by Next
}
// Reader returns a new Reader for Data.
// The reader is positioned at byte offset 0 in the DWARF ``info'' section.
func (d *Data) Reader() *Reader {
- r := &Reader{d: d};
- r.Seek(0);
- return r;
+ r := &Reader{d: d}
+ r.Seek(0)
+ return r
}
// Seek positions the Reader at offset off in the encoded entry stream.
// Offset 0 can be used to denote the first entry.
func (r *Reader) Seek(off Offset) {
- d := r.d;
- r.err = nil;
- r.lastChildren = false;
+ d := r.d
+ r.err = nil
+ r.lastChildren = false
if off == 0 {
if len(d.unit) == 0 {
return
}
- u := &d.unit[0];
- r.unit = 0;
- r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize);
- return;
+ u := &d.unit[0]
+ r.unit = 0
+ r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize)
+ return
}
// TODO(rsc): binary search (maybe a new package)
- var i int;
- var u *unit;
+ var i int
+ var u *unit
for i = range d.unit {
- u = &d.unit[i];
+ u = &d.unit[i]
if u.off <= off && off < u.off+Offset(len(u.data)) {
- r.unit = i;
- r.b = makeBuf(r.d, "info", off, u.data[off-u.off:], u.addrsize);
- return;
+ r.unit = i
+ r.b = makeBuf(r.d, "info", off, u.data[off-u.off:], u.addrsize)
+ return
}
}
- r.err = os.NewError("offset out of range");
+ r.err = os.NewError("offset out of range")
}
// maybeNextUnit advances to the next unit if this one is finished.
func (r *Reader) maybeNextUnit() {
for len(r.b.data) == 0 && r.unit+1 < len(r.d.unit) {
- r.unit++;
- u := &r.d.unit[r.unit];
- r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize);
+ r.unit++
+ u := &r.d.unit[r.unit]
+ r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize)
}
}
@@ -293,25 +293,25 @@ func (r *Reader) Next() (*Entry, os.Error) {
if r.err != nil {
return nil, r.err
}
- r.maybeNextUnit();
+ r.maybeNextUnit()
if len(r.b.data) == 0 {
return nil, nil
}
- u := &r.d.unit[r.unit];
- e := r.b.entry(u.atable, u.base);
+ u := &r.d.unit[r.unit]
+ e := r.b.entry(u.atable, u.base)
if r.b.err != nil {
- r.err = r.b.err;
- return nil, r.err;
+ r.err = r.b.err
+ return nil, r.err
}
if e != nil {
- r.lastChildren = e.Children;
+ r.lastChildren = e.Children
if r.lastChildren {
r.lastSibling, _ = e.Val(AttrSibling).(Offset)
}
} else {
r.lastChildren = false
}
- return e, nil;
+ return e, nil
}
// SkipChildren skips over the child entries associated with
@@ -327,12 +327,12 @@ func (r *Reader) SkipChildren() {
// sibling, so we can avoid decoding the
// child subtrees.
if r.lastSibling >= r.b.off {
- r.Seek(r.lastSibling);
- return;
+ r.Seek(r.lastSibling)
+ return
}
for {
- e, err := r.Next();
+ e, err := r.Next()
if err != nil || e == nil || e.Tag == 0 {
break
}
diff --git a/src/pkg/debug/dwarf/open.go b/src/pkg/debug/dwarf/open.go
index a5cb1a103..3a1b00311 100644
--- a/src/pkg/debug/dwarf/open.go
+++ b/src/pkg/debug/dwarf/open.go
@@ -8,29 +8,29 @@
package dwarf
import (
- "encoding/binary";
- "os";
+ "encoding/binary"
+ "os"
)
// Data represents the DWARF debugging information
// loaded from an executable file (for example, an ELF or Mach-O executable).
type Data struct {
// raw data
- abbrev []byte;
- aranges []byte;
- frame []byte;
- info []byte;
- line []byte;
- pubnames []byte;
- ranges []byte;
- str []byte;
+ abbrev []byte
+ aranges []byte
+ frame []byte
+ info []byte
+ line []byte
+ pubnames []byte
+ ranges []byte
+ str []byte
// parsed data
- abbrevCache map[uint32]abbrevTable;
- addrsize int;
- order binary.ByteOrder;
- typeCache map[Offset]Type;
- unit []unit;
+ abbrevCache map[uint32]abbrevTable
+ addrsize int
+ order binary.ByteOrder
+ typeCache map[Offset]Type
+ unit []unit
}
// New returns a new Data object initialized from the given parameters.
@@ -52,14 +52,14 @@ func New(abbrev, aranges, frame, info, line, pubnames, ranges, str []byte) (*Dat
str: str,
abbrevCache: make(map[uint32]abbrevTable),
typeCache: make(map[Offset]Type),
- };
+ }
// Sniff .debug_info to figure out byte order.
// bytes 4:6 are the version, a tiny 16-bit number (1, 2, 3).
if len(d.info) < 6 {
return nil, DecodeError{"info", Offset(len(d.info)), "too short"}
}
- x, y := d.info[4], d.info[5];
+ x, y := d.info[4], d.info[5]
switch {
case x == 0 && y == 0:
return nil, DecodeError{"info", 4, "unsupported version 0"}
@@ -71,10 +71,10 @@ func New(abbrev, aranges, frame, info, line, pubnames, ranges, str []byte) (*Dat
return nil, DecodeError{"info", 4, "cannot determine byte order"}
}
- u, err := d.parseUnits();
+ u, err := d.parseUnits()
if err != nil {
return nil, err
}
- d.unit = u;
- return d, nil;
+ d.unit = u
+ return d, nil
}
diff --git a/src/pkg/debug/dwarf/type.go b/src/pkg/debug/dwarf/type.go
index bf57fd4bf..5d4a51653 100644
--- a/src/pkg/debug/dwarf/type.go
+++ b/src/pkg/debug/dwarf/type.go
@@ -9,259 +9,259 @@
package dwarf
import (
- "os";
- "strconv";
+ "os"
+ "strconv"
)
// A Type conventionally represents a pointer to any of the
// specific Type structures (CharType, StructType, etc.).
type Type interface {
- Common() *CommonType;
- String() string;
- Size() int64;
+ Common() *CommonType
+ String() string
+ Size() int64
}
// A CommonType holds fields common to multiple types.
// If a field is not known or not applicable for a given type,
// the zero value is used.
type CommonType struct {
- ByteSize int64; // size of value of this type, in bytes
- Name string; // name that can be used to refer to type
+ ByteSize int64 // size of value of this type, in bytes
+ Name string // name that can be used to refer to type
}
-func (c *CommonType) Common() *CommonType { return c }
+func (c *CommonType) Common() *CommonType { return c }
-func (c *CommonType) Size() int64 { return c.ByteSize }
+func (c *CommonType) Size() int64 { return c.ByteSize }
// Basic types
// A BasicType holds fields common to all basic types.
type BasicType struct {
- CommonType;
- BitSize int64;
- BitOffset int64;
+ CommonType
+ BitSize int64
+ BitOffset int64
}
-func (b *BasicType) Basic() *BasicType { return b }
+func (b *BasicType) Basic() *BasicType { return b }
func (t *BasicType) String() string {
if t.Name != "" {
return t.Name
}
- return "?";
+ return "?"
}
// A CharType represents a signed character type.
type CharType struct {
- BasicType;
+ BasicType
}
// A UcharType represents an unsigned character type.
type UcharType struct {
- BasicType;
+ BasicType
}
// An IntType represents a signed integer type.
type IntType struct {
- BasicType;
+ BasicType
}
// A UintType represents an unsigned integer type.
type UintType struct {
- BasicType;
+ BasicType
}
// A FloatType represents a floating point type.
type FloatType struct {
- BasicType;
+ BasicType
}
// A ComplexType represents a complex floating point type.
type ComplexType struct {
- BasicType;
+ BasicType
}
// A BoolType represents a boolean type.
type BoolType struct {
- BasicType;
+ BasicType
}
// An AddrType represents a machine address type.
type AddrType struct {
- BasicType;
+ BasicType
}
// qualifiers
// A QualType represents a type that has the C/C++ "const", "restrict", or "volatile" qualifier.
type QualType struct {
- CommonType;
- Qual string;
- Type Type;
+ CommonType
+ Qual string
+ Type Type
}
-func (t *QualType) String() string { return t.Qual + " " + t.Type.String() }
+func (t *QualType) String() string { return t.Qual + " " + t.Type.String() }
-func (t *QualType) Size() int64 { return t.Type.Size() }
+func (t *QualType) Size() int64 { return t.Type.Size() }
// An ArrayType represents a fixed size array type.
type ArrayType struct {
- CommonType;
- Type Type;
- StrideBitSize int64; // if > 0, number of bits to hold each element
- Count int64; // if == -1, an incomplete array, like char x[].
+ CommonType
+ Type Type
+ StrideBitSize int64 // if > 0, number of bits to hold each element
+ Count int64 // if == -1, an incomplete array, like char x[].
}
func (t *ArrayType) String() string {
return "[" + strconv.Itoa64(t.Count) + "]" + t.Type.String()
}
-func (t *ArrayType) Size() int64 { return t.Count * t.Type.Size() }
+func (t *ArrayType) Size() int64 { return t.Count * t.Type.Size() }
// A VoidType represents the C void type.
type VoidType struct {
- CommonType;
+ CommonType
}
-func (t *VoidType) String() string { return "void" }
+func (t *VoidType) String() string { return "void" }
// A PtrType represents a pointer type.
type PtrType struct {
- CommonType;
- Type Type;
+ CommonType
+ Type Type
}
-func (t *PtrType) String() string { return "*" + t.Type.String() }
+func (t *PtrType) String() string { return "*" + t.Type.String() }
// A StructType represents a struct, union, or C++ class type.
type StructType struct {
- CommonType;
- StructName string;
- Kind string; // "struct", "union", or "class".
- Field []*StructField;
- Incomplete bool; // if true, struct, union, class is declared but not defined
+ CommonType
+ StructName string
+ Kind string // "struct", "union", or "class".
+ Field []*StructField
+ Incomplete bool // if true, struct, union, class is declared but not defined
}
// A StructField represents a field in a struct, union, or C++ class type.
type StructField struct {
- Name string;
- Type Type;
- ByteOffset int64;
- ByteSize int64;
- BitOffset int64; // within the ByteSize bytes at ByteOffset
- BitSize int64; // zero if not a bit field
+ Name string
+ Type Type
+ ByteOffset int64
+ ByteSize int64
+ BitOffset int64 // within the ByteSize bytes at ByteOffset
+ BitSize int64 // zero if not a bit field
}
func (t *StructType) String() string {
if t.StructName != "" {
return t.Kind + " " + t.StructName
}
- return t.Defn();
+ return t.Defn()
}
func (t *StructType) Defn() string {
- s := t.Kind;
+ s := t.Kind
if t.StructName != "" {
s += " " + t.StructName
}
if t.Incomplete {
- s += " /*incomplete*/";
- return s;
+ s += " /*incomplete*/"
+ return s
}
- s += " {";
+ s += " {"
for i, f := range t.Field {
if i > 0 {
s += "; "
}
- s += f.Name + " " + f.Type.String();
- s += "@" + strconv.Itoa64(f.ByteOffset);
+ s += f.Name + " " + f.Type.String()
+ s += "@" + strconv.Itoa64(f.ByteOffset)
if f.BitSize > 0 {
- s += " : " + strconv.Itoa64(f.BitSize);
- s += "@" + strconv.Itoa64(f.BitOffset);
+ s += " : " + strconv.Itoa64(f.BitSize)
+ s += "@" + strconv.Itoa64(f.BitOffset)
}
}
- s += "}";
- return s;
+ s += "}"
+ return s
}
// An EnumType represents an enumerated type.
// The only indication of its native integer type is its ByteSize
// (inside CommonType).
type EnumType struct {
- CommonType;
- EnumName string;
- Val []*EnumValue;
+ CommonType
+ EnumName string
+ Val []*EnumValue
}
// An EnumValue represents a single enumeration value.
type EnumValue struct {
- Name string;
- Val int64;
+ Name string
+ Val int64
}
func (t *EnumType) String() string {
- s := "enum";
+ s := "enum"
if t.EnumName != "" {
s += " " + t.EnumName
}
- s += " {";
+ s += " {"
for i, v := range t.Val {
if i > 0 {
s += "; "
}
- s += v.Name + "=" + strconv.Itoa64(v.Val);
+ s += v.Name + "=" + strconv.Itoa64(v.Val)
}
- s += "}";
- return s;
+ s += "}"
+ return s
}
// A FuncType represents a function type.
type FuncType struct {
- CommonType;
- ReturnType Type;
- ParamType []Type;
+ CommonType
+ ReturnType Type
+ ParamType []Type
}
func (t *FuncType) String() string {
- s := "func(";
+ s := "func("
for i, t := range t.ParamType {
if i > 0 {
s += ", "
}
- s += t.String();
+ s += t.String()
}
- s += ")";
+ s += ")"
if t.ReturnType != nil {
s += " " + t.ReturnType.String()
}
- return s;
+ return s
}
// A DotDotDotType represents the variadic ... function parameter.
type DotDotDotType struct {
- CommonType;
+ CommonType
}
-func (t *DotDotDotType) String() string { return "..." }
+func (t *DotDotDotType) String() string { return "..." }
// A TypedefType represents a named type.
type TypedefType struct {
- CommonType;
- Type Type;
+ CommonType
+ Type Type
}
-func (t *TypedefType) String() string { return t.Name }
+func (t *TypedefType) String() string { return t.Name }
-func (t *TypedefType) Size() int64 { return t.Type.Size() }
+func (t *TypedefType) Size() int64 { return t.Type.Size() }
func (d *Data) Type(off Offset) (Type, os.Error) {
if t, ok := d.typeCache[off]; ok {
return t, nil
}
- r := d.Reader();
- r.Seek(off);
- e, err := r.Next();
+ r := d.Reader()
+ r.Seek(off)
+ e, err := r.Next()
if err != nil {
return nil, err
}
@@ -272,42 +272,42 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Parse type from Entry.
// Must always set d.typeCache[off] before calling
// d.Type recursively, to handle circular types correctly.
- var typ Type;
+ var typ Type
// Get next child; set err if error happens.
next := func() *Entry {
if !e.Children {
return nil
}
- kid, err1 := r.Next();
+ kid, err1 := r.Next()
if err1 != nil {
- err = err1;
- return nil;
+ err = err1
+ return nil
}
if kid == nil {
- err = DecodeError{"info", r.b.off, "unexpected end of DWARF entries"};
- return nil;
+ err = DecodeError{"info", r.b.off, "unexpected end of DWARF entries"}
+ return nil
}
if kid.Tag == 0 {
return nil
}
- return kid;
- };
+ return kid
+ }
// Get Type referred to by Entry's AttrType field.
// Set err if error happens. Not having a type is an error.
typeOf := func(e *Entry) Type {
- toff, ok := e.Val(AttrType).(Offset);
+ toff, ok := e.Val(AttrType).(Offset)
if !ok {
// It appears that no Type means "void".
return new(VoidType)
}
- var t Type;
+ var t Type
if t, err = d.Type(toff); err != nil {
return nil
}
- return t;
- };
+ return t
+ }
switch e.Tag {
case TagArrayType:
@@ -319,24 +319,24 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Children:
// TagSubrangeType or TagEnumerationType giving one dimension.
// dimensions are in left to right order.
- t := new(ArrayType);
- typ = t;
- d.typeCache[off] = t;
+ t := new(ArrayType)
+ typ = t
+ d.typeCache[off] = t
if t.Type = typeOf(e); err != nil {
goto Error
}
- t.StrideBitSize, _ = e.Val(AttrStrideSize).(int64);
+ t.StrideBitSize, _ = e.Val(AttrStrideSize).(int64)
// Accumulate dimensions,
- ndim := 0;
+ ndim := 0
for kid := next(); kid != nil; kid = next() {
// TODO(rsc): Can also be TagEnumerationType
// but haven't seen that in the wild yet.
switch kid.Tag {
case TagSubrangeType:
- max, ok := kid.Val(AttrUpperBound).(int64);
+ max, ok := kid.Val(AttrUpperBound).(int64)
if !ok {
- max = -2 // Count == -1, as in x[].
+ max = -2 // Count == -1, as in x[].
}
if ndim == 0 {
t.Count = max + 1
@@ -345,15 +345,15 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Create new array type underneath this one.
t.Type = &ArrayType{Type: t.Type, Count: max + 1}
}
- ndim++;
+ ndim++
case TagEnumerationType:
- err = DecodeError{"info", kid.Offset, "cannot handle enumeration type as array bound"};
- goto Error;
+ err = DecodeError{"info", kid.Offset, "cannot handle enumeration type as array bound"}
+ goto Error
}
}
if ndim == 0 {
- err = DecodeError{"info", e.Offset, "missing dimension for array"};
- goto Error;
+ err = DecodeError{"info", e.Offset, "missing dimension for array"}
+ goto Error
}
case TagBaseType:
@@ -364,16 +364,16 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// AttrByteSize: size of type in bytes [required]
// AttrBitOffset: for sub-byte types, size in bits
// AttrBitSize: for sub-byte types, bit offset of high order bit in the AttrByteSize bytes
- name, _ := e.Val(AttrName).(string);
- enc, ok := e.Val(AttrEncoding).(int64);
+ name, _ := e.Val(AttrName).(string)
+ enc, ok := e.Val(AttrEncoding).(int64)
if !ok {
- err = DecodeError{"info", e.Offset, "missing encoding attribute for " + name};
- goto Error;
+ err = DecodeError{"info", e.Offset, "missing encoding attribute for " + name}
+ goto Error
}
switch enc {
default:
- err = DecodeError{"info", e.Offset, "unrecognized encoding attribute value"};
- goto Error;
+ err = DecodeError{"info", e.Offset, "unrecognized encoding attribute value"}
+ goto Error
case encAddress:
typ = new(AddrType)
@@ -392,13 +392,13 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
case encUnsignedChar:
typ = new(UcharType)
}
- d.typeCache[off] = typ;
+ d.typeCache[off] = typ
t := typ.(interface {
- Basic() *BasicType;
- }).Basic();
- t.Name = name;
- t.BitSize, _ = e.Val(AttrBitSize).(int64);
- t.BitOffset, _ = e.Val(AttrBitOffset).(int64);
+ Basic() *BasicType
+ }).Basic()
+ t.Name = name
+ t.BitSize, _ = e.Val(AttrBitSize).(int64)
+ t.BitOffset, _ = e.Val(AttrBitOffset).(int64)
case TagClassType, TagStructType, TagUnionType:
// Structure, union, or class type. (DWARF v2 §5.5)
@@ -415,9 +415,9 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// AttrBitSize: bit size for bit fields
// AttrDataMemberLoc: location within struct [required for struct, class]
// There is much more to handle C++, all ignored for now.
- t := new(StructType);
- typ = t;
- d.typeCache[off] = t;
+ t := new(StructType)
+ typ = t
+ d.typeCache[off] = t
switch e.Tag {
case TagClassType:
t.Kind = "class"
@@ -426,41 +426,41 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
case TagUnionType:
t.Kind = "union"
}
- t.StructName, _ = e.Val(AttrName).(string);
- t.Incomplete = e.Val(AttrDeclaration) != nil;
- t.Field = make([]*StructField, 0, 8);
+ t.StructName, _ = e.Val(AttrName).(string)
+ t.Incomplete = e.Val(AttrDeclaration) != nil
+ t.Field = make([]*StructField, 0, 8)
for kid := next(); kid != nil; kid = next() {
if kid.Tag == TagMember {
- f := new(StructField);
+ f := new(StructField)
if f.Type = typeOf(kid); err != nil {
goto Error
}
if loc, ok := kid.Val(AttrDataMemberLoc).([]byte); ok {
- b := makeBuf(d, "location", 0, loc, d.addrsize);
+ b := makeBuf(d, "location", 0, loc, d.addrsize)
if b.uint8() != opPlusUconst {
- err = DecodeError{"info", kid.Offset, "unexpected opcode"};
- goto Error;
+ err = DecodeError{"info", kid.Offset, "unexpected opcode"}
+ goto Error
}
- f.ByteOffset = int64(b.uint());
+ f.ByteOffset = int64(b.uint())
if b.err != nil {
- err = b.err;
- goto Error;
+ err = b.err
+ goto Error
}
}
- f.Name, _ = kid.Val(AttrName).(string);
- f.ByteSize, _ = kid.Val(AttrByteSize).(int64);
- f.BitOffset, _ = kid.Val(AttrBitOffset).(int64);
- f.BitSize, _ = kid.Val(AttrBitSize).(int64);
- n := len(t.Field);
+ f.Name, _ = kid.Val(AttrName).(string)
+ f.ByteSize, _ = kid.Val(AttrByteSize).(int64)
+ f.BitOffset, _ = kid.Val(AttrBitOffset).(int64)
+ f.BitSize, _ = kid.Val(AttrBitSize).(int64)
+ n := len(t.Field)
if n >= cap(t.Field) {
- fld := make([]*StructField, n, n*2);
+ fld := make([]*StructField, n, n*2)
for i, f := range t.Field {
fld[i] = f
}
- t.Field = fld;
+ t.Field = fld
}
- t.Field = t.Field[0 : n+1];
- t.Field[n] = f;
+ t.Field = t.Field[0 : n+1]
+ t.Field[n] = f
}
}
@@ -468,9 +468,9 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Type modifier (DWARF v2 §5.2)
// Attributes:
// AttrType: subtype
- t := new(QualType);
- typ = t;
- d.typeCache[off] = t;
+ t := new(QualType)
+ typ = t
+ d.typeCache[off] = t
if t.Type = typeOf(e); err != nil {
goto Error
}
@@ -492,26 +492,26 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// TagEnumerator:
// AttrName: name of constant
// AttrConstValue: value of constant
- t := new(EnumType);
- typ = t;
- d.typeCache[off] = t;
- t.EnumName, _ = e.Val(AttrName).(string);
- t.Val = make([]*EnumValue, 0, 8);
+ t := new(EnumType)
+ typ = t
+ d.typeCache[off] = t
+ t.EnumName, _ = e.Val(AttrName).(string)
+ t.Val = make([]*EnumValue, 0, 8)
for kid := next(); kid != nil; kid = next() {
if kid.Tag == TagEnumerator {
- f := new(EnumValue);
- f.Name, _ = kid.Val(AttrName).(string);
- f.Val, _ = kid.Val(AttrConstValue).(int64);
- n := len(t.Val);
+ f := new(EnumValue)
+ f.Name, _ = kid.Val(AttrName).(string)
+ f.Val, _ = kid.Val(AttrConstValue).(int64)
+ n := len(t.Val)
if n >= cap(t.Val) {
- val := make([]*EnumValue, n, n*2);
+ val := make([]*EnumValue, n, n*2)
for i, f := range t.Val {
val[i] = f
}
- t.Val = val;
+ t.Val = val
}
- t.Val = t.Val[0 : n+1];
- t.Val[n] = f;
+ t.Val = t.Val[0 : n+1]
+ t.Val[n] = f
}
}
@@ -520,14 +520,14 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Attributes:
// AttrType: subtype [not required! void* has no AttrType]
// AttrAddrClass: address class [ignored]
- t := new(PtrType);
- typ = t;
- d.typeCache[off] = t;
+ t := new(PtrType)
+ typ = t
+ d.typeCache[off] = t
if e.Val(AttrType) == nil {
- t.Type = &VoidType{};
- break;
+ t.Type = &VoidType{}
+ break
}
- t.Type = typeOf(e);
+ t.Type = typeOf(e)
case TagSubroutineType:
// Subroutine type. (DWARF v2 §5.7)
@@ -539,15 +539,15 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// TagFormalParameter: typed parameter
// AttrType: type of parameter
// TagUnspecifiedParameter: final ...
- t := new(FuncType);
- typ = t;
- d.typeCache[off] = t;
+ t := new(FuncType)
+ typ = t
+ d.typeCache[off] = t
if t.ReturnType = typeOf(e); err != nil {
goto Error
}
- t.ParamType = make([]Type, 0, 8);
+ t.ParamType = make([]Type, 0, 8)
for kid := next(); kid != nil; kid = next() {
- var tkid Type;
+ var tkid Type
switch kid.Tag {
default:
continue
@@ -558,16 +558,16 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
case TagUnspecifiedParameters:
tkid = &DotDotDotType{}
}
- n := len(t.ParamType);
+ n := len(t.ParamType)
if n >= cap(t.ParamType) {
- param := make([]Type, n, n*2);
+ param := make([]Type, n, n*2)
for i, t := range t.ParamType {
param[i] = t
}
- t.ParamType = param;
+ t.ParamType = param
}
- t.ParamType = t.ParamType[0 : n+1];
- t.ParamType[n] = tkid;
+ t.ParamType = t.ParamType[0 : n+1]
+ t.ParamType[n] = tkid
}
case TagTypedef:
@@ -575,29 +575,29 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
// Attributes:
// AttrName: name [required]
// AttrType: type definition [required]
- t := new(TypedefType);
- typ = t;
- d.typeCache[off] = t;
- t.Name, _ = e.Val(AttrName).(string);
- t.Type = typeOf(e);
+ t := new(TypedefType)
+ typ = t
+ d.typeCache[off] = t
+ t.Name, _ = e.Val(AttrName).(string)
+ t.Type = typeOf(e)
}
if err != nil {
goto Error
}
- b, ok := e.Val(AttrByteSize).(int64);
+ b, ok := e.Val(AttrByteSize).(int64)
if !ok {
b = -1
}
- typ.Common().ByteSize = b;
+ typ.Common().ByteSize = b
- return typ, nil;
+ return typ, nil
Error:
// If the parse fails, take the type out of the cache
// so that the next call with this offset doesn't hit
// the cache and return success.
- d.typeCache[off] = nil, false;
- return nil, err;
+ d.typeCache[off] = nil, false
+ return nil, err
}
diff --git a/src/pkg/debug/dwarf/type_test.go b/src/pkg/debug/dwarf/type_test.go
index 629f0fb16..2c5aabd39 100644
--- a/src/pkg/debug/dwarf/type_test.go
+++ b/src/pkg/debug/dwarf/type_test.go
@@ -5,10 +5,10 @@
package dwarf_test
import (
- . "debug/dwarf";
- "debug/elf";
- "debug/macho";
- "testing";
+ . "debug/dwarf"
+ "debug/elf"
+ "debug/macho"
+ "testing"
)
var typedefTests = map[string]string{
@@ -30,43 +30,43 @@ var typedefTests = map[string]string{
}
func elfData(t *testing.T, name string) *Data {
- f, err := elf.Open(name);
+ f, err := elf.Open(name)
if err != nil {
t.Fatal(err)
}
- d, err := f.DWARF();
+ d, err := f.DWARF()
if err != nil {
t.Fatal(err)
}
- return d;
+ return d
}
func machoData(t *testing.T, name string) *Data {
- f, err := macho.Open(name);
+ f, err := macho.Open(name)
if err != nil {
t.Fatal(err)
}
- d, err := f.DWARF();
+ d, err := f.DWARF()
if err != nil {
t.Fatal(err)
}
- return d;
+ return d
}
-func TestTypedefsELF(t *testing.T) { testTypedefs(t, elfData(t, "testdata/typedef.elf")) }
+func TestTypedefsELF(t *testing.T) { testTypedefs(t, elfData(t, "testdata/typedef.elf")) }
func TestTypedefsMachO(t *testing.T) {
testTypedefs(t, machoData(t, "testdata/typedef.macho"))
}
func testTypedefs(t *testing.T, d *Data) {
- r := d.Reader();
- seen := make(map[string]bool);
+ r := d.Reader()
+ seen := make(map[string]bool)
for {
- e, err := r.Next();
+ e, err := r.Next()
if err != nil {
t.Fatal("r.Next:", err)
}
@@ -74,12 +74,12 @@ func testTypedefs(t *testing.T, d *Data) {
break
}
if e.Tag == TagTypedef {
- typ, err := d.Type(e.Offset);
+ typ, err := d.Type(e.Offset)
if err != nil {
t.Fatal("d.Type:", err)
}
- t1 := typ.(*TypedefType);
- var typstr string;
+ t1 := typ.(*TypedefType)
+ var typstr string
if ts, ok := t1.Type.(*StructType); ok {
typstr = ts.Defn()
} else {
@@ -90,7 +90,7 @@ func testTypedefs(t *testing.T, d *Data) {
if _, ok := seen[t1.Name]; ok {
t.Errorf("multiple definitions for %s", t1.Name)
}
- seen[t1.Name] = true;
+ seen[t1.Name] = true
if typstr != want {
t.Errorf("%s:\n\thave %s\n\twant %s", t1.Name, typstr, want)
}
diff --git a/src/pkg/debug/dwarf/unit.go b/src/pkg/debug/dwarf/unit.go
index eb4e7656e..02cb363b4 100644
--- a/src/pkg/debug/dwarf/unit.go
+++ b/src/pkg/debug/dwarf/unit.go
@@ -5,58 +5,58 @@
package dwarf
import (
- "os";
- "strconv";
+ "os"
+ "strconv"
)
// DWARF debug info is split into a sequence of compilation units.
// Each unit has its own abbreviation table and address size.
type unit struct {
- base Offset; // byte offset of header within the aggregate info
- off Offset; // byte offset of data within the aggregate info
- data []byte;
- atable abbrevTable;
- addrsize int;
+ base Offset // byte offset of header within the aggregate info
+ off Offset // byte offset of data within the aggregate info
+ data []byte
+ atable abbrevTable
+ addrsize int
}
func (d *Data) parseUnits() ([]unit, os.Error) {
// Count units.
- nunit := 0;
- b := makeBuf(d, "info", 0, d.info, 0);
+ nunit := 0
+ b := makeBuf(d, "info", 0, d.info, 0)
for len(b.data) > 0 {
- b.skip(int(b.uint32()));
- nunit++;
+ b.skip(int(b.uint32()))
+ nunit++
}
if b.err != nil {
return nil, b.err
}
// Again, this time writing them down.
- b = makeBuf(d, "info", 0, d.info, 0);
- units := make([]unit, nunit);
+ b = makeBuf(d, "info", 0, d.info, 0)
+ units := make([]unit, nunit)
for i := range units {
- u := &units[i];
- u.base = b.off;
- n := b.uint32();
+ u := &units[i]
+ u.base = b.off
+ n := b.uint32()
if vers := b.uint16(); vers != 2 {
- b.error("unsupported DWARF version " + strconv.Itoa(int(vers)));
- break;
+ b.error("unsupported DWARF version " + strconv.Itoa(int(vers)))
+ break
}
- atable, err := d.parseAbbrev(b.uint32());
+ atable, err := d.parseAbbrev(b.uint32())
if err != nil {
if b.err == nil {
b.err = err
}
- break;
+ break
}
- u.atable = atable;
- u.addrsize = int(b.uint8());
- u.off = b.off;
- u.data = b.bytes(int(n - (2 + 4 + 1)));
+ u.atable = atable
+ u.addrsize = int(b.uint8())
+ u.off = b.off
+ u.data = b.bytes(int(n - (2 + 4 + 1)))
}
if b.err != nil {
return nil, b.err
}
- return units, nil;
+ return units, nil
}
diff --git a/src/pkg/debug/elf/elf.go b/src/pkg/debug/elf/elf.go
index 70a11f6f6..f0e49851b 100644
--- a/src/pkg/debug/elf/elf.go
+++ b/src/pkg/debug/elf/elf.go
@@ -48,13 +48,13 @@ import "strconv"
// Indexes into the Header.Ident array.
const (
- EI_CLASS = 4; /* Class of machine. */
- EI_DATA = 5; /* Data format. */
- EI_VERSION = 6; /* ELF format version. */
- EI_OSABI = 7; /* Operating system / ABI identification */
- EI_ABIVERSION = 8; /* ABI version */
- EI_PAD = 9; /* Start of padding (per SVR4 ABI). */
- EI_NIDENT = 16; /* Size of e_ident array. */
+ EI_CLASS = 4 /* Class of machine. */
+ EI_DATA = 5 /* Data format. */
+ EI_VERSION = 6 /* ELF format version. */
+ EI_OSABI = 7 /* Operating system / ABI identification */
+ EI_ABIVERSION = 8 /* ABI version */
+ EI_PAD = 9 /* Start of padding (per SVR4 ABI). */
+ EI_NIDENT = 16 /* Size of e_ident array. */
)
// Initial magic number for ELF files.
@@ -64,8 +64,8 @@ const ELFMAG = "\177ELF"
type Version byte
const (
- EV_NONE Version = 0;
- EV_CURRENT Version = 1;
+ EV_NONE Version = 0
+ EV_CURRENT Version = 1
)
var versionStrings = []intName{
@@ -73,16 +73,16 @@ var versionStrings = []intName{
intName{1, "EV_CURRENT"},
}
-func (i Version) String() string { return stringName(uint32(i), versionStrings, false) }
-func (i Version) GoString() string { return stringName(uint32(i), versionStrings, true) }
+func (i Version) String() string { return stringName(uint32(i), versionStrings, false) }
+func (i Version) GoString() string { return stringName(uint32(i), versionStrings, true) }
// Class is found in Header.Ident[EI_CLASS] and Header.Class.
type Class byte
const (
- ELFCLASSNONE Class = 0; /* Unknown class. */
- ELFCLASS32 Class = 1; /* 32-bit architecture. */
- ELFCLASS64 Class = 2; /* 64-bit architecture. */
+ ELFCLASSNONE Class = 0 /* Unknown class. */
+ ELFCLASS32 Class = 1 /* 32-bit architecture. */
+ ELFCLASS64 Class = 2 /* 64-bit architecture. */
)
var classStrings = []intName{
@@ -91,16 +91,16 @@ var classStrings = []intName{
intName{2, "ELFCLASS64"},
}
-func (i Class) String() string { return stringName(uint32(i), classStrings, false) }
-func (i Class) GoString() string { return stringName(uint32(i), classStrings, true) }
+func (i Class) String() string { return stringName(uint32(i), classStrings, false) }
+func (i Class) GoString() string { return stringName(uint32(i), classStrings, true) }
// Data is found in Header.Ident[EI_DATA] and Header.Data.
type Data byte
const (
- ELFDATANONE Data = 0; /* Unknown data format. */
- ELFDATA2LSB Data = 1; /* 2's complement little-endian. */
- ELFDATA2MSB Data = 2; /* 2's complement big-endian. */
+ ELFDATANONE Data = 0 /* Unknown data format. */
+ ELFDATA2LSB Data = 1 /* 2's complement little-endian. */
+ ELFDATA2MSB Data = 2 /* 2's complement big-endian. */
)
var dataStrings = []intName{
@@ -109,30 +109,30 @@ var dataStrings = []intName{
intName{2, "ELFDATA2MSB"},
}
-func (i Data) String() string { return stringName(uint32(i), dataStrings, false) }
-func (i Data) GoString() string { return stringName(uint32(i), dataStrings, true) }
+func (i Data) String() string { return stringName(uint32(i), dataStrings, false) }
+func (i Data) GoString() string { return stringName(uint32(i), dataStrings, true) }
// OSABI is found in Header.Ident[EI_OSABI] and Header.OSABI.
type OSABI byte
const (
- ELFOSABI_NONE OSABI = 0; /* UNIX System V ABI */
- ELFOSABI_HPUX OSABI = 1; /* HP-UX operating system */
- ELFOSABI_NETBSD OSABI = 2; /* NetBSD */
- ELFOSABI_LINUX OSABI = 3; /* GNU/Linux */
- ELFOSABI_HURD OSABI = 4; /* GNU/Hurd */
- ELFOSABI_86OPEN OSABI = 5; /* 86Open common IA32 ABI */
- ELFOSABI_SOLARIS OSABI = 6; /* Solaris */
- ELFOSABI_AIX OSABI = 7; /* AIX */
- ELFOSABI_IRIX OSABI = 8; /* IRIX */
- ELFOSABI_FREEBSD OSABI = 9; /* FreeBSD */
- ELFOSABI_TRU64 OSABI = 10; /* TRU64 UNIX */
- ELFOSABI_MODESTO OSABI = 11; /* Novell Modesto */
- ELFOSABI_OPENBSD OSABI = 12; /* OpenBSD */
- ELFOSABI_OPENVMS OSABI = 13; /* Open VMS */
- ELFOSABI_NSK OSABI = 14; /* HP Non-Stop Kernel */
- ELFOSABI_ARM OSABI = 97; /* ARM */
- ELFOSABI_STANDALONE OSABI = 255; /* Standalone (embedded) application */
+ ELFOSABI_NONE OSABI = 0 /* UNIX System V ABI */
+ ELFOSABI_HPUX OSABI = 1 /* HP-UX operating system */
+ ELFOSABI_NETBSD OSABI = 2 /* NetBSD */
+ ELFOSABI_LINUX OSABI = 3 /* GNU/Linux */
+ ELFOSABI_HURD OSABI = 4 /* GNU/Hurd */
+ ELFOSABI_86OPEN OSABI = 5 /* 86Open common IA32 ABI */
+ ELFOSABI_SOLARIS OSABI = 6 /* Solaris */
+ ELFOSABI_AIX OSABI = 7 /* AIX */
+ ELFOSABI_IRIX OSABI = 8 /* IRIX */
+ ELFOSABI_FREEBSD OSABI = 9 /* FreeBSD */
+ ELFOSABI_TRU64 OSABI = 10 /* TRU64 UNIX */
+ ELFOSABI_MODESTO OSABI = 11 /* Novell Modesto */
+ ELFOSABI_OPENBSD OSABI = 12 /* OpenBSD */
+ ELFOSABI_OPENVMS OSABI = 13 /* Open VMS */
+ ELFOSABI_NSK OSABI = 14 /* HP Non-Stop Kernel */
+ ELFOSABI_ARM OSABI = 97 /* ARM */
+ ELFOSABI_STANDALONE OSABI = 255 /* Standalone (embedded) application */
)
var osabiStrings = []intName{
@@ -155,22 +155,22 @@ var osabiStrings = []intName{
intName{255, "ELFOSABI_STANDALONE"},
}
-func (i OSABI) String() string { return stringName(uint32(i), osabiStrings, false) }
-func (i OSABI) GoString() string { return stringName(uint32(i), osabiStrings, true) }
+func (i OSABI) String() string { return stringName(uint32(i), osabiStrings, false) }
+func (i OSABI) GoString() string { return stringName(uint32(i), osabiStrings, true) }
// Type is found in Header.Type.
type Type uint16
const (
- ET_NONE Type = 0; /* Unknown type. */
- ET_REL Type = 1; /* Relocatable. */
- ET_EXEC Type = 2; /* Executable. */
- ET_DYN Type = 3; /* Shared object. */
- ET_CORE Type = 4; /* Core file. */
- ET_LOOS Type = 0xfe00; /* First operating system specific. */
- ET_HIOS Type = 0xfeff; /* Last operating system-specific. */
- ET_LOPROC Type = 0xff00; /* First processor-specific. */
- ET_HIPROC Type = 0xffff; /* Last processor-specific. */
+ ET_NONE Type = 0 /* Unknown type. */
+ ET_REL Type = 1 /* Relocatable. */
+ ET_EXEC Type = 2 /* Executable. */
+ ET_DYN Type = 3 /* Shared object. */
+ ET_CORE Type = 4 /* Core file. */
+ ET_LOOS Type = 0xfe00 /* First operating system specific. */
+ ET_HIOS Type = 0xfeff /* Last operating system-specific. */
+ ET_LOPROC Type = 0xff00 /* First processor-specific. */
+ ET_HIPROC Type = 0xffff /* Last processor-specific. */
)
var typeStrings = []intName{
@@ -185,62 +185,62 @@ var typeStrings = []intName{
intName{0xffff, "ET_HIPROC"},
}
-func (i Type) String() string { return stringName(uint32(i), typeStrings, false) }
-func (i Type) GoString() string { return stringName(uint32(i), typeStrings, true) }
+func (i Type) String() string { return stringName(uint32(i), typeStrings, false) }
+func (i Type) GoString() string { return stringName(uint32(i), typeStrings, true) }
// Machine is found in Header.Machine.
type Machine uint16
const (
- EM_NONE Machine = 0; /* Unknown machine. */
- EM_M32 Machine = 1; /* AT&T WE32100. */
- EM_SPARC Machine = 2; /* Sun SPARC. */
- EM_386 Machine = 3; /* Intel i386. */
- EM_68K Machine = 4; /* Motorola 68000. */
- EM_88K Machine = 5; /* Motorola 88000. */
- EM_860 Machine = 7; /* Intel i860. */
- EM_MIPS Machine = 8; /* MIPS R3000 Big-Endian only. */
- EM_S370 Machine = 9; /* IBM System/370. */
- EM_MIPS_RS3_LE Machine = 10; /* MIPS R3000 Little-Endian. */
- EM_PARISC Machine = 15; /* HP PA-RISC. */
- EM_VPP500 Machine = 17; /* Fujitsu VPP500. */
- EM_SPARC32PLUS Machine = 18; /* SPARC v8plus. */
- EM_960 Machine = 19; /* Intel 80960. */
- EM_PPC Machine = 20; /* PowerPC 32-bit. */
- EM_PPC64 Machine = 21; /* PowerPC 64-bit. */
- EM_S390 Machine = 22; /* IBM System/390. */
- EM_V800 Machine = 36; /* NEC V800. */
- EM_FR20 Machine = 37; /* Fujitsu FR20. */
- EM_RH32 Machine = 38; /* TRW RH-32. */
- EM_RCE Machine = 39; /* Motorola RCE. */
- EM_ARM Machine = 40; /* ARM. */
- EM_SH Machine = 42; /* Hitachi SH. */
- EM_SPARCV9 Machine = 43; /* SPARC v9 64-bit. */
- EM_TRICORE Machine = 44; /* Siemens TriCore embedded processor. */
- EM_ARC Machine = 45; /* Argonaut RISC Core. */
- EM_H8_300 Machine = 46; /* Hitachi H8/300. */
- EM_H8_300H Machine = 47; /* Hitachi H8/300H. */
- EM_H8S Machine = 48; /* Hitachi H8S. */
- EM_H8_500 Machine = 49; /* Hitachi H8/500. */
- EM_IA_64 Machine = 50; /* Intel IA-64 Processor. */
- EM_MIPS_X Machine = 51; /* Stanford MIPS-X. */
- EM_COLDFIRE Machine = 52; /* Motorola ColdFire. */
- EM_68HC12 Machine = 53; /* Motorola M68HC12. */
- EM_MMA Machine = 54; /* Fujitsu MMA. */
- EM_PCP Machine = 55; /* Siemens PCP. */
- EM_NCPU Machine = 56; /* Sony nCPU. */
- EM_NDR1 Machine = 57; /* Denso NDR1 microprocessor. */
- EM_STARCORE Machine = 58; /* Motorola Star*Core processor. */
- EM_ME16 Machine = 59; /* Toyota ME16 processor. */
- EM_ST100 Machine = 60; /* STMicroelectronics ST100 processor. */
- EM_TINYJ Machine = 61; /* Advanced Logic Corp. TinyJ processor. */
- EM_X86_64 Machine = 62; /* Advanced Micro Devices x86-64 */
+ EM_NONE Machine = 0 /* Unknown machine. */
+ EM_M32 Machine = 1 /* AT&T WE32100. */
+ EM_SPARC Machine = 2 /* Sun SPARC. */
+ EM_386 Machine = 3 /* Intel i386. */
+ EM_68K Machine = 4 /* Motorola 68000. */
+ EM_88K Machine = 5 /* Motorola 88000. */
+ EM_860 Machine = 7 /* Intel i860. */
+ EM_MIPS Machine = 8 /* MIPS R3000 Big-Endian only. */
+ EM_S370 Machine = 9 /* IBM System/370. */
+ EM_MIPS_RS3_LE Machine = 10 /* MIPS R3000 Little-Endian. */
+ EM_PARISC Machine = 15 /* HP PA-RISC. */
+ EM_VPP500 Machine = 17 /* Fujitsu VPP500. */
+ EM_SPARC32PLUS Machine = 18 /* SPARC v8plus. */
+ EM_960 Machine = 19 /* Intel 80960. */
+ EM_PPC Machine = 20 /* PowerPC 32-bit. */
+ EM_PPC64 Machine = 21 /* PowerPC 64-bit. */
+ EM_S390 Machine = 22 /* IBM System/390. */
+ EM_V800 Machine = 36 /* NEC V800. */
+ EM_FR20 Machine = 37 /* Fujitsu FR20. */
+ EM_RH32 Machine = 38 /* TRW RH-32. */
+ EM_RCE Machine = 39 /* Motorola RCE. */
+ EM_ARM Machine = 40 /* ARM. */
+ EM_SH Machine = 42 /* Hitachi SH. */
+ EM_SPARCV9 Machine = 43 /* SPARC v9 64-bit. */
+ EM_TRICORE Machine = 44 /* Siemens TriCore embedded processor. */
+ EM_ARC Machine = 45 /* Argonaut RISC Core. */
+ EM_H8_300 Machine = 46 /* Hitachi H8/300. */
+ EM_H8_300H Machine = 47 /* Hitachi H8/300H. */
+ EM_H8S Machine = 48 /* Hitachi H8S. */
+ EM_H8_500 Machine = 49 /* Hitachi H8/500. */
+ EM_IA_64 Machine = 50 /* Intel IA-64 Processor. */
+ EM_MIPS_X Machine = 51 /* Stanford MIPS-X. */
+ EM_COLDFIRE Machine = 52 /* Motorola ColdFire. */
+ EM_68HC12 Machine = 53 /* Motorola M68HC12. */
+ EM_MMA Machine = 54 /* Fujitsu MMA. */
+ EM_PCP Machine = 55 /* Siemens PCP. */
+ EM_NCPU Machine = 56 /* Sony nCPU. */
+ EM_NDR1 Machine = 57 /* Denso NDR1 microprocessor. */
+ EM_STARCORE Machine = 58 /* Motorola Star*Core processor. */
+ EM_ME16 Machine = 59 /* Toyota ME16 processor. */
+ EM_ST100 Machine = 60 /* STMicroelectronics ST100 processor. */
+ EM_TINYJ Machine = 61 /* Advanced Logic Corp. TinyJ processor. */
+ EM_X86_64 Machine = 62 /* Advanced Micro Devices x86-64 */
/* Non-standard or deprecated. */
- EM_486 Machine = 6; /* Intel i486. */
- EM_MIPS_RS4_BE Machine = 10; /* MIPS R4000 Big-Endian */
- EM_ALPHA_STD Machine = 41; /* Digital Alpha (standard value). */
- EM_ALPHA Machine = 0x9026; /* Alpha (written in the absence of an ABI) */
+ EM_486 Machine = 6 /* Intel i486. */
+ EM_MIPS_RS4_BE Machine = 10 /* MIPS R4000 Big-Endian */
+ EM_ALPHA_STD Machine = 41 /* Digital Alpha (standard value). */
+ EM_ALPHA Machine = 0x9026 /* Alpha (written in the absence of an ABI) */
)
var machineStrings = []intName{
@@ -295,23 +295,23 @@ var machineStrings = []intName{
intName{0x9026, "EM_ALPHA"},
}
-func (i Machine) String() string { return stringName(uint32(i), machineStrings, false) }
-func (i Machine) GoString() string { return stringName(uint32(i), machineStrings, true) }
+func (i Machine) String() string { return stringName(uint32(i), machineStrings, false) }
+func (i Machine) GoString() string { return stringName(uint32(i), machineStrings, true) }
// Special section indices.
type SectionIndex int
const (
- SHN_UNDEF SectionIndex = 0; /* Undefined, missing, irrelevant. */
- SHN_LORESERVE SectionIndex = 0xff00; /* First of reserved range. */
- SHN_LOPROC SectionIndex = 0xff00; /* First processor-specific. */
- SHN_HIPROC SectionIndex = 0xff1f; /* Last processor-specific. */
- SHN_LOOS SectionIndex = 0xff20; /* First operating system-specific. */
- SHN_HIOS SectionIndex = 0xff3f; /* Last operating system-specific. */
- SHN_ABS SectionIndex = 0xfff1; /* Absolute values. */
- SHN_COMMON SectionIndex = 0xfff2; /* Common data. */
- SHN_XINDEX SectionIndex = 0xffff; /* Escape -- index stored elsewhere. */
- SHN_HIRESERVE SectionIndex = 0xffff; /* Last of reserved range. */
+ SHN_UNDEF SectionIndex = 0 /* Undefined, missing, irrelevant. */
+ SHN_LORESERVE SectionIndex = 0xff00 /* First of reserved range. */
+ SHN_LOPROC SectionIndex = 0xff00 /* First processor-specific. */
+ SHN_HIPROC SectionIndex = 0xff1f /* Last processor-specific. */
+ SHN_LOOS SectionIndex = 0xff20 /* First operating system-specific. */
+ SHN_HIOS SectionIndex = 0xff3f /* Last operating system-specific. */
+ SHN_ABS SectionIndex = 0xfff1 /* Absolute values. */
+ SHN_COMMON SectionIndex = 0xfff2 /* Common data. */
+ SHN_XINDEX SectionIndex = 0xffff /* Escape -- index stored elsewhere. */
+ SHN_HIRESERVE SectionIndex = 0xffff /* Last of reserved range. */
)
var shnStrings = []intName{
@@ -323,36 +323,36 @@ var shnStrings = []intName{
intName{0xffff, "SHN_XINDEX"},
}
-func (i SectionIndex) String() string { return stringName(uint32(i), shnStrings, false) }
-func (i SectionIndex) GoString() string { return stringName(uint32(i), shnStrings, true) }
+func (i SectionIndex) String() string { return stringName(uint32(i), shnStrings, false) }
+func (i SectionIndex) GoString() string { return stringName(uint32(i), shnStrings, true) }
// Section type.
type SectionType uint32
const (
- SHT_NULL SectionType = 0; /* inactive */
- SHT_PROGBITS SectionType = 1; /* program defined information */
- SHT_SYMTAB SectionType = 2; /* symbol table section */
- SHT_STRTAB SectionType = 3; /* string table section */
- SHT_RELA SectionType = 4; /* relocation section with addends */
- SHT_HASH SectionType = 5; /* symbol hash table section */
- SHT_DYNAMIC SectionType = 6; /* dynamic section */
- SHT_NOTE SectionType = 7; /* note section */
- SHT_NOBITS SectionType = 8; /* no space section */
- SHT_REL SectionType = 9; /* relocation section - no addends */
- SHT_SHLIB SectionType = 10; /* reserved - purpose unknown */
- SHT_DYNSYM SectionType = 11; /* dynamic symbol table section */
- SHT_INIT_ARRAY SectionType = 14; /* Initialization function pointers. */
- SHT_FINI_ARRAY SectionType = 15; /* Termination function pointers. */
- SHT_PREINIT_ARRAY SectionType = 16; /* Pre-initialization function ptrs. */
- SHT_GROUP SectionType = 17; /* Section group. */
- SHT_SYMTAB_SHNDX SectionType = 18; /* Section indexes (see SHN_XINDEX). */
- SHT_LOOS SectionType = 0x60000000; /* First of OS specific semantics */
- SHT_HIOS SectionType = 0x6fffffff; /* Last of OS specific semantics */
- SHT_LOPROC SectionType = 0x70000000; /* reserved range for processor */
- SHT_HIPROC SectionType = 0x7fffffff; /* specific section header types */
- SHT_LOUSER SectionType = 0x80000000; /* reserved range for application */
- SHT_HIUSER SectionType = 0xffffffff; /* specific indexes */
+ SHT_NULL SectionType = 0 /* inactive */
+ SHT_PROGBITS SectionType = 1 /* program defined information */
+ SHT_SYMTAB SectionType = 2 /* symbol table section */
+ SHT_STRTAB SectionType = 3 /* string table section */
+ SHT_RELA SectionType = 4 /* relocation section with addends */
+ SHT_HASH SectionType = 5 /* symbol hash table section */
+ SHT_DYNAMIC SectionType = 6 /* dynamic section */
+ SHT_NOTE SectionType = 7 /* note section */
+ SHT_NOBITS SectionType = 8 /* no space section */
+ SHT_REL SectionType = 9 /* relocation section - no addends */
+ SHT_SHLIB SectionType = 10 /* reserved - purpose unknown */
+ SHT_DYNSYM SectionType = 11 /* dynamic symbol table section */
+ SHT_INIT_ARRAY SectionType = 14 /* Initialization function pointers. */
+ SHT_FINI_ARRAY SectionType = 15 /* Termination function pointers. */
+ SHT_PREINIT_ARRAY SectionType = 16 /* Pre-initialization function ptrs. */
+ SHT_GROUP SectionType = 17 /* Section group. */
+ SHT_SYMTAB_SHNDX SectionType = 18 /* Section indexes (see SHN_XINDEX). */
+ SHT_LOOS SectionType = 0x60000000 /* First of OS specific semantics */
+ SHT_HIOS SectionType = 0x6fffffff /* Last of OS specific semantics */
+ SHT_LOPROC SectionType = 0x70000000 /* reserved range for processor */
+ SHT_HIPROC SectionType = 0x7fffffff /* specific section header types */
+ SHT_LOUSER SectionType = 0x80000000 /* reserved range for application */
+ SHT_HIUSER SectionType = 0xffffffff /* specific indexes */
)
var shtStrings = []intName{
@@ -381,25 +381,25 @@ var shtStrings = []intName{
intName{0xffffffff, "SHT_HIUSER"},
}
-func (i SectionType) String() string { return stringName(uint32(i), shtStrings, false) }
-func (i SectionType) GoString() string { return stringName(uint32(i), shtStrings, true) }
+func (i SectionType) String() string { return stringName(uint32(i), shtStrings, false) }
+func (i SectionType) GoString() string { return stringName(uint32(i), shtStrings, true) }
// Section flags.
type SectionFlag uint32
const (
- SHF_WRITE SectionFlag = 0x1; /* Section contains writable data. */
- SHF_ALLOC SectionFlag = 0x2; /* Section occupies memory. */
- SHF_EXECINSTR SectionFlag = 0x4; /* Section contains instructions. */
- SHF_MERGE SectionFlag = 0x10; /* Section may be merged. */
- SHF_STRINGS SectionFlag = 0x20; /* Section contains strings. */
- SHF_INFO_LINK SectionFlag = 0x40; /* sh_info holds section index. */
- SHF_LINK_ORDER SectionFlag = 0x80; /* Special ordering requirements. */
- SHF_OS_NONCONFORMING SectionFlag = 0x100; /* OS-specific processing required. */
- SHF_GROUP SectionFlag = 0x200; /* Member of section group. */
- SHF_TLS SectionFlag = 0x400; /* Section contains TLS data. */
- SHF_MASKOS SectionFlag = 0x0ff00000; /* OS-specific semantics. */
- SHF_MASKPROC SectionFlag = 0xf0000000; /* Processor-specific semantics. */
+ SHF_WRITE SectionFlag = 0x1 /* Section contains writable data. */
+ SHF_ALLOC SectionFlag = 0x2 /* Section occupies memory. */
+ SHF_EXECINSTR SectionFlag = 0x4 /* Section contains instructions. */
+ SHF_MERGE SectionFlag = 0x10 /* Section may be merged. */
+ SHF_STRINGS SectionFlag = 0x20 /* Section contains strings. */
+ SHF_INFO_LINK SectionFlag = 0x40 /* sh_info holds section index. */
+ SHF_LINK_ORDER SectionFlag = 0x80 /* Special ordering requirements. */
+ SHF_OS_NONCONFORMING SectionFlag = 0x100 /* OS-specific processing required. */
+ SHF_GROUP SectionFlag = 0x200 /* Member of section group. */
+ SHF_TLS SectionFlag = 0x400 /* Section contains TLS data. */
+ SHF_MASKOS SectionFlag = 0x0ff00000 /* OS-specific semantics. */
+ SHF_MASKPROC SectionFlag = 0xf0000000 /* Processor-specific semantics. */
)
var shfStrings = []intName{
@@ -415,25 +415,25 @@ var shfStrings = []intName{
intName{0x400, "SHF_TLS"},
}
-func (i SectionFlag) String() string { return flagName(uint32(i), shfStrings, false) }
-func (i SectionFlag) GoString() string { return flagName(uint32(i), shfStrings, true) }
+func (i SectionFlag) String() string { return flagName(uint32(i), shfStrings, false) }
+func (i SectionFlag) GoString() string { return flagName(uint32(i), shfStrings, true) }
// Prog.Type
type ProgType int
const (
- PT_NULL ProgType = 0; /* Unused entry. */
- PT_LOAD ProgType = 1; /* Loadable segment. */
- PT_DYNAMIC ProgType = 2; /* Dynamic linking information segment. */
- PT_INTERP ProgType = 3; /* Pathname of interpreter. */
- PT_NOTE ProgType = 4; /* Auxiliary information. */
- PT_SHLIB ProgType = 5; /* Reserved (not used). */
- PT_PHDR ProgType = 6; /* Location of program header itself. */
- PT_TLS ProgType = 7; /* Thread local storage segment */
- PT_LOOS ProgType = 0x60000000; /* First OS-specific. */
- PT_HIOS ProgType = 0x6fffffff; /* Last OS-specific. */
- PT_LOPROC ProgType = 0x70000000; /* First processor-specific type. */
- PT_HIPROC ProgType = 0x7fffffff; /* Last processor-specific type. */
+ PT_NULL ProgType = 0 /* Unused entry. */
+ PT_LOAD ProgType = 1 /* Loadable segment. */
+ PT_DYNAMIC ProgType = 2 /* Dynamic linking information segment. */
+ PT_INTERP ProgType = 3 /* Pathname of interpreter. */
+ PT_NOTE ProgType = 4 /* Auxiliary information. */
+ PT_SHLIB ProgType = 5 /* Reserved (not used). */
+ PT_PHDR ProgType = 6 /* Location of program header itself. */
+ PT_TLS ProgType = 7 /* Thread local storage segment */
+ PT_LOOS ProgType = 0x60000000 /* First OS-specific. */
+ PT_HIOS ProgType = 0x6fffffff /* Last OS-specific. */
+ PT_LOPROC ProgType = 0x70000000 /* First processor-specific type. */
+ PT_HIPROC ProgType = 0x7fffffff /* Last processor-specific type. */
)
var ptStrings = []intName{
@@ -451,18 +451,18 @@ var ptStrings = []intName{
intName{0x7fffffff, "PT_HIPROC"},
}
-func (i ProgType) String() string { return stringName(uint32(i), ptStrings, false) }
-func (i ProgType) GoString() string { return stringName(uint32(i), ptStrings, true) }
+func (i ProgType) String() string { return stringName(uint32(i), ptStrings, false) }
+func (i ProgType) GoString() string { return stringName(uint32(i), ptStrings, true) }
// Prog.Flag
type ProgFlag uint32
const (
- PF_X ProgFlag = 0x1; /* Executable. */
- PF_W ProgFlag = 0x2; /* Writable. */
- PF_R ProgFlag = 0x4; /* Readable. */
- PF_MASKOS ProgFlag = 0x0ff00000; /* Operating system-specific. */
- PF_MASKPROC ProgFlag = 0xf0000000; /* Processor-specific. */
+ PF_X ProgFlag = 0x1 /* Executable. */
+ PF_W ProgFlag = 0x2 /* Writable. */
+ PF_R ProgFlag = 0x4 /* Readable. */
+ PF_MASKOS ProgFlag = 0x0ff00000 /* Operating system-specific. */
+ PF_MASKPROC ProgFlag = 0xf0000000 /* Processor-specific. */
)
var pfStrings = []intName{
@@ -471,55 +471,55 @@ var pfStrings = []intName{
intName{0x4, "PF_R"},
}
-func (i ProgFlag) String() string { return flagName(uint32(i), pfStrings, false) }
-func (i ProgFlag) GoString() string { return flagName(uint32(i), pfStrings, true) }
+func (i ProgFlag) String() string { return flagName(uint32(i), pfStrings, false) }
+func (i ProgFlag) GoString() string { return flagName(uint32(i), pfStrings, true) }
// Dyn.Tag
type DynTag int
const (
- DT_NULL DynTag = 0; /* Terminating entry. */
- DT_NEEDED DynTag = 1; /* String table offset of a needed shared library. */
- DT_PLTRELSZ DynTag = 2; /* Total size in bytes of PLT relocations. */
- DT_PLTGOT DynTag = 3; /* Processor-dependent address. */
- DT_HASH DynTag = 4; /* Address of symbol hash table. */
- DT_STRTAB DynTag = 5; /* Address of string table. */
- DT_SYMTAB DynTag = 6; /* Address of symbol table. */
- DT_RELA DynTag = 7; /* Address of ElfNN_Rela relocations. */
- DT_RELASZ DynTag = 8; /* Total size of ElfNN_Rela relocations. */
- DT_RELAENT DynTag = 9; /* Size of each ElfNN_Rela relocation entry. */
- DT_STRSZ DynTag = 10; /* Size of string table. */
- DT_SYMENT DynTag = 11; /* Size of each symbol table entry. */
- DT_INIT DynTag = 12; /* Address of initialization function. */
- DT_FINI DynTag = 13; /* Address of finalization function. */
- DT_SONAME DynTag = 14; /* String table offset of shared object name. */
- DT_RPATH DynTag = 15; /* String table offset of library path. [sup] */
- DT_SYMBOLIC DynTag = 16; /* Indicates "symbolic" linking. [sup] */
- DT_REL DynTag = 17; /* Address of ElfNN_Rel relocations. */
- DT_RELSZ DynTag = 18; /* Total size of ElfNN_Rel relocations. */
- DT_RELENT DynTag = 19; /* Size of each ElfNN_Rel relocation. */
- DT_PLTREL DynTag = 20; /* Type of relocation used for PLT. */
- DT_DEBUG DynTag = 21; /* Reserved (not used). */
- DT_TEXTREL DynTag = 22; /* Indicates there may be relocations in non-writable segments. [sup] */
- DT_JMPREL DynTag = 23; /* Address of PLT relocations. */
- DT_BIND_NOW DynTag = 24; /* [sup] */
- DT_INIT_ARRAY DynTag = 25; /* Address of the array of pointers to initialization functions */
- DT_FINI_ARRAY DynTag = 26; /* Address of the array of pointers to termination functions */
- DT_INIT_ARRAYSZ DynTag = 27; /* Size in bytes of the array of initialization functions. */
- DT_FINI_ARRAYSZ DynTag = 28; /* Size in bytes of the array of terminationfunctions. */
- DT_RUNPATH DynTag = 29; /* String table offset of a null-terminated library search path string. */
- DT_FLAGS DynTag = 30; /* Object specific flag values. */
- DT_ENCODING DynTag = 32; /* Values greater than or equal to DT_ENCODING
+ DT_NULL DynTag = 0 /* Terminating entry. */
+ DT_NEEDED DynTag = 1 /* String table offset of a needed shared library. */
+ DT_PLTRELSZ DynTag = 2 /* Total size in bytes of PLT relocations. */
+ DT_PLTGOT DynTag = 3 /* Processor-dependent address. */
+ DT_HASH DynTag = 4 /* Address of symbol hash table. */
+ DT_STRTAB DynTag = 5 /* Address of string table. */
+ DT_SYMTAB DynTag = 6 /* Address of symbol table. */
+ DT_RELA DynTag = 7 /* Address of ElfNN_Rela relocations. */
+ DT_RELASZ DynTag = 8 /* Total size of ElfNN_Rela relocations. */
+ DT_RELAENT DynTag = 9 /* Size of each ElfNN_Rela relocation entry. */
+ DT_STRSZ DynTag = 10 /* Size of string table. */
+ DT_SYMENT DynTag = 11 /* Size of each symbol table entry. */
+ DT_INIT DynTag = 12 /* Address of initialization function. */
+ DT_FINI DynTag = 13 /* Address of finalization function. */
+ DT_SONAME DynTag = 14 /* String table offset of shared object name. */
+ DT_RPATH DynTag = 15 /* String table offset of library path. [sup] */
+ DT_SYMBOLIC DynTag = 16 /* Indicates "symbolic" linking. [sup] */
+ DT_REL DynTag = 17 /* Address of ElfNN_Rel relocations. */
+ DT_RELSZ DynTag = 18 /* Total size of ElfNN_Rel relocations. */
+ DT_RELENT DynTag = 19 /* Size of each ElfNN_Rel relocation. */
+ DT_PLTREL DynTag = 20 /* Type of relocation used for PLT. */
+ DT_DEBUG DynTag = 21 /* Reserved (not used). */
+ DT_TEXTREL DynTag = 22 /* Indicates there may be relocations in non-writable segments. [sup] */
+ DT_JMPREL DynTag = 23 /* Address of PLT relocations. */
+ DT_BIND_NOW DynTag = 24 /* [sup] */
+ DT_INIT_ARRAY DynTag = 25 /* Address of the array of pointers to initialization functions */
+ DT_FINI_ARRAY DynTag = 26 /* Address of the array of pointers to termination functions */
+ DT_INIT_ARRAYSZ DynTag = 27 /* Size in bytes of the array of initialization functions. */
+ DT_FINI_ARRAYSZ DynTag = 28 /* Size in bytes of the array of terminationfunctions. */
+ DT_RUNPATH DynTag = 29 /* String table offset of a null-terminated library search path string. */
+ DT_FLAGS DynTag = 30 /* Object specific flag values. */
+ DT_ENCODING DynTag = 32 /* Values greater than or equal to DT_ENCODING
and less than DT_LOOS follow the rules for
the interpretation of the d_un union
as follows: even == 'd_ptr', even == 'd_val'
or none */
- DT_PREINIT_ARRAY DynTag = 32; /* Address of the array of pointers to pre-initialization functions. */
- DT_PREINIT_ARRAYSZ DynTag = 33; /* Size in bytes of the array of pre-initialization functions. */
- DT_LOOS DynTag = 0x6000000d; /* First OS-specific */
- DT_HIOS DynTag = 0x6ffff000; /* Last OS-specific */
- DT_LOPROC DynTag = 0x70000000; /* First processor-specific type. */
- DT_HIPROC DynTag = 0x7fffffff; /* Last processor-specific type. */
+ DT_PREINIT_ARRAY DynTag = 32 /* Address of the array of pointers to pre-initialization functions. */
+ DT_PREINIT_ARRAYSZ DynTag = 33 /* Size in bytes of the array of pre-initialization functions. */
+ DT_LOOS DynTag = 0x6000000d /* First OS-specific */
+ DT_HIOS DynTag = 0x6ffff000 /* Last OS-specific */
+ DT_LOPROC DynTag = 0x70000000 /* First processor-specific type. */
+ DT_HIPROC DynTag = 0x7fffffff /* Last processor-specific type. */
)
var dtStrings = []intName{
@@ -563,23 +563,23 @@ var dtStrings = []intName{
intName{0x7fffffff, "DT_HIPROC"},
}
-func (i DynTag) String() string { return stringName(uint32(i), dtStrings, false) }
-func (i DynTag) GoString() string { return stringName(uint32(i), dtStrings, true) }
+func (i DynTag) String() string { return stringName(uint32(i), dtStrings, false) }
+func (i DynTag) GoString() string { return stringName(uint32(i), dtStrings, true) }
// DT_FLAGS values.
type DynFlag int
const (
- DF_ORIGIN DynFlag = 0x0001; /* Indicates that the object being loaded may
+ DF_ORIGIN DynFlag = 0x0001 /* Indicates that the object being loaded may
make reference to the
$ORIGIN substitution string */
- DF_SYMBOLIC DynFlag = 0x0002; /* Indicates "symbolic" linking. */
- DF_TEXTREL DynFlag = 0x0004; /* Indicates there may be relocations in non-writable segments. */
- DF_BIND_NOW DynFlag = 0x0008; /* Indicates that the dynamic linker should
+ DF_SYMBOLIC DynFlag = 0x0002 /* Indicates "symbolic" linking. */
+ DF_TEXTREL DynFlag = 0x0004 /* Indicates there may be relocations in non-writable segments. */
+ DF_BIND_NOW DynFlag = 0x0008 /* Indicates that the dynamic linker should
process all relocations for the object
containing this entry before transferring
control to the program. */
- DF_STATIC_TLS DynFlag = 0x0010; /* Indicates that the shared object or
+ DF_STATIC_TLS DynFlag = 0x0010 /* Indicates that the shared object or
executable contains code using a static
thread-local storage scheme. */
)
@@ -592,16 +592,16 @@ var dflagStrings = []intName{
intName{0x0010, "DF_STATIC_TLS"},
}
-func (i DynFlag) String() string { return flagName(uint32(i), dflagStrings, false) }
-func (i DynFlag) GoString() string { return flagName(uint32(i), dflagStrings, true) }
+func (i DynFlag) String() string { return flagName(uint32(i), dflagStrings, false) }
+func (i DynFlag) GoString() string { return flagName(uint32(i), dflagStrings, true) }
// NType values; used in core files.
type NType int
const (
- NT_PRSTATUS NType = 1; /* Process status. */
- NT_FPREGSET NType = 2; /* Floating point registers. */
- NT_PRPSINFO NType = 3; /* Process state info. */
+ NT_PRSTATUS NType = 1 /* Process status. */
+ NT_FPREGSET NType = 2 /* Floating point registers. */
+ NT_PRPSINFO NType = 3 /* Process state info. */
)
var ntypeStrings = []intName{
@@ -610,20 +610,20 @@ var ntypeStrings = []intName{
intName{3, "NT_PRPSINFO"},
}
-func (i NType) String() string { return stringName(uint32(i), ntypeStrings, false) }
-func (i NType) GoString() string { return stringName(uint32(i), ntypeStrings, true) }
+func (i NType) String() string { return stringName(uint32(i), ntypeStrings, false) }
+func (i NType) GoString() string { return stringName(uint32(i), ntypeStrings, true) }
/* Symbol Binding - ELFNN_ST_BIND - st_info */
type SymBind int
const (
- STB_LOCAL SymBind = 0; /* Local symbol */
- STB_GLOBAL SymBind = 1; /* Global symbol */
- STB_WEAK SymBind = 2; /* like global - lower precedence */
- STB_LOOS SymBind = 10; /* Reserved range for operating system */
- STB_HIOS SymBind = 12; /* specific semantics. */
- STB_LOPROC SymBind = 13; /* reserved range for processor */
- STB_HIPROC SymBind = 15; /* specific semantics. */
+ STB_LOCAL SymBind = 0 /* Local symbol */
+ STB_GLOBAL SymBind = 1 /* Global symbol */
+ STB_WEAK SymBind = 2 /* like global - lower precedence */
+ STB_LOOS SymBind = 10 /* Reserved range for operating system */
+ STB_HIOS SymBind = 12 /* specific semantics. */
+ STB_LOPROC SymBind = 13 /* reserved range for processor */
+ STB_HIPROC SymBind = 15 /* specific semantics. */
)
var stbStrings = []intName{
@@ -636,24 +636,24 @@ var stbStrings = []intName{
intName{15, "STB_HIPROC"},
}
-func (i SymBind) String() string { return stringName(uint32(i), stbStrings, false) }
-func (i SymBind) GoString() string { return stringName(uint32(i), stbStrings, true) }
+func (i SymBind) String() string { return stringName(uint32(i), stbStrings, false) }
+func (i SymBind) GoString() string { return stringName(uint32(i), stbStrings, true) }
/* Symbol type - ELFNN_ST_TYPE - st_info */
type SymType int
const (
- STT_NOTYPE SymType = 0; /* Unspecified type. */
- STT_OBJECT SymType = 1; /* Data object. */
- STT_FUNC SymType = 2; /* Function. */
- STT_SECTION SymType = 3; /* Section. */
- STT_FILE SymType = 4; /* Source file. */
- STT_COMMON SymType = 5; /* Uninitialized common block. */
- STT_TLS SymType = 6; /* TLS object. */
- STT_LOOS SymType = 10; /* Reserved range for operating system */
- STT_HIOS SymType = 12; /* specific semantics. */
- STT_LOPROC SymType = 13; /* reserved range for processor */
- STT_HIPROC SymType = 15; /* specific semantics. */
+ STT_NOTYPE SymType = 0 /* Unspecified type. */
+ STT_OBJECT SymType = 1 /* Data object. */
+ STT_FUNC SymType = 2 /* Function. */
+ STT_SECTION SymType = 3 /* Section. */
+ STT_FILE SymType = 4 /* Source file. */
+ STT_COMMON SymType = 5 /* Uninitialized common block. */
+ STT_TLS SymType = 6 /* TLS object. */
+ STT_LOOS SymType = 10 /* Reserved range for operating system */
+ STT_HIOS SymType = 12 /* specific semantics. */
+ STT_LOPROC SymType = 13 /* reserved range for processor */
+ STT_HIPROC SymType = 15 /* specific semantics. */
)
var sttStrings = []intName{
@@ -670,17 +670,17 @@ var sttStrings = []intName{
intName{15, "STT_HIPROC"},
}
-func (i SymType) String() string { return stringName(uint32(i), sttStrings, false) }
-func (i SymType) GoString() string { return stringName(uint32(i), sttStrings, true) }
+func (i SymType) String() string { return stringName(uint32(i), sttStrings, false) }
+func (i SymType) GoString() string { return stringName(uint32(i), sttStrings, true) }
/* Symbol visibility - ELFNN_ST_VISIBILITY - st_other */
type SymVis int
const (
- STV_DEFAULT SymVis = 0x0; /* Default visibility (see binding). */
- STV_INTERNAL SymVis = 0x1; /* Special meaning in relocatable objects. */
- STV_HIDDEN SymVis = 0x2; /* Not visible. */
- STV_PROTECTED SymVis = 0x3; /* Visible but not preemptible. */
+ STV_DEFAULT SymVis = 0x0 /* Default visibility (see binding). */
+ STV_INTERNAL SymVis = 0x1 /* Special meaning in relocatable objects. */
+ STV_HIDDEN SymVis = 0x2 /* Not visible. */
+ STV_PROTECTED SymVis = 0x3 /* Visible but not preemptible. */
)
var stvStrings = []intName{
@@ -690,8 +690,8 @@ var stvStrings = []intName{
intName{0x3, "STV_PROTECTED"},
}
-func (i SymVis) String() string { return stringName(uint32(i), stvStrings, false) }
-func (i SymVis) GoString() string { return stringName(uint32(i), stvStrings, true) }
+func (i SymVis) String() string { return stringName(uint32(i), stvStrings, false) }
+func (i SymVis) GoString() string { return stringName(uint32(i), stvStrings, true) }
/*
* Relocation types.
@@ -701,30 +701,30 @@ func (i SymVis) GoString() string { return stringName(uint32(i), stvStrings, tru
type R_X86_64 int
const (
- R_X86_64_NONE R_X86_64 = 0; /* No relocation. */
- R_X86_64_64 R_X86_64 = 1; /* Add 64 bit symbol value. */
- R_X86_64_PC32 R_X86_64 = 2; /* PC-relative 32 bit signed sym value. */
- R_X86_64_GOT32 R_X86_64 = 3; /* PC-relative 32 bit GOT offset. */
- R_X86_64_PLT32 R_X86_64 = 4; /* PC-relative 32 bit PLT offset. */
- R_X86_64_COPY R_X86_64 = 5; /* Copy data from shared object. */
- R_X86_64_GLOB_DAT R_X86_64 = 6; /* Set GOT entry to data address. */
- R_X86_64_JMP_SLOT R_X86_64 = 7; /* Set GOT entry to code address. */
- R_X86_64_RELATIVE R_X86_64 = 8; /* Add load address of shared object. */
- R_X86_64_GOTPCREL R_X86_64 = 9; /* Add 32 bit signed pcrel offset to GOT. */
- R_X86_64_32 R_X86_64 = 10; /* Add 32 bit zero extended symbol value */
- R_X86_64_32S R_X86_64 = 11; /* Add 32 bit sign extended symbol value */
- R_X86_64_16 R_X86_64 = 12; /* Add 16 bit zero extended symbol value */
- R_X86_64_PC16 R_X86_64 = 13; /* Add 16 bit signed extended pc relative symbol value */
- R_X86_64_8 R_X86_64 = 14; /* Add 8 bit zero extended symbol value */
- R_X86_64_PC8 R_X86_64 = 15; /* Add 8 bit signed extended pc relative symbol value */
- R_X86_64_DTPMOD64 R_X86_64 = 16; /* ID of module containing symbol */
- R_X86_64_DTPOFF64 R_X86_64 = 17; /* Offset in TLS block */
- R_X86_64_TPOFF64 R_X86_64 = 18; /* Offset in static TLS block */
- R_X86_64_TLSGD R_X86_64 = 19; /* PC relative offset to GD GOT entry */
- R_X86_64_TLSLD R_X86_64 = 20; /* PC relative offset to LD GOT entry */
- R_X86_64_DTPOFF32 R_X86_64 = 21; /* Offset in TLS block */
- R_X86_64_GOTTPOFF R_X86_64 = 22; /* PC relative offset to IE GOT entry */
- R_X86_64_TPOFF32 R_X86_64 = 23; /* Offset in static TLS block */
+ R_X86_64_NONE R_X86_64 = 0 /* No relocation. */
+ R_X86_64_64 R_X86_64 = 1 /* Add 64 bit symbol value. */
+ R_X86_64_PC32 R_X86_64 = 2 /* PC-relative 32 bit signed sym value. */
+ R_X86_64_GOT32 R_X86_64 = 3 /* PC-relative 32 bit GOT offset. */
+ R_X86_64_PLT32 R_X86_64 = 4 /* PC-relative 32 bit PLT offset. */
+ R_X86_64_COPY R_X86_64 = 5 /* Copy data from shared object. */
+ R_X86_64_GLOB_DAT R_X86_64 = 6 /* Set GOT entry to data address. */
+ R_X86_64_JMP_SLOT R_X86_64 = 7 /* Set GOT entry to code address. */
+ R_X86_64_RELATIVE R_X86_64 = 8 /* Add load address of shared object. */
+ R_X86_64_GOTPCREL R_X86_64 = 9 /* Add 32 bit signed pcrel offset to GOT. */
+ R_X86_64_32 R_X86_64 = 10 /* Add 32 bit zero extended symbol value */
+ R_X86_64_32S R_X86_64 = 11 /* Add 32 bit sign extended symbol value */
+ R_X86_64_16 R_X86_64 = 12 /* Add 16 bit zero extended symbol value */
+ R_X86_64_PC16 R_X86_64 = 13 /* Add 16 bit signed extended pc relative symbol value */
+ R_X86_64_8 R_X86_64 = 14 /* Add 8 bit zero extended symbol value */
+ R_X86_64_PC8 R_X86_64 = 15 /* Add 8 bit signed extended pc relative symbol value */
+ R_X86_64_DTPMOD64 R_X86_64 = 16 /* ID of module containing symbol */
+ R_X86_64_DTPOFF64 R_X86_64 = 17 /* Offset in TLS block */
+ R_X86_64_TPOFF64 R_X86_64 = 18 /* Offset in static TLS block */
+ R_X86_64_TLSGD R_X86_64 = 19 /* PC relative offset to GD GOT entry */
+ R_X86_64_TLSLD R_X86_64 = 20 /* PC relative offset to LD GOT entry */
+ R_X86_64_DTPOFF32 R_X86_64 = 21 /* Offset in TLS block */
+ R_X86_64_GOTTPOFF R_X86_64 = 22 /* PC relative offset to IE GOT entry */
+ R_X86_64_TPOFF32 R_X86_64 = 23 /* Offset in static TLS block */
)
var rx86_64Strings = []intName{
@@ -754,41 +754,41 @@ var rx86_64Strings = []intName{
intName{23, "R_X86_64_TPOFF32"},
}
-func (i R_X86_64) String() string { return stringName(uint32(i), rx86_64Strings, false) }
-func (i R_X86_64) GoString() string { return stringName(uint32(i), rx86_64Strings, true) }
+func (i R_X86_64) String() string { return stringName(uint32(i), rx86_64Strings, false) }
+func (i R_X86_64) GoString() string { return stringName(uint32(i), rx86_64Strings, true) }
// Relocation types for Alpha.
type R_ALPHA int
const (
- R_ALPHA_NONE R_ALPHA = 0; /* No reloc */
- R_ALPHA_REFLONG R_ALPHA = 1; /* Direct 32 bit */
- R_ALPHA_REFQUAD R_ALPHA = 2; /* Direct 64 bit */
- R_ALPHA_GPREL32 R_ALPHA = 3; /* GP relative 32 bit */
- R_ALPHA_LITERAL R_ALPHA = 4; /* GP relative 16 bit w/optimization */
- R_ALPHA_LITUSE R_ALPHA = 5; /* Optimization hint for LITERAL */
- R_ALPHA_GPDISP R_ALPHA = 6; /* Add displacement to GP */
- R_ALPHA_BRADDR R_ALPHA = 7; /* PC+4 relative 23 bit shifted */
- R_ALPHA_HINT R_ALPHA = 8; /* PC+4 relative 16 bit shifted */
- R_ALPHA_SREL16 R_ALPHA = 9; /* PC relative 16 bit */
- R_ALPHA_SREL32 R_ALPHA = 10; /* PC relative 32 bit */
- R_ALPHA_SREL64 R_ALPHA = 11; /* PC relative 64 bit */
- R_ALPHA_OP_PUSH R_ALPHA = 12; /* OP stack push */
- R_ALPHA_OP_STORE R_ALPHA = 13; /* OP stack pop and store */
- R_ALPHA_OP_PSUB R_ALPHA = 14; /* OP stack subtract */
- R_ALPHA_OP_PRSHIFT R_ALPHA = 15; /* OP stack right shift */
- R_ALPHA_GPVALUE R_ALPHA = 16;
- R_ALPHA_GPRELHIGH R_ALPHA = 17;
- R_ALPHA_GPRELLOW R_ALPHA = 18;
- R_ALPHA_IMMED_GP_16 R_ALPHA = 19;
- R_ALPHA_IMMED_GP_HI32 R_ALPHA = 20;
- R_ALPHA_IMMED_SCN_HI32 R_ALPHA = 21;
- R_ALPHA_IMMED_BR_HI32 R_ALPHA = 22;
- R_ALPHA_IMMED_LO32 R_ALPHA = 23;
- R_ALPHA_COPY R_ALPHA = 24; /* Copy symbol at runtime */
- R_ALPHA_GLOB_DAT R_ALPHA = 25; /* Create GOT entry */
- R_ALPHA_JMP_SLOT R_ALPHA = 26; /* Create PLT entry */
- R_ALPHA_RELATIVE R_ALPHA = 27; /* Adjust by program base */
+ R_ALPHA_NONE R_ALPHA = 0 /* No reloc */
+ R_ALPHA_REFLONG R_ALPHA = 1 /* Direct 32 bit */
+ R_ALPHA_REFQUAD R_ALPHA = 2 /* Direct 64 bit */
+ R_ALPHA_GPREL32 R_ALPHA = 3 /* GP relative 32 bit */
+ R_ALPHA_LITERAL R_ALPHA = 4 /* GP relative 16 bit w/optimization */
+ R_ALPHA_LITUSE R_ALPHA = 5 /* Optimization hint for LITERAL */
+ R_ALPHA_GPDISP R_ALPHA = 6 /* Add displacement to GP */
+ R_ALPHA_BRADDR R_ALPHA = 7 /* PC+4 relative 23 bit shifted */
+ R_ALPHA_HINT R_ALPHA = 8 /* PC+4 relative 16 bit shifted */
+ R_ALPHA_SREL16 R_ALPHA = 9 /* PC relative 16 bit */
+ R_ALPHA_SREL32 R_ALPHA = 10 /* PC relative 32 bit */
+ R_ALPHA_SREL64 R_ALPHA = 11 /* PC relative 64 bit */
+ R_ALPHA_OP_PUSH R_ALPHA = 12 /* OP stack push */
+ R_ALPHA_OP_STORE R_ALPHA = 13 /* OP stack pop and store */
+ R_ALPHA_OP_PSUB R_ALPHA = 14 /* OP stack subtract */
+ R_ALPHA_OP_PRSHIFT R_ALPHA = 15 /* OP stack right shift */
+ R_ALPHA_GPVALUE R_ALPHA = 16
+ R_ALPHA_GPRELHIGH R_ALPHA = 17
+ R_ALPHA_GPRELLOW R_ALPHA = 18
+ R_ALPHA_IMMED_GP_16 R_ALPHA = 19
+ R_ALPHA_IMMED_GP_HI32 R_ALPHA = 20
+ R_ALPHA_IMMED_SCN_HI32 R_ALPHA = 21
+ R_ALPHA_IMMED_BR_HI32 R_ALPHA = 22
+ R_ALPHA_IMMED_LO32 R_ALPHA = 23
+ R_ALPHA_COPY R_ALPHA = 24 /* Copy symbol at runtime */
+ R_ALPHA_GLOB_DAT R_ALPHA = 25 /* Create GOT entry */
+ R_ALPHA_JMP_SLOT R_ALPHA = 26 /* Create PLT entry */
+ R_ALPHA_RELATIVE R_ALPHA = 27 /* Adjust by program base */
)
var ralphaStrings = []intName{
@@ -822,46 +822,46 @@ var ralphaStrings = []intName{
intName{27, "R_ALPHA_RELATIVE"},
}
-func (i R_ALPHA) String() string { return stringName(uint32(i), ralphaStrings, false) }
-func (i R_ALPHA) GoString() string { return stringName(uint32(i), ralphaStrings, true) }
+func (i R_ALPHA) String() string { return stringName(uint32(i), ralphaStrings, false) }
+func (i R_ALPHA) GoString() string { return stringName(uint32(i), ralphaStrings, true) }
// Relocation types for ARM.
type R_ARM int
const (
- R_ARM_NONE R_ARM = 0; /* No relocation. */
- R_ARM_PC24 R_ARM = 1;
- R_ARM_ABS32 R_ARM = 2;
- R_ARM_REL32 R_ARM = 3;
- R_ARM_PC13 R_ARM = 4;
- R_ARM_ABS16 R_ARM = 5;
- R_ARM_ABS12 R_ARM = 6;
- R_ARM_THM_ABS5 R_ARM = 7;
- R_ARM_ABS8 R_ARM = 8;
- R_ARM_SBREL32 R_ARM = 9;
- R_ARM_THM_PC22 R_ARM = 10;
- R_ARM_THM_PC8 R_ARM = 11;
- R_ARM_AMP_VCALL9 R_ARM = 12;
- R_ARM_SWI24 R_ARM = 13;
- R_ARM_THM_SWI8 R_ARM = 14;
- R_ARM_XPC25 R_ARM = 15;
- R_ARM_THM_XPC22 R_ARM = 16;
- R_ARM_COPY R_ARM = 20; /* Copy data from shared object. */
- R_ARM_GLOB_DAT R_ARM = 21; /* Set GOT entry to data address. */
- R_ARM_JUMP_SLOT R_ARM = 22; /* Set GOT entry to code address. */
- R_ARM_RELATIVE R_ARM = 23; /* Add load address of shared object. */
- R_ARM_GOTOFF R_ARM = 24; /* Add GOT-relative symbol address. */
- R_ARM_GOTPC R_ARM = 25; /* Add PC-relative GOT table address. */
- R_ARM_GOT32 R_ARM = 26; /* Add PC-relative GOT offset. */
- R_ARM_PLT32 R_ARM = 27; /* Add PC-relative PLT offset. */
- R_ARM_GNU_VTENTRY R_ARM = 100;
- R_ARM_GNU_VTINHERIT R_ARM = 101;
- R_ARM_RSBREL32 R_ARM = 250;
- R_ARM_THM_RPC22 R_ARM = 251;
- R_ARM_RREL32 R_ARM = 252;
- R_ARM_RABS32 R_ARM = 253;
- R_ARM_RPC24 R_ARM = 254;
- R_ARM_RBASE R_ARM = 255;
+ R_ARM_NONE R_ARM = 0 /* No relocation. */
+ R_ARM_PC24 R_ARM = 1
+ R_ARM_ABS32 R_ARM = 2
+ R_ARM_REL32 R_ARM = 3
+ R_ARM_PC13 R_ARM = 4
+ R_ARM_ABS16 R_ARM = 5
+ R_ARM_ABS12 R_ARM = 6
+ R_ARM_THM_ABS5 R_ARM = 7
+ R_ARM_ABS8 R_ARM = 8
+ R_ARM_SBREL32 R_ARM = 9
+ R_ARM_THM_PC22 R_ARM = 10
+ R_ARM_THM_PC8 R_ARM = 11
+ R_ARM_AMP_VCALL9 R_ARM = 12
+ R_ARM_SWI24 R_ARM = 13
+ R_ARM_THM_SWI8 R_ARM = 14
+ R_ARM_XPC25 R_ARM = 15
+ R_ARM_THM_XPC22 R_ARM = 16
+ R_ARM_COPY R_ARM = 20 /* Copy data from shared object. */
+ R_ARM_GLOB_DAT R_ARM = 21 /* Set GOT entry to data address. */
+ R_ARM_JUMP_SLOT R_ARM = 22 /* Set GOT entry to code address. */
+ R_ARM_RELATIVE R_ARM = 23 /* Add load address of shared object. */
+ R_ARM_GOTOFF R_ARM = 24 /* Add GOT-relative symbol address. */
+ R_ARM_GOTPC R_ARM = 25 /* Add PC-relative GOT table address. */
+ R_ARM_GOT32 R_ARM = 26 /* Add PC-relative GOT offset. */
+ R_ARM_PLT32 R_ARM = 27 /* Add PC-relative PLT offset. */
+ R_ARM_GNU_VTENTRY R_ARM = 100
+ R_ARM_GNU_VTINHERIT R_ARM = 101
+ R_ARM_RSBREL32 R_ARM = 250
+ R_ARM_THM_RPC22 R_ARM = 251
+ R_ARM_RREL32 R_ARM = 252
+ R_ARM_RABS32 R_ARM = 253
+ R_ARM_RPC24 R_ARM = 254
+ R_ARM_RBASE R_ARM = 255
)
var rarmStrings = []intName{
@@ -900,44 +900,44 @@ var rarmStrings = []intName{
intName{255, "R_ARM_RBASE"},
}
-func (i R_ARM) String() string { return stringName(uint32(i), rarmStrings, false) }
-func (i R_ARM) GoString() string { return stringName(uint32(i), rarmStrings, true) }
+func (i R_ARM) String() string { return stringName(uint32(i), rarmStrings, false) }
+func (i R_ARM) GoString() string { return stringName(uint32(i), rarmStrings, true) }
// Relocation types for 386.
type R_386 int
const (
- R_386_NONE R_386 = 0; /* No relocation. */
- R_386_32 R_386 = 1; /* Add symbol value. */
- R_386_PC32 R_386 = 2; /* Add PC-relative symbol value. */
- R_386_GOT32 R_386 = 3; /* Add PC-relative GOT offset. */
- R_386_PLT32 R_386 = 4; /* Add PC-relative PLT offset. */
- R_386_COPY R_386 = 5; /* Copy data from shared object. */
- R_386_GLOB_DAT R_386 = 6; /* Set GOT entry to data address. */
- R_386_JMP_SLOT R_386 = 7; /* Set GOT entry to code address. */
- R_386_RELATIVE R_386 = 8; /* Add load address of shared object. */
- R_386_GOTOFF R_386 = 9; /* Add GOT-relative symbol address. */
- R_386_GOTPC R_386 = 10; /* Add PC-relative GOT table address. */
- R_386_TLS_TPOFF R_386 = 14; /* Negative offset in static TLS block */
- R_386_TLS_IE R_386 = 15; /* Absolute address of GOT for -ve static TLS */
- R_386_TLS_GOTIE R_386 = 16; /* GOT entry for negative static TLS block */
- R_386_TLS_LE R_386 = 17; /* Negative offset relative to static TLS */
- R_386_TLS_GD R_386 = 18; /* 32 bit offset to GOT (index,off) pair */
- R_386_TLS_LDM R_386 = 19; /* 32 bit offset to GOT (index,zero) pair */
- R_386_TLS_GD_32 R_386 = 24; /* 32 bit offset to GOT (index,off) pair */
- R_386_TLS_GD_PUSH R_386 = 25; /* pushl instruction for Sun ABI GD sequence */
- R_386_TLS_GD_CALL R_386 = 26; /* call instruction for Sun ABI GD sequence */
- R_386_TLS_GD_POP R_386 = 27; /* popl instruction for Sun ABI GD sequence */
- R_386_TLS_LDM_32 R_386 = 28; /* 32 bit offset to GOT (index,zero) pair */
- R_386_TLS_LDM_PUSH R_386 = 29; /* pushl instruction for Sun ABI LD sequence */
- R_386_TLS_LDM_CALL R_386 = 30; /* call instruction for Sun ABI LD sequence */
- R_386_TLS_LDM_POP R_386 = 31; /* popl instruction for Sun ABI LD sequence */
- R_386_TLS_LDO_32 R_386 = 32; /* 32 bit offset from start of TLS block */
- R_386_TLS_IE_32 R_386 = 33; /* 32 bit offset to GOT static TLS offset entry */
- R_386_TLS_LE_32 R_386 = 34; /* 32 bit offset within static TLS block */
- R_386_TLS_DTPMOD32 R_386 = 35; /* GOT entry containing TLS index */
- R_386_TLS_DTPOFF32 R_386 = 36; /* GOT entry containing TLS offset */
- R_386_TLS_TPOFF32 R_386 = 37; /* GOT entry of -ve static TLS offset */
+ R_386_NONE R_386 = 0 /* No relocation. */
+ R_386_32 R_386 = 1 /* Add symbol value. */
+ R_386_PC32 R_386 = 2 /* Add PC-relative symbol value. */
+ R_386_GOT32 R_386 = 3 /* Add PC-relative GOT offset. */
+ R_386_PLT32 R_386 = 4 /* Add PC-relative PLT offset. */
+ R_386_COPY R_386 = 5 /* Copy data from shared object. */
+ R_386_GLOB_DAT R_386 = 6 /* Set GOT entry to data address. */
+ R_386_JMP_SLOT R_386 = 7 /* Set GOT entry to code address. */
+ R_386_RELATIVE R_386 = 8 /* Add load address of shared object. */
+ R_386_GOTOFF R_386 = 9 /* Add GOT-relative symbol address. */
+ R_386_GOTPC R_386 = 10 /* Add PC-relative GOT table address. */
+ R_386_TLS_TPOFF R_386 = 14 /* Negative offset in static TLS block */
+ R_386_TLS_IE R_386 = 15 /* Absolute address of GOT for -ve static TLS */
+ R_386_TLS_GOTIE R_386 = 16 /* GOT entry for negative static TLS block */
+ R_386_TLS_LE R_386 = 17 /* Negative offset relative to static TLS */
+ R_386_TLS_GD R_386 = 18 /* 32 bit offset to GOT (index,off) pair */
+ R_386_TLS_LDM R_386 = 19 /* 32 bit offset to GOT (index,zero) pair */
+ R_386_TLS_GD_32 R_386 = 24 /* 32 bit offset to GOT (index,off) pair */
+ R_386_TLS_GD_PUSH R_386 = 25 /* pushl instruction for Sun ABI GD sequence */
+ R_386_TLS_GD_CALL R_386 = 26 /* call instruction for Sun ABI GD sequence */
+ R_386_TLS_GD_POP R_386 = 27 /* popl instruction for Sun ABI GD sequence */
+ R_386_TLS_LDM_32 R_386 = 28 /* 32 bit offset to GOT (index,zero) pair */
+ R_386_TLS_LDM_PUSH R_386 = 29 /* pushl instruction for Sun ABI LD sequence */
+ R_386_TLS_LDM_CALL R_386 = 30 /* call instruction for Sun ABI LD sequence */
+ R_386_TLS_LDM_POP R_386 = 31 /* popl instruction for Sun ABI LD sequence */
+ R_386_TLS_LDO_32 R_386 = 32 /* 32 bit offset from start of TLS block */
+ R_386_TLS_IE_32 R_386 = 33 /* 32 bit offset to GOT static TLS offset entry */
+ R_386_TLS_LE_32 R_386 = 34 /* 32 bit offset within static TLS block */
+ R_386_TLS_DTPMOD32 R_386 = 35 /* GOT entry containing TLS index */
+ R_386_TLS_DTPOFF32 R_386 = 36 /* GOT entry containing TLS offset */
+ R_386_TLS_TPOFF32 R_386 = 37 /* GOT entry of -ve static TLS offset */
)
var r386Strings = []intName{
@@ -974,90 +974,90 @@ var r386Strings = []intName{
intName{37, "R_386_TLS_TPOFF32"},
}
-func (i R_386) String() string { return stringName(uint32(i), r386Strings, false) }
-func (i R_386) GoString() string { return stringName(uint32(i), r386Strings, true) }
+func (i R_386) String() string { return stringName(uint32(i), r386Strings, false) }
+func (i R_386) GoString() string { return stringName(uint32(i), r386Strings, true) }
// Relocation types for PowerPC.
type R_PPC int
const (
- R_PPC_NONE R_PPC = 0; /* No relocation. */
- R_PPC_ADDR32 R_PPC = 1;
- R_PPC_ADDR24 R_PPC = 2;
- R_PPC_ADDR16 R_PPC = 3;
- R_PPC_ADDR16_LO R_PPC = 4;
- R_PPC_ADDR16_HI R_PPC = 5;
- R_PPC_ADDR16_HA R_PPC = 6;
- R_PPC_ADDR14 R_PPC = 7;
- R_PPC_ADDR14_BRTAKEN R_PPC = 8;
- R_PPC_ADDR14_BRNTAKEN R_PPC = 9;
- R_PPC_REL24 R_PPC = 10;
- R_PPC_REL14 R_PPC = 11;
- R_PPC_REL14_BRTAKEN R_PPC = 12;
- R_PPC_REL14_BRNTAKEN R_PPC = 13;
- R_PPC_GOT16 R_PPC = 14;
- R_PPC_GOT16_LO R_PPC = 15;
- R_PPC_GOT16_HI R_PPC = 16;
- R_PPC_GOT16_HA R_PPC = 17;
- R_PPC_PLTREL24 R_PPC = 18;
- R_PPC_COPY R_PPC = 19;
- R_PPC_GLOB_DAT R_PPC = 20;
- R_PPC_JMP_SLOT R_PPC = 21;
- R_PPC_RELATIVE R_PPC = 22;
- R_PPC_LOCAL24PC R_PPC = 23;
- R_PPC_UADDR32 R_PPC = 24;
- R_PPC_UADDR16 R_PPC = 25;
- R_PPC_REL32 R_PPC = 26;
- R_PPC_PLT32 R_PPC = 27;
- R_PPC_PLTREL32 R_PPC = 28;
- R_PPC_PLT16_LO R_PPC = 29;
- R_PPC_PLT16_HI R_PPC = 30;
- R_PPC_PLT16_HA R_PPC = 31;
- R_PPC_SDAREL16 R_PPC = 32;
- R_PPC_SECTOFF R_PPC = 33;
- R_PPC_SECTOFF_LO R_PPC = 34;
- R_PPC_SECTOFF_HI R_PPC = 35;
- R_PPC_SECTOFF_HA R_PPC = 36;
- R_PPC_TLS R_PPC = 67;
- R_PPC_DTPMOD32 R_PPC = 68;
- R_PPC_TPREL16 R_PPC = 69;
- R_PPC_TPREL16_LO R_PPC = 70;
- R_PPC_TPREL16_HI R_PPC = 71;
- R_PPC_TPREL16_HA R_PPC = 72;
- R_PPC_TPREL32 R_PPC = 73;
- R_PPC_DTPREL16 R_PPC = 74;
- R_PPC_DTPREL16_LO R_PPC = 75;
- R_PPC_DTPREL16_HI R_PPC = 76;
- R_PPC_DTPREL16_HA R_PPC = 77;
- R_PPC_DTPREL32 R_PPC = 78;
- R_PPC_GOT_TLSGD16 R_PPC = 79;
- R_PPC_GOT_TLSGD16_LO R_PPC = 80;
- R_PPC_GOT_TLSGD16_HI R_PPC = 81;
- R_PPC_GOT_TLSGD16_HA R_PPC = 82;
- R_PPC_GOT_TLSLD16 R_PPC = 83;
- R_PPC_GOT_TLSLD16_LO R_PPC = 84;
- R_PPC_GOT_TLSLD16_HI R_PPC = 85;
- R_PPC_GOT_TLSLD16_HA R_PPC = 86;
- R_PPC_GOT_TPREL16 R_PPC = 87;
- R_PPC_GOT_TPREL16_LO R_PPC = 88;
- R_PPC_GOT_TPREL16_HI R_PPC = 89;
- R_PPC_GOT_TPREL16_HA R_PPC = 90;
- R_PPC_EMB_NADDR32 R_PPC = 101;
- R_PPC_EMB_NADDR16 R_PPC = 102;
- R_PPC_EMB_NADDR16_LO R_PPC = 103;
- R_PPC_EMB_NADDR16_HI R_PPC = 104;
- R_PPC_EMB_NADDR16_HA R_PPC = 105;
- R_PPC_EMB_SDAI16 R_PPC = 106;
- R_PPC_EMB_SDA2I16 R_PPC = 107;
- R_PPC_EMB_SDA2REL R_PPC = 108;
- R_PPC_EMB_SDA21 R_PPC = 109;
- R_PPC_EMB_MRKREF R_PPC = 110;
- R_PPC_EMB_RELSEC16 R_PPC = 111;
- R_PPC_EMB_RELST_LO R_PPC = 112;
- R_PPC_EMB_RELST_HI R_PPC = 113;
- R_PPC_EMB_RELST_HA R_PPC = 114;
- R_PPC_EMB_BIT_FLD R_PPC = 115;
- R_PPC_EMB_RELSDA R_PPC = 116;
+ R_PPC_NONE R_PPC = 0 /* No relocation. */
+ R_PPC_ADDR32 R_PPC = 1
+ R_PPC_ADDR24 R_PPC = 2
+ R_PPC_ADDR16 R_PPC = 3
+ R_PPC_ADDR16_LO R_PPC = 4
+ R_PPC_ADDR16_HI R_PPC = 5
+ R_PPC_ADDR16_HA R_PPC = 6
+ R_PPC_ADDR14 R_PPC = 7
+ R_PPC_ADDR14_BRTAKEN R_PPC = 8
+ R_PPC_ADDR14_BRNTAKEN R_PPC = 9
+ R_PPC_REL24 R_PPC = 10
+ R_PPC_REL14 R_PPC = 11
+ R_PPC_REL14_BRTAKEN R_PPC = 12
+ R_PPC_REL14_BRNTAKEN R_PPC = 13
+ R_PPC_GOT16 R_PPC = 14
+ R_PPC_GOT16_LO R_PPC = 15
+ R_PPC_GOT16_HI R_PPC = 16
+ R_PPC_GOT16_HA R_PPC = 17
+ R_PPC_PLTREL24 R_PPC = 18
+ R_PPC_COPY R_PPC = 19
+ R_PPC_GLOB_DAT R_PPC = 20
+ R_PPC_JMP_SLOT R_PPC = 21
+ R_PPC_RELATIVE R_PPC = 22
+ R_PPC_LOCAL24PC R_PPC = 23
+ R_PPC_UADDR32 R_PPC = 24
+ R_PPC_UADDR16 R_PPC = 25
+ R_PPC_REL32 R_PPC = 26
+ R_PPC_PLT32 R_PPC = 27
+ R_PPC_PLTREL32 R_PPC = 28
+ R_PPC_PLT16_LO R_PPC = 29
+ R_PPC_PLT16_HI R_PPC = 30
+ R_PPC_PLT16_HA R_PPC = 31
+ R_PPC_SDAREL16 R_PPC = 32
+ R_PPC_SECTOFF R_PPC = 33
+ R_PPC_SECTOFF_LO R_PPC = 34
+ R_PPC_SECTOFF_HI R_PPC = 35
+ R_PPC_SECTOFF_HA R_PPC = 36
+ R_PPC_TLS R_PPC = 67
+ R_PPC_DTPMOD32 R_PPC = 68
+ R_PPC_TPREL16 R_PPC = 69
+ R_PPC_TPREL16_LO R_PPC = 70
+ R_PPC_TPREL16_HI R_PPC = 71
+ R_PPC_TPREL16_HA R_PPC = 72
+ R_PPC_TPREL32 R_PPC = 73
+ R_PPC_DTPREL16 R_PPC = 74
+ R_PPC_DTPREL16_LO R_PPC = 75
+ R_PPC_DTPREL16_HI R_PPC = 76
+ R_PPC_DTPREL16_HA R_PPC = 77
+ R_PPC_DTPREL32 R_PPC = 78
+ R_PPC_GOT_TLSGD16 R_PPC = 79
+ R_PPC_GOT_TLSGD16_LO R_PPC = 80
+ R_PPC_GOT_TLSGD16_HI R_PPC = 81
+ R_PPC_GOT_TLSGD16_HA R_PPC = 82
+ R_PPC_GOT_TLSLD16 R_PPC = 83
+ R_PPC_GOT_TLSLD16_LO R_PPC = 84
+ R_PPC_GOT_TLSLD16_HI R_PPC = 85
+ R_PPC_GOT_TLSLD16_HA R_PPC = 86
+ R_PPC_GOT_TPREL16 R_PPC = 87
+ R_PPC_GOT_TPREL16_LO R_PPC = 88
+ R_PPC_GOT_TPREL16_HI R_PPC = 89
+ R_PPC_GOT_TPREL16_HA R_PPC = 90
+ R_PPC_EMB_NADDR32 R_PPC = 101
+ R_PPC_EMB_NADDR16 R_PPC = 102
+ R_PPC_EMB_NADDR16_LO R_PPC = 103
+ R_PPC_EMB_NADDR16_HI R_PPC = 104
+ R_PPC_EMB_NADDR16_HA R_PPC = 105
+ R_PPC_EMB_SDAI16 R_PPC = 106
+ R_PPC_EMB_SDA2I16 R_PPC = 107
+ R_PPC_EMB_SDA2REL R_PPC = 108
+ R_PPC_EMB_SDA21 R_PPC = 109
+ R_PPC_EMB_MRKREF R_PPC = 110
+ R_PPC_EMB_RELSEC16 R_PPC = 111
+ R_PPC_EMB_RELST_LO R_PPC = 112
+ R_PPC_EMB_RELST_HI R_PPC = 113
+ R_PPC_EMB_RELST_HA R_PPC = 114
+ R_PPC_EMB_BIT_FLD R_PPC = 115
+ R_PPC_EMB_RELSDA R_PPC = 116
)
var rppcStrings = []intName{
@@ -1142,69 +1142,69 @@ var rppcStrings = []intName{
intName{116, "R_PPC_EMB_RELSDA"},
}
-func (i R_PPC) String() string { return stringName(uint32(i), rppcStrings, false) }
-func (i R_PPC) GoString() string { return stringName(uint32(i), rppcStrings, true) }
+func (i R_PPC) String() string { return stringName(uint32(i), rppcStrings, false) }
+func (i R_PPC) GoString() string { return stringName(uint32(i), rppcStrings, true) }
// Relocation types for SPARC.
type R_SPARC int
const (
- R_SPARC_NONE R_SPARC = 0;
- R_SPARC_8 R_SPARC = 1;
- R_SPARC_16 R_SPARC = 2;
- R_SPARC_32 R_SPARC = 3;
- R_SPARC_DISP8 R_SPARC = 4;
- R_SPARC_DISP16 R_SPARC = 5;
- R_SPARC_DISP32 R_SPARC = 6;
- R_SPARC_WDISP30 R_SPARC = 7;
- R_SPARC_WDISP22 R_SPARC = 8;
- R_SPARC_HI22 R_SPARC = 9;
- R_SPARC_22 R_SPARC = 10;
- R_SPARC_13 R_SPARC = 11;
- R_SPARC_LO10 R_SPARC = 12;
- R_SPARC_GOT10 R_SPARC = 13;
- R_SPARC_GOT13 R_SPARC = 14;
- R_SPARC_GOT22 R_SPARC = 15;
- R_SPARC_PC10 R_SPARC = 16;
- R_SPARC_PC22 R_SPARC = 17;
- R_SPARC_WPLT30 R_SPARC = 18;
- R_SPARC_COPY R_SPARC = 19;
- R_SPARC_GLOB_DAT R_SPARC = 20;
- R_SPARC_JMP_SLOT R_SPARC = 21;
- R_SPARC_RELATIVE R_SPARC = 22;
- R_SPARC_UA32 R_SPARC = 23;
- R_SPARC_PLT32 R_SPARC = 24;
- R_SPARC_HIPLT22 R_SPARC = 25;
- R_SPARC_LOPLT10 R_SPARC = 26;
- R_SPARC_PCPLT32 R_SPARC = 27;
- R_SPARC_PCPLT22 R_SPARC = 28;
- R_SPARC_PCPLT10 R_SPARC = 29;
- R_SPARC_10 R_SPARC = 30;
- R_SPARC_11 R_SPARC = 31;
- R_SPARC_64 R_SPARC = 32;
- R_SPARC_OLO10 R_SPARC = 33;
- R_SPARC_HH22 R_SPARC = 34;
- R_SPARC_HM10 R_SPARC = 35;
- R_SPARC_LM22 R_SPARC = 36;
- R_SPARC_PC_HH22 R_SPARC = 37;
- R_SPARC_PC_HM10 R_SPARC = 38;
- R_SPARC_PC_LM22 R_SPARC = 39;
- R_SPARC_WDISP16 R_SPARC = 40;
- R_SPARC_WDISP19 R_SPARC = 41;
- R_SPARC_GLOB_JMP R_SPARC = 42;
- R_SPARC_7 R_SPARC = 43;
- R_SPARC_5 R_SPARC = 44;
- R_SPARC_6 R_SPARC = 45;
- R_SPARC_DISP64 R_SPARC = 46;
- R_SPARC_PLT64 R_SPARC = 47;
- R_SPARC_HIX22 R_SPARC = 48;
- R_SPARC_LOX10 R_SPARC = 49;
- R_SPARC_H44 R_SPARC = 50;
- R_SPARC_M44 R_SPARC = 51;
- R_SPARC_L44 R_SPARC = 52;
- R_SPARC_REGISTER R_SPARC = 53;
- R_SPARC_UA64 R_SPARC = 54;
- R_SPARC_UA16 R_SPARC = 55;
+ R_SPARC_NONE R_SPARC = 0
+ R_SPARC_8 R_SPARC = 1
+ R_SPARC_16 R_SPARC = 2
+ R_SPARC_32 R_SPARC = 3
+ R_SPARC_DISP8 R_SPARC = 4
+ R_SPARC_DISP16 R_SPARC = 5
+ R_SPARC_DISP32 R_SPARC = 6
+ R_SPARC_WDISP30 R_SPARC = 7
+ R_SPARC_WDISP22 R_SPARC = 8
+ R_SPARC_HI22 R_SPARC = 9
+ R_SPARC_22 R_SPARC = 10
+ R_SPARC_13 R_SPARC = 11
+ R_SPARC_LO10 R_SPARC = 12
+ R_SPARC_GOT10 R_SPARC = 13
+ R_SPARC_GOT13 R_SPARC = 14
+ R_SPARC_GOT22 R_SPARC = 15
+ R_SPARC_PC10 R_SPARC = 16
+ R_SPARC_PC22 R_SPARC = 17
+ R_SPARC_WPLT30 R_SPARC = 18
+ R_SPARC_COPY R_SPARC = 19
+ R_SPARC_GLOB_DAT R_SPARC = 20
+ R_SPARC_JMP_SLOT R_SPARC = 21
+ R_SPARC_RELATIVE R_SPARC = 22
+ R_SPARC_UA32 R_SPARC = 23
+ R_SPARC_PLT32 R_SPARC = 24
+ R_SPARC_HIPLT22 R_SPARC = 25
+ R_SPARC_LOPLT10 R_SPARC = 26
+ R_SPARC_PCPLT32 R_SPARC = 27
+ R_SPARC_PCPLT22 R_SPARC = 28
+ R_SPARC_PCPLT10 R_SPARC = 29
+ R_SPARC_10 R_SPARC = 30
+ R_SPARC_11 R_SPARC = 31
+ R_SPARC_64 R_SPARC = 32
+ R_SPARC_OLO10 R_SPARC = 33
+ R_SPARC_HH22 R_SPARC = 34
+ R_SPARC_HM10 R_SPARC = 35
+ R_SPARC_LM22 R_SPARC = 36
+ R_SPARC_PC_HH22 R_SPARC = 37
+ R_SPARC_PC_HM10 R_SPARC = 38
+ R_SPARC_PC_LM22 R_SPARC = 39
+ R_SPARC_WDISP16 R_SPARC = 40
+ R_SPARC_WDISP19 R_SPARC = 41
+ R_SPARC_GLOB_JMP R_SPARC = 42
+ R_SPARC_7 R_SPARC = 43
+ R_SPARC_5 R_SPARC = 44
+ R_SPARC_6 R_SPARC = 45
+ R_SPARC_DISP64 R_SPARC = 46
+ R_SPARC_PLT64 R_SPARC = 47
+ R_SPARC_HIX22 R_SPARC = 48
+ R_SPARC_LOX10 R_SPARC = 49
+ R_SPARC_H44 R_SPARC = 50
+ R_SPARC_M44 R_SPARC = 51
+ R_SPARC_L44 R_SPARC = 52
+ R_SPARC_REGISTER R_SPARC = 53
+ R_SPARC_UA64 R_SPARC = 54
+ R_SPARC_UA16 R_SPARC = 55
)
var rsparcStrings = []intName{
@@ -1266,8 +1266,8 @@ var rsparcStrings = []intName{
intName{55, "R_SPARC_UA16"},
}
-func (i R_SPARC) String() string { return stringName(uint32(i), rsparcStrings, false) }
-func (i R_SPARC) GoString() string { return stringName(uint32(i), rsparcStrings, true) }
+func (i R_SPARC) String() string { return stringName(uint32(i), rsparcStrings, false) }
+func (i R_SPARC) GoString() string { return stringName(uint32(i), rsparcStrings, true) }
/*
* Magic number for the elf trampoline, chosen wisely to be an immediate
@@ -1280,58 +1280,58 @@ const ARM_MAGIC_TRAMP_NUMBER = 0x5c000003
* ELF32 File header.
*/
type Header32 struct {
- Ident [EI_NIDENT]byte; /* File identification. */
- Type uint16; /* File type. */
- Machine uint16; /* Machine architecture. */
- Version uint32; /* ELF format version. */
- Entry uint32; /* Entry point. */
- Phoff uint32; /* Program header file offset. */
- Shoff uint32; /* Section header file offset. */
- Flags uint32; /* Architecture-specific flags. */
- Ehsize uint16; /* Size of ELF header in bytes. */
- Phentsize uint16; /* Size of program header entry. */
- Phnum uint16; /* Number of program header entries. */
- Shentsize uint16; /* Size of section header entry. */
- Shnum uint16; /* Number of section header entries. */
- Shstrndx uint16; /* Section name strings section. */
+ Ident [EI_NIDENT]byte /* File identification. */
+ Type uint16 /* File type. */
+ Machine uint16 /* Machine architecture. */
+ Version uint32 /* ELF format version. */
+ Entry uint32 /* Entry point. */
+ Phoff uint32 /* Program header file offset. */
+ Shoff uint32 /* Section header file offset. */
+ Flags uint32 /* Architecture-specific flags. */
+ Ehsize uint16 /* Size of ELF header in bytes. */
+ Phentsize uint16 /* Size of program header entry. */
+ Phnum uint16 /* Number of program header entries. */
+ Shentsize uint16 /* Size of section header entry. */
+ Shnum uint16 /* Number of section header entries. */
+ Shstrndx uint16 /* Section name strings section. */
}
/*
* ELF32 Section header.
*/
type Section32 struct {
- Name uint32; /* Section name (index into the section header string table). */
- Type uint32; /* Section type. */
- Flags uint32; /* Section flags. */
- Addr uint32; /* Address in memory image. */
- Off uint32; /* Offset in file. */
- Size uint32; /* Size in bytes. */
- Link uint32; /* Index of a related section. */
- Info uint32; /* Depends on section type. */
- Addralign uint32; /* Alignment in bytes. */
- Entsize uint32; /* Size of each entry in section. */
+ Name uint32 /* Section name (index into the section header string table). */
+ Type uint32 /* Section type. */
+ Flags uint32 /* Section flags. */
+ Addr uint32 /* Address in memory image. */
+ Off uint32 /* Offset in file. */
+ Size uint32 /* Size in bytes. */
+ Link uint32 /* Index of a related section. */
+ Info uint32 /* Depends on section type. */
+ Addralign uint32 /* Alignment in bytes. */
+ Entsize uint32 /* Size of each entry in section. */
}
/*
* ELF32 Program header.
*/
type Prog32 struct {
- Type uint32; /* Entry type. */
- Off uint32; /* File offset of contents. */
- Vaddr uint32; /* Virtual address in memory image. */
- Paddr uint32; /* Physical address (not used). */
- Filesz uint32; /* Size of contents in file. */
- Memsz uint32; /* Size of contents in memory. */
- Flags uint32; /* Access permission flags. */
- Align uint32; /* Alignment in memory and file. */
+ Type uint32 /* Entry type. */
+ Off uint32 /* File offset of contents. */
+ Vaddr uint32 /* Virtual address in memory image. */
+ Paddr uint32 /* Physical address (not used). */
+ Filesz uint32 /* Size of contents in file. */
+ Memsz uint32 /* Size of contents in memory. */
+ Flags uint32 /* Access permission flags. */
+ Align uint32 /* Alignment in memory and file. */
}
/*
* ELF32 Dynamic structure. The ".dynamic" section contains an array of them.
*/
type Dyn32 struct {
- Tag int32; /* Entry type. */
- Val uint32; /* Integer/Address value. */
+ Tag int32 /* Entry type. */
+ Val uint32 /* Integer/Address value. */
}
/*
@@ -1340,36 +1340,36 @@ type Dyn32 struct {
// ELF32 Relocations that don't need an addend field.
type Rel32 struct {
- Off uint32; /* Location to be relocated. */
- Info uint32; /* Relocation type and symbol index. */
+ Off uint32 /* Location to be relocated. */
+ Info uint32 /* Relocation type and symbol index. */
}
// ELF32 Relocations that need an addend field.
type Rela32 struct {
- Off uint32; /* Location to be relocated. */
- Info uint32; /* Relocation type and symbol index. */
- Addend int32; /* Addend. */
+ Off uint32 /* Location to be relocated. */
+ Info uint32 /* Relocation type and symbol index. */
+ Addend int32 /* Addend. */
}
-func R_SYM32(info uint32) uint32 { return uint32(info >> 8) }
-func R_TYPE32(info uint32) uint32 { return uint32(info & 0xff) }
-func R_INFO32(sym, typ uint32) uint32 { return sym<<8 | typ }
+func R_SYM32(info uint32) uint32 { return uint32(info >> 8) }
+func R_TYPE32(info uint32) uint32 { return uint32(info & 0xff) }
+func R_INFO32(sym, typ uint32) uint32 { return sym<<8 | typ }
// ELF32 Symbol.
type Sym32 struct {
- Name uint32;
- Value uint32;
- Size uint32;
- Info uint8;
- Other uint8;
- Shndx uint16;
+ Name uint32
+ Value uint32
+ Size uint32
+ Info uint8
+ Other uint8
+ Shndx uint16
}
const Sym32Size = 16
-func ST_BIND(info uint8) SymBind { return SymBind(info >> 4) }
-func ST_TYPE(bind SymBind, typ SymType) uint8 { return uint8(bind)<<4 | uint8(typ)&0xf }
-func ST_VISIBILITY(other uint8) SymVis { return SymVis(other & 3) }
+func ST_BIND(info uint8) SymBind { return SymBind(info >> 4) }
+func ST_TYPE(bind SymBind, typ SymType) uint8 { return uint8(bind)<<4 | uint8(typ)&0xf }
+func ST_VISIBILITY(other uint8) SymVis { return SymVis(other & 3) }
/*
* ELF64
@@ -1380,20 +1380,20 @@ func ST_VISIBILITY(other uint8) SymVis { return SymVis(other & 3) }
*/
type Header64 struct {
- Ident [EI_NIDENT]byte; /* File identification. */
- Type uint16; /* File type. */
- Machine uint16; /* Machine architecture. */
- Version uint32; /* ELF format version. */
- Entry uint64; /* Entry point. */
- Phoff uint64; /* Program header file offset. */
- Shoff uint64; /* Section header file offset. */
- Flags uint32; /* Architecture-specific flags. */
- Ehsize uint16; /* Size of ELF header in bytes. */
- Phentsize uint16; /* Size of program header entry. */
- Phnum uint16; /* Number of program header entries. */
- Shentsize uint16; /* Size of section header entry. */
- Shnum uint16; /* Number of section header entries. */
- Shstrndx uint16; /* Section name strings section. */
+ Ident [EI_NIDENT]byte /* File identification. */
+ Type uint16 /* File type. */
+ Machine uint16 /* Machine architecture. */
+ Version uint32 /* ELF format version. */
+ Entry uint64 /* Entry point. */
+ Phoff uint64 /* Program header file offset. */
+ Shoff uint64 /* Section header file offset. */
+ Flags uint32 /* Architecture-specific flags. */
+ Ehsize uint16 /* Size of ELF header in bytes. */
+ Phentsize uint16 /* Size of program header entry. */
+ Phnum uint16 /* Number of program header entries. */
+ Shentsize uint16 /* Size of section header entry. */
+ Shnum uint16 /* Number of section header entries. */
+ Shstrndx uint16 /* Section name strings section. */
}
/*
@@ -1401,16 +1401,16 @@ type Header64 struct {
*/
type Section64 struct {
- Name uint32; /* Section name (index into the section header string table). */
- Type uint32; /* Section type. */
- Flags uint64; /* Section flags. */
- Addr uint64; /* Address in memory image. */
- Off uint64; /* Offset in file. */
- Size uint64; /* Size in bytes. */
- Link uint32; /* Index of a related section. */
- Info uint32; /* Depends on section type. */
- Addralign uint64; /* Alignment in bytes. */
- Entsize uint64; /* Size of each entry in section. */
+ Name uint32 /* Section name (index into the section header string table). */
+ Type uint32 /* Section type. */
+ Flags uint64 /* Section flags. */
+ Addr uint64 /* Address in memory image. */
+ Off uint64 /* Offset in file. */
+ Size uint64 /* Size in bytes. */
+ Link uint32 /* Index of a related section. */
+ Info uint32 /* Depends on section type. */
+ Addralign uint64 /* Alignment in bytes. */
+ Entsize uint64 /* Size of each entry in section. */
}
/*
@@ -1418,14 +1418,14 @@ type Section64 struct {
*/
type Prog64 struct {
- Type uint32; /* Entry type. */
- Flags uint32; /* Access permission flags. */
- Off uint64; /* File offset of contents. */
- Vaddr uint64; /* Virtual address in memory image. */
- Paddr uint64; /* Physical address (not used). */
- Filesz uint64; /* Size of contents in file. */
- Memsz uint64; /* Size of contents in memory. */
- Align uint64; /* Alignment in memory and file. */
+ Type uint32 /* Entry type. */
+ Flags uint32 /* Access permission flags. */
+ Off uint64 /* File offset of contents. */
+ Vaddr uint64 /* Virtual address in memory image. */
+ Paddr uint64 /* Physical address (not used). */
+ Filesz uint64 /* Size of contents in file. */
+ Memsz uint64 /* Size of contents in memory. */
+ Align uint64 /* Alignment in memory and file. */
}
/*
@@ -1433,8 +1433,8 @@ type Prog64 struct {
*/
type Dyn64 struct {
- Tag int64; /* Entry type. */
- Val uint64; /* Integer/address value */
+ Tag int64 /* Entry type. */
+ Val uint64 /* Integer/address value */
}
/*
@@ -1443,39 +1443,39 @@ type Dyn64 struct {
/* ELF64 relocations that don't need an addend field. */
type Rel64 struct {
- Off uint64; /* Location to be relocated. */
- Info uint64; /* Relocation type and symbol index. */
+ Off uint64 /* Location to be relocated. */
+ Info uint64 /* Relocation type and symbol index. */
}
/* ELF64 relocations that need an addend field. */
type Rela64 struct {
- Off uint64; /* Location to be relocated. */
- Info uint64; /* Relocation type and symbol index. */
- Addend int64; /* Addend. */
+ Off uint64 /* Location to be relocated. */
+ Info uint64 /* Relocation type and symbol index. */
+ Addend int64 /* Addend. */
}
-func R_SYM64(info uint64) uint32 { return uint32(info >> 32) }
-func R_TYPE64(info uint64) uint32 { return uint32(info) }
-func R_INFO(sym, typ uint32) uint64 { return uint64(sym)<<32 | uint64(typ) }
+func R_SYM64(info uint64) uint32 { return uint32(info >> 32) }
+func R_TYPE64(info uint64) uint32 { return uint32(info) }
+func R_INFO(sym, typ uint32) uint64 { return uint64(sym)<<32 | uint64(typ) }
/*
* ELF64 symbol table entries.
*/
type Sym64 struct {
- Name uint32; /* String table index of name. */
- Info uint8; /* Type and binding information. */
- Other uint8; /* Reserved (not used). */
- Shndx uint16; /* Section index of symbol. */
- Value uint64; /* Symbol value. */
- Size uint64; /* Size of associated object. */
+ Name uint32 /* String table index of name. */
+ Info uint8 /* Type and binding information. */
+ Other uint8 /* Reserved (not used). */
+ Shndx uint16 /* Section index of symbol. */
+ Value uint64 /* Symbol value. */
+ Size uint64 /* Size of associated object. */
}
const Sym64Size = 24
type intName struct {
- i uint32;
- s string;
+ i uint32
+ s string
}
func stringName(i uint32, names []intName, goSyntax bool) string {
@@ -1484,28 +1484,28 @@ func stringName(i uint32, names []intName, goSyntax bool) string {
if goSyntax {
return "elf." + n.s
}
- return n.s;
+ return n.s
}
}
// second pass - look for smaller to add with.
// assume sorted already
for j := len(names) - 1; j >= 0; j-- {
- n := names[j];
+ n := names[j]
if n.i < i {
- s := n.s;
+ s := n.s
if goSyntax {
s = "elf." + s
}
- return s + "+" + strconv.Uitoa64(uint64(i-n.i));
+ return s + "+" + strconv.Uitoa64(uint64(i-n.i))
}
}
- return strconv.Uitoa64(uint64(i));
+ return strconv.Uitoa64(uint64(i))
}
func flagName(i uint32, names []intName, goSyntax bool) string {
- s := "";
+ s := ""
for _, n := range names {
if n.i&i == n.i {
if len(s) > 0 {
@@ -1514,8 +1514,8 @@ func flagName(i uint32, names []intName, goSyntax bool) string {
if goSyntax {
s += "elf."
}
- s += n.s;
- i -= n.i;
+ s += n.s
+ i -= n.i
}
}
if len(s) == 0 {
@@ -1524,5 +1524,5 @@ func flagName(i uint32, names []intName, goSyntax bool) string {
if i != 0 {
s += "+0x" + strconv.Uitob64(uint64(i), 16)
}
- return s;
+ return s
}
diff --git a/src/pkg/debug/elf/elf_test.go b/src/pkg/debug/elf/elf_test.go
index bc2a4f687..6f827faf0 100644
--- a/src/pkg/debug/elf/elf_test.go
+++ b/src/pkg/debug/elf/elf_test.go
@@ -5,13 +5,13 @@
package elf
import (
- "fmt";
- "testing";
+ "fmt"
+ "testing"
)
type nameTest struct {
- val interface{};
- str string;
+ val interface{}
+ str string
}
var nameTests = []nameTest{
@@ -41,7 +41,7 @@ var nameTests = []nameTest{
func TestNames(t *testing.T) {
for i, tt := range nameTests {
- s := fmt.Sprint(tt.val);
+ s := fmt.Sprint(tt.val)
if s != tt.str {
t.Errorf("#%d: want %q have %q", i, s, tt.str)
}
diff --git a/src/pkg/debug/elf/file.go b/src/pkg/debug/elf/file.go
index e610bc2eb..c7ef955e6 100644
--- a/src/pkg/debug/elf/file.go
+++ b/src/pkg/debug/elf/file.go
@@ -6,12 +6,12 @@
package elf
import (
- "bytes";
- "debug/dwarf";
- "encoding/binary";
- "fmt";
- "io";
- "os";
+ "bytes"
+ "debug/dwarf"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "os"
)
// TODO: error reporting detail
@@ -22,41 +22,41 @@ import (
// A FileHeader represents an ELF file header.
type FileHeader struct {
- Class Class;
- Data Data;
- Version Version;
- OSABI OSABI;
- ABIVersion uint8;
- ByteOrder binary.ByteOrder;
- Type Type;
- Machine Machine;
+ Class Class
+ Data Data
+ Version Version
+ OSABI OSABI
+ ABIVersion uint8
+ ByteOrder binary.ByteOrder
+ Type Type
+ Machine Machine
}
// A File represents an open ELF file.
type File struct {
- FileHeader;
- Sections []*Section;
- Progs []*Prog;
- closer io.Closer;
+ FileHeader
+ Sections []*Section
+ Progs []*Prog
+ closer io.Closer
}
// A SectionHeader represents a single ELF section header.
type SectionHeader struct {
- Name string;
- Type SectionType;
- Flags SectionFlag;
- Addr uint64;
- Offset uint64;
- Size uint64;
- Link uint32;
- Info uint32;
- Addralign uint64;
- Entsize uint64;
+ Name string
+ Type SectionType
+ Flags SectionFlag
+ Addr uint64
+ Offset uint64
+ Size uint64
+ Link uint32
+ Info uint32
+ Addralign uint64
+ Entsize uint64
}
// A Section represents a single section in an ELF file.
type Section struct {
- SectionHeader;
+ SectionHeader
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
@@ -64,34 +64,34 @@ type Section struct {
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
- io.ReaderAt;
- sr *io.SectionReader;
+ io.ReaderAt
+ sr *io.SectionReader
}
// Data reads and returns the contents of the ELF section.
func (s *Section) Data() ([]byte, os.Error) {
- dat := make([]byte, s.sr.Size());
- n, err := s.sr.ReadAt(dat, 0);
- return dat[0:n], err;
+ dat := make([]byte, s.sr.Size())
+ n, err := s.sr.ReadAt(dat, 0)
+ return dat[0:n], err
}
// Open returns a new ReadSeeker reading the ELF section.
-func (s *Section) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
+func (s *Section) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
// A ProgHeader represents a single ELF program header.
type ProgHeader struct {
- Type ProgType;
- Flags ProgFlag;
- Vaddr uint64;
- Paddr uint64;
- Filesz uint64;
- Memsz uint64;
- Align uint64;
+ Type ProgType
+ Flags ProgFlag
+ Vaddr uint64
+ Paddr uint64
+ Filesz uint64
+ Memsz uint64
+ Align uint64
}
// A Prog represents a single ELF program header in an ELF binary.
type Prog struct {
- ProgHeader;
+ ProgHeader
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
@@ -99,19 +99,19 @@ type Prog struct {
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
- io.ReaderAt;
- sr *io.SectionReader;
+ io.ReaderAt
+ sr *io.SectionReader
}
// Open returns a new ReadSeeker reading the ELF program body.
-func (p *Prog) Open() io.ReadSeeker { return io.NewSectionReader(p.sr, 0, 1<<63-1) }
+func (p *Prog) Open() io.ReadSeeker { return io.NewSectionReader(p.sr, 0, 1<<63-1) }
// A Symbol represents an entry in an ELF symbol table section.
type Symbol struct {
- Name uint32;
- Info, Other byte;
- Section uint32;
- Value, Size uint64;
+ Name uint32
+ Info, Other byte
+ Section uint32
+ Value, Size uint64
}
/*
@@ -119,53 +119,53 @@ type Symbol struct {
*/
type FormatError struct {
- off int64;
- msg string;
- val interface{};
+ off int64
+ msg string
+ val interface{}
}
func (e *FormatError) String() string {
- msg := e.msg;
+ msg := e.msg
if e.val != nil {
msg += fmt.Sprintf(" '%v' ", e.val)
}
- msg += fmt.Sprintf("in record at byte %#x", e.off);
- return msg;
+ msg += fmt.Sprintf("in record at byte %#x", e.off)
+ return msg
}
// Open opens the named file using os.Open and prepares it for use as an ELF binary.
func Open(name string) (*File, os.Error) {
- f, err := os.Open(name, os.O_RDONLY, 0);
+ f, err := os.Open(name, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
- ff, err := NewFile(f);
+ ff, err := NewFile(f)
if err != nil {
- f.Close();
- return nil, err;
+ f.Close()
+ return nil, err
}
- ff.closer = f;
- return ff, nil;
+ ff.closer = f
+ return ff, nil
}
// Close closes the File.
// If the File was created using NewFile directly instead of Open,
// Close has no effect.
func (f *File) Close() os.Error {
- var err os.Error;
+ var err os.Error
if f.closer != nil {
- err = f.closer.Close();
- f.closer = nil;
+ err = f.closer.Close()
+ f.closer = nil
}
- return err;
+ return err
}
// NewFile creates a new File for acecssing an ELF binary in an underlying reader.
// The ELF binary is expected to start at position 0 in the ReaderAt.
func NewFile(r io.ReaderAt) (*File, os.Error) {
- sr := io.NewSectionReader(r, 0, 1<<63-1);
+ sr := io.NewSectionReader(r, 0, 1<<63-1)
// Read and decode ELF identifier
- var ident [16]uint8;
+ var ident [16]uint8
if _, err := r.ReadAt(&ident, 0); err != nil {
return nil, err
}
@@ -173,8 +173,8 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
return nil, &FormatError{0, "bad magic number", ident[0:4]}
}
- f := new(File);
- f.Class = Class(ident[EI_CLASS]);
+ f := new(File)
+ f.Class = Class(ident[EI_CLASS])
switch f.Class {
case ELFCLASS32:
case ELFCLASS64:
@@ -183,7 +183,7 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
return nil, &FormatError{0, "unknown ELF class", f.Class}
}
- f.Data = Data(ident[EI_DATA]);
+ f.Data = Data(ident[EI_DATA])
switch f.Data {
case ELFDATA2LSB:
f.ByteOrder = binary.LittleEndian
@@ -193,49 +193,49 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
return nil, &FormatError{0, "unknown ELF data encoding", f.Data}
}
- f.Version = Version(ident[EI_VERSION]);
+ f.Version = Version(ident[EI_VERSION])
if f.Version != EV_CURRENT {
return nil, &FormatError{0, "unknown ELF version", f.Version}
}
- f.OSABI = OSABI(ident[EI_OSABI]);
- f.ABIVersion = ident[EI_ABIVERSION];
+ f.OSABI = OSABI(ident[EI_OSABI])
+ f.ABIVersion = ident[EI_ABIVERSION]
// Read ELF file header
- var shoff int64;
- var shentsize, shnum, shstrndx int;
- shstrndx = -1;
+ var shoff int64
+ var shentsize, shnum, shstrndx int
+ shstrndx = -1
switch f.Class {
case ELFCLASS32:
- hdr := new(Header32);
- sr.Seek(0, 0);
+ hdr := new(Header32)
+ sr.Seek(0, 0)
if err := binary.Read(sr, f.ByteOrder, hdr); err != nil {
return nil, err
}
- f.Type = Type(hdr.Type);
- f.Machine = Machine(hdr.Machine);
+ f.Type = Type(hdr.Type)
+ f.Machine = Machine(hdr.Machine)
if v := Version(hdr.Version); v != f.Version {
return nil, &FormatError{0, "mismatched ELF version", v}
}
- shoff = int64(hdr.Shoff);
- shentsize = int(hdr.Shentsize);
- shnum = int(hdr.Shnum);
- shstrndx = int(hdr.Shstrndx);
+ shoff = int64(hdr.Shoff)
+ shentsize = int(hdr.Shentsize)
+ shnum = int(hdr.Shnum)
+ shstrndx = int(hdr.Shstrndx)
case ELFCLASS64:
- hdr := new(Header64);
- sr.Seek(0, 0);
+ hdr := new(Header64)
+ sr.Seek(0, 0)
if err := binary.Read(sr, f.ByteOrder, hdr); err != nil {
return nil, err
}
- f.Type = Type(hdr.Type);
- f.Machine = Machine(hdr.Machine);
+ f.Type = Type(hdr.Type)
+ f.Machine = Machine(hdr.Machine)
if v := Version(hdr.Version); v != f.Version {
return nil, &FormatError{0, "mismatched ELF version", v}
}
- shoff = int64(hdr.Shoff);
- shentsize = int(hdr.Shentsize);
- shnum = int(hdr.Shnum);
- shstrndx = int(hdr.Shstrndx);
+ shoff = int64(hdr.Shoff)
+ shentsize = int(hdr.Shentsize)
+ shnum = int(hdr.Shnum)
+ shstrndx = int(hdr.Shstrndx)
}
if shstrndx < 0 || shstrndx >= shnum {
return nil, &FormatError{0, "invalid ELF shstrndx", shstrndx}
@@ -245,19 +245,19 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
// TODO
// Read section headers
- f.Sections = make([]*Section, shnum);
- names := make([]uint32, shnum);
+ f.Sections = make([]*Section, shnum)
+ names := make([]uint32, shnum)
for i := 0; i < shnum; i++ {
- off := shoff + int64(i)*int64(shentsize);
- sr.Seek(off, 0);
- s := new(Section);
+ off := shoff + int64(i)*int64(shentsize)
+ sr.Seek(off, 0)
+ s := new(Section)
switch f.Class {
case ELFCLASS32:
- sh := new(Section32);
+ sh := new(Section32)
if err := binary.Read(sr, f.ByteOrder, sh); err != nil {
return nil, err
}
- names[i] = sh.Name;
+ names[i] = sh.Name
s.SectionHeader = SectionHeader{
Type: SectionType(sh.Type),
Flags: SectionFlag(sh.Flags),
@@ -268,13 +268,13 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
Info: uint32(sh.Info),
Addralign: uint64(sh.Addralign),
Entsize: uint64(sh.Entsize),
- };
+ }
case ELFCLASS64:
- sh := new(Section64);
+ sh := new(Section64)
if err := binary.Read(sr, f.ByteOrder, sh); err != nil {
return nil, err
}
- names[i] = sh.Name;
+ names[i] = sh.Name
s.SectionHeader = SectionHeader{
Type: SectionType(sh.Type),
Flags: SectionFlag(sh.Flags),
@@ -285,28 +285,28 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
Info: uint32(sh.Info),
Addralign: uint64(sh.Addralign),
Entsize: uint64(sh.Entsize),
- };
+ }
}
- s.sr = io.NewSectionReader(r, int64(s.Offset), int64(s.Size));
- s.ReaderAt = s.sr;
- f.Sections[i] = s;
+ s.sr = io.NewSectionReader(r, int64(s.Offset), int64(s.Size))
+ s.ReaderAt = s.sr
+ f.Sections[i] = s
}
// Load section header string table.
- s := f.Sections[shstrndx];
- shstrtab := make([]byte, s.Size);
+ s := f.Sections[shstrndx]
+ shstrtab := make([]byte, s.Size)
if _, err := r.ReadAt(shstrtab, int64(s.Offset)); err != nil {
return nil, err
}
for i, s := range f.Sections {
- var ok bool;
- s.Name, ok = getString(shstrtab, int(names[i]));
+ var ok bool
+ s.Name, ok = getString(shstrtab, int(names[i]))
if !ok {
return nil, &FormatError{shoff + int64(i*shentsize), "bad section name index", names[i]}
}
}
- return f, nil;
+ return f, nil
}
func (f *File) getSymbols() ([]Symbol, os.Error) {
@@ -315,16 +315,16 @@ func (f *File) getSymbols() ([]Symbol, os.Error) {
return f.getSymbols64()
}
- return nil, os.ErrorString("not implemented");
+ return nil, os.ErrorString("not implemented")
}
// GetSymbols returns a slice of Symbols from parsing the symbol table.
func (f *File) getSymbols64() ([]Symbol, os.Error) {
- var symtabSection *Section;
+ var symtabSection *Section
for _, section := range f.Sections {
if section.Type == SHT_SYMTAB {
- symtabSection = section;
- break;
+ symtabSection = section
+ break
}
}
@@ -332,35 +332,35 @@ func (f *File) getSymbols64() ([]Symbol, os.Error) {
return nil, os.ErrorString("no symbol section")
}
- data, err := symtabSection.Data();
+ data, err := symtabSection.Data()
if err != nil {
return nil, os.ErrorString("cannot load symbol section")
}
- symtab := bytes.NewBuffer(data);
+ symtab := bytes.NewBuffer(data)
if symtab.Len()%Sym64Size != 0 {
return nil, os.ErrorString("length of symbol section is not a multiple of Sym64Size")
}
// The first entry is all zeros.
- var skip [Sym64Size]byte;
- symtab.Read(skip[0:]);
+ var skip [Sym64Size]byte
+ symtab.Read(skip[0:])
- symbols := make([]Symbol, symtab.Len()/Sym64Size);
+ symbols := make([]Symbol, symtab.Len()/Sym64Size)
- i := 0;
- var sym Sym64;
+ i := 0
+ var sym Sym64
for symtab.Len() > 0 {
- binary.Read(symtab, f.ByteOrder, &sym);
- symbols[i].Name = sym.Name;
- symbols[i].Info = sym.Info;
- symbols[i].Other = sym.Other;
- symbols[i].Section = uint32(sym.Shndx);
- symbols[i].Value = sym.Value;
- symbols[i].Size = sym.Size;
- i++;
+ binary.Read(symtab, f.ByteOrder, &sym)
+ symbols[i].Name = sym.Name
+ symbols[i].Info = sym.Info
+ symbols[i].Other = sym.Other
+ symbols[i].Section = uint32(sym.Shndx)
+ symbols[i].Value = sym.Value
+ symbols[i].Size = sym.Size
+ i++
}
- return symbols, nil;
+ return symbols, nil
}
// getString extracts a string from an ELF string table.
@@ -374,7 +374,7 @@ func getString(section []byte, start int) (string, bool) {
return string(section[start:end]), true
}
}
- return "", false;
+ return "", false
}
// Section returns a section with the given name, or nil if no such
@@ -385,7 +385,7 @@ func (f *File) Section(name string) *Section {
return s
}
}
- return nil;
+ return nil
}
// applyRelocations applies relocations to dst. rels is a relocations section
@@ -395,7 +395,7 @@ func (f *File) applyRelocations(dst []byte, rels []byte) os.Error {
return f.applyRelocationsAMD64(dst, rels)
}
- return os.ErrorString("not implemented");
+ return os.ErrorString("not implemented")
}
func (f *File) applyRelocationsAMD64(dst []byte, rels []byte) os.Error {
@@ -403,23 +403,23 @@ func (f *File) applyRelocationsAMD64(dst []byte, rels []byte) os.Error {
return os.ErrorString("length of relocation section is not a multiple of Sym64Size")
}
- symbols, err := f.getSymbols();
+ symbols, err := f.getSymbols()
if err != nil {
return err
}
- b := bytes.NewBuffer(rels);
- var rela Rela64;
+ b := bytes.NewBuffer(rels)
+ var rela Rela64
for b.Len() > 0 {
- binary.Read(b, f.ByteOrder, &rela);
- symNo := rela.Info >> 32;
- t := R_X86_64(rela.Info & 0xffff);
+ binary.Read(b, f.ByteOrder, &rela)
+ symNo := rela.Info >> 32
+ t := R_X86_64(rela.Info & 0xffff)
if symNo >= uint64(len(symbols)) {
continue
}
- sym := &symbols[symNo];
+ sym := &symbols[symNo]
if SymType(sym.Info&0xf) != STT_SECTION {
// We don't handle non-section relocations for now.
continue
@@ -430,51 +430,51 @@ func (f *File) applyRelocationsAMD64(dst []byte, rels []byte) os.Error {
if rela.Off+8 >= uint64(len(dst)) || rela.Addend < 0 {
continue
}
- f.ByteOrder.PutUint64(dst[rela.Off:rela.Off+8], uint64(rela.Addend));
+ f.ByteOrder.PutUint64(dst[rela.Off:rela.Off+8], uint64(rela.Addend))
case R_X86_64_32:
if rela.Off+4 >= uint64(len(dst)) || rela.Addend < 0 {
continue
}
- f.ByteOrder.PutUint32(dst[rela.Off:rela.Off+4], uint32(rela.Addend));
+ f.ByteOrder.PutUint32(dst[rela.Off:rela.Off+4], uint32(rela.Addend))
}
}
- return nil;
+ return nil
}
func (f *File) DWARF() (*dwarf.Data, os.Error) {
// There are many other DWARF sections, but these
// are the required ones, and the debug/dwarf package
// does not use the others, so don't bother loading them.
- var names = [...]string{"abbrev", "info", "str"};
- var dat [len(names)][]byte;
+ var names = [...]string{"abbrev", "info", "str"}
+ var dat [len(names)][]byte
for i, name := range names {
- name = ".debug_" + name;
- s := f.Section(name);
+ name = ".debug_" + name
+ s := f.Section(name)
if s == nil {
continue
}
- b, err := s.Data();
+ b, err := s.Data()
if err != nil && uint64(len(b)) < s.Size {
return nil, err
}
- dat[i] = b;
+ dat[i] = b
}
// If there's a relocation table for .debug_info, we have to process it
// now otherwise the data in .debug_info is invalid for x86-64 objects.
- rela := f.Section(".rela.debug_info");
+ rela := f.Section(".rela.debug_info")
if rela != nil && rela.Type == SHT_RELA && f.Machine == EM_X86_64 {
- data, err := rela.Data();
+ data, err := rela.Data()
if err != nil {
return nil, err
}
- err = f.applyRelocations(dat[1], data);
+ err = f.applyRelocations(dat[1], data)
if err != nil {
return nil, err
}
}
- abbrev, info, str := dat[0], dat[1], dat[2];
- return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str);
+ abbrev, info, str := dat[0], dat[1], dat[2]
+ return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str)
}
diff --git a/src/pkg/debug/elf/file_test.go b/src/pkg/debug/elf/file_test.go
index 9cd15fbd3..49adc4dc7 100644
--- a/src/pkg/debug/elf/file_test.go
+++ b/src/pkg/debug/elf/file_test.go
@@ -5,16 +5,16 @@
package elf
import (
- "debug/dwarf";
- "encoding/binary";
- "reflect";
- "testing";
+ "debug/dwarf"
+ "encoding/binary"
+ "reflect"
+ "testing"
)
type fileTest struct {
- file string;
- hdr FileHeader;
- sections []SectionHeader;
+ file string
+ hdr FileHeader
+ sections []SectionHeader
}
var fileTests = []fileTest{
@@ -101,28 +101,28 @@ var fileTests = []fileTest{
func TestOpen(t *testing.T) {
for i := range fileTests {
- tt := &fileTests[i];
+ tt := &fileTests[i]
- f, err := Open(tt.file);
+ f, err := Open(tt.file)
if err != nil {
- t.Error(err);
- continue;
+ t.Error(err)
+ continue
}
if !reflect.DeepEqual(f.FileHeader, tt.hdr) {
- t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr);
- continue;
+ t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr)
+ continue
}
for i, s := range f.Sections {
if i >= len(tt.sections) {
break
}
- sh := &tt.sections[i];
+ sh := &tt.sections[i]
if !reflect.DeepEqual(&s.SectionHeader, sh) {
t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, &s.SectionHeader, sh)
}
}
- tn := len(tt.sections);
- fn := len(f.Sections);
+ tn := len(tt.sections)
+ fn := len(f.Sections)
if tn != fn {
t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn)
}
@@ -130,8 +130,8 @@ func TestOpen(t *testing.T) {
}
type relocationTest struct {
- file string;
- firstEntry *dwarf.Entry;
+ file string
+ firstEntry *dwarf.Entry
}
var relocationTests = []relocationTest{
@@ -151,30 +151,30 @@ var relocationTests = []relocationTest{
func TestDWARFRelocations(t *testing.T) {
for i, test := range relocationTests {
- f, err := Open(test.file);
+ f, err := Open(test.file)
if err != nil {
- t.Error(err);
- continue;
+ t.Error(err)
+ continue
}
- dwarf, err := f.DWARF();
+ dwarf, err := f.DWARF()
if err != nil {
- t.Error(err);
- continue;
+ t.Error(err)
+ continue
}
- reader := dwarf.Reader();
+ reader := dwarf.Reader()
// Checking only the first entry is sufficient since it has
// many different strings. If the relocation had failed, all
// the string offsets would be zero and all the strings would
// end up being the same.
- firstEntry, err := reader.Next();
+ firstEntry, err := reader.Next()
if err != nil {
- t.Error(err);
- continue;
+ t.Error(err)
+ continue
}
if !reflect.DeepEqual(test.firstEntry, firstEntry) {
- t.Errorf("#%d: mismatch: got:%#v want:%#v", i, firstEntry, test.firstEntry);
- continue;
+ t.Errorf("#%d: mismatch: got:%#v want:%#v", i, firstEntry, test.firstEntry)
+ continue
}
}
}
diff --git a/src/pkg/debug/gosym/pclntab.go b/src/pkg/debug/gosym/pclntab.go
index 6c6a18868..9d7b0d15f 100644
--- a/src/pkg/debug/gosym/pclntab.go
+++ b/src/pkg/debug/gosym/pclntab.go
@@ -11,9 +11,9 @@ package gosym
import "encoding/binary"
type LineTable struct {
- Data []byte;
- PC uint64;
- Line int;
+ Data []byte
+ PC uint64
+ Line int
}
// TODO(rsc): Need to pull in quantum from architecture definition.
@@ -28,49 +28,49 @@ func (t *LineTable) parse(targetPC uint64, targetLine int) (b []byte, pc uint64,
//
// Here we process each update individually, which simplifies
// the code, but makes the corner cases more confusing.
- b, pc, line = t.Data, t.PC, t.Line;
+ b, pc, line = t.Data, t.PC, t.Line
for pc <= targetPC && line != targetLine && len(b) > 0 {
- code := b[0];
- b = b[1:];
+ code := b[0]
+ b = b[1:]
switch {
case code == 0:
if len(b) < 4 {
- b = b[0:0];
- break;
+ b = b[0:0]
+ break
}
- val := binary.BigEndian.Uint32(b);
- b = b[4:];
- line += int(val);
+ val := binary.BigEndian.Uint32(b)
+ b = b[4:]
+ line += int(val)
case code <= 64:
line += int(code)
case code <= 128:
line -= int(code - 64)
default:
- pc += quantum * uint64(code-128);
- continue;
+ pc += quantum * uint64(code-128)
+ continue
}
- pc += quantum;
+ pc += quantum
}
- return b, pc, line;
+ return b, pc, line
}
func (t *LineTable) slice(pc uint64) *LineTable {
- data, pc, line := t.parse(pc, -1);
- return &LineTable{data, pc, line};
+ data, pc, line := t.parse(pc, -1)
+ return &LineTable{data, pc, line}
}
func (t *LineTable) PCToLine(pc uint64) int {
- _, _, line := t.parse(pc, -1);
- return line;
+ _, _, line := t.parse(pc, -1)
+ return line
}
func (t *LineTable) LineToPC(line int, maxpc uint64) uint64 {
- _, pc, line1 := t.parse(maxpc, line);
+ _, pc, line1 := t.parse(maxpc, line)
if line1 != line {
return 0
}
// Subtract quantum from PC to account for post-line increment
- return pc - quantum;
+ return pc - quantum
}
// NewLineTable returns a new PC/line table
diff --git a/src/pkg/debug/gosym/pclntab_test.go b/src/pkg/debug/gosym/pclntab_test.go
index 66609d9cf..9ab493d59 100644
--- a/src/pkg/debug/gosym/pclntab_test.go
+++ b/src/pkg/debug/gosym/pclntab_test.go
@@ -5,10 +5,10 @@
package gosym
import (
- "debug/elf";
- "os";
- "testing";
- "syscall";
+ "debug/elf"
+ "os"
+ "testing"
+ "syscall"
)
func dotest() bool {
@@ -17,40 +17,40 @@ func dotest() bool {
}
func getTable(t *testing.T) *Table {
- f, tab := crack(os.Args[0], t);
- f.Close();
- return tab;
+ f, tab := crack(os.Args[0], t)
+ f.Close()
+ return tab
}
func crack(file string, t *testing.T) (*elf.File, *Table) {
// Open self
- f, err := elf.Open(file);
+ f, err := elf.Open(file)
if err != nil {
t.Fatal(err)
}
- return parse(file, f, t);
+ return parse(file, f, t)
}
func parse(file string, f *elf.File, t *testing.T) (*elf.File, *Table) {
- symdat, err := f.Section(".gosymtab").Data();
+ symdat, err := f.Section(".gosymtab").Data()
if err != nil {
- f.Close();
- t.Fatalf("reading %s gosymtab: %v", file, err);
+ f.Close()
+ t.Fatalf("reading %s gosymtab: %v", file, err)
}
- pclndat, err := f.Section(".gopclntab").Data();
+ pclndat, err := f.Section(".gopclntab").Data()
if err != nil {
- f.Close();
- t.Fatalf("reading %s gopclntab: %v", file, err);
+ f.Close()
+ t.Fatalf("reading %s gopclntab: %v", file, err)
}
- pcln := NewLineTable(pclndat, f.Section(".text").Addr);
- tab, err := NewTable(symdat, pcln);
+ pcln := NewLineTable(pclndat, f.Section(".text").Addr)
+ tab, err := NewTable(symdat, pcln)
if err != nil {
- f.Close();
- t.Fatalf("parsing %s gosymtab: %v", file, err);
+ f.Close()
+ t.Fatalf("parsing %s gosymtab: %v", file, err)
}
- return f, tab;
+ return f, tab
}
var goarch = os.Getenv("O")
@@ -60,42 +60,42 @@ func TestLineFromAline(t *testing.T) {
return
}
- tab := getTable(t);
+ tab := getTable(t)
// Find the sym package
- pkg := tab.LookupFunc("gosym.TestLineFromAline").Obj;
+ pkg := tab.LookupFunc("gosym.TestLineFromAline").Obj
if pkg == nil {
t.Fatalf("nil pkg")
}
// Walk every absolute line and ensure that we hit every
// source line monotonically
- lastline := make(map[string]int);
- final := -1;
+ lastline := make(map[string]int)
+ final := -1
for i := 0; i < 10000; i++ {
- path, line := pkg.lineFromAline(i);
+ path, line := pkg.lineFromAline(i)
// Check for end of object
if path == "" {
if final == -1 {
final = i - 1
}
- continue;
+ continue
} else if final != -1 {
t.Fatalf("reached end of package at absolute line %d, but absolute line %d mapped to %s:%d", final, i, path, line)
}
// It's okay to see files multiple times (e.g., sys.a)
if line == 1 {
- lastline[path] = 1;
- continue;
+ lastline[path] = 1
+ continue
}
// Check that the is the next line in path
- ll, ok := lastline[path];
+ ll, ok := lastline[path]
if !ok {
t.Errorf("file %s starts on line %d", path, line)
} else if line != ll+1 {
t.Errorf("expected next line of file %s to be %d, got %d", path, ll+1, line)
}
- lastline[path] = line;
+ lastline[path] = line
}
if final == -1 {
t.Errorf("never reached end of object")
@@ -107,15 +107,15 @@ func TestLineAline(t *testing.T) {
return
}
- tab := getTable(t);
+ tab := getTable(t)
for _, o := range tab.Files {
// A source file can appear multiple times in a
// object. alineFromLine will always return alines in
// the first file, so track which lines we've seen.
- found := make(map[string]int);
+ found := make(map[string]int)
for i := 0; i < 1000; i++ {
- path, line := o.lineFromAline(i);
+ path, line := o.lineFromAline(i)
if path == "" {
break
}
@@ -131,9 +131,9 @@ func TestLineAline(t *testing.T) {
continue
}
}
- found[path] = line;
+ found[path] = line
- a, err := o.alineFromLine(path, line);
+ a, err := o.alineFromLine(path, line)
if err != nil {
t.Errorf("absolute line %d in object %s maps to %s:%d, but mapping that back gives error %s", i, o.Paths[0].Name, path, line, err)
} else if a != i {
@@ -151,20 +151,20 @@ func TestPCLine(t *testing.T) {
return
}
- f, tab := crack("_test/pclinetest", t);
- text := f.Section(".text");
- textdat, err := text.Data();
+ f, tab := crack("_test/pclinetest", t)
+ text := f.Section(".text")
+ textdat, err := text.Data()
if err != nil {
t.Fatalf("reading .text: %v", err)
}
// Test PCToLine
- sym := tab.LookupFunc("linefrompc");
- wantLine := 0;
+ sym := tab.LookupFunc("linefrompc")
+ wantLine := 0
for pc := sym.Entry; pc < sym.End; pc++ {
- file, line, fn := tab.PCToLine(pc);
- off := pc - text.Addr; // TODO(rsc): should not need off; bug in 8g
- wantLine += int(textdat[off]);
+ file, line, fn := tab.PCToLine(pc)
+ off := pc - text.Addr // TODO(rsc): should not need off; bug in 8g
+ wantLine += int(textdat[off])
if fn == nil {
t.Errorf("failed to get line of PC %#x", pc)
} else if len(file) < 12 || file[len(file)-12:] != "pclinetest.s" || line != wantLine || fn != sym {
@@ -173,24 +173,24 @@ func TestPCLine(t *testing.T) {
}
// Test LineToPC
- sym = tab.LookupFunc("pcfromline");
- lookupline := -1;
- wantLine = 0;
- off := uint64(0); // TODO(rsc): should not need off; bug in 8g
+ sym = tab.LookupFunc("pcfromline")
+ lookupline := -1
+ wantLine = 0
+ off := uint64(0) // TODO(rsc): should not need off; bug in 8g
for pc := sym.Value; pc < sym.End; pc += 2 + uint64(textdat[off]) {
- file, line, fn := tab.PCToLine(pc);
- off = pc - text.Addr;
- wantLine += int(textdat[off]);
+ file, line, fn := tab.PCToLine(pc)
+ off = pc - text.Addr
+ wantLine += int(textdat[off])
if line != wantLine {
- t.Errorf("expected line %d at PC %#x in pcfromline, got %d", wantLine, pc, line);
- off = pc + 1 - text.Addr;
- continue;
+ t.Errorf("expected line %d at PC %#x in pcfromline, got %d", wantLine, pc, line)
+ off = pc + 1 - text.Addr
+ continue
}
if lookupline == -1 {
lookupline = line
}
for ; lookupline <= line; lookupline++ {
- pc2, fn2, err := tab.LineToPC(file, lookupline);
+ pc2, fn2, err := tab.LineToPC(file, lookupline)
if lookupline != line {
// Should be nothing on this line
if err == nil {
@@ -202,6 +202,6 @@ func TestPCLine(t *testing.T) {
t.Errorf("expected PC %#x (%s) at line %d, got PC %#x (%s)", pc, fn.Name, line, pc2, fn2.Name)
}
}
- off = pc + 1 - text.Addr;
+ off = pc + 1 - text.Addr
}
}
diff --git a/src/pkg/debug/gosym/symtab.go b/src/pkg/debug/gosym/symtab.go
index 39e397ece..dea460d71 100644
--- a/src/pkg/debug/gosym/symtab.go
+++ b/src/pkg/debug/gosym/symtab.go
@@ -13,11 +13,11 @@ package gosym
// and the Go format is the runtime source, specifically ../../runtime/symtab.c.
import (
- "encoding/binary";
- "fmt";
- "os";
- "strconv";
- "strings";
+ "encoding/binary"
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
)
/*
@@ -26,16 +26,16 @@ import (
// A Sym represents a single symbol table entry.
type Sym struct {
- Value uint64;
- Type byte;
- Name string;
- GoType uint64;
+ Value uint64
+ Type byte
+ Name string
+ GoType uint64
// If this symbol if a function symbol, the corresponding Func
- Func *Func;
+ Func *Func
}
// Static returns whether this symbol is static (not visible outside its file).
-func (s *Sym) Static() bool { return s.Type >= 'a' }
+func (s *Sym) Static() bool { return s.Type >= 'a' }
// PackageName returns the package part of the symbol name,
// or the empty string if there is none.
@@ -43,18 +43,18 @@ func (s *Sym) PackageName() string {
if i := strings.Index(s.Name, "."); i != -1 {
return s.Name[0:i]
}
- return "";
+ return ""
}
// ReceiverName returns the receiver type name of this symbol,
// or the empty string if there is none.
func (s *Sym) ReceiverName() string {
- l := strings.Index(s.Name, ".");
- r := strings.LastIndex(s.Name, ".");
+ l := strings.Index(s.Name, ".")
+ r := strings.LastIndex(s.Name, ".")
if l == -1 || r == -1 || l == r {
return ""
}
- return s.Name[l+1 : r];
+ return s.Name[l+1 : r]
}
// BaseName returns the symbol name without the package or receiver name.
@@ -62,25 +62,25 @@ func (s *Sym) BaseName() string {
if i := strings.LastIndex(s.Name, "."); i != -1 {
return s.Name[i+1:]
}
- return s.Name;
+ return s.Name
}
// A Func collects information about a single function.
type Func struct {
- Entry uint64;
- *Sym;
- End uint64;
- Params []*Sym;
- Locals []*Sym;
- FrameSize int;
- LineTable *LineTable;
- Obj *Obj;
+ Entry uint64
+ *Sym
+ End uint64
+ Params []*Sym
+ Locals []*Sym
+ FrameSize int
+ LineTable *LineTable
+ Obj *Obj
}
// An Obj represents a single object file.
type Obj struct {
- Funcs []Func;
- Paths []Sym;
+ Funcs []Func
+ Paths []Sym
}
/*
@@ -91,115 +91,115 @@ type Obj struct {
// symbols decoded from the program and provides methods to translate
// between symbols, names, and addresses.
type Table struct {
- Syms []Sym;
- Funcs []Func;
- Files map[string]*Obj;
- Objs []Obj;
+ Syms []Sym
+ Funcs []Func
+ Files map[string]*Obj
+ Objs []Obj
// textEnd uint64;
}
type sym struct {
- value uint32;
- gotype uint32;
- typ byte;
- name []byte;
+ value uint32
+ gotype uint32
+ typ byte
+ name []byte
}
func walksymtab(data []byte, fn func(sym) os.Error) os.Error {
- var s sym;
- p := data;
+ var s sym
+ p := data
for len(p) >= 6 {
- s.value = binary.BigEndian.Uint32(p[0:4]);
- typ := p[4];
+ s.value = binary.BigEndian.Uint32(p[0:4])
+ typ := p[4]
if typ&0x80 == 0 {
return &DecodingError{len(data) - len(p) + 4, "bad symbol type", typ}
}
- typ &^= 0x80;
- s.typ = typ;
- p = p[5:];
- var i int;
- var nnul int;
+ typ &^= 0x80
+ s.typ = typ
+ p = p[5:]
+ var i int
+ var nnul int
for i = 0; i < len(p); i++ {
if p[i] == 0 {
- nnul = 1;
- break;
+ nnul = 1
+ break
}
}
switch typ {
case 'z', 'Z':
- p = p[i+nnul:];
+ p = p[i+nnul:]
for i = 0; i+2 <= len(p); i += 2 {
if p[i] == 0 && p[i+1] == 0 {
- nnul = 2;
- break;
+ nnul = 2
+ break
}
}
}
if i+nnul+4 > len(p) {
return &DecodingError{len(data), "unexpected EOF", nil}
}
- s.name = p[0:i];
- i += nnul;
- s.gotype = binary.BigEndian.Uint32(p[i : i+4]);
- p = p[i+4:];
- fn(s);
+ s.name = p[0:i]
+ i += nnul
+ s.gotype = binary.BigEndian.Uint32(p[i : i+4])
+ p = p[i+4:]
+ fn(s)
}
- return nil;
+ return nil
}
// NewTable decodes the Go symbol table in data,
// returning an in-memory representation.
func NewTable(symtab []byte, pcln *LineTable) (*Table, os.Error) {
- var n int;
+ var n int
err := walksymtab(symtab, func(s sym) os.Error {
- n++;
- return nil;
- });
+ n++
+ return nil
+ })
if err != nil {
return nil, err
}
- var t Table;
- fname := make(map[uint16]string);
- t.Syms = make([]Sym, 0, n);
- nf := 0;
- nz := 0;
- lasttyp := uint8(0);
+ var t Table
+ fname := make(map[uint16]string)
+ t.Syms = make([]Sym, 0, n)
+ nf := 0
+ nz := 0
+ lasttyp := uint8(0)
err = walksymtab(symtab, func(s sym) os.Error {
- n := len(t.Syms);
- t.Syms = t.Syms[0 : n+1];
- ts := &t.Syms[n];
- ts.Type = s.typ;
- ts.Value = uint64(s.value);
- ts.GoType = uint64(s.gotype);
+ n := len(t.Syms)
+ t.Syms = t.Syms[0 : n+1]
+ ts := &t.Syms[n]
+ ts.Type = s.typ
+ ts.Value = uint64(s.value)
+ ts.GoType = uint64(s.gotype)
switch s.typ {
default:
// rewrite name to use . instead of · (c2 b7)
- w := 0;
- b := s.name;
+ w := 0
+ b := s.name
for i := 0; i < len(b); i++ {
if b[i] == 0xc2 && i+1 < len(b) && b[i+1] == 0xb7 {
- i++;
- b[i] = '.';
+ i++
+ b[i] = '.'
}
- b[w] = b[i];
- w++;
+ b[w] = b[i]
+ w++
}
- ts.Name = string(s.name[0:w]);
+ ts.Name = string(s.name[0:w])
case 'z', 'Z':
if lasttyp != 'z' && lasttyp != 'Z' {
nz++
}
for i := 0; i < len(s.name); i += 2 {
- eltIdx := binary.BigEndian.Uint16(s.name[i : i+2]);
- elt, ok := fname[eltIdx];
+ eltIdx := binary.BigEndian.Uint16(s.name[i : i+2])
+ elt, ok := fname[eltIdx]
if !ok {
return &DecodingError{-1, "bad filename code", eltIdx}
}
if n := len(ts.Name); n > 0 && ts.Name[n-1] != '/' {
ts.Name += "/"
}
- ts.Name += elt;
+ ts.Name += elt
}
}
switch s.typ {
@@ -208,61 +208,61 @@ func NewTable(symtab []byte, pcln *LineTable) (*Table, os.Error) {
case 'f':
fname[uint16(s.value)] = ts.Name
}
- lasttyp = s.typ;
- return nil;
- });
+ lasttyp = s.typ
+ return nil
+ })
if err != nil {
return nil, err
}
- t.Funcs = make([]Func, 0, nf);
- t.Objs = make([]Obj, 0, nz);
- t.Files = make(map[string]*Obj);
+ t.Funcs = make([]Func, 0, nf)
+ t.Objs = make([]Obj, 0, nz)
+ t.Files = make(map[string]*Obj)
// Count text symbols and attach frame sizes, parameters, and
// locals to them. Also, find object file boundaries.
- var obj *Obj;
- lastf := 0;
+ var obj *Obj
+ lastf := 0
for i := 0; i < len(t.Syms); i++ {
- sym := &t.Syms[i];
+ sym := &t.Syms[i]
switch sym.Type {
- case 'Z', 'z': // path symbol
+ case 'Z', 'z': // path symbol
// Finish the current object
if obj != nil {
obj.Funcs = t.Funcs[lastf:]
}
- lastf = len(t.Funcs);
+ lastf = len(t.Funcs)
// Start new object
- n := len(t.Objs);
- t.Objs = t.Objs[0 : n+1];
- obj = &t.Objs[n];
+ n := len(t.Objs)
+ t.Objs = t.Objs[0 : n+1]
+ obj = &t.Objs[n]
// Count & copy path symbols
- var end int;
+ var end int
for end = i + 1; end < len(t.Syms); end++ {
if c := t.Syms[end].Type; c != 'Z' && c != 'z' {
break
}
}
- obj.Paths = t.Syms[i:end];
- i = end - 1; // loop will i++
+ obj.Paths = t.Syms[i:end]
+ i = end - 1 // loop will i++
// Record file names
- depth := 0;
+ depth := 0
for j := range obj.Paths {
- s := &obj.Paths[j];
+ s := &obj.Paths[j]
if s.Name == "" {
depth--
} else {
if depth == 0 {
t.Files[s.Name] = obj
}
- depth++;
+ depth++
}
}
- case 'T', 't', 'L', 'l': // text symbol
+ case 'T', 't', 'L', 'l': // text symbol
if n := len(t.Funcs); n > 0 {
t.Funcs[n-1].End = sym.Value
}
@@ -271,8 +271,8 @@ func NewTable(symtab []byte, pcln *LineTable) (*Table, os.Error) {
}
// Count parameter and local (auto) syms
- var np, na int;
- var end int;
+ var np, na int
+ var end int
countloop:
for end = i + 1; end < len(t.Syms); end++ {
switch t.Syms[end].Type {
@@ -286,50 +286,50 @@ func NewTable(symtab []byte, pcln *LineTable) (*Table, os.Error) {
}
// Fill in the function symbol
- n := len(t.Funcs);
- t.Funcs = t.Funcs[0 : n+1];
- fn := &t.Funcs[n];
- sym.Func = fn;
- fn.Params = make([]*Sym, 0, np);
- fn.Locals = make([]*Sym, 0, na);
- fn.Sym = sym;
- fn.Entry = sym.Value;
- fn.Obj = obj;
+ n := len(t.Funcs)
+ t.Funcs = t.Funcs[0 : n+1]
+ fn := &t.Funcs[n]
+ sym.Func = fn
+ fn.Params = make([]*Sym, 0, np)
+ fn.Locals = make([]*Sym, 0, na)
+ fn.Sym = sym
+ fn.Entry = sym.Value
+ fn.Obj = obj
if pcln != nil {
- fn.LineTable = pcln.slice(fn.Entry);
- pcln = fn.LineTable;
+ fn.LineTable = pcln.slice(fn.Entry)
+ pcln = fn.LineTable
}
for j := i; j < end; j++ {
- s := &t.Syms[j];
+ s := &t.Syms[j]
switch s.Type {
case 'm':
fn.FrameSize = int(s.Value)
case 'p':
- n := len(fn.Params);
- fn.Params = fn.Params[0 : n+1];
- fn.Params[n] = s;
+ n := len(fn.Params)
+ fn.Params = fn.Params[0 : n+1]
+ fn.Params[n] = s
case 'a':
- n := len(fn.Locals);
- fn.Locals = fn.Locals[0 : n+1];
- fn.Locals[n] = s;
+ n := len(fn.Locals)
+ fn.Locals = fn.Locals[0 : n+1]
+ fn.Locals[n] = s
}
}
- i = end - 1; // loop will i++
+ i = end - 1 // loop will i++
}
}
if obj != nil {
obj.Funcs = t.Funcs[lastf:]
}
- return &t, nil;
+ return &t, nil
}
// PCToFunc returns the function containing the program counter pc,
// or nil if there is no such function.
func (t *Table) PCToFunc(pc uint64) *Func {
- funcs := t.Funcs;
+ funcs := t.Funcs
for len(funcs) > 0 {
- m := len(funcs) / 2;
- fn := &funcs[m];
+ m := len(funcs) / 2
+ fn := &funcs[m]
switch {
case pc < fn.Entry:
funcs = funcs[0:m]
@@ -339,7 +339,7 @@ func (t *Table) PCToFunc(pc uint64) *Func {
funcs = funcs[m+1:]
}
}
- return nil;
+ return nil
}
// PCToLine looks up line number information for a program counter.
@@ -348,30 +348,30 @@ func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func) {
if fn = t.PCToFunc(pc); fn == nil {
return
}
- file, line = fn.Obj.lineFromAline(fn.LineTable.PCToLine(pc));
- return;
+ file, line = fn.Obj.lineFromAline(fn.LineTable.PCToLine(pc))
+ return
}
// LineToPC looks up the first program counter on the given line in
// the named file. Returns UnknownPathError or UnknownLineError if
// there is an error looking up this line.
func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err os.Error) {
- obj, ok := t.Files[file];
+ obj, ok := t.Files[file]
if !ok {
return 0, nil, UnknownFileError(file)
}
- abs, err := obj.alineFromLine(file, line);
+ abs, err := obj.alineFromLine(file, line)
if err != nil {
return
}
for i := range obj.Funcs {
- f := &obj.Funcs[i];
- pc := f.LineTable.LineToPC(abs, f.End);
+ f := &obj.Funcs[i]
+ pc := f.LineTable.LineToPC(abs, f.End)
if pc != 0 {
return pc, f, nil
}
}
- return 0, nil, &UnknownLineError{file, line};
+ return 0, nil, &UnknownLineError{file, line}
}
// LookupSym returns the text, data, or bss symbol with the given name,
@@ -379,7 +379,7 @@ func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err os.Err
func (t *Table) LookupSym(name string) *Sym {
// TODO(austin) Maybe make a map
for i := range t.Syms {
- s := &t.Syms[i];
+ s := &t.Syms[i]
switch s.Type {
case 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b':
if s.Name == name {
@@ -387,19 +387,19 @@ func (t *Table) LookupSym(name string) *Sym {
}
}
}
- return nil;
+ return nil
}
// LookupFunc returns the text, data, or bss symbol with the given name,
// or nil if no such symbol is found.
func (t *Table) LookupFunc(name string) *Func {
for i := range t.Funcs {
- f := &t.Funcs[i];
+ f := &t.Funcs[i]
if f.Sym.Name == name {
return f
}
}
- return nil;
+ return nil
}
// SymByAddr returns the text, data, or bss symbol starting at the given address.
@@ -407,7 +407,7 @@ func (t *Table) LookupFunc(name string) *Func {
func (t *Table) SymByAddr(addr uint64) *Sym {
// TODO(austin) Maybe make a map
for i := range t.Syms {
- s := &t.Syms[i];
+ s := &t.Syms[i]
switch s.Type {
case 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b':
if s.Value == addr {
@@ -415,7 +415,7 @@ func (t *Table) SymByAddr(addr uint64) *Sym {
}
}
}
- return nil;
+ return nil
}
/*
@@ -424,20 +424,20 @@ func (t *Table) SymByAddr(addr uint64) *Sym {
func (o *Obj) lineFromAline(aline int) (string, int) {
type stackEnt struct {
- path string;
- start int;
- offset int;
- prev *stackEnt;
+ path string
+ start int
+ offset int
+ prev *stackEnt
}
- noPath := &stackEnt{"", 0, 0, nil};
- tos := noPath;
+ noPath := &stackEnt{"", 0, 0, nil}
+ tos := noPath
// TODO(austin) I have no idea how 'Z' symbols work, except
// that they pop the stack.
pathloop:
for _, s := range o.Paths {
- val := int(s.Value);
+ val := int(s.Value)
switch {
case val > aline:
break pathloop
@@ -451,8 +451,8 @@ pathloop:
if tos == noPath {
return "<malformed symbol table>", 0
}
- tos.prev.offset += val - tos.start;
- tos = tos.prev;
+ tos.prev.offset += val - tos.start
+ tos = tos.prev
default:
// Push
@@ -463,7 +463,7 @@ pathloop:
if tos == noPath {
return "", 0
}
- return tos.path, aline - tos.start - tos.offset + 1;
+ return tos.path, aline - tos.start - tos.offset + 1
}
func (o *Obj) alineFromLine(path string, line int) (int, os.Error) {
@@ -478,18 +478,18 @@ func (o *Obj) alineFromLine(path string, line int) (int, os.Error) {
}
// Find this line at this stack level
- depth := 0;
- var incstart int;
- line += int(s.Value);
+ depth := 0
+ var incstart int
+ line += int(s.Value)
pathloop:
for _, s := range o.Paths[i:] {
- val := int(s.Value);
+ val := int(s.Value)
switch {
case depth == 1 && val >= line:
return line - 1, nil
case s.Name == "":
- depth--;
+ depth--
if depth == 0 {
break pathloop
} else if depth == 1 {
@@ -500,12 +500,12 @@ func (o *Obj) alineFromLine(path string, line int) (int, os.Error) {
if depth == 1 {
incstart = val
}
- depth++;
+ depth++
}
}
- return 0, &UnknownLineError{path, line};
+ return 0, &UnknownLineError{path, line}
}
- return 0, UnknownFileError(path);
+ return 0, UnknownFileError(path)
}
/*
@@ -516,14 +516,14 @@ func (o *Obj) alineFromLine(path string, line int) (int, os.Error) {
// the symbol table.
type UnknownFileError string
-func (e UnknownFileError) String() string { return "unknown file: " + string(e) }
+func (e UnknownFileError) String() string { return "unknown file: " + string(e) }
// UnknownLineError represents a failure to map a line to a program
// counter, either because the line is beyond the bounds of the file
// or because there is no code on the given line.
type UnknownLineError struct {
- File string;
- Line int;
+ File string
+ Line int
}
func (e *UnknownLineError) String() string {
@@ -533,16 +533,16 @@ func (e *UnknownLineError) String() string {
// DecodingError represents an error during the decoding of
// the symbol table.
type DecodingError struct {
- off int;
- msg string;
- val interface{};
+ off int
+ msg string
+ val interface{}
}
func (e *DecodingError) String() string {
- msg := e.msg;
+ msg := e.msg
if e.val != nil {
msg += fmt.Sprintf(" '%v'", e.val)
}
- msg += fmt.Sprintf(" at byte %#x", e.off);
- return msg;
+ msg += fmt.Sprintf(" at byte %#x", e.off)
+ return msg
}
diff --git a/src/pkg/debug/macho/file.go b/src/pkg/debug/macho/file.go
index 233490c83..7c492ef52 100644
--- a/src/pkg/debug/macho/file.go
+++ b/src/pkg/debug/macho/file.go
@@ -9,53 +9,53 @@ package macho
// High level access to low level data structures.
import (
- "bytes";
- "debug/dwarf";
- "encoding/binary";
- "fmt";
- "io";
- "os";
+ "bytes"
+ "debug/dwarf"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "os"
)
// A File represents an open Mach-O file.
type File struct {
- FileHeader;
- ByteOrder binary.ByteOrder;
- Loads []Load;
- Sections []*Section;
+ FileHeader
+ ByteOrder binary.ByteOrder
+ Loads []Load
+ Sections []*Section
- closer io.Closer;
+ closer io.Closer
}
// A Load represents any Mach-O load command.
type Load interface {
- Raw() []byte;
+ Raw() []byte
}
// A LoadBytes is the uninterpreted bytes of a Mach-O load command.
type LoadBytes []byte
-func (b LoadBytes) Raw() []byte { return b }
+func (b LoadBytes) Raw() []byte { return b }
// A SegmentHeader is the header for a Mach-O 32-bit or 64-bit load segment command.
type SegmentHeader struct {
- Cmd LoadCmd;
- Len uint32;
- Name string;
- Addr uint64;
- Memsz uint64;
- Offset uint64;
- Filesz uint64;
- Maxprot uint32;
- Prot uint32;
- Nsect uint32;
- Flag uint32;
+ Cmd LoadCmd
+ Len uint32
+ Name string
+ Addr uint64
+ Memsz uint64
+ Offset uint64
+ Filesz uint64
+ Maxprot uint32
+ Prot uint32
+ Nsect uint32
+ Flag uint32
}
// A Segment represents a Mach-O 32-bit or 64-bit load segment command.
type Segment struct {
- LoadBytes;
- SegmentHeader;
+ LoadBytes
+ SegmentHeader
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
@@ -63,34 +63,34 @@ type Segment struct {
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
- io.ReaderAt;
- sr *io.SectionReader;
+ io.ReaderAt
+ sr *io.SectionReader
}
// Data reads and returns the contents of the segment.
func (s *Segment) Data() ([]byte, os.Error) {
- dat := make([]byte, s.sr.Size());
- n, err := s.sr.ReadAt(dat, 0);
- return dat[0:n], err;
+ dat := make([]byte, s.sr.Size())
+ n, err := s.sr.ReadAt(dat, 0)
+ return dat[0:n], err
}
// Open returns a new ReadSeeker reading the segment.
-func (s *Segment) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
+func (s *Segment) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
type SectionHeader struct {
- Name string;
- Seg string;
- Addr uint64;
- Size uint64;
- Offset uint32;
- Align uint32;
- Reloff uint32;
- Nreloc uint32;
- Flags uint32;
+ Name string
+ Seg string
+ Addr uint64
+ Size uint64
+ Offset uint32
+ Align uint32
+ Reloff uint32
+ Nreloc uint32
+ Flags uint32
}
type Section struct {
- SectionHeader;
+ SectionHeader
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
@@ -98,19 +98,19 @@ type Section struct {
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
- io.ReaderAt;
- sr *io.SectionReader;
+ io.ReaderAt
+ sr *io.SectionReader
}
// Data reads and returns the contents of the Mach-O section.
func (s *Section) Data() ([]byte, os.Error) {
- dat := make([]byte, s.sr.Size());
- n, err := s.sr.ReadAt(dat, 0);
- return dat[0:n], err;
+ dat := make([]byte, s.sr.Size())
+ n, err := s.sr.ReadAt(dat, 0)
+ return dat[0:n], err
}
// Open returns a new ReadSeeker reading the Mach-O section.
-func (s *Section) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
+func (s *Section) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<63-1) }
/*
@@ -118,68 +118,68 @@ func (s *Section) Open() io.ReadSeeker { return io.NewSectionReader(s.sr, 0, 1<<
*/
type FormatError struct {
- off int64;
- msg string;
- val interface{};
+ off int64
+ msg string
+ val interface{}
}
func (e *FormatError) String() string {
- msg := e.msg;
+ msg := e.msg
if e.val != nil {
msg += fmt.Sprintf(" '%v' ", e.val)
}
- msg += fmt.Sprintf("in record at byte %#x", e.off);
- return msg;
+ msg += fmt.Sprintf("in record at byte %#x", e.off)
+ return msg
}
// Open opens the named file using os.Open and prepares it for use as a Mach-O binary.
func Open(name string) (*File, os.Error) {
- f, err := os.Open(name, os.O_RDONLY, 0);
+ f, err := os.Open(name, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
- ff, err := NewFile(f);
+ ff, err := NewFile(f)
if err != nil {
- f.Close();
- return nil, err;
+ f.Close()
+ return nil, err
}
- ff.closer = f;
- return ff, nil;
+ ff.closer = f
+ return ff, nil
}
// Close closes the File.
// If the File was created using NewFile directly instead of Open,
// Close has no effect.
func (f *File) Close() os.Error {
- var err os.Error;
+ var err os.Error
if f.closer != nil {
- err = f.closer.Close();
- f.closer = nil;
+ err = f.closer.Close()
+ f.closer = nil
}
- return err;
+ return err
}
// NewFile creates a new File for acecssing a Mach-O binary in an underlying reader.
// The Mach-O binary is expected to start at position 0 in the ReaderAt.
func NewFile(r io.ReaderAt) (*File, os.Error) {
- f := new(File);
- sr := io.NewSectionReader(r, 0, 1<<63-1);
+ f := new(File)
+ sr := io.NewSectionReader(r, 0, 1<<63-1)
// Read and decode Mach magic to determine byte order, size.
// Magic32 and Magic64 differ only in the bottom bit.
- var ident [4]uint8;
+ var ident [4]uint8
if _, err := r.ReadAt(&ident, 0); err != nil {
return nil, err
}
- be := binary.BigEndian.Uint32(&ident);
- le := binary.LittleEndian.Uint32(&ident);
+ be := binary.BigEndian.Uint32(&ident)
+ le := binary.LittleEndian.Uint32(&ident)
switch Magic32 &^ 1 {
case be &^ 1:
- f.ByteOrder = binary.BigEndian;
- f.Magic = be;
+ f.ByteOrder = binary.BigEndian
+ f.Magic = be
case le &^ 1:
- f.ByteOrder = binary.LittleEndian;
- f.Magic = le;
+ f.ByteOrder = binary.LittleEndian
+ f.Magic = le
}
// Read entire file header.
@@ -188,138 +188,138 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
}
// Then load commands.
- offset := int64(fileHeaderSize32);
+ offset := int64(fileHeaderSize32)
if f.Magic == Magic64 {
offset = fileHeaderSize64
}
- dat := make([]byte, f.Cmdsz);
+ dat := make([]byte, f.Cmdsz)
if _, err := r.ReadAt(dat, offset); err != nil {
return nil, err
}
- f.Loads = make([]Load, f.Ncmd);
- bo := f.ByteOrder;
+ f.Loads = make([]Load, f.Ncmd)
+ bo := f.ByteOrder
for i := range f.Loads {
// Each load command begins with uint32 command and length.
if len(dat) < 8 {
return nil, &FormatError{offset, "command block too small", nil}
}
- cmd, siz := LoadCmd(bo.Uint32(dat[0:4])), bo.Uint32(dat[4:8]);
+ cmd, siz := LoadCmd(bo.Uint32(dat[0:4])), bo.Uint32(dat[4:8])
if siz < 8 || siz > uint32(len(dat)) {
return nil, &FormatError{offset, "invalid command block size", nil}
}
- var cmddat []byte;
- cmddat, dat = dat[0:siz], dat[siz:];
- offset += int64(siz);
- var s *Segment;
+ var cmddat []byte
+ cmddat, dat = dat[0:siz], dat[siz:]
+ offset += int64(siz)
+ var s *Segment
switch cmd {
default:
f.Loads[i] = LoadBytes(cmddat)
case LoadCmdSegment:
- var seg32 Segment32;
- b := bytes.NewBuffer(cmddat);
+ var seg32 Segment32
+ b := bytes.NewBuffer(cmddat)
if err := binary.Read(b, bo, &seg32); err != nil {
return nil, err
}
- s = new(Segment);
- s.LoadBytes = cmddat;
- s.Cmd = cmd;
- s.Len = siz;
- s.Name = cstring(&seg32.Name);
- s.Addr = uint64(seg32.Addr);
- s.Memsz = uint64(seg32.Memsz);
- s.Offset = uint64(seg32.Offset);
- s.Filesz = uint64(seg32.Filesz);
- s.Maxprot = seg32.Maxprot;
- s.Prot = seg32.Prot;
- s.Nsect = seg32.Nsect;
- s.Flag = seg32.Flag;
- f.Loads[i] = s;
+ s = new(Segment)
+ s.LoadBytes = cmddat
+ s.Cmd = cmd
+ s.Len = siz
+ s.Name = cstring(&seg32.Name)
+ s.Addr = uint64(seg32.Addr)
+ s.Memsz = uint64(seg32.Memsz)
+ s.Offset = uint64(seg32.Offset)
+ s.Filesz = uint64(seg32.Filesz)
+ s.Maxprot = seg32.Maxprot
+ s.Prot = seg32.Prot
+ s.Nsect = seg32.Nsect
+ s.Flag = seg32.Flag
+ f.Loads[i] = s
for i := 0; i < int(s.Nsect); i++ {
- var sh32 Section32;
+ var sh32 Section32
if err := binary.Read(b, bo, &sh32); err != nil {
return nil, err
}
- sh := new(Section);
- sh.Name = cstring(&sh32.Name);
- sh.Seg = cstring(&sh32.Seg);
- sh.Addr = uint64(sh32.Addr);
- sh.Size = uint64(sh32.Size);
- sh.Offset = sh32.Offset;
- sh.Align = sh32.Align;
- sh.Reloff = sh32.Reloff;
- sh.Nreloc = sh32.Nreloc;
- sh.Flags = sh32.Flags;
- f.pushSection(sh, r);
+ sh := new(Section)
+ sh.Name = cstring(&sh32.Name)
+ sh.Seg = cstring(&sh32.Seg)
+ sh.Addr = uint64(sh32.Addr)
+ sh.Size = uint64(sh32.Size)
+ sh.Offset = sh32.Offset
+ sh.Align = sh32.Align
+ sh.Reloff = sh32.Reloff
+ sh.Nreloc = sh32.Nreloc
+ sh.Flags = sh32.Flags
+ f.pushSection(sh, r)
}
case LoadCmdSegment64:
- var seg64 Segment64;
- b := bytes.NewBuffer(cmddat);
+ var seg64 Segment64
+ b := bytes.NewBuffer(cmddat)
if err := binary.Read(b, bo, &seg64); err != nil {
return nil, err
}
- s = new(Segment);
- s.LoadBytes = cmddat;
- s.Cmd = cmd;
- s.Len = siz;
- s.Name = cstring(&seg64.Name);
- s.Addr = seg64.Addr;
- s.Memsz = seg64.Memsz;
- s.Offset = seg64.Offset;
- s.Filesz = seg64.Filesz;
- s.Maxprot = seg64.Maxprot;
- s.Prot = seg64.Prot;
- s.Nsect = seg64.Nsect;
- s.Flag = seg64.Flag;
- f.Loads[i] = s;
+ s = new(Segment)
+ s.LoadBytes = cmddat
+ s.Cmd = cmd
+ s.Len = siz
+ s.Name = cstring(&seg64.Name)
+ s.Addr = seg64.Addr
+ s.Memsz = seg64.Memsz
+ s.Offset = seg64.Offset
+ s.Filesz = seg64.Filesz
+ s.Maxprot = seg64.Maxprot
+ s.Prot = seg64.Prot
+ s.Nsect = seg64.Nsect
+ s.Flag = seg64.Flag
+ f.Loads[i] = s
for i := 0; i < int(s.Nsect); i++ {
- var sh64 Section64;
+ var sh64 Section64
if err := binary.Read(b, bo, &sh64); err != nil {
return nil, err
}
- sh := new(Section);
- sh.Name = cstring(&sh64.Name);
- sh.Seg = cstring(&sh64.Seg);
- sh.Addr = sh64.Addr;
- sh.Size = sh64.Size;
- sh.Offset = sh64.Offset;
- sh.Align = sh64.Align;
- sh.Reloff = sh64.Reloff;
- sh.Nreloc = sh64.Nreloc;
- sh.Flags = sh64.Flags;
- f.pushSection(sh, r);
+ sh := new(Section)
+ sh.Name = cstring(&sh64.Name)
+ sh.Seg = cstring(&sh64.Seg)
+ sh.Addr = sh64.Addr
+ sh.Size = sh64.Size
+ sh.Offset = sh64.Offset
+ sh.Align = sh64.Align
+ sh.Reloff = sh64.Reloff
+ sh.Nreloc = sh64.Nreloc
+ sh.Flags = sh64.Flags
+ f.pushSection(sh, r)
}
}
if s != nil {
- s.sr = io.NewSectionReader(r, int64(s.Offset), int64(s.Filesz));
- s.ReaderAt = s.sr;
+ s.sr = io.NewSectionReader(r, int64(s.Offset), int64(s.Filesz))
+ s.ReaderAt = s.sr
}
}
- return f, nil;
+ return f, nil
}
func (f *File) pushSection(sh *Section, r io.ReaderAt) {
- n := len(f.Sections);
+ n := len(f.Sections)
if n >= cap(f.Sections) {
- m := (n + 1) * 2;
- new := make([]*Section, n, m);
+ m := (n + 1) * 2
+ new := make([]*Section, n, m)
for i, sh := range f.Sections {
new[i] = sh
}
- f.Sections = new;
+ f.Sections = new
}
- f.Sections = f.Sections[0 : n+1];
- f.Sections[n] = sh;
- sh.sr = io.NewSectionReader(r, int64(sh.Offset), int64(sh.Size));
- sh.ReaderAt = sh.sr;
+ f.Sections = f.Sections[0 : n+1]
+ f.Sections[n] = sh
+ sh.sr = io.NewSectionReader(r, int64(sh.Offset), int64(sh.Size))
+ sh.ReaderAt = sh.sr
}
func cstring(b []byte) string {
- var i int;
+ var i int
for i = 0; i < len(b) && b[i] != 0; i++ {
}
- return string(b[0:i]);
+ return string(b[0:i])
}
// Segment returns the first Segment with the given name, or nil if no such segment exists.
@@ -329,7 +329,7 @@ func (f *File) Segment(name string) *Segment {
return s
}
}
- return nil;
+ return nil
}
// Section returns the first section with the given name, or nil if no such
@@ -340,7 +340,7 @@ func (f *File) Section(name string) *Section {
return s
}
}
- return nil;
+ return nil
}
// DWARF returns the DWARF debug information for the Mach-O file.
@@ -348,21 +348,21 @@ func (f *File) DWARF() (*dwarf.Data, os.Error) {
// There are many other DWARF sections, but these
// are the required ones, and the debug/dwarf package
// does not use the others, so don't bother loading them.
- var names = [...]string{"abbrev", "info", "str"};
- var dat [len(names)][]byte;
+ var names = [...]string{"abbrev", "info", "str"}
+ var dat [len(names)][]byte
for i, name := range names {
- name = "__debug_" + name;
- s := f.Section(name);
+ name = "__debug_" + name
+ s := f.Section(name)
if s == nil {
return nil, os.NewError("missing Mach-O section " + name)
}
- b, err := s.Data();
+ b, err := s.Data()
if err != nil && uint64(len(b)) < s.Size {
return nil, err
}
- dat[i] = b;
+ dat[i] = b
}
- abbrev, info, str := dat[0], dat[1], dat[2];
- return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str);
+ abbrev, info, str := dat[0], dat[1], dat[2]
+ return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str)
}
diff --git a/src/pkg/debug/macho/file_test.go b/src/pkg/debug/macho/file_test.go
index e1d75da15..d69e49cbf 100644
--- a/src/pkg/debug/macho/file_test.go
+++ b/src/pkg/debug/macho/file_test.go
@@ -5,15 +5,15 @@
package macho
import (
- "reflect";
- "testing";
+ "reflect"
+ "testing"
)
type fileTest struct {
- file string;
- hdr FileHeader;
- segments []*SegmentHeader;
- sections []*SectionHeader;
+ file string
+ hdr FileHeader
+ segments []*SegmentHeader
+ sections []*SectionHeader
}
var fileTests = []fileTest{
@@ -100,41 +100,41 @@ var fileTests = []fileTest{
func TestOpen(t *testing.T) {
for i := range fileTests {
- tt := &fileTests[i];
+ tt := &fileTests[i]
- f, err := Open(tt.file);
+ f, err := Open(tt.file)
if err != nil {
- t.Error(err);
- continue;
+ t.Error(err)
+ continue
}
if !reflect.DeepEqual(f.FileHeader, tt.hdr) {
- t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr);
- continue;
+ t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr)
+ continue
}
for i, l := range f.Loads {
if i >= len(tt.segments) {
break
}
- sh := tt.segments[i];
- s, ok := l.(*Segment);
+ sh := tt.segments[i]
+ s, ok := l.(*Segment)
if sh == nil {
if ok {
t.Errorf("open %s, section %d: skipping %#v\n", tt.file, i, &s.SegmentHeader)
}
- continue;
+ continue
}
if !ok {
- t.Errorf("open %s, section %d: not *Segment\n", tt.file, i);
- continue;
+ t.Errorf("open %s, section %d: not *Segment\n", tt.file, i)
+ continue
}
- have := &s.SegmentHeader;
- want := sh;
+ have := &s.SegmentHeader
+ want := sh
if !reflect.DeepEqual(have, want) {
t.Errorf("open %s, segment %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want)
}
}
- tn := len(tt.segments);
- fn := len(f.Loads);
+ tn := len(tt.segments)
+ fn := len(f.Loads)
if tn != fn {
t.Errorf("open %s: len(Loads) = %d, want %d", tt.file, fn, tn)
}
@@ -143,14 +143,14 @@ func TestOpen(t *testing.T) {
if i >= len(tt.sections) {
break
}
- have := &sh.SectionHeader;
- want := tt.sections[i];
+ have := &sh.SectionHeader
+ want := tt.sections[i]
if !reflect.DeepEqual(have, want) {
t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want)
}
}
- tn = len(tt.sections);
- fn = len(f.Sections);
+ tn = len(tt.sections)
+ fn = len(f.Sections)
if tn != fn {
t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn)
}
diff --git a/src/pkg/debug/macho/macho.go b/src/pkg/debug/macho/macho.go
index abc59c8a6..41962d562 100644
--- a/src/pkg/debug/macho/macho.go
+++ b/src/pkg/debug/macho/macho.go
@@ -11,39 +11,39 @@ import "strconv"
// A FileHeader represents a Mach-O file header.
type FileHeader struct {
- Magic uint32;
- Cpu Cpu;
- SubCpu uint32;
- Type Type;
- Ncmd uint32;
- Cmdsz uint32;
- Flags uint32;
+ Magic uint32
+ Cpu Cpu
+ SubCpu uint32
+ Type Type
+ Ncmd uint32
+ Cmdsz uint32
+ Flags uint32
}
const (
- fileHeaderSize32 = 7 * 4;
- fileHeaderSize64 = 8 * 4;
+ fileHeaderSize32 = 7 * 4
+ fileHeaderSize64 = 8 * 4
)
const (
- Magic32 uint32 = 0xfeedface;
- Magic64 uint32 = 0xfeedfacf;
+ Magic32 uint32 = 0xfeedface
+ Magic64 uint32 = 0xfeedfacf
)
// A Type is a Mach-O file type, either an object or an executable.
type Type uint32
const (
- TypeObj Type = 1;
- TypeExec Type = 2;
+ TypeObj Type = 1
+ TypeExec Type = 2
)
// A Cpu is a Mach-O cpu type.
type Cpu uint32
const (
- Cpu386 Cpu = 7;
- CpuAmd64 Cpu = Cpu386 + 1<<24;
+ Cpu386 Cpu = 7
+ CpuAmd64 Cpu = Cpu386 + 1<<24
)
var cpuStrings = []intName{
@@ -51,17 +51,17 @@ var cpuStrings = []intName{
intName{uint32(CpuAmd64), "CpuAmd64"},
}
-func (i Cpu) String() string { return stringName(uint32(i), cpuStrings, false) }
-func (i Cpu) GoString() string { return stringName(uint32(i), cpuStrings, true) }
+func (i Cpu) String() string { return stringName(uint32(i), cpuStrings, false) }
+func (i Cpu) GoString() string { return stringName(uint32(i), cpuStrings, true) }
// A LoadCmd is a Mach-O load command.
type LoadCmd uint32
const (
- LoadCmdSegment LoadCmd = 1;
- LoadCmdSegment64 LoadCmd = 25;
- LoadCmdThread LoadCmd = 4;
- LoadCmdUnixThread LoadCmd = 5; // thread+stack
+ LoadCmdSegment LoadCmd = 1
+ LoadCmdSegment64 LoadCmd = 25
+ LoadCmdThread LoadCmd = 4
+ LoadCmdUnixThread LoadCmd = 5 // thread+stack
)
var cmdStrings = []intName{
@@ -71,126 +71,126 @@ var cmdStrings = []intName{
intName{uint32(LoadCmdUnixThread), "LoadCmdUnixThread"},
}
-func (i LoadCmd) String() string { return stringName(uint32(i), cmdStrings, false) }
-func (i LoadCmd) GoString() string { return stringName(uint32(i), cmdStrings, true) }
+func (i LoadCmd) String() string { return stringName(uint32(i), cmdStrings, false) }
+func (i LoadCmd) GoString() string { return stringName(uint32(i), cmdStrings, true) }
// A Segment64 is a 64-bit Mach-O segment load command.
type Segment64 struct {
- Cmd LoadCmd;
- Len uint32;
- Name [16]byte;
- Addr uint64;
- Memsz uint64;
- Offset uint64;
- Filesz uint64;
- Maxprot uint32;
- Prot uint32;
- Nsect uint32;
- Flag uint32;
+ Cmd LoadCmd
+ Len uint32
+ Name [16]byte
+ Addr uint64
+ Memsz uint64
+ Offset uint64
+ Filesz uint64
+ Maxprot uint32
+ Prot uint32
+ Nsect uint32
+ Flag uint32
}
// A Segment32 is a 32-bit Mach-O segment load command.
type Segment32 struct {
- Cmd LoadCmd;
- Len uint32;
- Name [16]byte;
- Addr uint32;
- Memsz uint32;
- Offset uint32;
- Filesz uint32;
- Maxprot uint32;
- Prot uint32;
- Nsect uint32;
- Flag uint32;
+ Cmd LoadCmd
+ Len uint32
+ Name [16]byte
+ Addr uint32
+ Memsz uint32
+ Offset uint32
+ Filesz uint32
+ Maxprot uint32
+ Prot uint32
+ Nsect uint32
+ Flag uint32
}
// A Section32 is a 32-bit Mach-O section header.
type Section32 struct {
- Name [16]byte;
- Seg [16]byte;
- Addr uint32;
- Size uint32;
- Offset uint32;
- Align uint32;
- Reloff uint32;
- Nreloc uint32;
- Flags uint32;
- Reserve1 uint32;
- Reserve2 uint32;
+ Name [16]byte
+ Seg [16]byte
+ Addr uint32
+ Size uint32
+ Offset uint32
+ Align uint32
+ Reloff uint32
+ Nreloc uint32
+ Flags uint32
+ Reserve1 uint32
+ Reserve2 uint32
}
// A Section32 is a 64-bit Mach-O section header.
type Section64 struct {
- Name [16]byte;
- Seg [16]byte;
- Addr uint64;
- Size uint64;
- Offset uint32;
- Align uint32;
- Reloff uint32;
- Nreloc uint32;
- Flags uint32;
- Reserve1 uint32;
- Reserve2 uint32;
- Reserve3 uint32;
+ Name [16]byte
+ Seg [16]byte
+ Addr uint64
+ Size uint64
+ Offset uint32
+ Align uint32
+ Reloff uint32
+ Nreloc uint32
+ Flags uint32
+ Reserve1 uint32
+ Reserve2 uint32
+ Reserve3 uint32
}
// A Thread is a Mach-O thread state command.
type Thread struct {
- Cmd LoadCmd;
- Len uint32;
- Type uint32;
- Data []uint32;
+ Cmd LoadCmd
+ Len uint32
+ Type uint32
+ Data []uint32
}
// Regs386 is the Mach-O 386 register structure.
type Regs386 struct {
- AX uint32;
- BX uint32;
- CX uint32;
- DX uint32;
- DI uint32;
- SI uint32;
- BP uint32;
- SP uint32;
- SS uint32;
- FLAGS uint32;
- IP uint32;
- CS uint32;
- DS uint32;
- ES uint32;
- FS uint32;
- GS uint32;
+ AX uint32
+ BX uint32
+ CX uint32
+ DX uint32
+ DI uint32
+ SI uint32
+ BP uint32
+ SP uint32
+ SS uint32
+ FLAGS uint32
+ IP uint32
+ CS uint32
+ DS uint32
+ ES uint32
+ FS uint32
+ GS uint32
}
// RegsAMD64 is the Mach-O AMD64 register structure.
type RegsAMD64 struct {
- AX uint64;
- BX uint64;
- CX uint64;
- DX uint64;
- DI uint64;
- SI uint64;
- BP uint64;
- SP uint64;
- R8 uint64;
- R9 uint64;
- R10 uint64;
- R11 uint64;
- R12 uint64;
- R13 uint64;
- R14 uint64;
- R15 uint64;
- IP uint64;
- FLAGS uint64;
- CS uint64;
- FS uint64;
- GS uint64;
+ AX uint64
+ BX uint64
+ CX uint64
+ DX uint64
+ DI uint64
+ SI uint64
+ BP uint64
+ SP uint64
+ R8 uint64
+ R9 uint64
+ R10 uint64
+ R11 uint64
+ R12 uint64
+ R13 uint64
+ R14 uint64
+ R15 uint64
+ IP uint64
+ FLAGS uint64
+ CS uint64
+ FS uint64
+ GS uint64
}
type intName struct {
- i uint32;
- s string;
+ i uint32
+ s string
}
func stringName(i uint32, names []intName, goSyntax bool) string {
@@ -199,14 +199,14 @@ func stringName(i uint32, names []intName, goSyntax bool) string {
if goSyntax {
return "macho." + n.s
}
- return n.s;
+ return n.s
}
}
- return strconv.Uitoa64(uint64(i));
+ return strconv.Uitoa64(uint64(i))
}
func flagName(i uint32, names []intName, goSyntax bool) string {
- s := "";
+ s := ""
for _, n := range names {
if n.i&i == n.i {
if len(s) > 0 {
@@ -215,8 +215,8 @@ func flagName(i uint32, names []intName, goSyntax bool) string {
if goSyntax {
s += "macho."
}
- s += n.s;
- i -= n.i;
+ s += n.s
+ i -= n.i
}
}
if len(s) == 0 {
@@ -225,5 +225,5 @@ func flagName(i uint32, names []intName, goSyntax bool) string {
if i != 0 {
s += "+0x" + strconv.Uitob64(uint64(i), 16)
}
- return s;
+ return s
}
diff --git a/src/pkg/debug/proc/proc.go b/src/pkg/debug/proc/proc.go
index 7f8e778c6..d5341a745 100644
--- a/src/pkg/debug/proc/proc.go
+++ b/src/pkg/debug/proc/proc.go
@@ -13,22 +13,22 @@ package proc
// and proc_darwin.go do, because deps.bash only looks at
// this file.
import (
- _ "container/vector";
- _ "fmt";
- _ "io";
- "os";
- _ "runtime";
- "strconv";
- _ "strings";
- _ "sync";
- _ "syscall";
+ _ "container/vector"
+ _ "fmt"
+ _ "io"
+ "os"
+ _ "runtime"
+ "strconv"
+ _ "strings"
+ _ "sync"
+ _ "syscall"
)
type Word uint64
// A Cause explains why a thread is stopped.
type Cause interface {
- String() string;
+ String() string
}
// Regs is a set of named machine registers, including a program
@@ -42,33 +42,33 @@ type Cause interface {
// other per-register information like how to print it.
type Regs interface {
// PC returns the value of the program counter.
- PC() Word;
+ PC() Word
// SetPC sets the program counter to val.
- SetPC(val Word) os.Error;
+ SetPC(val Word) os.Error
// Link returns the link register, if any.
- Link() Word;
+ Link() Word
// SetLink sets the link register to val.
- SetLink(val Word) os.Error;
+ SetLink(val Word) os.Error
// SP returns the value of the stack pointer.
- SP() Word;
+ SP() Word
// SetSP sets the stack pointer register to val.
- SetSP(val Word) os.Error;
+ SetSP(val Word) os.Error
// Names returns the names of all of the registers.
- Names() []string;
+ Names() []string
// Get returns the value of a register, where i corresponds to
// the index of the register's name in the array returned by
// Names.
- Get(i int) Word;
+ Get(i int) Word
// Set sets the value of a register.
- Set(i int, val Word) os.Error;
+ Set(i int, val Word) os.Error
}
// Thread is a thread in the process being traced.
@@ -78,15 +78,15 @@ type Thread interface {
// breakpoint, this will step over the breakpoint.
//
// XXX What if it's stopped because of a signal?
- Step() os.Error;
+ Step() os.Error
// Stopped returns the reason that this thread is stopped. It
// is an error is the thread not stopped.
- Stopped() (Cause, os.Error);
+ Stopped() (Cause, os.Error)
// Regs retrieves the current register values from this
// thread. The thread must be stopped.
- Regs() (Regs, os.Error);
+ Regs() (Regs, os.Error)
// Peek reads len(out) bytes from the address addr in this
// thread into out. The thread must be stopped. It returns
@@ -95,7 +95,7 @@ type Thread interface {
// could be short and an error will be returned. If this does
// encounter unmapped memory, it will read up to the byte
// preceding the unmapped area.
- Peek(addr Word, out []byte) (int, os.Error);
+ Peek(addr Word, out []byte) (int, os.Error)
// Poke writes b to the address addr in this thread. The
// thread must be stopped. It returns the number of bytes
@@ -104,7 +104,7 @@ type Thread interface {
// short and an error will be returned. If this does
// encounter unmapped memory, it will write up to the byte
// preceding the unmapped area.
- Poke(addr Word, b []byte) (int, os.Error);
+ Poke(addr Word, b []byte) (int, os.Error)
}
// Process is a process being traced. It consists of a set of
@@ -112,37 +112,37 @@ type Thread interface {
// process's state extends to all of its threads.
type Process interface {
// Threads returns an array of all threads in this process.
- Threads() []Thread;
+ Threads() []Thread
// AddBreakpoint creates a new breakpoint at program counter
// pc. Breakpoints can only be created when the process is
// stopped. It is an error if a breakpoint already exists at
// pc.
- AddBreakpoint(pc Word) os.Error;
+ AddBreakpoint(pc Word) os.Error
// RemoveBreakpoint removes the breakpoint at the program
// counter pc. It is an error if no breakpoint exists at pc.
- RemoveBreakpoint(pc Word) os.Error;
+ RemoveBreakpoint(pc Word) os.Error
// Stop stops all running threads in this process before
// returning.
- Stop() os.Error;
+ Stop() os.Error
// Continue resumes execution of all threads in this process.
// Any thread that is stopped on a breakpoint will be stepped
// over that breakpoint. Any thread that is stopped because
// of a signal (other than SIGSTOP or SIGTRAP) will receive
// the pending signal.
- Continue() os.Error;
+ Continue() os.Error
// WaitStop waits until all threads in process p are stopped
// as a result of some thread hitting a breakpoint, receiving
// a signal, creating a new thread, or exiting.
- WaitStop() os.Error;
+ WaitStop() os.Error
// Detach detaches from this process. All stopped threads
// will be resumed.
- Detach() os.Error;
+ Detach() os.Error
}
// Stopped is a stop cause used for threads that are stopped either by
@@ -151,14 +151,14 @@ type Process interface {
// stop.
type Stopped struct{}
-func (c Stopped) String() string { return "stopped" }
+func (c Stopped) String() string { return "stopped" }
// Breakpoint is a stop cause resulting from a thread reaching a set
// breakpoint.
type Breakpoint Word
// PC returns the program counter that the program is stopped at.
-func (c Breakpoint) PC() Word { return Word(c) }
+func (c Breakpoint) PC() Word { return Word(c) }
func (c Breakpoint) String() string {
return "breakpoint at 0x" + strconv.Uitob64(uint64(c.PC()), 16)
@@ -169,47 +169,47 @@ func (c Breakpoint) String() string {
type Signal string
// Signal returns the signal being delivered to the thread.
-func (c Signal) Name() string { return string(c) }
+func (c Signal) Name() string { return string(c) }
-func (c Signal) String() string { return c.Name() }
+func (c Signal) String() string { return c.Name() }
// ThreadCreate is a stop cause returned from an existing thread when
// it creates a new thread. The new thread exists in a primordial
// form at this point and will begin executing in earnest when the
// process is continued.
type ThreadCreate struct {
- thread Thread;
+ thread Thread
}
-func (c *ThreadCreate) NewThread() Thread { return c.thread }
+func (c *ThreadCreate) NewThread() Thread { return c.thread }
-func (c *ThreadCreate) String() string { return "thread create" }
+func (c *ThreadCreate) String() string { return "thread create" }
// ThreadExit is a stop cause resulting from a thread exiting. When
// this cause first arises, the thread will still be in the list of
// process threads and its registers and memory will still be
// accessible.
type ThreadExit struct {
- exitStatus int;
- signal string;
+ exitStatus int
+ signal string
}
// Exited returns true if the thread exited normally.
-func (c *ThreadExit) Exited() bool { return c.exitStatus != -1 }
+func (c *ThreadExit) Exited() bool { return c.exitStatus != -1 }
// ExitStatus returns the exit status of the thread if it exited
// normally or -1 otherwise.
-func (c *ThreadExit) ExitStatus() int { return c.exitStatus }
+func (c *ThreadExit) ExitStatus() int { return c.exitStatus }
// Signaled returns true if the thread was terminated by a signal.
-func (c *ThreadExit) Signaled() bool { return c.exitStatus == -1 }
+func (c *ThreadExit) Signaled() bool { return c.exitStatus == -1 }
// StopSignal returns the signal that terminated the thread, or "" if
// it was not terminated by a signal.
-func (c *ThreadExit) StopSignal() string { return c.signal }
+func (c *ThreadExit) StopSignal() string { return c.signal }
func (c *ThreadExit) String() string {
- res := "thread exited ";
+ res := "thread exited "
switch {
case c.Exited():
res += "with status " + strconv.Itoa(c.ExitStatus())
@@ -218,5 +218,5 @@ func (c *ThreadExit) String() string {
default:
res += "from unknown cause"
}
- return res;
+ return res
}
diff --git a/src/pkg/debug/proc/proc_linux.go b/src/pkg/debug/proc/proc_linux.go
index b7192580d..7273e97d8 100644
--- a/src/pkg/debug/proc/proc_linux.go
+++ b/src/pkg/debug/proc/proc_linux.go
@@ -7,15 +7,15 @@ package proc
// TODO(rsc): Imports here after to be in proc.go too in order
// for deps.bash to get the right answer.
import (
- "container/vector";
- "fmt";
- "io/ioutil";
- "os";
- "runtime";
- "strconv";
- "strings";
- "sync";
- "syscall";
+ "container/vector"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+ "syscall"
)
// This is an implementation of the process tracing interface using
@@ -35,9 +35,9 @@ import (
// as well as experimentation and examination of gdb's behavior.
const (
- trace = false;
- traceIP = false;
- traceMem = false;
+ trace = false
+ traceIP = false
+ traceMem = false
)
/*
@@ -63,17 +63,17 @@ const (
type threadState string
const (
- running threadState = "Running";
- singleStepping threadState = "SingleStepping"; // Transient
- stopping threadState = "Stopping"; // Transient
- stopped threadState = "Stopped";
- stoppedBreakpoint threadState = "StoppedBreakpoint";
- stoppedSignal threadState = "StoppedSignal";
- stoppedThreadCreate threadState = "StoppedThreadCreate";
- stoppedExiting threadState = "StoppedExiting";
- exiting threadState = "Exiting"; // Transient (except main thread)
- exited threadState = "Exited";
- detached threadState = "Detached";
+ running threadState = "Running"
+ singleStepping threadState = "SingleStepping" // Transient
+ stopping threadState = "Stopping" // Transient
+ stopped threadState = "Stopped"
+ stoppedBreakpoint threadState = "StoppedBreakpoint"
+ stoppedSignal threadState = "StoppedSignal"
+ stoppedThreadCreate threadState = "StoppedThreadCreate"
+ stoppedExiting threadState = "StoppedExiting"
+ exiting threadState = "Exiting" // Transient (except main thread)
+ exited threadState = "Exited"
+ detached threadState = "Detached"
)
func (ts threadState) isRunning() bool {
@@ -84,11 +84,11 @@ func (ts threadState) isStopped() bool {
return ts == stopped || ts == stoppedBreakpoint || ts == stoppedSignal || ts == stoppedThreadCreate || ts == stoppedExiting
}
-func (ts threadState) isZombie() bool { return ts == exiting }
+func (ts threadState) isZombie() bool { return ts == exiting }
-func (ts threadState) isTerminal() bool { return ts == exited || ts == detached }
+func (ts threadState) isTerminal() bool { return ts == exited || ts == detached }
-func (ts threadState) String() string { return string(ts) }
+func (ts threadState) String() string { return string(ts) }
/*
* Basic types
@@ -98,15 +98,15 @@ func (ts threadState) String() string { return string(ts) }
// including its program counter, the overwritten text if the
// breakpoint is installed.
type breakpoint struct {
- pc uintptr;
- olddata []byte;
+ pc uintptr
+ olddata []byte
}
func (bp *breakpoint) String() string {
if bp == nil {
return "<nil>"
}
- return fmt.Sprintf("%#x", bp.pc);
+ return fmt.Sprintf("%#x", bp.pc)
}
// bpinst386 is the breakpoint instruction used on 386 and amd64.
@@ -114,15 +114,15 @@ var bpinst386 = []byte{0xcc}
// A debugEvent represents a reason a thread stopped or a wait error.
type debugEvent struct {
- *os.Waitmsg;
- t *thread;
- err os.Error;
+ *os.Waitmsg
+ t *thread
+ err os.Error
}
// A debugReq is a request to execute a closure in the monitor thread.
type debugReq struct {
- f func() os.Error;
- res chan os.Error;
+ f func() os.Error
+ res chan os.Error
}
// A transitionHandler specifies a function to be called when a thread
@@ -131,8 +131,8 @@ type debugReq struct {
// invokes a handler, it removes the handler from the handler queue.
// The handler should re-add itself if needed.
type transitionHandler struct {
- handle func(*thread, threadState, threadState);
- onErr func(os.Error);
+ handle func(*thread, threadState, threadState)
+ onErr func(os.Error)
}
// A process is a Linux process, which consists of a set of threads.
@@ -146,36 +146,36 @@ type transitionHandler struct {
// returns false, the monitor is not running (the ready channel has
// been closed), and the reason it is not running will be stored in err.
type process struct {
- pid int;
- threads map[int]*thread;
- breakpoints map[uintptr]*breakpoint;
- ready chan bool;
- debugEvents chan *debugEvent;
- debugReqs chan *debugReq;
- stopReq chan os.Error;
- transitionHandlers *vector.Vector;
- err os.Error;
+ pid int
+ threads map[int]*thread
+ breakpoints map[uintptr]*breakpoint
+ ready chan bool
+ debugEvents chan *debugEvent
+ debugReqs chan *debugReq
+ stopReq chan os.Error
+ transitionHandlers *vector.Vector
+ err os.Error
}
// A thread represents a Linux thread in another process that is being
// debugged. Each running thread has an associated goroutine that
// waits for thread updates and sends them to the process monitor.
type thread struct {
- tid int;
- proc *process;
+ tid int
+ proc *process
// Whether to ignore the next SIGSTOP received by wait.
- ignoreNextSigstop bool;
+ ignoreNextSigstop bool
// Thread state. Only modified via setState.
- state threadState;
+ state threadState
// If state == StoppedBreakpoint
- breakpoint *breakpoint;
+ breakpoint *breakpoint
// If state == StoppedSignal or state == Exited
- signal int;
+ signal int
// If state == StoppedThreadCreate
- newThread *thread;
+ newThread *thread
// If state == Exited
- exitStatus int;
+ exitStatus int
}
/*
@@ -183,9 +183,9 @@ type thread struct {
*/
type badState struct {
- thread *thread;
- message string;
- state threadState;
+ thread *thread
+ message string
+ state threadState
}
func (e *badState) String() string {
@@ -200,12 +200,12 @@ func (e breakpointExistsError) String() string {
type noBreakpointError Word
-func (e noBreakpointError) String() string { return fmt.Sprintf("no breakpoint at PC %#x", e) }
+func (e noBreakpointError) String() string { return fmt.Sprintf("no breakpoint at PC %#x", e) }
type newThreadError struct {
- *os.Waitmsg;
- wantPid int;
- wantSig int;
+ *os.Waitmsg
+ wantPid int
+ wantSig int
}
func (e *newThreadError) String() string {
@@ -214,66 +214,66 @@ func (e *newThreadError) String() string {
type ProcessExited struct{}
-func (p ProcessExited) String() string { return "process exited" }
+func (p ProcessExited) String() string { return "process exited" }
/*
* Ptrace wrappers
*/
func (t *thread) ptracePeekText(addr uintptr, out []byte) (int, os.Error) {
- c, err := syscall.PtracePeekText(t.tid, addr, out);
+ c, err := syscall.PtracePeekText(t.tid, addr, out)
if traceMem {
fmt.Printf("peek(%#x) => %v, %v\n", addr, out, err)
}
- return c, os.NewSyscallError("ptrace(PEEKTEXT)", err);
+ return c, os.NewSyscallError("ptrace(PEEKTEXT)", err)
}
func (t *thread) ptracePokeText(addr uintptr, out []byte) (int, os.Error) {
- c, err := syscall.PtracePokeText(t.tid, addr, out);
+ c, err := syscall.PtracePokeText(t.tid, addr, out)
if traceMem {
fmt.Printf("poke(%#x, %v) => %v\n", addr, out, err)
}
- return c, os.NewSyscallError("ptrace(POKETEXT)", err);
+ return c, os.NewSyscallError("ptrace(POKETEXT)", err)
}
func (t *thread) ptraceGetRegs(regs *syscall.PtraceRegs) os.Error {
- err := syscall.PtraceGetRegs(t.tid, regs);
- return os.NewSyscallError("ptrace(GETREGS)", err);
+ err := syscall.PtraceGetRegs(t.tid, regs)
+ return os.NewSyscallError("ptrace(GETREGS)", err)
}
func (t *thread) ptraceSetRegs(regs *syscall.PtraceRegs) os.Error {
- err := syscall.PtraceSetRegs(t.tid, regs);
- return os.NewSyscallError("ptrace(SETREGS)", err);
+ err := syscall.PtraceSetRegs(t.tid, regs)
+ return os.NewSyscallError("ptrace(SETREGS)", err)
}
func (t *thread) ptraceSetOptions(options int) os.Error {
- err := syscall.PtraceSetOptions(t.tid, options);
- return os.NewSyscallError("ptrace(SETOPTIONS)", err);
+ err := syscall.PtraceSetOptions(t.tid, options)
+ return os.NewSyscallError("ptrace(SETOPTIONS)", err)
}
func (t *thread) ptraceGetEventMsg() (uint, os.Error) {
- msg, err := syscall.PtraceGetEventMsg(t.tid);
- return msg, os.NewSyscallError("ptrace(GETEVENTMSG)", err);
+ msg, err := syscall.PtraceGetEventMsg(t.tid)
+ return msg, os.NewSyscallError("ptrace(GETEVENTMSG)", err)
}
func (t *thread) ptraceCont() os.Error {
- err := syscall.PtraceCont(t.tid, 0);
- return os.NewSyscallError("ptrace(CONT)", err);
+ err := syscall.PtraceCont(t.tid, 0)
+ return os.NewSyscallError("ptrace(CONT)", err)
}
func (t *thread) ptraceContWithSignal(sig int) os.Error {
- err := syscall.PtraceCont(t.tid, sig);
- return os.NewSyscallError("ptrace(CONT)", err);
+ err := syscall.PtraceCont(t.tid, sig)
+ return os.NewSyscallError("ptrace(CONT)", err)
}
func (t *thread) ptraceStep() os.Error {
- err := syscall.PtraceSingleStep(t.tid);
- return os.NewSyscallError("ptrace(SINGLESTEP)", err);
+ err := syscall.PtraceSingleStep(t.tid)
+ return os.NewSyscallError("ptrace(SINGLESTEP)", err)
}
func (t *thread) ptraceDetach() os.Error {
- err := syscall.PtraceDetach(t.tid);
- return os.NewSyscallError("ptrace(DETACH)", err);
+ err := syscall.PtraceDetach(t.tid)
+ return os.NewSyscallError("ptrace(DETACH)", err)
}
/*
@@ -286,38 +286,38 @@ func (t *thread) logTrace(format string, args ...) {
if !trace {
return
}
- logLock.Lock();
- defer logLock.Unlock();
- fmt.Fprintf(os.Stderr, "Thread %d", t.tid);
+ logLock.Lock()
+ defer logLock.Unlock()
+ fmt.Fprintf(os.Stderr, "Thread %d", t.tid)
if traceIP {
- var regs syscall.PtraceRegs;
- err := t.ptraceGetRegs(&regs);
+ var regs syscall.PtraceRegs
+ err := t.ptraceGetRegs(&regs)
if err == nil {
fmt.Fprintf(os.Stderr, "@%x", regs.PC())
}
}
- fmt.Fprint(os.Stderr, ": ");
- fmt.Fprintf(os.Stderr, format, args);
- fmt.Fprint(os.Stderr, "\n");
+ fmt.Fprint(os.Stderr, ": ")
+ fmt.Fprintf(os.Stderr, format, args)
+ fmt.Fprint(os.Stderr, "\n")
}
func (t *thread) warn(format string, args ...) {
- logLock.Lock();
- defer logLock.Unlock();
- fmt.Fprintf(os.Stderr, "Thread %d: WARNING ", t.tid);
- fmt.Fprintf(os.Stderr, format, args);
- fmt.Fprint(os.Stderr, "\n");
+ logLock.Lock()
+ defer logLock.Unlock()
+ fmt.Fprintf(os.Stderr, "Thread %d: WARNING ", t.tid)
+ fmt.Fprintf(os.Stderr, format, args)
+ fmt.Fprint(os.Stderr, "\n")
}
func (p *process) logTrace(format string, args ...) {
if !trace {
return
}
- logLock.Lock();
- defer logLock.Unlock();
- fmt.Fprintf(os.Stderr, "Process %d: ", p.pid);
- fmt.Fprintf(os.Stderr, format, args);
- fmt.Fprint(os.Stderr, "\n");
+ logLock.Lock()
+ defer logLock.Unlock()
+ fmt.Fprintf(os.Stderr, "Process %d: ", p.pid)
+ fmt.Fprintf(os.Stderr, format, args)
+ fmt.Fprint(os.Stderr, "\n")
}
/*
@@ -334,7 +334,7 @@ func (p *process) someStoppedThread() *thread {
return t
}
}
- return nil;
+ return nil
}
// someRunningThread returns a running thread from the process.
@@ -347,7 +347,7 @@ func (p *process) someRunningThread() *thread {
return t
}
}
- return nil;
+ return nil
}
/*
@@ -358,32 +358,32 @@ func (p *process) someRunningThread() *thread {
//
// Must be called from the monitor thread.
func (p *process) installBreakpoints() os.Error {
- n := 0;
- main := p.someStoppedThread();
+ n := 0
+ main := p.someStoppedThread()
for _, b := range p.breakpoints {
if b.olddata != nil {
continue
}
- b.olddata = make([]byte, len(bpinst386));
- _, err := main.ptracePeekText(uintptr(b.pc), b.olddata);
+ b.olddata = make([]byte, len(bpinst386))
+ _, err := main.ptracePeekText(uintptr(b.pc), b.olddata)
if err != nil {
- b.olddata = nil;
- return err;
+ b.olddata = nil
+ return err
}
- _, err = main.ptracePokeText(uintptr(b.pc), bpinst386);
+ _, err = main.ptracePokeText(uintptr(b.pc), bpinst386)
if err != nil {
- b.olddata = nil;
- return err;
+ b.olddata = nil
+ return err
}
- n++;
+ n++
}
if n > 0 {
p.logTrace("installed %d/%d breakpoints", n, len(p.breakpoints))
}
- return nil;
+ return nil
}
// uninstallBreakpoints removes the installed breakpoints from p.
@@ -393,25 +393,25 @@ func (p *process) uninstallBreakpoints() os.Error {
if len(p.threads) == 0 {
return nil
}
- n := 0;
- main := p.someStoppedThread();
+ n := 0
+ main := p.someStoppedThread()
for _, b := range p.breakpoints {
if b.olddata == nil {
continue
}
- _, err := main.ptracePokeText(uintptr(b.pc), b.olddata);
+ _, err := main.ptracePokeText(uintptr(b.pc), b.olddata)
if err != nil {
return err
}
- b.olddata = nil;
- n++;
+ b.olddata = nil
+ n++
}
if n > 0 {
p.logTrace("uninstalled %d/%d breakpoints", n, len(p.breakpoints))
}
- return nil;
+ return nil
}
/*
@@ -425,17 +425,17 @@ func (p *process) uninstallBreakpoints() os.Error {
// event.
func (t *thread) wait() {
for {
- var ev debugEvent;
- ev.t = t;
- t.logTrace("beginning wait");
- ev.Waitmsg, ev.err = os.Wait(t.tid, syscall.WALL);
+ var ev debugEvent
+ ev.t = t
+ t.logTrace("beginning wait")
+ ev.Waitmsg, ev.err = os.Wait(t.tid, syscall.WALL)
if ev.err == nil && ev.Pid != t.tid {
panic("Wait returned pid ", ev.Pid, " wanted ", t.tid)
}
if ev.StopSignal() == syscall.SIGSTOP && t.ignoreNextSigstop {
// Spurious SIGSTOP. See Thread.Stop().
- t.ignoreNextSigstop = false;
- err := t.ptraceCont();
+ t.ignoreNextSigstop = false
+ err := t.ptraceCont()
if err == nil {
continue
}
@@ -447,8 +447,8 @@ func (t *thread) wait() {
// The monitor exited
break
}
- t.proc.debugEvents <- &ev;
- break;
+ t.proc.debugEvents <- &ev
+ break
}
}
@@ -457,9 +457,9 @@ func (t *thread) wait() {
//
// Must be called from the monitor thread.
func (t *thread) setState(newState threadState) {
- oldState := t.state;
- t.state = newState;
- t.logTrace("state %v -> %v", oldState, newState);
+ oldState := t.state
+ t.state = newState
+ t.logTrace("state %v -> %v", oldState, newState)
if !oldState.isRunning() && (newState.isRunning() || newState.isZombie()) {
// Start waiting on this thread
@@ -467,23 +467,23 @@ func (t *thread) setState(newState threadState) {
}
// Invoke state change handlers
- handlers := t.proc.transitionHandlers;
+ handlers := t.proc.transitionHandlers
if handlers.Len() == 0 {
return
}
- t.proc.transitionHandlers = new(vector.Vector);
+ t.proc.transitionHandlers = new(vector.Vector)
for _, h := range handlers.Data() {
- h := h.(*transitionHandler);
- h.handle(t, oldState, newState);
+ h := h.(*transitionHandler)
+ h.handle(t, oldState, newState)
}
}
// sendSigstop sends a SIGSTOP to this thread.
func (t *thread) sendSigstop() os.Error {
- t.logTrace("sending SIGSTOP");
- err := syscall.Tgkill(t.proc.pid, t.tid, syscall.SIGSTOP);
- return os.NewSyscallError("tgkill", err);
+ t.logTrace("sending SIGSTOP")
+ err := syscall.Tgkill(t.proc.pid, t.tid, syscall.SIGSTOP)
+ return os.NewSyscallError("tgkill", err)
}
// stopAsync sends SIGSTOP to all threads in state 'running'.
@@ -492,14 +492,14 @@ func (t *thread) sendSigstop() os.Error {
func (p *process) stopAsync() os.Error {
for _, t := range p.threads {
if t.state == running {
- err := t.sendSigstop();
+ err := t.sendSigstop()
if err != nil {
return err
}
- t.setState(stopping);
+ t.setState(stopping)
}
}
- return nil;
+ return nil
}
// doTrap handles SIGTRAP debug events with a cause of 0. These can
@@ -508,7 +508,7 @@ func (p *process) stopAsync() os.Error {
//
// TODO(austin) I think we also get this on an execve syscall.
func (ev *debugEvent) doTrap() (threadState, os.Error) {
- t := ev.t;
+ t := ev.t
if t.state == singleStepping {
return stopped, nil
@@ -517,13 +517,13 @@ func (ev *debugEvent) doTrap() (threadState, os.Error) {
// Hit a breakpoint. Linux leaves the program counter after
// the breakpoint. If this is an installed breakpoint, we
// need to back the PC up to the breakpoint PC.
- var regs syscall.PtraceRegs;
- err := t.ptraceGetRegs(&regs);
+ var regs syscall.PtraceRegs
+ err := t.ptraceGetRegs(&regs)
if err != nil {
return stopped, err
}
- b, ok := t.proc.breakpoints[uintptr(regs.PC())-uintptr(len(bpinst386))];
+ b, ok := t.proc.breakpoints[uintptr(regs.PC())-uintptr(len(bpinst386))]
if !ok {
// We must have hit a breakpoint that was actually in
// the program. Leave the IP where it is so we don't
@@ -532,38 +532,38 @@ func (ev *debugEvent) doTrap() (threadState, os.Error) {
return stoppedSignal, nil
}
- t.breakpoint = b;
- t.logTrace("at breakpoint %v, backing up PC from %#x", b, regs.PC());
+ t.breakpoint = b
+ t.logTrace("at breakpoint %v, backing up PC from %#x", b, regs.PC())
- regs.SetPC(uint64(b.pc));
- err = t.ptraceSetRegs(&regs);
+ regs.SetPC(uint64(b.pc))
+ err = t.ptraceSetRegs(&regs)
if err != nil {
return stopped, err
}
- return stoppedBreakpoint, nil;
+ return stoppedBreakpoint, nil
}
// doPtraceClone handles SIGTRAP debug events with a PTRACE_EVENT_CLONE
// cause. It initializes the new thread, adds it to the process, and
// returns the appropriate thread state for the existing thread.
func (ev *debugEvent) doPtraceClone() (threadState, os.Error) {
- t := ev.t;
+ t := ev.t
// Get the TID of the new thread
- tid, err := t.ptraceGetEventMsg();
+ tid, err := t.ptraceGetEventMsg()
if err != nil {
return stopped, err
}
- nt, err := t.proc.newThread(int(tid), syscall.SIGSTOP, true);
+ nt, err := t.proc.newThread(int(tid), syscall.SIGSTOP, true)
if err != nil {
return stopped, err
}
// Remember the thread
- t.newThread = nt;
+ t.newThread = nt
- return stoppedThreadCreate, nil;
+ return stoppedThreadCreate, nil
}
// doPtraceExit handles SIGTRAP debug events with a PTRACE_EVENT_EXIT
@@ -571,15 +571,15 @@ func (ev *debugEvent) doPtraceClone() (threadState, os.Error) {
// the process. A later WIFEXITED debug event will remove it from the
// process.
func (ev *debugEvent) doPtraceExit() (threadState, os.Error) {
- t := ev.t;
+ t := ev.t
// Get exit status
- exitStatus, err := t.ptraceGetEventMsg();
+ exitStatus, err := t.ptraceGetEventMsg()
if err != nil {
return stopped, err
}
- ws := syscall.WaitStatus(exitStatus);
- t.logTrace("exited with %v", ws);
+ ws := syscall.WaitStatus(exitStatus)
+ t.logTrace("exited with %v", ws)
switch {
case ws.Exited():
t.exitStatus = ws.ExitStatus()
@@ -589,7 +589,7 @@ func (ev *debugEvent) doPtraceExit() (threadState, os.Error) {
// We still need to continue this thread and wait on this
// thread's WIFEXITED event. We'll delete it then.
- return stoppedExiting, nil;
+ return stoppedExiting, nil
}
// process handles a debug event. It modifies any thread or process
@@ -600,20 +600,20 @@ func (ev *debugEvent) process() os.Error {
return ev.err
}
- t := ev.t;
- t.exitStatus = -1;
- t.signal = -1;
+ t := ev.t
+ t.exitStatus = -1
+ t.signal = -1
// Decode wait status.
- var state threadState;
+ var state threadState
switch {
case ev.Stopped():
- state = stoppedSignal;
- t.signal = ev.StopSignal();
- t.logTrace("stopped with %v", ev);
+ state = stoppedSignal
+ t.signal = ev.StopSignal()
+ t.logTrace("stopped with %v", ev)
if ev.StopSignal() == syscall.SIGTRAP {
// What caused the debug trap?
- var err os.Error;
+ var err os.Error
switch cause := ev.TrapCause(); cause {
case 0:
// Breakpoint or single stepping
@@ -630,25 +630,25 @@ func (ev *debugEvent) process() os.Error {
}
if err != nil {
- t.setState(stopped);
- t.warn("failed to handle trap %v: %v", ev, err);
+ t.setState(stopped)
+ t.warn("failed to handle trap %v: %v", ev, err)
}
}
case ev.Exited():
- state = exited;
- t.proc.threads[t.tid] = nil, false;
- t.logTrace("exited %v", ev);
+ state = exited
+ t.proc.threads[t.tid] = nil, false
+ t.logTrace("exited %v", ev)
// We should have gotten the exit status in
// PTRACE_EVENT_EXIT, but just in case.
- t.exitStatus = ev.ExitStatus();
+ t.exitStatus = ev.ExitStatus()
case ev.Signaled():
- state = exited;
- t.proc.threads[t.tid] = nil, false;
- t.logTrace("signaled %v", ev);
+ state = exited
+ t.proc.threads[t.tid] = nil, false
+ t.logTrace("signaled %v", ev)
// Again, this should be redundant.
- t.signal = ev.Signal();
+ t.signal = ev.Signal()
default:
panic(fmt.Sprintf("Unexpected wait status %v", ev.Waitmsg))
@@ -666,14 +666,14 @@ func (ev *debugEvent) process() os.Error {
// TODO(austin) If we're in state stopping and get a SIGSTOP,
// set state stopped instead of stoppedSignal.
- t.setState(state);
+ t.setState(state)
if t.proc.someRunningThread() == nil {
// Nothing is running, uninstall breakpoints
return t.proc.uninstallBreakpoints()
}
// Stop any other running threads
- return t.proc.stopAsync();
+ return t.proc.stopAsync()
}
// onStop adds a handler for state transitions from running to
@@ -686,15 +686,15 @@ func (t *thread) onStop(handle func(), onErr func(os.Error)) {
// stepping all threads during a continue. Maybe move
// transitionHandlers to the thread, or have both per-thread
// and per-process transition handlers.
- h := &transitionHandler{nil, onErr};
+ h := &transitionHandler{nil, onErr}
h.handle = func(st *thread, old, new threadState) {
if t == st && old.isRunning() && !new.isRunning() {
handle()
} else {
t.proc.transitionHandlers.Push(h)
}
- };
- t.proc.transitionHandlers.Push(h);
+ }
+ t.proc.transitionHandlers.Push(h)
}
/*
@@ -704,17 +704,17 @@ func (t *thread) onStop(handle func(), onErr func(os.Error)) {
// monitor handles debug events and debug requests for p, exiting when
// there are no threads left in p.
func (p *process) monitor() {
- var err os.Error;
+ var err os.Error
// Linux requires that all ptrace calls come from the thread
// that originally attached. Prevent the Go scheduler from
// migrating us to other OS threads.
- runtime.LockOSThread();
- defer runtime.UnlockOSThread();
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
- hadThreads := false;
+ hadThreads := false
for err == nil {
- p.ready <- true;
+ p.ready <- true
select {
case event := <-p.debugEvents:
err = event.process()
@@ -728,8 +728,8 @@ func (p *process) monitor() {
if len(p.threads) == 0 {
if err == nil && hadThreads {
- p.logTrace("no more threads; monitor exiting");
- err = ProcessExited{};
+ p.logTrace("no more threads; monitor exiting")
+ err = ProcessExited{}
}
} else {
hadThreads = true
@@ -739,13 +739,13 @@ func (p *process) monitor() {
// Abort waiting handlers
// TODO(austin) How do I stop the wait threads?
for _, h := range p.transitionHandlers.Data() {
- h := h.(*transitionHandler);
- h.onErr(err);
+ h := h.(*transitionHandler)
+ h.onErr(err)
}
// Indicate that the monitor cannot receive any more messages
- p.err = err;
- close(p.ready);
+ p.err = err
+ close(p.ready)
}
// do executes f in the monitor thread (and, thus, atomically with
@@ -756,9 +756,9 @@ func (p *process) do(f func() os.Error) os.Error {
if !<-p.ready {
return p.err
}
- req := &debugReq{f, make(chan os.Error)};
- p.debugReqs <- req;
- return <-req.res;
+ req := &debugReq{f, make(chan os.Error)}
+ p.debugReqs <- req
+ return <-req.res
}
// stopMonitor stops the monitor with the given error. If the monitor
@@ -777,14 +777,14 @@ func (p *process) stopMonitor(err os.Error) {
*/
func (t *thread) Regs() (Regs, os.Error) {
- var regs syscall.PtraceRegs;
+ var regs syscall.PtraceRegs
err := t.proc.do(func() os.Error {
if !t.state.isStopped() {
return &badState{t, "cannot get registers", t.state}
}
- return t.ptraceGetRegs(&regs);
- });
+ return t.ptraceGetRegs(&regs)
+ })
if err != nil {
return nil, err
}
@@ -794,42 +794,42 @@ func (t *thread) Regs() (Regs, os.Error) {
if !t.state.isStopped() {
return &badState{t, "cannot get registers", t.state}
}
- return t.ptraceSetRegs(r);
+ return t.ptraceSetRegs(r)
})
- };
- return newRegs(&regs, setter), nil;
+ }
+ return newRegs(&regs, setter), nil
}
func (t *thread) Peek(addr Word, out []byte) (int, os.Error) {
- var c int;
+ var c int
err := t.proc.do(func() os.Error {
if !t.state.isStopped() {
return &badState{t, "cannot peek text", t.state}
}
- var err os.Error;
- c, err = t.ptracePeekText(uintptr(addr), out);
- return err;
- });
+ var err os.Error
+ c, err = t.ptracePeekText(uintptr(addr), out)
+ return err
+ })
- return c, err;
+ return c, err
}
func (t *thread) Poke(addr Word, out []byte) (int, os.Error) {
- var c int;
+ var c int
err := t.proc.do(func() os.Error {
if !t.state.isStopped() {
return &badState{t, "cannot poke text", t.state}
}
- var err os.Error;
- c, err = t.ptracePokeText(uintptr(addr), out);
- return err;
- });
+ var err os.Error
+ c, err = t.ptracePokeText(uintptr(addr), out)
+ return err
+ })
- return c, err;
+ return c, err
}
// stepAsync starts this thread single stepping. When the single step
@@ -841,30 +841,30 @@ func (t *thread) stepAsync(ready chan os.Error) os.Error {
if err := t.ptraceStep(); err != nil {
return err
}
- t.setState(singleStepping);
+ t.setState(singleStepping)
t.onStop(func() { ready <- nil },
- func(err os.Error) { ready <- err });
- return nil;
+ func(err os.Error) { ready <- err })
+ return nil
}
func (t *thread) Step() os.Error {
- t.logTrace("Step {");
- defer t.logTrace("}");
+ t.logTrace("Step {")
+ defer t.logTrace("}")
- ready := make(chan os.Error);
+ ready := make(chan os.Error)
err := t.proc.do(func() os.Error {
if !t.state.isStopped() {
return &badState{t, "cannot single step", t.state}
}
- return t.stepAsync(ready);
- });
+ return t.stepAsync(ready)
+ })
if err != nil {
return err
}
- err = <-ready;
- return err;
+ err = <-ready
+ return err
}
// TODO(austin) We should probably get this via C's strsignal.
@@ -884,11 +884,11 @@ func sigName(signal int) string {
if signal < 0 || signal >= len(sigNames) {
return "<invalid>"
}
- return sigNames[signal];
+ return sigNames[signal]
}
func (t *thread) Stopped() (Cause, os.Error) {
- var c Cause;
+ var c Cause
err := t.proc.do(func() os.Error {
switch t.state {
case stopped:
@@ -913,35 +913,35 @@ func (t *thread) Stopped() (Cause, os.Error) {
default:
return &badState{t, "cannot get stop cause", t.state}
}
- return nil;
- });
+ return nil
+ })
if err != nil {
return nil, err
}
- return c, nil;
+ return c, nil
}
func (p *process) Threads() []Thread {
- var res []Thread;
+ var res []Thread
p.do(func() os.Error {
- res = make([]Thread, len(p.threads));
- i := 0;
+ res = make([]Thread, len(p.threads))
+ i := 0
for _, t := range p.threads {
// Exclude zombie threads.
- st := t.state;
+ st := t.state
if st == exiting || st == exited || st == detached {
continue
}
- res[i] = t;
- i++;
+ res[i] = t
+ i++
}
- res = res[0:i];
- return nil;
- });
- return res;
+ res = res[0:i]
+ return nil
+ })
+ return res
}
func (p *process) AddBreakpoint(pc Word) os.Error {
@@ -952,8 +952,8 @@ func (p *process) AddBreakpoint(pc Word) os.Error {
if _, ok := p.breakpoints[uintptr(pc)]; ok {
return breakpointExistsError(pc)
}
- p.breakpoints[uintptr(pc)] = &breakpoint{pc: uintptr(pc)};
- return nil;
+ p.breakpoints[uintptr(pc)] = &breakpoint{pc: uintptr(pc)}
+ return nil
})
}
@@ -965,22 +965,22 @@ func (p *process) RemoveBreakpoint(pc Word) os.Error {
if _, ok := p.breakpoints[uintptr(pc)]; !ok {
return noBreakpointError(pc)
}
- p.breakpoints[uintptr(pc)] = nil, false;
- return nil;
+ p.breakpoints[uintptr(pc)] = nil, false
+ return nil
})
}
func (p *process) Continue() os.Error {
// Single step any threads that are stopped at breakpoints so
// we can reinstall breakpoints.
- var ready chan os.Error;
- count := 0;
+ var ready chan os.Error
+ count := 0
err := p.do(func() os.Error {
// We make the ready channel big enough to hold all
// ready message so we don't jam up the monitor if we
// stop listening (e.g., if there's an error).
- ready = make(chan os.Error, len(p.threads));
+ ready = make(chan os.Error, len(p.threads))
for _, t := range p.threads {
if !t.state.isStopped() {
@@ -992,34 +992,34 @@ func (p *process) Continue() os.Error {
// it could have been stopped at a breakpoint
// for some other reason, or the breakpoint
// could have been added since it was stopped.
- var regs syscall.PtraceRegs;
- err := t.ptraceGetRegs(&regs);
+ var regs syscall.PtraceRegs
+ err := t.ptraceGetRegs(&regs)
if err != nil {
return err
}
if b, ok := p.breakpoints[uintptr(regs.PC())]; ok {
- t.logTrace("stepping over breakpoint %v", b);
+ t.logTrace("stepping over breakpoint %v", b)
if err := t.stepAsync(ready); err != nil {
return err
}
- count++;
+ count++
}
}
- return nil;
- });
+ return nil
+ })
if err != nil {
- p.stopMonitor(err);
- return err;
+ p.stopMonitor(err)
+ return err
}
// Wait for single stepping threads
for count > 0 {
- err = <-ready;
+ err = <-ready
if err != nil {
- p.stopMonitor(err);
- return err;
+ p.stopMonitor(err)
+ return err
}
- count--;
+ count--
}
// Continue all threads
@@ -1029,18 +1029,18 @@ func (p *process) Continue() os.Error {
}
for _, t := range p.threads {
- var err os.Error;
+ var err os.Error
switch {
case !t.state.isStopped():
continue
case t.state == stoppedSignal && t.signal != syscall.SIGSTOP && t.signal != syscall.SIGTRAP:
- t.logTrace("continuing with signal %d", t.signal);
- err = t.ptraceContWithSignal(t.signal);
+ t.logTrace("continuing with signal %d", t.signal)
+ err = t.ptraceContWithSignal(t.signal)
default:
- t.logTrace("continuing");
- err = t.ptraceCont();
+ t.logTrace("continuing")
+ err = t.ptraceCont()
}
if err != nil {
return err
@@ -1051,59 +1051,59 @@ func (p *process) Continue() os.Error {
t.setState(running)
}
}
- return nil;
- });
+ return nil
+ })
if err != nil {
// TODO(austin) Do we need to stop the monitor with
// this error atomically with the do-routine above?
- p.stopMonitor(err);
- return err;
+ p.stopMonitor(err)
+ return err
}
- return nil;
+ return nil
}
func (p *process) WaitStop() os.Error {
// We need a non-blocking ready channel for the case where all
// threads are already stopped.
- ready := make(chan os.Error, 1);
+ ready := make(chan os.Error, 1)
err := p.do(func() os.Error {
// Are all of the threads already stopped?
if p.someRunningThread() == nil {
- ready <- nil;
- return nil;
+ ready <- nil
+ return nil
}
// Monitor state transitions
- h := &transitionHandler{};
+ h := &transitionHandler{}
h.handle = func(st *thread, old, new threadState) {
if !new.isRunning() {
if p.someRunningThread() == nil {
- ready <- nil;
- return;
+ ready <- nil
+ return
}
}
- p.transitionHandlers.Push(h);
- };
- h.onErr = func(err os.Error) { ready <- err };
- p.transitionHandlers.Push(h);
- return nil;
- });
+ p.transitionHandlers.Push(h)
+ }
+ h.onErr = func(err os.Error) { ready <- err }
+ p.transitionHandlers.Push(h)
+ return nil
+ })
if err != nil {
return err
}
- return <-ready;
+ return <-ready
}
func (p *process) Stop() os.Error {
- err := p.do(func() os.Error { return p.stopAsync() });
+ err := p.do(func() os.Error { return p.stopAsync() })
if err != nil {
return err
}
- return p.WaitStop();
+ return p.WaitStop()
}
func (p *process) Detach() os.Error {
@@ -1123,13 +1123,13 @@ func (p *process) Detach() os.Error {
return err
}
}
- t.setState(detached);
- p.threads[pid] = nil, false;
+ t.setState(detached)
+ p.threads[pid] = nil, false
}
- return nil;
- });
+ return nil
+ })
// TODO(austin) Wait for monitor thread to exit?
- return err;
+ return err
}
// newThread creates a new thread object and waits for its initial
@@ -1138,11 +1138,11 @@ func (p *process) Detach() os.Error {
//
// Must be run from the monitor thread.
func (p *process) newThread(tid int, signal int, cloned bool) (*thread, os.Error) {
- t := &thread{tid: tid, proc: p, state: stopped};
+ t := &thread{tid: tid, proc: p, state: stopped}
// Get the signal from the thread
// TODO(austin) Thread might already be stopped if we're attaching.
- w, err := os.Wait(tid, syscall.WALL);
+ w, err := os.Wait(tid, syscall.WALL)
if err != nil {
return nil, err
}
@@ -1151,59 +1151,59 @@ func (p *process) newThread(tid int, signal int, cloned bool) (*thread, os.Error
}
if !cloned {
- err = t.ptraceSetOptions(syscall.PTRACE_O_TRACECLONE | syscall.PTRACE_O_TRACEEXIT);
+ err = t.ptraceSetOptions(syscall.PTRACE_O_TRACECLONE | syscall.PTRACE_O_TRACEEXIT)
if err != nil {
return nil, err
}
}
- p.threads[tid] = t;
+ p.threads[tid] = t
- return t, nil;
+ return t, nil
}
// attachThread attaches a running thread to the process.
//
// Must NOT be run from the monitor thread.
func (p *process) attachThread(tid int) (*thread, os.Error) {
- p.logTrace("attaching to thread %d", tid);
- var thr *thread;
+ p.logTrace("attaching to thread %d", tid)
+ var thr *thread
err := p.do(func() os.Error {
- errno := syscall.PtraceAttach(tid);
+ errno := syscall.PtraceAttach(tid)
if errno != 0 {
return os.NewSyscallError("ptrace(ATTACH)", errno)
}
- var err os.Error;
- thr, err = p.newThread(tid, syscall.SIGSTOP, false);
- return err;
- });
- return thr, err;
+ var err os.Error
+ thr, err = p.newThread(tid, syscall.SIGSTOP, false)
+ return err
+ })
+ return thr, err
}
// attachAllThreads attaches to all threads in a process.
func (p *process) attachAllThreads() os.Error {
- taskPath := "/proc/" + strconv.Itoa(p.pid) + "/task";
- taskDir, err := os.Open(taskPath, os.O_RDONLY, 0);
+ taskPath := "/proc/" + strconv.Itoa(p.pid) + "/task"
+ taskDir, err := os.Open(taskPath, os.O_RDONLY, 0)
if err != nil {
return err
}
- defer taskDir.Close();
+ defer taskDir.Close()
// We stop threads as we attach to them; however, because new
// threads can appear while we're looping over all of them, we
// have to repeatly scan until we know we're attached to all
// of them.
for again := true; again; {
- again = false;
+ again = false
- tids, err := taskDir.Readdirnames(-1);
+ tids, err := taskDir.Readdirnames(-1)
if err != nil {
return err
}
for _, tidStr := range tids {
- tid, err := strconv.Atoi(tidStr);
+ tid, err := strconv.Atoi(tidStr)
if err != nil {
return err
}
@@ -1211,39 +1211,39 @@ func (p *process) attachAllThreads() os.Error {
continue
}
- _, err = p.attachThread(tid);
+ _, err = p.attachThread(tid)
if err != nil {
// There could have been a race, or
// this process could be a zobmie.
- statFile, err2 := ioutil.ReadFile(taskPath + "/" + tidStr + "/stat");
+ statFile, err2 := ioutil.ReadFile(taskPath + "/" + tidStr + "/stat")
if err2 != nil {
switch err2 := err2.(type) {
case *os.PathError:
if err2.Error == os.ENOENT {
// Raced with thread exit
- p.logTrace("raced with thread %d exit", tid);
- continue;
+ p.logTrace("raced with thread %d exit", tid)
+ continue
}
}
// Return the original error
- return err;
+ return err
}
- statParts := strings.Split(string(statFile), " ", 4);
+ statParts := strings.Split(string(statFile), " ", 4)
if len(statParts) > 2 && statParts[2] == "Z" {
// tid is a zombie
- p.logTrace("thread %d is a zombie", tid);
- continue;
+ p.logTrace("thread %d is a zombie", tid)
+ continue
}
// Return the original error
- return err;
+ return err
}
- again = true;
+ again = true
}
}
- return nil;
+ return nil
}
// newProcess creates a new process object and starts its monitor thread.
@@ -1257,37 +1257,37 @@ func newProcess(pid int) *process {
debugReqs: make(chan *debugReq),
stopReq: make(chan os.Error),
transitionHandlers: new(vector.Vector),
- };
+ }
- go p.monitor();
+ go p.monitor()
- return p;
+ return p
}
// Attach attaches to process pid and stops all of its threads.
func Attach(pid int) (Process, os.Error) {
- p := newProcess(pid);
+ p := newProcess(pid)
// Attach to all threads
- err := p.attachAllThreads();
+ err := p.attachAllThreads()
if err != nil {
- p.Detach();
+ p.Detach()
// TODO(austin) Detach stopped the monitor already
//p.stopMonitor(err);
- return nil, err;
+ return nil, err
}
- return p, nil;
+ return p, nil
}
// ForkExec forks the current process and execs argv0, stopping the
// new process after the exec syscall. See os.ForkExec for additional
// details.
func ForkExec(argv0 string, argv []string, envv []string, dir string, fd []*os.File) (Process, os.Error) {
- p := newProcess(-1);
+ p := newProcess(-1)
// Create array of integer (system) fds.
- intfd := make([]int, len(fd));
+ intfd := make([]int, len(fd))
for i, f := range fd {
if f == nil {
intfd[i] = -1
@@ -1298,20 +1298,20 @@ func ForkExec(argv0 string, argv []string, envv []string, dir string, fd []*os.F
// Fork from the monitor thread so we get the right tracer pid.
err := p.do(func() os.Error {
- pid, errno := syscall.PtraceForkExec(argv0, argv, envv, dir, intfd);
+ pid, errno := syscall.PtraceForkExec(argv0, argv, envv, dir, intfd)
if errno != 0 {
return &os.PathError{"fork/exec", argv0, os.Errno(errno)}
}
- p.pid = pid;
+ p.pid = pid
// The process will raise SIGTRAP when it reaches execve.
- _, err := p.newThread(pid, syscall.SIGTRAP, false);
- return err;
- });
+ _, err := p.newThread(pid, syscall.SIGTRAP, false)
+ return err
+ })
if err != nil {
- p.stopMonitor(err);
- return nil, err;
+ p.stopMonitor(err)
+ return nil, err
}
- return p, nil;
+ return p, nil
}
diff --git a/src/pkg/debug/proc/proc_nacl.go b/src/pkg/debug/proc/proc_nacl.go
index c4f606739..be26bbf18 100644
--- a/src/pkg/debug/proc/proc_nacl.go
+++ b/src/pkg/debug/proc/proc_nacl.go
@@ -5,8 +5,8 @@
package proc
import (
- "os";
- "syscall";
+ "os"
+ "syscall"
)
// Process tracing is not supported on Native Client.
diff --git a/src/pkg/debug/proc/regs_linux_386.go b/src/pkg/debug/proc/regs_linux_386.go
index abeb45f4b..7c5478d86 100644
--- a/src/pkg/debug/proc/regs_linux_386.go
+++ b/src/pkg/debug/proc/regs_linux_386.go
@@ -5,14 +5,14 @@
package proc
import (
- "os";
- "strconv";
- "syscall";
+ "os"
+ "strconv"
+ "syscall"
)
type _386Regs struct {
- syscall.PtraceRegs;
- setter func(*syscall.PtraceRegs) os.Error;
+ syscall.PtraceRegs
+ setter func(*syscall.PtraceRegs) os.Error
}
var names = [...]string{
@@ -34,11 +34,11 @@ var names = [...]string{
"gs",
}
-func (r *_386Regs) PC() Word { return Word(r.Eip) }
+func (r *_386Regs) PC() Word { return Word(r.Eip) }
func (r *_386Regs) SetPC(val Word) os.Error {
- r.Eip = int32(val);
- return r.setter(&r.PtraceRegs);
+ r.Eip = int32(val)
+ return r.setter(&r.PtraceRegs)
}
func (r *_386Regs) Link() Word {
@@ -46,16 +46,16 @@ func (r *_386Regs) Link() Word {
panic("No link register")
}
-func (r *_386Regs) SetLink(val Word) os.Error { panic("No link register") }
+func (r *_386Regs) SetLink(val Word) os.Error { panic("No link register") }
-func (r *_386Regs) SP() Word { return Word(r.Esp) }
+func (r *_386Regs) SP() Word { return Word(r.Esp) }
func (r *_386Regs) SetSP(val Word) os.Error {
- r.Esp = int32(val);
- return r.setter(&r.PtraceRegs);
+ r.Esp = int32(val)
+ return r.setter(&r.PtraceRegs)
}
-func (r *_386Regs) Names() []string { return &names }
+func (r *_386Regs) Names() []string { return &names }
func (r *_386Regs) Get(i int) Word {
switch i {
@@ -92,7 +92,7 @@ func (r *_386Regs) Get(i int) Word {
case 15:
return Word(r.Gs)
}
- panic("invalid register index ", strconv.Itoa(i));
+ panic("invalid register index ", strconv.Itoa(i))
}
func (r *_386Regs) Set(i int, val Word) os.Error {
@@ -132,12 +132,12 @@ func (r *_386Regs) Set(i int, val Word) os.Error {
default:
panic("invalid register index ", strconv.Itoa(i))
}
- return r.setter(&r.PtraceRegs);
+ return r.setter(&r.PtraceRegs)
}
func newRegs(regs *syscall.PtraceRegs, setter func(*syscall.PtraceRegs) os.Error) Regs {
- res := _386Regs{};
- res.PtraceRegs = *regs;
- res.setter = setter;
- return &res;
+ res := _386Regs{}
+ res.PtraceRegs = *regs
+ res.setter = setter
+ return &res
}
diff --git a/src/pkg/debug/proc/regs_linux_amd64.go b/src/pkg/debug/proc/regs_linux_amd64.go
index 63083a948..b070b7714 100644
--- a/src/pkg/debug/proc/regs_linux_amd64.go
+++ b/src/pkg/debug/proc/regs_linux_amd64.go
@@ -5,14 +5,14 @@
package proc
import (
- "os";
- "strconv";
- "syscall";
+ "os"
+ "strconv"
+ "syscall"
)
type amd64Regs struct {
- syscall.PtraceRegs;
- setter func(*syscall.PtraceRegs) os.Error;
+ syscall.PtraceRegs
+ setter func(*syscall.PtraceRegs) os.Error
}
var names = [...]string{
@@ -48,11 +48,11 @@ var names = [...]string{
//"gs_base",
}
-func (r *amd64Regs) PC() Word { return Word(r.Rip) }
+func (r *amd64Regs) PC() Word { return Word(r.Rip) }
func (r *amd64Regs) SetPC(val Word) os.Error {
- r.Rip = uint64(val);
- return r.setter(&r.PtraceRegs);
+ r.Rip = uint64(val)
+ return r.setter(&r.PtraceRegs)
}
func (r *amd64Regs) Link() Word {
@@ -64,14 +64,14 @@ func (r *amd64Regs) SetLink(val Word) os.Error {
panic("No link register")
}
-func (r *amd64Regs) SP() Word { return Word(r.Rsp) }
+func (r *amd64Regs) SP() Word { return Word(r.Rsp) }
func (r *amd64Regs) SetSP(val Word) os.Error {
- r.Rsp = uint64(val);
- return r.setter(&r.PtraceRegs);
+ r.Rsp = uint64(val)
+ return r.setter(&r.PtraceRegs)
}
-func (r *amd64Regs) Names() []string { return &names }
+func (r *amd64Regs) Names() []string { return &names }
func (r *amd64Regs) Get(i int) Word {
switch i {
@@ -124,7 +124,7 @@ func (r *amd64Regs) Get(i int) Word {
case 23:
return Word(r.Gs)
}
- panic("invalid register index ", strconv.Itoa(i));
+ panic("invalid register index ", strconv.Itoa(i))
}
func (r *amd64Regs) Set(i int, val Word) os.Error {
@@ -180,12 +180,12 @@ func (r *amd64Regs) Set(i int, val Word) os.Error {
default:
panic("invalid register index ", strconv.Itoa(i))
}
- return r.setter(&r.PtraceRegs);
+ return r.setter(&r.PtraceRegs)
}
func newRegs(regs *syscall.PtraceRegs, setter func(*syscall.PtraceRegs) os.Error) Regs {
- res := amd64Regs{};
- res.PtraceRegs = *regs;
- res.setter = setter;
- return &res;
+ res := amd64Regs{}
+ res.PtraceRegs = *regs
+ res.setter = setter
+ return &res
}
diff --git a/src/pkg/debug/proc/regs_linux_arm.go b/src/pkg/debug/proc/regs_linux_arm.go
index e58ab388b..ec78cbcf2 100644
--- a/src/pkg/debug/proc/regs_linux_arm.go
+++ b/src/pkg/debug/proc/regs_linux_arm.go
@@ -5,35 +5,35 @@
package proc
import (
- "os";
- "syscall";
+ "os"
+ "syscall"
)
// TODO(kaib): add support
type armRegs struct{}
-func (r *armRegs) PC() Word { return Word(0) }
+func (r *armRegs) PC() Word { return Word(0) }
-func (r *armRegs) SetPC(val Word) os.Error { return nil }
+func (r *armRegs) SetPC(val Word) os.Error { return nil }
-func (r *armRegs) Link() Word { return Word(0) }
+func (r *armRegs) Link() Word { return Word(0) }
-func (r *armRegs) SetLink(val Word) os.Error { return nil }
+func (r *armRegs) SetLink(val Word) os.Error { return nil }
-func (r *armRegs) SP() Word { return Word(0) }
+func (r *armRegs) SP() Word { return Word(0) }
-func (r *armRegs) SetSP(val Word) os.Error { return nil }
+func (r *armRegs) SetSP(val Word) os.Error { return nil }
-func (r *armRegs) Names() []string { return nil }
+func (r *armRegs) Names() []string { return nil }
-func (r *armRegs) Get(i int) Word { return Word(0) }
+func (r *armRegs) Get(i int) Word { return Word(0) }
func (r *armRegs) Set(i int, val Word) os.Error {
return nil
}
func newRegs(regs *syscall.PtraceRegs, setter func(*syscall.PtraceRegs) os.Error) Regs {
- res := armRegs{};
- return &res;
+ res := armRegs{}
+ return &res
}
diff --git a/src/pkg/ebnf/ebnf.go b/src/pkg/ebnf/ebnf.go
index 08f3b8c7f..898a48173 100644
--- a/src/pkg/ebnf/ebnf.go
+++ b/src/pkg/ebnf/ebnf.go
@@ -23,12 +23,12 @@
package ebnf
import (
- "container/vector";
- "go/scanner";
- "go/token";
- "os";
- "unicode";
- "utf8";
+ "container/vector"
+ "go/scanner"
+ "go/token"
+ "os"
+ "unicode"
+ "utf8"
)
@@ -37,115 +37,115 @@ import (
type (
// An Expression node represents a production expression.
- Expression interface {
+ Expression interface {
// Pos is the position of the first character of the syntactic construct
- Pos() token.Position;
- };
+ Pos() token.Position
+ }
// An Alternative node represents a non-empty list of alternative expressions.
- Alternative []Expression; // x | y | z
+ Alternative []Expression // x | y | z
// A Sequence node represents a non-empty list of sequential expressions.
- Sequence []Expression; // x y z
+ Sequence []Expression // x y z
// A Name node represents a production name.
- Name struct {
- token.Position;
- String string;
- };
+ Name struct {
+ token.Position
+ String string
+ }
// A Token node represents a literal.
- Token struct {
- token.Position;
- String string;
- };
+ Token struct {
+ token.Position
+ String string
+ }
// A List node represents a range of characters.
- Range struct {
- Begin, End *Token; // begin ... end
- };
+ Range struct {
+ Begin, End *Token // begin ... end
+ }
// A Group node represents a grouped expression.
- Group struct {
- token.Position;
- Body Expression; // (body)
- };
+ Group struct {
+ token.Position
+ Body Expression // (body)
+ }
// An Option node represents an optional expression.
- Option struct {
- token.Position;
- Body Expression; // [body]
- };
+ Option struct {
+ token.Position
+ Body Expression // [body]
+ }
// A Repetition node represents a repeated expression.
- Repetition struct {
- token.Position;
- Body Expression; // {body}
- };
+ Repetition struct {
+ token.Position
+ Body Expression // {body}
+ }
// A Production node represents an EBNF production.
- Production struct {
- Name *Name;
- Expr Expression;
- };
+ Production struct {
+ Name *Name
+ Expr Expression
+ }
// A Grammar is a set of EBNF productions. The map
// is indexed by production name.
//
- Grammar map[string]*Production;
+ Grammar map[string]*Production
)
func (x Alternative) Pos() token.Position {
- return x[0].Pos() // the parser always generates non-empty Alternative
+ return x[0].Pos() // the parser always generates non-empty Alternative
}
func (x Sequence) Pos() token.Position {
- return x[0].Pos() // the parser always generates non-empty Sequences
+ return x[0].Pos() // the parser always generates non-empty Sequences
}
-func (x Range) Pos() token.Position { return x.Begin.Pos() }
+func (x Range) Pos() token.Position { return x.Begin.Pos() }
-func (p *Production) Pos() token.Position { return p.Name.Pos() }
+func (p *Production) Pos() token.Position { return p.Name.Pos() }
// ----------------------------------------------------------------------------
// Grammar verification
func isLexical(name string) bool {
- ch, _ := utf8.DecodeRuneInString(name);
- return !unicode.IsUpper(ch);
+ ch, _ := utf8.DecodeRuneInString(name)
+ return !unicode.IsUpper(ch)
}
type verifier struct {
- scanner.ErrorVector;
- worklist vector.Vector;
- reached Grammar; // set of productions reached from (and including) the root production
- grammar Grammar;
+ scanner.ErrorVector
+ worklist vector.Vector
+ reached Grammar // set of productions reached from (and including) the root production
+ grammar Grammar
}
func (v *verifier) push(prod *Production) {
- name := prod.Name.String;
+ name := prod.Name.String
if _, found := v.reached[name]; !found {
- v.worklist.Push(prod);
- v.reached[name] = prod;
+ v.worklist.Push(prod)
+ v.reached[name] = prod
}
}
func (v *verifier) verifyChar(x *Token) int {
- s := x.String;
+ s := x.String
if utf8.RuneCountInString(s) != 1 {
- v.Error(x.Pos(), "single char expected, found "+s);
- return 0;
+ v.Error(x.Pos(), "single char expected, found "+s)
+ return 0
}
- ch, _ := utf8.DecodeRuneInString(s);
- return ch;
+ ch, _ := utf8.DecodeRuneInString(s)
+ return ch
}
@@ -177,8 +177,8 @@ func (v *verifier) verifyExpr(expr Expression, lexical bool) {
case *Token:
// nothing to do for now
case *Range:
- i := v.verifyChar(x.Begin);
- j := v.verifyChar(x.End);
+ i := v.verifyChar(x.Begin)
+ j := v.verifyChar(x.End)
if i >= j {
v.Error(x.Pos(), "decreasing character range")
}
@@ -196,24 +196,24 @@ func (v *verifier) verifyExpr(expr Expression, lexical bool) {
func (v *verifier) verify(grammar Grammar, start string) {
// find root production
- root, found := grammar[start];
+ root, found := grammar[start]
if !found {
- var noPos token.Position;
- v.Error(noPos, "no start production "+start);
- return;
+ var noPos token.Position
+ v.Error(noPos, "no start production "+start)
+ return
}
// initialize verifier
- v.ErrorVector.Reset();
- v.worklist.Resize(0, 0);
- v.reached = make(Grammar);
- v.grammar = grammar;
+ v.ErrorVector.Reset()
+ v.worklist.Resize(0, 0)
+ v.reached = make(Grammar)
+ v.grammar = grammar
// work through the worklist
- v.push(root);
+ v.push(root)
for v.worklist.Len() > 0 {
- prod := v.worklist.Pop().(*Production);
- v.verifyExpr(prod.Expr, isLexical(prod.Name.String));
+ prod := v.worklist.Pop().(*Production)
+ v.verifyExpr(prod.Expr, isLexical(prod.Name.String))
}
// check if all productions were reached
@@ -233,7 +233,7 @@ func (v *verifier) verify(grammar Grammar, start string) {
// - lexical productions refer only to other lexical productions
//
func Verify(grammar Grammar, start string) os.Error {
- var v verifier;
- v.verify(grammar, start);
- return v.GetError(scanner.Sorted);
+ var v verifier
+ v.verify(grammar, start)
+ return v.GetError(scanner.Sorted)
}
diff --git a/src/pkg/ebnf/ebnf_test.go b/src/pkg/ebnf/ebnf_test.go
index a487bdc2c..e6f670530 100644
--- a/src/pkg/ebnf/ebnf_test.go
+++ b/src/pkg/ebnf/ebnf_test.go
@@ -5,9 +5,9 @@
package ebnf
import (
- "io/ioutil";
- "strings";
- "testing";
+ "io/ioutil"
+ "strings"
+ "testing"
)
@@ -41,7 +41,7 @@ var grammars = []string{
func check(t *testing.T, filename string, src []byte) {
- grammar, err := Parse(filename, src);
+ grammar, err := Parse(filename, src)
if err != nil {
t.Errorf("Parse(%s) failed: %v", src, err)
}
@@ -65,10 +65,10 @@ var files = []string{
func TestFiles(t *testing.T) {
for _, filename := range files {
- src, err := ioutil.ReadFile(filename);
+ src, err := ioutil.ReadFile(filename)
if err != nil {
t.Fatal(err)
}
- check(t, filename, src);
+ check(t, filename, src)
}
}
diff --git a/src/pkg/ebnf/parser.go b/src/pkg/ebnf/parser.go
index 5193f8b26..649587879 100644
--- a/src/pkg/ebnf/parser.go
+++ b/src/pkg/ebnf/parser.go
@@ -5,25 +5,25 @@
package ebnf
import (
- "container/vector";
- "go/scanner";
- "go/token";
- "os";
- "strconv";
+ "container/vector"
+ "go/scanner"
+ "go/token"
+ "os"
+ "strconv"
)
type parser struct {
- scanner.ErrorVector;
- scanner scanner.Scanner;
- pos token.Position; // token position
- tok token.Token; // one token look-ahead
- lit []byte; // token literal
+ scanner.ErrorVector
+ scanner scanner.Scanner
+ pos token.Position // token position
+ tok token.Token // one token look-ahead
+ lit []byte // token literal
}
func (p *parser) next() {
- p.pos, p.tok, p.lit = p.scanner.Scan();
+ p.pos, p.tok, p.lit = p.scanner.Scan()
if p.tok.IsKeyword() {
// TODO Should keyword mapping always happen outside scanner?
// Or should there be a flag to scanner to enable keyword mapping?
@@ -33,90 +33,90 @@ func (p *parser) next() {
func (p *parser) errorExpected(pos token.Position, msg string) {
- msg = "expected " + msg;
+ msg = "expected " + msg
if pos.Offset == p.pos.Offset {
// the error happened at the current position;
// make the error message more specific
- msg += ", found '" + p.tok.String() + "'";
+ msg += ", found '" + p.tok.String() + "'"
if p.tok.IsLiteral() {
msg += " " + string(p.lit)
}
}
- p.Error(pos, msg);
+ p.Error(pos, msg)
}
func (p *parser) expect(tok token.Token) token.Position {
- pos := p.pos;
+ pos := p.pos
if p.tok != tok {
p.errorExpected(pos, "'"+tok.String()+"'")
}
- p.next(); // make progress in any case
- return pos;
+ p.next() // make progress in any case
+ return pos
}
func (p *parser) parseIdentifier() *Name {
- pos := p.pos;
- name := string(p.lit);
- p.expect(token.IDENT);
- return &Name{pos, name};
+ pos := p.pos
+ name := string(p.lit)
+ p.expect(token.IDENT)
+ return &Name{pos, name}
}
func (p *parser) parseToken() *Token {
- pos := p.pos;
- value := "";
+ pos := p.pos
+ value := ""
if p.tok == token.STRING {
- value, _ = strconv.Unquote(string(p.lit));
+ value, _ = strconv.Unquote(string(p.lit))
// Unquote may fail with an error, but only if the scanner found
// an illegal string in the first place. In this case the error
// has already been reported.
- p.next();
+ p.next()
} else {
p.expect(token.STRING)
}
- return &Token{pos, value};
+ return &Token{pos, value}
}
func (p *parser) parseTerm() (x Expression) {
- pos := p.pos;
+ pos := p.pos
switch p.tok {
case token.IDENT:
x = p.parseIdentifier()
case token.STRING:
- tok := p.parseToken();
- x = tok;
+ tok := p.parseToken()
+ x = tok
if p.tok == token.ELLIPSIS {
- p.next();
- x = &Range{tok, p.parseToken()};
+ p.next()
+ x = &Range{tok, p.parseToken()}
}
case token.LPAREN:
- p.next();
- x = &Group{pos, p.parseExpression()};
- p.expect(token.RPAREN);
+ p.next()
+ x = &Group{pos, p.parseExpression()}
+ p.expect(token.RPAREN)
case token.LBRACK:
- p.next();
- x = &Option{pos, p.parseExpression()};
- p.expect(token.RBRACK);
+ p.next()
+ x = &Option{pos, p.parseExpression()}
+ p.expect(token.RBRACK)
case token.LBRACE:
- p.next();
- x = &Repetition{pos, p.parseExpression()};
- p.expect(token.RBRACE);
+ p.next()
+ x = &Repetition{pos, p.parseExpression()}
+ p.expect(token.RBRACE)
}
- return x;
+ return x
}
func (p *parser) parseSequence() Expression {
- var list vector.Vector;
+ var list vector.Vector
for x := p.parseTerm(); x != nil; x = p.parseTerm() {
list.Push(x)
@@ -131,26 +131,26 @@ func (p *parser) parseSequence() Expression {
}
// convert list into a sequence
- seq := make(Sequence, list.Len());
+ seq := make(Sequence, list.Len())
for i := 0; i < list.Len(); i++ {
seq[i] = list.At(i).(Expression)
}
- return seq;
+ return seq
}
func (p *parser) parseExpression() Expression {
- var list vector.Vector;
+ var list vector.Vector
for {
- x := p.parseSequence();
+ x := p.parseSequence()
if x != nil {
list.Push(x)
}
if p.tok != token.OR {
break
}
- p.next();
+ p.next()
}
// no need for an Alternative node if list.Len() < 2
@@ -162,33 +162,33 @@ func (p *parser) parseExpression() Expression {
}
// convert list into an Alternative node
- alt := make(Alternative, list.Len());
+ alt := make(Alternative, list.Len())
for i := 0; i < list.Len(); i++ {
alt[i] = list.At(i).(Expression)
}
- return alt;
+ return alt
}
func (p *parser) parseProduction() *Production {
- name := p.parseIdentifier();
- p.expect(token.ASSIGN);
- expr := p.parseExpression();
- p.expect(token.PERIOD);
- return &Production{name, expr};
+ name := p.parseIdentifier()
+ p.expect(token.ASSIGN)
+ expr := p.parseExpression()
+ p.expect(token.PERIOD)
+ return &Production{name, expr}
}
func (p *parser) parse(filename string, src []byte) Grammar {
// initialize parser
- p.ErrorVector.Reset();
- p.scanner.Init(filename, src, p, 0);
- p.next(); // initializes pos, tok, lit
+ p.ErrorVector.Reset()
+ p.scanner.Init(filename, src, p, 0)
+ p.next() // initializes pos, tok, lit
- grammar := make(Grammar);
+ grammar := make(Grammar)
for p.tok != token.EOF {
- prod := p.parseProduction();
- name := prod.Name.String;
+ prod := p.parseProduction()
+ name := prod.Name.String
if _, found := grammar[name]; !found {
grammar[name] = prod
} else {
@@ -196,7 +196,7 @@ func (p *parser) parse(filename string, src []byte) Grammar {
}
}
- return grammar;
+ return grammar
}
@@ -206,7 +206,7 @@ func (p *parser) parse(filename string, src []byte) Grammar {
// more than once.
//
func Parse(filename string, src []byte) (Grammar, os.Error) {
- var p parser;
- grammar := p.parse(filename, src);
- return grammar, p.GetError(scanner.Sorted);
+ var p parser
+ grammar := p.parse(filename, src)
+ return grammar, p.GetError(scanner.Sorted)
}
diff --git a/src/pkg/encoding/ascii85/ascii85.go b/src/pkg/encoding/ascii85/ascii85.go
index ac446baf8..67d6ef7ed 100644
--- a/src/pkg/encoding/ascii85/ascii85.go
+++ b/src/pkg/encoding/ascii85/ascii85.go
@@ -7,9 +7,9 @@
package ascii85
import (
- "io";
- "os";
- "strconv";
+ "io"
+ "os"
+ "strconv"
)
/*
@@ -30,74 +30,74 @@ func Encode(dst, src []byte) int {
return 0
}
- n := 0;
+ n := 0
for len(src) > 0 {
- dst[0] = 0;
- dst[1] = 0;
- dst[2] = 0;
- dst[3] = 0;
- dst[4] = 0;
+ dst[0] = 0
+ dst[1] = 0
+ dst[2] = 0
+ dst[3] = 0
+ dst[4] = 0
// Unpack 4 bytes into uint32 to repack into base 85 5-byte.
- var v uint32;
+ var v uint32
switch len(src) {
default:
- v |= uint32(src[3]);
- fallthrough;
+ v |= uint32(src[3])
+ fallthrough
case 3:
- v |= uint32(src[2]) << 8;
- fallthrough;
+ v |= uint32(src[2]) << 8
+ fallthrough
case 2:
- v |= uint32(src[1]) << 16;
- fallthrough;
+ v |= uint32(src[1]) << 16
+ fallthrough
case 1:
v |= uint32(src[0]) << 24
}
// Special case: zero (!!!!!) shortens to z.
if v == 0 && len(src) >= 4 {
- dst[0] = 'z';
- dst = dst[1:];
- n++;
- continue;
+ dst[0] = 'z'
+ dst = dst[1:]
+ n++
+ continue
}
// Otherwise, 5 base 85 digits starting at !.
for i := 4; i >= 0; i-- {
- dst[i] = '!' + byte(v%85);
- v /= 85;
+ dst[i] = '!' + byte(v%85)
+ v /= 85
}
// If src was short, discard the low destination bytes.
- m := 5;
+ m := 5
if len(src) < 4 {
- m -= 4 - len(src);
- src = nil;
+ m -= 4 - len(src)
+ src = nil
} else {
src = src[4:]
}
- dst = dst[m:];
- n += m;
+ dst = dst[m:]
+ n += m
}
- return n;
+ return n
}
// MaxEncodedLen returns the maximum length of an encoding of n source bytes.
-func MaxEncodedLen(n int) int { return (n + 3) / 4 * 5 }
+func MaxEncodedLen(n int) int { return (n + 3) / 4 * 5 }
// NewEncoder returns a new ascii85 stream encoder. Data written to
// the returned writer will be encoded and then written to w.
// Ascii85 encodings operate in 32-bit blocks; when finished
// writing, the caller must Close the returned encoder to flush any
// trailing partial block.
-func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
+func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
type encoder struct {
- err os.Error;
- w io.Writer;
- buf [4]byte; // buffered data waiting to be encoded
- nbuf int; // number of bytes in buf
- out [1024]byte; // output buffer
+ err os.Error
+ w io.Writer
+ buf [4]byte // buffered data waiting to be encoded
+ nbuf int // number of bytes in buf
+ out [1024]byte // output buffer
}
func (e *encoder) Write(p []byte) (n int, err os.Error) {
@@ -107,47 +107,47 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
// Leading fringe.
if e.nbuf > 0 {
- var i int;
+ var i int
for i = 0; i < len(p) && e.nbuf < 4; i++ {
- e.buf[e.nbuf] = p[i];
- e.nbuf++;
+ e.buf[e.nbuf] = p[i]
+ e.nbuf++
}
- n += i;
- p = p[i:];
+ n += i
+ p = p[i:]
if e.nbuf < 4 {
return
}
- nout := Encode(&e.out, &e.buf);
+ nout := Encode(&e.out, &e.buf)
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
- e.nbuf = 0;
+ e.nbuf = 0
}
// Large interior chunks.
for len(p) >= 4 {
- nn := len(e.out) / 5 * 4;
+ nn := len(e.out) / 5 * 4
if nn > len(p) {
nn = len(p)
}
- nn -= nn % 4;
+ nn -= nn % 4
if nn > 0 {
- nout := Encode(&e.out, p[0:nn]);
+ nout := Encode(&e.out, p[0:nn])
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
}
- n += nn;
- p = p[nn:];
+ n += nn
+ p = p[nn:]
}
// Trailing fringe.
for i := 0; i < len(p); i++ {
e.buf[i] = p[i]
}
- e.nbuf = len(p);
- n += len(p);
- return;
+ e.nbuf = len(p)
+ n += len(p)
+ return
}
// Close flushes any pending output from the encoder.
@@ -155,11 +155,11 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
func (e *encoder) Close() os.Error {
// If there's anything left in the buffer, flush it out
if e.err == nil && e.nbuf > 0 {
- nout := Encode(&e.out, e.buf[0:e.nbuf]);
- e.nbuf = 0;
- _, e.err = e.w.Write(e.out[0:nout]);
+ nout := Encode(&e.out, e.buf[0:e.nbuf])
+ e.nbuf = 0
+ _, e.err = e.w.Write(e.out[0:nout])
}
- return e.err;
+ return e.err
}
/*
@@ -187,8 +187,8 @@ func (e CorruptInputError) String() string {
// NewDecoder wraps an io.Reader interface around Decode.
//
func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) {
- var v uint32;
- var nb int;
+ var v uint32
+ var nb int
for i, b := range src {
if len(dst)-ndst < 4 {
return
@@ -197,27 +197,27 @@ func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) {
case b <= ' ':
continue
case b == 'z' && nb == 0:
- nb = 5;
- v = 0;
+ nb = 5
+ v = 0
case '!' <= b && b <= 'u':
- v = v*85 + uint32(b-'!');
- nb++;
+ v = v*85 + uint32(b-'!')
+ nb++
default:
return 0, 0, CorruptInputError(i)
}
if nb == 5 {
- nsrc = i + 1;
- dst[ndst] = byte(v >> 24);
- dst[ndst+1] = byte(v >> 16);
- dst[ndst+2] = byte(v >> 8);
- dst[ndst+3] = byte(v);
- ndst += 4;
- nb = 0;
- v = 0;
+ nsrc = i + 1
+ dst[ndst] = byte(v >> 24)
+ dst[ndst+1] = byte(v >> 16)
+ dst[ndst+2] = byte(v >> 8)
+ dst[ndst+3] = byte(v)
+ ndst += 4
+ nb = 0
+ v = 0
}
}
if flush {
- nsrc = len(src);
+ nsrc = len(src)
if nb > 0 {
// The number of output bytes in the last fragment
// is the number of leftover input bytes - 1:
@@ -233,27 +233,27 @@ func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) {
v = v*85 + 84
}
for i := 0; i < nb-1; i++ {
- dst[ndst] = byte(v >> 24);
- v <<= 8;
- ndst++;
+ dst[ndst] = byte(v >> 24)
+ v <<= 8
+ ndst++
}
}
}
- return;
+ return
}
// NewDecoder constructs a new ascii85 stream decoder.
-func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
+func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
type decoder struct {
- err os.Error;
- readErr os.Error;
- r io.Reader;
- end bool; // saw end of message
- buf [1024]byte; // leftover input
- nbuf int;
- out []byte; // leftover decoded output
- outbuf [1024]byte;
+ err os.Error
+ readErr os.Error
+ r io.Reader
+ end bool // saw end of message
+ buf [1024]byte // leftover input
+ nbuf int
+ out []byte // leftover decoded output
+ outbuf [1024]byte
}
func (d *decoder) Read(p []byte) (n int, err os.Error) {
@@ -267,19 +267,19 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
for {
// Copy leftover output from last decode.
if len(d.out) > 0 {
- n = copy(p, d.out);
- d.out = d.out[n:];
- return;
+ n = copy(p, d.out)
+ d.out = d.out[n:]
+ return
}
// Decode leftover input from last read.
- var nn, nsrc, ndst int;
+ var nn, nsrc, ndst int
if d.nbuf > 0 {
- ndst, nsrc, d.err = Decode(&d.outbuf, d.buf[0:d.nbuf], d.readErr != nil);
+ ndst, nsrc, d.err = Decode(&d.outbuf, d.buf[0:d.nbuf], d.readErr != nil)
if ndst > 0 {
- d.out = d.outbuf[0:ndst];
- d.nbuf = copy(&d.buf, d.buf[nsrc:d.nbuf]);
- continue; // copy out and return
+ d.out = d.outbuf[0:ndst]
+ d.nbuf = copy(&d.buf, d.buf[nsrc:d.nbuf])
+ continue // copy out and return
}
}
@@ -288,13 +288,13 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
return 0, d.err
}
if d.readErr != nil {
- d.err = d.readErr;
- return 0, d.err;
+ d.err = d.readErr
+ return 0, d.err
}
// Read more data.
- nn, d.readErr = d.r.Read(d.buf[d.nbuf:]);
- d.nbuf += nn;
+ nn, d.readErr = d.r.Read(d.buf[d.nbuf:])
+ d.nbuf += nn
}
- panic("unreachable");
+ panic("unreachable")
}
diff --git a/src/pkg/encoding/ascii85/ascii85_test.go b/src/pkg/encoding/ascii85/ascii85_test.go
index 5ac49c675..7eb245ee2 100644
--- a/src/pkg/encoding/ascii85/ascii85_test.go
+++ b/src/pkg/encoding/ascii85/ascii85_test.go
@@ -5,16 +5,16 @@
package ascii85
import (
- "bytes";
- "io/ioutil";
- "os";
- "reflect";
- "strings";
- "testing";
+ "bytes"
+ "io/ioutil"
+ "os"
+ "reflect"
+ "strings"
+ "testing"
)
type testpair struct {
- decoded, encoded string;
+ decoded, encoded string
}
var pairs = []testpair{
@@ -35,88 +35,88 @@ var pairs = []testpair{
var bigtest = pairs[len(pairs)-1]
func testEqual(t *testing.T, msg string, args ...) bool {
- v := reflect.NewValue(args).(*reflect.StructValue);
- v1 := v.Field(v.NumField() - 2);
- v2 := v.Field(v.NumField() - 1);
+ v := reflect.NewValue(args).(*reflect.StructValue)
+ v1 := v.Field(v.NumField() - 2)
+ v2 := v.Field(v.NumField() - 1)
if v1.Interface() != v2.Interface() {
- t.Errorf(msg, args);
- return false;
+ t.Errorf(msg, args)
+ return false
}
- return true;
+ return true
}
func strip85(s string) string {
- t := make([]byte, len(s));
- w := 0;
+ t := make([]byte, len(s))
+ w := 0
for r := 0; r < len(s); r++ {
- c := s[r];
+ c := s[r]
if c > ' ' {
- t[w] = c;
- w++;
+ t[w] = c
+ w++
}
}
- return string(t[0:w]);
+ return string(t[0:w])
}
func TestEncode(t *testing.T) {
for _, p := range pairs {
- buf := make([]byte, MaxEncodedLen(len(p.decoded)));
- n := Encode(buf, strings.Bytes(p.decoded));
- buf = buf[0:n];
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(string(buf)), strip85(p.encoded));
+ buf := make([]byte, MaxEncodedLen(len(p.decoded)))
+ n := Encode(buf, strings.Bytes(p.decoded))
+ buf = buf[0:n]
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(string(buf)), strip85(p.encoded))
}
}
func TestEncoder(t *testing.T) {
for _, p := range pairs {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
- encoder.Write(strings.Bytes(p.decoded));
- encoder.Close();
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(bb.String()), strip85(p.encoded));
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
+ encoder.Write(strings.Bytes(p.decoded))
+ encoder.Close()
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(bb.String()), strip85(p.encoded))
}
}
func TestEncoderBuffering(t *testing.T) {
- input := strings.Bytes(bigtest.decoded);
+ input := strings.Bytes(bigtest.decoded)
for bs := 1; bs <= 12; bs++ {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
for pos := 0; pos < len(input); pos += bs {
- end := pos + bs;
+ end := pos + bs
if end > len(input) {
end = len(input)
}
- n, err := encoder.Write(input[pos:end]);
- testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil));
- testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos);
+ n, err := encoder.Write(input[pos:end])
+ testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil))
+ testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos)
}
- err := encoder.Close();
- testEqual(t, "Close gave error %v, want %v", err, os.Error(nil));
- testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, strip85(bb.String()), strip85(bigtest.encoded));
+ err := encoder.Close()
+ testEqual(t, "Close gave error %v, want %v", err, os.Error(nil))
+ testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, strip85(bb.String()), strip85(bigtest.encoded))
}
}
func TestDecode(t *testing.T) {
for _, p := range pairs {
- dbuf := make([]byte, 4*len(p.encoded));
- ndst, nsrc, err := Decode(dbuf, strings.Bytes(p.encoded), true);
- testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil));
- testEqual(t, "Decode(%q) = nsrc %v, want %v", p.encoded, nsrc, len(p.encoded));
- testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded));
- testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded);
+ dbuf := make([]byte, 4*len(p.encoded))
+ ndst, nsrc, err := Decode(dbuf, strings.Bytes(p.encoded), true)
+ testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil))
+ testEqual(t, "Decode(%q) = nsrc %v, want %v", p.encoded, nsrc, len(p.encoded))
+ testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded))
+ testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded)
}
}
func TestDecoder(t *testing.T) {
for _, p := range pairs {
- decoder := NewDecoder(bytes.NewBufferString(p.encoded));
- dbuf, err := ioutil.ReadAll(decoder);
+ decoder := NewDecoder(bytes.NewBufferString(p.encoded))
+ dbuf, err := ioutil.ReadAll(decoder)
if err != nil {
t.Fatal("Read failed", err)
}
- testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded));
- testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded);
+ testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded))
+ testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded)
if err != nil {
testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF)
}
@@ -125,31 +125,31 @@ func TestDecoder(t *testing.T) {
func TestDecoderBuffering(t *testing.T) {
for bs := 1; bs <= 12; bs++ {
- decoder := NewDecoder(bytes.NewBufferString(bigtest.encoded));
- buf := make([]byte, len(bigtest.decoded)+12);
- var total int;
+ decoder := NewDecoder(bytes.NewBufferString(bigtest.encoded))
+ buf := make([]byte, len(bigtest.decoded)+12)
+ var total int
for total = 0; total < len(bigtest.decoded); {
- n, err := decoder.Read(buf[total : total+bs]);
- testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil));
- total += n;
+ n, err := decoder.Read(buf[total : total+bs])
+ testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil))
+ total += n
}
- testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded);
+ testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)
}
}
func TestDecodeCorrupt(t *testing.T) {
type corrupt struct {
- e string;
- p int;
+ e string
+ p int
}
examples := []corrupt{
corrupt{"v", 0},
corrupt{"!z!!!!!!!!!", 1},
- };
+ }
for _, e := range examples {
- dbuf := make([]byte, 4*len(e.e));
- _, _, err := Decode(dbuf, strings.Bytes(e.e), true);
+ dbuf := make([]byte, 4*len(e.e))
+ _, _, err := Decode(dbuf, strings.Bytes(e.e), true)
switch err := err.(type) {
case CorruptInputError:
testEqual(t, "Corruption in %q at offset %v, want %v", e.e, int(err), e.p)
@@ -160,34 +160,34 @@ func TestDecodeCorrupt(t *testing.T) {
}
func TestBig(t *testing.T) {
- n := 3*1000 + 1;
- raw := make([]byte, n);
- const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ n := 3*1000 + 1
+ raw := make([]byte, n)
+ const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < n; i++ {
raw[i] = alpha[i%len(alpha)]
}
- encoded := new(bytes.Buffer);
- w := NewEncoder(encoded);
- nn, err := w.Write(raw);
+ encoded := new(bytes.Buffer)
+ w := NewEncoder(encoded)
+ nn, err := w.Write(raw)
if nn != n || err != nil {
t.Fatalf("Encoder.Write(raw) = %d, %v want %d, nil", nn, err, n)
}
- err = w.Close();
+ err = w.Close()
if err != nil {
t.Fatalf("Encoder.Close() = %v want nil", err)
}
- decoded, err := ioutil.ReadAll(NewDecoder(encoded));
+ decoded, err := ioutil.ReadAll(NewDecoder(encoded))
if err != nil {
t.Fatalf("io.ReadAll(NewDecoder(...)): %v", err)
}
if !bytes.Equal(raw, decoded) {
- var i int;
+ var i int
for i = 0; i < len(decoded) && i < len(raw); i++ {
if decoded[i] != raw[i] {
break
}
}
- t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i);
+ t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i)
}
}
diff --git a/src/pkg/encoding/base64/base64.go b/src/pkg/encoding/base64/base64.go
index e7b7f4da4..d4429094a 100644
--- a/src/pkg/encoding/base64/base64.go
+++ b/src/pkg/encoding/base64/base64.go
@@ -6,9 +6,9 @@
package base64
import (
- "io";
- "os";
- "strconv";
+ "io"
+ "os"
+ "strconv"
)
/*
@@ -21,8 +21,8 @@ import (
// (RFC 1421). RFC 4648 also defines an alternate encoding, which is
// the standard encoding with - and _ substituted for + and /.
type Encoding struct {
- encode string;
- decodeMap [256]byte;
+ encode string
+ decodeMap [256]byte
}
const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
@@ -31,15 +31,15 @@ const encodeURL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
// NewEncoding returns a new Encoding defined by the given alphabet,
// which must be a 64-byte string.
func NewEncoding(encoder string) *Encoding {
- e := new(Encoding);
- e.encode = encoder;
+ e := new(Encoding)
+ e.encode = encoder
for i := 0; i < len(e.decodeMap); i++ {
e.decodeMap[i] = 0xFF
}
for i := 0; i < len(encoder); i++ {
e.decodeMap[encoder[i]] = byte(i)
}
- return e;
+ return e
}
// StdEncoding is the standard base64 encoding, as defined in
@@ -66,25 +66,25 @@ func (enc *Encoding) Encode(dst, src []byte) {
}
for len(src) > 0 {
- dst[0] = 0;
- dst[1] = 0;
- dst[2] = 0;
- dst[3] = 0;
+ dst[0] = 0
+ dst[1] = 0
+ dst[2] = 0
+ dst[3] = 0
// Unpack 4x 6-bit source blocks into a 4 byte
// destination quantum
switch len(src) {
default:
- dst[3] |= src[2] & 0x3F;
- dst[2] |= src[2] >> 6;
- fallthrough;
+ dst[3] |= src[2] & 0x3F
+ dst[2] |= src[2] >> 6
+ fallthrough
case 2:
- dst[2] |= (src[1] << 2) & 0x3F;
- dst[1] |= src[1] >> 4;
- fallthrough;
+ dst[2] |= (src[1] << 2) & 0x3F
+ dst[1] |= src[1] >> 4
+ fallthrough
case 1:
- dst[1] |= (src[0] << 4) & 0x3F;
- dst[0] |= src[0] >> 2;
+ dst[1] |= (src[0] << 4) & 0x3F
+ dst[0] |= src[0] >> 2
}
// Encode 6-bit blocks using the base64 alphabet
@@ -94,25 +94,25 @@ func (enc *Encoding) Encode(dst, src []byte) {
// Pad the final quantum
if len(src) < 3 {
- dst[3] = '=';
+ dst[3] = '='
if len(src) < 2 {
dst[2] = '='
}
- break;
+ break
}
- src = src[3:];
- dst = dst[4:];
+ src = src[3:]
+ dst = dst[4:]
}
}
type encoder struct {
- err os.Error;
- enc *Encoding;
- w io.Writer;
- buf [3]byte; // buffered data waiting to be encoded
- nbuf int; // number of bytes in buf
- out [1024]byte; // output buffer
+ err os.Error
+ enc *Encoding
+ w io.Writer
+ buf [3]byte // buffered data waiting to be encoded
+ nbuf int // number of bytes in buf
+ out [1024]byte // output buffer
}
func (e *encoder) Write(p []byte) (n int, err os.Error) {
@@ -122,47 +122,47 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
// Leading fringe.
if e.nbuf > 0 {
- var i int;
+ var i int
for i = 0; i < len(p) && e.nbuf < 3; i++ {
- e.buf[e.nbuf] = p[i];
- e.nbuf++;
+ e.buf[e.nbuf] = p[i]
+ e.nbuf++
}
- n += i;
- p = p[i:];
+ n += i
+ p = p[i:]
if e.nbuf < 3 {
return
}
- e.enc.Encode(&e.out, &e.buf);
+ e.enc.Encode(&e.out, &e.buf)
if _, e.err = e.w.Write(e.out[0:4]); e.err != nil {
return n, e.err
}
- e.nbuf = 0;
+ e.nbuf = 0
}
// Large interior chunks.
for len(p) >= 3 {
- nn := len(e.out) / 4 * 3;
+ nn := len(e.out) / 4 * 3
if nn > len(p) {
nn = len(p)
}
- nn -= nn % 3;
+ nn -= nn % 3
if nn > 0 {
- e.enc.Encode(&e.out, p[0:nn]);
+ e.enc.Encode(&e.out, p[0:nn])
if _, e.err = e.w.Write(e.out[0 : nn/3*4]); e.err != nil {
return n, e.err
}
}
- n += nn;
- p = p[nn:];
+ n += nn
+ p = p[nn:]
}
// Trailing fringe.
for i := 0; i < len(p); i++ {
e.buf[i] = p[i]
}
- e.nbuf = len(p);
- n += len(p);
- return;
+ e.nbuf = len(p)
+ n += len(p)
+ return
}
// Close flushes any pending output from the encoder.
@@ -170,11 +170,11 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
func (e *encoder) Close() os.Error {
// If there's anything left in the buffer, flush it out
if e.err == nil && e.nbuf > 0 {
- e.enc.Encode(&e.out, e.buf[0:e.nbuf]);
- e.nbuf = 0;
- _, e.err = e.w.Write(e.out[0:4]);
+ e.enc.Encode(&e.out, e.buf[0:e.nbuf])
+ e.nbuf = 0
+ _, e.err = e.w.Write(e.out[0:4])
}
- return e.err;
+ return e.err
}
// NewEncoder returns a new base64 stream encoder. Data written to
@@ -188,7 +188,7 @@ func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser {
// EncodedLen returns the length in bytes of the base64 encoding
// of an input buffer of length n.
-func (enc *Encoding) EncodedLen(n int) int { return (n + 2) / 3 * 4 }
+func (enc *Encoding) EncodedLen(n int) int { return (n + 2) / 3 * 4 }
/*
* Decoder
@@ -207,23 +207,23 @@ func (e CorruptInputError) String() string {
func (enc *Encoding) decode(dst, src []byte) (n int, end bool, err os.Error) {
for i := 0; i < len(src)/4 && !end; i++ {
// Decode quantum using the base64 alphabet
- var dbuf [4]byte;
- dlen := 4;
+ var dbuf [4]byte
+ dlen := 4
dbufloop:
for j := 0; j < 4; j++ {
- in := src[i*4+j];
+ in := src[i*4+j]
if in == '=' && j >= 2 && i == len(src)/4-1 {
// We've reached the end and there's
// padding
if src[i*4+3] != '=' {
return n, false, CorruptInputError(i*4 + 2)
}
- dlen = j;
- end = true;
- break dbufloop;
+ dlen = j
+ end = true
+ break dbufloop
}
- dbuf[j] = enc.decodeMap[in];
+ dbuf[j] = enc.decodeMap[in]
if dbuf[j] == 0xFF {
return n, false, CorruptInputError(i*4 + j)
}
@@ -233,18 +233,18 @@ func (enc *Encoding) decode(dst, src []byte) (n int, end bool, err os.Error) {
// quantum
switch dlen {
case 4:
- dst[i*3+2] = dbuf[2]<<6 | dbuf[3];
- fallthrough;
+ dst[i*3+2] = dbuf[2]<<6 | dbuf[3]
+ fallthrough
case 3:
- dst[i*3+1] = dbuf[1]<<4 | dbuf[2]>>2;
- fallthrough;
+ dst[i*3+1] = dbuf[1]<<4 | dbuf[2]>>2
+ fallthrough
case 2:
dst[i*3+0] = dbuf[0]<<2 | dbuf[1]>>4
}
- n += dlen - 1;
+ n += dlen - 1
}
- return n, end, nil;
+ return n, end, nil
}
// Decode decodes src using the encoding enc. It writes at most
@@ -256,19 +256,19 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err os.Error) {
return 0, CorruptInputError(len(src) / 4 * 4)
}
- n, _, err = enc.decode(dst, src);
- return;
+ n, _, err = enc.decode(dst, src)
+ return
}
type decoder struct {
- err os.Error;
- enc *Encoding;
- r io.Reader;
- end bool; // saw end of message
- buf [1024]byte; // leftover input
- nbuf int;
- out []byte; // leftover decoded output
- outbuf [1024 / 4 * 3]byte;
+ err os.Error
+ enc *Encoding
+ r io.Reader
+ end bool // saw end of message
+ buf [1024]byte // leftover input
+ nbuf int
+ out []byte // leftover decoded output
+ outbuf [1024 / 4 * 3]byte
}
func (d *decoder) Read(p []byte) (n int, err os.Error) {
@@ -278,37 +278,37 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
// Use leftover decoded output from last read.
if len(d.out) > 0 {
- n = copy(p, d.out);
- d.out = d.out[n:];
- return n, nil;
+ n = copy(p, d.out)
+ d.out = d.out[n:]
+ return n, nil
}
// Read a chunk.
- nn := len(p) / 3 * 4;
+ nn := len(p) / 3 * 4
if nn < 4 {
nn = 4
}
if nn > len(d.buf) {
nn = len(d.buf)
}
- nn, d.err = io.ReadAtLeast(d.r, d.buf[d.nbuf:nn], 4-d.nbuf);
- d.nbuf += nn;
+ nn, d.err = io.ReadAtLeast(d.r, d.buf[d.nbuf:nn], 4-d.nbuf)
+ d.nbuf += nn
if d.nbuf < 4 {
return 0, d.err
}
// Decode chunk into p, or d.out and then p if p is too small.
- nr := d.nbuf / 4 * 4;
- nw := d.nbuf / 4 * 3;
+ nr := d.nbuf / 4 * 4
+ nw := d.nbuf / 4 * 3
if nw > len(p) {
- nw, d.end, d.err = d.enc.decode(&d.outbuf, d.buf[0:nr]);
- d.out = d.outbuf[0:nw];
- n = copy(p, d.out);
- d.out = d.out[n:];
+ nw, d.end, d.err = d.enc.decode(&d.outbuf, d.buf[0:nr])
+ d.out = d.outbuf[0:nw]
+ n = copy(p, d.out)
+ d.out = d.out[n:]
} else {
n, d.end, d.err = d.enc.decode(p, d.buf[0:nr])
}
- d.nbuf -= nr;
+ d.nbuf -= nr
for i := 0; i < d.nbuf; i++ {
d.buf[i] = d.buf[i+nr]
}
@@ -316,7 +316,7 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
if d.err == nil {
d.err = err
}
- return n, d.err;
+ return n, d.err
}
// NewDecoder constructs a new base64 stream decoder.
@@ -326,4 +326,4 @@ func NewDecoder(enc *Encoding, r io.Reader) io.Reader {
// DecodeLen returns the maximum length in bytes of the decoded data
// corresponding to n bytes of base64-encoded data.
-func (enc *Encoding) DecodedLen(n int) int { return n / 4 * 3 }
+func (enc *Encoding) DecodedLen(n int) int { return n / 4 * 3 }
diff --git a/src/pkg/encoding/base64/base64_test.go b/src/pkg/encoding/base64/base64_test.go
index 3153a7347..fe66cff7e 100644
--- a/src/pkg/encoding/base64/base64_test.go
+++ b/src/pkg/encoding/base64/base64_test.go
@@ -5,16 +5,16 @@
package base64
import (
- "bytes";
- "io/ioutil";
- "os";
- "reflect";
- "strings";
- "testing";
+ "bytes"
+ "io/ioutil"
+ "os"
+ "reflect"
+ "strings"
+ "testing"
)
type testpair struct {
- decoded, encoded string;
+ decoded, encoded string
}
var pairs = []testpair{
@@ -49,102 +49,102 @@ var bigtest = testpair{
}
func testEqual(t *testing.T, msg string, args ...) bool {
- v := reflect.NewValue(args).(*reflect.StructValue);
- v1 := v.Field(v.NumField() - 2);
- v2 := v.Field(v.NumField() - 1);
+ v := reflect.NewValue(args).(*reflect.StructValue)
+ v1 := v.Field(v.NumField() - 2)
+ v2 := v.Field(v.NumField() - 1)
if v1.Interface() != v2.Interface() {
- t.Errorf(msg, args);
- return false;
+ t.Errorf(msg, args)
+ return false
}
- return true;
+ return true
}
func TestEncode(t *testing.T) {
for _, p := range pairs {
- buf := make([]byte, StdEncoding.EncodedLen(len(p.decoded)));
- StdEncoding.Encode(buf, strings.Bytes(p.decoded));
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded);
+ buf := make([]byte, StdEncoding.EncodedLen(len(p.decoded)))
+ StdEncoding.Encode(buf, strings.Bytes(p.decoded))
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded)
}
}
func TestEncoder(t *testing.T) {
for _, p := range pairs {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(StdEncoding, bb);
- encoder.Write(strings.Bytes(p.decoded));
- encoder.Close();
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(StdEncoding, bb)
+ encoder.Write(strings.Bytes(p.decoded))
+ encoder.Close()
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded)
}
}
func TestEncoderBuffering(t *testing.T) {
- input := strings.Bytes(bigtest.decoded);
+ input := strings.Bytes(bigtest.decoded)
for bs := 1; bs <= 12; bs++ {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(StdEncoding, bb);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(StdEncoding, bb)
for pos := 0; pos < len(input); pos += bs {
- end := pos + bs;
+ end := pos + bs
if end > len(input) {
end = len(input)
}
- n, err := encoder.Write(input[pos:end]);
- testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil));
- testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos);
+ n, err := encoder.Write(input[pos:end])
+ testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil))
+ testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos)
}
- err := encoder.Close();
- testEqual(t, "Close gave error %v, want %v", err, os.Error(nil));
- testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, bb.String(), bigtest.encoded);
+ err := encoder.Close()
+ testEqual(t, "Close gave error %v, want %v", err, os.Error(nil))
+ testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, bb.String(), bigtest.encoded)
}
}
func TestDecode(t *testing.T) {
for _, p := range pairs {
- dbuf := make([]byte, StdEncoding.DecodedLen(len(p.encoded)));
- count, end, err := StdEncoding.decode(dbuf, strings.Bytes(p.encoded));
- testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil));
- testEqual(t, "Decode(%q) = length %v, want %v", p.encoded, count, len(p.decoded));
+ dbuf := make([]byte, StdEncoding.DecodedLen(len(p.encoded)))
+ count, end, err := StdEncoding.decode(dbuf, strings.Bytes(p.encoded))
+ testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil))
+ testEqual(t, "Decode(%q) = length %v, want %v", p.encoded, count, len(p.decoded))
if len(p.encoded) > 0 {
testEqual(t, "Decode(%q) = end %v, want %v", p.encoded, end, (p.encoded[len(p.encoded)-1] == '='))
}
- testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded);
+ testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded)
}
}
func TestDecoder(t *testing.T) {
for _, p := range pairs {
- decoder := NewDecoder(StdEncoding, bytes.NewBufferString(p.encoded));
- dbuf := make([]byte, StdEncoding.DecodedLen(len(p.encoded)));
- count, err := decoder.Read(dbuf);
+ decoder := NewDecoder(StdEncoding, bytes.NewBufferString(p.encoded))
+ dbuf := make([]byte, StdEncoding.DecodedLen(len(p.encoded)))
+ count, err := decoder.Read(dbuf)
if err != nil && err != os.EOF {
t.Fatal("Read failed", err)
}
- testEqual(t, "Read from %q = length %v, want %v", p.encoded, count, len(p.decoded));
- testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded);
+ testEqual(t, "Read from %q = length %v, want %v", p.encoded, count, len(p.decoded))
+ testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded)
if err != os.EOF {
count, err = decoder.Read(dbuf)
}
- testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF);
+ testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF)
}
}
func TestDecoderBuffering(t *testing.T) {
for bs := 1; bs <= 12; bs++ {
- decoder := NewDecoder(StdEncoding, bytes.NewBufferString(bigtest.encoded));
- buf := make([]byte, len(bigtest.decoded)+12);
- var total int;
+ decoder := NewDecoder(StdEncoding, bytes.NewBufferString(bigtest.encoded))
+ buf := make([]byte, len(bigtest.decoded)+12)
+ var total int
for total = 0; total < len(bigtest.decoded); {
- n, err := decoder.Read(buf[total : total+bs]);
- testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil));
- total += n;
+ n, err := decoder.Read(buf[total : total+bs])
+ testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil))
+ total += n
}
- testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded);
+ testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)
}
}
func TestDecodeCorrupt(t *testing.T) {
type corrupt struct {
- e string;
- p int;
+ e string
+ p int
}
examples := []corrupt{
corrupt{"!!!!", 0},
@@ -153,11 +153,11 @@ func TestDecodeCorrupt(t *testing.T) {
corrupt{"AAA=AAAA", 3},
corrupt{"AAAAA", 4},
corrupt{"AAAAAA", 4},
- };
+ }
for _, e := range examples {
- dbuf := make([]byte, StdEncoding.DecodedLen(len(e.e)));
- _, err := StdEncoding.Decode(dbuf, strings.Bytes(e.e));
+ dbuf := make([]byte, StdEncoding.DecodedLen(len(e.e)))
+ _, err := StdEncoding.Decode(dbuf, strings.Bytes(e.e))
switch err := err.(type) {
case CorruptInputError:
testEqual(t, "Corruption in %q at offset %v, want %v", e.e, int(err), e.p)
@@ -168,34 +168,34 @@ func TestDecodeCorrupt(t *testing.T) {
}
func TestBig(t *testing.T) {
- n := 3*1000 + 1;
- raw := make([]byte, n);
- const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ n := 3*1000 + 1
+ raw := make([]byte, n)
+ const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < n; i++ {
raw[i] = alpha[i%len(alpha)]
}
- encoded := new(bytes.Buffer);
- w := NewEncoder(StdEncoding, encoded);
- nn, err := w.Write(raw);
+ encoded := new(bytes.Buffer)
+ w := NewEncoder(StdEncoding, encoded)
+ nn, err := w.Write(raw)
if nn != n || err != nil {
t.Fatalf("Encoder.Write(raw) = %d, %v want %d, nil", nn, err, n)
}
- err = w.Close();
+ err = w.Close()
if err != nil {
t.Fatalf("Encoder.Close() = %v want nil", err)
}
- decoded, err := ioutil.ReadAll(NewDecoder(StdEncoding, encoded));
+ decoded, err := ioutil.ReadAll(NewDecoder(StdEncoding, encoded))
if err != nil {
t.Fatalf("ioutil.ReadAll(NewDecoder(...)): %v", err)
}
if !bytes.Equal(raw, decoded) {
- var i int;
+ var i int
for i = 0; i < len(decoded) && i < len(raw); i++ {
if decoded[i] != raw[i] {
break
}
}
- t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i);
+ t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i)
}
}
diff --git a/src/pkg/encoding/binary/binary.go b/src/pkg/encoding/binary/binary.go
index 419ec03a5..36f2366d6 100644
--- a/src/pkg/encoding/binary/binary.go
+++ b/src/pkg/encoding/binary/binary.go
@@ -7,22 +7,22 @@
package binary
import (
- "math";
- "io";
- "os";
- "reflect";
+ "math"
+ "io"
+ "os"
+ "reflect"
)
// A ByteOrder specifies how to convert byte sequences into
// 16-, 32-, or 64-bit unsigned integers.
type ByteOrder interface {
- Uint16(b []byte) uint16;
- Uint32(b []byte) uint32;
- Uint64(b []byte) uint64;
- PutUint16([]byte, uint16);
- PutUint32([]byte, uint32);
- PutUint64([]byte, uint64);
- String() string;
+ Uint16(b []byte) uint16
+ Uint32(b []byte) uint32
+ Uint64(b []byte) uint64
+ PutUint16([]byte, uint16)
+ PutUint32([]byte, uint32)
+ PutUint64([]byte, uint64)
+ String() string
}
// This is byte instead of struct{} so that it can be compared,
@@ -34,11 +34,11 @@ var BigEndian ByteOrder = bigEndian(0)
type littleEndian unused
-func (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8 }
+func (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8 }
func (littleEndian) PutUint16(b []byte, v uint16) {
- b[0] = byte(v);
- b[1] = byte(v >> 8);
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
}
func (littleEndian) Uint32(b []byte) uint32 {
@@ -46,10 +46,10 @@ func (littleEndian) Uint32(b []byte) uint32 {
}
func (littleEndian) PutUint32(b []byte, v uint32) {
- b[0] = byte(v);
- b[1] = byte(v >> 8);
- b[2] = byte(v >> 16);
- b[3] = byte(v >> 24);
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
+ b[2] = byte(v >> 16)
+ b[3] = byte(v >> 24)
}
func (littleEndian) Uint64(b []byte) uint64 {
@@ -58,27 +58,27 @@ func (littleEndian) Uint64(b []byte) uint64 {
}
func (littleEndian) PutUint64(b []byte, v uint64) {
- b[0] = byte(v);
- b[1] = byte(v >> 8);
- b[2] = byte(v >> 16);
- b[3] = byte(v >> 24);
- b[4] = byte(v >> 32);
- b[5] = byte(v >> 40);
- b[6] = byte(v >> 48);
- b[7] = byte(v >> 56);
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
+ b[2] = byte(v >> 16)
+ b[3] = byte(v >> 24)
+ b[4] = byte(v >> 32)
+ b[5] = byte(v >> 40)
+ b[6] = byte(v >> 48)
+ b[7] = byte(v >> 56)
}
-func (littleEndian) String() string { return "LittleEndian" }
+func (littleEndian) String() string { return "LittleEndian" }
-func (littleEndian) GoString() string { return "binary.LittleEndian" }
+func (littleEndian) GoString() string { return "binary.LittleEndian" }
type bigEndian unused
-func (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 }
+func (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 }
func (bigEndian) PutUint16(b []byte, v uint16) {
- b[0] = byte(v >> 8);
- b[1] = byte(v);
+ b[0] = byte(v >> 8)
+ b[1] = byte(v)
}
func (bigEndian) Uint32(b []byte) uint32 {
@@ -86,10 +86,10 @@ func (bigEndian) Uint32(b []byte) uint32 {
}
func (bigEndian) PutUint32(b []byte, v uint32) {
- b[0] = byte(v >> 24);
- b[1] = byte(v >> 16);
- b[2] = byte(v >> 8);
- b[3] = byte(v);
+ b[0] = byte(v >> 24)
+ b[1] = byte(v >> 16)
+ b[2] = byte(v >> 8)
+ b[3] = byte(v)
}
func (bigEndian) Uint64(b []byte) uint64 {
@@ -98,19 +98,19 @@ func (bigEndian) Uint64(b []byte) uint64 {
}
func (bigEndian) PutUint64(b []byte, v uint64) {
- b[0] = byte(v >> 56);
- b[1] = byte(v >> 48);
- b[2] = byte(v >> 40);
- b[3] = byte(v >> 32);
- b[4] = byte(v >> 24);
- b[5] = byte(v >> 16);
- b[6] = byte(v >> 8);
- b[7] = byte(v);
+ b[0] = byte(v >> 56)
+ b[1] = byte(v >> 48)
+ b[2] = byte(v >> 40)
+ b[3] = byte(v >> 32)
+ b[4] = byte(v >> 24)
+ b[5] = byte(v >> 16)
+ b[6] = byte(v >> 8)
+ b[7] = byte(v)
}
-func (bigEndian) String() string { return "BigEndian" }
+func (bigEndian) String() string { return "BigEndian" }
-func (bigEndian) GoString() string { return "binary.BigEndian" }
+func (bigEndian) GoString() string { return "binary.BigEndian" }
// Read reads structured binary data from r into data.
// Data must be a pointer to a fixed-size value or a slice
@@ -121,7 +121,7 @@ func (bigEndian) GoString() string { return "binary.BigEndian" }
// r are decoded using the specified byte order and written
// to successive fields of the data.
func Read(r io.Reader, order ByteOrder, data interface{}) os.Error {
- var v reflect.Value;
+ var v reflect.Value
switch d := reflect.NewValue(data).(type) {
case *reflect.PtrValue:
v = d.Elem()
@@ -130,16 +130,16 @@ func Read(r io.Reader, order ByteOrder, data interface{}) os.Error {
default:
return os.NewError("binary.Read: invalid type " + v.Type().String())
}
- size := TotalSize(v);
+ size := TotalSize(v)
if size < 0 {
return os.NewError("binary.Read: invalid type " + v.Type().String())
}
- d := &decoder{order: order, buf: make([]byte, size)};
+ d := &decoder{order: order, buf: make([]byte, size)}
if _, err := io.ReadFull(r, d.buf); err != nil {
return err
}
- d.value(v);
- return nil;
+ d.value(v)
+ return nil
}
// Write writes the binary representation of data into w.
@@ -151,48 +151,48 @@ func Read(r io.Reader, order ByteOrder, data interface{}) os.Error {
// w are encoded using the specified byte order and read
// from successive fields of the data.
func Write(w io.Writer, order ByteOrder, data interface{}) os.Error {
- v := reflect.Indirect(reflect.NewValue(data));
- size := TotalSize(v);
+ v := reflect.Indirect(reflect.NewValue(data))
+ size := TotalSize(v)
if size < 0 {
return os.NewError("binary.Write: invalid type " + v.Type().String())
}
- buf := make([]byte, size);
- e := &encoder{order: order, buf: buf};
- e.value(v);
- _, err := w.Write(buf);
- return err;
+ buf := make([]byte, size)
+ e := &encoder{order: order, buf: buf}
+ e.value(v)
+ _, err := w.Write(buf)
+ return err
}
func TotalSize(v reflect.Value) int {
if sv, ok := v.(*reflect.SliceValue); ok {
- elem := sizeof(v.Type().(*reflect.SliceType).Elem());
+ elem := sizeof(v.Type().(*reflect.SliceType).Elem())
if elem < 0 {
return -1
}
- return sv.Len() * elem;
+ return sv.Len() * elem
}
- return sizeof(v.Type());
+ return sizeof(v.Type())
}
func sizeof(v reflect.Type) int {
switch t := v.(type) {
case *reflect.ArrayType:
- n := sizeof(t.Elem());
+ n := sizeof(t.Elem())
if n < 0 {
return -1
}
- return t.Len() * n;
+ return t.Len() * n
case *reflect.StructType:
- sum := 0;
+ sum := 0
for i, n := 0, t.NumField(); i < n; i++ {
- s := sizeof(t.Field(i).Type);
+ s := sizeof(t.Field(i).Type)
if s < 0 {
return -1
}
- sum += s;
+ sum += s
}
- return sum;
+ return sum
case *reflect.Uint8Type:
return 1
@@ -215,94 +215,94 @@ func sizeof(v reflect.Type) int {
case *reflect.Float64Type:
return 8
}
- return -1;
+ return -1
}
type decoder struct {
- order ByteOrder;
- buf []byte;
+ order ByteOrder
+ buf []byte
}
type encoder struct {
- order ByteOrder;
- buf []byte;
+ order ByteOrder
+ buf []byte
}
func (d *decoder) uint8() uint8 {
- x := d.buf[0];
- d.buf = d.buf[1:];
- return x;
+ x := d.buf[0]
+ d.buf = d.buf[1:]
+ return x
}
func (e *encoder) uint8(x uint8) {
- e.buf[0] = x;
- e.buf = e.buf[1:];
+ e.buf[0] = x
+ e.buf = e.buf[1:]
}
func (d *decoder) uint16() uint16 {
- x := d.order.Uint16(d.buf[0:2]);
- d.buf = d.buf[2:];
- return x;
+ x := d.order.Uint16(d.buf[0:2])
+ d.buf = d.buf[2:]
+ return x
}
func (e *encoder) uint16(x uint16) {
- e.order.PutUint16(e.buf[0:2], x);
- e.buf = e.buf[2:];
+ e.order.PutUint16(e.buf[0:2], x)
+ e.buf = e.buf[2:]
}
func (d *decoder) uint32() uint32 {
- x := d.order.Uint32(d.buf[0:4]);
- d.buf = d.buf[4:];
- return x;
+ x := d.order.Uint32(d.buf[0:4])
+ d.buf = d.buf[4:]
+ return x
}
func (e *encoder) uint32(x uint32) {
- e.order.PutUint32(e.buf[0:4], x);
- e.buf = e.buf[4:];
+ e.order.PutUint32(e.buf[0:4], x)
+ e.buf = e.buf[4:]
}
func (d *decoder) uint64() uint64 {
- x := d.order.Uint64(d.buf[0:8]);
- d.buf = d.buf[8:];
- return x;
+ x := d.order.Uint64(d.buf[0:8])
+ d.buf = d.buf[8:]
+ return x
}
func (e *encoder) uint64(x uint64) {
- e.order.PutUint64(e.buf[0:8], x);
- e.buf = e.buf[8:];
+ e.order.PutUint64(e.buf[0:8], x)
+ e.buf = e.buf[8:]
}
-func (d *decoder) int8() int8 { return int8(d.uint8()) }
+func (d *decoder) int8() int8 { return int8(d.uint8()) }
-func (e *encoder) int8(x int8) { e.uint8(uint8(x)) }
+func (e *encoder) int8(x int8) { e.uint8(uint8(x)) }
-func (d *decoder) int16() int16 { return int16(d.uint16()) }
+func (d *decoder) int16() int16 { return int16(d.uint16()) }
-func (e *encoder) int16(x int16) { e.uint16(uint16(x)) }
+func (e *encoder) int16(x int16) { e.uint16(uint16(x)) }
-func (d *decoder) int32() int32 { return int32(d.uint32()) }
+func (d *decoder) int32() int32 { return int32(d.uint32()) }
-func (e *encoder) int32(x int32) { e.uint32(uint32(x)) }
+func (e *encoder) int32(x int32) { e.uint32(uint32(x)) }
-func (d *decoder) int64() int64 { return int64(d.uint64()) }
+func (d *decoder) int64() int64 { return int64(d.uint64()) }
-func (e *encoder) int64(x int64) { e.uint64(uint64(x)) }
+func (e *encoder) int64(x int64) { e.uint64(uint64(x)) }
func (d *decoder) value(v reflect.Value) {
switch v := v.(type) {
case *reflect.ArrayValue:
- l := v.Len();
+ l := v.Len()
for i := 0; i < l; i++ {
d.value(v.Elem(i))
}
case *reflect.StructValue:
- l := v.NumField();
+ l := v.NumField()
for i := 0; i < l; i++ {
d.value(v.Field(i))
}
case *reflect.SliceValue:
- l := v.Len();
+ l := v.Len()
for i := 0; i < l; i++ {
d.value(v.Elem(i))
}
@@ -333,17 +333,17 @@ func (d *decoder) value(v reflect.Value) {
func (e *encoder) value(v reflect.Value) {
switch v := v.(type) {
case *reflect.ArrayValue:
- l := v.Len();
+ l := v.Len()
for i := 0; i < l; i++ {
e.value(v.Elem(i))
}
case *reflect.StructValue:
- l := v.NumField();
+ l := v.NumField()
for i := 0; i < l; i++ {
e.value(v.Field(i))
}
case *reflect.SliceValue:
- l := v.Len();
+ l := v.Len()
for i := 0; i < l; i++ {
e.value(v.Elem(i))
}
diff --git a/src/pkg/encoding/binary/binary_test.go b/src/pkg/encoding/binary/binary_test.go
index 33e6b0bea..12d192d1e 100644
--- a/src/pkg/encoding/binary/binary_test.go
+++ b/src/pkg/encoding/binary/binary_test.go
@@ -5,24 +5,24 @@
package binary
import (
- "os";
- "bytes";
- "math";
- "reflect";
- "testing";
+ "os"
+ "bytes"
+ "math"
+ "reflect"
+ "testing"
)
type Struct struct {
- Int8 int8;
- Int16 int16;
- Int32 int32;
- Int64 int64;
- Uint8 uint8;
- Uint16 uint16;
- Uint32 uint32;
- Uint64 uint64;
- Float64 float64;
- Array [4]uint8;
+ Int8 int8
+ Int16 int16
+ Int32 int32
+ Int64 int64
+ Uint8 uint8
+ Uint16 uint16
+ Uint32 uint32
+ Uint64 uint64
+ Float64 float64
+ Array [4]uint8
}
var s = Struct{
@@ -69,8 +69,8 @@ var res = []int32{0x01020304, 0x05060708}
func checkResult(t *testing.T, dir string, order, err os.Error, have, want interface{}) {
if err != nil {
- t.Errorf("%v %v: %v", dir, order, err);
- return;
+ t.Errorf("%v %v: %v", dir, order, err)
+ return
}
if !reflect.DeepEqual(have, want) {
t.Errorf("%v %v:\n\thave %+v\n\twant %+v", dir, order, have, want)
@@ -78,37 +78,37 @@ func checkResult(t *testing.T, dir string, order, err os.Error, have, want inter
}
func testRead(t *testing.T, order ByteOrder, b []byte, s1 interface{}) {
- var s2 Struct;
- err := Read(bytes.NewBuffer(b), order, &s2);
- checkResult(t, "Read", order, err, s2, s1);
+ var s2 Struct
+ err := Read(bytes.NewBuffer(b), order, &s2)
+ checkResult(t, "Read", order, err, s2, s1)
}
func testWrite(t *testing.T, order ByteOrder, b []byte, s1 interface{}) {
- buf := new(bytes.Buffer);
- err := Write(buf, order, s1);
- checkResult(t, "Write", order, err, buf.Bytes(), b);
+ buf := new(bytes.Buffer)
+ err := Write(buf, order, s1)
+ checkResult(t, "Write", order, err, buf.Bytes(), b)
}
-func TestBigEndianRead(t *testing.T) { testRead(t, BigEndian, big, s) }
+func TestBigEndianRead(t *testing.T) { testRead(t, BigEndian, big, s) }
-func TestLittleEndianRead(t *testing.T) { testRead(t, LittleEndian, little, s) }
+func TestLittleEndianRead(t *testing.T) { testRead(t, LittleEndian, little, s) }
-func TestBigEndianWrite(t *testing.T) { testWrite(t, BigEndian, big, s) }
+func TestBigEndianWrite(t *testing.T) { testWrite(t, BigEndian, big, s) }
-func TestLittleEndianWrite(t *testing.T) { testWrite(t, LittleEndian, little, s) }
+func TestLittleEndianWrite(t *testing.T) { testWrite(t, LittleEndian, little, s) }
-func TestBigEndianPtrWrite(t *testing.T) { testWrite(t, BigEndian, big, &s) }
+func TestBigEndianPtrWrite(t *testing.T) { testWrite(t, BigEndian, big, &s) }
-func TestLittleEndianPtrWrite(t *testing.T) { testWrite(t, LittleEndian, little, &s) }
+func TestLittleEndianPtrWrite(t *testing.T) { testWrite(t, LittleEndian, little, &s) }
func TestReadSlice(t *testing.T) {
- slice := make([]int32, 2);
- err := Read(bytes.NewBuffer(src), BigEndian, slice);
- checkResult(t, "ReadSlice", BigEndian, err, slice, res);
+ slice := make([]int32, 2)
+ err := Read(bytes.NewBuffer(src), BigEndian, slice)
+ checkResult(t, "ReadSlice", BigEndian, err, slice, res)
}
func TestWriteSlice(t *testing.T) {
- buf := new(bytes.Buffer);
- err := Write(buf, BigEndian, res);
- checkResult(t, "WriteSlice", BigEndian, err, buf.Bytes(), src);
+ buf := new(bytes.Buffer)
+ err := Write(buf, BigEndian, res)
+ checkResult(t, "WriteSlice", BigEndian, err, buf.Bytes(), src)
}
diff --git a/src/pkg/encoding/git85/git.go b/src/pkg/encoding/git85/git.go
index 1e5299792..25a3deac0 100644
--- a/src/pkg/encoding/git85/git.go
+++ b/src/pkg/encoding/git85/git.go
@@ -7,10 +7,10 @@
package git85
import (
- "bytes";
- "io";
- "os";
- "strconv";
+ "bytes"
+ "io"
+ "os"
+ "strconv"
)
type CorruptInputError int64
@@ -49,9 +49,9 @@ var decode = [256]uint8{
// The encoding splits src into chunks of at most 52 bytes
// and encodes each chunk on its own line.
func Encode(dst, src []byte) int {
- ndst := 0;
+ ndst := 0
for len(src) > 0 {
- n := len(src);
+ n := len(src)
if n > 52 {
n = 52
}
@@ -60,23 +60,23 @@ func Encode(dst, src []byte) int {
} else {
dst[ndst] = byte('a' + n - 26 - 1)
}
- ndst++;
+ ndst++
for i := 0; i < n; i += 4 {
- var v uint32;
+ var v uint32
for j := 0; j < 4 && i+j < n; j++ {
v |= uint32(src[i+j]) << uint(24-j*8)
}
for j := 4; j >= 0; j-- {
- dst[ndst+j] = encode[v%85];
- v /= 85;
+ dst[ndst+j] = encode[v%85]
+ v /= 85
}
- ndst += 5;
+ ndst += 5
}
- dst[ndst] = '\n';
- ndst++;
- src = src[n:];
+ dst[ndst] = '\n'
+ ndst++
+ src = src[n:]
}
- return ndst;
+ return ndst
}
// EncodedLen returns the length of an encoding of n source bytes.
@@ -86,7 +86,7 @@ func EncodedLen(n int) int {
}
// 5 bytes per 4 bytes of input, rounded up.
// 2 extra bytes for each line of 52 src bytes, rounded up.
- return (n+3)/4*5 + (n+51)/52*2;
+ return (n+3)/4*5 + (n+51)/52*2
}
var newline = []byte{'\n'}
@@ -97,10 +97,10 @@ var newline = []byte{'\n'}
// If Decode encounters invalid input, it returns a CorruptInputError.
//
func Decode(dst, src []byte) (n int, err os.Error) {
- ndst := 0;
- nsrc := 0;
+ ndst := 0
+ nsrc := 0
for nsrc < len(src) {
- var l int;
+ var l int
switch ch := int(src[nsrc]); {
case 'A' <= ch && ch <= 'Z':
l = ch - 'A' + 1
@@ -112,24 +112,24 @@ func Decode(dst, src []byte) (n int, err os.Error) {
if nsrc+1+l > len(src) {
return ndst, CorruptInputError(nsrc)
}
- el := (l + 3) / 4 * 5; // encoded len
+ el := (l + 3) / 4 * 5 // encoded len
if nsrc+1+el+1 > len(src) || src[nsrc+1+el] != '\n' {
return ndst, CorruptInputError(nsrc)
}
- line := src[nsrc+1 : nsrc+1+el];
+ line := src[nsrc+1 : nsrc+1+el]
for i := 0; i < el; i += 5 {
- var v uint32;
+ var v uint32
for j := 0; j < 5; j++ {
- ch := decode[line[i+j]];
+ ch := decode[line[i+j]]
if ch == 0 {
return ndst, CorruptInputError(nsrc + 1 + i + j)
}
- v = v*85 + uint32(ch-1);
+ v = v*85 + uint32(ch-1)
}
for j := 0; j < 4; j++ {
- dst[ndst] = byte(v >> 24);
- v <<= 8;
- ndst++;
+ dst[ndst] = byte(v >> 24)
+ v <<= 8
+ ndst++
}
}
// Last fragment may have run too far (but there was room in dst).
@@ -137,27 +137,27 @@ func Decode(dst, src []byte) (n int, err os.Error) {
if l%4 != 0 {
ndst -= 4 - l%4
}
- nsrc += 1 + el + 1;
+ nsrc += 1 + el + 1
}
- return ndst, nil;
+ return ndst, nil
}
-func MaxDecodedLen(n int) int { return n / 5 * 4 }
+func MaxDecodedLen(n int) int { return n / 5 * 4 }
// NewEncoder returns a new Git base85 stream encoder. Data written to
// the returned writer will be encoded and then written to w.
// The Git encoding operates on 52-byte blocks; when finished
// writing, the caller must Close the returned encoder to flush any
// partially written blocks.
-func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
+func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
type encoder struct {
- w io.Writer;
- err os.Error;
- buf [52]byte;
- nbuf int;
- out [1024]byte;
- nout int;
+ w io.Writer
+ err os.Error
+ buf [52]byte
+ nbuf int
+ out [1024]byte
+ nout int
}
func (e *encoder) Write(p []byte) (n int, err os.Error) {
@@ -167,70 +167,70 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
// Leading fringe.
if e.nbuf > 0 {
- var i int;
+ var i int
for i = 0; i < len(p) && e.nbuf < 52; i++ {
- e.buf[e.nbuf] = p[i];
- e.nbuf++;
+ e.buf[e.nbuf] = p[i]
+ e.nbuf++
}
- n += i;
- p = p[i:];
+ n += i
+ p = p[i:]
if e.nbuf < 52 {
return
}
- nout := Encode(&e.out, &e.buf);
+ nout := Encode(&e.out, &e.buf)
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
- e.nbuf = 0;
+ e.nbuf = 0
}
// Large interior chunks.
for len(p) >= 52 {
- nn := len(e.out) / (1 + 52/4*5 + 1) * 52;
+ nn := len(e.out) / (1 + 52/4*5 + 1) * 52
if nn > len(p) {
nn = len(p) / 52 * 52
}
if nn > 0 {
- nout := Encode(&e.out, p[0:nn]);
+ nout := Encode(&e.out, p[0:nn])
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
}
- n += nn;
- p = p[nn:];
+ n += nn
+ p = p[nn:]
}
// Trailing fringe.
for i := 0; i < len(p); i++ {
e.buf[i] = p[i]
}
- e.nbuf = len(p);
- n += len(p);
- return;
+ e.nbuf = len(p)
+ n += len(p)
+ return
}
func (e *encoder) Close() os.Error {
// If there's anything left in the buffer, flush it out
if e.err == nil && e.nbuf > 0 {
- nout := Encode(&e.out, e.buf[0:e.nbuf]);
- e.nbuf = 0;
- _, e.err = e.w.Write(e.out[0:nout]);
+ nout := Encode(&e.out, e.buf[0:e.nbuf])
+ e.nbuf = 0
+ _, e.err = e.w.Write(e.out[0:nout])
}
- return e.err;
+ return e.err
}
// NewDecoder returns a new Git base85 stream decoder.
-func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
+func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
type decoder struct {
- r io.Reader;
- err os.Error;
- readErr os.Error;
- buf [1024]byte;
- nbuf int;
- out []byte;
- outbuf [1024]byte;
- off int64;
+ r io.Reader
+ err os.Error
+ readErr os.Error
+ buf [1024]byte
+ nbuf int
+ out []byte
+ outbuf [1024]byte
+ off int64
}
func (d *decoder) Read(p []byte) (n int, err os.Error) {
@@ -241,9 +241,9 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
for {
// Copy leftover output from last decode.
if len(d.out) > 0 {
- n = copy(p, d.out);
- d.out = d.out[n:];
- return;
+ n = copy(p, d.out)
+ d.out = d.out[n:]
+ return
}
// Out of decoded output. Check errors.
@@ -251,27 +251,27 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
return 0, d.err
}
if d.readErr != nil {
- d.err = d.readErr;
- return 0, d.err;
+ d.err = d.readErr
+ return 0, d.err
}
// Read and decode more input.
- var nn int;
- nn, d.readErr = d.r.Read(d.buf[d.nbuf:]);
- d.nbuf += nn;
+ var nn int
+ nn, d.readErr = d.r.Read(d.buf[d.nbuf:])
+ d.nbuf += nn
// Send complete lines to Decode.
- nl := bytes.LastIndex(d.buf[0:d.nbuf], newline);
+ nl := bytes.LastIndex(d.buf[0:d.nbuf], newline)
if nl < 0 {
continue
}
- nn, d.err = Decode(&d.outbuf, d.buf[0:nl+1]);
+ nn, d.err = Decode(&d.outbuf, d.buf[0:nl+1])
if e, ok := d.err.(CorruptInputError); ok {
d.err = CorruptInputError(int64(e) + d.off)
}
- d.out = d.outbuf[0:nn];
- d.nbuf = copy(&d.buf, d.buf[nl+1:d.nbuf]);
- d.off += int64(nl + 1);
+ d.out = d.outbuf[0:nn]
+ d.nbuf = copy(&d.buf, d.buf[nl+1:d.nbuf])
+ d.off += int64(nl + 1)
}
- panic("unreacahable");
+ panic("unreacahable")
}
diff --git a/src/pkg/encoding/git85/git_test.go b/src/pkg/encoding/git85/git_test.go
index 564b4915b..4a42282fe 100644
--- a/src/pkg/encoding/git85/git_test.go
+++ b/src/pkg/encoding/git85/git_test.go
@@ -5,36 +5,36 @@
package git85
import (
- "bytes";
- "io/ioutil";
- "os";
- "reflect";
- "strings";
- "testing";
+ "bytes"
+ "io/ioutil"
+ "os"
+ "reflect"
+ "strings"
+ "testing"
)
type testpair struct {
- decoded, encoded string;
+ decoded, encoded string
}
func testEqual(t *testing.T, msg string, args ...) bool {
- v := reflect.NewValue(args).(*reflect.StructValue);
- v1 := v.Field(v.NumField() - 2);
- v2 := v.Field(v.NumField() - 1);
+ v := reflect.NewValue(args).(*reflect.StructValue)
+ v1 := v.Field(v.NumField() - 2)
+ v2 := v.Field(v.NumField() - 1)
if v1.Interface() != v2.Interface() {
- t.Errorf(msg, args);
- return false;
+ t.Errorf(msg, args)
+ return false
}
- return true;
+ return true
}
func TestGitTable(t *testing.T) {
- var saw [256]bool;
+ var saw [256]bool
for i, c := range encode {
if decode[c] != uint8(i+1) {
t.Errorf("decode['%c'] = %d, want %d", c, decode[c], i+1)
}
- saw[c] = true;
+ saw[c] = true
}
for i, b := range saw {
if !b && decode[i] != 0 {
@@ -64,65 +64,65 @@ var gitBigtest = gitPairs[len(gitPairs)-1]
func TestEncode(t *testing.T) {
for _, p := range gitPairs {
- buf := make([]byte, EncodedLen(len(p.decoded)));
- n := Encode(buf, strings.Bytes(p.decoded));
+ buf := make([]byte, EncodedLen(len(p.decoded)))
+ n := Encode(buf, strings.Bytes(p.decoded))
if n != len(buf) {
t.Errorf("EncodedLen does not agree with Encode")
}
- buf = buf[0:n];
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded);
+ buf = buf[0:n]
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded)
}
}
func TestEncoder(t *testing.T) {
for _, p := range gitPairs {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
- encoder.Write(strings.Bytes(p.decoded));
- encoder.Close();
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
+ encoder.Write(strings.Bytes(p.decoded))
+ encoder.Close()
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded)
}
}
func TestEncoderBuffering(t *testing.T) {
- input := strings.Bytes(gitBigtest.decoded);
+ input := strings.Bytes(gitBigtest.decoded)
for bs := 1; bs <= 12; bs++ {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
for pos := 0; pos < len(input); pos += bs {
- end := pos + bs;
+ end := pos + bs
if end > len(input) {
end = len(input)
}
- n, err := encoder.Write(input[pos:end]);
- testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil));
- testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos);
+ n, err := encoder.Write(input[pos:end])
+ testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil))
+ testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos)
}
- err := encoder.Close();
- testEqual(t, "Close gave error %v, want %v", err, os.Error(nil));
- testEqual(t, "Encoding/%d of %q = %q, want %q", bs, gitBigtest.decoded, bb.String(), gitBigtest.encoded);
+ err := encoder.Close()
+ testEqual(t, "Close gave error %v, want %v", err, os.Error(nil))
+ testEqual(t, "Encoding/%d of %q = %q, want %q", bs, gitBigtest.decoded, bb.String(), gitBigtest.encoded)
}
}
func TestDecode(t *testing.T) {
for _, p := range gitPairs {
- dbuf := make([]byte, 4*len(p.encoded));
- ndst, err := Decode(dbuf, strings.Bytes(p.encoded));
- testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil));
- testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded));
- testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded);
+ dbuf := make([]byte, 4*len(p.encoded))
+ ndst, err := Decode(dbuf, strings.Bytes(p.encoded))
+ testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil))
+ testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded))
+ testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded)
}
}
func TestDecoder(t *testing.T) {
for _, p := range gitPairs {
- decoder := NewDecoder(bytes.NewBufferString(p.encoded));
- dbuf, err := ioutil.ReadAll(decoder);
+ decoder := NewDecoder(bytes.NewBufferString(p.encoded))
+ dbuf, err := ioutil.ReadAll(decoder)
if err != nil {
t.Fatal("Read failed", err)
}
- testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded));
- testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded);
+ testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded))
+ testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded)
if err != nil {
testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF)
}
@@ -131,31 +131,31 @@ func TestDecoder(t *testing.T) {
func TestDecoderBuffering(t *testing.T) {
for bs := 1; bs <= 12; bs++ {
- decoder := NewDecoder(bytes.NewBufferString(gitBigtest.encoded));
- buf := make([]byte, len(gitBigtest.decoded)+12);
- var total int;
+ decoder := NewDecoder(bytes.NewBufferString(gitBigtest.encoded))
+ buf := make([]byte, len(gitBigtest.decoded)+12)
+ var total int
for total = 0; total < len(gitBigtest.decoded); {
- n, err := decoder.Read(buf[total : total+bs]);
- testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", gitBigtest.encoded, total, n, err, os.Error(nil));
- total += n;
+ n, err := decoder.Read(buf[total : total+bs])
+ testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", gitBigtest.encoded, total, n, err, os.Error(nil))
+ total += n
}
- testEqual(t, "Decoding/%d of %q = %q, want %q", bs, gitBigtest.encoded, string(buf[0:total]), gitBigtest.decoded);
+ testEqual(t, "Decoding/%d of %q = %q, want %q", bs, gitBigtest.encoded, string(buf[0:total]), gitBigtest.decoded)
}
}
func TestDecodeCorrupt(t *testing.T) {
type corrupt struct {
- e string;
- p int;
+ e string
+ p int
}
examples := []corrupt{
corrupt{"v", 0},
corrupt{"!z!!!!!!!!!", 0},
- };
+ }
for _, e := range examples {
- dbuf := make([]byte, 2*len(e.e));
- _, err := Decode(dbuf, strings.Bytes(e.e));
+ dbuf := make([]byte, 2*len(e.e))
+ _, err := Decode(dbuf, strings.Bytes(e.e))
switch err := err.(type) {
case CorruptInputError:
testEqual(t, "Corruption in %q at offset %v, want %v", e.e, int(err), e.p)
@@ -166,34 +166,34 @@ func TestDecodeCorrupt(t *testing.T) {
}
func TestGitBig(t *testing.T) {
- n := 3*1000 + 1;
- raw := make([]byte, n);
- const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ n := 3*1000 + 1
+ raw := make([]byte, n)
+ const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < n; i++ {
raw[i] = alpha[i%len(alpha)]
}
- encoded := new(bytes.Buffer);
- w := NewEncoder(encoded);
- nn, err := w.Write(raw);
+ encoded := new(bytes.Buffer)
+ w := NewEncoder(encoded)
+ nn, err := w.Write(raw)
if nn != n || err != nil {
t.Fatalf("Encoder.Write(raw) = %d, %v want %d, nil", nn, err, n)
}
- err = w.Close();
+ err = w.Close()
if err != nil {
t.Fatalf("Encoder.Close() = %v want nil", err)
}
- decoded, err := ioutil.ReadAll(NewDecoder(encoded));
+ decoded, err := ioutil.ReadAll(NewDecoder(encoded))
if err != nil {
t.Fatalf("ioutil.ReadAll(NewDecoder(...)): %v", err)
}
if !bytes.Equal(raw, decoded) {
- var i int;
+ var i int
for i = 0; i < len(decoded) && i < len(raw); i++ {
if decoded[i] != raw[i] {
break
}
}
- t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i);
+ t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i)
}
}
diff --git a/src/pkg/encoding/hex/hex.go b/src/pkg/encoding/hex/hex.go
index 17c4ae842..8a9271c23 100644
--- a/src/pkg/encoding/hex/hex.go
+++ b/src/pkg/encoding/hex/hex.go
@@ -6,15 +6,15 @@
package hex
import (
- "os";
- "strconv";
- "strings";
+ "os"
+ "strconv"
+ "strings"
)
const hextable = "0123456789abcdef"
// EncodedLen returns the length of an encoding of n source bytes.
-func EncodedLen(n int) int { return n * 2 }
+func EncodedLen(n int) int { return n * 2 }
// Encode encodes src into EncodedLen(len(src))
// bytes of dst. As a convenience, it returns the number
@@ -22,17 +22,17 @@ func EncodedLen(n int) int { return n * 2 }
// Encode implements hexadecimal encoding.
func Encode(dst, src []byte) int {
for i, v := range src {
- dst[i*2] = hextable[v>>4];
- dst[i*2+1] = hextable[v&0x0f];
+ dst[i*2] = hextable[v>>4]
+ dst[i*2+1] = hextable[v&0x0f]
}
- return len(src) * 2;
+ return len(src) * 2
}
// OddLengthInputError results from decoding an odd length slice.
type OddLengthInputError struct{}
-func (OddLengthInputError) String() string { return "odd length hex string" }
+func (OddLengthInputError) String() string { return "odd length hex string" }
// InvalidHexCharError results from finding an invalid character in a hex string.
type InvalidHexCharError byte
@@ -42,7 +42,7 @@ func (e InvalidHexCharError) String() string {
}
-func DecodedLen(x int) int { return x / 2 }
+func DecodedLen(x int) int { return x / 2 }
// Decode decodes src into DecodedLen(len(src)) bytes, returning the actual
// number of bytes written to dst.
@@ -55,18 +55,18 @@ func Decode(dst, src []byte) (int, os.Error) {
}
for i := 0; i < len(src)/2; i++ {
- a, ok := fromHexChar(src[i*2]);
+ a, ok := fromHexChar(src[i*2])
if !ok {
return 0, InvalidHexCharError(src[i*2])
}
- b, ok := fromHexChar(src[i*2+1]);
+ b, ok := fromHexChar(src[i*2+1])
if !ok {
return 0, InvalidHexCharError(src[i*2+1])
}
- dst[i] = (a << 4) | b;
+ dst[i] = (a << 4) | b
}
- return len(src) / 2, nil;
+ return len(src) / 2, nil
}
// fromHexChar converts a hex character into its value and a success flag.
@@ -80,23 +80,23 @@ func fromHexChar(c byte) (byte, bool) {
return c - 'A' + 10, true
}
- return 0, false;
+ return 0, false
}
// EncodeToString returns the hexadecimal encoding of src.
func EncodeToString(src []byte) string {
- dst := make([]byte, EncodedLen(len(src)));
- Encode(dst, src);
- return string(dst);
+ dst := make([]byte, EncodedLen(len(src)))
+ Encode(dst, src)
+ return string(dst)
}
// DecodeString returns the bytes represented by the hexadecimal string s.
func DecodeString(s string) ([]byte, os.Error) {
- src := strings.Bytes(s);
- dst := make([]byte, DecodedLen(len(src)));
- _, err := Decode(dst, src);
+ src := strings.Bytes(s)
+ dst := make([]byte, DecodedLen(len(src)))
+ _, err := Decode(dst, src)
if err != nil {
return nil, err
}
- return dst, nil;
+ return dst, nil
}
diff --git a/src/pkg/encoding/hex/hex_test.go b/src/pkg/encoding/hex/hex_test.go
index e409dbd1e..d741e595a 100644
--- a/src/pkg/encoding/hex/hex_test.go
+++ b/src/pkg/encoding/hex/hex_test.go
@@ -5,12 +5,12 @@
package hex
import (
- "bytes";
- "testing";
+ "bytes"
+ "testing"
)
type encodeTest struct {
- in, out []byte;
+ in, out []byte
}
var encodeTests = []encodeTest{
@@ -38,8 +38,8 @@ var encodeTests = []encodeTest{
func TestEncode(t *testing.T) {
for i, test := range encodeTests {
- dst := make([]byte, EncodedLen(len(test.in)));
- n := Encode(dst, test.in);
+ dst := make([]byte, EncodedLen(len(test.in)))
+ n := Encode(dst, test.in)
if n != len(dst) {
t.Errorf("#%d: bad return value: got: %d want: %d", i, n, len(dst))
}
@@ -50,8 +50,8 @@ func TestEncode(t *testing.T) {
}
type decodeTest struct {
- in, out []byte;
- ok bool;
+ in, out []byte
+ ok bool
}
var decodeTests = []decodeTest{
@@ -84,8 +84,8 @@ var decodeTests = []decodeTest{
func TestDecode(t *testing.T) {
for i, test := range decodeTests {
- dst := make([]byte, DecodedLen(len(test.in)));
- n, err := Decode(dst, test.in);
+ dst := make([]byte, DecodedLen(len(test.in)))
+ n, err := Decode(dst, test.in)
if err == nil && n != len(dst) {
t.Errorf("#%d: bad return value: got:%d want:%d", i, n, len(dst))
}
@@ -99,8 +99,8 @@ func TestDecode(t *testing.T) {
}
type encodeStringTest struct {
- in []byte;
- out string;
+ in []byte
+ out string
}
var encodeStringTests = []encodeStringTest{
@@ -112,7 +112,7 @@ var encodeStringTests = []encodeStringTest{
func TestEncodeToString(t *testing.T) {
for i, test := range encodeStringTests {
- s := EncodeToString(test.in);
+ s := EncodeToString(test.in)
if s != test.out {
t.Errorf("#%d got:%s want:%s", i, s, test.out)
}
@@ -120,9 +120,9 @@ func TestEncodeToString(t *testing.T) {
}
type decodeStringTest struct {
- in string;
- out []byte;
- ok bool;
+ in string
+ out []byte
+ ok bool
}
var decodeStringTests = []decodeStringTest{
@@ -136,7 +136,7 @@ var decodeStringTests = []decodeStringTest{
func TestDecodeString(t *testing.T) {
for i, test := range decodeStringTests {
- dst, err := DecodeString(test.in);
+ dst, err := DecodeString(test.in)
if test.ok != (err == nil) {
t.Errorf("#%d: unexpected err value: %s", i, err)
}
diff --git a/src/pkg/encoding/pem/pem.go b/src/pkg/encoding/pem/pem.go
index 7828d87c1..168a47168 100644
--- a/src/pkg/encoding/pem/pem.go
+++ b/src/pkg/encoding/pem/pem.go
@@ -8,9 +8,9 @@
package pem
import (
- "bytes";
- "encoding/base64";
- "strings";
+ "bytes"
+ "encoding/base64"
+ "strings"
)
// A Block represents a PEM encoded structure.
@@ -22,9 +22,9 @@ import (
// -----END Type-----
// where Headers is a possibly empty sequence of Key: Value lines.
type Block struct {
- Type string; // The type, taken from the preamble (i.e. "RSA PRIVATE KEY").
- Headers map[string]string; // Optional headers.
- Bytes []byte; // The decoded bytes of the contents. Typically a DER encoded ASN.1 structure.
+ Type string // The type, taken from the preamble (i.e. "RSA PRIVATE KEY").
+ Headers map[string]string // Optional headers.
+ Bytes []byte // The decoded bytes of the contents. Typically a DER encoded ASN.1 structure.
}
// getLine results the first \r\n or \n delineated line from the given byte
@@ -32,35 +32,35 @@ type Block struct {
// array (also not including the new line bytes) is also returned and this will
// always be smaller than the original argument.
func getLine(data []byte) (line, rest []byte) {
- i := bytes.Index(data, []byte{'\n'});
- var j int;
+ i := bytes.Index(data, []byte{'\n'})
+ var j int
if i < 0 {
- i = len(data);
- j = i;
+ i = len(data)
+ j = i
} else {
- j = i + 1;
+ j = i + 1
if i > 0 && data[i-1] == '\r' {
i--
}
}
- return data[0:i], data[j:];
+ return data[0:i], data[j:]
}
// removeWhitespace returns a copy of its input with all spaces, tab and
// newline characters removed.
func removeWhitespace(data []byte) []byte {
- result := make([]byte, len(data));
- n := 0;
+ result := make([]byte, len(data))
+ n := 0
for _, b := range data {
if b == ' ' || b == '\t' || b == '\r' || b == '\n' {
continue
}
- result[n] = b;
- n++;
+ result[n] = b
+ n++
}
- return result[0:n];
+ return result[0:n]
}
var pemStart = strings.Bytes("\n-----BEGIN ")
@@ -74,7 +74,7 @@ var pemEndOfLine = strings.Bytes("-----")
func Decode(data []byte) (p *Block, rest []byte) {
// pemStart begins with a newline. However, at the very beginning of
// the byte array, we'll accept the start string without it.
- rest = data;
+ rest = data
if bytes.HasPrefix(data, pemStart[1:]) {
rest = rest[len(pemStart)-1 : len(data)]
} else if i := bytes.Index(data, pemStart); i >= 0 {
@@ -83,16 +83,16 @@ func Decode(data []byte) (p *Block, rest []byte) {
return nil, data
}
- typeLine, rest := getLine(rest);
+ typeLine, rest := getLine(rest)
if !bytes.HasSuffix(typeLine, pemEndOfLine) {
goto Error
}
- typeLine = typeLine[0 : len(typeLine)-len(pemEndOfLine)];
+ typeLine = typeLine[0 : len(typeLine)-len(pemEndOfLine)]
p = &Block{
Headers: make(map[string]string),
Type: string(typeLine),
- };
+ }
for {
// This loop terminates because getLine's second result is
@@ -100,37 +100,37 @@ func Decode(data []byte) (p *Block, rest []byte) {
if len(rest) == 0 {
return nil, data
}
- line, next := getLine(rest);
+ line, next := getLine(rest)
- i := bytes.Index(line, []byte{':'});
+ i := bytes.Index(line, []byte{':'})
if i == -1 {
break
}
// TODO(agl): need to cope with values that spread across lines.
- key, val := line[0:i], line[i+1:];
- key = bytes.TrimSpace(key);
- val = bytes.TrimSpace(val);
- p.Headers[string(key)] = string(val);
- rest = next;
+ key, val := line[0:i], line[i+1:]
+ key = bytes.TrimSpace(key)
+ val = bytes.TrimSpace(val)
+ p.Headers[string(key)] = string(val)
+ rest = next
}
- i := bytes.Index(rest, pemEnd);
+ i := bytes.Index(rest, pemEnd)
if i < 0 {
goto Error
}
- base64Data := removeWhitespace(rest[0:i]);
+ base64Data := removeWhitespace(rest[0:i])
- p.Bytes = make([]byte, base64.StdEncoding.DecodedLen(len(base64Data)));
- n, err := base64.StdEncoding.Decode(p.Bytes, base64Data);
+ p.Bytes = make([]byte, base64.StdEncoding.DecodedLen(len(base64Data)))
+ n, err := base64.StdEncoding.Decode(p.Bytes, base64Data)
if err != nil {
goto Error
}
- p.Bytes = p.Bytes[0:n];
+ p.Bytes = p.Bytes[0:n]
- _, rest = getLine(rest[i+len(pemEnd):]);
+ _, rest = getLine(rest[i+len(pemEnd):])
- return;
+ return
Error:
// If we get here then we have rejected a likely looking, but
@@ -153,9 +153,9 @@ Error:
//
// we've failed to parse using the first BEGIN line
// and now will try again, using the second BEGIN line.
- p, rest = Decode(rest);
+ p, rest = Decode(rest)
if p == nil {
rest = data
}
- return;
+ return
}
diff --git a/src/pkg/encoding/pem/pem_test.go b/src/pkg/encoding/pem/pem_test.go
index 262dadd37..47b96e97f 100644
--- a/src/pkg/encoding/pem/pem_test.go
+++ b/src/pkg/encoding/pem/pem_test.go
@@ -5,13 +5,13 @@
package pem
import (
- "testing";
- "strings";
- "reflect";
+ "testing"
+ "strings"
+ "reflect"
)
type GetLineTest struct {
- in, out1, out2 string;
+ in, out1, out2 string
}
var getLineTests = []GetLineTest{
@@ -27,7 +27,7 @@ var getLineTests = []GetLineTest{
func TestGetLine(t *testing.T) {
for i, test := range getLineTests {
- x, y := getLine(strings.Bytes(test.in));
+ x, y := getLine(strings.Bytes(test.in))
if string(x) != test.out1 || string(y) != test.out2 {
t.Errorf("#%d got:%+v,%+v want:%s,%s", i, x, y, test.out1, test.out2)
}
@@ -35,15 +35,15 @@ func TestGetLine(t *testing.T) {
}
func TestDecode(t *testing.T) {
- result, remainder := Decode(strings.Bytes(pemData));
+ result, remainder := Decode(strings.Bytes(pemData))
if !reflect.DeepEqual(result, certificate) {
t.Errorf("#0 got:%#v want:%#v", result, certificate)
}
- result, remainder = Decode(remainder);
+ result, remainder = Decode(remainder)
if !reflect.DeepEqual(result, privateKey) {
t.Errorf("#1 got:%#v want:%#v", result, privateKey)
}
- result, _ = Decode(strings.Bytes(pemPrivateKey));
+ result, _ = Decode(strings.Bytes(pemPrivateKey))
if !reflect.DeepEqual(result, privateKey2) {
t.Errorf("#2 got:%#v want:%#v", result, privateKey2)
}
diff --git a/src/pkg/exec/exec.go b/src/pkg/exec/exec.go
index 8a19f0e8f..8e959e03a 100644
--- a/src/pkg/exec/exec.go
+++ b/src/pkg/exec/exec.go
@@ -6,16 +6,16 @@
package exec
import (
- "os";
- "strings";
+ "os"
+ "strings"
)
// Arguments to Run.
const (
- DevNull = iota;
- PassThrough;
- Pipe;
- MergeWithStdout;
+ DevNull = iota
+ PassThrough
+ Pipe
+ MergeWithStdout
)
// A Cmd represents a running command.
@@ -24,10 +24,10 @@ const (
// or else nil, depending on the arguments to Run.
// Pid is the running command's operating system process ID.
type Cmd struct {
- Stdin *os.File;
- Stdout *os.File;
- Stderr *os.File;
- Pid int;
+ Stdin *os.File
+ Stdout *os.File
+ Stderr *os.File
+ Pid int
}
// Given mode (DevNull, etc), return file for child
@@ -35,12 +35,12 @@ type Cmd struct {
func modeToFiles(mode, fd int) (*os.File, *os.File, os.Error) {
switch mode {
case DevNull:
- rw := os.O_WRONLY;
+ rw := os.O_WRONLY
if fd == 0 {
rw = os.O_RDONLY
}
- f, err := os.Open("/dev/null", rw, 0);
- return f, nil, err;
+ f, err := os.Open("/dev/null", rw, 0)
+ return f, nil, err
case PassThrough:
switch fd {
case 0:
@@ -51,16 +51,16 @@ func modeToFiles(mode, fd int) (*os.File, *os.File, os.Error) {
return os.Stderr, nil, nil
}
case Pipe:
- r, w, err := os.Pipe();
+ r, w, err := os.Pipe()
if err != nil {
return nil, nil, err
}
if fd == 0 {
return r, w, nil
}
- return w, r, nil;
+ return w, r, nil
}
- return nil, nil, os.EINVAL;
+ return nil, nil, os.EINVAL
}
// Run starts the binary prog running with
@@ -79,8 +79,8 @@ func modeToFiles(mode, fd int) (*os.File, *os.File, os.Error) {
// of the returned Cmd is the other end of the pipe.
// Otherwise the field in Cmd is nil.
func Run(argv0 string, argv, envv []string, stdin, stdout, stderr int) (p *Cmd, err os.Error) {
- p = new(Cmd);
- var fd [3]*os.File;
+ p = new(Cmd)
+ var fd [3]*os.File
if fd[0], p.Stdin, err = modeToFiles(stdin, 0); err != nil {
goto Error
@@ -95,7 +95,7 @@ func Run(argv0 string, argv, envv []string, stdin, stdout, stderr int) (p *Cmd,
}
// Run command.
- p.Pid, err = os.ForkExec(argv0, argv, envv, "", &fd);
+ p.Pid, err = os.ForkExec(argv0, argv, envv, "", &fd)
if err != nil {
goto Error
}
@@ -108,7 +108,7 @@ func Run(argv0 string, argv, envv []string, stdin, stdout, stderr int) (p *Cmd,
if fd[2] != os.Stderr && fd[2] != fd[1] {
fd[2].Close()
}
- return p, nil;
+ return p, nil
Error:
if fd[0] != os.Stdin && fd[0] != nil {
@@ -129,7 +129,7 @@ Error:
if p.Stderr != nil {
p.Stderr.Close()
}
- return nil, err;
+ return nil, err
}
// Wait waits for the running command p,
@@ -142,11 +142,11 @@ func (p *Cmd) Wait(options int) (*os.Waitmsg, os.Error) {
if p.Pid <= 0 {
return nil, os.ErrorString("exec: invalid use of Cmd.Wait")
}
- w, err := os.Wait(p.Pid, options);
+ w, err := os.Wait(p.Pid, options)
if w != nil && (w.Exited() || w.Signaled()) {
p.Pid = -1
}
- return w, err;
+ return w, err
}
// Close waits for the running command p to exit,
@@ -157,14 +157,14 @@ func (p *Cmd) Close() os.Error {
// Loop on interrupt, but
// ignore other errors -- maybe
// caller has already waited for pid.
- _, err := p.Wait(0);
+ _, err := p.Wait(0)
for err == os.EINTR {
_, err = p.Wait(0)
}
}
// Close the FDs that are still open.
- var err os.Error;
+ var err os.Error
if p.Stdin != nil && p.Stdin.Fd() >= 0 {
if err1 := p.Stdin.Close(); err1 != nil {
err = err1
@@ -180,15 +180,15 @@ func (p *Cmd) Close() os.Error {
err = err1
}
}
- return err;
+ return err
}
func canExec(file string) bool {
- d, err := os.Stat(file);
+ d, err := os.Stat(file)
if err != nil {
return false
}
- return d.IsRegular() && d.Permission()&0111 != 0;
+ return d.IsRegular() && d.Permission()&0111 != 0
}
// LookPath searches for an executable binary named file
@@ -205,9 +205,9 @@ func LookPath(file string) (string, os.Error) {
if canExec(file) {
return file, nil
}
- return "", os.ENOENT;
+ return "", os.ENOENT
}
- pathenv := os.Getenv("PATH");
+ pathenv := os.Getenv("PATH")
for _, dir := range strings.Split(pathenv, ":", 0) {
if dir == "" {
// Unix shell semantics: path element "" means "."
@@ -217,5 +217,5 @@ func LookPath(file string) (string, os.Error) {
return dir + "/" + file, nil
}
}
- return "", os.ENOENT;
+ return "", os.ENOENT
}
diff --git a/src/pkg/exec/exec_test.go b/src/pkg/exec/exec_test.go
index 5a997fd19..9c4d2ee31 100644
--- a/src/pkg/exec/exec_test.go
+++ b/src/pkg/exec/exec_test.go
@@ -5,20 +5,20 @@
package exec
import (
- "io";
- "io/ioutil";
- "testing";
+ "io"
+ "io/ioutil"
+ "testing"
)
func TestRunCat(t *testing.T) {
cmd, err := Run("/bin/cat", []string{"cat"}, nil,
- Pipe, Pipe, DevNull);
+ Pipe, Pipe, DevNull)
if err != nil {
t.Fatalf("opencmd /bin/cat: %v", err)
}
- io.WriteString(cmd.Stdin, "hello, world\n");
- cmd.Stdin.Close();
- buf, err := ioutil.ReadAll(cmd.Stdout);
+ io.WriteString(cmd.Stdin, "hello, world\n")
+ cmd.Stdin.Close()
+ buf, err := ioutil.ReadAll(cmd.Stdout)
if err != nil {
t.Fatalf("reading from /bin/cat: %v", err)
}
@@ -32,11 +32,11 @@ func TestRunCat(t *testing.T) {
func TestRunEcho(t *testing.T) {
cmd, err := Run("/bin/echo", []string{"echo", "hello", "world"}, nil,
- DevNull, Pipe, DevNull);
+ DevNull, Pipe, DevNull)
if err != nil {
t.Fatalf("opencmd /bin/echo: %v", err)
}
- buf, err := ioutil.ReadAll(cmd.Stdout);
+ buf, err := ioutil.ReadAll(cmd.Stdout)
if err != nil {
t.Fatalf("reading from /bin/echo: %v", err)
}
diff --git a/src/pkg/exp/4s/4s.go b/src/pkg/exp/4s/4s.go
index ffd9d5370..271af78e2 100644
--- a/src/pkg/exp/4s/4s.go
+++ b/src/pkg/exp/4s/4s.go
@@ -10,11 +10,11 @@
package main
import (
- "exp/nacl/av";
- "exp/nacl/srpc";
- "log";
- "runtime";
- "os";
+ "exp/nacl/av"
+ "exp/nacl/srpc"
+ "log"
+ "runtime"
+ "os"
)
var sndc chan []uint16
@@ -22,57 +22,57 @@ var sndc chan []uint16
func main() {
// Native Client requires that some calls are issued
// consistently by the same OS thread.
- runtime.LockOSThread();
+ runtime.LockOSThread()
if srpc.Enabled() {
go srpc.ServeRuntime()
}
- args := os.Args;
- p := pieces4;
+ args := os.Args
+ p := pieces4
if len(args) > 1 && args[1] == "-5" {
p = pieces5
}
- dx, dy := 500, 500;
- w, err := av.Init(av.SubsystemVideo|av.SubsystemAudio, dx, dy);
+ dx, dy := 500, 500
+ w, err := av.Init(av.SubsystemVideo|av.SubsystemAudio, dx, dy)
if err != nil {
log.Exit(err)
}
- sndc = make(chan []uint16, 10);
- go audioServer();
- Play(p, w);
+ sndc = make(chan []uint16, 10)
+ go audioServer()
+ Play(p, w)
}
func audioServer() {
// Native Client requires that all audio calls
// original from a single OS thread.
- runtime.LockOSThread();
+ runtime.LockOSThread()
- n, err := av.AudioStream(nil);
+ n, err := av.AudioStream(nil)
if err != nil {
log.Exit(err)
}
for {
- b := <-sndc;
+ b := <-sndc
for len(b)*2 >= n {
- var a []uint16;
- a, b = b[0:n/2], b[n/2:];
- n, err = av.AudioStream(a);
+ var a []uint16
+ a, b = b[0:n/2], b[n/2:]
+ n, err = av.AudioStream(a)
if err != nil {
log.Exit(err)
}
- println(n, len(b)*2);
+ println(n, len(b)*2)
}
- a := make([]uint16, n/2);
+ a := make([]uint16, n/2)
for i := range b {
a[i] = b[i]
}
- n, err = av.AudioStream(a);
+ n, err = av.AudioStream(a)
}
}
-func PlaySound(b []uint16) { sndc <- b }
+func PlaySound(b []uint16) { sndc <- b }
var whoosh = []uint16{
// Insert your favorite sound samples here.
diff --git a/src/pkg/exp/4s/5s.go b/src/pkg/exp/4s/5s.go
index 08899193e..efeb6f116 100644
--- a/src/pkg/exp/4s/5s.go
+++ b/src/pkg/exp/4s/5s.go
@@ -6,4 +6,4 @@
package main
-func init() { pieces4 = pieces5 }
+func init() { pieces4 = pieces5 }
diff --git a/src/pkg/exp/4s/xs.go b/src/pkg/exp/4s/xs.go
index ae994d2c3..94a6f8597 100644
--- a/src/pkg/exp/4s/xs.go
+++ b/src/pkg/exp/4s/xs.go
@@ -15,12 +15,12 @@
package main
import (
- "exp/draw";
- "image";
- "log";
- "os";
- "rand";
- "time";
+ "exp/draw"
+ "image"
+ "log"
+ "os"
+ "rand"
+ "time"
)
/*
@@ -38,57 +38,57 @@ Cursor whitearrow = {
*/
const (
- CNone = 0;
- CBounds = 1;
- CPiece = 2;
- NX = 10;
- NY = 20;
+ CNone = 0
+ CBounds = 1
+ CPiece = 2
+ NX = 10
+ NY = 20
- NCOL = 10;
+ NCOL = 10
- MAXN = 5;
+ MAXN = 5
)
var (
- N int;
- display draw.Context;
- screen draw.Image;
- screenr draw.Rectangle;
- board [NY][NX]byte;
- rboard draw.Rectangle;
- pscore draw.Point;
- scoresz draw.Point;
- pcsz = 32;
- pos draw.Point;
- bbr, bb2r draw.Rectangle;
- bb, bbmask, bb2, bb2mask *image.RGBA;
- whitemask image.Image;
- br, br2 draw.Rectangle;
- points int;
- dt int;
- DY int;
- DMOUSE int;
- lastmx int;
- mouse draw.Mouse;
- newscreen bool;
- timerc <-chan int64;
- suspc chan bool;
- mousec chan draw.Mouse;
- resizec <-chan bool;
- kbdc chan int;
- suspended bool;
- tsleep int;
- piece *Piece;
- pieces []Piece;
+ N int
+ display draw.Context
+ screen draw.Image
+ screenr draw.Rectangle
+ board [NY][NX]byte
+ rboard draw.Rectangle
+ pscore draw.Point
+ scoresz draw.Point
+ pcsz = 32
+ pos draw.Point
+ bbr, bb2r draw.Rectangle
+ bb, bbmask, bb2, bb2mask *image.RGBA
+ whitemask image.Image
+ br, br2 draw.Rectangle
+ points int
+ dt int
+ DY int
+ DMOUSE int
+ lastmx int
+ mouse draw.Mouse
+ newscreen bool
+ timerc <-chan int64
+ suspc chan bool
+ mousec chan draw.Mouse
+ resizec <-chan bool
+ kbdc chan int
+ suspended bool
+ tsleep int
+ piece *Piece
+ pieces []Piece
)
type Piece struct {
- rot int;
- tx int;
- sz draw.Point;
- d []draw.Point;
- left *Piece;
- right *Piece;
+ rot int
+ tx int
+ sz draw.Point
+ d []draw.Point
+ left *Piece
+ right *Piece
}
var txbits = [NCOL][32]byte{
@@ -145,16 +145,16 @@ var txbits = [NCOL][32]byte{
}
var txpix = [NCOL]draw.Color{
- draw.Yellow, /* yellow */
- draw.Cyan, /* cyan */
- draw.Green, /* lime green */
- draw.GreyBlue, /* slate */
- draw.Red, /* red */
- draw.GreyGreen, /* olive green */
- draw.Blue, /* blue */
- draw.Color(0xFF55AAFF), /* pink */
- draw.Color(0xFFAAFFFF), /* lavender */
- draw.Color(0xBB005DFF), /* maroon */
+ draw.Yellow, /* yellow */
+ draw.Cyan, /* cyan */
+ draw.Green, /* lime green */
+ draw.GreyBlue, /* slate */
+ draw.Red, /* red */
+ draw.GreyGreen, /* olive green */
+ draw.Blue, /* blue */
+ draw.Color(0xFF55AAFF), /* pink */
+ draw.Color(0xFFAAFFFF), /* lavender */
+ draw.Color(0xBB005DFF), /* maroon */
}
func movemouse() int {
@@ -165,7 +165,7 @@ func movemouse() int {
func warp(p draw.Point, x int) int {
if !suspended && piece != nil {
- x = pos.X + piece.sz.X*pcsz/2;
+ x = pos.X + piece.sz.X*pcsz/2
if p.Y < rboard.Min.Y {
p.Y = rboard.Min.Y
}
@@ -174,12 +174,12 @@ func warp(p draw.Point, x int) int {
}
//moveto(mousectl, draw.Pt(x, p.Y));
}
- return x;
+ return x
}
func initPieces() {
for i := range pieces {
- p := &pieces[i];
+ p := &pieces[i]
if p.rot == 3 {
p.right = &pieces[i-3]
} else {
@@ -194,27 +194,27 @@ func initPieces() {
}
func collide(pt draw.Point, p *Piece) bool {
- pt.X = (pt.X - rboard.Min.X) / pcsz;
- pt.Y = (pt.Y - rboard.Min.Y) / pcsz;
+ pt.X = (pt.X - rboard.Min.X) / pcsz
+ pt.Y = (pt.Y - rboard.Min.Y) / pcsz
for _, q := range p.d {
- pt.X += q.X;
- pt.Y += q.Y;
+ pt.X += q.X
+ pt.Y += q.Y
if pt.X < 0 || pt.X >= NX || pt.Y < 0 || pt.Y >= NY {
- return true;
- continue;
+ return true
+ continue
}
if board[pt.Y][pt.X] != 0 {
return true
}
}
- return false;
+ return false
}
func collider(pt, pmax draw.Point) bool {
- pi := (pt.X - rboard.Min.X) / pcsz;
- pj := (pt.Y - rboard.Min.Y) / pcsz;
- n := pmax.X / pcsz;
- m := pmax.Y/pcsz + 1;
+ pi := (pt.X - rboard.Min.X) / pcsz
+ pj := (pt.Y - rboard.Min.Y) / pcsz
+ n := pmax.X / pcsz
+ m := pmax.Y/pcsz + 1
for i := pi; i < pi+n && i < NX; i++ {
for j := pj; j < pj+m && j < NY; j++ {
if board[j][i] != 0 {
@@ -222,34 +222,34 @@ func collider(pt, pmax draw.Point) bool {
}
}
}
- return false;
+ return false
}
func setpiece(p *Piece) {
- draw.Draw(bb, bbr, draw.White, nil, draw.ZP);
- draw.Draw(bbmask, bbr, draw.Transparent, nil, draw.ZP);
- br = draw.Rect(0, 0, 0, 0);
- br2 = br;
- piece = p;
+ draw.Draw(bb, bbr, draw.White, nil, draw.ZP)
+ draw.Draw(bbmask, bbr, draw.Transparent, nil, draw.ZP)
+ br = draw.Rect(0, 0, 0, 0)
+ br2 = br
+ piece = p
if p == nil {
return
}
- var op draw.Point;
- var r draw.Rectangle;
- r.Min = bbr.Min;
+ var op draw.Point
+ var r draw.Rectangle
+ r.Min = bbr.Min
for i, pt := range p.d {
- r.Min.X += pt.X * pcsz;
- r.Min.Y += pt.Y * pcsz;
- r.Max.X = r.Min.X + pcsz;
- r.Max.Y = r.Min.Y + pcsz;
+ r.Min.X += pt.X * pcsz
+ r.Min.Y += pt.Y * pcsz
+ r.Max.X = r.Min.X + pcsz
+ r.Max.Y = r.Min.Y + pcsz
if i == 0 {
- draw.Draw(bb, r, draw.Black, nil, draw.ZP);
- draw.Draw(bb, r.Inset(1), txpix[piece.tx], nil, draw.ZP);
- draw.Draw(bbmask, r, draw.Opaque, nil, draw.ZP);
- op = r.Min;
+ draw.Draw(bb, r, draw.Black, nil, draw.ZP)
+ draw.Draw(bb, r.Inset(1), txpix[piece.tx], nil, draw.ZP)
+ draw.Draw(bbmask, r, draw.Opaque, nil, draw.ZP)
+ op = r.Min
} else {
- draw.Draw(bb, r, bb, nil, op);
- draw.Draw(bbmask, r, bbmask, nil, op);
+ draw.Draw(bb, r, bb, nil, op)
+ draw.Draw(bbmask, r, bbmask, nil, op)
}
if br.Max.X < r.Max.X {
br.Max.X = r.Max.X
@@ -258,66 +258,66 @@ func setpiece(p *Piece) {
br.Max.Y = r.Max.Y
}
}
- br.Max = br.Max.Sub(bbr.Min);
- delta := draw.Pt(0, DY);
- br2.Max = br.Max.Add(delta);
- r = br.Add(bb2r.Min);
- r2 := br2.Add(bb2r.Min);
- draw.Draw(bb2, r2, draw.White, nil, draw.ZP);
- draw.Draw(bb2, r.Add(delta), bb, nil, bbr.Min);
- draw.Draw(bb2mask, r2, draw.Transparent, nil, draw.ZP);
- draw.Draw(bb2mask, r, draw.Opaque, bbmask, bbr.Min);
- draw.Draw(bb2mask, r.Add(delta), draw.Opaque, bbmask, bbr.Min);
+ br.Max = br.Max.Sub(bbr.Min)
+ delta := draw.Pt(0, DY)
+ br2.Max = br.Max.Add(delta)
+ r = br.Add(bb2r.Min)
+ r2 := br2.Add(bb2r.Min)
+ draw.Draw(bb2, r2, draw.White, nil, draw.ZP)
+ draw.Draw(bb2, r.Add(delta), bb, nil, bbr.Min)
+ draw.Draw(bb2mask, r2, draw.Transparent, nil, draw.ZP)
+ draw.Draw(bb2mask, r, draw.Opaque, bbmask, bbr.Min)
+ draw.Draw(bb2mask, r.Add(delta), draw.Opaque, bbmask, bbr.Min)
}
func drawpiece() {
- draw.Draw(screen, br.Add(pos), bb, bbmask, bbr.Min);
+ draw.Draw(screen, br.Add(pos), bb, bbmask, bbr.Min)
if suspended {
draw.Draw(screen, br.Add(pos), draw.White, whitemask, draw.ZP)
}
}
func undrawpiece() {
- var mask image.Image;
+ var mask image.Image
if collider(pos, br.Max) {
mask = bbmask
}
- draw.Draw(screen, br.Add(pos), draw.White, mask, bbr.Min);
+ draw.Draw(screen, br.Add(pos), draw.White, mask, bbr.Min)
}
func rest() {
- pt := pos.Sub(rboard.Min).Div(pcsz);
+ pt := pos.Sub(rboard.Min).Div(pcsz)
for _, p := range piece.d {
- pt.X += p.X;
- pt.Y += p.Y;
- board[pt.Y][pt.X] = byte(piece.tx + 16);
+ pt.X += p.X
+ pt.Y += p.Y
+ board[pt.Y][pt.X] = byte(piece.tx + 16)
}
}
func canfit(p *Piece) bool {
- var dx = [...]int{0, -1, 1, -2, 2, -3, 3, 4, -4};
- j := N + 1;
+ var dx = [...]int{0, -1, 1, -2, 2, -3, 3, 4, -4}
+ j := N + 1
if j >= 4 {
- j = p.sz.X;
+ j = p.sz.X
if j < p.sz.Y {
j = p.sz.Y
}
- j = 2*j - 1;
+ j = 2*j - 1
}
for i := 0; i < j; i++ {
- var z draw.Point;
- z.X = pos.X + dx[i]*pcsz;
- z.Y = pos.Y;
+ var z draw.Point
+ z.X = pos.X + dx[i]*pcsz
+ z.Y = pos.Y
if !collide(z, p) {
- z.Y = pos.Y + pcsz - 1;
+ z.Y = pos.Y + pcsz - 1
if !collide(z, p) {
- undrawpiece();
- pos.X = z.X;
- return true;
+ undrawpiece()
+ pos.X = z.X
+ return true
}
}
}
- return false;
+ return false
}
func score(p int) {
@@ -328,18 +328,18 @@ func score(p int) {
}
func drawsq(b draw.Image, p draw.Point, ptx int) {
- var r draw.Rectangle;
- r.Min = p;
- r.Max.X = r.Min.X + pcsz;
- r.Max.Y = r.Min.Y + pcsz;
- draw.Draw(b, r, draw.Black, nil, draw.ZP);
- draw.Draw(b, r.Inset(1), txpix[ptx], nil, draw.ZP);
+ var r draw.Rectangle
+ r.Min = p
+ r.Max.X = r.Min.X + pcsz
+ r.Max.Y = r.Min.Y + pcsz
+ draw.Draw(b, r, draw.Black, nil, draw.ZP)
+ draw.Draw(b, r.Inset(1), txpix[ptx], nil, draw.ZP)
}
func drawboard() {
- draw.Border(screen, rboard.Inset(-2), 2, draw.Black, draw.ZP);
+ draw.Border(screen, rboard.Inset(-2), 2, draw.Black, draw.ZP)
draw.Draw(screen, draw.Rect(rboard.Min.X, rboard.Min.Y-2, rboard.Max.X, rboard.Min.Y),
- draw.White, nil, draw.ZP);
+ draw.White, nil, draw.ZP)
for i := 0; i < NY; i++ {
for j := 0; j < NX; j++ {
if board[i][j] != 0 {
@@ -347,7 +347,7 @@ func drawboard() {
}
}
}
- score(0);
+ score(0)
if suspended {
draw.Draw(screen, screenr, draw.White, whitemask, draw.ZP)
}
@@ -355,34 +355,34 @@ func drawboard() {
func choosepiece() {
for {
- i := rand.Intn(len(pieces));
- setpiece(&pieces[i]);
- pos = rboard.Min;
- pos.X += rand.Intn(NX) * pcsz;
+ i := rand.Intn(len(pieces))
+ setpiece(&pieces[i])
+ pos = rboard.Min
+ pos.X += rand.Intn(NX) * pcsz
if !collide(draw.Pt(pos.X, pos.Y+pcsz-DY), piece) {
break
}
}
- drawpiece();
- display.FlushImage();
+ drawpiece()
+ display.FlushImage()
}
func movepiece() bool {
- var mask image.Image;
+ var mask image.Image
if collide(draw.Pt(pos.X, pos.Y+pcsz), piece) {
return false
}
if collider(pos, br2.Max) {
mask = bb2mask
}
- draw.Draw(screen, br2.Add(pos), bb2, mask, bb2r.Min);
- pos.Y += DY;
- display.FlushImage();
- return true;
+ draw.Draw(screen, br2.Add(pos), bb2, mask, bb2r.Min)
+ pos.Y += DY
+ display.FlushImage()
+ return true
}
func suspend(s bool) {
- suspended = s;
+ suspended = s
/*
if suspended {
setcursor(mousectl, &whitearrow);
@@ -393,26 +393,26 @@ func suspend(s bool) {
if !suspended {
drawpiece()
}
- drawboard();
- display.FlushImage();
+ drawboard()
+ display.FlushImage()
}
func pause(t int) {
- display.FlushImage();
+ display.FlushImage()
for {
select {
case s := <-suspc:
if !suspended && s {
suspend(true)
} else if suspended && !s {
- suspend(false);
- lastmx = warp(mouse.Point, lastmx);
+ suspend(false)
+ lastmx = warp(mouse.Point, lastmx)
}
case <-timerc:
if suspended {
break
}
- t -= tsleep;
+ t -= tsleep
if t < 0 {
return
}
@@ -425,93 +425,93 @@ func pause(t int) {
}
func horiz() bool {
- var lev [MAXN]int;
- h := 0;
+ var lev [MAXN]int
+ h := 0
for i := 0; i < NY; i++ {
for j := 0; board[i][j] != 0; j++ {
if j == NX-1 {
- lev[h] = i;
- h++;
- break;
+ lev[h] = i
+ h++
+ break
}
}
}
if h == 0 {
return false
}
- r := rboard;
- newscreen = false;
+ r := rboard
+ newscreen = false
for j := 0; j < h; j++ {
- r.Min.Y = rboard.Min.Y + lev[j]*pcsz;
- r.Max.Y = r.Min.Y + pcsz;
- draw.Draw(screen, r, draw.White, whitemask, draw.ZP);
- display.FlushImage();
+ r.Min.Y = rboard.Min.Y + lev[j]*pcsz
+ r.Max.Y = r.Min.Y + pcsz
+ draw.Draw(screen, r, draw.White, whitemask, draw.ZP)
+ display.FlushImage()
}
- PlaySound(whoosh);
+ PlaySound(whoosh)
for i := 0; i < 3; i++ {
- pause(250);
+ pause(250)
if newscreen {
- drawboard();
- break;
+ drawboard()
+ break
}
for j := 0; j < h; j++ {
- r.Min.Y = rboard.Min.Y + lev[j]*pcsz;
- r.Max.Y = r.Min.Y + pcsz;
- draw.Draw(screen, r, draw.White, whitemask, draw.ZP);
+ r.Min.Y = rboard.Min.Y + lev[j]*pcsz
+ r.Max.Y = r.Min.Y + pcsz
+ draw.Draw(screen, r, draw.White, whitemask, draw.ZP)
}
- display.FlushImage();
+ display.FlushImage()
}
- r = rboard;
+ r = rboard
for j := 0; j < h; j++ {
- i := NY - lev[j] - 1;
- score(250 + 10*i*i);
- r.Min.Y = rboard.Min.Y;
- r.Max.Y = rboard.Min.Y + lev[j]*pcsz;
- draw.Draw(screen, r.Add(draw.Pt(0, pcsz)), screen, nil, r.Min);
- r.Max.Y = rboard.Min.Y + pcsz;
- draw.Draw(screen, r, draw.White, nil, draw.ZP);
+ i := NY - lev[j] - 1
+ score(250 + 10*i*i)
+ r.Min.Y = rboard.Min.Y
+ r.Max.Y = rboard.Min.Y + lev[j]*pcsz
+ draw.Draw(screen, r.Add(draw.Pt(0, pcsz)), screen, nil, r.Min)
+ r.Max.Y = rboard.Min.Y + pcsz
+ draw.Draw(screen, r, draw.White, nil, draw.ZP)
for k := lev[j] - 1; k >= 0; k-- {
board[k+1] = board[k]
}
- board[0] = [NX]byte{};
+ board[0] = [NX]byte{}
}
- display.FlushImage();
- return true;
+ display.FlushImage()
+ return true
}
func mright() {
if !collide(draw.Pt(pos.X+pcsz, pos.Y), piece) &&
!collide(draw.Pt(pos.X+pcsz, pos.Y+pcsz-DY), piece) {
- undrawpiece();
- pos.X += pcsz;
- drawpiece();
- display.FlushImage();
+ undrawpiece()
+ pos.X += pcsz
+ drawpiece()
+ display.FlushImage()
}
}
func mleft() {
if !collide(draw.Pt(pos.X-pcsz, pos.Y), piece) &&
!collide(draw.Pt(pos.X-pcsz, pos.Y+pcsz-DY), piece) {
- undrawpiece();
- pos.X -= pcsz;
- drawpiece();
- display.FlushImage();
+ undrawpiece()
+ pos.X -= pcsz
+ drawpiece()
+ display.FlushImage()
}
}
func rright() {
if canfit(piece.right) {
- setpiece(piece.right);
- drawpiece();
- display.FlushImage();
+ setpiece(piece.right)
+ drawpiece()
+ display.FlushImage()
}
}
func rleft() {
if canfit(piece.left) {
- setpiece(piece.left);
- drawpiece();
- display.FlushImage();
+ setpiece(piece.left)
+ drawpiece()
+ display.FlushImage()
}
}
@@ -519,47 +519,47 @@ var fusst = 0
func drop(f bool) bool {
if f {
- score(5 * (rboard.Max.Y - pos.Y) / pcsz);
+ score(5 * (rboard.Max.Y - pos.Y) / pcsz)
for movepiece() {
}
}
- fusst = 0;
- rest();
+ fusst = 0
+ rest()
if pos.Y == rboard.Min.Y && !horiz() {
return true
}
- horiz();
- setpiece(nil);
- pause(1500);
- choosepiece();
- lastmx = warp(mouse.Point, lastmx);
- return false;
+ horiz()
+ setpiece(nil)
+ pause(1500)
+ choosepiece()
+ lastmx = warp(mouse.Point, lastmx)
+ return false
}
func play() {
- var om draw.Mouse;
- dt = 64;
- lastmx = -1;
- lastmx = movemouse();
- choosepiece();
- lastmx = warp(mouse.Point, lastmx);
+ var om draw.Mouse
+ dt = 64
+ lastmx = -1
+ lastmx = movemouse()
+ choosepiece()
+ lastmx = warp(mouse.Point, lastmx)
for {
select {
case mouse = <-mousec:
if suspended {
- om = mouse;
- break;
+ om = mouse
+ break
}
if lastmx < 0 {
lastmx = mouse.X
}
if mouse.X > lastmx+DMOUSE {
- mright();
- lastmx = mouse.X;
+ mright()
+ lastmx = mouse.X
}
if mouse.X < lastmx-DMOUSE {
- mleft();
- lastmx = mouse.X;
+ mleft()
+ lastmx = mouse.X
}
if mouse.Buttons&^om.Buttons&1 == 1 {
rleft()
@@ -572,14 +572,14 @@ func play() {
if mouse.Buttons&^om.Buttons&4 == 4 {
rright()
}
- om = mouse;
+ om = mouse
case s := <-suspc:
if !suspended && s {
suspend(true)
} else if suspended && !s {
- suspend(false);
- lastmx = warp(mouse.Point, lastmx);
+ suspend(false)
+ lastmx = warp(mouse.Point, lastmx)
}
case <-resizec:
@@ -608,25 +608,25 @@ func play() {
if suspended {
break
}
- dt -= tsleep;
+ dt -= tsleep
if dt < 0 {
- i := 1;
- dt = 16 * (points + rand.Intn(10000) - 5000) / 10000;
+ i := 1
+ dt = 16 * (points + rand.Intn(10000) - 5000) / 10000
if dt >= 32 {
- i += (dt - 32) / 16;
- dt = 32;
+ i += (dt - 32) / 16
+ dt = 32
}
- dt = 52 - dt;
+ dt = 52 - dt
for ; i > 0; i-- {
if movepiece() {
continue
}
- fusst++;
+ fusst++
if fusst == 40 {
if drop(false) {
return
}
- break;
+ break
}
}
}
@@ -635,10 +635,10 @@ func play() {
}
func suspproc() {
- mc := display.MouseChan();
- kc := display.KeyboardChan();
+ mc := display.MouseChan()
+ kc := display.KeyboardChan()
- s := false;
+ s := false
for {
select {
case mouse = <-mc:
@@ -649,14 +649,14 @@ func suspproc() {
os.Exit(0)
default:
if s {
- s = false;
- suspc <- s;
- break;
+ s = false
+ suspc <- s
+ break
}
switch r {
case 'z', 'Z', 'p', 'P', 0x1B:
- s = true;
- suspc <- s;
+ s = true
+ suspc <- s
default:
kbdc <- r
}
@@ -669,74 +669,74 @@ func redraw(new bool) {
// if new && getwindow(display, Refmesg) < 0 {
// sysfatal("can't reattach to window");
// }
- r := draw.Rect(0, 0, screen.Width(), screen.Height());
- pos.X = (pos.X - rboard.Min.X) / pcsz;
- pos.Y = (pos.Y - rboard.Min.Y) / pcsz;
- dx := r.Max.X - r.Min.X;
- dy := r.Max.Y - r.Min.Y - 2*32;
- DY = dx / NX;
+ r := draw.Rect(0, 0, screen.Width(), screen.Height())
+ pos.X = (pos.X - rboard.Min.X) / pcsz
+ pos.Y = (pos.Y - rboard.Min.Y) / pcsz
+ dx := r.Max.X - r.Min.X
+ dy := r.Max.Y - r.Min.Y - 2*32
+ DY = dx / NX
if DY > dy/NY {
DY = dy / NY
}
- DY /= 8;
+ DY /= 8
if DY > 4 {
DY = 4
}
- pcsz = DY * 8;
- DMOUSE = pcsz / 3;
+ pcsz = DY * 8
+ DMOUSE = pcsz / 3
if pcsz < 8 {
log.Exitf("screen too small: %d", pcsz)
}
- rboard = screenr;
- rboard.Min.X += (dx - pcsz*NX) / 2;
- rboard.Min.Y += (dy-pcsz*NY)/2 + 32;
- rboard.Max.X = rboard.Min.X + NX*pcsz;
- rboard.Max.Y = rboard.Min.Y + NY*pcsz;
- pscore.X = rboard.Min.X + 8;
- pscore.Y = rboard.Min.Y - 32;
+ rboard = screenr
+ rboard.Min.X += (dx - pcsz*NX) / 2
+ rboard.Min.Y += (dy-pcsz*NY)/2 + 32
+ rboard.Max.X = rboard.Min.X + NX*pcsz
+ rboard.Max.Y = rboard.Min.Y + NY*pcsz
+ pscore.X = rboard.Min.X + 8
+ pscore.Y = rboard.Min.Y - 32
// scoresz = stringsize(font, "000000");
- pos.X = pos.X*pcsz + rboard.Min.X;
- pos.Y = pos.Y*pcsz + rboard.Min.Y;
- bbr = draw.Rect(0, 0, N*pcsz, N*pcsz);
- bb = image.NewRGBA(bbr.Max.X, bbr.Max.Y);
- bbmask = image.NewRGBA(bbr.Max.X, bbr.Max.Y); // actually just a bitmap
- bb2r = draw.Rect(0, 0, N*pcsz, N*pcsz+DY);
- bb2 = image.NewRGBA(bb2r.Dx(), bb2r.Dy());
- bb2mask = image.NewRGBA(bb2r.Dx(), bb2r.Dy()); // actually just a bitmap
- draw.Draw(screen, screenr, draw.White, nil, draw.ZP);
- drawboard();
- setpiece(piece);
+ pos.X = pos.X*pcsz + rboard.Min.X
+ pos.Y = pos.Y*pcsz + rboard.Min.Y
+ bbr = draw.Rect(0, 0, N*pcsz, N*pcsz)
+ bb = image.NewRGBA(bbr.Max.X, bbr.Max.Y)
+ bbmask = image.NewRGBA(bbr.Max.X, bbr.Max.Y) // actually just a bitmap
+ bb2r = draw.Rect(0, 0, N*pcsz, N*pcsz+DY)
+ bb2 = image.NewRGBA(bb2r.Dx(), bb2r.Dy())
+ bb2mask = image.NewRGBA(bb2r.Dx(), bb2r.Dy()) // actually just a bitmap
+ draw.Draw(screen, screenr, draw.White, nil, draw.ZP)
+ drawboard()
+ setpiece(piece)
if piece != nil {
drawpiece()
}
- lastmx = movemouse();
- newscreen = true;
- display.FlushImage();
+ lastmx = movemouse()
+ newscreen = true
+ display.FlushImage()
}
func quitter(c <-chan bool) {
- <-c;
- os.Exit(0);
+ <-c
+ os.Exit(0)
}
func Play(pp []Piece, ctxt draw.Context) {
- display = ctxt;
- screen = ctxt.Screen();
- screenr = draw.Rect(0, 0, screen.Width(), screen.Height());
- pieces = pp;
- N = len(pieces[0].d);
- initPieces();
- rand.Seed(int64(time.Nanoseconds() % (1e9 - 1)));
- whitemask = draw.White.SetAlpha(0x7F);
- tsleep = 50;
- timerc = time.Tick(int64(tsleep/2) * 1e6);
- suspc = make(chan bool);
- mousec = make(chan draw.Mouse);
- resizec = ctxt.ResizeChan();
- kbdc = make(chan int);
- go quitter(ctxt.QuitChan());
- go suspproc();
- points = 0;
- redraw(false);
- play();
+ display = ctxt
+ screen = ctxt.Screen()
+ screenr = draw.Rect(0, 0, screen.Width(), screen.Height())
+ pieces = pp
+ N = len(pieces[0].d)
+ initPieces()
+ rand.Seed(int64(time.Nanoseconds() % (1e9 - 1)))
+ whitemask = draw.White.SetAlpha(0x7F)
+ tsleep = 50
+ timerc = time.Tick(int64(tsleep/2) * 1e6)
+ suspc = make(chan bool)
+ mousec = make(chan draw.Mouse)
+ resizec = ctxt.ResizeChan()
+ kbdc = make(chan int)
+ go quitter(ctxt.QuitChan())
+ go suspproc()
+ points = 0
+ redraw(false)
+ play()
}
diff --git a/src/pkg/exp/datafmt/datafmt.go b/src/pkg/exp/datafmt/datafmt.go
index 4ed9695ab..0a2354286 100644
--- a/src/pkg/exp/datafmt/datafmt.go
+++ b/src/pkg/exp/datafmt/datafmt.go
@@ -202,13 +202,13 @@
package datafmt
import (
- "bytes";
- "fmt";
- "go/token";
- "io";
- "os";
- "reflect";
- "runtime";
+ "bytes"
+ "fmt"
+ "go/token"
+ "io"
+ "os"
+ "reflect"
+ "runtime"
)
@@ -238,35 +238,35 @@ type FormatterMap map[string]Formatter
// A parsed format expression is built from the following nodes.
//
type (
- expr interface{};
+ expr interface{}
- alternatives []expr; // x | y | z
+ alternatives []expr // x | y | z
- sequence []expr; // x y z
+ sequence []expr // x y z
- literal [][]byte; // a list of string segments, possibly starting with '%'
+ literal [][]byte // a list of string segments, possibly starting with '%'
- field struct {
- fieldName string; // including "@", "*"
- ruleName string; // "" if no rule name specified
- };
+ field struct {
+ fieldName string // including "@", "*"
+ ruleName string // "" if no rule name specified
+ }
- group struct {
- indent, body expr; // (indent >> body)
- };
+ group struct {
+ indent, body expr // (indent >> body)
+ }
- option struct {
- body expr; // [body]
- };
+ option struct {
+ body expr // [body]
+ }
- repetition struct {
- body, separator expr; // {body / separator}
- };
+ repetition struct {
+ body, separator expr // {body / separator}
+ }
- custom struct {
- ruleName string;
- fun Formatter;
- };
+ custom struct {
+ ruleName string
+ fun Formatter
+ }
)
@@ -290,7 +290,7 @@ type Format map[string]expr
// the receiver, and thus can be very light-weight.
//
type Environment interface {
- Copy() Environment;
+ Copy() Environment
}
@@ -298,24 +298,24 @@ type Environment interface {
// It is provided as argument to custom formatters.
//
type State struct {
- fmt Format; // format in use
- env Environment; // user-supplied environment
- errors chan os.Error; // not chan *Error (errors <- nil would be wrong!)
- hasOutput bool; // true after the first literal has been written
- indent bytes.Buffer; // current indentation
- output bytes.Buffer; // format output
- linePos token.Position; // position of line beginning (Column == 0)
- default_ expr; // possibly nil
- separator expr; // possibly nil
+ fmt Format // format in use
+ env Environment // user-supplied environment
+ errors chan os.Error // not chan *Error (errors <- nil would be wrong!)
+ hasOutput bool // true after the first literal has been written
+ indent bytes.Buffer // current indentation
+ output bytes.Buffer // format output
+ linePos token.Position // position of line beginning (Column == 0)
+ default_ expr // possibly nil
+ separator expr // possibly nil
}
func newState(fmt Format, env Environment, errors chan os.Error) *State {
- s := new(State);
- s.fmt = fmt;
- s.env = env;
- s.errors = errors;
- s.linePos = token.Position{Line: 1};
+ s := new(State)
+ s.fmt = fmt
+ s.env = env
+ s.errors = errors
+ s.linePos = token.Position{Line: 1}
// if we have a default rule, cache it's expression for fast access
if x, found := fmt["default"]; found {
@@ -327,26 +327,26 @@ func newState(fmt Format, env Environment, errors chan os.Error) *State {
s.separator = x
}
- return s;
+ return s
}
// Env returns the environment passed to Format.Apply.
-func (s *State) Env() interface{} { return s.env }
+func (s *State) Env() interface{} { return s.env }
// LinePos returns the position of the current line beginning
// in the state's output buffer. Line numbers start at 1.
//
-func (s *State) LinePos() token.Position { return s.linePos }
+func (s *State) LinePos() token.Position { return s.linePos }
// Pos returns the position of the next byte to be written to the
// output buffer. Line numbers start at 1.
//
func (s *State) Pos() token.Position {
- offs := s.output.Len();
- return token.Position{Line: s.linePos.Line, Column: offs - s.linePos.Offset, Offset: offs};
+ offs := s.output.Len()
+ return token.Position{Line: s.linePos.Line, Column: offs - s.linePos.Offset, Offset: offs}
}
@@ -354,50 +354,50 @@ func (s *State) Pos() token.Position {
// string after each newline or form feed character. It cannot return an error.
//
func (s *State) Write(data []byte) (int, os.Error) {
- n := 0;
- i0 := 0;
+ n := 0
+ i0 := 0
for i, ch := range data {
if ch == '\n' || ch == '\f' {
// write text segment and indentation
- n1, _ := s.output.Write(data[i0 : i+1]);
- n2, _ := s.output.Write(s.indent.Bytes());
- n += n1 + n2;
- i0 = i + 1;
- s.linePos.Offset = s.output.Len();
- s.linePos.Line++;
+ n1, _ := s.output.Write(data[i0 : i+1])
+ n2, _ := s.output.Write(s.indent.Bytes())
+ n += n1 + n2
+ i0 = i + 1
+ s.linePos.Offset = s.output.Len()
+ s.linePos.Line++
}
}
- n3, _ := s.output.Write(data[i0:]);
- return n + n3, nil;
+ n3, _ := s.output.Write(data[i0:])
+ return n + n3, nil
}
type checkpoint struct {
- env Environment;
- hasOutput bool;
- outputLen int;
- linePos token.Position;
+ env Environment
+ hasOutput bool
+ outputLen int
+ linePos token.Position
}
func (s *State) save() checkpoint {
- saved := checkpoint{nil, s.hasOutput, s.output.Len(), s.linePos};
+ saved := checkpoint{nil, s.hasOutput, s.output.Len(), s.linePos}
if s.env != nil {
saved.env = s.env.Copy()
}
- return saved;
+ return saved
}
func (s *State) restore(m checkpoint) {
- s.env = m.env;
- s.output.Truncate(m.outputLen);
+ s.env = m.env
+ s.output.Truncate(m.outputLen)
}
func (s *State) error(msg string) {
- s.errors <- os.NewError(msg);
- runtime.Goexit();
+ s.errors <- os.NewError(msg)
+ runtime.Goexit()
}
@@ -426,7 +426,7 @@ func typename(typ reflect.Type) string {
case *reflect.PtrType:
return "ptr"
}
- return typ.String();
+ return typ.String()
}
func (s *State) getFormat(name string) expr {
@@ -438,8 +438,8 @@ func (s *State) getFormat(name string) expr {
return s.default_
}
- s.error(fmt.Sprintf("no format rule for type: '%s'", name));
- return nil;
+ s.error(fmt.Sprintf("no format rule for type: '%s'", name))
+ return nil
}
@@ -459,42 +459,42 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool {
case alternatives:
// append the result of the first alternative that evaluates to
// a non-nil []byte to the state's output
- mark := s.save();
+ mark := s.save()
for _, x := range t {
if s.eval(x, value, index) {
return true
}
- s.restore(mark);
+ s.restore(mark)
}
- return false;
+ return false
case sequence:
// append the result of all operands to the state's output
// unless a nil result is encountered
- mark := s.save();
+ mark := s.save()
for _, x := range t {
if !s.eval(x, value, index) {
- s.restore(mark);
- return false;
+ s.restore(mark)
+ return false
}
}
- return true;
+ return true
case literal:
// write separator, if any
if s.hasOutput {
// not the first literal
if s.separator != nil {
- sep := s.separator; // save current separator
- s.separator = nil; // and disable it (avoid recursion)
- mark := s.save();
+ sep := s.separator // save current separator
+ s.separator = nil // and disable it (avoid recursion)
+ mark := s.save()
if !s.eval(sep, value, index) {
s.restore(mark)
}
- s.separator = sep; // enable it again
+ s.separator = sep // enable it again
}
}
- s.hasOutput = true;
+ s.hasOutput = true
// write literal segments
for _, lit := range t {
if len(lit) > 1 && lit[0] == '%' {
@@ -511,7 +511,7 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool {
s.Write(lit)
}
}
- return true; // a literal never evaluates to nil
+ return true // a literal never evaluates to nil
case *field:
// determine field value
@@ -526,13 +526,13 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool {
if v.Len() <= index {
return false
}
- value = v.Elem(index);
+ value = v.Elem(index)
case *reflect.SliceValue:
if v.IsNil() || v.Len() <= index {
return false
}
- value = v.Elem(index);
+ value = v.Elem(index)
case *reflect.MapValue:
s.error("reflection support for maps incomplete")
@@ -541,13 +541,13 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool {
if v.IsNil() {
return false
}
- value = v.Elem();
+ value = v.Elem()
case *reflect.InterfaceValue:
if v.IsNil() {
return false
}
- value = v.Elem();
+ value = v.Elem()
case *reflect.ChanValue:
s.error("reflection support for chans incomplete")
@@ -561,98 +561,98 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool {
default:
// value is value of named field
- var field reflect.Value;
+ var field reflect.Value
if sval, ok := value.(*reflect.StructValue); ok {
- field = sval.FieldByName(t.fieldName);
+ field = sval.FieldByName(t.fieldName)
if field == nil {
// TODO consider just returning false in this case
s.error(fmt.Sprintf("error: no field `%s` in `%s`", t.fieldName, value.Type()))
}
}
- value = field;
+ value = field
}
// determine rule
- ruleName := t.ruleName;
+ ruleName := t.ruleName
if ruleName == "" {
// no alternate rule name, value type determines rule
ruleName = typename(value.Type())
}
- fexpr = s.getFormat(ruleName);
+ fexpr = s.getFormat(ruleName)
- mark := s.save();
+ mark := s.save()
if !s.eval(fexpr, value, index) {
- s.restore(mark);
- return false;
+ s.restore(mark)
+ return false
}
- return true;
+ return true
case *group:
// remember current indentation
- indentLen := s.indent.Len();
+ indentLen := s.indent.Len()
// update current indentation
- mark := s.save();
- s.eval(t.indent, value, index);
+ mark := s.save()
+ s.eval(t.indent, value, index)
// if the indentation evaluates to nil, the state's output buffer
// didn't change - either way it's ok to append the difference to
// the current identation
- s.indent.Write(s.output.Bytes()[mark.outputLen:s.output.Len()]);
- s.restore(mark);
+ s.indent.Write(s.output.Bytes()[mark.outputLen:s.output.Len()])
+ s.restore(mark)
// format group body
- mark = s.save();
- b := true;
+ mark = s.save()
+ b := true
if !s.eval(t.body, value, index) {
- s.restore(mark);
- b = false;
+ s.restore(mark)
+ b = false
}
// reset indentation
- s.indent.Truncate(indentLen);
- return b;
+ s.indent.Truncate(indentLen)
+ return b
case *option:
// evaluate the body and append the result to the state's output
// buffer unless the result is nil
- mark := s.save();
- if !s.eval(t.body, value, 0) { // TODO is 0 index correct?
+ mark := s.save()
+ if !s.eval(t.body, value, 0) { // TODO is 0 index correct?
s.restore(mark)
}
- return true; // an option never evaluates to nil
+ return true // an option never evaluates to nil
case *repetition:
// evaluate the body and append the result to the state's output
// buffer until a result is nil
for i := 0; ; i++ {
- mark := s.save();
+ mark := s.save()
// write separator, if any
if i > 0 && t.separator != nil {
// nil result from separator is ignored
- mark := s.save();
+ mark := s.save()
if !s.eval(t.separator, value, i) {
s.restore(mark)
}
}
if !s.eval(t.body, value, i) {
- s.restore(mark);
- break;
+ s.restore(mark)
+ break
}
}
- return true; // a repetition never evaluates to nil
+ return true // a repetition never evaluates to nil
case *custom:
// invoke the custom formatter to obtain the result
- mark := s.save();
+ mark := s.save()
if !t.fun(s, value.Interface(), t.ruleName) {
- s.restore(mark);
- return false;
+ s.restore(mark)
+ return false
}
- return true;
+ return true
}
- panic("unreachable");
- return false;
+ panic("unreachable")
+ return false
}
@@ -668,23 +668,23 @@ func (f Format) Eval(env Environment, args ...) ([]byte, os.Error) {
return nil, os.NewError("format is nil")
}
- errors := make(chan os.Error);
- s := newState(f, env, errors);
+ errors := make(chan os.Error)
+ s := newState(f, env, errors)
go func() {
- value := reflect.NewValue(args).(*reflect.StructValue);
+ value := reflect.NewValue(args).(*reflect.StructValue)
for i := 0; i < value.NumField(); i++ {
- fld := value.Field(i);
- mark := s.save();
- if !s.eval(s.getFormat(typename(fld.Type())), fld, 0) { // TODO is 0 index correct?
+ fld := value.Field(i)
+ mark := s.save()
+ if !s.eval(s.getFormat(typename(fld.Type())), fld, 0) { // TODO is 0 index correct?
s.restore(mark)
}
}
- errors <- nil; // no errors
- }();
+ errors <- nil // no errors
+ }()
- err := <-errors;
- return s.output.Bytes(), err;
+ err := <-errors
+ return s.output.Bytes(), err
}
@@ -696,12 +696,12 @@ func (f Format) Eval(env Environment, args ...) ([]byte, os.Error) {
// written and an os.Error, if any.
//
func (f Format) Fprint(w io.Writer, env Environment, args ...) (int, os.Error) {
- data, err := f.Eval(env, args);
+ data, err := f.Eval(env, args)
if err != nil {
// TODO should we print partial result in case of error?
return 0, err
}
- return w.Write(data);
+ return w.Write(data)
}
@@ -720,10 +720,10 @@ func (f Format) Print(args ...) (int, os.Error) {
// partially formatted result followed by an error message.
//
func (f Format) Sprint(args ...) string {
- var buf bytes.Buffer;
- _, err := f.Fprint(&buf, nil, args);
+ var buf bytes.Buffer
+ _, err := f.Fprint(&buf, nil, args)
if err != nil {
fmt.Fprintf(&buf, "--- Sprint(%s) failed: %v", fmt.Sprint(args), err)
}
- return buf.String();
+ return buf.String()
}
diff --git a/src/pkg/exp/datafmt/datafmt_test.go b/src/pkg/exp/datafmt/datafmt_test.go
index 61c0a972d..d1c6222a0 100644
--- a/src/pkg/exp/datafmt/datafmt_test.go
+++ b/src/pkg/exp/datafmt/datafmt_test.go
@@ -5,27 +5,27 @@
package datafmt
import (
- "fmt";
- "strings";
- "testing";
+ "fmt"
+ "strings"
+ "testing"
)
func parse(t *testing.T, form string, fmap FormatterMap) Format {
- f, err := Parse("", strings.Bytes(form), fmap);
+ f, err := Parse("", strings.Bytes(form), fmap)
if err != nil {
- t.Errorf("Parse(%s): %v", form, err);
- return nil;
+ t.Errorf("Parse(%s): %v", form, err)
+ return nil
}
- return f;
+ return f
}
func verify(t *testing.T, f Format, expected string, args ...) {
if f == nil {
- return // allow other tests to run
+ return // allow other tests to run
}
- result := f.Sprint(args);
+ result := f.Sprint(args)
if result != expected {
t.Errorf(
"result : `%s`\nexpected: `%s`\n\n",
@@ -37,54 +37,54 @@ func verify(t *testing.T, f Format, expected string, args ...) {
func formatter(s *State, value interface{}, rule_name string) bool {
switch rule_name {
case "/":
- fmt.Fprintf(s, "%d %d %d", s.Pos().Line, s.LinePos().Column, s.Pos().Column);
- return true;
+ fmt.Fprintf(s, "%d %d %d", s.Pos().Line, s.LinePos().Column, s.Pos().Column)
+ return true
case "blank":
- s.Write([]byte{' '});
- return true;
+ s.Write([]byte{' '})
+ return true
case "int":
if value.(int)&1 == 0 {
fmt.Fprint(s, "even ")
} else {
fmt.Fprint(s, "odd ")
}
- return true;
+ return true
case "nil":
return false
case "testing.T":
- s.Write(strings.Bytes("testing.T"));
- return true;
+ s.Write(strings.Bytes("testing.T"))
+ return true
}
- panic("unreachable");
- return false;
+ panic("unreachable")
+ return false
}
func TestCustomFormatters(t *testing.T) {
- fmap0 := FormatterMap{"/": formatter};
- fmap1 := FormatterMap{"int": formatter, "blank": formatter, "nil": formatter};
- fmap2 := FormatterMap{"testing.T": formatter};
+ fmap0 := FormatterMap{"/": formatter}
+ fmap1 := FormatterMap{"int": formatter, "blank": formatter, "nil": formatter}
+ fmap2 := FormatterMap{"testing.T": formatter}
- f := parse(t, `int=`, fmap0);
- verify(t, f, ``, 1, 2, 3);
+ f := parse(t, `int=`, fmap0)
+ verify(t, f, ``, 1, 2, 3)
- f = parse(t, `int="#"`, nil);
- verify(t, f, `###`, 1, 2, 3);
+ f = parse(t, `int="#"`, nil)
+ verify(t, f, `###`, 1, 2, 3)
- f = parse(t, `int="#";string="%s"`, fmap0);
- verify(t, f, "#1 0 1#1 0 7#1 0 13\n2 0 0foo2 0 8\n", 1, 2, 3, "\n", "foo", "\n");
+ f = parse(t, `int="#";string="%s"`, fmap0)
+ verify(t, f, "#1 0 1#1 0 7#1 0 13\n2 0 0foo2 0 8\n", 1, 2, 3, "\n", "foo", "\n")
- f = parse(t, ``, fmap1);
- verify(t, f, `even odd even odd `, 0, 1, 2, 3);
+ f = parse(t, ``, fmap1)
+ verify(t, f, `even odd even odd `, 0, 1, 2, 3)
- f = parse(t, `/ =@:blank; float="#"`, fmap1);
- verify(t, f, `# # #`, 0.0, 1.0, 2.0);
+ f = parse(t, `/ =@:blank; float="#"`, fmap1)
+ verify(t, f, `# # #`, 0.0, 1.0, 2.0)
- f = parse(t, `float=@:nil`, fmap1);
- verify(t, f, ``, 0.0, 1.0, 2.0);
+ f = parse(t, `float=@:nil`, fmap1)
+ verify(t, f, ``, 0.0, 1.0, 2.0)
- f = parse(t, `testing "testing"; ptr=*`, fmap2);
- verify(t, f, `testing.T`, t);
+ f = parse(t, `testing "testing"; ptr=*`, fmap2)
+ verify(t, f, `testing.T`, t)
// TODO needs more tests
}
@@ -94,11 +94,11 @@ func TestCustomFormatters(t *testing.T) {
// Formatting of basic and simple composite types
func check(t *testing.T, form, expected string, args ...) {
- f := parse(t, form, nil);
+ f := parse(t, form, nil)
if f == nil {
- return // allow other tests to run
+ return // allow other tests to run
}
- result := f.Sprint(args);
+ result := f.Sprint(args)
if result != expected {
t.Errorf(
"format : %s\nresult : `%s`\nexpected: `%s`\n\n",
@@ -108,120 +108,120 @@ func check(t *testing.T, form, expected string, args ...) {
func TestBasicTypes(t *testing.T) {
- check(t, ``, ``);
- check(t, `bool=":%v"`, `:true:false`, true, false);
- check(t, `int="%b %d %o 0x%x"`, `101010 42 52 0x2a`, 42);
-
- check(t, `int="%"`, `%`, 42);
- check(t, `int="%%"`, `%`, 42);
- check(t, `int="**%%**"`, `**%**`, 42);
- check(t, `int="%%%%%%"`, `%%%`, 42);
- check(t, `int="%%%d%%"`, `%42%`, 42);
-
- const i = -42;
- const is = `-42`;
- check(t, `int ="%d"`, is, i);
- check(t, `int8 ="%d"`, is, int8(i));
- check(t, `int16="%d"`, is, int16(i));
- check(t, `int32="%d"`, is, int32(i));
- check(t, `int64="%d"`, is, int64(i));
-
- const u = 42;
- const us = `42`;
- check(t, `uint ="%d"`, us, uint(u));
- check(t, `uint8 ="%d"`, us, uint8(u));
- check(t, `uint16="%d"`, us, uint16(u));
- check(t, `uint32="%d"`, us, uint32(u));
- check(t, `uint64="%d"`, us, uint64(u));
-
- const f = 3.141592;
- const fs = `3.141592`;
- check(t, `float ="%g"`, fs, f);
- check(t, `float32="%g"`, fs, float32(f));
- check(t, `float64="%g"`, fs, float64(f));
+ check(t, ``, ``)
+ check(t, `bool=":%v"`, `:true:false`, true, false)
+ check(t, `int="%b %d %o 0x%x"`, `101010 42 52 0x2a`, 42)
+
+ check(t, `int="%"`, `%`, 42)
+ check(t, `int="%%"`, `%`, 42)
+ check(t, `int="**%%**"`, `**%**`, 42)
+ check(t, `int="%%%%%%"`, `%%%`, 42)
+ check(t, `int="%%%d%%"`, `%42%`, 42)
+
+ const i = -42
+ const is = `-42`
+ check(t, `int ="%d"`, is, i)
+ check(t, `int8 ="%d"`, is, int8(i))
+ check(t, `int16="%d"`, is, int16(i))
+ check(t, `int32="%d"`, is, int32(i))
+ check(t, `int64="%d"`, is, int64(i))
+
+ const u = 42
+ const us = `42`
+ check(t, `uint ="%d"`, us, uint(u))
+ check(t, `uint8 ="%d"`, us, uint8(u))
+ check(t, `uint16="%d"`, us, uint16(u))
+ check(t, `uint32="%d"`, us, uint32(u))
+ check(t, `uint64="%d"`, us, uint64(u))
+
+ const f = 3.141592
+ const fs = `3.141592`
+ check(t, `float ="%g"`, fs, f)
+ check(t, `float32="%g"`, fs, float32(f))
+ check(t, `float64="%g"`, fs, float64(f))
}
func TestArrayTypes(t *testing.T) {
- var a0 [10]int;
- check(t, `array="array";`, `array`, a0);
+ var a0 [10]int
+ check(t, `array="array";`, `array`, a0)
- a1 := [...]int{1, 2, 3};
- check(t, `array="array";`, `array`, a1);
- check(t, `array={*}; int="%d";`, `123`, a1);
- check(t, `array={* / ", "}; int="%d";`, `1, 2, 3`, a1);
- check(t, `array={* / *}; int="%d";`, `12233`, a1);
+ a1 := [...]int{1, 2, 3}
+ check(t, `array="array";`, `array`, a1)
+ check(t, `array={*}; int="%d";`, `123`, a1)
+ check(t, `array={* / ", "}; int="%d";`, `1, 2, 3`, a1)
+ check(t, `array={* / *}; int="%d";`, `12233`, a1)
- a2 := []interface{}{42, "foo", 3.14};
- check(t, `array={* / ", "}; interface=*; string="bar"; default="%v";`, `42, bar, 3.14`, a2);
+ a2 := []interface{}{42, "foo", 3.14}
+ check(t, `array={* / ", "}; interface=*; string="bar"; default="%v";`, `42, bar, 3.14`, a2)
}
func TestChanTypes(t *testing.T) {
- var c0 chan int;
- check(t, `chan="chan"`, `chan`, c0);
+ var c0 chan int
+ check(t, `chan="chan"`, `chan`, c0)
- c1 := make(chan int);
- go func() { c1 <- 42 }();
- check(t, `chan="chan"`, `chan`, c1);
+ c1 := make(chan int)
+ go func() { c1 <- 42 }()
+ check(t, `chan="chan"`, `chan`, c1)
// check(t, `chan=*`, `42`, c1); // reflection support for chans incomplete
}
func TestFuncTypes(t *testing.T) {
- var f0 func() int;
- check(t, `func="func"`, `func`, f0);
+ var f0 func() int
+ check(t, `func="func"`, `func`, f0)
- f1 := func() int { return 42 };
- check(t, `func="func"`, `func`, f1);
+ f1 := func() int { return 42 }
+ check(t, `func="func"`, `func`, f1)
// check(t, `func=*`, `42`, f1); // reflection support for funcs incomplete
}
func TestInterfaceTypes(t *testing.T) {
var i0 interface{}
- check(t, `interface="interface"`, `interface`, i0);
+ check(t, `interface="interface"`, `interface`, i0)
- i0 = "foo";
- check(t, `interface="interface"`, `interface`, i0);
- check(t, `interface=*; string="%s"`, `foo`, i0);
+ i0 = "foo"
+ check(t, `interface="interface"`, `interface`, i0)
+ check(t, `interface=*; string="%s"`, `foo`, i0)
}
func TestMapTypes(t *testing.T) {
- var m0 map[string]int;
- check(t, `map="map"`, `map`, m0);
+ var m0 map[string]int
+ check(t, `map="map"`, `map`, m0)
- m1 := map[string]int{};
- check(t, `map="map"`, `map`, m1);
+ m1 := map[string]int{}
+ check(t, `map="map"`, `map`, m1)
// check(t, `map=*`, ``, m1); // reflection support for maps incomplete
}
func TestPointerTypes(t *testing.T) {
- var p0 *int;
- check(t, `ptr="ptr"`, `ptr`, p0);
- check(t, `ptr=*`, ``, p0);
- check(t, `ptr=*|"nil"`, `nil`, p0);
-
- x := 99991;
- p1 := &x;
- check(t, `ptr="ptr"`, `ptr`, p1);
- check(t, `ptr=*; int="%d"`, `99991`, p1);
+ var p0 *int
+ check(t, `ptr="ptr"`, `ptr`, p0)
+ check(t, `ptr=*`, ``, p0)
+ check(t, `ptr=*|"nil"`, `nil`, p0)
+
+ x := 99991
+ p1 := &x
+ check(t, `ptr="ptr"`, `ptr`, p1)
+ check(t, `ptr=*; int="%d"`, `99991`, p1)
}
func TestDefaultRule(t *testing.T) {
- check(t, `default="%v"`, `42foo3.14`, 42, "foo", 3.14);
- check(t, `default="%v"; int="%x"`, `abcdef`, 10, 11, 12, 13, 14, 15);
- check(t, `default="%v"; int="%x"`, `ab**ef`, 10, 11, "**", 14, 15);
- check(t, `default="%x"; int=@:default`, `abcdef`, 10, 11, 12, 13, 14, 15);
+ check(t, `default="%v"`, `42foo3.14`, 42, "foo", 3.14)
+ check(t, `default="%v"; int="%x"`, `abcdef`, 10, 11, 12, 13, 14, 15)
+ check(t, `default="%v"; int="%x"`, `ab**ef`, 10, 11, "**", 14, 15)
+ check(t, `default="%x"; int=@:default`, `abcdef`, 10, 11, 12, 13, 14, 15)
}
func TestGlobalSeparatorRule(t *testing.T) {
- check(t, `int="%d"; / ="-"`, `1-2-3-4`, 1, 2, 3, 4);
- check(t, `int="%x%x"; / ="*"`, `aa*aa`, 10, 10);
+ check(t, `int="%d"; / ="-"`, `1-2-3-4`, 1, 2, 3, 4)
+ check(t, `int="%x%x"; / ="*"`, `aa*aa`, 10, 10)
}
@@ -229,22 +229,22 @@ func TestGlobalSeparatorRule(t *testing.T) {
// Formatting of a struct
type T1 struct {
- a int;
+ a int
}
const F1 = `datafmt "datafmt";` +
`int = "%d";` +
`datafmt.T1 = "<" a ">";`
-func TestStruct1(t *testing.T) { check(t, F1, "<42>", T1{42}) }
+func TestStruct1(t *testing.T) { check(t, F1, "<42>", T1{42}) }
// ----------------------------------------------------------------------------
// Formatting of a struct with an optional field (ptr)
type T2 struct {
- s string;
- p *T1;
+ s string
+ p *T1
}
const F2a = F1 +
@@ -258,9 +258,9 @@ const F2b = F1 +
`datafmt.T2 = s ("-" p "-" | "empty");`
func TestStruct2(t *testing.T) {
- check(t, F2a, "foo", T2{"foo", nil});
- check(t, F2a, "bar-<17>-", T2{"bar", &T1{17}});
- check(t, F2b, "fooempty", T2{"foo", nil});
+ check(t, F2a, "foo", T2{"foo", nil})
+ check(t, F2a, "bar-<17>-", T2{"bar", &T1{17}})
+ check(t, F2b, "fooempty", T2{"foo", nil})
}
@@ -268,8 +268,8 @@ func TestStruct2(t *testing.T) {
// Formatting of a struct with a repetitive field (slice)
type T3 struct {
- s string;
- a []int;
+ s string
+ a []int
}
const F3a = `datafmt "datafmt";` +
@@ -286,10 +286,10 @@ const F3b = `datafmt "datafmt";` +
`datafmt.T3 = s [a:empty ": " {a / "-"}]`
func TestStruct3(t *testing.T) {
- check(t, F3a, "foo", T3{"foo", nil});
- check(t, F3a, "foo 00, 11, 22", T3{"foo", []int{0, 1, 2}});
- check(t, F3b, "bar", T3{"bar", nil});
- check(t, F3b, "bal: 2-3-5", T3{"bal", []int{2, 3, 5}});
+ check(t, F3a, "foo", T3{"foo", nil})
+ check(t, F3a, "foo 00, 11, 22", T3{"foo", []int{0, 1, 2}})
+ check(t, F3b, "bar", T3{"bar", nil})
+ check(t, F3b, "bal: 2-3-5", T3{"bal", []int{2, 3, 5}})
}
@@ -297,8 +297,8 @@ func TestStruct3(t *testing.T) {
// Formatting of a struct with alternative field
type T4 struct {
- x *int;
- a []int;
+ x *int
+ a []int
}
const F4a = `datafmt "datafmt";` +
@@ -318,11 +318,11 @@ const F4b = `datafmt "datafmt";` +
`datafmt.T4 = "<" (a:empty {a / ", "} | "-") ">" `
func TestStruct4(t *testing.T) {
- x := 7;
- check(t, F4a, "<->", T4{nil, nil});
- check(t, F4a, "<7>", T4{&x, nil});
- check(t, F4b, "<->", T4{nil, nil});
- check(t, F4b, "<2, 3, 7>", T4{nil, []int{2, 3, 7}});
+ x := 7
+ check(t, F4a, "<->", T4{nil, nil})
+ check(t, F4a, "<7>", T4{&x, nil})
+ check(t, F4b, "<->", T4{nil, nil})
+ check(t, F4b, "<2, 3, 7>", T4{nil, []int{2, 3, 7}})
}
@@ -330,8 +330,8 @@ func TestStruct4(t *testing.T) {
// Formatting a struct (documentation example)
type Point struct {
- name string;
- x, y int;
+ name string
+ x, y int
}
const FPoint = `datafmt "datafmt";` +
@@ -341,8 +341,8 @@ const FPoint = `datafmt "datafmt";` +
`datafmt.Point = name "{" x ", " y:hexInt "}";`
func TestStructPoint(t *testing.T) {
- p := Point{"foo", 3, 15};
- check(t, FPoint, "---foo---{3, 0xf}", p);
+ p := Point{"foo", 3, 15}
+ check(t, FPoint, "---foo---{3, 0xf}", p)
}
@@ -352,7 +352,7 @@ func TestStructPoint(t *testing.T) {
const FSlice = `int = "%b";` +
`array = { * / ", " }`
-func TestSlice(t *testing.T) { check(t, FSlice, "10, 11, 101, 111", []int{2, 3, 5, 7}) }
+func TestSlice(t *testing.T) { check(t, FSlice, "10, 11, 101, 111", []int{2, 3, 5, 7}) }
// TODO add more tests
diff --git a/src/pkg/exp/datafmt/parser.go b/src/pkg/exp/datafmt/parser.go
index c8144d9f2..653771674 100644
--- a/src/pkg/exp/datafmt/parser.go
+++ b/src/pkg/exp/datafmt/parser.go
@@ -5,83 +5,83 @@
package datafmt
import (
- "container/vector";
- "go/scanner";
- "go/token";
- "os";
- "strconv";
- "strings";
+ "container/vector"
+ "go/scanner"
+ "go/token"
+ "os"
+ "strconv"
+ "strings"
)
// ----------------------------------------------------------------------------
// Parsing
type parser struct {
- scanner.ErrorVector;
- scanner scanner.Scanner;
- pos token.Position; // token position
- tok token.Token; // one token look-ahead
- lit []byte; // token literal
-
- packs map[string]string; // PackageName -> ImportPath
- rules map[string]expr; // RuleName -> Expression
+ scanner.ErrorVector
+ scanner scanner.Scanner
+ pos token.Position // token position
+ tok token.Token // one token look-ahead
+ lit []byte // token literal
+
+ packs map[string]string // PackageName -> ImportPath
+ rules map[string]expr // RuleName -> Expression
}
func (p *parser) next() {
- p.pos, p.tok, p.lit = p.scanner.Scan();
+ p.pos, p.tok, p.lit = p.scanner.Scan()
switch p.tok {
case token.CHAN, token.FUNC, token.INTERFACE, token.MAP, token.STRUCT:
// Go keywords for composite types are type names
// returned by reflect. Accept them as identifiers.
- p.tok = token.IDENT // p.lit is already set correctly
+ p.tok = token.IDENT // p.lit is already set correctly
}
}
func (p *parser) init(filename string, src []byte) {
- p.ErrorVector.Reset();
- p.scanner.Init(filename, src, p, scanner.AllowIllegalChars); // return '@' as token.ILLEGAL w/o error message
- p.next(); // initializes pos, tok, lit
- p.packs = make(map[string]string);
- p.rules = make(map[string]expr);
+ p.ErrorVector.Reset()
+ p.scanner.Init(filename, src, p, scanner.AllowIllegalChars) // return '@' as token.ILLEGAL w/o error message
+ p.next() // initializes pos, tok, lit
+ p.packs = make(map[string]string)
+ p.rules = make(map[string]expr)
}
func (p *parser) errorExpected(pos token.Position, msg string) {
- msg = "expected " + msg;
+ msg = "expected " + msg
if pos.Offset == p.pos.Offset {
// the error happened at the current position;
// make the error message more specific
- msg += ", found '" + p.tok.String() + "'";
+ msg += ", found '" + p.tok.String() + "'"
if p.tok.IsLiteral() {
msg += " " + string(p.lit)
}
}
- p.Error(pos, msg);
+ p.Error(pos, msg)
}
func (p *parser) expect(tok token.Token) token.Position {
- pos := p.pos;
+ pos := p.pos
if p.tok != tok {
p.errorExpected(pos, "'"+tok.String()+"'")
}
- p.next(); // make progress in any case
- return pos;
+ p.next() // make progress in any case
+ return pos
}
func (p *parser) parseIdentifier() string {
- name := string(p.lit);
- p.expect(token.IDENT);
- return name;
+ name := string(p.lit)
+ p.expect(token.IDENT)
+ return name
}
func (p *parser) parseTypeName() (string, bool) {
- pos := p.pos;
- name, isIdent := p.parseIdentifier(), true;
+ pos := p.pos
+ name, isIdent := p.parseIdentifier(), true
if p.tok == token.PERIOD {
// got a package name, lookup package
if importPath, found := p.packs[name]; found {
@@ -89,10 +89,10 @@ func (p *parser) parseTypeName() (string, bool) {
} else {
p.Error(pos, "package not declared: "+name)
}
- p.next();
- name, isIdent = name+"."+p.parseIdentifier(), false;
+ p.next()
+ name, isIdent = name+"."+p.parseIdentifier(), false
}
- return name, isIdent;
+ return name, isIdent
}
@@ -102,99 +102,99 @@ func (p *parser) parseTypeName() (string, bool) {
// single identifier only (and thus could be a package name).
//
func (p *parser) parseRuleName() (string, bool) {
- name, isIdent := "", false;
+ name, isIdent := "", false
switch p.tok {
case token.IDENT:
name, isIdent = p.parseTypeName()
case token.DEFAULT:
- name = "default";
- p.next();
+ name = "default"
+ p.next()
case token.QUO:
- name = "/";
- p.next();
+ name = "/"
+ p.next()
default:
- p.errorExpected(p.pos, "rule name");
- p.next(); // make progress in any case
+ p.errorExpected(p.pos, "rule name")
+ p.next() // make progress in any case
}
- return name, isIdent;
+ return name, isIdent
}
func (p *parser) parseString() string {
- s := "";
+ s := ""
if p.tok == token.STRING {
- s, _ = strconv.Unquote(string(p.lit));
+ s, _ = strconv.Unquote(string(p.lit))
// Unquote may fail with an error, but only if the scanner found
// an illegal string in the first place. In this case the error
// has already been reported.
- p.next();
- return s;
+ p.next()
+ return s
} else {
p.expect(token.STRING)
}
- return s;
+ return s
}
func (p *parser) parseLiteral() literal {
- s := strings.Bytes(p.parseString());
+ s := strings.Bytes(p.parseString())
// A string literal may contain %-format specifiers. To simplify
// and speed up printing of the literal, split it into segments
// that start with "%" possibly followed by a last segment that
// starts with some other character.
- var list vector.Vector;
- i0 := 0;
+ var list vector.Vector
+ i0 := 0
for i := 0; i < len(s); i++ {
if s[i] == '%' && i+1 < len(s) {
// the next segment starts with a % format
if i0 < i {
// the current segment is not empty, split it off
- list.Push(s[i0:i]);
- i0 = i;
+ list.Push(s[i0:i])
+ i0 = i
}
- i++; // skip %; let loop skip over char after %
+ i++ // skip %; let loop skip over char after %
}
}
// the final segment may start with any character
// (it is empty iff the string is empty)
- list.Push(s[i0:]);
+ list.Push(s[i0:])
// convert list into a literal
- lit := make(literal, list.Len());
+ lit := make(literal, list.Len())
for i := 0; i < list.Len(); i++ {
lit[i] = list.At(i).([]byte)
}
- return lit;
+ return lit
}
func (p *parser) parseField() expr {
- var fname string;
+ var fname string
switch p.tok {
case token.ILLEGAL:
if string(p.lit) != "@" {
return nil
}
- fname = "@";
- p.next();
+ fname = "@"
+ p.next()
case token.MUL:
- fname = "*";
- p.next();
+ fname = "*"
+ p.next()
case token.IDENT:
fname = p.parseIdentifier()
default:
return nil
}
- var ruleName string;
+ var ruleName string
if p.tok == token.COLON {
- p.next();
- ruleName, _ = p.parseRuleName();
+ p.next()
+ ruleName, _ = p.parseRuleName()
}
- return &field{fname, ruleName};
+ return &field{fname, ruleName}
}
@@ -204,40 +204,40 @@ func (p *parser) parseOperand() (x expr) {
x = p.parseLiteral()
case token.LPAREN:
- p.next();
- x = p.parseExpression();
+ p.next()
+ x = p.parseExpression()
if p.tok == token.SHR {
- p.next();
- x = &group{x, p.parseExpression()};
+ p.next()
+ x = &group{x, p.parseExpression()}
}
- p.expect(token.RPAREN);
+ p.expect(token.RPAREN)
case token.LBRACK:
- p.next();
- x = &option{p.parseExpression()};
- p.expect(token.RBRACK);
+ p.next()
+ x = &option{p.parseExpression()}
+ p.expect(token.RBRACK)
case token.LBRACE:
- p.next();
- x = p.parseExpression();
- var div expr;
+ p.next()
+ x = p.parseExpression()
+ var div expr
if p.tok == token.QUO {
- p.next();
- div = p.parseExpression();
+ p.next()
+ div = p.parseExpression()
}
- x = &repetition{x, div};
- p.expect(token.RBRACE);
+ x = &repetition{x, div}
+ p.expect(token.RBRACE)
default:
- x = p.parseField() // may be nil
+ x = p.parseField() // may be nil
}
- return x;
+ return x
}
func (p *parser) parseSequence() expr {
- var list vector.Vector;
+ var list vector.Vector
for x := p.parseOperand(); x != nil; x = p.parseOperand() {
list.Push(x)
@@ -252,26 +252,26 @@ func (p *parser) parseSequence() expr {
}
// convert list into a sequence
- seq := make(sequence, list.Len());
+ seq := make(sequence, list.Len())
for i := 0; i < list.Len(); i++ {
seq[i] = list.At(i).(expr)
}
- return seq;
+ return seq
}
func (p *parser) parseExpression() expr {
- var list vector.Vector;
+ var list vector.Vector
for {
- x := p.parseSequence();
+ x := p.parseSequence()
if x != nil {
list.Push(x)
}
if p.tok != token.OR {
break
}
- p.next();
+ p.next()
}
// no need for an alternatives if list.Len() < 2
@@ -283,23 +283,23 @@ func (p *parser) parseExpression() expr {
}
// convert list into a alternatives
- alt := make(alternatives, list.Len());
+ alt := make(alternatives, list.Len())
for i := 0; i < list.Len(); i++ {
alt[i] = list.At(i).(expr)
}
- return alt;
+ return alt
}
func (p *parser) parseFormat() {
for p.tok != token.EOF {
- pos := p.pos;
+ pos := p.pos
- name, isIdent := p.parseRuleName();
+ name, isIdent := p.parseRuleName()
switch p.tok {
case token.STRING:
// package declaration
- importPath := p.parseString();
+ importPath := p.parseString()
// add package declaration
if !isIdent {
@@ -312,8 +312,8 @@ func (p *parser) parseFormat() {
case token.ASSIGN:
// format rule
- p.next();
- x := p.parseExpression();
+ p.next()
+ x := p.parseExpression()
// add rule
if _, found := p.rules[name]; !found {
@@ -323,8 +323,8 @@ func (p *parser) parseFormat() {
}
default:
- p.errorExpected(p.pos, "package declaration or format rule");
- p.next(); // make progress in any case
+ p.errorExpected(p.pos, "package declaration or format rule")
+ p.next() // make progress in any case
}
if p.tok == token.SEMICOLON {
@@ -333,23 +333,23 @@ func (p *parser) parseFormat() {
break
}
}
- p.expect(token.EOF);
+ p.expect(token.EOF)
}
func remap(p *parser, name string) string {
- i := strings.Index(name, ".");
+ i := strings.Index(name, ".")
if i >= 0 {
- packageName, suffix := name[0:i], name[i:];
+ packageName, suffix := name[0:i], name[i:]
// lookup package
if importPath, found := p.packs[packageName]; found {
name = importPath + suffix
} else {
- var invalidPos token.Position;
- p.Error(invalidPos, "package not declared: "+packageName);
+ var invalidPos token.Position
+ p.Error(invalidPos, "package not declared: "+packageName)
}
}
- return name;
+ return name
}
@@ -360,20 +360,20 @@ func remap(p *parser, name string) string {
//
func Parse(filename string, src []byte, fmap FormatterMap) (Format, os.Error) {
// parse source
- var p parser;
- p.init(filename, src);
- p.parseFormat();
+ var p parser
+ p.init(filename, src)
+ p.parseFormat()
// add custom formatters, if any
for name, form := range fmap {
- name = remap(&p, name);
+ name = remap(&p, name)
if _, found := p.rules[name]; !found {
p.rules[name] = &custom{name, form}
} else {
- var invalidPos token.Position;
- p.Error(invalidPos, "formatter already declared: "+name);
+ var invalidPos token.Position
+ p.Error(invalidPos, "formatter already declared: "+name)
}
}
- return p.rules, p.GetError(scanner.NoMultiples);
+ return p.rules, p.GetError(scanner.NoMultiples)
}
diff --git a/src/pkg/exp/draw/arith.go b/src/pkg/exp/draw/arith.go
index 59830bba5..6ed1c4a5a 100644
--- a/src/pkg/exp/draw/arith.go
+++ b/src/pkg/exp/draw/arith.go
@@ -6,7 +6,7 @@ package draw
// A Point is an X, Y coordinate pair.
type Point struct {
- X, Y int;
+ X, Y int
}
// ZP is the zero Point.
@@ -14,35 +14,35 @@ var ZP Point
// A Rectangle contains the Points with Min.X <= X < Max.X, Min.Y <= Y < Max.Y.
type Rectangle struct {
- Min, Max Point;
+ Min, Max Point
}
// ZR is the zero Rectangle.
var ZR Rectangle
// Pt is shorthand for Point{X, Y}.
-func Pt(X, Y int) Point { return Point{X, Y} }
+func Pt(X, Y int) Point { return Point{X, Y} }
// Rect is shorthand for Rectangle{Pt(x0, y0), Pt(x1, y1)}.
-func Rect(x0, y0, x1, y1 int) Rectangle { return Rectangle{Point{x0, y0}, Point{x1, y1}} }
+func Rect(x0, y0, x1, y1 int) Rectangle { return Rectangle{Point{x0, y0}, Point{x1, y1}} }
// Rpt is shorthand for Rectangle{min, max}.
-func Rpt(min, max Point) Rectangle { return Rectangle{min, max} }
+func Rpt(min, max Point) Rectangle { return Rectangle{min, max} }
// Add returns the sum of p and q: Pt(p.X+q.X, p.Y+q.Y).
-func (p Point) Add(q Point) Point { return Point{p.X + q.X, p.Y + q.Y} }
+func (p Point) Add(q Point) Point { return Point{p.X + q.X, p.Y + q.Y} }
// Sub returns the difference of p and q: Pt(p.X-q.X, p.Y-q.Y).
-func (p Point) Sub(q Point) Point { return Point{p.X - q.X, p.Y - q.Y} }
+func (p Point) Sub(q Point) Point { return Point{p.X - q.X, p.Y - q.Y} }
// Mul returns p scaled by k: Pt(p.X*k p.Y*k).
-func (p Point) Mul(k int) Point { return Point{p.X * k, p.Y * k} }
+func (p Point) Mul(k int) Point { return Point{p.X * k, p.Y * k} }
// Div returns p divided by k: Pt(p.X/k, p.Y/k).
-func (p Point) Div(k int) Point { return Point{p.X / k, p.Y / k} }
+func (p Point) Div(k int) Point { return Point{p.X / k, p.Y / k} }
// Eq returns true if p and q are equal.
-func (p Point) Eq(q Point) bool { return p.X == q.X && p.Y == q.Y }
+func (p Point) Eq(q Point) bool { return p.X == q.X && p.Y == q.Y }
// Inset returns the rectangle r inset by n: Rect(r.Min.X+n, r.Min.Y+n, r.Max.X-n, r.Max.Y-n).
func (r Rectangle) Inset(n int) Rectangle {
@@ -50,10 +50,10 @@ func (r Rectangle) Inset(n int) Rectangle {
}
// Add returns the rectangle r translated by p: Rpt(r.Min.Add(p), r.Max.Add(p)).
-func (r Rectangle) Add(p Point) Rectangle { return Rectangle{r.Min.Add(p), r.Max.Add(p)} }
+func (r Rectangle) Add(p Point) Rectangle { return Rectangle{r.Min.Add(p), r.Max.Add(p)} }
// Sub returns the rectangle r translated by -p: Rpt(r.Min.Sub(p), r.Max.Sub(p)).
-func (r Rectangle) Sub(p Point) Rectangle { return Rectangle{r.Min.Sub(p), r.Max.Sub(p)} }
+func (r Rectangle) Sub(p Point) Rectangle { return Rectangle{r.Min.Sub(p), r.Max.Sub(p)} }
// Canon returns a canonical version of r: the returned rectangle
// has Min.X <= Max.X and Min.Y <= Max.Y.
@@ -64,7 +64,7 @@ func (r Rectangle) Canon() Rectangle {
if r.Max.Y < r.Min.Y {
r.Max.Y = r.Min.Y
}
- return r;
+ return r
}
// Overlaps returns true if r and r1 cross; that is, it returns true if they share any point.
@@ -74,7 +74,7 @@ func (r Rectangle) Overlaps(r1 Rectangle) bool {
}
// Empty retruns true if r contains no points.
-func (r Rectangle) Empty() bool { return r.Max.X <= r.Min.X || r.Max.Y <= r.Min.Y }
+func (r Rectangle) Empty() bool { return r.Max.X <= r.Min.X || r.Max.Y <= r.Min.Y }
// InRect returns true if all the points in r are also in r1.
func (r Rectangle) In(r1 Rectangle) bool {
@@ -85,7 +85,7 @@ func (r Rectangle) In(r1 Rectangle) bool {
return false
}
return r1.Min.X <= r.Min.X && r.Max.X <= r1.Max.X &&
- r1.Min.Y <= r.Min.Y && r.Max.Y <= r1.Max.Y;
+ r1.Min.Y <= r.Min.Y && r.Max.Y <= r1.Max.Y
}
// Combine returns the smallest rectangle containing all points from r and from r1.
@@ -108,7 +108,7 @@ func (r Rectangle) Combine(r1 Rectangle) Rectangle {
if r.Max.Y < r1.Max.Y {
r.Max.Y = r1.Max.Y
}
- return r;
+ return r
}
// Clip returns the largest rectangle containing only points shared by r and r1.
@@ -131,11 +131,11 @@ func (r Rectangle) Clip(r1 Rectangle) Rectangle {
if r.Max.Y > r1.Max.Y {
r.Max.Y = r1.Max.Y
}
- return r;
+ return r
}
// Dx returns the width of the rectangle r: r.Max.X - r.Min.X.
-func (r Rectangle) Dx() int { return r.Max.X - r.Min.X }
+func (r Rectangle) Dx() int { return r.Max.X - r.Min.X }
// Dy returns the width of the rectangle r: r.Max.Y - r.Min.Y.
-func (r Rectangle) Dy() int { return r.Max.Y - r.Min.Y }
+func (r Rectangle) Dy() int { return r.Max.Y - r.Min.Y }
diff --git a/src/pkg/exp/draw/color.go b/src/pkg/exp/draw/color.go
index 1ebb3a21b..f0e759709 100644
--- a/src/pkg/exp/draw/color.go
+++ b/src/pkg/exp/draw/color.go
@@ -19,91 +19,91 @@ var _ image.Color = Black
var _ image.Image = Black
var (
- Opaque Color = 0xFFFFFFFF;
- Transparent Color = 0x00000000;
- Black Color = 0x000000FF;
- White Color = 0xFFFFFFFF;
- Red Color = 0xFF0000FF;
- Green Color = 0x00FF00FF;
- Blue Color = 0x0000FFFF;
- Cyan Color = 0x00FFFFFF;
- Magenta Color = 0xFF00FFFF;
- Yellow Color = 0xFFFF00FF;
- PaleYellow Color = 0xFFFFAAFF;
- DarkYellow Color = 0xEEEE9EFF;
- DarkGreen Color = 0x448844FF;
- PaleGreen Color = 0xAAFFAAFF;
- MedGreen Color = 0x88CC88FF;
- DarkBlue Color = 0x000055FF;
- PaleBlueGreen Color = 0xAAFFFFFF;
- PaleBlue Color = 0x0000BBFF;
- BlueGreen Color = 0x008888FF;
- GreyGreen Color = 0x55AAAAFF;
- PaleGreyGreen Color = 0x9EEEEEFF;
- YellowGreen Color = 0x99994CFF;
- MedBlue Color = 0x000099FF;
- GreyBlue Color = 0x005DBBFF;
- PaleGreyBlue Color = 0x4993DDFF;
- PurpleBlue Color = 0x8888CCFF;
+ Opaque Color = 0xFFFFFFFF
+ Transparent Color = 0x00000000
+ Black Color = 0x000000FF
+ White Color = 0xFFFFFFFF
+ Red Color = 0xFF0000FF
+ Green Color = 0x00FF00FF
+ Blue Color = 0x0000FFFF
+ Cyan Color = 0x00FFFFFF
+ Magenta Color = 0xFF00FFFF
+ Yellow Color = 0xFFFF00FF
+ PaleYellow Color = 0xFFFFAAFF
+ DarkYellow Color = 0xEEEE9EFF
+ DarkGreen Color = 0x448844FF
+ PaleGreen Color = 0xAAFFAAFF
+ MedGreen Color = 0x88CC88FF
+ DarkBlue Color = 0x000055FF
+ PaleBlueGreen Color = 0xAAFFFFFF
+ PaleBlue Color = 0x0000BBFF
+ BlueGreen Color = 0x008888FF
+ GreyGreen Color = 0x55AAAAFF
+ PaleGreyGreen Color = 0x9EEEEEFF
+ YellowGreen Color = 0x99994CFF
+ MedBlue Color = 0x000099FF
+ GreyBlue Color = 0x005DBBFF
+ PaleGreyBlue Color = 0x4993DDFF
+ PurpleBlue Color = 0x8888CCFF
)
func (c Color) RGBA() (r, g, b, a uint32) {
- x := uint32(c);
- r, g, b, a = x>>24, (x>>16)&0xFF, (x>>8)&0xFF, x&0xFF;
- r |= r << 8;
- r |= r << 16;
- g |= g << 8;
- g |= g << 16;
- b |= b << 8;
- b |= b << 16;
- a |= a << 8;
- a |= a << 16;
- return;
+ x := uint32(c)
+ r, g, b, a = x>>24, (x>>16)&0xFF, (x>>8)&0xFF, x&0xFF
+ r |= r << 8
+ r |= r << 16
+ g |= g << 8
+ g |= g << 16
+ b |= b << 8
+ b |= b << 16
+ a |= a << 8
+ a |= a << 16
+ return
}
// SetAlpha returns the color obtained by changing
// c's alpha value to a and scaling r, g, and b appropriately.
func (c Color) SetAlpha(a uint8) Color {
- r, g, b, oa := c>>24, (c>>16)&0xFF, (c>>8)&0xFF, c&0xFF;
+ r, g, b, oa := c>>24, (c>>16)&0xFF, (c>>8)&0xFF, c&0xFF
if oa == 0 {
return 0
}
- r = r * Color(a) / oa;
+ r = r * Color(a) / oa
if r < 0 {
r = 0
}
if r > 0xFF {
r = 0xFF
}
- g = g * Color(a) / oa;
+ g = g * Color(a) / oa
if g < 0 {
g = 0
}
if g > 0xFF {
g = 0xFF
}
- b = b * Color(a) / oa;
+ b = b * Color(a) / oa
if b < 0 {
b = 0
}
if b > 0xFF {
b = 0xFF
}
- return r<<24 | g<<16 | b<<8 | Color(a);
+ return r<<24 | g<<16 | b<<8 | Color(a)
}
-func (c Color) Width() int { return 1e9 }
+func (c Color) Width() int { return 1e9 }
-func (c Color) Height() int { return 1e9 }
+func (c Color) Height() int { return 1e9 }
-func (c Color) At(x, y int) image.Color { return c }
+func (c Color) At(x, y int) image.Color { return c }
func toColor(color image.Color) image.Color {
if c, ok := color.(Color); ok {
return c
}
- r, g, b, a := color.RGBA();
- return Color(r>>24<<24 | g>>24<<16 | b>>24<<8 | a>>24);
+ r, g, b, a := color.RGBA()
+ return Color(r>>24<<24 | g>>24<<16 | b>>24<<8 | a>>24)
}
-func (c Color) ColorModel() image.ColorModel { return image.ColorModelFunc(toColor) }
+func (c Color) ColorModel() image.ColorModel { return image.ColorModelFunc(toColor) }
diff --git a/src/pkg/exp/draw/draw.go b/src/pkg/exp/draw/draw.go
index d01cdcc16..59adf1f6a 100644
--- a/src/pkg/exp/draw/draw.go
+++ b/src/pkg/exp/draw/draw.go
@@ -14,8 +14,8 @@ import "image"
// A draw.Image is an image.Image with a Set method to change a single pixel.
type Image interface {
- image.Image;
- Set(x, y int, c image.Color);
+ image.Image
+ Set(x, y int, c image.Color)
}
// Draw aligns r.Min in dst with pt in src and mask
@@ -27,7 +27,7 @@ type Image interface {
func Draw(dst Image, r Rectangle, src, mask image.Image, pt Point) {
// Plenty of room for optimizations here.
- dx, dy := src.Width(), src.Height();
+ dx, dy := src.Width(), src.Height()
if mask != nil {
if dx > mask.Width() {
dx = mask.Width()
@@ -36,8 +36,8 @@ func Draw(dst Image, r Rectangle, src, mask image.Image, pt Point) {
dy = mask.Width()
}
}
- dx -= pt.X;
- dy -= pt.Y;
+ dx -= pt.X
+ dy -= pt.Y
if r.Dx() > dx {
r.Max.X = r.Min.X + dx
}
@@ -45,57 +45,57 @@ func Draw(dst Image, r Rectangle, src, mask image.Image, pt Point) {
r.Max.Y = r.Min.Y + dy
}
- x0, x1, dx := r.Min.X, r.Max.X, 1;
- y0, y1, dy := r.Min.Y, r.Max.Y, 1;
+ x0, x1, dx := r.Min.X, r.Max.X, 1
+ y0, y1, dy := r.Min.Y, r.Max.Y, 1
if image.Image(dst) == src && r.Overlaps(r.Add(pt.Sub(r.Min))) {
// Rectangles overlap: process backward?
if pt.Y < r.Min.Y || pt.Y == r.Min.Y && pt.X < r.Min.X {
- x0, x1, dx = x1-1, x0-1, -1;
- y0, y1, dy = y1-1, y0-1, -1;
+ x0, x1, dx = x1-1, x0-1, -1
+ y0, y1, dy = y1-1, y0-1, -1
}
}
- var out *image.RGBA64Color;
+ var out *image.RGBA64Color
for y := y0; y != y1; y += dy {
for x := x0; x != x1; x += dx {
- sx := pt.X + x - r.Min.X;
- sy := pt.Y + y - r.Min.Y;
+ sx := pt.X + x - r.Min.X
+ sy := pt.Y + y - r.Min.Y
if mask == nil {
- dst.Set(x, y, src.At(sx, sy));
- continue;
+ dst.Set(x, y, src.At(sx, sy))
+ continue
}
- _, _, _, ma := mask.At(sx, sy).RGBA();
+ _, _, _, ma := mask.At(sx, sy).RGBA()
switch ma {
case 0:
continue
case 0xFFFFFFFF:
dst.Set(x, y, src.At(sx, sy))
default:
- dr, dg, db, da := dst.At(x, y).RGBA();
- dr >>= 16;
- dg >>= 16;
- db >>= 16;
- da >>= 16;
- sr, sg, sb, sa := src.At(sx, sy).RGBA();
- sr >>= 16;
- sg >>= 16;
- sb >>= 16;
- sa >>= 16;
- ma >>= 16;
- const M = 1<<16 - 1;
- a := sa * ma / M;
- dr = (dr*(M-a) + sr*ma) / M;
- dg = (dg*(M-a) + sg*ma) / M;
- db = (db*(M-a) + sb*ma) / M;
- da = (da*(M-a) + sa*ma) / M;
+ dr, dg, db, da := dst.At(x, y).RGBA()
+ dr >>= 16
+ dg >>= 16
+ db >>= 16
+ da >>= 16
+ sr, sg, sb, sa := src.At(sx, sy).RGBA()
+ sr >>= 16
+ sg >>= 16
+ sb >>= 16
+ sa >>= 16
+ ma >>= 16
+ const M = 1<<16 - 1
+ a := sa * ma / M
+ dr = (dr*(M-a) + sr*ma) / M
+ dg = (dg*(M-a) + sg*ma) / M
+ db = (db*(M-a) + sb*ma) / M
+ da = (da*(M-a) + sa*ma) / M
if out == nil {
out = new(image.RGBA64Color)
}
- out.R = uint16(dr);
- out.G = uint16(dg);
- out.B = uint16(db);
- out.A = uint16(da);
- dst.Set(x, y, out);
+ out.R = uint16(dr)
+ out.G = uint16(dg)
+ out.B = uint16(db)
+ out.A = uint16(da)
+ dst.Set(x, y, out)
}
}
}
@@ -106,20 +106,20 @@ func Draw(dst Image, r Rectangle, src, mask image.Image, pt Point) {
// operation ``src over dst.'' If w is positive, the border extends w pixels inside r.
// If w is negative, the border extends w pixels outside r.
func Border(dst Image, r Rectangle, w int, src image.Image, sp Point) {
- i := w;
+ i := w
if i > 0 {
// inside r
- Draw(dst, Rect(r.Min.X, r.Min.Y, r.Max.X, r.Min.Y+i), src, nil, sp); // top
- Draw(dst, Rect(r.Min.X, r.Min.Y+i, r.Min.X+i, r.Max.Y-i), src, nil, sp.Add(Pt(0, i))); // left
- Draw(dst, Rect(r.Max.X-i, r.Min.Y+i, r.Max.X, r.Max.Y-i), src, nil, sp.Add(Pt(r.Dx()-i, i))); // right
- Draw(dst, Rect(r.Min.X, r.Max.Y-i, r.Max.X, r.Max.Y), src, nil, sp.Add(Pt(0, r.Dy()-i))); // bottom
- return;
+ Draw(dst, Rect(r.Min.X, r.Min.Y, r.Max.X, r.Min.Y+i), src, nil, sp) // top
+ Draw(dst, Rect(r.Min.X, r.Min.Y+i, r.Min.X+i, r.Max.Y-i), src, nil, sp.Add(Pt(0, i))) // left
+ Draw(dst, Rect(r.Max.X-i, r.Min.Y+i, r.Max.X, r.Max.Y-i), src, nil, sp.Add(Pt(r.Dx()-i, i))) // right
+ Draw(dst, Rect(r.Min.X, r.Max.Y-i, r.Max.X, r.Max.Y), src, nil, sp.Add(Pt(0, r.Dy()-i))) // bottom
+ return
}
// outside r;
- i = -i;
- Draw(dst, Rect(r.Min.X-i, r.Min.Y-i, r.Max.X+i, r.Min.Y), src, nil, sp.Add(Pt(-i, -i))); // top
- Draw(dst, Rect(r.Min.X-i, r.Min.Y, r.Min.X, r.Max.Y), src, nil, sp.Add(Pt(-i, 0))); // left
- Draw(dst, Rect(r.Max.X, r.Min.Y, r.Max.X+i, r.Max.Y), src, nil, sp.Add(Pt(r.Dx(), 0))); // right
- Draw(dst, Rect(r.Min.X-i, r.Max.Y, r.Max.X+i, r.Max.Y+i), src, nil, sp.Add(Pt(-i, 0))); // bottom
+ i = -i
+ Draw(dst, Rect(r.Min.X-i, r.Min.Y-i, r.Max.X+i, r.Min.Y), src, nil, sp.Add(Pt(-i, -i))) // top
+ Draw(dst, Rect(r.Min.X-i, r.Min.Y, r.Min.X, r.Max.Y), src, nil, sp.Add(Pt(-i, 0))) // left
+ Draw(dst, Rect(r.Max.X, r.Min.Y, r.Max.X+i, r.Max.Y), src, nil, sp.Add(Pt(r.Dx(), 0))) // right
+ Draw(dst, Rect(r.Min.X-i, r.Max.Y, r.Max.X+i, r.Max.Y+i), src, nil, sp.Add(Pt(-i, 0))) // bottom
}
diff --git a/src/pkg/exp/draw/event.go b/src/pkg/exp/draw/event.go
index 8a148bd48..155922d1c 100644
--- a/src/pkg/exp/draw/event.go
+++ b/src/pkg/exp/draw/event.go
@@ -7,10 +7,10 @@ package draw
// A Context represents a single graphics window.
type Context interface {
// Screen returns an editable Image of window.
- Screen() Image;
+ Screen() Image
// FlushImage flushes changes made to Screen() back to screen.
- FlushImage();
+ FlushImage()
// KeyboardChan returns a channel carrying keystrokes.
// An event is sent each time a key is pressed or released.
@@ -18,29 +18,29 @@ type Context interface {
// The value -k represents key k being released.
// The specific set of key values is not specified,
// but ordinary character represent themselves.
- KeyboardChan() <-chan int;
+ KeyboardChan() <-chan int
// MouseChan returns a channel carrying mouse events.
// A new event is sent each time the mouse moves or a
// button is pressed or released.
- MouseChan() <-chan Mouse;
+ MouseChan() <-chan Mouse
// ResizeChan returns a channel carrying resize events.
// An event is sent each time the window is resized;
// the client should respond by calling Screen() to obtain
// the new screen image.
// The value sent on the channel is always ``true'' and can be ignored.
- ResizeChan() <-chan bool;
+ ResizeChan() <-chan bool
// QuitChan returns a channel carrying quit requests.
// After reading a value from the quit channel, the application
// should exit.
- QuitChan() <-chan bool;
+ QuitChan() <-chan bool
}
// A Mouse represents the state of the mouse.
type Mouse struct {
- Buttons int; // bit mask of buttons: 1<<0 is left, 1<<1 middle, 1<<2 right
- Point; // location of cursor
- Nsec int64; // time stamp
+ Buttons int // bit mask of buttons: 1<<0 is left, 1<<1 middle, 1<<2 right
+ Point // location of cursor
+ Nsec int64 // time stamp
}
diff --git a/src/pkg/exp/draw/x11/auth.go b/src/pkg/exp/draw/x11/auth.go
index 8a90bf364..82dd58c28 100644
--- a/src/pkg/exp/draw/x11/auth.go
+++ b/src/pkg/exp/draw/x11/auth.go
@@ -5,92 +5,92 @@
package x11
import (
- "bufio";
- "io";
- "os";
+ "bufio"
+ "io"
+ "os"
)
// Reads the DISPLAY environment variable, and returns the "12" in ":12.0".
func getDisplay() string {
- d := os.Getenv("DISPLAY");
+ d := os.Getenv("DISPLAY")
if len(d) < 1 || d[0] != ':' {
return ""
}
- i := 1;
+ i := 1
for ; i < len(d); i++ {
if d[i] < '0' || d[i] > '9' {
break
}
}
- return d[1:i];
+ return d[1:i]
}
// Reads a big-endian uint16 from r, using b as a scratch buffer.
func readU16BE(r io.Reader, b []byte) (uint16, os.Error) {
- _, err := io.ReadFull(r, b[0:2]);
+ _, err := io.ReadFull(r, b[0:2])
if err != nil {
return 0, err
}
- return uint16(b[0])<<8 + uint16(b[1]), nil;
+ return uint16(b[0])<<8 + uint16(b[1]), nil
}
// Reads a length-prefixed string from r, using b as a scratch buffer.
func readStr(r io.Reader, b []byte) (s string, err os.Error) {
- n, err := readU16BE(r, b);
+ n, err := readU16BE(r, b)
if err != nil {
return
}
if int(n) > len(b) {
return s, os.NewError("Xauthority entry too long for buffer")
}
- _, err = io.ReadFull(r, b[0:n]);
+ _, err = io.ReadFull(r, b[0:n])
if err != nil {
return
}
- return string(b[0:n]), nil;
+ return string(b[0:n]), nil
}
// Reads the ~/.Xauthority file and returns the name/data pair for the DISPLAY.
// b is a scratch buffer to use, and should be at least 256 bytes long (i.e. it should be able to hold a hostname).
func readAuth(b []byte) (name, data string, err os.Error) {
// As per /usr/include/X11/Xauth.h.
- const familyLocal = 256;
+ const familyLocal = 256
- home := os.Getenv("HOME");
+ home := os.Getenv("HOME")
if len(home) == 0 {
- err = os.NewError("unknown HOME");
- return;
+ err = os.NewError("unknown HOME")
+ return
}
- r, err := os.Open(home+"/.Xauthority", os.O_RDONLY, 0444);
+ r, err := os.Open(home+"/.Xauthority", os.O_RDONLY, 0444)
if err != nil {
return
}
- defer r.Close();
- br := bufio.NewReader(r);
+ defer r.Close()
+ br := bufio.NewReader(r)
- hostname, err := os.Hostname();
+ hostname, err := os.Hostname()
if err != nil {
return
}
- display := getDisplay();
+ display := getDisplay()
for {
- family, err := readU16BE(br, b[0:2]);
+ family, err := readU16BE(br, b[0:2])
if err != nil {
return
}
- addr, err := readStr(br, b[0:]);
+ addr, err := readStr(br, b[0:])
if err != nil {
return
}
- disp, err := readStr(br, b[0:]);
+ disp, err := readStr(br, b[0:])
if err != nil {
return
}
- name0, err := readStr(br, b[0:]);
+ name0, err := readStr(br, b[0:])
if err != nil {
return
}
- data0, err := readStr(br, b[0:]);
+ data0, err := readStr(br, b[0:])
if err != nil {
return
}
@@ -98,5 +98,5 @@ func readAuth(b []byte) (name, data string, err os.Error) {
return name0, data0, nil
}
}
- panic("unreachable");
+ panic("unreachable")
}
diff --git a/src/pkg/exp/draw/x11/conn.go b/src/pkg/exp/draw/x11/conn.go
index cb764d11c..f7eb740e1 100644
--- a/src/pkg/exp/draw/x11/conn.go
+++ b/src/pkg/exp/draw/x11/conn.go
@@ -11,51 +11,51 @@ package x11
// BUG(nigeltao): This is a toy library and not ready for production use.
import (
- "bufio";
- "exp/draw";
- "image";
- "io";
- "net";
- "os";
+ "bufio"
+ "exp/draw"
+ "image"
+ "io"
+ "net"
+ "os"
)
-type resID uint32 // X resource IDs.
+type resID uint32 // X resource IDs.
// TODO(nigeltao): Handle window resizes.
const (
- windowHeight = 600;
- windowWidth = 800;
+ windowHeight = 600
+ windowWidth = 800
)
type conn struct {
// TODO(nigeltao): Figure out which goroutine should be responsible for closing c,
// or if there is a race condition if one goroutine calls c.Close whilst another one
// is reading from r, or writing to w.
- c io.Closer;
- r *bufio.Reader;
- w *bufio.Writer;
+ c io.Closer
+ r *bufio.Reader
+ w *bufio.Writer
- gc, window, root, visual resID;
+ gc, window, root, visual resID
- img *image.RGBA;
- kbd chan int;
- mouse chan draw.Mouse;
- resize chan bool;
- quit chan bool;
- mouseState draw.Mouse;
+ img *image.RGBA
+ kbd chan int
+ mouse chan draw.Mouse
+ resize chan bool
+ quit chan bool
+ mouseState draw.Mouse
- buf [256]byte; // General purpose scratch buffer.
+ buf [256]byte // General purpose scratch buffer.
- flush chan bool;
- flushBuf0 [24]byte;
- flushBuf1 [4 * 1024]byte;
+ flush chan bool
+ flushBuf0 [24]byte
+ flushBuf1 [4 * 1024]byte
}
// flusher runs in its own goroutine, serving both FlushImage calls directly from the exp/draw client
// and indirectly from X expose events. It paints c.img to the X server via PutImage requests.
func (c *conn) flusher() {
for {
- _ = <-c.flush;
+ _ = <-c.flush
if closed(c.flush) {
return
}
@@ -65,57 +65,57 @@ func (c *conn) flusher() {
// the entire image in one X request. This approach could easily be optimized (or the
// X protocol may have an escape sequence to delimit very large requests).
// TODO(nigeltao): See what XCB's xcb_put_image does in this situation.
- w, h := c.img.Width(), c.img.Height();
- units := 6 + w;
+ w, h := c.img.Width(), c.img.Height()
+ units := 6 + w
if units > 0xffff || h > 0xffff {
// This window is too large for X.
- close(c.flush);
- return;
+ close(c.flush)
+ return
}
- c.flushBuf0[0] = 0x48; // PutImage opcode.
- c.flushBuf0[1] = 0x02; // XCB_IMAGE_FORMAT_Z_PIXMAP.
- c.flushBuf0[2] = uint8(units);
- c.flushBuf0[3] = uint8(units >> 8);
- setU32LE(c.flushBuf0[4:8], uint32(c.window));
- setU32LE(c.flushBuf0[8:12], uint32(c.gc));
- setU32LE(c.flushBuf0[12:16], 1<<16|uint32(w));
- c.flushBuf0[21] = 0x18; // depth = 24 bits.
+ c.flushBuf0[0] = 0x48 // PutImage opcode.
+ c.flushBuf0[1] = 0x02 // XCB_IMAGE_FORMAT_Z_PIXMAP.
+ c.flushBuf0[2] = uint8(units)
+ c.flushBuf0[3] = uint8(units >> 8)
+ setU32LE(c.flushBuf0[4:8], uint32(c.window))
+ setU32LE(c.flushBuf0[8:12], uint32(c.gc))
+ setU32LE(c.flushBuf0[12:16], 1<<16|uint32(w))
+ c.flushBuf0[21] = 0x18 // depth = 24 bits.
for y := 0; y < h; y++ {
- setU32LE(c.flushBuf0[16:20], uint32(y<<16));
- _, err := c.w.Write(c.flushBuf0[0:24]);
+ setU32LE(c.flushBuf0[16:20], uint32(y<<16))
+ _, err := c.w.Write(c.flushBuf0[0:24])
if err != nil {
- close(c.flush);
- return;
+ close(c.flush)
+ return
}
for x := 0; x < w; {
- nx := w - x;
+ nx := w - x
if nx > len(c.flushBuf1)/4 {
nx = len(c.flushBuf1) / 4
}
for i := 0; i < nx; i++ {
- r, g, b, _ := c.img.At(x, y).RGBA();
- c.flushBuf1[4*i+0] = uint8(b >> 24);
- c.flushBuf1[4*i+1] = uint8(g >> 24);
- c.flushBuf1[4*i+2] = uint8(r >> 24);
- x++;
+ r, g, b, _ := c.img.At(x, y).RGBA()
+ c.flushBuf1[4*i+0] = uint8(b >> 24)
+ c.flushBuf1[4*i+1] = uint8(g >> 24)
+ c.flushBuf1[4*i+2] = uint8(r >> 24)
+ x++
}
- _, err := c.w.Write(c.flushBuf1[0 : 4*nx]);
+ _, err := c.w.Write(c.flushBuf1[0 : 4*nx])
if err != nil {
- close(c.flush);
- return;
+ close(c.flush)
+ return
}
}
}
if c.w.Flush() != nil {
- close(c.flush);
- return;
+ close(c.flush)
+ return
}
}
}
-func (c *conn) Screen() draw.Image { return c.img }
+func (c *conn) Screen() draw.Image { return c.img }
func (c *conn) FlushImage() {
// We do the send (the <- operator) in an expression context, rather than in
@@ -124,19 +124,19 @@ func (c *conn) FlushImage() {
_ = c.flush <- false
}
-func (c *conn) KeyboardChan() <-chan int { return c.kbd }
+func (c *conn) KeyboardChan() <-chan int { return c.kbd }
-func (c *conn) MouseChan() <-chan draw.Mouse { return c.mouse }
+func (c *conn) MouseChan() <-chan draw.Mouse { return c.mouse }
-func (c *conn) ResizeChan() <-chan bool { return c.resize }
+func (c *conn) ResizeChan() <-chan bool { return c.resize }
-func (c *conn) QuitChan() <-chan bool { return c.quit }
+func (c *conn) QuitChan() <-chan bool { return c.quit }
// pumper runs in its own goroutine, reading X events and demuxing them over the kbd / mouse / resize / quit chans.
func (c *conn) pumper() {
for {
// X events are always 32 bytes long.
- _, err := io.ReadFull(c.r, c.buf[0:32]);
+ _, err := io.ReadFull(c.r, c.buf[0:32])
if err != nil {
// TODO(nigeltao): should draw.Context expose err?
// TODO(nigeltao): should we do c.quit<-true? Should c.quit be a buffered channel?
@@ -145,12 +145,12 @@ func (c *conn) pumper() {
break
}
switch c.buf[0] {
- case 0x02, 0x03: // Key press, key release.
+ case 0x02, 0x03: // Key press, key release.
// BUG(nigeltao): Keycode to keysym mapping is not implemented.
// The keycode is in c.buf[1], but as keymaps aren't implemented yet, we'll use the
// space character as a placeholder.
- keysym := int(' ');
+ keysym := int(' ')
// TODO(nigeltao): Should we send KeyboardChan ints for Shift/Ctrl/Alt? Should Shift-A send
// the same int down the channel as the sent on just the A key?
// TODO(nigeltao): How should IME events (e.g. key presses that should generate CJK text) work? Or
@@ -158,29 +158,29 @@ func (c *conn) pumper() {
if c.buf[0] == 0x03 {
keysym = -keysym
}
- c.kbd <- keysym;
- case 0x04, 0x05: // Button press, button release.
- mask := 1 << (c.buf[1] - 1);
+ c.kbd <- keysym
+ case 0x04, 0x05: // Button press, button release.
+ mask := 1 << (c.buf[1] - 1)
if c.buf[0] == 0x04 {
c.mouseState.Buttons |= mask
} else {
c.mouseState.Buttons &^= mask
}
// TODO(nigeltao): update mouseState's timestamp.
- c.mouse <- c.mouseState;
- case 0x06: // Motion notify.
- c.mouseState.Point.X = int(c.buf[25])<<8 | int(c.buf[24]);
- c.mouseState.Point.Y = int(c.buf[27])<<8 | int(c.buf[26]);
+ c.mouse <- c.mouseState
+ case 0x06: // Motion notify.
+ c.mouseState.Point.X = int(c.buf[25])<<8 | int(c.buf[24])
+ c.mouseState.Point.Y = int(c.buf[27])<<8 | int(c.buf[26])
// TODO(nigeltao): update mouseState's timestamp.
- c.mouse <- c.mouseState;
- case 0x0c: // Expose.
+ c.mouse <- c.mouseState
+ case 0x0c: // Expose.
// A single user action could trigger multiple expose events (e.g. if moving another
// window with XShape'd rounded corners over our window). In that case, the X server
// will send a count (in bytes 16-17) of the number of additional expose events coming.
// We could parse each event for the (x, y, width, height) and maintain a minimal dirty
// rectangle, but for now, the simplest approach is to paint the entire window, when
// receiving the final event in the series.
- count := int(c.buf[17])<<8 | int(c.buf[16]);
+ count := int(c.buf[17])<<8 | int(c.buf[16])
if count == 0 {
// TODO(nigeltao): Should we ignore the very first expose event? A freshly mapped window
// will trigger expose, but until the first c.FlushImage call, there's probably nothing to
@@ -192,14 +192,14 @@ func (c *conn) pumper() {
// What about EnterNotify (0x07) and LeaveNotify (0x08)?
}
}
- close(c.flush);
+ close(c.flush)
// TODO(nigeltao): Is this the right place for c.c.Close()?
// TODO(nigeltao): Should we explicitly close our kbd/mouse/resize/quit chans?
}
// Authenticate ourselves with the X server.
func (c *conn) authenticate() os.Error {
- key, value, err := readAuth(c.buf[0:]);
+ key, value, err := readAuth(c.buf[0:])
if err != nil {
return err
}
@@ -210,69 +210,69 @@ func (c *conn) authenticate() os.Error {
// 0x006c means little-endian. 0x000b, 0x0000 means X major version 11, minor version 0.
// 0x0012 and 0x0010 means the auth key and value have lenths 18 and 16.
// The final 0x0000 is padding, so that the string length is a multiple of 4.
- _, err = io.WriteString(c.w, "\x6c\x00\x0b\x00\x00\x00\x12\x00\x10\x00\x00\x00");
+ _, err = io.WriteString(c.w, "\x6c\x00\x0b\x00\x00\x00\x12\x00\x10\x00\x00\x00")
if err != nil {
return err
}
- _, err = io.WriteString(c.w, key);
+ _, err = io.WriteString(c.w, key)
if err != nil {
return err
}
// Again, the 0x0000 is padding.
- _, err = io.WriteString(c.w, "\x00\x00");
+ _, err = io.WriteString(c.w, "\x00\x00")
if err != nil {
return err
}
- _, err = io.WriteString(c.w, value);
+ _, err = io.WriteString(c.w, value)
if err != nil {
return err
}
- err = c.w.Flush();
+ err = c.w.Flush()
if err != nil {
return err
}
- return nil;
+ return nil
}
// Reads a uint8 from r, using b as a scratch buffer.
func readU8(r io.Reader, b []byte) (uint8, os.Error) {
- _, err := io.ReadFull(r, b[0:1]);
+ _, err := io.ReadFull(r, b[0:1])
if err != nil {
return 0, err
}
- return uint8(b[0]), nil;
+ return uint8(b[0]), nil
}
// Reads a little-endian uint16 from r, using b as a scratch buffer.
func readU16LE(r io.Reader, b []byte) (uint16, os.Error) {
- _, err := io.ReadFull(r, b[0:2]);
+ _, err := io.ReadFull(r, b[0:2])
if err != nil {
return 0, err
}
- return uint16(b[0]) | uint16(b[1])<<8, nil;
+ return uint16(b[0]) | uint16(b[1])<<8, nil
}
// Reads a little-endian uint32 from r, using b as a scratch buffer.
func readU32LE(r io.Reader, b []byte) (uint32, os.Error) {
- _, err := io.ReadFull(r, b[0:4]);
+ _, err := io.ReadFull(r, b[0:4])
if err != nil {
return 0, err
}
- return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, nil;
+ return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, nil
}
// Sets b[0:4] to be the big-endian representation of u.
func setU32LE(b []byte, u uint32) {
- b[0] = byte((u >> 0) & 0xff);
- b[1] = byte((u >> 8) & 0xff);
- b[2] = byte((u >> 16) & 0xff);
- b[3] = byte((u >> 24) & 0xff);
+ b[0] = byte((u >> 0) & 0xff)
+ b[1] = byte((u >> 8) & 0xff)
+ b[2] = byte((u >> 16) & 0xff)
+ b[3] = byte((u >> 24) & 0xff)
}
// Check that we have an agreeable X pixmap Format.
func checkPixmapFormats(r io.Reader, b []byte, n int) (agree bool, err os.Error) {
for i := 0; i < n; i++ {
- _, err = io.ReadFull(r, b[0:8]);
+ _, err = io.ReadFull(r, b[0:8])
if err != nil {
return
}
@@ -281,35 +281,35 @@ func checkPixmapFormats(r io.Reader, b []byte, n int) (agree bool, err os.Error)
agree = true
}
}
- return;
+ return
}
// Check that we have an agreeable X Depth (i.e. one that has an agreeable X VisualType).
func checkDepths(r io.Reader, b []byte, n int, visual uint32) (agree bool, err os.Error) {
for i := 0; i < n; i++ {
- depth, err := readU16LE(r, b);
+ depth, err := readU16LE(r, b)
if err != nil {
return
}
- depth &= 0xff;
- visualsLen, err := readU16LE(r, b);
+ depth &= 0xff
+ visualsLen, err := readU16LE(r, b)
if err != nil {
return
}
// Ignore 4 bytes of padding.
- _, err = io.ReadFull(r, b[0:4]);
+ _, err = io.ReadFull(r, b[0:4])
if err != nil {
return
}
for j := 0; j < int(visualsLen); j++ {
// Read 24 bytes: visual(4), class(1), bits per rgb value(1), colormap entries(2),
// red mask(4), green mask(4), blue mask(4), padding(4).
- v, err := readU32LE(r, b);
- _, err = readU32LE(r, b);
- rm, err := readU32LE(r, b);
- gm, err := readU32LE(r, b);
- bm, err := readU32LE(r, b);
- _, err = readU32LE(r, b);
+ v, err := readU32LE(r, b)
+ _, err = readU32LE(r, b)
+ rm, err := readU32LE(r, b)
+ gm, err := readU32LE(r, b)
+ bm, err := readU32LE(r, b)
+ _, err = readU32LE(r, b)
if err != nil {
return
}
@@ -318,47 +318,47 @@ func checkDepths(r io.Reader, b []byte, n int, visual uint32) (agree bool, err o
}
}
}
- return;
+ return
}
// Check that we have an agreeable X Screen.
func checkScreens(r io.Reader, b []byte, n int) (root, visual uint32, err os.Error) {
for i := 0; i < n; i++ {
- root0, err := readU32LE(r, b);
+ root0, err := readU32LE(r, b)
if err != nil {
return
}
// Ignore the next 7x4 bytes, which is: colormap, whitepixel, blackpixel, current input masks,
// width and height (pixels), width and height (mm), min and max installed maps.
- _, err = io.ReadFull(r, b[0:28]);
+ _, err = io.ReadFull(r, b[0:28])
if err != nil {
return
}
- visual0, err := readU32LE(r, b);
+ visual0, err := readU32LE(r, b)
if err != nil {
return
}
// Next 4 bytes: backing stores, save unders, root depth, allowed depths length.
- x, err := readU32LE(r, b);
+ x, err := readU32LE(r, b)
if err != nil {
return
}
- nDepths := int(x >> 24);
- agree, err := checkDepths(r, b, nDepths, visual0);
+ nDepths := int(x >> 24)
+ agree, err := checkDepths(r, b, nDepths, visual0)
if err != nil {
return
}
if agree && root == 0 {
- root = root0;
- visual = visual0;
+ root = root0
+ visual = visual0
}
}
- return;
+ return
}
// Perform the protocol handshake with the X server, and ensure that the server provides a compatible Screen, Depth, etcetera.
func (c *conn) handshake() os.Error {
- _, err := io.ReadFull(c.r, c.buf[0:8]);
+ _, err := io.ReadFull(c.r, c.buf[0:8])
if err != nil {
return err
}
@@ -367,17 +367,17 @@ func (c *conn) handshake() os.Error {
return os.NewError("unsupported X version")
}
// Ignore the release number.
- _, err = io.ReadFull(c.r, c.buf[0:4]);
+ _, err = io.ReadFull(c.r, c.buf[0:4])
if err != nil {
return err
}
// Read the resource ID base.
- resourceIdBase, err := readU32LE(c.r, c.buf[0:4]);
+ resourceIdBase, err := readU32LE(c.r, c.buf[0:4])
if err != nil {
return err
}
// Read the resource ID mask.
- resourceIdMask, err := readU32LE(c.r, c.buf[0:4]);
+ resourceIdMask, err := readU32LE(c.r, c.buf[0:4])
if err != nil {
return err
}
@@ -385,12 +385,12 @@ func (c *conn) handshake() os.Error {
return os.NewError("X resource ID mask is too small")
}
// Ignore the motion buffer size.
- _, err = io.ReadFull(c.r, c.buf[0:4]);
+ _, err = io.ReadFull(c.r, c.buf[0:4])
if err != nil {
return err
}
// Read the vendor length.
- vendorLen, err := readU16LE(c.r, c.buf[0:2]);
+ vendorLen, err := readU16LE(c.r, c.buf[0:2])
if err != nil {
return err
}
@@ -400,7 +400,7 @@ func (c *conn) handshake() os.Error {
return os.NewError("unsupported X vendor")
}
// Read the maximum request length.
- maxReqLen, err := readU16LE(c.r, c.buf[0:2]);
+ maxReqLen, err := readU16LE(c.r, c.buf[0:2])
if err != nil {
return err
}
@@ -408,24 +408,24 @@ func (c *conn) handshake() os.Error {
return os.NewError("unsupported X maximum request length")
}
// Read the roots length.
- rootsLen, err := readU8(c.r, c.buf[0:1]);
+ rootsLen, err := readU8(c.r, c.buf[0:1])
if err != nil {
return err
}
// Read the pixmap formats length.
- pixmapFormatsLen, err := readU8(c.r, c.buf[0:1]);
+ pixmapFormatsLen, err := readU8(c.r, c.buf[0:1])
if err != nil {
return err
}
// Ignore some things that we don't care about (totalling 30 bytes):
// imageByteOrder(1), bitmapFormatBitOrder(1), bitmapFormatScanlineUnit(1) bitmapFormatScanlinePad(1),
// minKeycode(1), maxKeycode(1), padding(4), vendor(20, hard-coded above).
- _, err = io.ReadFull(c.r, c.buf[0:30]);
+ _, err = io.ReadFull(c.r, c.buf[0:30])
if err != nil {
return err
}
// Check that we have an agreeable pixmap format.
- agree, err := checkPixmapFormats(c.r, c.buf[0:8], int(pixmapFormatsLen));
+ agree, err := checkPixmapFormats(c.r, c.buf[0:8], int(pixmapFormatsLen))
if err != nil {
return err
}
@@ -433,83 +433,83 @@ func (c *conn) handshake() os.Error {
return os.NewError("unsupported X pixmap formats")
}
// Check that we have an agreeable screen.
- root, visual, err := checkScreens(c.r, c.buf[0:24], int(rootsLen));
+ root, visual, err := checkScreens(c.r, c.buf[0:24], int(rootsLen))
if err != nil {
return err
}
if root == 0 || visual == 0 {
return os.NewError("unsupported X screen")
}
- c.gc = resID(resourceIdBase);
- c.window = resID(resourceIdBase + 1);
- c.root = resID(root);
- c.visual = resID(visual);
- return nil;
+ c.gc = resID(resourceIdBase)
+ c.window = resID(resourceIdBase + 1)
+ c.root = resID(root)
+ c.visual = resID(visual)
+ return nil
}
// Returns a new draw.Context, backed by a newly created and mapped X11 window.
func NewWindow() (draw.Context, os.Error) {
- display := getDisplay();
+ display := getDisplay()
if len(display) == 0 {
return nil, os.NewError("unsupported DISPLAY")
}
- s, err := net.Dial("unix", "", "/tmp/.X11-unix/X"+display);
+ s, err := net.Dial("unix", "", "/tmp/.X11-unix/X"+display)
if err != nil {
return nil, err
}
- c := new(conn);
- c.c = s;
- c.r = bufio.NewReader(s);
- c.w = bufio.NewWriter(s);
- err = c.authenticate();
+ c := new(conn)
+ c.c = s
+ c.r = bufio.NewReader(s)
+ c.w = bufio.NewWriter(s)
+ err = c.authenticate()
if err != nil {
return nil, err
}
- err = c.handshake();
+ err = c.handshake()
if err != nil {
return nil, err
}
// Now that we're connected, show a window, via three X protocol messages.
// First, create a graphics context (GC).
- setU32LE(c.buf[0:4], 0x00060037); // 0x37 is the CreateGC opcode, and the message is 6 x 4 bytes long.
- setU32LE(c.buf[4:8], uint32(c.gc));
- setU32LE(c.buf[8:12], uint32(c.root));
- setU32LE(c.buf[12:16], 0x00010004); // Bit 2 is XCB_GC_FOREGROUND, bit 16 is XCB_GC_GRAPHICS_EXPOSURES.
- setU32LE(c.buf[16:20], 0x00000000); // The Foreground is black.
- setU32LE(c.buf[20:24], 0x00000000); // GraphicsExposures' value is unused.
+ setU32LE(c.buf[0:4], 0x00060037) // 0x37 is the CreateGC opcode, and the message is 6 x 4 bytes long.
+ setU32LE(c.buf[4:8], uint32(c.gc))
+ setU32LE(c.buf[8:12], uint32(c.root))
+ setU32LE(c.buf[12:16], 0x00010004) // Bit 2 is XCB_GC_FOREGROUND, bit 16 is XCB_GC_GRAPHICS_EXPOSURES.
+ setU32LE(c.buf[16:20], 0x00000000) // The Foreground is black.
+ setU32LE(c.buf[20:24], 0x00000000) // GraphicsExposures' value is unused.
// Second, create the window.
- setU32LE(c.buf[24:28], 0x000a0001); // 0x01 is the CreateWindow opcode, and the message is 10 x 4 bytes long.
- setU32LE(c.buf[28:32], uint32(c.window));
- setU32LE(c.buf[32:36], uint32(c.root));
- setU32LE(c.buf[36:40], 0x00000000); // Initial (x, y) is (0, 0).
- setU32LE(c.buf[40:44], windowHeight<<16|windowWidth);
- setU32LE(c.buf[44:48], 0x00010000); // Border width is 0, XCB_WINDOW_CLASS_INPUT_OUTPUT is 1.
- setU32LE(c.buf[48:52], uint32(c.visual));
- setU32LE(c.buf[52:56], 0x00000802); // Bit 1 is XCB_CW_BACK_PIXEL, bit 11 is XCB_CW_EVENT_MASK.
- setU32LE(c.buf[56:60], 0x00000000); // The Back-Pixel is black.
- setU32LE(c.buf[60:64], 0x0000804f); // Key/button press and release, pointer motion, and expose event masks.
+ setU32LE(c.buf[24:28], 0x000a0001) // 0x01 is the CreateWindow opcode, and the message is 10 x 4 bytes long.
+ setU32LE(c.buf[28:32], uint32(c.window))
+ setU32LE(c.buf[32:36], uint32(c.root))
+ setU32LE(c.buf[36:40], 0x00000000) // Initial (x, y) is (0, 0).
+ setU32LE(c.buf[40:44], windowHeight<<16|windowWidth)
+ setU32LE(c.buf[44:48], 0x00010000) // Border width is 0, XCB_WINDOW_CLASS_INPUT_OUTPUT is 1.
+ setU32LE(c.buf[48:52], uint32(c.visual))
+ setU32LE(c.buf[52:56], 0x00000802) // Bit 1 is XCB_CW_BACK_PIXEL, bit 11 is XCB_CW_EVENT_MASK.
+ setU32LE(c.buf[56:60], 0x00000000) // The Back-Pixel is black.
+ setU32LE(c.buf[60:64], 0x0000804f) // Key/button press and release, pointer motion, and expose event masks.
// Third, map the window.
- setU32LE(c.buf[64:68], 0x00020008); // 0x08 is the MapWindow opcode, and the message is 2 x 4 bytes long.
- setU32LE(c.buf[68:72], uint32(c.window));
+ setU32LE(c.buf[64:68], 0x00020008) // 0x08 is the MapWindow opcode, and the message is 2 x 4 bytes long.
+ setU32LE(c.buf[68:72], uint32(c.window))
// Write the bytes.
- _, err = c.w.Write(c.buf[0:72]);
+ _, err = c.w.Write(c.buf[0:72])
if err != nil {
return nil, err
}
- err = c.w.Flush();
+ err = c.w.Flush()
if err != nil {
return nil, err
}
- c.img = image.NewRGBA(windowWidth, windowHeight);
+ c.img = image.NewRGBA(windowWidth, windowHeight)
// TODO(nigeltao): Should these channels be buffered?
- c.kbd = make(chan int);
- c.mouse = make(chan draw.Mouse);
- c.resize = make(chan bool);
- c.quit = make(chan bool);
- c.flush = make(chan bool, 1);
- go c.flusher();
- go c.pumper();
- return c, nil;
+ c.kbd = make(chan int)
+ c.mouse = make(chan draw.Mouse)
+ c.resize = make(chan bool)
+ c.quit = make(chan bool)
+ c.flush = make(chan bool, 1)
+ go c.flusher()
+ go c.pumper()
+ return c, nil
}
diff --git a/src/pkg/exp/eval/abort.go b/src/pkg/exp/eval/abort.go
index fd16d7eaa..bfa89fa29 100644
--- a/src/pkg/exp/eval/abort.go
+++ b/src/pkg/exp/eval/abort.go
@@ -5,9 +5,9 @@
package eval
import (
- "fmt";
- "os";
- "runtime";
+ "fmt"
+ "os"
+ "runtime"
)
// Abort aborts the thread's current computation,
@@ -16,46 +16,46 @@ func (t *Thread) Abort(err os.Error) {
if t.abort == nil {
panicln("abort:", err.String())
}
- t.abort <- err;
- runtime.Goexit();
+ t.abort <- err
+ runtime.Goexit()
}
// Try executes a computation; if the computation
// Aborts, Try returns the error passed to abort.
func (t *Thread) Try(f func(t *Thread)) os.Error {
- oc := t.abort;
- c := make(chan os.Error);
- t.abort = c;
+ oc := t.abort
+ c := make(chan os.Error)
+ t.abort = c
go func() {
- f(t);
- c <- nil;
- }();
- err := <-c;
- t.abort = oc;
- return err;
+ f(t)
+ c <- nil
+ }()
+ err := <-c
+ t.abort = oc
+ return err
}
type DivByZeroError struct{}
-func (DivByZeroError) String() string { return "divide by zero" }
+func (DivByZeroError) String() string { return "divide by zero" }
type NilPointerError struct{}
-func (NilPointerError) String() string { return "nil pointer dereference" }
+func (NilPointerError) String() string { return "nil pointer dereference" }
type IndexError struct {
- Idx, Len int64;
+ Idx, Len int64
}
func (e IndexError) String() string {
if e.Idx < 0 {
return fmt.Sprintf("negative index: %d", e.Idx)
}
- return fmt.Sprintf("index %d exceeds length %d", e.Idx, e.Len);
+ return fmt.Sprintf("index %d exceeds length %d", e.Idx, e.Len)
}
type SliceError struct {
- Lo, Hi, Cap int64;
+ Lo, Hi, Cap int64
}
func (e SliceError) String() string {
@@ -63,13 +63,13 @@ func (e SliceError) String() string {
}
type KeyError struct {
- Key interface{};
+ Key interface{}
}
-func (e KeyError) String() string { return fmt.Sprintf("key '%v' not found in map", e.Key) }
+func (e KeyError) String() string { return fmt.Sprintf("key '%v' not found in map", e.Key) }
type NegativeLengthError struct {
- Len int64;
+ Len int64
}
func (e NegativeLengthError) String() string {
@@ -77,7 +77,7 @@ func (e NegativeLengthError) String() string {
}
type NegativeCapacityError struct {
- Len int64;
+ Len int64
}
func (e NegativeCapacityError) String() string {
diff --git a/src/pkg/exp/eval/bridge.go b/src/pkg/exp/eval/bridge.go
index fed27930f..43a6fd30d 100644
--- a/src/pkg/exp/eval/bridge.go
+++ b/src/pkg/exp/eval/bridge.go
@@ -5,9 +5,9 @@
package eval
import (
- "log";
- "go/token";
- "reflect";
+ "log"
+ "go/token"
+ "reflect"
)
/*
@@ -15,8 +15,8 @@ import (
*/
var (
- evalTypes = make(map[reflect.Type]Type);
- nativeTypes = make(map[Type]reflect.Type);
+ evalTypes = make(map[reflect.Type]Type)
+ nativeTypes = make(map[Type]reflect.Type)
)
// TypeFromNative converts a regular Go type into a the corresponding
@@ -26,14 +26,14 @@ func TypeFromNative(t reflect.Type) Type {
return et
}
- var nt *NamedType;
+ var nt *NamedType
if t.Name() != "" {
- name := t.PkgPath() + "·" + t.Name();
- nt = &NamedType{token.Position{}, name, nil, true, make(map[string]Method)};
- evalTypes[t] = nt;
+ name := t.PkgPath() + "·" + t.Name()
+ nt = &NamedType{token.Position{}, name, nil, true, make(map[string]Method)}
+ evalTypes[t] = nt
}
- var et Type;
+ var et Type
switch t := t.(type) {
case *reflect.BoolType:
et = BoolType
@@ -73,24 +73,24 @@ func TypeFromNative(t reflect.Type) Type {
case *reflect.ChanType:
log.Crashf("%T not implemented", t)
case *reflect.FuncType:
- nin := t.NumIn();
+ nin := t.NumIn()
// Variadic functions have DotDotDotType at the end
- varidic := false;
+ varidic := false
if nin > 0 {
if _, ok := t.In(nin - 1).(*reflect.DotDotDotType); ok {
- varidic = true;
- nin--;
+ varidic = true
+ nin--
}
}
- in := make([]Type, nin);
+ in := make([]Type, nin)
for i := range in {
in[i] = TypeFromNative(t.In(i))
}
- out := make([]Type, t.NumOut());
+ out := make([]Type, t.NumOut())
for i := range out {
out[i] = TypeFromNative(t.Out(i))
}
- et = NewFuncType(in, varidic, out);
+ et = NewFuncType(in, varidic, out)
case *reflect.InterfaceType:
log.Crashf("%T not implemented", t)
case *reflect.MapType:
@@ -100,16 +100,16 @@ func TypeFromNative(t reflect.Type) Type {
case *reflect.SliceType:
et = NewSliceType(TypeFromNative(t.Elem()))
case *reflect.StructType:
- n := t.NumField();
- fields := make([]StructField, n);
+ n := t.NumField()
+ fields := make([]StructField, n)
for i := 0; i < n; i++ {
- sf := t.Field(i);
+ sf := t.Field(i)
// TODO(austin) What to do about private fields?
- fields[i].Name = sf.Name;
- fields[i].Type = TypeFromNative(sf.Type);
- fields[i].Anonymous = sf.Anonymous;
+ fields[i].Name = sf.Name
+ fields[i].Type = TypeFromNative(sf.Type)
+ fields[i].Anonymous = sf.Anonymous
}
- et = NewStructType(fields);
+ et = NewStructType(fields)
case *reflect.UnsafePointerType:
log.Crashf("%T not implemented", t)
default:
@@ -118,35 +118,35 @@ func TypeFromNative(t reflect.Type) Type {
if nt != nil {
if _, ok := et.(*NamedType); !ok {
- nt.Complete(et);
- et = nt;
+ nt.Complete(et)
+ et = nt
}
}
- nativeTypes[et] = t;
- evalTypes[t] = et;
+ nativeTypes[et] = t
+ evalTypes[t] = et
- return et;
+ return et
}
// TypeOfNative returns the interpreter Type of a regular Go value.
-func TypeOfNative(v interface{}) Type { return TypeFromNative(reflect.Typeof(v)) }
+func TypeOfNative(v interface{}) Type { return TypeFromNative(reflect.Typeof(v)) }
/*
* Function bridging
*/
type nativeFunc struct {
- fn func(*Thread, []Value, []Value);
- in, out int;
+ fn func(*Thread, []Value, []Value)
+ in, out int
}
func (f *nativeFunc) NewFrame() *Frame {
- vars := make([]Value, f.in+f.out);
- return &Frame{nil, vars};
+ vars := make([]Value, f.in+f.out)
+ return &Frame{nil, vars}
}
-func (f *nativeFunc) Call(t *Thread) { f.fn(t, t.f.Vars[0:f.in], t.f.Vars[f.in:f.in+f.out]) }
+func (f *nativeFunc) Call(t *Thread) { f.fn(t, t.f.Vars[0:f.in], t.f.Vars[f.in:f.in+f.out]) }
// FuncFromNative creates an interpreter function from a native
// function that takes its in and out arguments as slices of
@@ -161,6 +161,6 @@ func FuncFromNative(fn func(*Thread, []Value, []Value), t *FuncType) FuncValue {
// the type will be given as a nil pointer to a function with the
// desired signature.
func FuncFromNativeTyped(fn func(*Thread, []Value, []Value), t interface{}) (*FuncType, FuncValue) {
- ft := TypeOfNative(t).(*FuncType);
- return ft, FuncFromNative(fn, ft);
+ ft := TypeOfNative(t).(*FuncType)
+ return ft, FuncFromNative(fn, ft)
}
diff --git a/src/pkg/exp/eval/compiler.go b/src/pkg/exp/eval/compiler.go
index f349b836f..6bde3b567 100644
--- a/src/pkg/exp/eval/compiler.go
+++ b/src/pkg/exp/eval/compiler.go
@@ -5,14 +5,14 @@
package eval
import (
- "fmt";
- "go/scanner";
- "go/token";
+ "fmt"
+ "go/scanner"
+ "go/token"
)
type positioned interface {
- Pos() token.Position;
+ Pos() token.Position
}
@@ -22,28 +22,28 @@ type positioned interface {
// TODO(austin) This might actually represent package level, in which
// case it should be package compiler.
type compiler struct {
- errors scanner.ErrorHandler;
- numErrors int;
- silentErrors int;
+ errors scanner.ErrorHandler
+ numErrors int
+ silentErrors int
}
func (a *compiler) diagAt(pos positioned, format string, args ...) {
- a.errors.Error(pos.Pos(), fmt.Sprintf(format, args));
- a.numErrors++;
+ a.errors.Error(pos.Pos(), fmt.Sprintf(format, args))
+ a.numErrors++
}
-func (a *compiler) numError() int { return a.numErrors + a.silentErrors }
+func (a *compiler) numError() int { return a.numErrors + a.silentErrors }
// The universal scope
func newUniverse() *Scope {
- sc := &Scope{nil, 0};
+ sc := &Scope{nil, 0}
sc.block = &block{
offset: 0,
scope: sc,
global: true,
defs: make(map[string]Def),
- };
- return sc;
+ }
+ return sc
}
var universe *Scope = newUniverse()
@@ -51,46 +51,46 @@ var universe *Scope = newUniverse()
// TODO(austin) These can all go in stmt.go now
type label struct {
- name string;
- desc string;
+ name string
+ desc string
// The PC goto statements should jump to, or nil if this label
// cannot be goto'd (such as an anonymous for loop label).
- gotoPC *uint;
+ gotoPC *uint
// The PC break statements should jump to, or nil if a break
// statement is invalid.
- breakPC *uint;
+ breakPC *uint
// The PC continue statements should jump to, or nil if a
// continue statement is invalid.
- continuePC *uint;
+ continuePC *uint
// The position where this label was resolved. If it has not
// been resolved yet, an invalid position.
- resolved token.Position;
+ resolved token.Position
// The position where this label was first jumped to.
- used token.Position;
+ used token.Position
}
// A funcCompiler captures information used throughout the compilation
// of a single function body.
type funcCompiler struct {
- *compiler;
- fnType *FuncType;
+ *compiler
+ fnType *FuncType
// Whether the out variables are named. This affects what
// kinds of return statements are legal.
- outVarsNamed bool;
- *codeBuf;
- flow *flowBuf;
- labels map[string]*label;
+ outVarsNamed bool
+ *codeBuf
+ flow *flowBuf
+ labels map[string]*label
}
// A blockCompiler captures information used throughout the compilation
// of a single block within a function.
type blockCompiler struct {
- *funcCompiler;
- block *block;
+ *funcCompiler
+ block *block
// The label of this block, used for finding break and
// continue labels.
- label *label;
+ label *label
// The blockCompiler for the block enclosing this one, or nil
// for a function-level block.
- parent *blockCompiler;
+ parent *blockCompiler
}
diff --git a/src/pkg/exp/eval/eval_test.go b/src/pkg/exp/eval/eval_test.go
index afd91bfb2..93a643b5a 100644
--- a/src/pkg/exp/eval/eval_test.go
+++ b/src/pkg/exp/eval/eval_test.go
@@ -5,19 +5,19 @@
package eval
import (
- "bignum";
- "flag";
- "fmt";
- "log";
- "os";
- "reflect";
- "testing";
+ "bignum"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "reflect"
+ "testing"
)
// Print each statement or expression before parsing it
var noisy = false
-func init() { flag.BoolVar(&noisy, "noisy", false, "chatter during eval tests") }
+func init() { flag.BoolVar(&noisy, "noisy", false, "chatter during eval tests") }
/*
* Generic statement/expression test framework
@@ -26,60 +26,60 @@ func init() { flag.BoolVar(&noisy, "noisy", false, "chatter during eval tests")
type test []job
type job struct {
- code string;
- cerr string;
- rterr string;
- val Value;
- noval bool;
+ code string
+ cerr string
+ rterr string
+ val Value
+ noval bool
}
func runTests(t *testing.T, baseName string, tests []test) {
for i, test := range tests {
- name := fmt.Sprintf("%s[%d]", baseName, i);
- test.run(t, name);
+ name := fmt.Sprintf("%s[%d]", baseName, i)
+ test.run(t, name)
}
}
func (a test) run(t *testing.T, name string) {
- w := newTestWorld();
+ w := newTestWorld()
for _, j := range a {
- src := j.code;
+ src := j.code
if noisy {
println("code:", src)
}
- code, err := w.Compile(src);
+ code, err := w.Compile(src)
if err != nil {
if j.cerr == "" {
- t.Errorf("%s: Compile %s: %v", name, src, err);
- break;
+ t.Errorf("%s: Compile %s: %v", name, src, err)
+ break
}
if !match(t, err, j.cerr) {
- t.Errorf("%s: Compile %s = error %s; want %v", name, src, err, j.cerr);
- break;
+ t.Errorf("%s: Compile %s = error %s; want %v", name, src, err, j.cerr)
+ break
}
- continue;
+ continue
}
if j.cerr != "" {
- t.Errorf("%s: Compile %s succeeded; want %s", name, src, j.cerr);
- break;
+ t.Errorf("%s: Compile %s succeeded; want %s", name, src, j.cerr)
+ break
}
- val, err := code.Run();
+ val, err := code.Run()
if err != nil {
if j.rterr == "" {
- t.Errorf("%s: Run %s: %v", name, src, err);
- break;
+ t.Errorf("%s: Run %s: %v", name, src, err)
+ break
}
if !match(t, err, j.rterr) {
- t.Errorf("%s: Run %s = error %s; want %v", name, src, err, j.rterr);
- break;
+ t.Errorf("%s: Run %s = error %s; want %v", name, src, err, j.rterr)
+ break
}
- continue;
+ continue
}
if j.rterr != "" {
- t.Errorf("%s: Run %s succeeded; want %s", name, src, j.rterr);
- break;
+ t.Errorf("%s: Run %s succeeded; want %s", name, src, j.rterr)
+ break
}
if !j.noval && !reflect.DeepEqual(val, j.val) {
@@ -89,11 +89,11 @@ func (a test) run(t *testing.T, name string) {
}
func match(t *testing.T, err os.Error, pat string) bool {
- ok, errstr := testing.MatchString(pat, err.String());
+ ok, errstr := testing.MatchString(pat, err.String())
if errstr != "" {
t.Fatalf("compile regexp %s: %v", pat, errstr)
}
- return ok;
+ return ok
}
@@ -102,10 +102,10 @@ func match(t *testing.T, err os.Error, pat string) bool {
*/
// Expression compile error
-func CErr(expr string, cerr string) test { return test([]job{job{code: expr, cerr: cerr}}) }
+func CErr(expr string, cerr string) test { return test([]job{job{code: expr, cerr: cerr}}) }
// Expression runtime error
-func RErr(expr string, rterr string) test { return test([]job{job{code: expr, rterr: rterr}}) }
+func RErr(expr string, rterr string) test { return test([]job{job{code: expr, rterr: rterr}}) }
// Expression value
func Val(expr string, val interface{}) test {
@@ -113,7 +113,7 @@ func Val(expr string, val interface{}) test {
}
// Statement runs without error
-func Run(stmts string) test { return test([]job{job{code: stmts, noval: true}}) }
+func Run(stmts string) test { return test([]job{job{code: stmts, noval: true}}) }
// Two statements without error.
// TODO(rsc): Should be possible with Run but the parser
@@ -148,55 +148,55 @@ type vstruct []interface{}
type varray []interface{}
type vslice struct {
- arr varray;
- len, cap int;
+ arr varray
+ len, cap int
}
func toValue(val interface{}) Value {
switch val := val.(type) {
case bool:
- r := boolV(val);
- return &r;
+ r := boolV(val)
+ return &r
case uint8:
- r := uint8V(val);
- return &r;
+ r := uint8V(val)
+ return &r
case uint:
- r := uintV(val);
- return &r;
+ r := uintV(val)
+ return &r
case int:
- r := intV(val);
- return &r;
+ r := intV(val)
+ return &r
case *bignum.Integer:
return &idealIntV{val}
case float:
- r := floatV(val);
- return &r;
+ r := floatV(val)
+ return &r
case *bignum.Rational:
return &idealFloatV{val}
case string:
- r := stringV(val);
- return &r;
+ r := stringV(val)
+ return &r
case vstruct:
- elems := make([]Value, len(val));
+ elems := make([]Value, len(val))
for i, e := range val {
elems[i] = toValue(e)
}
- r := structV(elems);
- return &r;
+ r := structV(elems)
+ return &r
case varray:
- elems := make([]Value, len(val));
+ elems := make([]Value, len(val))
for i, e := range val {
elems[i] = toValue(e)
}
- r := arrayV(elems);
- return &r;
+ r := arrayV(elems)
+ return &r
case vslice:
return &sliceV{Slice{toValue(val.arr).(ArrayValue), int64(val.len), int64(val.cap)}}
case Func:
return &funcV{val}
}
- log.Crashf("toValue(%T) not implemented", val);
- panic();
+ log.Crashf("toValue(%T) not implemented", val)
+ panic()
}
/*
@@ -205,50 +205,50 @@ func toValue(val interface{}) Value {
type testFunc struct{}
-func (*testFunc) NewFrame() *Frame { return &Frame{nil, &[2]Value{}} }
+func (*testFunc) NewFrame() *Frame { return &Frame{nil, &[2]Value{}} }
func (*testFunc) Call(t *Thread) {
- n := t.f.Vars[0].(IntValue).Get(t);
+ n := t.f.Vars[0].(IntValue).Get(t)
- res := n + 1;
+ res := n + 1
- t.f.Vars[1].(IntValue).Set(t, res);
+ t.f.Vars[1].(IntValue).Set(t, res)
}
type oneTwoFunc struct{}
-func (*oneTwoFunc) NewFrame() *Frame { return &Frame{nil, &[2]Value{}} }
+func (*oneTwoFunc) NewFrame() *Frame { return &Frame{nil, &[2]Value{}} }
func (*oneTwoFunc) Call(t *Thread) {
- t.f.Vars[0].(IntValue).Set(t, 1);
- t.f.Vars[1].(IntValue).Set(t, 2);
+ t.f.Vars[0].(IntValue).Set(t, 1)
+ t.f.Vars[1].(IntValue).Set(t, 2)
}
type voidFunc struct{}
-func (*voidFunc) NewFrame() *Frame { return &Frame{nil, []Value{}} }
+func (*voidFunc) NewFrame() *Frame { return &Frame{nil, []Value{}} }
-func (*voidFunc) Call(t *Thread) {}
+func (*voidFunc) Call(t *Thread) {}
func newTestWorld() *World {
- w := NewWorld();
-
- def := func(name string, t Type, val interface{}) { w.DefineVar(name, t, toValue(val)) };
-
- w.DefineConst("c", IdealIntType, toValue(bignum.Int(1)));
- def("i", IntType, 1);
- def("i2", IntType, 2);
- def("u", UintType, uint(1));
- def("f", FloatType, 1.0);
- def("s", StringType, "abc");
- def("t", NewStructType([]StructField{StructField{"a", IntType, false}}), vstruct{1});
- def("ai", NewArrayType(2, IntType), varray{1, 2});
- def("aai", NewArrayType(2, NewArrayType(2, IntType)), varray{varray{1, 2}, varray{3, 4}});
- def("aai2", NewArrayType(2, NewArrayType(2, IntType)), varray{varray{5, 6}, varray{7, 8}});
- def("fn", NewFuncType([]Type{IntType}, false, []Type{IntType}), &testFunc{});
- def("oneTwo", NewFuncType([]Type{}, false, []Type{IntType, IntType}), &oneTwoFunc{});
- def("void", NewFuncType([]Type{}, false, []Type{}), &voidFunc{});
- def("sli", NewSliceType(IntType), vslice{varray{1, 2, 3}, 2, 3});
-
- return w;
+ w := NewWorld()
+
+ def := func(name string, t Type, val interface{}) { w.DefineVar(name, t, toValue(val)) }
+
+ w.DefineConst("c", IdealIntType, toValue(bignum.Int(1)))
+ def("i", IntType, 1)
+ def("i2", IntType, 2)
+ def("u", UintType, uint(1))
+ def("f", FloatType, 1.0)
+ def("s", StringType, "abc")
+ def("t", NewStructType([]StructField{StructField{"a", IntType, false}}), vstruct{1})
+ def("ai", NewArrayType(2, IntType), varray{1, 2})
+ def("aai", NewArrayType(2, NewArrayType(2, IntType)), varray{varray{1, 2}, varray{3, 4}})
+ def("aai2", NewArrayType(2, NewArrayType(2, IntType)), varray{varray{5, 6}, varray{7, 8}})
+ def("fn", NewFuncType([]Type{IntType}, false, []Type{IntType}), &testFunc{})
+ def("oneTwo", NewFuncType([]Type{}, false, []Type{IntType, IntType}), &oneTwoFunc{})
+ def("void", NewFuncType([]Type{}, false, []Type{}), &voidFunc{})
+ def("sli", NewSliceType(IntType), vslice{varray{1, 2, 3}, 2, 3})
+
+ return w
}
diff --git a/src/pkg/exp/eval/expr.go b/src/pkg/exp/eval/expr.go
index 1f1bf0634..8e161e522 100644
--- a/src/pkg/exp/eval/expr.go
+++ b/src/pkg/exp/eval/expr.go
@@ -5,53 +5,53 @@
package eval
import (
- "bignum";
- "go/ast";
- "go/token";
- "log";
- "strconv";
- "strings";
- "os";
+ "bignum"
+ "go/ast"
+ "go/token"
+ "log"
+ "strconv"
+ "strings"
+ "os"
)
// An expr is the result of compiling an expression. It stores the
// type of the expression and its evaluator function.
type expr struct {
- *exprInfo;
- t Type;
+ *exprInfo
+ t Type
// Evaluate this node as the given type.
- eval interface{};
+ eval interface{}
// Map index expressions permit special forms of assignment,
// for which we need to know the Map and key.
- evalMapValue func(t *Thread) (Map, interface{});
+ evalMapValue func(t *Thread) (Map, interface{})
// Evaluate to the "address of" this value; that is, the
// settable Value object. nil for expressions whose address
// cannot be taken.
- evalAddr func(t *Thread) Value;
+ evalAddr func(t *Thread) Value
// Execute this expression as a statement. Only expressions
// that are valid expression statements should set this.
- exec func(t *Thread);
+ exec func(t *Thread)
// If this expression is a type, this is its compiled type.
// This is only permitted in the function position of a call
// expression. In this case, t should be nil.
- valType Type;
+ valType Type
// A short string describing this expression for error
// messages.
- desc string;
+ desc string
}
// exprInfo stores information needed to compile any expression node.
// Each expr also stores its exprInfo so further expressions can be
// compiled from it.
type exprInfo struct {
- *compiler;
- pos token.Position;
+ *compiler
+ pos token.Position
}
func (a *exprInfo) newExpr(t Type, desc string) *expr {
@@ -84,7 +84,7 @@ func (a *expr) convertTo(t Type) *expr {
log.Crashf("attempted to convert from %v, expected ideal", a.t)
}
- var rat *bignum.Rational;
+ var rat *bignum.Rational
// XXX(Spec) The spec says "It is erroneous".
//
@@ -94,14 +94,14 @@ func (a *expr) convertTo(t Type) *expr {
// by the type of the variable.
switch a.t {
case IdealFloatType:
- rat = a.asIdealFloat()();
+ rat = a.asIdealFloat()()
if t.isInteger() && !rat.IsInt() {
- a.diag("constant %v truncated to integer", ratToString(rat));
- return nil;
+ a.diag("constant %v truncated to integer", ratToString(rat))
+ return nil
}
case IdealIntType:
- i := a.asIdealInt()();
- rat = bignum.MakeRat(i, bignum.Nat(1));
+ i := a.asIdealInt()()
+ rat = bignum.MakeRat(i, bignum.Nat(1))
default:
log.Crashf("unexpected ideal type %v", a.t)
}
@@ -109,43 +109,43 @@ func (a *expr) convertTo(t Type) *expr {
// Check bounds
if t, ok := t.lit().(BoundedType); ok {
if rat.Cmp(t.minVal()) < 0 {
- a.diag("constant %v underflows %v", ratToString(rat), t);
- return nil;
+ a.diag("constant %v underflows %v", ratToString(rat), t)
+ return nil
}
if rat.Cmp(t.maxVal()) > 0 {
- a.diag("constant %v overflows %v", ratToString(rat), t);
- return nil;
+ a.diag("constant %v overflows %v", ratToString(rat), t)
+ return nil
}
}
// Convert rat to type t.
- res := a.newExpr(t, a.desc);
+ res := a.newExpr(t, a.desc)
switch t := t.lit().(type) {
case *uintType:
- n, d := rat.Value();
- f := n.Quo(bignum.MakeInt(false, d));
- v := f.Abs().Value();
- res.eval = func(*Thread) uint64 { return v };
+ n, d := rat.Value()
+ f := n.Quo(bignum.MakeInt(false, d))
+ v := f.Abs().Value()
+ res.eval = func(*Thread) uint64 { return v }
case *intType:
- n, d := rat.Value();
- f := n.Quo(bignum.MakeInt(false, d));
- v := f.Value();
- res.eval = func(*Thread) int64 { return v };
+ n, d := rat.Value()
+ f := n.Quo(bignum.MakeInt(false, d))
+ v := f.Value()
+ res.eval = func(*Thread) int64 { return v }
case *idealIntType:
- n, d := rat.Value();
- f := n.Quo(bignum.MakeInt(false, d));
- res.eval = func() *bignum.Integer { return f };
+ n, d := rat.Value()
+ f := n.Quo(bignum.MakeInt(false, d))
+ res.eval = func() *bignum.Integer { return f }
case *floatType:
- n, d := rat.Value();
- v := float64(n.Value()) / float64(d.Value());
- res.eval = func(*Thread) float64 { return v };
+ n, d := rat.Value()
+ v := float64(n.Value()) / float64(d.Value())
+ res.eval = func(*Thread) float64 { return v }
case *idealFloatType:
res.eval = func() *bignum.Rational { return rat }
default:
log.Crashf("cannot convert to type %T", t)
}
- return res;
+ return res
}
// convertToInt converts this expression to an integer, if possible,
@@ -156,35 +156,35 @@ func (a *expr) convertTo(t Type) *expr {
func (a *expr) convertToInt(max int64, negErr string, errOp string) *expr {
switch a.t.lit().(type) {
case *idealIntType:
- val := a.asIdealInt()();
+ val := a.asIdealInt()()
if negErr != "" && val.IsNeg() {
- a.diag("negative %s: %s", negErr, val);
- return nil;
+ a.diag("negative %s: %s", negErr, val)
+ return nil
}
- bound := max;
+ bound := max
if negErr == "slice" {
bound++
}
if max != -1 && val.Cmp(bignum.Int(bound)) >= 0 {
- a.diag("index %s exceeds length %d", val, max);
- return nil;
+ a.diag("index %s exceeds length %d", val, max)
+ return nil
}
- return a.convertTo(IntType);
+ return a.convertTo(IntType)
case *uintType:
// Convert to int
- na := a.newExpr(IntType, a.desc);
- af := a.asUint();
- na.eval = func(t *Thread) int64 { return int64(af(t)) };
- return na;
+ na := a.newExpr(IntType, a.desc)
+ af := a.asUint()
+ na.eval = func(t *Thread) int64 { return int64(af(t)) }
+ return na
case *intType:
// Good as is
return a
}
- a.diag("illegal operand type for %s\n\t%v", errOp, a.t);
- return nil;
+ a.diag("illegal operand type for %s\n\t%v", errOp, a.t)
+ return nil
}
// derefArray returns an expression of array type if the given
@@ -193,14 +193,14 @@ func (a *expr) convertToInt(max int64, negErr string, errOp string) *expr {
func (a *expr) derefArray() *expr {
if pt, ok := a.t.lit().(*PtrType); ok {
if _, ok := pt.Elem.lit().(*ArrayType); ok {
- deref := a.compileStarExpr(a);
+ deref := a.compileStarExpr(a)
if deref == nil {
log.Crashf("failed to dereference *array")
}
- return deref;
+ return deref
}
}
- return a;
+ return a
}
/*
@@ -221,25 +221,25 @@ func (a *expr) derefArray() *expr {
// Assigning a single expression with multi-valued type to a
// multi-valued type.
type assignCompiler struct {
- *compiler;
- pos token.Position;
+ *compiler
+ pos token.Position
// The RHS expressions. This may include nil's for
// expressions that failed to compile.
- rs []*expr;
+ rs []*expr
// The (possibly unary) MultiType of the RHS.
- rmt *MultiType;
+ rmt *MultiType
// Whether this is an unpack assignment (case 3).
- isUnpack bool;
+ isUnpack bool
// Whether map special assignment forms are allowed.
- allowMap bool;
+ allowMap bool
// Whether this is a "r, ok = a[x]" assignment.
- isMapUnpack bool;
+ isMapUnpack bool
// The operation name to use in error messages, such as
// "assignment" or "function call".
- errOp string;
+ errOp string
// The name to use for positions in error messages, such as
// "argument".
- errPosName string;
+ errPosName string
}
// Type check the RHS of an assignment, returning a new assignCompiler
@@ -254,48 +254,48 @@ func (a *compiler) checkAssign(pos token.Position, rs []*expr, errOp, errPosName
rs: rs,
errOp: errOp,
errPosName: errPosName,
- };
+ }
// Is this an unpack?
if len(rs) == 1 && rs[0] != nil {
if rmt, isUnpack := rs[0].t.(*MultiType); isUnpack {
- c.rmt = rmt;
- c.isUnpack = true;
- return c, true;
+ c.rmt = rmt
+ c.isUnpack = true
+ return c, true
}
}
// Create MultiType for RHS and check that all RHS expressions
// are single-valued.
- rts := make([]Type, len(rs));
- ok := true;
+ rts := make([]Type, len(rs))
+ ok := true
for i, r := range rs {
if r == nil {
- ok = false;
- continue;
+ ok = false
+ continue
}
if _, isMT := r.t.(*MultiType); isMT {
- r.diag("multi-valued expression not allowed in %s", errOp);
- ok = false;
- continue;
+ r.diag("multi-valued expression not allowed in %s", errOp)
+ ok = false
+ continue
}
- rts[i] = r.t;
+ rts[i] = r.t
}
- c.rmt = NewMultiType(rts);
- return c, ok;
+ c.rmt = NewMultiType(rts)
+ return c, ok
}
func (a *assignCompiler) allowMapForms(nls int) {
- a.allowMap = true;
+ a.allowMap = true
// Update unpacking info if this is r, ok = a[x]
if nls == 2 && len(a.rs) == 1 && a.rs[0] != nil && a.rs[0].evalMapValue != nil {
- a.isUnpack = true;
- a.rmt = NewMultiType([]Type{a.rs[0].t, BoolType});
- a.isMapUnpack = true;
+ a.isUnpack = true
+ a.rmt = NewMultiType([]Type{a.rs[0].t, BoolType})
+ a.isMapUnpack = true
}
}
@@ -304,8 +304,8 @@ func (a *assignCompiler) allowMapForms(nls int) {
// evaluate the RHS expressions. The l-value must have exactly the
// type given by lt. Returns nil if type checking fails.
func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
- lmt, isMT := lt.(*MultiType);
- rmt, isUnpack := a.rmt, a.isUnpack;
+ lmt, isMT := lt.(*MultiType)
+ rmt, isUnpack := a.rmt, a.isUnpack
// Create unary MultiType for single LHS
if !isMT {
@@ -313,61 +313,61 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
}
// Check that the assignment count matches
- lcount := len(lmt.Elems);
- rcount := len(rmt.Elems);
+ lcount := len(lmt.Elems)
+ rcount := len(rmt.Elems)
if lcount != rcount {
- msg := "not enough";
- pos := a.pos;
+ msg := "not enough"
+ pos := a.pos
if rcount > lcount {
- msg = "too many";
+ msg = "too many"
if lcount > 0 {
pos = a.rs[lcount-1].pos
}
}
- a.diagAt(&pos, "%s %ss for %s\n\t%s\n\t%s", msg, a.errPosName, a.errOp, lt, rmt);
- return nil;
+ a.diagAt(&pos, "%s %ss for %s\n\t%s\n\t%s", msg, a.errPosName, a.errOp, lt, rmt)
+ return nil
}
- bad := false;
+ bad := false
// If this is an unpack, create a temporary to store the
// multi-value and replace the RHS with expressions to pull
// out values from the temporary. Technically, this is only
// necessary when we need to perform assignment conversions.
- var effect func(*Thread);
+ var effect func(*Thread)
if isUnpack {
// This leaks a slot, but is definitely safe.
- temp := b.DefineTemp(a.rmt);
- tempIdx := temp.Index;
+ temp := b.DefineTemp(a.rmt)
+ tempIdx := temp.Index
if tempIdx < 0 {
panicln("tempidx", tempIdx)
}
if a.isMapUnpack {
- rf := a.rs[0].evalMapValue;
- vt := a.rmt.Elems[0];
+ rf := a.rs[0].evalMapValue
+ vt := a.rmt.Elems[0]
effect = func(t *Thread) {
- m, k := rf(t);
- v := m.Elem(t, k);
- found := boolV(true);
+ m, k := rf(t)
+ v := m.Elem(t, k)
+ found := boolV(true)
if v == nil {
- found = boolV(false);
- v = vt.Zero();
+ found = boolV(false)
+ v = vt.Zero()
}
- t.f.Vars[tempIdx] = multiV([]Value{v, &found});
- };
+ t.f.Vars[tempIdx] = multiV([]Value{v, &found})
+ }
} else {
- rf := a.rs[0].asMulti();
- effect = func(t *Thread) { t.f.Vars[tempIdx] = multiV(rf(t)) };
+ rf := a.rs[0].asMulti()
+ effect = func(t *Thread) { t.f.Vars[tempIdx] = multiV(rf(t)) }
}
- orig := a.rs[0];
- a.rs = make([]*expr, len(a.rmt.Elems));
+ orig := a.rs[0]
+ a.rs = make([]*expr, len(a.rmt.Elems))
for i, t := range a.rmt.Elems {
if t.isIdeal() {
log.Crashf("Right side of unpack contains ideal: %s", rmt)
}
- a.rs[i] = orig.newExpr(t, orig.desc);
- index := i;
- a.rs[i].genValue(func(t *Thread) Value { return t.f.Vars[tempIdx].(multiV)[index] });
+ a.rs[i] = orig.newExpr(t, orig.desc)
+ index := i
+ a.rs[i].genValue(func(t *Thread) Value { return t.f.Vars[tempIdx].(multiV)[index] })
}
}
// Now len(a.rs) == len(a.rmt) and we've reduced any unpacking
@@ -378,18 +378,18 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
// Values of any type may always be assigned to variables of
// compatible static type.
for i, lt := range lmt.Elems {
- rt := rmt.Elems[i];
+ rt := rmt.Elems[i]
// When [an ideal is] (used in an expression) assigned
// to a variable or typed constant, the destination
// must be able to represent the assigned value.
if rt.isIdeal() {
- a.rs[i] = a.rs[i].convertTo(lmt.Elems[i]);
+ a.rs[i] = a.rs[i].convertTo(lmt.Elems[i])
if a.rs[i] == nil {
- bad = true;
- continue;
+ bad = true
+ continue
}
- rt = a.rs[i].t;
+ rt = a.rs[i].t
}
// A pointer p to an array can be assigned to a slice
@@ -399,11 +399,11 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
if at, ok := rpt.Elem.lit().(*ArrayType); ok {
if lst, ok := lt.lit().(*SliceType); ok {
if lst.Elem.compat(at.Elem, false) && (rt.lit() == Type(rt) || lt.lit() == Type(lt)) {
- rf := a.rs[i].asPtr();
- a.rs[i] = a.rs[i].newExpr(lt, a.rs[i].desc);
- len := at.Len;
- a.rs[i].eval = func(t *Thread) Slice { return Slice{rf(t).(ArrayValue), len, len} };
- rt = a.rs[i].t;
+ rf := a.rs[i].asPtr()
+ a.rs[i] = a.rs[i].newExpr(lt, a.rs[i].desc)
+ len := at.Len
+ a.rs[i].eval = func(t *Thread) Slice { return Slice{rf(t).(ArrayValue), len, len} }
+ rt = a.rs[i].t
}
}
}
@@ -415,7 +415,7 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
} else {
a.rs[i].diag("illegal operand types in %s %d of %s\n\t%v\n\t%v", a.errPosName, i+1, a.errOp, lt, rt)
}
- bad = true;
+ bad = true
}
}
if bad {
@@ -428,7 +428,7 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
return genAssign(lt, a.rs[0])
}
// Case 2 or 3
- as := make([]func(lv Value, t *Thread), len(a.rs));
+ as := make([]func(lv Value, t *Thread), len(a.rs))
for i, r := range a.rs {
as[i] = genAssign(lmt.Elems[i], r)
}
@@ -436,22 +436,22 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) {
if effect != nil {
effect(t)
}
- lmv := lv.(multiV);
+ lmv := lv.(multiV)
for i, a := range as {
a(lmv[i], t)
}
- };
+ }
}
// compileAssign compiles an assignment operation without the full
// generality of an assignCompiler. See assignCompiler for a
// description of the arguments.
func (a *compiler) compileAssign(pos token.Position, b *block, lt Type, rs []*expr, errOp, errPosName string) (func(Value, *Thread)) {
- ac, ok := a.checkAssign(pos, rs, errOp, errPosName);
+ ac, ok := a.checkAssign(pos, rs, errOp, errPosName)
if !ok {
return nil
}
- return ac.compile(b, lt);
+ return ac.compile(b, lt)
}
/*
@@ -462,11 +462,11 @@ func (a *compiler) compileAssign(pos token.Position, b *block, lt Type, rs []*ex
// of a single expression. It does not embed funcCompiler because
// expressions can appear at top level.
type exprCompiler struct {
- *compiler;
+ *compiler
// The block this expression is being compiled in.
- block *block;
+ block *block
// Whether this expression is used in a constant context.
- constant bool;
+ constant bool
}
// compile compiles an expression AST. callCtx should be true if this
@@ -474,7 +474,7 @@ type exprCompiler struct {
// the returned expression to be a type or a built-in function (which
// otherwise result in errors).
func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
- ei := &exprInfo{a.compiler, x.Pos()};
+ ei := &exprInfo{a.compiler, x.Pos()}
switch x := x.(type) {
// Literals
@@ -496,21 +496,21 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
goto notimpl
case *ast.FuncLit:
- decl := ei.compileFuncType(a.block, x.Type);
+ decl := ei.compileFuncType(a.block, x.Type)
if decl == nil {
// TODO(austin) Try compiling the body,
// perhaps with dummy argument definitions
return nil
}
- fn := ei.compileFunc(a.block, decl, x.Body);
+ fn := ei.compileFunc(a.block, decl, x.Body)
if fn == nil {
return nil
}
if a.constant {
- a.diagAt(x, "function literal used in constant expression");
- return nil;
+ a.diagAt(x, "function literal used in constant expression")
+ return nil
}
- return ei.compileFuncLit(decl, fn);
+ return ei.compileFuncLit(decl, fn)
// Types
case *ast.ArrayType:
@@ -535,24 +535,24 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
// Remaining expressions
case *ast.BadExpr:
// Error already reported by parser
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
case *ast.BinaryExpr:
- l, r := a.compile(x.X, false), a.compile(x.Y, false);
+ l, r := a.compile(x.X, false), a.compile(x.Y, false)
if l == nil || r == nil {
return nil
}
- return ei.compileBinaryExpr(x.Op, l, r);
+ return ei.compileBinaryExpr(x.Op, l, r)
case *ast.CallExpr:
- l := a.compile(x.Fun, true);
- args := make([]*expr, len(x.Args));
- bad := false;
+ l := a.compile(x.Fun, true)
+ args := make([]*expr, len(x.Args))
+ bad := false
for i, arg := range x.Args {
if i == 0 && l != nil && (l.t == Type(makeType) || l.t == Type(newType)) {
- argei := &exprInfo{a.compiler, arg.Pos()};
- args[i] = argei.exprFromType(a.compileType(a.block, arg));
+ argei := &exprInfo{a.compiler, arg.Pos()}
+ args[i] = argei.exprFromType(a.compileType(a.block, arg))
} else {
args[i] = a.compile(arg, false)
}
@@ -564,13 +564,13 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
return nil
}
if a.constant {
- a.diagAt(x, "function call in constant context");
- return nil;
+ a.diagAt(x, "function call in constant context")
+ return nil
}
if l.valType != nil {
- a.diagAt(x, "type conversions not implemented");
- return nil;
+ a.diagAt(x, "type conversions not implemented")
+ return nil
} else if ft, ok := l.t.(*FuncType); ok && ft.builtin != "" {
return ei.compileBuiltinCallExpr(a.block, ft, args)
} else {
@@ -581,25 +581,25 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
return ei.compileIdent(a.block, a.constant, callCtx, x.Value)
case *ast.IndexExpr:
- l, r := a.compile(x.X, false), a.compile(x.Index, false);
+ l, r := a.compile(x.X, false), a.compile(x.Index, false)
if l == nil || r == nil {
return nil
}
- return ei.compileIndexExpr(l, r);
+ return ei.compileIndexExpr(l, r)
case *ast.SliceExpr:
- end := x.End;
+ end := x.End
if end == nil {
// TODO: set end to len(x.X)
panic("unimplemented")
}
- arr := a.compile(x.X, false);
- lo := a.compile(x.Index, false);
- hi := a.compile(end, false);
+ arr := a.compile(x.X, false)
+ lo := a.compile(x.Index, false)
+ hi := a.compile(end, false)
if arr == nil || lo == nil || hi == nil {
return nil
}
- return ei.compileSliceExpr(arr, lo, hi);
+ return ei.compileSliceExpr(arr, lo, hi)
case *ast.KeyValueExpr:
goto notimpl
@@ -608,16 +608,16 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
return a.compile(x.X, callCtx)
case *ast.SelectorExpr:
- v := a.compile(x.X, false);
+ v := a.compile(x.X, false)
if v == nil {
return nil
}
- return ei.compileSelectorExpr(v, x.Sel.Value);
+ return ei.compileSelectorExpr(v, x.Sel.Value)
case *ast.StarExpr:
// We pass down our call context because this could be
// a pointer type (and thus a type conversion)
- v := a.compile(x.X, callCtx);
+ v := a.compile(x.X, callCtx)
if v == nil {
return nil
}
@@ -625,13 +625,13 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
// Turns out this was a pointer type, not a dereference
return ei.exprFromType(NewPtrType(v.valType))
}
- return ei.compileStarExpr(v);
+ return ei.compileStarExpr(v)
case *ast.StringList:
- strings := make([]*expr, len(x.Strings));
- bad := false;
+ strings := make([]*expr, len(x.Strings))
+ bad := false
for i, s := range x.Strings {
- strings[i] = a.compile(s, false);
+ strings[i] = a.compile(s, false)
if strings[i] == nil {
bad = true
}
@@ -639,7 +639,7 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
if bad {
return nil
}
- return ei.compileStringList(strings);
+ return ei.compileStringList(strings)
case *ast.StructType:
goto notimpl
@@ -648,138 +648,138 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr {
goto notimpl
case *ast.UnaryExpr:
- v := a.compile(x.X, false);
+ v := a.compile(x.X, false)
if v == nil {
return nil
}
- return ei.compileUnaryExpr(x.Op, v);
+ return ei.compileUnaryExpr(x.Op, v)
}
- log.Crashf("unexpected ast node type %T", x);
- panic();
+ log.Crashf("unexpected ast node type %T", x)
+ panic()
typeexpr:
if !callCtx {
- a.diagAt(x, "type used as expression");
- return nil;
+ a.diagAt(x, "type used as expression")
+ return nil
}
- return ei.exprFromType(a.compileType(a.block, x));
+ return ei.exprFromType(a.compileType(a.block, x))
notimpl:
- a.diagAt(x, "%T expression node not implemented", x);
- return nil;
+ a.diagAt(x, "%T expression node not implemented", x)
+ return nil
}
func (a *exprInfo) exprFromType(t Type) *expr {
if t == nil {
return nil
}
- expr := a.newExpr(nil, "type");
- expr.valType = t;
- return expr;
+ expr := a.newExpr(nil, "type")
+ expr.valType = t
+ return expr
}
func (a *exprInfo) compileIdent(b *block, constant bool, callCtx bool, name string) *expr {
- bl, level, def := b.Lookup(name);
+ bl, level, def := b.Lookup(name)
if def == nil {
- a.diag("%s: undefined", name);
- return nil;
+ a.diag("%s: undefined", name)
+ return nil
}
switch def := def.(type) {
case *Constant:
- expr := a.newExpr(def.Type, "constant");
+ expr := a.newExpr(def.Type, "constant")
if ft, ok := def.Type.(*FuncType); ok && ft.builtin != "" {
// XXX(Spec) I don't think anything says that
// built-in functions can't be used as values.
if !callCtx {
- a.diag("built-in function %s cannot be used as a value", ft.builtin);
- return nil;
+ a.diag("built-in function %s cannot be used as a value", ft.builtin)
+ return nil
}
// Otherwise, we leave the evaluators empty
// because this is handled specially
} else {
expr.genConstant(def.Value)
}
- return expr;
+ return expr
case *Variable:
if constant {
- a.diag("variable %s used in constant expression", name);
- return nil;
+ a.diag("variable %s used in constant expression", name)
+ return nil
}
if bl.global {
return a.compileGlobalVariable(def)
}
- return a.compileVariable(level, def);
+ return a.compileVariable(level, def)
case Type:
if callCtx {
return a.exprFromType(def)
}
- a.diag("type %v used as expression", name);
- return nil;
+ a.diag("type %v used as expression", name)
+ return nil
}
- log.Crashf("name %s has unknown type %T", name, def);
- panic();
+ log.Crashf("name %s has unknown type %T", name, def)
+ panic()
}
func (a *exprInfo) compileVariable(level int, v *Variable) *expr {
if v.Type == nil {
// Placeholder definition from an earlier error
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
}
- expr := a.newExpr(v.Type, "variable");
- expr.genIdentOp(level, v.Index);
- return expr;
+ expr := a.newExpr(v.Type, "variable")
+ expr.genIdentOp(level, v.Index)
+ return expr
}
func (a *exprInfo) compileGlobalVariable(v *Variable) *expr {
if v.Type == nil {
// Placeholder definition from an earlier error
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
}
if v.Init == nil {
v.Init = v.Type.Zero()
}
- expr := a.newExpr(v.Type, "variable");
- val := v.Init;
- expr.genValue(func(t *Thread) Value { return val });
- return expr;
+ expr := a.newExpr(v.Type, "variable")
+ val := v.Init
+ expr.genValue(func(t *Thread) Value { return val })
+ return expr
}
func (a *exprInfo) compileIdealInt(i *bignum.Integer, desc string) *expr {
- expr := a.newExpr(IdealIntType, desc);
- expr.eval = func() *bignum.Integer { return i };
- return expr;
+ expr := a.newExpr(IdealIntType, desc)
+ expr.eval = func() *bignum.Integer { return i }
+ return expr
}
func (a *exprInfo) compileIntLit(lit string) *expr {
- i, _, _ := bignum.IntFromString(lit, 0);
- return a.compileIdealInt(i, "integer literal");
+ i, _, _ := bignum.IntFromString(lit, 0)
+ return a.compileIdealInt(i, "integer literal")
}
func (a *exprInfo) compileCharLit(lit string) *expr {
if lit[0] != '\'' {
// Caught by parser
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
}
- v, _, tail, err := strconv.UnquoteChar(lit[1:], '\'');
+ v, _, tail, err := strconv.UnquoteChar(lit[1:], '\'')
if err != nil || tail != "'" {
// Caught by parser
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
}
- return a.compileIdealInt(bignum.Int(int64(v)), "character literal");
+ return a.compileIdealInt(bignum.Int(int64(v)), "character literal")
}
func (a *exprInfo) compileFloatLit(lit string) *expr {
- f, _, n := bignum.RatFromString(lit, 0);
+ f, _, n := bignum.RatFromString(lit, 0)
if n != len(lit) {
log.Crashf("malformed float literal %s at %v passed parser", lit, a.pos)
}
- expr := a.newExpr(IdealFloatType, "float literal");
- expr.eval = func() *bignum.Rational { return f };
- return expr;
+ expr := a.newExpr(IdealFloatType, "float literal")
+ expr.eval = func() *bignum.Rational { return f }
+ return expr
}
func (a *exprInfo) compileString(s string) *expr {
@@ -787,47 +787,47 @@ func (a *exprInfo) compileString(s string) *expr {
// compatible with type string.
// TODO(austin) Use unnamed string type.
- expr := a.newExpr(StringType, "string literal");
- expr.eval = func(*Thread) string { return s };
- return expr;
+ expr := a.newExpr(StringType, "string literal")
+ expr.eval = func(*Thread) string { return s }
+ return expr
}
func (a *exprInfo) compileStringLit(lit string) *expr {
- s, err := strconv.Unquote(lit);
+ s, err := strconv.Unquote(lit)
if err != nil {
- a.diag("illegal string literal, %v", err);
- return nil;
+ a.diag("illegal string literal, %v", err)
+ return nil
}
- return a.compileString(s);
+ return a.compileString(s)
}
func (a *exprInfo) compileStringList(list []*expr) *expr {
- ss := make([]string, len(list));
+ ss := make([]string, len(list))
for i, s := range list {
ss[i] = s.asString()(nil)
}
- return a.compileString(strings.Join(ss, ""));
+ return a.compileString(strings.Join(ss, ""))
}
func (a *exprInfo) compileFuncLit(decl *FuncDecl, fn func(*Thread) Func) *expr {
- expr := a.newExpr(decl.Type, "function literal");
- expr.eval = fn;
- return expr;
+ expr := a.newExpr(decl.Type, "function literal")
+ expr.eval = fn
+ return expr
}
func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr {
// mark marks a field that matches the selector name. It
// tracks the best depth found so far and whether more than
// one field has been found at that depth.
- bestDepth := -1;
- ambig := false;
- amberr := "";
+ bestDepth := -1
+ ambig := false
+ amberr := ""
mark := func(depth int, pathName string) {
switch {
case bestDepth == -1 || depth < bestDepth:
- bestDepth = depth;
- ambig = false;
- amberr = "";
+ bestDepth = depth
+ ambig = false
+ amberr = ""
case depth == bestDepth:
ambig = true
@@ -835,10 +835,10 @@ func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr {
default:
log.Crashf("Marked field at depth %d, but already found one at depth %d", depth, bestDepth)
}
- amberr += "\n\t" + pathName[1:];
- };
+ amberr += "\n\t" + pathName[1:]
+ }
- visited := make(map[Type]bool);
+ visited := make(map[Type]bool)
// find recursively searches for the named field, starting at
// type t. If it finds the named field, it returns a function
@@ -850,7 +850,7 @@ func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr {
// TODO(austin) Now that the expression compiler works on
// semantic values instead of AST's, there should be a much
// better way of doing this.
- var find func(Type, int, string) (func(*expr) *expr);
+ var find func(Type, int, string) (func(*expr) *expr)
find = func(t Type, depth int, pathName string) (func(*expr) *expr) {
// Don't bother looking if we've found something shallower
if bestDepth != -1 && bestDepth < depth {
@@ -861,37 +861,37 @@ func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr {
if _, ok := visited[t]; ok {
return nil
}
- visited[t] = true;
+ visited[t] = true
// Implicit dereference
- deref := false;
+ deref := false
if ti, ok := t.(*PtrType); ok {
- deref = true;
- t = ti.Elem;
+ deref = true
+ t = ti.Elem
}
// If it's a named type, look for methods
if ti, ok := t.(*NamedType); ok {
- _, ok := ti.methods[name];
+ _, ok := ti.methods[name]
if ok {
- mark(depth, pathName+"."+name);
- log.Crash("Methods not implemented");
+ mark(depth, pathName+"."+name)
+ log.Crash("Methods not implemented")
}
- t = ti.Def;
+ t = ti.Def
}
// If it's a struct type, check fields and embedded types
- var builder func(*expr) *expr;
+ var builder func(*expr) *expr
if t, ok := t.(*StructType); ok {
for i, f := range t.Elems {
- var sub func(*expr) *expr;
+ var sub func(*expr) *expr
switch {
case f.Name == name:
- mark(depth, pathName+"."+name);
- sub = func(e *expr) *expr { return e };
+ mark(depth, pathName+"."+name)
+ sub = func(e *expr) *expr { return e }
case f.Anonymous:
- sub = find(f.Type, depth+1, pathName+"."+f.Name);
+ sub = find(f.Type, depth+1, pathName+"."+f.Name)
if sub == nil {
continue
}
@@ -902,48 +902,48 @@ func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr {
// We found something. Create a
// builder for accessing this field.
- ft := f.Type;
- index := i;
+ ft := f.Type
+ index := i
builder = func(parent *expr) *expr {
if deref {
parent = a.compileStarExpr(parent)
}
- expr := a.newExpr(ft, "selector expression");
- pf := parent.asStruct();
- evalAddr := func(t *Thread) Value { return pf(t).Field(t, index) };
- expr.genValue(evalAddr);
- return sub(expr);
- };
+ expr := a.newExpr(ft, "selector expression")
+ pf := parent.asStruct()
+ evalAddr := func(t *Thread) Value { return pf(t).Field(t, index) }
+ expr.genValue(evalAddr)
+ return sub(expr)
+ }
}
}
- return builder;
- };
+ return builder
+ }
- builder := find(v.t, 0, "");
+ builder := find(v.t, 0, "")
if builder == nil {
- a.diag("type %v has no field or method %s", v.t, name);
- return nil;
+ a.diag("type %v has no field or method %s", v.t, name)
+ return nil
}
if ambig {
- a.diag("field %s is ambiguous in type %v%s", name, v.t, amberr);
- return nil;
+ a.diag("field %s is ambiguous in type %v%s", name, v.t, amberr)
+ return nil
}
- return builder(v);
+ return builder(v)
}
func (a *exprInfo) compileSliceExpr(arr, lo, hi *expr) *expr {
// Type check object
- arr = arr.derefArray();
+ arr = arr.derefArray()
- var at Type;
- var maxIndex int64 = -1;
+ var at Type
+ var maxIndex int64 = -1
switch lt := arr.t.lit().(type) {
case *ArrayType:
- at = NewSliceType(lt.Elem);
- maxIndex = lt.Len;
+ at = NewSliceType(lt.Elem)
+ maxIndex = lt.Len
case *SliceType:
at = lt
@@ -952,105 +952,105 @@ func (a *exprInfo) compileSliceExpr(arr, lo, hi *expr) *expr {
at = lt
default:
- a.diag("cannot slice %v", arr.t);
- return nil;
+ a.diag("cannot slice %v", arr.t)
+ return nil
}
// Type check index and convert to int
// XXX(Spec) It's unclear if ideal floats with no
// fractional part are allowed here. 6g allows it. I
// believe that's wrong.
- lo = lo.convertToInt(maxIndex, "slice", "slice");
- hi = hi.convertToInt(maxIndex, "slice", "slice");
+ lo = lo.convertToInt(maxIndex, "slice", "slice")
+ hi = hi.convertToInt(maxIndex, "slice", "slice")
if lo == nil || hi == nil {
return nil
}
- expr := a.newExpr(at, "slice expression");
+ expr := a.newExpr(at, "slice expression")
// Compile
- lof := lo.asInt();
- hif := hi.asInt();
+ lof := lo.asInt()
+ hif := hi.asInt()
switch lt := arr.t.lit().(type) {
case *ArrayType:
- arrf := arr.asArray();
- bound := lt.Len;
+ arrf := arr.asArray()
+ bound := lt.Len
expr.eval = func(t *Thread) Slice {
- arr, lo, hi := arrf(t), lof(t), hif(t);
+ arr, lo, hi := arrf(t), lof(t), hif(t)
if lo > hi || hi > bound || lo < 0 {
t.Abort(SliceError{lo, hi, bound})
}
- return Slice{arr.Sub(lo, bound-lo), hi - lo, bound - lo};
- };
+ return Slice{arr.Sub(lo, bound-lo), hi - lo, bound - lo}
+ }
case *SliceType:
- arrf := arr.asSlice();
+ arrf := arr.asSlice()
expr.eval = func(t *Thread) Slice {
- arr, lo, hi := arrf(t), lof(t), hif(t);
+ arr, lo, hi := arrf(t), lof(t), hif(t)
if lo > hi || hi > arr.Cap || lo < 0 {
t.Abort(SliceError{lo, hi, arr.Cap})
}
- return Slice{arr.Base.Sub(lo, arr.Cap-lo), hi - lo, arr.Cap - lo};
- };
+ return Slice{arr.Base.Sub(lo, arr.Cap-lo), hi - lo, arr.Cap - lo}
+ }
case *stringType:
- arrf := arr.asString();
+ arrf := arr.asString()
// TODO(austin) This pulls over the whole string in a
// remote setting, instead of creating a substring backed
// by remote memory.
expr.eval = func(t *Thread) string {
- arr, lo, hi := arrf(t), lof(t), hif(t);
+ arr, lo, hi := arrf(t), lof(t), hif(t)
if lo > hi || hi > int64(len(arr)) || lo < 0 {
t.Abort(SliceError{lo, hi, int64(len(arr))})
}
- return arr[lo:hi];
- };
+ return arr[lo:hi]
+ }
default:
log.Crashf("unexpected left operand type %T", arr.t.lit())
}
- return expr;
+ return expr
}
func (a *exprInfo) compileIndexExpr(l, r *expr) *expr {
// Type check object
- l = l.derefArray();
+ l = l.derefArray()
- var at Type;
- intIndex := false;
- var maxIndex int64 = -1;
+ var at Type
+ intIndex := false
+ var maxIndex int64 = -1
switch lt := l.t.lit().(type) {
case *ArrayType:
- at = lt.Elem;
- intIndex = true;
- maxIndex = lt.Len;
+ at = lt.Elem
+ intIndex = true
+ maxIndex = lt.Len
case *SliceType:
- at = lt.Elem;
- intIndex = true;
+ at = lt.Elem
+ intIndex = true
case *stringType:
- at = Uint8Type;
- intIndex = true;
+ at = Uint8Type
+ intIndex = true
case *MapType:
- at = lt.Elem;
+ at = lt.Elem
if r.t.isIdeal() {
- r = r.convertTo(lt.Key);
+ r = r.convertTo(lt.Key)
if r == nil {
return nil
}
}
if !lt.Key.compat(r.t, false) {
- a.diag("cannot use %s as index into %s", r.t, lt);
- return nil;
+ a.diag("cannot use %s as index into %s", r.t, lt)
+ return nil
}
default:
- a.diag("cannot index into %v", l.t);
- return nil;
+ a.diag("cannot index into %v", l.t)
+ return nil
}
// Type check index and convert to int if necessary
@@ -1058,83 +1058,83 @@ func (a *exprInfo) compileIndexExpr(l, r *expr) *expr {
// XXX(Spec) It's unclear if ideal floats with no
// fractional part are allowed here. 6g allows it. I
// believe that's wrong.
- r = r.convertToInt(maxIndex, "index", "index");
+ r = r.convertToInt(maxIndex, "index", "index")
if r == nil {
return nil
}
}
- expr := a.newExpr(at, "index expression");
+ expr := a.newExpr(at, "index expression")
// Compile
switch lt := l.t.lit().(type) {
case *ArrayType:
- lf := l.asArray();
- rf := r.asInt();
- bound := lt.Len;
+ lf := l.asArray()
+ rf := r.asInt()
+ bound := lt.Len
expr.genValue(func(t *Thread) Value {
- l, r := lf(t), rf(t);
+ l, r := lf(t), rf(t)
if r < 0 || r >= bound {
t.Abort(IndexError{r, bound})
}
- return l.Elem(t, r);
- });
+ return l.Elem(t, r)
+ })
case *SliceType:
- lf := l.asSlice();
- rf := r.asInt();
+ lf := l.asSlice()
+ rf := r.asInt()
expr.genValue(func(t *Thread) Value {
- l, r := lf(t), rf(t);
+ l, r := lf(t), rf(t)
if l.Base == nil {
t.Abort(NilPointerError{})
}
if r < 0 || r >= l.Len {
t.Abort(IndexError{r, l.Len})
}
- return l.Base.Elem(t, r);
- });
+ return l.Base.Elem(t, r)
+ })
case *stringType:
- lf := l.asString();
- rf := r.asInt();
+ lf := l.asString()
+ rf := r.asInt()
// TODO(austin) This pulls over the whole string in a
// remote setting, instead of just the one character.
expr.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
+ l, r := lf(t), rf(t)
if r < 0 || r >= int64(len(l)) {
t.Abort(IndexError{r, int64(len(l))})
}
- return uint64(l[r]);
- };
+ return uint64(l[r])
+ }
case *MapType:
- lf := l.asMap();
- rf := r.asInterface();
+ lf := l.asMap()
+ rf := r.asInterface()
expr.genValue(func(t *Thread) Value {
- m := lf(t);
- k := rf(t);
+ m := lf(t)
+ k := rf(t)
if m == nil {
t.Abort(NilPointerError{})
}
- e := m.Elem(t, k);
+ e := m.Elem(t, k)
if e == nil {
t.Abort(KeyError{k})
}
- return e;
- });
+ return e
+ })
// genValue makes things addressable, but map values
// aren't addressable.
- expr.evalAddr = nil;
+ expr.evalAddr = nil
expr.evalMapValue = func(t *Thread) (Map, interface{}) {
// TODO(austin) Key check? nil check?
return lf(t), rf(t)
- };
+ }
default:
log.Crashf("unexpected left operand type %T", l.t.lit())
}
- return expr;
+ return expr
}
func (a *exprInfo) compileCallExpr(b *block, l *expr, as []*expr) *expr {
@@ -1148,10 +1148,10 @@ func (a *exprInfo) compileCallExpr(b *block, l *expr, as []*expr) *expr {
// type of that type is still whatever it's defined to. Thus,
// in "type Foo int", Foo is still an integer type and in
// "type Foo func()", Foo is a function type.
- lt, ok := l.t.lit().(*FuncType);
+ lt, ok := l.t.lit().(*FuncType)
if !ok {
- a.diag("cannot call non-function type %v", l.t);
- return nil;
+ a.diag("cannot call non-function type %v", l.t)
+ return nil
}
// The arguments must be single-valued expressions assignment
@@ -1159,14 +1159,14 @@ func (a *exprInfo) compileCallExpr(b *block, l *expr, as []*expr) *expr {
//
// XXX(Spec) The spec is wrong. It can also be a single
// multi-valued expression.
- nin := len(lt.In);
- assign := a.compileAssign(a.pos, b, NewMultiType(lt.In), as, "function call", "argument");
+ nin := len(lt.In)
+ assign := a.compileAssign(a.pos, b, NewMultiType(lt.In), as, "function call", "argument")
if assign == nil {
return nil
}
- var t Type;
- nout := len(lt.Out);
+ var t Type
+ nout := len(lt.Out)
switch nout {
case 0:
t = EmptyType
@@ -1175,10 +1175,10 @@ func (a *exprInfo) compileCallExpr(b *block, l *expr, as []*expr) *expr {
default:
t = NewMultiType(lt.Out)
}
- expr := a.newExpr(t, "function call");
+ expr := a.newExpr(t, "function call")
// Gather argument and out types to initialize frame variables
- vts := make([]Type, nin+nout);
+ vts := make([]Type, nin+nout)
for i, t := range lt.In {
vts[i] = t
}
@@ -1187,103 +1187,103 @@ func (a *exprInfo) compileCallExpr(b *block, l *expr, as []*expr) *expr {
}
// Compile
- lf := l.asFunc();
+ lf := l.asFunc()
call := func(t *Thread) []Value {
- fun := lf(t);
- fr := fun.NewFrame();
+ fun := lf(t)
+ fr := fun.NewFrame()
for i, t := range vts {
fr.Vars[i] = t.Zero()
}
- assign(multiV(fr.Vars[0:nin]), t);
- oldf := t.f;
- t.f = fr;
- fun.Call(t);
- t.f = oldf;
- return fr.Vars[nin : nin+nout];
- };
- expr.genFuncCall(call);
+ assign(multiV(fr.Vars[0:nin]), t)
+ oldf := t.f
+ t.f = fr
+ fun.Call(t)
+ t.f = oldf
+ return fr.Vars[nin : nin+nout]
+ }
+ expr.genFuncCall(call)
- return expr;
+ return expr
}
func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *expr {
checkCount := func(min, max int) bool {
if len(as) < min {
- a.diag("not enough arguments to %s", ft.builtin);
- return false;
+ a.diag("not enough arguments to %s", ft.builtin)
+ return false
} else if len(as) > max {
- a.diag("too many arguments to %s", ft.builtin);
- return false;
+ a.diag("too many arguments to %s", ft.builtin)
+ return false
}
- return true;
- };
+ return true
+ }
switch ft {
case capType:
if !checkCount(1, 1) {
return nil
}
- arg := as[0].derefArray();
- expr := a.newExpr(IntType, "function call");
+ arg := as[0].derefArray()
+ expr := a.newExpr(IntType, "function call")
switch t := arg.t.lit().(type) {
case *ArrayType:
// TODO(austin) It would be nice if this could
// be a constant int.
- v := t.Len;
- expr.eval = func(t *Thread) int64 { return v };
+ v := t.Len
+ expr.eval = func(t *Thread) int64 { return v }
case *SliceType:
- vf := arg.asSlice();
- expr.eval = func(t *Thread) int64 { return vf(t).Cap };
+ vf := arg.asSlice()
+ expr.eval = func(t *Thread) int64 { return vf(t).Cap }
//case *ChanType:
default:
- a.diag("illegal argument type for cap function\n\t%v", arg.t);
- return nil;
+ a.diag("illegal argument type for cap function\n\t%v", arg.t)
+ return nil
}
- return expr;
+ return expr
case lenType:
if !checkCount(1, 1) {
return nil
}
- arg := as[0].derefArray();
- expr := a.newExpr(IntType, "function call");
+ arg := as[0].derefArray()
+ expr := a.newExpr(IntType, "function call")
switch t := arg.t.lit().(type) {
case *stringType:
- vf := arg.asString();
- expr.eval = func(t *Thread) int64 { return int64(len(vf(t))) };
+ vf := arg.asString()
+ expr.eval = func(t *Thread) int64 { return int64(len(vf(t))) }
case *ArrayType:
// TODO(austin) It would be nice if this could
// be a constant int.
- v := t.Len;
- expr.eval = func(t *Thread) int64 { return v };
+ v := t.Len
+ expr.eval = func(t *Thread) int64 { return v }
case *SliceType:
- vf := arg.asSlice();
- expr.eval = func(t *Thread) int64 { return vf(t).Len };
+ vf := arg.asSlice()
+ expr.eval = func(t *Thread) int64 { return vf(t).Len }
case *MapType:
- vf := arg.asMap();
+ vf := arg.asMap()
expr.eval = func(t *Thread) int64 {
// XXX(Spec) What's the len of an
// uninitialized map?
- m := vf(t);
+ m := vf(t)
if m == nil {
return 0
}
- return m.Len(t);
- };
+ return m.Len(t)
+ }
//case *ChanType:
default:
- a.diag("illegal argument type for len function\n\t%v", arg.t);
- return nil;
+ a.diag("illegal argument type for len function\n\t%v", arg.t)
+ return nil
}
- return expr;
+ return expr
case makeType:
if !checkCount(1, 3) {
@@ -1292,21 +1292,21 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e
// XXX(Spec) What are the types of the
// arguments? Do they have to be ints? 6g
// accepts any integral type.
- var lenexpr, capexpr *expr;
- var lenf, capf func(*Thread) int64;
+ var lenexpr, capexpr *expr
+ var lenf, capf func(*Thread) int64
if len(as) > 1 {
- lenexpr = as[1].convertToInt(-1, "length", "make function");
+ lenexpr = as[1].convertToInt(-1, "length", "make function")
if lenexpr == nil {
return nil
}
- lenf = lenexpr.asInt();
+ lenf = lenexpr.asInt()
}
if len(as) > 2 {
- capexpr = as[2].convertToInt(-1, "capacity", "make function");
+ capexpr = as[2].convertToInt(-1, "capacity", "make function")
if capexpr == nil {
return nil
}
- capf = capexpr.asInt();
+ capf = capexpr.asInt()
}
switch t := as[0].valType.lit().(type) {
@@ -1319,18 +1319,18 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e
if !checkCount(2, 3) {
return nil
}
- et := t.Elem;
- expr := a.newExpr(t, "function call");
+ et := t.Elem
+ expr := a.newExpr(t, "function call")
expr.eval = func(t *Thread) Slice {
- l := lenf(t);
+ l := lenf(t)
// XXX(Spec) What if len or cap is
// negative? The runtime panics.
if l < 0 {
t.Abort(NegativeLengthError{l})
}
- c := l;
+ c := l
if capf != nil {
- c = capf(t);
+ c = capf(t)
if c < 0 {
t.Abort(NegativeCapacityError{c})
}
@@ -1341,13 +1341,13 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e
c = l
}
}
- base := arrayV(make([]Value, c));
+ base := arrayV(make([]Value, c))
for i := int64(0); i < c; i++ {
base[i] = et.Zero()
}
- return Slice{&base, l, c};
- };
- return expr;
+ return Slice{&base, l, c}
+ }
+ return expr
case *MapType:
// A new, empty map value is made using the
@@ -1357,52 +1357,52 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e
if !checkCount(1, 2) {
return nil
}
- expr := a.newExpr(t, "function call");
+ expr := a.newExpr(t, "function call")
expr.eval = func(t *Thread) Map {
if lenf == nil {
return make(evalMap)
}
- l := lenf(t);
- return make(evalMap, l);
- };
- return expr;
+ l := lenf(t)
+ return make(evalMap, l)
+ }
+ return expr
//case *ChanType:
default:
- a.diag("illegal argument type for make function\n\t%v", as[0].valType);
- return nil;
+ a.diag("illegal argument type for make function\n\t%v", as[0].valType)
+ return nil
}
case closeType, closedType:
- a.diag("built-in function %s not implemented", ft.builtin);
- return nil;
+ a.diag("built-in function %s not implemented", ft.builtin)
+ return nil
case newType:
if !checkCount(1, 1) {
return nil
}
- t := as[0].valType;
- expr := a.newExpr(NewPtrType(t), "new");
- expr.eval = func(*Thread) Value { return t.Zero() };
- return expr;
+ t := as[0].valType
+ expr := a.newExpr(NewPtrType(t), "new")
+ expr.eval = func(*Thread) Value { return t.Zero() }
+ return expr
case panicType, paniclnType, printType, printlnType:
- evals := make([]func(*Thread) interface{}, len(as));
+ evals := make([]func(*Thread) interface{}, len(as))
for i, x := range as {
evals[i] = x.asInterface()
}
- spaces := ft == paniclnType || ft == printlnType;
- newline := ft != printType;
+ spaces := ft == paniclnType || ft == printlnType
+ newline := ft != printType
printer := func(t *Thread) {
for i, eval := range evals {
if i > 0 && spaces {
print(" ")
}
- v := eval(t);
+ v := eval(t)
type stringer interface {
- String() string;
+ String() string
}
switch v1 := v.(type) {
case bool:
@@ -1424,67 +1424,67 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e
if newline {
print("\n")
}
- };
- expr := a.newExpr(EmptyType, "print");
- expr.exec = printer;
+ }
+ expr := a.newExpr(EmptyType, "print")
+ expr.exec = printer
if ft == panicType || ft == paniclnType {
expr.exec = func(t *Thread) {
- printer(t);
- t.Abort(os.NewError("panic"));
+ printer(t)
+ t.Abort(os.NewError("panic"))
}
}
- return expr;
+ return expr
}
- log.Crashf("unexpected built-in function '%s'", ft.builtin);
- panic();
+ log.Crashf("unexpected built-in function '%s'", ft.builtin)
+ panic()
}
func (a *exprInfo) compileStarExpr(v *expr) *expr {
switch vt := v.t.lit().(type) {
case *PtrType:
- expr := a.newExpr(vt.Elem, "indirect expression");
- vf := v.asPtr();
+ expr := a.newExpr(vt.Elem, "indirect expression")
+ vf := v.asPtr()
expr.genValue(func(t *Thread) Value {
- v := vf(t);
+ v := vf(t)
if v == nil {
t.Abort(NilPointerError{})
}
- return v;
- });
- return expr;
+ return v
+ })
+ return expr
}
- a.diagOpType(token.MUL, v.t);
- return nil;
+ a.diagOpType(token.MUL, v.t)
+ return nil
}
var unaryOpDescs = make(map[token.Token]string)
func (a *exprInfo) compileUnaryExpr(op token.Token, v *expr) *expr {
// Type check
- var t Type;
+ var t Type
switch op {
case token.ADD, token.SUB:
if !v.t.isInteger() && !v.t.isFloat() {
- a.diagOpType(op, v.t);
- return nil;
+ a.diagOpType(op, v.t)
+ return nil
}
- t = v.t;
+ t = v.t
case token.NOT:
if !v.t.isBoolean() {
- a.diagOpType(op, v.t);
- return nil;
+ a.diagOpType(op, v.t)
+ return nil
}
- t = BoolType;
+ t = BoolType
case token.XOR:
if !v.t.isInteger() {
- a.diagOpType(op, v.t);
- return nil;
+ a.diagOpType(op, v.t)
+ return nil
}
- t = v.t;
+ t = v.t
case token.AND:
// The unary prefix address-of operator & generates
@@ -1492,15 +1492,15 @@ func (a *exprInfo) compileUnaryExpr(op token.Token, v *expr) *expr {
// variable, pointer indirection, field selector, or
// array or slice indexing operation.
if v.evalAddr == nil {
- a.diag("cannot take the address of %s", v.desc);
- return nil;
+ a.diag("cannot take the address of %s", v.desc)
+ return nil
}
// TODO(austin) Implement "It is illegal to take the
// address of a function result variable" once I have
// function result variables.
- t = NewPtrType(v.t);
+ t = NewPtrType(v.t)
case token.ARROW:
log.Crashf("Unary op %v not implemented", op)
@@ -1509,19 +1509,19 @@ func (a *exprInfo) compileUnaryExpr(op token.Token, v *expr) *expr {
log.Crashf("unknown unary operator %v", op)
}
- desc, ok := unaryOpDescs[op];
+ desc, ok := unaryOpDescs[op]
if !ok {
- desc = "unary " + op.String() + " expression";
- unaryOpDescs[op] = desc;
+ desc = "unary " + op.String() + " expression"
+ unaryOpDescs[op] = desc
}
// Compile
- expr := a.newExpr(t, desc);
+ expr := a.newExpr(t, desc)
switch op {
case token.ADD:
// Just compile it out
- expr = v;
- expr.desc = desc;
+ expr = v
+ expr.desc = desc
case token.SUB:
expr.genUnaryOpNeg(v)
@@ -1533,22 +1533,22 @@ func (a *exprInfo) compileUnaryExpr(op token.Token, v *expr) *expr {
expr.genUnaryOpXor(v)
case token.AND:
- vf := v.evalAddr;
- expr.eval = func(t *Thread) Value { return vf(t) };
+ vf := v.evalAddr
+ expr.eval = func(t *Thread) Value { return vf(t) }
default:
log.Crashf("Compilation of unary op %v not implemented", op)
}
- return expr;
+ return expr
}
var binOpDescs = make(map[token.Token]string)
func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// Save the original types of l.t and r.t for error messages.
- origlt := l.t;
- origrt := r.t;
+ origlt := l.t
+ origrt := r.t
// XXX(Spec) What is the exact definition of a "named type"?
@@ -1594,38 +1594,38 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// Useful type predicates
// TODO(austin) CL 33668 mandates identical types except for comparisons.
- compat := func() bool { return l.t.compat(r.t, false) };
- integers := func() bool { return l.t.isInteger() && r.t.isInteger() };
- floats := func() bool { return l.t.isFloat() && r.t.isFloat() };
+ compat := func() bool { return l.t.compat(r.t, false) }
+ integers := func() bool { return l.t.isInteger() && r.t.isInteger() }
+ floats := func() bool { return l.t.isFloat() && r.t.isFloat() }
strings := func() bool {
// TODO(austin) Deal with named types
return l.t == StringType && r.t == StringType
- };
- booleans := func() bool { return l.t.isBoolean() && r.t.isBoolean() };
+ }
+ booleans := func() bool { return l.t.isBoolean() && r.t.isBoolean() }
// Type check
- var t Type;
+ var t Type
switch op {
case token.ADD:
if !compat() || (!integers() && !floats() && !strings()) {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
- t = l.t;
+ t = l.t
case token.SUB, token.MUL, token.QUO:
if !compat() || (!integers() && !floats()) {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
- t = l.t;
+ t = l.t
case token.REM, token.AND, token.OR, token.XOR, token.AND_NOT:
if !compat() || !integers() {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
- t = l.t;
+ t = l.t
case token.SHL, token.SHR:
// XXX(Spec) Is it okay for the right operand to be an
@@ -1636,8 +1636,8 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// (§Arithmetic operators)" suggests so and 6g agrees.
if !l.t.isInteger() || !(r.t.isInteger() || r.t.isIdeal()) {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
// The right operand in a shift operation must be
@@ -1645,7 +1645,7 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// number that can be safely converted into an
// unsigned integer type.
if r.t.isIdeal() {
- r2 := r.convertTo(UintType);
+ r2 := r.convertTo(UintType)
if r2 == nil {
return nil
}
@@ -1659,14 +1659,14 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// If both are ideal, but the right side isn't
// an ideal int, convert it to simplify things.
if l.t.isIdeal() && !r.t.isInteger() {
- r = r.convertTo(IdealIntType);
+ r = r.convertTo(IdealIntType)
if r == nil {
log.Crashf("conversion to uintType succeeded, but conversion to idealIntType failed")
}
}
} else if _, ok := r.t.lit().(*uintType); !ok {
- a.diag("right operand of shift must be unsigned");
- return nil;
+ a.diag("right operand of shift must be unsigned")
+ return nil
}
if l.t.isIdeal() && !r.t.isIdeal() {
@@ -1675,7 +1675,7 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// converted to an int. 6g propagates the
// type down from assignments as a hint.
- l = l.convertTo(IntType);
+ l = l.convertTo(IntType)
if l == nil {
return nil
}
@@ -1686,7 +1686,7 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// 2) int SHIFT uint
// 3) ideal int SHIFT ideal int
- t = l.t;
+ t = l.t
case token.LOR, token.LAND:
if !booleans() {
@@ -1698,14 +1698,14 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// the type of the left operand, and NOT an unnamed
// boolean type.
- t = BoolType;
+ t = BoolType
case token.ARROW:
// The operands in channel sends differ in type: one
// is always a channel and the other is a variable or
// value of the channel's element type.
- log.Crash("Binary op <- not implemented");
- t = BoolType;
+ log.Crash("Binary op <- not implemented")
+ t = BoolType
case token.LSS, token.GTR, token.LEQ, token.GEQ:
// XXX(Spec) It's really unclear what types which
@@ -1717,10 +1717,10 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// are some restrictions on when it applies to slices.
if !compat() || (!integers() && !floats() && !strings()) {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
- t = BoolType;
+ t = BoolType
case token.EQL, token.NEQ:
// XXX(Spec) The rules for type checking comparison
@@ -1760,25 +1760,25 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
// TODO(austin) Deal with remaining special cases
if !compat() {
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
// Arrays and structs may not be compared to anything.
switch l.t.(type) {
case *ArrayType, *StructType:
- a.diagOpTypes(op, origlt, origrt);
- return nil;
+ a.diagOpTypes(op, origlt, origrt)
+ return nil
}
- t = BoolType;
+ t = BoolType
default:
log.Crashf("unknown binary operator %v", op)
}
- desc, ok := binOpDescs[op];
+ desc, ok := binOpDescs[op]
if !ok {
- desc = op.String() + " expression";
- binOpDescs[op] = desc;
+ desc = op.String() + " expression"
+ binOpDescs[op] = desc
}
// Check for ideal divide by zero
@@ -1787,14 +1787,14 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
if r.t.isIdeal() {
if (r.t.isInteger() && r.asIdealInt()().IsZero()) ||
(r.t.isFloat() && r.asIdealFloat()().IsZero()) {
- a.diag("divide by zero");
- return nil;
+ a.diag("divide by zero")
+ return nil
}
}
}
// Compile
- expr := a.newExpr(t, desc);
+ expr := a.newExpr(t, desc)
switch op {
case token.ADD:
expr.genBinOpAdd(l, r)
@@ -1825,26 +1825,26 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
case token.SHL:
if l.t.isIdeal() {
- lv := l.asIdealInt()();
- rv := r.asIdealInt()();
- const maxShift = 99999;
+ lv := l.asIdealInt()()
+ rv := r.asIdealInt()()
+ const maxShift = 99999
if rv.Cmp(bignum.Int(maxShift)) > 0 {
- a.diag("left shift by %v; exceeds implementation limit of %v", rv, maxShift);
- expr.t = nil;
- return nil;
+ a.diag("left shift by %v; exceeds implementation limit of %v", rv, maxShift)
+ expr.t = nil
+ return nil
}
- val := lv.Shl(uint(rv.Value()));
- expr.eval = func() *bignum.Integer { return val };
+ val := lv.Shl(uint(rv.Value()))
+ expr.eval = func() *bignum.Integer { return val }
} else {
expr.genBinOpShl(l, r)
}
case token.SHR:
if l.t.isIdeal() {
- lv := l.asIdealInt()();
- rv := r.asIdealInt()();
- val := lv.Shr(uint(rv.Value()));
- expr.eval = func() *bignum.Integer { return val };
+ lv := l.asIdealInt()()
+ rv := r.asIdealInt()()
+ val := lv.Shr(uint(rv.Value()))
+ expr.eval = func() *bignum.Integer { return val }
} else {
expr.genBinOpShr(l, r)
}
@@ -1877,28 +1877,28 @@ func (a *exprInfo) compileBinaryExpr(op token.Token, l, r *expr) *expr {
log.Crashf("Compilation of binary op %v not implemented", op)
}
- return expr;
+ return expr
}
// TODO(austin) This is a hack to eliminate a circular dependency
// between type.go and expr.go
func (a *compiler) compileArrayLen(b *block, expr ast.Expr) (int64, bool) {
- lenExpr := a.compileExpr(b, true, expr);
+ lenExpr := a.compileExpr(b, true, expr)
if lenExpr == nil {
return 0, false
}
// XXX(Spec) Are ideal floats with no fractional part okay?
if lenExpr.t.isIdeal() {
- lenExpr = lenExpr.convertTo(IntType);
+ lenExpr = lenExpr.convertTo(IntType)
if lenExpr == nil {
return 0, false
}
}
if !lenExpr.t.isInteger() {
- a.diagAt(expr, "array size must be an integer");
- return 0, false;
+ a.diagAt(expr, "array size must be an integer")
+ return 0, false
}
switch lenExpr.t.lit().(type) {
@@ -1907,18 +1907,18 @@ func (a *compiler) compileArrayLen(b *block, expr ast.Expr) (int64, bool) {
case *uintType:
return int64(lenExpr.asUint()(nil)), true
}
- log.Crashf("unexpected integer type %T", lenExpr.t);
- return 0, false;
+ log.Crashf("unexpected integer type %T", lenExpr.t)
+ return 0, false
}
func (a *compiler) compileExpr(b *block, constant bool, expr ast.Expr) *expr {
- ec := &exprCompiler{a, b, constant};
- nerr := a.numError();
- e := ec.compile(expr, false);
+ ec := &exprCompiler{a, b, constant}
+ nerr := a.numError()
+ e := ec.compile(expr, false)
if e == nil && nerr == a.numError() {
log.Crashf("expression compilation failed without reporting errors")
}
- return e;
+ return e
}
// extractEffect separates out any effects that the expression may
@@ -1931,21 +1931,21 @@ func (a *compiler) compileExpr(b *block, constant bool, expr ast.Expr) *expr {
// results.
func (a *expr) extractEffect(b *block, errOp string) (func(*Thread), *expr) {
// Create "&a" if a is addressable
- rhs := a;
+ rhs := a
if a.evalAddr != nil {
rhs = a.compileUnaryExpr(token.AND, rhs)
}
// Create temp
- ac, ok := a.checkAssign(a.pos, []*expr{rhs}, errOp, "");
+ ac, ok := a.checkAssign(a.pos, []*expr{rhs}, errOp, "")
if !ok {
return nil, nil
}
if len(ac.rmt.Elems) != 1 {
- a.diag("multi-valued expression not allowed in %s", errOp);
- return nil, nil;
+ a.diag("multi-valued expression not allowed in %s", errOp)
+ return nil, nil
}
- tempType := ac.rmt.Elems[0];
+ tempType := ac.rmt.Elems[0]
if tempType.isIdeal() {
// It's too bad we have to duplicate this rule.
switch {
@@ -1957,30 +1957,30 @@ func (a *expr) extractEffect(b *block, errOp string) (func(*Thread), *expr) {
log.Crashf("unexpected ideal type %v", tempType)
}
}
- temp := b.DefineTemp(tempType);
- tempIdx := temp.Index;
+ temp := b.DefineTemp(tempType)
+ tempIdx := temp.Index
// Create "temp := rhs"
- assign := ac.compile(b, tempType);
+ assign := ac.compile(b, tempType)
if assign == nil {
log.Crashf("compileAssign type check failed")
}
effect := func(t *Thread) {
- tempVal := tempType.Zero();
- t.f.Vars[tempIdx] = tempVal;
- assign(tempVal, t);
- };
+ tempVal := tempType.Zero()
+ t.f.Vars[tempIdx] = tempVal
+ assign(tempVal, t)
+ }
// Generate "temp" or "*temp"
- getTemp := a.compileVariable(0, temp);
+ getTemp := a.compileVariable(0, temp)
if a.evalAddr == nil {
return effect, getTemp
}
- deref := a.compileStarExpr(getTemp);
+ deref := a.compileStarExpr(getTemp)
if deref == nil {
return nil, nil
}
- return effect, deref;
+ return effect, deref
}
diff --git a/src/pkg/exp/eval/expr1.go b/src/pkg/exp/eval/expr1.go
index ed2081c71..a77e40fb0 100644
--- a/src/pkg/exp/eval/expr1.go
+++ b/src/pkg/exp/eval/expr1.go
@@ -4,19 +4,19 @@
package eval
import (
- "bignum";
- "log";
+ "bignum"
+ "log"
)
/*
* "As" functions. These retrieve evaluator functions from an
* expr, panicking if the requested evaluator has the wrong type.
*/
-func (a *expr) asBool() (func(*Thread) bool) { return a.eval.(func(*Thread) bool) }
+func (a *expr) asBool() (func(*Thread) bool) { return a.eval.(func(*Thread) bool) }
func (a *expr) asUint() (func(*Thread) uint64) {
return a.eval.(func(*Thread) uint64)
}
-func (a *expr) asInt() (func(*Thread) int64) { return a.eval.(func(*Thread) int64) }
+func (a *expr) asInt() (func(*Thread) int64) { return a.eval.(func(*Thread) int64) }
func (a *expr) asIdealInt() (func() *bignum.Integer) {
return a.eval.(func() *bignum.Integer)
}
@@ -35,12 +35,12 @@ func (a *expr) asArray() (func(*Thread) ArrayValue) {
func (a *expr) asStruct() (func(*Thread) StructValue) {
return a.eval.(func(*Thread) StructValue)
}
-func (a *expr) asPtr() (func(*Thread) Value) { return a.eval.(func(*Thread) Value) }
-func (a *expr) asFunc() (func(*Thread) Func) { return a.eval.(func(*Thread) Func) }
+func (a *expr) asPtr() (func(*Thread) Value) { return a.eval.(func(*Thread) Value) }
+func (a *expr) asFunc() (func(*Thread) Func) { return a.eval.(func(*Thread) Func) }
func (a *expr) asSlice() (func(*Thread) Slice) {
return a.eval.(func(*Thread) Slice)
}
-func (a *expr) asMap() (func(*Thread) Map) { return a.eval.(func(*Thread) Map) }
+func (a *expr) asMap() (func(*Thread) Map) { return a.eval.(func(*Thread) Map) }
func (a *expr) asMulti() (func(*Thread) []Value) {
return a.eval.(func(*Thread) []Value)
}
@@ -76,7 +76,7 @@ func (a *expr) asInterface() (func(*Thread) interface{}) {
default:
log.Crashf("unexpected expression node type %T at %v", a.eval, a.pos)
}
- panic();
+ panic()
}
/*
@@ -92,13 +92,13 @@ func (a *expr) genConstant(v Value) {
case *intType:
a.eval = func(t *Thread) int64 { return v.(IntValue).Get(t) }
case *idealIntType:
- val := v.(IdealIntValue).Get();
- a.eval = func() *bignum.Integer { return val };
+ val := v.(IdealIntValue).Get()
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
a.eval = func(t *Thread) float64 { return v.(FloatValue).Get(t) }
case *idealFloatType:
- val := v.(IdealFloatValue).Get();
- a.eval = func() *bignum.Rational { return val };
+ val := v.(IdealFloatValue).Get()
+ a.eval = func() *bignum.Rational { return val }
case *stringType:
a.eval = func(t *Thread) string { return v.(StringValue).Get(t) }
case *ArrayType:
@@ -119,7 +119,7 @@ func (a *expr) genConstant(v Value) {
}
func (a *expr) genIdentOp(level, index int) {
- a.evalAddr = func(t *Thread) Value { return t.f.Get(level, index) };
+ a.evalAddr = func(t *Thread) Value { return t.f.Get(level, index) }
switch a.t.lit().(type) {
case *boolType:
a.eval = func(t *Thread) bool { return t.f.Get(level, index).(BoolValue).Get(t) }
@@ -149,7 +149,7 @@ func (a *expr) genIdentOp(level, index int) {
}
func (a *expr) genFuncCall(call func(t *Thread) []Value) {
- a.exec = func(t *Thread) { call(t) };
+ a.exec = func(t *Thread) { call(t) }
switch a.t.lit().(type) {
case *boolType:
a.eval = func(t *Thread) bool { return call(t)[0].(BoolValue).Get(t) }
@@ -181,7 +181,7 @@ func (a *expr) genFuncCall(call func(t *Thread) []Value) {
}
func (a *expr) genValue(vf func(*Thread) Value) {
- a.evalAddr = vf;
+ a.evalAddr = vf
switch a.t.lit().(type) {
case *boolType:
a.eval = func(t *Thread) bool { return vf(t).(BoolValue).Get(t) }
@@ -213,31 +213,31 @@ func (a *expr) genValue(vf func(*Thread) Value) {
func (a *expr) genUnaryOpNeg(v *expr) {
switch a.t.lit().(type) {
case *uintType:
- vf := v.asUint();
+ vf := v.asUint()
a.eval = func(t *Thread) uint64 {
- v := vf(t);
- return -v;
- };
+ v := vf(t)
+ return -v
+ }
case *intType:
- vf := v.asInt();
+ vf := v.asInt()
a.eval = func(t *Thread) int64 {
- v := vf(t);
- return -v;
- };
+ v := vf(t)
+ return -v
+ }
case *idealIntType:
- v := v.asIdealInt()();
- val := v.Neg();
- a.eval = func() *bignum.Integer { return val };
+ v := v.asIdealInt()()
+ val := v.Neg()
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
- vf := v.asFloat();
+ vf := v.asFloat()
a.eval = func(t *Thread) float64 {
- v := vf(t);
- return -v;
- };
+ v := vf(t)
+ return -v
+ }
case *idealFloatType:
- v := v.asIdealFloat()();
- val := v.Neg();
- a.eval = func() *bignum.Rational { return val };
+ v := v.asIdealFloat()()
+ val := v.Neg()
+ a.eval = func() *bignum.Rational { return val }
default:
log.Crashf("unexpected type %v at %v", a.t, a.pos)
}
@@ -246,11 +246,11 @@ func (a *expr) genUnaryOpNeg(v *expr) {
func (a *expr) genUnaryOpNot(v *expr) {
switch a.t.lit().(type) {
case *boolType:
- vf := v.asBool();
+ vf := v.asBool()
a.eval = func(t *Thread) bool {
- v := vf(t);
- return !v;
- };
+ v := vf(t)
+ return !v
+ }
default:
log.Crashf("unexpected type %v at %v", a.t, a.pos)
}
@@ -259,169 +259,169 @@ func (a *expr) genUnaryOpNot(v *expr) {
func (a *expr) genUnaryOpXor(v *expr) {
switch a.t.lit().(type) {
case *uintType:
- vf := v.asUint();
+ vf := v.asUint()
a.eval = func(t *Thread) uint64 {
- v := vf(t);
- return ^v;
- };
+ v := vf(t)
+ return ^v
+ }
case *intType:
- vf := v.asInt();
+ vf := v.asInt()
a.eval = func(t *Thread) int64 {
- v := vf(t);
- return ^v;
- };
+ v := vf(t)
+ return ^v
+ }
case *idealIntType:
- v := v.asIdealInt()();
- val := v.Neg().Sub(bignum.Int(1));
- a.eval = func() *bignum.Integer { return val };
+ v := v.asIdealInt()()
+ val := v.Neg().Sub(bignum.Int(1))
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", a.t, a.pos)
}
}
func (a *expr) genBinOpLogAnd(l, r *expr) {
- lf := l.asBool();
- rf := r.asBool();
- a.eval = func(t *Thread) bool { return lf(t) && rf(t) };
+ lf := l.asBool()
+ rf := r.asBool()
+ a.eval = func(t *Thread) bool { return lf(t) && rf(t) }
}
func (a *expr) genBinOpLogOr(l, r *expr) {
- lf := l.asBool();
- rf := r.asBool();
- a.eval = func(t *Thread) bool { return lf(t) || rf(t) };
+ lf := l.asBool()
+ rf := r.asBool()
+ a.eval = func(t *Thread) bool { return lf(t) || rf(t) }
}
func (a *expr) genBinOpAdd(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l + r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l + r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l + r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l + r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l + r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l + r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l + r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l + r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l + r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l + r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l + r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l + r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l + r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l + r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l + r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l + r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l + r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l + r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l + r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l + r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Add(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Add(r)
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
switch t.Bits {
case 32:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l + r;
- return float64(float32(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l + r
+ return float64(float32(ret))
}
case 64:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l + r;
- return float64(float64(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l + r
+ return float64(float64(ret))
}
case 0:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l + r;
- return float64(float(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l + r
+ return float64(float(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Add(r);
- a.eval = func() *bignum.Rational { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Add(r)
+ a.eval = func() *bignum.Rational { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) string {
- l, r := lf(t), rf(t);
- return l + r;
- };
+ l, r := lf(t), rf(t)
+ return l + r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -430,127 +430,127 @@ func (a *expr) genBinOpAdd(l, r *expr) {
func (a *expr) genBinOpSub(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l - r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l - r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l - r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l - r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l - r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l - r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l - r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l - r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l - r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l - r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l - r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l - r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l - r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l - r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l - r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l - r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l - r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l - r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l - r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l - r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Sub(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Sub(r)
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
switch t.Bits {
case 32:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l - r;
- return float64(float32(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l - r
+ return float64(float32(ret))
}
case 64:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l - r;
- return float64(float64(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l - r
+ return float64(float64(ret))
}
case 0:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l - r;
- return float64(float(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l - r
+ return float64(float(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Sub(r);
- a.eval = func() *bignum.Rational { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Sub(r)
+ a.eval = func() *bignum.Rational { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -559,127 +559,127 @@ func (a *expr) genBinOpSub(l, r *expr) {
func (a *expr) genBinOpMul(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l * r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l * r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l * r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l * r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l * r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l * r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l * r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l * r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l * r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l * r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l * r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l * r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l * r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l * r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l * r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l * r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l * r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l * r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l * r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l * r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Mul(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Mul(r)
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
switch t.Bits {
case 32:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l * r;
- return float64(float32(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l * r
+ return float64(float32(ret))
}
case 64:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l * r;
- return float64(float64(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l * r
+ return float64(float64(ret))
}
case 0:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
- ret = l * r;
- return float64(float(ret));
+ l, r := lf(t), rf(t)
+ var ret float64
+ ret = l * r
+ return float64(float(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Mul(r);
- a.eval = func() *bignum.Rational { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Mul(r)
+ a.eval = func() *bignum.Rational { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -688,166 +688,166 @@ func (a *expr) genBinOpMul(l, r *expr) {
func (a *expr) genBinOpQuo(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return uint64(uint8(ret));
+ ret = l / r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return uint64(uint16(ret));
+ ret = l / r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return uint64(uint32(ret));
+ ret = l / r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return uint64(uint64(ret));
+ ret = l / r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return uint64(uint(ret));
+ ret = l / r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return int64(int8(ret));
+ ret = l / r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return int64(int16(ret));
+ ret = l / r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return int64(int32(ret));
+ ret = l / r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return int64(int64(ret));
+ ret = l / r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return int64(int(ret));
+ ret = l / r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Quo(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Quo(r)
+ a.eval = func() *bignum.Integer { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
switch t.Bits {
case 32:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
+ l, r := lf(t), rf(t)
+ var ret float64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return float64(float32(ret));
+ ret = l / r
+ return float64(float32(ret))
}
case 64:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
+ l, r := lf(t), rf(t)
+ var ret float64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return float64(float64(ret));
+ ret = l / r
+ return float64(float64(ret))
}
case 0:
a.eval = func(t *Thread) float64 {
- l, r := lf(t), rf(t);
- var ret float64;
+ l, r := lf(t), rf(t)
+ var ret float64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l / r;
- return float64(float(ret));
+ ret = l / r
+ return float64(float(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Quo(r);
- a.eval = func() *bignum.Rational { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Quo(r)
+ a.eval = func() *bignum.Rational { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -856,124 +856,124 @@ func (a *expr) genBinOpQuo(l, r *expr) {
func (a *expr) genBinOpRem(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return uint64(uint8(ret));
+ ret = l % r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return uint64(uint16(ret));
+ ret = l % r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return uint64(uint32(ret));
+ ret = l % r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return uint64(uint64(ret));
+ ret = l % r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
+ l, r := lf(t), rf(t)
+ var ret uint64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return uint64(uint(ret));
+ ret = l % r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return int64(int8(ret));
+ ret = l % r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return int64(int16(ret));
+ ret = l % r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return int64(int32(ret));
+ ret = l % r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return int64(int64(ret));
+ ret = l % r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
+ l, r := lf(t), rf(t)
+ var ret int64
if r == 0 {
t.Abort(DivByZeroError{})
}
- ret = l % r;
- return int64(int(ret));
+ ret = l % r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Rem(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Rem(r)
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -982,94 +982,94 @@ func (a *expr) genBinOpRem(l, r *expr) {
func (a *expr) genBinOpAnd(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l & r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l & r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l & r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l & r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l & r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l & r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l & r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l & r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l & r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l & r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l & r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l & r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l & r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l & r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l & r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l & r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l & r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l & r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l & r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l & r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.And(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.And(r)
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1078,94 +1078,94 @@ func (a *expr) genBinOpAnd(l, r *expr) {
func (a *expr) genBinOpOr(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l | r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l | r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l | r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l | r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l | r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l | r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l | r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l | r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l | r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l | r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l | r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l | r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l | r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l | r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l | r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l | r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l | r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l | r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l | r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l | r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Or(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Or(r)
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1174,94 +1174,94 @@ func (a *expr) genBinOpOr(l, r *expr) {
func (a *expr) genBinOpXor(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l ^ r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l ^ r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l ^ r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l ^ r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l ^ r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l ^ r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l ^ r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l ^ r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l ^ r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l ^ r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l ^ r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l ^ r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l ^ r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l ^ r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l ^ r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l ^ r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l ^ r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l ^ r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l ^ r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l ^ r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Xor(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Xor(r)
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1270,94 +1270,94 @@ func (a *expr) genBinOpXor(l, r *expr) {
func (a *expr) genBinOpAndNot(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l &^ r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l &^ r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l &^ r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l &^ r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l &^ r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l &^ r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l &^ r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l &^ r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l &^ r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l &^ r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l &^ r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l &^ r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l &^ r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l &^ r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l &^ r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l &^ r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l &^ r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l &^ r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l &^ r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l &^ r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.AndNot(r);
- a.eval = func() *bignum.Integer { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.AndNot(r)
+ a.eval = func() *bignum.Integer { return val }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1366,85 +1366,85 @@ func (a *expr) genBinOpAndNot(l, r *expr) {
func (a *expr) genBinOpShl(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l << r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l << r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l << r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l << r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l << r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l << r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l << r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l << r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l << r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l << r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asUint();
+ lf := l.asInt()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l << r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l << r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l << r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l << r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l << r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l << r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l << r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l << r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l << r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l << r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
@@ -1457,85 +1457,85 @@ func (a *expr) genBinOpShl(l, r *expr) {
func (a *expr) genBinOpShr(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l >> r;
- return uint64(uint8(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l >> r
+ return uint64(uint8(ret))
}
case 16:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l >> r;
- return uint64(uint16(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l >> r
+ return uint64(uint16(ret))
}
case 32:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l >> r;
- return uint64(uint32(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l >> r
+ return uint64(uint32(ret))
}
case 64:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l >> r;
- return uint64(uint64(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l >> r
+ return uint64(uint64(ret))
}
case 0:
a.eval = func(t *Thread) uint64 {
- l, r := lf(t), rf(t);
- var ret uint64;
- ret = l >> r;
- return uint64(uint(ret));
+ l, r := lf(t), rf(t)
+ var ret uint64
+ ret = l >> r
+ return uint64(uint(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
}
case *intType:
- lf := l.asInt();
- rf := r.asUint();
+ lf := l.asInt()
+ rf := r.asUint()
switch t.Bits {
case 8:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l >> r;
- return int64(int8(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l >> r
+ return int64(int8(ret))
}
case 16:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l >> r;
- return int64(int16(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l >> r
+ return int64(int16(ret))
}
case 32:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l >> r;
- return int64(int32(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l >> r
+ return int64(int32(ret))
}
case 64:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l >> r;
- return int64(int64(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l >> r
+ return int64(int64(ret))
}
case 0:
a.eval = func(t *Thread) int64 {
- l, r := lf(t), rf(t);
- var ret int64;
- ret = l >> r;
- return int64(int(ret));
+ l, r := lf(t), rf(t)
+ var ret int64
+ ret = l >> r
+ return int64(int(ret))
}
default:
log.Crashf("unexpected size %d in type %v at %v", t.Bits, t, a.pos)
@@ -1548,43 +1548,43 @@ func (a *expr) genBinOpShr(l, r *expr) {
func (a *expr) genBinOpLss(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l < r;
- };
+ l, r := lf(t), rf(t)
+ return l < r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l < r;
- };
+ l, r := lf(t), rf(t)
+ return l < r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) < 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) < 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l < r;
- };
+ l, r := lf(t), rf(t)
+ return l < r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) < 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) < 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l < r;
- };
+ l, r := lf(t), rf(t)
+ return l < r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1593,43 +1593,43 @@ func (a *expr) genBinOpLss(l, r *expr) {
func (a *expr) genBinOpGtr(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l > r;
- };
+ l, r := lf(t), rf(t)
+ return l > r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l > r;
- };
+ l, r := lf(t), rf(t)
+ return l > r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) > 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) > 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l > r;
- };
+ l, r := lf(t), rf(t)
+ return l > r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) > 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) > 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l > r;
- };
+ l, r := lf(t), rf(t)
+ return l > r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1638,43 +1638,43 @@ func (a *expr) genBinOpGtr(l, r *expr) {
func (a *expr) genBinOpLeq(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l <= r;
- };
+ l, r := lf(t), rf(t)
+ return l <= r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l <= r;
- };
+ l, r := lf(t), rf(t)
+ return l <= r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) <= 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) <= 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l <= r;
- };
+ l, r := lf(t), rf(t)
+ return l <= r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) <= 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) <= 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l <= r;
- };
+ l, r := lf(t), rf(t)
+ return l <= r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1683,43 +1683,43 @@ func (a *expr) genBinOpLeq(l, r *expr) {
func (a *expr) genBinOpGeq(l, r *expr) {
switch t := l.t.lit().(type) {
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l >= r;
- };
+ l, r := lf(t), rf(t)
+ return l >= r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l >= r;
- };
+ l, r := lf(t), rf(t)
+ return l >= r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) >= 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) >= 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l >= r;
- };
+ l, r := lf(t), rf(t)
+ return l >= r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) >= 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) >= 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l >= r;
- };
+ l, r := lf(t), rf(t)
+ return l >= r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1728,71 +1728,71 @@ func (a *expr) genBinOpGeq(l, r *expr) {
func (a *expr) genBinOpEql(l, r *expr) {
switch t := l.t.lit().(type) {
case *boolType:
- lf := l.asBool();
- rf := r.asBool();
+ lf := l.asBool()
+ rf := r.asBool()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) == 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) == 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) == 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) == 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *PtrType:
- lf := l.asPtr();
- rf := r.asPtr();
+ lf := l.asPtr()
+ rf := r.asPtr()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *FuncType:
- lf := l.asFunc();
- rf := r.asFunc();
+ lf := l.asFunc()
+ rf := r.asFunc()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
case *MapType:
- lf := l.asMap();
- rf := r.asMap();
+ lf := l.asMap()
+ rf := r.asMap()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l == r;
- };
+ l, r := lf(t), rf(t)
+ return l == r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1801,71 +1801,71 @@ func (a *expr) genBinOpEql(l, r *expr) {
func (a *expr) genBinOpNeq(l, r *expr) {
switch t := l.t.lit().(type) {
case *boolType:
- lf := l.asBool();
- rf := r.asBool();
+ lf := l.asBool()
+ rf := r.asBool()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *uintType:
- lf := l.asUint();
- rf := r.asUint();
+ lf := l.asUint()
+ rf := r.asUint()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *intType:
- lf := l.asInt();
- rf := r.asInt();
+ lf := l.asInt()
+ rf := r.asInt()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *idealIntType:
- l := l.asIdealInt()();
- r := r.asIdealInt()();
- val := l.Cmp(r) != 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealInt()()
+ r := r.asIdealInt()()
+ val := l.Cmp(r) != 0
+ a.eval = func(t *Thread) bool { return val }
case *floatType:
- lf := l.asFloat();
- rf := r.asFloat();
+ lf := l.asFloat()
+ rf := r.asFloat()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *idealFloatType:
- l := l.asIdealFloat()();
- r := r.asIdealFloat()();
- val := l.Cmp(r) != 0;
- a.eval = func(t *Thread) bool { return val };
+ l := l.asIdealFloat()()
+ r := r.asIdealFloat()()
+ val := l.Cmp(r) != 0
+ a.eval = func(t *Thread) bool { return val }
case *stringType:
- lf := l.asString();
- rf := r.asString();
+ lf := l.asString()
+ rf := r.asString()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *PtrType:
- lf := l.asPtr();
- rf := r.asPtr();
+ lf := l.asPtr()
+ rf := r.asPtr()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *FuncType:
- lf := l.asFunc();
- rf := r.asFunc();
+ lf := l.asFunc()
+ rf := r.asFunc()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
case *MapType:
- lf := l.asMap();
- rf := r.asMap();
+ lf := l.asMap()
+ rf := r.asMap()
a.eval = func(t *Thread) bool {
- l, r := lf(t), rf(t);
- return l != r;
- };
+ l, r := lf(t), rf(t)
+ return l != r
+ }
default:
log.Crashf("unexpected type %v at %v", l.t, a.pos)
}
@@ -1874,40 +1874,40 @@ func (a *expr) genBinOpNeq(l, r *expr) {
func genAssign(lt Type, r *expr) (func(lv Value, t *Thread)) {
switch lt.lit().(type) {
case *boolType:
- rf := r.asBool();
- return func(lv Value, t *Thread) { lv.(BoolValue).Set(t, rf(t)) };
+ rf := r.asBool()
+ return func(lv Value, t *Thread) { lv.(BoolValue).Set(t, rf(t)) }
case *uintType:
- rf := r.asUint();
- return func(lv Value, t *Thread) { lv.(UintValue).Set(t, rf(t)) };
+ rf := r.asUint()
+ return func(lv Value, t *Thread) { lv.(UintValue).Set(t, rf(t)) }
case *intType:
- rf := r.asInt();
- return func(lv Value, t *Thread) { lv.(IntValue).Set(t, rf(t)) };
+ rf := r.asInt()
+ return func(lv Value, t *Thread) { lv.(IntValue).Set(t, rf(t)) }
case *floatType:
- rf := r.asFloat();
- return func(lv Value, t *Thread) { lv.(FloatValue).Set(t, rf(t)) };
+ rf := r.asFloat()
+ return func(lv Value, t *Thread) { lv.(FloatValue).Set(t, rf(t)) }
case *stringType:
- rf := r.asString();
- return func(lv Value, t *Thread) { lv.(StringValue).Set(t, rf(t)) };
+ rf := r.asString()
+ return func(lv Value, t *Thread) { lv.(StringValue).Set(t, rf(t)) }
case *ArrayType:
- rf := r.asArray();
- return func(lv Value, t *Thread) { lv.Assign(t, rf(t)) };
+ rf := r.asArray()
+ return func(lv Value, t *Thread) { lv.Assign(t, rf(t)) }
case *StructType:
- rf := r.asStruct();
- return func(lv Value, t *Thread) { lv.Assign(t, rf(t)) };
+ rf := r.asStruct()
+ return func(lv Value, t *Thread) { lv.Assign(t, rf(t)) }
case *PtrType:
- rf := r.asPtr();
- return func(lv Value, t *Thread) { lv.(PtrValue).Set(t, rf(t)) };
+ rf := r.asPtr()
+ return func(lv Value, t *Thread) { lv.(PtrValue).Set(t, rf(t)) }
case *FuncType:
- rf := r.asFunc();
- return func(lv Value, t *Thread) { lv.(FuncValue).Set(t, rf(t)) };
+ rf := r.asFunc()
+ return func(lv Value, t *Thread) { lv.(FuncValue).Set(t, rf(t)) }
case *SliceType:
- rf := r.asSlice();
- return func(lv Value, t *Thread) { lv.(SliceValue).Set(t, rf(t)) };
+ rf := r.asSlice()
+ return func(lv Value, t *Thread) { lv.(SliceValue).Set(t, rf(t)) }
case *MapType:
- rf := r.asMap();
- return func(lv Value, t *Thread) { lv.(MapValue).Set(t, rf(t)) };
+ rf := r.asMap()
+ return func(lv Value, t *Thread) { lv.(MapValue).Set(t, rf(t)) }
default:
log.Crashf("unexpected left operand type %v at %v", lt, r.pos)
}
- panic();
+ panic()
}
diff --git a/src/pkg/exp/eval/expr_test.go b/src/pkg/exp/eval/expr_test.go
index 4d3e2776a..5cfbc8232 100644
--- a/src/pkg/exp/eval/expr_test.go
+++ b/src/pkg/exp/eval/expr_test.go
@@ -5,8 +5,8 @@
package eval
import (
- "bignum";
- "testing";
+ "bignum"
+ "testing"
)
var undefined = "undefined"
@@ -340,4 +340,4 @@ var exprTests = []test{
CErr("fn==oneTwo", opTypes),
}
-func TestExpr(t *testing.T) { runTests(t, "exprTests", exprTests) }
+func TestExpr(t *testing.T) { runTests(t, "exprTests", exprTests) }
diff --git a/src/pkg/exp/eval/func.go b/src/pkg/exp/eval/func.go
index 992706641..e672d0783 100644
--- a/src/pkg/exp/eval/func.go
+++ b/src/pkg/exp/eval/func.go
@@ -11,25 +11,25 @@ import "os"
*/
type Thread struct {
- abort chan os.Error;
- pc uint;
+ abort chan os.Error
+ pc uint
// The execution frame of this function. This remains the
// same throughout a function invocation.
- f *Frame;
+ f *Frame
}
type code []func(*Thread)
func (i code) exec(t *Thread) {
- opc := t.pc;
- t.pc = 0;
- l := uint(len(i));
+ opc := t.pc
+ t.pc = 0
+ l := uint(len(i))
for t.pc < l {
- pc := t.pc;
- t.pc++;
- i[pc](t);
+ pc := t.pc
+ t.pc++
+ i[pc](t)
}
- t.pc = opc;
+ t.pc = opc
}
/*
@@ -37,33 +37,33 @@ func (i code) exec(t *Thread) {
*/
type codeBuf struct {
- instrs code;
+ instrs code
}
-func newCodeBuf() *codeBuf { return &codeBuf{make(code, 0, 16)} }
+func newCodeBuf() *codeBuf { return &codeBuf{make(code, 0, 16)} }
func (b *codeBuf) push(instr func(*Thread)) {
- n := len(b.instrs);
+ n := len(b.instrs)
if n >= cap(b.instrs) {
- a := make(code, n, n*2);
+ a := make(code, n, n*2)
for i := range b.instrs {
a[i] = b.instrs[i]
}
- b.instrs = a;
+ b.instrs = a
}
- b.instrs = b.instrs[0 : n+1];
- b.instrs[n] = instr;
+ b.instrs = b.instrs[0 : n+1]
+ b.instrs[n] = instr
}
-func (b *codeBuf) nextPC() uint { return uint(len(b.instrs)) }
+func (b *codeBuf) nextPC() uint { return uint(len(b.instrs)) }
func (b *codeBuf) get() code {
// Freeze this buffer into an array of exactly the right size
- a := make(code, len(b.instrs));
+ a := make(code, len(b.instrs))
for i := range b.instrs {
a[i] = b.instrs[i]
}
- return code(a);
+ return code(a)
}
/*
@@ -71,11 +71,11 @@ func (b *codeBuf) get() code {
*/
type evalFunc struct {
- outer *Frame;
- frameSize int;
- code code;
+ outer *Frame
+ frameSize int
+ code code
}
-func (f *evalFunc) NewFrame() *Frame { return f.outer.child(f.frameSize) }
+func (f *evalFunc) NewFrame() *Frame { return f.outer.child(f.frameSize) }
-func (f *evalFunc) Call(t *Thread) { f.code.exec(t) }
+func (f *evalFunc) Call(t *Thread) { f.code.exec(t) }
diff --git a/src/pkg/exp/eval/gen.go b/src/pkg/exp/eval/gen.go
index df49b21d3..2acc2c956 100644
--- a/src/pkg/exp/eval/gen.go
+++ b/src/pkg/exp/eval/gen.go
@@ -7,58 +7,58 @@ package main
// generate operator implementations
import (
- "log";
- "os";
- "template";
+ "log"
+ "os"
+ "template"
)
type Op struct {
- Name string;
- Expr string;
- Body string; // overrides Expr
- ConstExpr string;
- AsRightName string;
- ReturnType string;
- Types []*Type;
+ Name string
+ Expr string
+ Body string // overrides Expr
+ ConstExpr string
+ AsRightName string
+ ReturnType string
+ Types []*Type
}
type Size struct {
- Bits int;
- Sized string;
+ Bits int
+ Sized string
}
type Type struct {
- Repr string;
- Value string;
- Native string;
- As string;
- IsIdeal bool;
- HasAssign bool;
- Sizes []Size;
+ Repr string
+ Value string
+ Native string
+ As string
+ IsIdeal bool
+ HasAssign bool
+ Sizes []Size
}
var (
- boolType = &Type{Repr: "*boolType", Value: "BoolValue", Native: "bool", As: "asBool"};
- uintType = &Type{Repr: "*uintType", Value: "UintValue", Native: "uint64", As: "asUint",
+ boolType = &Type{Repr: "*boolType", Value: "BoolValue", Native: "bool", As: "asBool"}
+ uintType = &Type{Repr: "*uintType", Value: "UintValue", Native: "uint64", As: "asUint",
Sizes: []Size{Size{8, "uint8"}, Size{16, "uint16"}, Size{32, "uint32"}, Size{64, "uint64"}, Size{0, "uint"}},
- };
- intType = &Type{Repr: "*intType", Value: "IntValue", Native: "int64", As: "asInt",
+ }
+ intType = &Type{Repr: "*intType", Value: "IntValue", Native: "int64", As: "asInt",
Sizes: []Size{Size{8, "int8"}, Size{16, "int16"}, Size{32, "int32"}, Size{64, "int64"}, Size{0, "int"}},
- };
- idealIntType = &Type{Repr: "*idealIntType", Value: "IdealIntValue", Native: "*bignum.Integer", As: "asIdealInt", IsIdeal: true};
- floatType = &Type{Repr: "*floatType", Value: "FloatValue", Native: "float64", As: "asFloat",
+ }
+ idealIntType = &Type{Repr: "*idealIntType", Value: "IdealIntValue", Native: "*bignum.Integer", As: "asIdealInt", IsIdeal: true}
+ floatType = &Type{Repr: "*floatType", Value: "FloatValue", Native: "float64", As: "asFloat",
Sizes: []Size{Size{32, "float32"}, Size{64, "float64"}, Size{0, "float"}},
- };
- idealFloatType = &Type{Repr: "*idealFloatType", Value: "IdealFloatValue", Native: "*bignum.Rational", As: "asIdealFloat", IsIdeal: true};
- stringType = &Type{Repr: "*stringType", Value: "StringValue", Native: "string", As: "asString"};
- arrayType = &Type{Repr: "*ArrayType", Value: "ArrayValue", Native: "ArrayValue", As: "asArray", HasAssign: true};
- structType = &Type{Repr: "*StructType", Value: "StructValue", Native: "StructValue", As: "asStruct", HasAssign: true};
- ptrType = &Type{Repr: "*PtrType", Value: "PtrValue", Native: "Value", As: "asPtr"};
- funcType = &Type{Repr: "*FuncType", Value: "FuncValue", Native: "Func", As: "asFunc"};
- sliceType = &Type{Repr: "*SliceType", Value: "SliceValue", Native: "Slice", As: "asSlice"};
- mapType = &Type{Repr: "*MapType", Value: "MapValue", Native: "Map", As: "asMap"};
+ }
+ idealFloatType = &Type{Repr: "*idealFloatType", Value: "IdealFloatValue", Native: "*bignum.Rational", As: "asIdealFloat", IsIdeal: true}
+ stringType = &Type{Repr: "*stringType", Value: "StringValue", Native: "string", As: "asString"}
+ arrayType = &Type{Repr: "*ArrayType", Value: "ArrayValue", Native: "ArrayValue", As: "asArray", HasAssign: true}
+ structType = &Type{Repr: "*StructType", Value: "StructValue", Native: "StructValue", As: "asStruct", HasAssign: true}
+ ptrType = &Type{Repr: "*PtrType", Value: "PtrValue", Native: "Value", As: "asPtr"}
+ funcType = &Type{Repr: "*FuncType", Value: "FuncValue", Native: "Func", As: "asFunc"}
+ sliceType = &Type{Repr: "*SliceType", Value: "SliceValue", Native: "Slice", As: "asSlice"}
+ mapType = &Type{Repr: "*MapType", Value: "MapValue", Native: "Map", As: "asMap"}
- all = []*Type{
+ all = []*Type{
boolType,
uintType,
intType,
@@ -72,13 +72,13 @@ var (
funcType,
sliceType,
mapType,
- };
- bools = all[0:1];
- integers = all[1:4];
- shiftable = all[1:3];
- numbers = all[1:6];
- addable = all[1:7];
- cmpable = []*Type{
+ }
+ bools = all[0:1]
+ integers = all[1:4]
+ shiftable = all[1:3]
+ numbers = all[1:6]
+ addable = all[1:7]
+ cmpable = []*Type{
boolType,
uintType,
intType,
@@ -89,7 +89,7 @@ var (
ptrType,
funcType,
mapType,
- };
+ }
)
var unOps = []Op{
@@ -131,9 +131,9 @@ var binOps = []Op{
}
type Data struct {
- UnaryOps []Op;
- BinaryOps []Op;
- Types []*Type;
+ UnaryOps []Op
+ BinaryOps []Op
+ Types []*Type
}
var data = Data{
@@ -362,13 +362,13 @@ func genAssign(lt Type, r *expr) (func(lv Value, t *Thread)) {
`
func main() {
- t := template.New(nil);
- t.SetDelims("«", "»");
- err := t.Parse(templateStr);
+ t := template.New(nil)
+ t.SetDelims("«", "»")
+ err := t.Parse(templateStr)
if err != nil {
log.Exit(err)
}
- err = t.Execute(data, os.Stdout);
+ err = t.Execute(data, os.Stdout)
if err != nil {
log.Exit(err)
}
diff --git a/src/pkg/exp/eval/main.go b/src/pkg/exp/eval/main.go
index 376af6b86..e7c58ef5b 100644
--- a/src/pkg/exp/eval/main.go
+++ b/src/pkg/exp/eval/main.go
@@ -5,32 +5,32 @@
package main
import (
- "./_obj/eval";
- "bufio";
- "flag";
- "go/parser";
- "go/scanner";
- "io";
- "os";
+ "./_obj/eval"
+ "bufio"
+ "flag"
+ "go/parser"
+ "go/scanner"
+ "io"
+ "os"
)
var filename = flag.String("f", "", "file to run")
func main() {
- flag.Parse();
- w := eval.NewWorld();
+ flag.Parse()
+ w := eval.NewWorld()
if *filename != "" {
- data, err := ioutil.ReadFile(*filename);
+ data, err := ioutil.ReadFile(*filename)
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
- file, err := parser.ParseFile(*filename, data, 0);
+ file, err := parser.ParseFile(*filename, data, 0)
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
- code, err := w.CompileDeclList(file.Decls);
+ code, err := w.CompileDeclList(file.Decls)
if err != nil {
if list, ok := err.(scanner.ErrorList); ok {
for _, e := range list {
@@ -39,50 +39,50 @@ func main() {
} else {
println(err.String())
}
- os.Exit(1);
+ os.Exit(1)
}
- _, err := code.Run();
+ _, err := code.Run()
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
- code, err = w.Compile("init()");
+ code, err = w.Compile("init()")
if code != nil {
- _, err := code.Run();
+ _, err := code.Run()
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
}
- code, err = w.Compile("main()");
+ code, err = w.Compile("main()")
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
- _, err = code.Run();
+ _, err = code.Run()
if err != nil {
- println(err.String());
- os.Exit(1);
+ println(err.String())
+ os.Exit(1)
}
- os.Exit(0);
+ os.Exit(0)
}
- r := bufio.NewReader(os.Stdin);
+ r := bufio.NewReader(os.Stdin)
for {
- print("; ");
- line, err := r.ReadString('\n');
+ print("; ")
+ line, err := r.ReadString('\n')
if err != nil {
break
}
- code, err := w.Compile(line);
+ code, err := w.Compile(line)
if err != nil {
- println(err.String());
- continue;
+ println(err.String())
+ continue
}
- v, err := code.Run();
+ v, err := code.Run()
if err != nil {
- println(err.String());
- continue;
+ println(err.String())
+ continue
}
if v != nil {
println(v.String())
diff --git a/src/pkg/exp/eval/scope.go b/src/pkg/exp/eval/scope.go
index 971b92d53..84c4c92b8 100644
--- a/src/pkg/exp/eval/scope.go
+++ b/src/pkg/exp/eval/scope.go
@@ -5,8 +5,8 @@
package eval
import (
- "go/token";
- "log";
+ "go/token"
+ "log"
)
/*
@@ -15,25 +15,25 @@ import (
// A definition can be a *Variable, *Constant, or Type.
type Def interface {
- Pos() token.Position;
+ Pos() token.Position
}
type Variable struct {
- token.Position;
+ token.Position
// Index of this variable in the Frame structure
- Index int;
+ Index int
// Static type of this variable
- Type Type;
+ Type Type
// Value of this variable. This is only used by Scope.NewFrame;
// therefore, it is useful for global scopes but cannot be used
// in function scopes.
- Init Value;
+ Init Value
}
type Constant struct {
- token.Position;
- Type Type;
- Value Value;
+ token.Position
+ Type Type
+ Value Value
}
// A block represents a definition block in which a name may not be
@@ -41,35 +41,35 @@ type Constant struct {
type block struct {
// The block enclosing this one, including blocks in other
// scopes.
- outer *block;
+ outer *block
// The nested block currently being compiled, or nil.
- inner *block;
+ inner *block
// The Scope containing this block.
- scope *Scope;
+ scope *Scope
// The Variables, Constants, and Types defined in this block.
- defs map[string]Def;
+ defs map[string]Def
// The index of the first variable defined in this block.
// This must be greater than the index of any variable defined
// in any parent of this block within the same Scope at the
// time this block is entered.
- offset int;
+ offset int
// The number of Variables defined in this block.
- numVars int;
+ numVars int
// If global, do not allocate new vars and consts in
// the frame; assume that the refs will be compiled in
// using defs[name].Init.
- global bool;
+ global bool
}
// A Scope is the compile-time analogue of a Frame, which captures
// some subtree of blocks.
type Scope struct {
// The root block of this scope.
- *block;
+ *block
// The maximum number of variables required at any point in
// this Scope. This determines the number of slots needed in
// Frame's created from this Scope at run-time.
- maxVars int;
+ maxVars int
}
func (b *block) enterChild() *block {
@@ -81,9 +81,9 @@ func (b *block) enterChild() *block {
scope: b.scope,
defs: make(map[string]Def),
offset: b.offset + b.numVars,
- };
- b.inner = sub;
- return sub;
+ }
+ b.inner = sub
+ return sub
}
func (b *block) exit() {
@@ -98,66 +98,66 @@ func (b *block) exit() {
log.Crash("Exit of parent block without exit of child block")
}
}
- b.outer.inner = nil;
+ b.outer.inner = nil
}
func (b *block) ChildScope() *Scope {
if b.inner != nil && b.inner.scope == b.scope {
log.Crash("Failed to exit child block before entering a child scope")
}
- sub := b.enterChild();
- sub.offset = 0;
- sub.scope = &Scope{sub, 0};
- return sub.scope;
+ sub := b.enterChild()
+ sub.offset = 0
+ sub.scope = &Scope{sub, 0}
+ return sub.scope
}
func (b *block) DefineVar(name string, pos token.Position, t Type) (*Variable, Def) {
if prev, ok := b.defs[name]; ok {
return nil, prev
}
- v := b.defineSlot(t, false);
- v.Position = pos;
- b.defs[name] = v;
- return v, nil;
+ v := b.defineSlot(t, false)
+ v.Position = pos
+ b.defs[name] = v
+ return v, nil
}
-func (b *block) DefineTemp(t Type) *Variable { return b.defineSlot(t, true) }
+func (b *block) DefineTemp(t Type) *Variable { return b.defineSlot(t, true) }
func (b *block) defineSlot(t Type, temp bool) *Variable {
if b.inner != nil && b.inner.scope == b.scope {
log.Crash("Failed to exit child block before defining variable")
}
- index := -1;
+ index := -1
if !b.global || temp {
- index = b.offset + b.numVars;
- b.numVars++;
+ index = b.offset + b.numVars
+ b.numVars++
if index >= b.scope.maxVars {
b.scope.maxVars = index + 1
}
}
- v := &Variable{token.Position{}, index, t, nil};
- return v;
+ v := &Variable{token.Position{}, index, t, nil}
+ return v
}
func (b *block) DefineConst(name string, pos token.Position, t Type, v Value) (*Constant, Def) {
if prev, ok := b.defs[name]; ok {
return nil, prev
}
- c := &Constant{pos, t, v};
- b.defs[name] = c;
- return c, nil;
+ c := &Constant{pos, t, v}
+ b.defs[name] = c
+ return c, nil
}
func (b *block) DefineType(name string, pos token.Position, t Type) Type {
if _, ok := b.defs[name]; ok {
return nil
}
- nt := &NamedType{pos, name, nil, true, make(map[string]Method)};
+ nt := &NamedType{pos, name, nil, true, make(map[string]Method)}
if t != nil {
nt.Complete(t)
}
- b.defs[name] = nt;
- return nt;
+ b.defs[name] = nt
+ return nt
}
func (b *block) Lookup(name string) (bl *block, level int, def Def) {
@@ -168,27 +168,27 @@ func (b *block) Lookup(name string) (bl *block, level int, def Def) {
if b.outer != nil && b.scope != b.outer.scope {
level++
}
- b = b.outer;
+ b = b.outer
}
- return nil, 0, nil;
+ return nil, 0, nil
}
-func (s *Scope) NewFrame(outer *Frame) *Frame { return outer.child(s.maxVars) }
+func (s *Scope) NewFrame(outer *Frame) *Frame { return outer.child(s.maxVars) }
/*
* Frames
*/
type Frame struct {
- Outer *Frame;
- Vars []Value;
+ Outer *Frame
+ Vars []Value
}
func (f *Frame) Get(level int, index int) Value {
for ; level > 0; level-- {
f = f.Outer
}
- return f.Vars[index];
+ return f.Vars[index]
}
func (f *Frame) child(numVars int) *Frame {
diff --git a/src/pkg/exp/eval/stmt.go b/src/pkg/exp/eval/stmt.go
index 60c6b9ee6..53757f7de 100644
--- a/src/pkg/exp/eval/stmt.go
+++ b/src/pkg/exp/eval/stmt.go
@@ -5,15 +5,15 @@
package eval
import (
- "bignum";
- "log";
- "go/ast";
- "go/token";
+ "bignum"
+ "log"
+ "go/ast"
+ "go/token"
)
const (
- returnPC = ^uint(0);
- badPC = ^uint(1);
+ returnPC = ^uint(0)
+ badPC = ^uint(1)
)
/*
@@ -21,10 +21,10 @@ const (
*/
type stmtCompiler struct {
- *blockCompiler;
- pos token.Position;
+ *blockCompiler
+ pos token.Position
// This statement's label, or nil if it is not labeled.
- stmtLabel *label;
+ stmtLabel *label
}
func (a *stmtCompiler) diag(format string, args ...) {
@@ -38,39 +38,39 @@ func (a *stmtCompiler) diag(format string, args ...) {
type flowEnt struct {
// Whether this flow entry is conditional. If true, flow can
// continue to the next PC.
- cond bool;
+ cond bool
// True if this will terminate flow (e.g., a return statement).
// cond must be false and jumps must be nil if this is true.
- term bool;
+ term bool
// PC's that can be reached from this flow entry.
- jumps []*uint;
+ jumps []*uint
// Whether this flow entry has been visited by reachesEnd.
- visited bool;
+ visited bool
}
type flowBlock struct {
// If this is a goto, the target label.
- target string;
+ target string
// The inner-most block containing definitions.
- block *block;
+ block *block
// The numVars from each block leading to the root of the
// scope, starting at block.
- numVars []int;
+ numVars []int
}
type flowBuf struct {
- cb *codeBuf;
+ cb *codeBuf
// ents is a map from PC's to flow entries. Any PC missing
// from this map is assumed to reach only PC+1.
- ents map[uint]*flowEnt;
+ ents map[uint]*flowEnt
// gotos is a map from goto positions to information on the
// block at the point of the goto.
- gotos map[*token.Position]*flowBlock;
+ gotos map[*token.Position]*flowBlock
// labels is a map from label name to information on the block
// at the point of the label. labels are tracked by name,
// since mutliple labels at the same PC can have different
// blocks.
- labels map[string]*flowBlock;
+ labels map[string]*flowBlock
}
func newFlowBuf(cb *codeBuf) *flowBuf {
@@ -80,16 +80,16 @@ func newFlowBuf(cb *codeBuf) *flowBuf {
// put creates a flow control point for the next PC in the code buffer.
// This should be done before pushing the instruction into the code buffer.
func (f *flowBuf) put(cond bool, term bool, jumps []*uint) {
- pc := f.cb.nextPC();
+ pc := f.cb.nextPC()
if ent, ok := f.ents[pc]; ok {
log.Crashf("Flow entry already exists at PC %d: %+v", pc, ent)
}
- f.ents[pc] = &flowEnt{cond, term, jumps, false};
+ f.ents[pc] = &flowEnt{cond, term, jumps, false}
}
// putTerm creates a flow control point at the next PC that
// unconditionally terminates execution.
-func (f *flowBuf) putTerm() { f.put(false, true, nil) }
+func (f *flowBuf) putTerm() { f.put(false, true, nil) }
// put1 creates a flow control point at the next PC that jumps to one
// PC and, if cond is true, can also continue to the PC following the
@@ -105,20 +105,20 @@ func newFlowBlock(target string, b *block) *flowBlock {
}
// Count parents leading to the root of the scope
- n := 0;
+ n := 0
for bp := b; bp.scope == b.scope; bp = bp.outer {
n++
}
// Capture numVars from each block to the root of the scope
- numVars := make([]int, n);
- i := 0;
+ numVars := make([]int, n)
+ i := 0
for bp := b; i < n; bp = bp.outer {
- numVars[i] = bp.numVars;
- i++;
+ numVars[i] = bp.numVars
+ i++
}
- return &flowBlock{target, b, numVars};
+ return &flowBlock{target, b, numVars}
}
// putGoto captures the block at a goto statement. This should be
@@ -136,13 +136,13 @@ func (f *flowBuf) putLabel(name string, b *block) {
// reached from the given program counter. Error reporting is the
// caller's responsibility.
func (f *flowBuf) reachesEnd(pc uint) bool {
- endPC := f.cb.nextPC();
+ endPC := f.cb.nextPC()
if pc > endPC {
log.Crashf("Reached bad PC %d past end PC %d", pc, endPC)
}
for ; pc < endPC; pc++ {
- ent, ok := f.ents[pc];
+ ent, ok := f.ents[pc]
if !ok {
continue
}
@@ -150,7 +150,7 @@ func (f *flowBuf) reachesEnd(pc uint) bool {
if ent.visited {
return false
}
- ent.visited = true;
+ ent.visited = true
if ent.term {
return false
@@ -168,9 +168,9 @@ func (f *flowBuf) reachesEnd(pc uint) bool {
if ent.cond {
continue
}
- return false;
+ return false
}
- return true;
+ return true
}
// gotosObeyScopes returns true if no goto statement causes any
@@ -178,28 +178,28 @@ func (f *flowBuf) reachesEnd(pc uint) bool {
// the goto. Reports any errors using the given compiler.
func (f *flowBuf) gotosObeyScopes(a *compiler) {
for pos, src := range f.gotos {
- tgt := f.labels[src.target];
+ tgt := f.labels[src.target]
// The target block must be a parent of this block
- numVars := src.numVars;
- b := src.block;
+ numVars := src.numVars
+ b := src.block
for len(numVars) > 0 && b != tgt.block {
- b = b.outer;
- numVars = numVars[1:];
+ b = b.outer
+ numVars = numVars[1:]
}
if b != tgt.block {
// We jumped into a deeper block
- a.diagAt(pos, "goto causes variables to come into scope");
- return;
+ a.diagAt(pos, "goto causes variables to come into scope")
+ return
}
// There must be no variables in the target block that
// did not exist at the jump
- tgtNumVars := tgt.numVars;
+ tgtNumVars := tgt.numVars
for i := range numVars {
if tgtNumVars[i] > numVars[i] {
- a.diagAt(pos, "goto causes variables to come into scope");
- return;
+ a.diagAt(pos, "goto causes variables to come into scope")
+ return
}
}
}
@@ -210,25 +210,25 @@ func (f *flowBuf) gotosObeyScopes(a *compiler) {
*/
func (a *stmtCompiler) defineVar(ident *ast.Ident, t Type) *Variable {
- v, prev := a.block.DefineVar(ident.Value, ident.Pos(), t);
+ v, prev := a.block.DefineVar(ident.Value, ident.Pos(), t)
if prev != nil {
// TODO(austin) It's silly that we have to capture
// Pos() in a variable.
- pos := prev.Pos();
+ pos := prev.Pos()
if pos.IsValid() {
a.diagAt(ident, "variable %s redeclared in this block\n\tprevious declaration at %s", ident.Value, &pos)
} else {
a.diagAt(ident, "variable %s redeclared in this block", ident.Value)
}
- return nil;
+ return nil
}
// Initialize the variable
- index := v.Index;
+ index := v.Index
if v.Index >= 0 {
a.push(func(v *Thread) { v.f.Vars[index] = t.Zero() })
}
- return v;
+ return v
}
// TODO(austin) Move doAssign to here
@@ -242,7 +242,7 @@ func (a *stmtCompiler) compile(s ast.Stmt) {
log.Crash("Child scope still entered")
}
- notimpl := false;
+ notimpl := false
switch s := s.(type) {
case *ast.BadStmt:
// Error already reported by parser.
@@ -340,30 +340,30 @@ func (a *stmtCompiler) compileDeclStmt(s *ast.DeclStmt) {
default:
log.Crashf("Unexpected Decl type %T", s.Decl)
}
- a.compileDecl(s.Decl);
+ a.compileDecl(s.Decl)
}
func (a *stmtCompiler) compileVarDecl(decl *ast.GenDecl) {
for _, spec := range decl.Specs {
- spec := spec.(*ast.ValueSpec);
+ spec := spec.(*ast.ValueSpec)
if spec.Values == nil {
// Declaration without assignment
if spec.Type == nil {
// Parser should have caught
log.Crash("Type and Values nil")
}
- t := a.compileType(a.block, spec.Type);
+ t := a.compileType(a.block, spec.Type)
// Define placeholders even if type compile failed
for _, n := range spec.Names {
a.defineVar(n, t)
}
} else {
// Declaration with assignment
- lhs := make([]ast.Expr, len(spec.Names));
+ lhs := make([]ast.Expr, len(spec.Names))
for i, n := range spec.Names {
lhs[i] = n
}
- a.doAssign(lhs, spec.Values, decl.Tok, spec.Type);
+ a.doAssign(lhs, spec.Values, decl.Tok, spec.Type)
}
}
}
@@ -375,27 +375,27 @@ func (a *stmtCompiler) compileDecl(decl ast.Decl) {
a.silentErrors++
case *ast.FuncDecl:
- decl := a.compileFuncType(a.block, d.Type);
+ decl := a.compileFuncType(a.block, d.Type)
if decl == nil {
return
}
// Declare and initialize v before compiling func
// so that body can refer to itself.
- c, prev := a.block.DefineConst(d.Name.Value, a.pos, decl.Type, decl.Type.Zero());
+ c, prev := a.block.DefineConst(d.Name.Value, a.pos, decl.Type, decl.Type.Zero())
if prev != nil {
- pos := prev.Pos();
+ pos := prev.Pos()
if pos.IsValid() {
a.diagAt(d.Name, "identifier %s redeclared in this block\n\tprevious declaration at %s", d.Name.Value, &pos)
} else {
a.diagAt(d.Name, "identifier %s redeclared in this block", d.Name.Value)
}
}
- fn := a.compileFunc(a.block, decl, d.Body);
+ fn := a.compileFunc(a.block, decl, d.Body)
if c == nil || fn == nil {
return
}
- var zeroThread Thread;
- c.Value.(FuncValue).Set(nil, fn(&zeroThread));
+ var zeroThread Thread
+ c.Value.(FuncValue).Set(nil, fn(&zeroThread))
case *ast.GenDecl:
switch d.Tok {
@@ -416,119 +416,119 @@ func (a *stmtCompiler) compileDecl(decl ast.Decl) {
func (a *stmtCompiler) compileLabeledStmt(s *ast.LabeledStmt) {
// Define label
- l, ok := a.labels[s.Label.Value];
+ l, ok := a.labels[s.Label.Value]
if ok {
if l.resolved.IsValid() {
a.diag("label %s redeclared in this block\n\tprevious declaration at %s", s.Label.Value, &l.resolved)
}
} else {
- pc := badPC;
- l = &label{name: s.Label.Value, gotoPC: &pc};
- a.labels[l.name] = l;
+ pc := badPC
+ l = &label{name: s.Label.Value, gotoPC: &pc}
+ a.labels[l.name] = l
}
- l.desc = "regular label";
- l.resolved = s.Pos();
+ l.desc = "regular label"
+ l.resolved = s.Pos()
// Set goto PC
- *l.gotoPC = a.nextPC();
+ *l.gotoPC = a.nextPC()
// Define flow entry so we can check for jumps over declarations.
- a.flow.putLabel(l.name, a.block);
+ a.flow.putLabel(l.name, a.block)
// Compile the statement. Reuse our stmtCompiler for simplicity.
- sc := &stmtCompiler{a.blockCompiler, s.Stmt.Pos(), l};
- sc.compile(s.Stmt);
+ sc := &stmtCompiler{a.blockCompiler, s.Stmt.Pos(), l}
+ sc.compile(s.Stmt)
}
func (a *stmtCompiler) compileExprStmt(s *ast.ExprStmt) {
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
- e := a.compileExpr(bc.block, false, s.X);
+ e := a.compileExpr(bc.block, false, s.X)
if e == nil {
return
}
if e.exec == nil {
- a.diag("%s cannot be used as expression statement", e.desc);
- return;
+ a.diag("%s cannot be used as expression statement", e.desc)
+ return
}
- a.push(e.exec);
+ a.push(e.exec)
}
func (a *stmtCompiler) compileIncDecStmt(s *ast.IncDecStmt) {
// Create temporary block for extractEffect
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
- l := a.compileExpr(bc.block, false, s.X);
+ l := a.compileExpr(bc.block, false, s.X)
if l == nil {
return
}
if l.evalAddr == nil {
- l.diag("cannot assign to %s", l.desc);
- return;
+ l.diag("cannot assign to %s", l.desc)
+ return
}
if !(l.t.isInteger() || l.t.isFloat()) {
- l.diagOpType(s.Tok, l.t);
- return;
+ l.diagOpType(s.Tok, l.t)
+ return
}
- var op token.Token;
- var desc string;
+ var op token.Token
+ var desc string
switch s.Tok {
case token.INC:
- op = token.ADD;
- desc = "increment statement";
+ op = token.ADD
+ desc = "increment statement"
case token.DEC:
- op = token.SUB;
- desc = "decrement statement";
+ op = token.SUB
+ desc = "decrement statement"
default:
log.Crashf("Unexpected IncDec token %v", s.Tok)
}
- effect, l := l.extractEffect(bc.block, desc);
+ effect, l := l.extractEffect(bc.block, desc)
- one := l.newExpr(IdealIntType, "constant");
- one.pos = s.Pos();
- one.eval = func() *bignum.Integer { return bignum.Int(1) };
+ one := l.newExpr(IdealIntType, "constant")
+ one.pos = s.Pos()
+ one.eval = func() *bignum.Integer { return bignum.Int(1) }
- binop := l.compileBinaryExpr(op, l, one);
+ binop := l.compileBinaryExpr(op, l, one)
if binop == nil {
return
}
- assign := a.compileAssign(s.Pos(), bc.block, l.t, []*expr{binop}, "", "");
+ assign := a.compileAssign(s.Pos(), bc.block, l.t, []*expr{binop}, "", "")
if assign == nil {
log.Crashf("compileAssign type check failed")
}
- lf := l.evalAddr;
+ lf := l.evalAddr
a.push(func(v *Thread) {
- effect(v);
- assign(lf(v), v);
- });
+ effect(v)
+ assign(lf(v), v)
+ })
}
func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token, declTypeExpr ast.Expr) {
- nerr := a.numError();
+ nerr := a.numError()
// Compile right side first so we have the types when
// compiling the left side and so we don't see definitions
// made on the left side.
- rs := make([]*expr, len(rhs));
+ rs := make([]*expr, len(rhs))
for i, re := range rhs {
rs[i] = a.compileExpr(a.block, false, re)
}
- errOp := "assignment";
+ errOp := "assignment"
if tok == token.DEFINE || tok == token.VAR {
errOp = "declaration"
}
- ac, ok := a.checkAssign(a.pos, rs, errOp, "value");
- ac.allowMapForms(len(lhs));
+ ac, ok := a.checkAssign(a.pos, rs, errOp, "value")
+ ac.allowMapForms(len(lhs))
// If this is a definition and the LHS is too big, we won't be
// able to produce the usual error message because we can't
@@ -538,35 +538,35 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
}
// Compile left type if there is one
- var declType Type;
+ var declType Type
if declTypeExpr != nil {
declType = a.compileType(a.block, declTypeExpr)
}
// Compile left side
- ls := make([]*expr, len(lhs));
- nDefs := 0;
+ ls := make([]*expr, len(lhs))
+ nDefs := 0
for i, le := range lhs {
// If this is a definition, get the identifier and its type
- var ident *ast.Ident;
- var lt Type;
+ var ident *ast.Ident
+ var lt Type
switch tok {
case token.DEFINE:
// Check that it's an identifier
- ident, ok = le.(*ast.Ident);
+ ident, ok = le.(*ast.Ident)
if !ok {
- a.diagAt(le, "left side of := must be a name");
+ a.diagAt(le, "left side of := must be a name")
// Suppress new defitions errors
- nDefs++;
- continue;
+ nDefs++
+ continue
}
// Is this simply an assignment?
if _, ok := a.block.defs[ident.Value]; ok {
- ident = nil;
- break;
+ ident = nil
+ break
}
- nDefs++;
+ nDefs++
case token.VAR:
ident = le.(*ast.Ident)
@@ -623,7 +623,7 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
}
// Compile LHS
- ls[i] = a.compileExpr(a.block, false, le);
+ ls[i] = a.compileExpr(a.block, false, le)
if ls[i] == nil {
continue
}
@@ -635,23 +635,23 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
// TODO(austin) Now that the expression
// compiler uses semantic values, this might
// be easier to implement as a function call.
- sub := ls[i];
- ls[i] = ls[i].newExpr(sub.t, sub.desc);
- ls[i].evalMapValue = sub.evalMapValue;
- mvf := sub.evalMapValue;
- et := sub.t;
+ sub := ls[i]
+ ls[i] = ls[i].newExpr(sub.t, sub.desc)
+ ls[i].evalMapValue = sub.evalMapValue
+ mvf := sub.evalMapValue
+ et := sub.t
ls[i].evalAddr = func(t *Thread) Value {
- m, k := mvf(t);
- e := m.Elem(t, k);
+ m, k := mvf(t)
+ e := m.Elem(t, k)
if e == nil {
- e = et.Zero();
- m.SetElem(t, k, e);
+ e = et.Zero()
+ m.SetElem(t, k, e)
}
- return e;
- };
+ return e
+ }
} else if ls[i].evalAddr == nil {
- ls[i].diag("cannot assign to %s", ls[i].desc);
- continue;
+ ls[i].diag("cannot assign to %s", ls[i].desc)
+ continue
}
}
@@ -660,8 +660,8 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
// with the same type, and at least one of the variables is
// new.
if tok == token.DEFINE && nDefs == 0 {
- a.diag("at least one new variable must be declared");
- return;
+ a.diag("at least one new variable must be declared")
+ return
}
// If there have been errors, our arrays are full of nil's so
@@ -672,27 +672,27 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
// Check for 'a[x] = r, ok'
if len(ls) == 1 && len(rs) == 2 && ls[0].evalMapValue != nil {
- a.diag("a[x] = r, ok form not implemented");
- return;
+ a.diag("a[x] = r, ok form not implemented")
+ return
}
// Create assigner
- var lt Type;
- n := len(lhs);
+ var lt Type
+ n := len(lhs)
if n == 1 {
lt = ls[0].t
} else {
- lts := make([]Type, len(ls));
+ lts := make([]Type, len(ls))
for i, l := range ls {
if l != nil {
lts[i] = l.t
}
}
- lt = NewMultiType(lts);
+ lt = NewMultiType(lts)
}
- bc := a.enterChild();
- defer bc.exit();
- assign := ac.compile(bc.block, lt);
+ bc := a.enterChild()
+ defer bc.exit()
+ assign := ac.compile(bc.block, lt)
if assign == nil {
return
}
@@ -700,38 +700,38 @@ func (a *stmtCompiler) doAssign(lhs []ast.Expr, rhs []ast.Expr, tok token.Token,
// Compile
if n == 1 {
// Don't need temporaries and can avoid []Value.
- lf := ls[0].evalAddr;
- a.push(func(t *Thread) { assign(lf(t), t) });
+ lf := ls[0].evalAddr
+ a.push(func(t *Thread) { assign(lf(t), t) })
} else if tok == token.VAR || (tok == token.DEFINE && nDefs == n) {
// Don't need temporaries
- lfs := make([]func(*Thread) Value, n);
+ lfs := make([]func(*Thread) Value, n)
for i, l := range ls {
lfs[i] = l.evalAddr
}
a.push(func(t *Thread) {
- dest := make([]Value, n);
+ dest := make([]Value, n)
for i, lf := range lfs {
dest[i] = lf(t)
}
- assign(multiV(dest), t);
- });
+ assign(multiV(dest), t)
+ })
} else {
// Need temporaries
- lmt := lt.(*MultiType);
- lfs := make([]func(*Thread) Value, n);
+ lmt := lt.(*MultiType)
+ lfs := make([]func(*Thread) Value, n)
for i, l := range ls {
lfs[i] = l.evalAddr
}
a.push(func(t *Thread) {
- temp := lmt.Zero().(multiV);
- assign(temp, t);
+ temp := lmt.Zero().(multiV)
+ assign(temp, t)
// Copy to destination
for i := 0; i < n; i++ {
// TODO(austin) Need to evaluate LHS
// before RHS
lfs[i](t).Assign(t, temp[i])
}
- });
+ })
}
}
@@ -752,42 +752,42 @@ var assignOpToOp = map[token.Token]token.Token{
func (a *stmtCompiler) doAssignOp(s *ast.AssignStmt) {
if len(s.Lhs) != 1 || len(s.Rhs) != 1 {
- a.diag("tuple assignment cannot be combined with an arithmetic operation");
- return;
+ a.diag("tuple assignment cannot be combined with an arithmetic operation")
+ return
}
// Create temporary block for extractEffect
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
- l := a.compileExpr(bc.block, false, s.Lhs[0]);
- r := a.compileExpr(bc.block, false, s.Rhs[0]);
+ l := a.compileExpr(bc.block, false, s.Lhs[0])
+ r := a.compileExpr(bc.block, false, s.Rhs[0])
if l == nil || r == nil {
return
}
if l.evalAddr == nil {
- l.diag("cannot assign to %s", l.desc);
- return;
+ l.diag("cannot assign to %s", l.desc)
+ return
}
- effect, l := l.extractEffect(bc.block, "operator-assignment");
+ effect, l := l.extractEffect(bc.block, "operator-assignment")
- binop := r.compileBinaryExpr(assignOpToOp[s.Tok], l, r);
+ binop := r.compileBinaryExpr(assignOpToOp[s.Tok], l, r)
if binop == nil {
return
}
- assign := a.compileAssign(s.Pos(), bc.block, l.t, []*expr{binop}, "assignment", "value");
+ assign := a.compileAssign(s.Pos(), bc.block, l.t, []*expr{binop}, "assignment", "value")
if assign == nil {
log.Crashf("compileAssign type check failed")
}
- lf := l.evalAddr;
+ lf := l.evalAddr
a.push(func(t *Thread) {
- effect(t);
- assign(lf(t), t);
- });
+ effect(t)
+ assign(lf(t), t)
+ })
}
func (a *stmtCompiler) compileAssignStmt(s *ast.AssignStmt) {
@@ -802,25 +802,25 @@ func (a *stmtCompiler) compileAssignStmt(s *ast.AssignStmt) {
func (a *stmtCompiler) compileReturnStmt(s *ast.ReturnStmt) {
if a.fnType == nil {
- a.diag("cannot return at the top level");
- return;
+ a.diag("cannot return at the top level")
+ return
}
if len(s.Results) == 0 && (len(a.fnType.Out) == 0 || a.outVarsNamed) {
// Simple case. Simply exit from the function.
- a.flow.putTerm();
- a.push(func(v *Thread) { v.pc = returnPC });
- return;
+ a.flow.putTerm()
+ a.push(func(v *Thread) { v.pc = returnPC })
+ return
}
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
// Compile expressions
- bad := false;
- rs := make([]*expr, len(s.Results));
+ bad := false
+ rs := make([]*expr, len(s.Results))
for i, re := range s.Results {
- rs[i] = a.compileExpr(bc.block, false, re);
+ rs[i] = a.compileExpr(bc.block, false, re)
if rs[i] == nil {
bad = true
}
@@ -835,38 +835,38 @@ func (a *stmtCompiler) compileReturnStmt(s *ast.ReturnStmt) {
// is a single call to a multi-valued function, the values
// returned from the called function will be returned from
// this one.
- assign := a.compileAssign(s.Pos(), bc.block, NewMultiType(a.fnType.Out), rs, "return", "value");
+ assign := a.compileAssign(s.Pos(), bc.block, NewMultiType(a.fnType.Out), rs, "return", "value")
// XXX(Spec) "The result types of the current function and the
// called function must match." Match is fuzzy. It should
// say that they must be assignment compatible.
// Compile
- start := len(a.fnType.In);
- nout := len(a.fnType.Out);
- a.flow.putTerm();
+ start := len(a.fnType.In)
+ nout := len(a.fnType.Out)
+ a.flow.putTerm()
a.push(func(t *Thread) {
- assign(multiV(t.f.Vars[start:start+nout]), t);
- t.pc = returnPC;
- });
+ assign(multiV(t.f.Vars[start:start+nout]), t)
+ t.pc = returnPC
+ })
}
func (a *stmtCompiler) findLexicalLabel(name *ast.Ident, pred func(*label) bool, errOp, errCtx string) *label {
- bc := a.blockCompiler;
+ bc := a.blockCompiler
for ; bc != nil; bc = bc.parent {
if bc.label == nil {
continue
}
- l := bc.label;
+ l := bc.label
if name == nil && pred(l) {
return l
}
if name != nil && l.name == name.Value {
if !pred(l) {
- a.diag("cannot %s to %s %s", errOp, l.desc, l.name);
- return nil;
+ a.diag("cannot %s to %s %s", errOp, l.desc, l.name)
+ return nil
}
- return l;
+ return l
}
}
if name == nil {
@@ -874,54 +874,54 @@ func (a *stmtCompiler) findLexicalLabel(name *ast.Ident, pred func(*label) bool,
} else {
a.diag("%s label %s not defined", errOp, name.Value)
}
- return nil;
+ return nil
}
func (a *stmtCompiler) compileBranchStmt(s *ast.BranchStmt) {
- var pc *uint;
+ var pc *uint
switch s.Tok {
case token.BREAK:
- l := a.findLexicalLabel(s.Label, func(l *label) bool { return l.breakPC != nil }, "break", "for loop, switch, or select");
+ l := a.findLexicalLabel(s.Label, func(l *label) bool { return l.breakPC != nil }, "break", "for loop, switch, or select")
if l == nil {
return
}
- pc = l.breakPC;
+ pc = l.breakPC
case token.CONTINUE:
- l := a.findLexicalLabel(s.Label, func(l *label) bool { return l.continuePC != nil }, "continue", "for loop");
+ l := a.findLexicalLabel(s.Label, func(l *label) bool { return l.continuePC != nil }, "continue", "for loop")
if l == nil {
return
}
- pc = l.continuePC;
+ pc = l.continuePC
case token.GOTO:
- l, ok := a.labels[s.Label.Value];
+ l, ok := a.labels[s.Label.Value]
if !ok {
- pc := badPC;
- l = &label{name: s.Label.Value, desc: "unresolved label", gotoPC: &pc, used: s.Pos()};
- a.labels[l.name] = l;
+ pc := badPC
+ l = &label{name: s.Label.Value, desc: "unresolved label", gotoPC: &pc, used: s.Pos()}
+ a.labels[l.name] = l
}
- pc = l.gotoPC;
- a.flow.putGoto(s.Pos(), l.name, a.block);
+ pc = l.gotoPC
+ a.flow.putGoto(s.Pos(), l.name, a.block)
case token.FALLTHROUGH:
- a.diag("fallthrough outside switch");
- return;
+ a.diag("fallthrough outside switch")
+ return
default:
log.Crash("Unexpected branch token %v", s.Tok)
}
- a.flow.put1(false, pc);
- a.push(func(v *Thread) { v.pc = *pc });
+ a.flow.put1(false, pc)
+ a.push(func(v *Thread) { v.pc = *pc })
}
func (a *stmtCompiler) compileBlockStmt(s *ast.BlockStmt) {
- bc := a.enterChild();
- bc.compileStmts(s);
- bc.exit();
+ bc := a.enterChild()
+ bc.compileStmts(s)
+ bc.exit()
}
func (a *stmtCompiler) compileIfStmt(s *ast.IfStmt) {
@@ -935,59 +935,59 @@ func (a *stmtCompiler) compileIfStmt(s *ast.IfStmt) {
// says when there's a non-block else clause, because that
// else claus has to execute in a scope that is *not* the
// surrounding scope.
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
// Compile init statement, if any
if s.Init != nil {
bc.compileStmt(s.Init)
}
- elsePC := badPC;
- endPC := badPC;
+ elsePC := badPC
+ endPC := badPC
// Compile condition, if any. If there is no condition, we
// fall through to the body.
if s.Cond != nil {
- e := bc.compileExpr(bc.block, false, s.Cond);
+ e := bc.compileExpr(bc.block, false, s.Cond)
switch {
case e == nil:
// Error reported by compileExpr
case !e.t.isBoolean():
e.diag("'if' condition must be boolean\n\t%v", e.t)
default:
- eval := e.asBool();
- a.flow.put1(true, &elsePC);
+ eval := e.asBool()
+ a.flow.put1(true, &elsePC)
a.push(func(t *Thread) {
if !eval(t) {
t.pc = elsePC
}
- });
+ })
}
}
// Compile body
- body := bc.enterChild();
- body.compileStmts(s.Body);
- body.exit();
+ body := bc.enterChild()
+ body.compileStmts(s.Body)
+ body.exit()
// Compile else
if s.Else != nil {
// Skip over else if we executed the body
- a.flow.put1(false, &endPC);
- a.push(func(v *Thread) { v.pc = endPC });
- elsePC = a.nextPC();
- bc.compileStmt(s.Else);
+ a.flow.put1(false, &endPC)
+ a.push(func(v *Thread) { v.pc = endPC })
+ elsePC = a.nextPC()
+ bc.compileStmt(s.Else)
} else {
elsePC = a.nextPC()
}
- endPC = a.nextPC();
+ endPC = a.nextPC()
}
func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
// Create implicit scope around switch
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
// Compile init statement, if any
if s.Init != nil {
@@ -995,46 +995,46 @@ func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
}
// Compile condition, if any, and extract its effects
- var cond *expr;
- condbc := bc.enterChild();
+ var cond *expr
+ condbc := bc.enterChild()
if s.Tag != nil {
- e := condbc.compileExpr(condbc.block, false, s.Tag);
+ e := condbc.compileExpr(condbc.block, false, s.Tag)
if e != nil {
- var effect func(*Thread);
- effect, cond = e.extractEffect(condbc.block, "switch");
- a.push(effect);
+ var effect func(*Thread)
+ effect, cond = e.extractEffect(condbc.block, "switch")
+ a.push(effect)
}
}
// Count cases
- ncases := 0;
- hasDefault := false;
+ ncases := 0
+ hasDefault := false
for _, c := range s.Body.List {
- clause, ok := c.(*ast.CaseClause);
+ clause, ok := c.(*ast.CaseClause)
if !ok {
- a.diagAt(clause, "switch statement must contain case clauses");
- continue;
+ a.diagAt(clause, "switch statement must contain case clauses")
+ continue
}
if clause.Values == nil {
if hasDefault {
a.diagAt(clause, "switch statement contains more than one default case")
}
- hasDefault = true;
+ hasDefault = true
} else {
ncases += len(clause.Values)
}
}
// Compile case expressions
- cases := make([]func(*Thread) bool, ncases);
- i := 0;
+ cases := make([]func(*Thread) bool, ncases)
+ i := 0
for _, c := range s.Body.List {
- clause, ok := c.(*ast.CaseClause);
+ clause, ok := c.(*ast.CaseClause)
if !ok {
continue
}
for _, v := range clause.Values {
- e := condbc.compileExpr(condbc.block, false, v);
+ e := condbc.compileExpr(condbc.block, false, v)
switch {
case e == nil:
// Error reported by compileExpr
@@ -1045,45 +1045,45 @@ func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
case cond != nil:
// Create comparison
// TOOD(austin) This produces bad error messages
- compare := e.compileBinaryExpr(token.EQL, cond, e);
+ compare := e.compileBinaryExpr(token.EQL, cond, e)
if compare != nil {
cases[i] = compare.asBool()
}
}
- i++;
+ i++
}
}
// Emit condition
- casePCs := make([]*uint, ncases+1);
- endPC := badPC;
+ casePCs := make([]*uint, ncases+1)
+ endPC := badPC
- a.flow.put(false, false, casePCs);
+ a.flow.put(false, false, casePCs)
a.push(func(t *Thread) {
for i, c := range cases {
if c(t) {
- t.pc = *casePCs[i];
- return;
+ t.pc = *casePCs[i]
+ return
}
}
- t.pc = *casePCs[ncases];
- });
- condbc.exit();
+ t.pc = *casePCs[ncases]
+ })
+ condbc.exit()
// Compile cases
- i = 0;
+ i = 0
for _, c := range s.Body.List {
- clause, ok := c.(*ast.CaseClause);
+ clause, ok := c.(*ast.CaseClause)
if !ok {
continue
}
// Save jump PC's
- pc := a.nextPC();
+ pc := a.nextPC()
if clause.Values != nil {
for _ = range clause.Values {
- casePCs[i] = &pc;
- i++;
+ casePCs[i] = &pc
+ i++
}
} else {
// Default clause
@@ -1091,7 +1091,7 @@ func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
}
// Compile body
- fall := false;
+ fall := false
for j, s := range clause.Body {
if br, ok := s.(*ast.BranchStmt); ok && br.Tok == token.FALLTHROUGH {
// println("Found fallthrough");
@@ -1104,24 +1104,24 @@ func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
// empty blocks to be empty
// statements.
if _, ok := s2.(*ast.EmptyStmt); !ok {
- a.diagAt(s, "fallthrough statement must be final statement in case");
- break;
+ a.diagAt(s, "fallthrough statement must be final statement in case")
+ break
}
}
- fall = true;
+ fall = true
} else {
bc.compileStmt(s)
}
}
// Jump out of switch, unless there was a fallthrough
if !fall {
- a.flow.put1(false, &endPC);
- a.push(func(v *Thread) { v.pc = endPC });
+ a.flow.put1(false, &endPC)
+ a.push(func(v *Thread) { v.pc = endPC })
}
}
// Get end PC
- endPC = a.nextPC();
+ endPC = a.nextPC()
if !hasDefault {
casePCs[ncases] = &endPC
}
@@ -1129,40 +1129,40 @@ func (a *stmtCompiler) compileSwitchStmt(s *ast.SwitchStmt) {
func (a *stmtCompiler) compileForStmt(s *ast.ForStmt) {
// Wrap the entire for in a block.
- bc := a.enterChild();
- defer bc.exit();
+ bc := a.enterChild()
+ defer bc.exit()
// Compile init statement, if any
if s.Init != nil {
bc.compileStmt(s.Init)
}
- bodyPC := badPC;
- postPC := badPC;
- checkPC := badPC;
- endPC := badPC;
+ bodyPC := badPC
+ postPC := badPC
+ checkPC := badPC
+ endPC := badPC
// Jump to condition check. We generate slightly less code by
// placing the condition check after the body.
- a.flow.put1(false, &checkPC);
- a.push(func(v *Thread) { v.pc = checkPC });
+ a.flow.put1(false, &checkPC)
+ a.push(func(v *Thread) { v.pc = checkPC })
// Compile body
- bodyPC = a.nextPC();
- body := bc.enterChild();
+ bodyPC = a.nextPC()
+ body := bc.enterChild()
if a.stmtLabel != nil {
body.label = a.stmtLabel
} else {
body.label = &label{resolved: s.Pos()}
}
- body.label.desc = "for loop";
- body.label.breakPC = &endPC;
- body.label.continuePC = &postPC;
- body.compileStmts(s.Body);
- body.exit();
+ body.label.desc = "for loop"
+ body.label.breakPC = &endPC
+ body.label.continuePC = &postPC
+ body.compileStmts(s.Body)
+ body.exit()
// Compile post, if any
- postPC = a.nextPC();
+ postPC = a.nextPC()
if s.Post != nil {
// TODO(austin) Does the parser disallow short
// declarations in s.Post?
@@ -1170,30 +1170,30 @@ func (a *stmtCompiler) compileForStmt(s *ast.ForStmt) {
}
// Compile condition check, if any
- checkPC = a.nextPC();
+ checkPC = a.nextPC()
if s.Cond == nil {
// If the condition is absent, it is equivalent to true.
- a.flow.put1(false, &bodyPC);
- a.push(func(v *Thread) { v.pc = bodyPC });
+ a.flow.put1(false, &bodyPC)
+ a.push(func(v *Thread) { v.pc = bodyPC })
} else {
- e := bc.compileExpr(bc.block, false, s.Cond);
+ e := bc.compileExpr(bc.block, false, s.Cond)
switch {
case e == nil:
// Error reported by compileExpr
case !e.t.isBoolean():
a.diag("'for' condition must be boolean\n\t%v", e.t)
default:
- eval := e.asBool();
- a.flow.put1(true, &bodyPC);
+ eval := e.asBool()
+ a.flow.put1(true, &bodyPC)
a.push(func(t *Thread) {
if eval(t) {
t.pc = bodyPC
}
- });
+ })
}
}
- endPC = a.nextPC();
+ endPC = a.nextPC()
}
/*
@@ -1201,8 +1201,8 @@ func (a *stmtCompiler) compileForStmt(s *ast.ForStmt) {
*/
func (a *blockCompiler) compileStmt(s ast.Stmt) {
- sc := &stmtCompiler{a, s.Pos(), nil};
- sc.compile(s);
+ sc := &stmtCompiler{a, s.Pos(), nil}
+ sc.compile(s)
}
func (a *blockCompiler) compileStmts(block *ast.BlockStmt) {
@@ -1212,15 +1212,15 @@ func (a *blockCompiler) compileStmts(block *ast.BlockStmt) {
}
func (a *blockCompiler) enterChild() *blockCompiler {
- block := a.block.enterChild();
+ block := a.block.enterChild()
return &blockCompiler{
funcCompiler: a.funcCompiler,
block: block,
parent: a,
- };
+ }
}
-func (a *blockCompiler) exit() { a.block.exit() }
+func (a *blockCompiler) exit() { a.block.exit() }
/*
* Function compiler
@@ -1231,8 +1231,8 @@ func (a *compiler) compileFunc(b *block, decl *FuncDecl, body *ast.BlockStmt) (f
//
// The scope of a parameter or result is the body of the
// corresponding function.
- bodyScope := b.ChildScope();
- defer bodyScope.exit();
+ bodyScope := b.ChildScope()
+ defer bodyScope.exit()
for i, t := range decl.Type.In {
if decl.InNames[i] != nil {
bodyScope.DefineVar(decl.InNames[i].Value, decl.InNames[i].Pos(), t)
@@ -1249,7 +1249,7 @@ func (a *compiler) compileFunc(b *block, decl *FuncDecl, body *ast.BlockStmt) (f
}
// Create block context
- cb := newCodeBuf();
+ cb := newCodeBuf()
fc := &funcCompiler{
compiler: a,
fnType: decl.Type,
@@ -1257,16 +1257,16 @@ func (a *compiler) compileFunc(b *block, decl *FuncDecl, body *ast.BlockStmt) (f
codeBuf: cb,
flow: newFlowBuf(cb),
labels: make(map[string]*label),
- };
+ }
bc := &blockCompiler{
funcCompiler: fc,
block: bodyScope.block,
- };
+ }
// Compile body
- nerr := a.numError();
- bc.compileStmts(body);
- fc.checkLabels();
+ nerr := a.numError()
+ bc.compileStmts(body)
+ fc.checkLabels()
if nerr != a.numError() {
return nil
}
@@ -1275,19 +1275,19 @@ func (a *compiler) compileFunc(b *block, decl *FuncDecl, body *ast.BlockStmt) (f
// this if there were no errors compiling the body.
if len(decl.Type.Out) > 0 && fc.flow.reachesEnd(0) {
// XXX(Spec) Not specified.
- a.diagAt(&body.Rbrace, "function ends without a return statement");
- return nil;
+ a.diagAt(&body.Rbrace, "function ends without a return statement")
+ return nil
}
- code := fc.get();
- maxVars := bodyScope.maxVars;
- return func(t *Thread) Func { return &evalFunc{t.f, maxVars, code} };
+ code := fc.get()
+ maxVars := bodyScope.maxVars
+ return func(t *Thread) Func { return &evalFunc{t.f, maxVars, code} }
}
// Checks that labels were resolved and that all jumps obey scoping
// rules. Reports an error and set fc.err if any check fails.
func (a *funcCompiler) checkLabels() {
- nerr := a.numError();
+ nerr := a.numError()
for _, l := range a.labels {
if !l.resolved.IsValid() {
a.diagAt(&l.used, "label %s not defined", l.name)
@@ -1301,5 +1301,5 @@ func (a *funcCompiler) checkLabels() {
// Executing the "goto" statement must not cause any variables
// to come into scope that were not already in scope at the
// point of the goto.
- a.flow.gotosObeyScopes(a.compiler);
+ a.flow.gotosObeyScopes(a.compiler)
}
diff --git a/src/pkg/exp/eval/stmt_test.go b/src/pkg/exp/eval/stmt_test.go
index 0adea1e62..57c3dd7e9 100644
--- a/src/pkg/exp/eval/stmt_test.go
+++ b/src/pkg/exp/eval/stmt_test.go
@@ -344,4 +344,4 @@ var stmtTests = []test{
Run2("func f1(){}", "f1()"),
}
-func TestStmt(t *testing.T) { runTests(t, "stmtTests", stmtTests) }
+func TestStmt(t *testing.T) { runTests(t, "stmtTests", stmtTests) }
diff --git a/src/pkg/exp/eval/type.go b/src/pkg/exp/eval/type.go
index 84a586178..d8f00e93c 100644
--- a/src/pkg/exp/eval/type.go
+++ b/src/pkg/exp/eval/type.go
@@ -5,13 +5,13 @@
package eval
import (
- "bignum";
- "go/ast";
- "go/token";
- "log";
- "reflect";
- "sort";
- "unsafe"; // For Sizeof
+ "bignum"
+ "go/ast"
+ "go/token"
+ "log"
+ "reflect"
+ "sort"
+ "unsafe" // For Sizeof
)
@@ -36,33 +36,33 @@ type Type interface {
// compatible if their definitions are conversion compatible.
//
// TODO(austin) Deal with recursive types
- compat(o Type, conv bool) bool;
+ compat(o Type, conv bool) bool
// lit returns this type's literal. If this is a named type,
// this is the unnamed underlying type. Otherwise, this is an
// identity operation.
- lit() Type;
+ lit() Type
// isBoolean returns true if this is a boolean type.
- isBoolean() bool;
+ isBoolean() bool
// isInteger returns true if this is an integer type.
- isInteger() bool;
+ isInteger() bool
// isFloat returns true if this is a floating type.
- isFloat() bool;
+ isFloat() bool
// isIdeal returns true if this is an ideal int or float.
- isIdeal() bool;
+ isIdeal() bool
// Zero returns a new zero value of this type.
- Zero() Value;
+ Zero() Value
// String returns the string representation of this type.
- String() string;
+ String() string
// The position where this type was defined, if any.
- Pos() token.Position;
+ Pos() token.Position
}
type BoundedType interface {
- Type;
+ Type
// minVal returns the smallest value of this type.
- minVal() *bignum.Rational;
+ minVal() *bignum.Rational
// maxVal returns the largest value of this type.
- maxVal() *bignum.Rational;
+ maxVal() *bignum.Rational
}
var universePos = token.Position{"<universe>", 0, 0, 0}
@@ -72,30 +72,30 @@ var universePos = token.Position{"<universe>", 0, 0, 0}
*/
type typeArrayMapEntry struct {
- key []Type;
- v interface{};
- next *typeArrayMapEntry;
+ key []Type
+ v interface{}
+ next *typeArrayMapEntry
}
type typeArrayMap map[uintptr]*typeArrayMapEntry
func hashTypeArray(key []Type) uintptr {
- hash := uintptr(0);
+ hash := uintptr(0)
for _, t := range key {
- hash = hash * 33;
+ hash = hash * 33
if t == nil {
continue
}
- addr := reflect.NewValue(t).(*reflect.PtrValue).Get();
- hash ^= addr;
+ addr := reflect.NewValue(t).(*reflect.PtrValue).Get()
+ hash ^= addr
}
- return hash;
+ return hash
}
-func newTypeArrayMap() typeArrayMap { return make(map[uintptr]*typeArrayMapEntry) }
+func newTypeArrayMap() typeArrayMap { return make(map[uintptr]*typeArrayMapEntry) }
func (m typeArrayMap) Get(key []Type) interface{} {
- ent, ok := m[hashTypeArray(key)];
+ ent, ok := m[hashTypeArray(key)]
if !ok {
return nil
}
@@ -111,19 +111,19 @@ nextEnt:
}
}
// Found it
- return ent.v;
+ return ent.v
}
- return nil;
+ return nil
}
func (m typeArrayMap) Put(key []Type, v interface{}) interface{} {
- hash := hashTypeArray(key);
- ent, _ := m[hash];
+ hash := hashTypeArray(key)
+ ent, _ := m[hash]
- new := &typeArrayMapEntry{key, v, ent};
- m[hash] = new;
- return v;
+ new := &typeArrayMapEntry{key, v, ent}
+ m[hash] = new
+ return v
}
/*
@@ -132,34 +132,34 @@ func (m typeArrayMap) Put(key []Type, v interface{}) interface{} {
type commonType struct{}
-func (commonType) isBoolean() bool { return false }
+func (commonType) isBoolean() bool { return false }
-func (commonType) isInteger() bool { return false }
+func (commonType) isInteger() bool { return false }
-func (commonType) isFloat() bool { return false }
+func (commonType) isFloat() bool { return false }
-func (commonType) isIdeal() bool { return false }
+func (commonType) isIdeal() bool { return false }
-func (commonType) Pos() token.Position { return token.Position{} }
+func (commonType) Pos() token.Position { return token.Position{} }
/*
* Bool
*/
type boolType struct {
- commonType;
+ commonType
}
var BoolType = universe.DefineType("bool", universePos, &boolType{})
func (t *boolType) compat(o Type, conv bool) bool {
- _, ok := o.lit().(*boolType);
- return ok;
+ _, ok := o.lit().(*boolType)
+ return ok
}
-func (t *boolType) lit() Type { return t }
+func (t *boolType) lit() Type { return t }
-func (t *boolType) isBoolean() bool { return true }
+func (t *boolType) isBoolean() bool { return true }
func (boolType) String() string {
// Use angle brackets as a convention for printing the
@@ -169,8 +169,8 @@ func (boolType) String() string {
}
func (t *boolType) Zero() Value {
- res := boolV(false);
- return &res;
+ res := boolV(false)
+ return &res
}
/*
@@ -178,66 +178,66 @@ func (t *boolType) Zero() Value {
*/
type uintType struct {
- commonType;
+ commonType
// 0 for architecture-dependent types
- Bits uint;
+ Bits uint
// true for uintptr, false for all others
- Ptr bool;
- name string;
+ Ptr bool
+ name string
}
var (
- Uint8Type = universe.DefineType("uint8", universePos, &uintType{commonType{}, 8, false, "uint8"});
- Uint16Type = universe.DefineType("uint16", universePos, &uintType{commonType{}, 16, false, "uint16"});
- Uint32Type = universe.DefineType("uint32", universePos, &uintType{commonType{}, 32, false, "uint32"});
- Uint64Type = universe.DefineType("uint64", universePos, &uintType{commonType{}, 64, false, "uint64"});
+ Uint8Type = universe.DefineType("uint8", universePos, &uintType{commonType{}, 8, false, "uint8"})
+ Uint16Type = universe.DefineType("uint16", universePos, &uintType{commonType{}, 16, false, "uint16"})
+ Uint32Type = universe.DefineType("uint32", universePos, &uintType{commonType{}, 32, false, "uint32"})
+ Uint64Type = universe.DefineType("uint64", universePos, &uintType{commonType{}, 64, false, "uint64"})
- UintType = universe.DefineType("uint", universePos, &uintType{commonType{}, 0, false, "uint"});
- UintptrType = universe.DefineType("uintptr", universePos, &uintType{commonType{}, 0, true, "uintptr"});
+ UintType = universe.DefineType("uint", universePos, &uintType{commonType{}, 0, false, "uint"})
+ UintptrType = universe.DefineType("uintptr", universePos, &uintType{commonType{}, 0, true, "uintptr"})
)
func (t *uintType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*uintType);
- return ok && t == t2;
+ t2, ok := o.lit().(*uintType)
+ return ok && t == t2
}
-func (t *uintType) lit() Type { return t }
+func (t *uintType) lit() Type { return t }
-func (t *uintType) isInteger() bool { return true }
+func (t *uintType) isInteger() bool { return true }
-func (t *uintType) String() string { return "<" + t.name + ">" }
+func (t *uintType) String() string { return "<" + t.name + ">" }
func (t *uintType) Zero() Value {
switch t.Bits {
case 0:
if t.Ptr {
- res := uintptrV(0);
- return &res;
+ res := uintptrV(0)
+ return &res
} else {
- res := uintV(0);
- return &res;
+ res := uintV(0)
+ return &res
}
case 8:
- res := uint8V(0);
- return &res;
+ res := uint8V(0)
+ return &res
case 16:
- res := uint16V(0);
- return &res;
+ res := uint16V(0)
+ return &res
case 32:
- res := uint32V(0);
- return &res;
+ res := uint32V(0)
+ return &res
case 64:
- res := uint64V(0);
- return &res;
+ res := uint64V(0)
+ return &res
}
- panic("unexpected uint bit count: ", t.Bits);
+ panic("unexpected uint bit count: ", t.Bits)
}
-func (t *uintType) minVal() *bignum.Rational { return bignum.Rat(0, 1) }
+func (t *uintType) minVal() *bignum.Rational { return bignum.Rat(0, 1) }
func (t *uintType) maxVal() *bignum.Rational {
- bits := t.Bits;
+ bits := t.Bits
if bits == 0 {
if t.Ptr {
bits = uint(8 * unsafe.Sizeof(uintptr(0)))
@@ -245,7 +245,7 @@ func (t *uintType) maxVal() *bignum.Rational {
bits = uint(8 * unsafe.Sizeof(uint(0)))
}
}
- return bignum.MakeRat(bignum.Int(1).Shl(bits).Add(bignum.Int(-1)), bignum.Nat(1));
+ return bignum.MakeRat(bignum.Int(1).Shl(bits).Add(bignum.Int(-1)), bignum.Nat(1))
}
/*
@@ -253,7 +253,7 @@ func (t *uintType) maxVal() *bignum.Rational {
*/
type intType struct {
- commonType;
+ commonType
// XXX(Spec) Numeric types: "There is also a set of
// architecture-independent basic numeric types whose size
@@ -261,66 +261,66 @@ type intType struct {
// architecture-dependent?
// 0 for architecture-dependent types
- Bits uint;
- name string;
+ Bits uint
+ name string
}
var (
- Int8Type = universe.DefineType("int8", universePos, &intType{commonType{}, 8, "int8"});
- Int16Type = universe.DefineType("int16", universePos, &intType{commonType{}, 16, "int16"});
- Int32Type = universe.DefineType("int32", universePos, &intType{commonType{}, 32, "int32"});
- Int64Type = universe.DefineType("int64", universePos, &intType{commonType{}, 64, "int64"});
+ Int8Type = universe.DefineType("int8", universePos, &intType{commonType{}, 8, "int8"})
+ Int16Type = universe.DefineType("int16", universePos, &intType{commonType{}, 16, "int16"})
+ Int32Type = universe.DefineType("int32", universePos, &intType{commonType{}, 32, "int32"})
+ Int64Type = universe.DefineType("int64", universePos, &intType{commonType{}, 64, "int64"})
- IntType = universe.DefineType("int", universePos, &intType{commonType{}, 0, "int"});
+ IntType = universe.DefineType("int", universePos, &intType{commonType{}, 0, "int"})
)
func (t *intType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*intType);
- return ok && t == t2;
+ t2, ok := o.lit().(*intType)
+ return ok && t == t2
}
-func (t *intType) lit() Type { return t }
+func (t *intType) lit() Type { return t }
-func (t *intType) isInteger() bool { return true }
+func (t *intType) isInteger() bool { return true }
-func (t *intType) String() string { return "<" + t.name + ">" }
+func (t *intType) String() string { return "<" + t.name + ">" }
func (t *intType) Zero() Value {
switch t.Bits {
case 8:
- res := int8V(0);
- return &res;
+ res := int8V(0)
+ return &res
case 16:
- res := int16V(0);
- return &res;
+ res := int16V(0)
+ return &res
case 32:
- res := int32V(0);
- return &res;
+ res := int32V(0)
+ return &res
case 64:
- res := int64V(0);
- return &res;
+ res := int64V(0)
+ return &res
case 0:
- res := intV(0);
- return &res;
+ res := intV(0)
+ return &res
}
- panic("unexpected int bit count: ", t.Bits);
+ panic("unexpected int bit count: ", t.Bits)
}
func (t *intType) minVal() *bignum.Rational {
- bits := t.Bits;
+ bits := t.Bits
if bits == 0 {
bits = uint(8 * unsafe.Sizeof(int(0)))
}
- return bignum.MakeRat(bignum.Int(-1).Shl(bits-1), bignum.Nat(1));
+ return bignum.MakeRat(bignum.Int(-1).Shl(bits-1), bignum.Nat(1))
}
func (t *intType) maxVal() *bignum.Rational {
- bits := t.Bits;
+ bits := t.Bits
if bits == 0 {
bits = uint(8 * unsafe.Sizeof(int(0)))
}
- return bignum.MakeRat(bignum.Int(1).Shl(bits-1).Add(bignum.Int(-1)), bignum.Nat(1));
+ return bignum.MakeRat(bignum.Int(1).Shl(bits-1).Add(bignum.Int(-1)), bignum.Nat(1))
}
/*
@@ -328,69 +328,69 @@ func (t *intType) maxVal() *bignum.Rational {
*/
type idealIntType struct {
- commonType;
+ commonType
}
var IdealIntType Type = &idealIntType{}
func (t *idealIntType) compat(o Type, conv bool) bool {
- _, ok := o.lit().(*idealIntType);
- return ok;
+ _, ok := o.lit().(*idealIntType)
+ return ok
}
-func (t *idealIntType) lit() Type { return t }
+func (t *idealIntType) lit() Type { return t }
-func (t *idealIntType) isInteger() bool { return true }
+func (t *idealIntType) isInteger() bool { return true }
-func (t *idealIntType) isIdeal() bool { return true }
+func (t *idealIntType) isIdeal() bool { return true }
-func (t *idealIntType) String() string { return "ideal integer" }
+func (t *idealIntType) String() string { return "ideal integer" }
-func (t *idealIntType) Zero() Value { return &idealIntV{bignum.Int(0)} }
+func (t *idealIntType) Zero() Value { return &idealIntV{bignum.Int(0)} }
/*
* Float
*/
type floatType struct {
- commonType;
+ commonType
// 0 for architecture-dependent type
- Bits uint;
+ Bits uint
- name string;
+ name string
}
var (
- Float32Type = universe.DefineType("float32", universePos, &floatType{commonType{}, 32, "float32"});
- Float64Type = universe.DefineType("float64", universePos, &floatType{commonType{}, 64, "float64"});
- FloatType = universe.DefineType("float", universePos, &floatType{commonType{}, 0, "float"});
+ Float32Type = universe.DefineType("float32", universePos, &floatType{commonType{}, 32, "float32"})
+ Float64Type = universe.DefineType("float64", universePos, &floatType{commonType{}, 64, "float64"})
+ FloatType = universe.DefineType("float", universePos, &floatType{commonType{}, 0, "float"})
)
func (t *floatType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*floatType);
- return ok && t == t2;
+ t2, ok := o.lit().(*floatType)
+ return ok && t == t2
}
-func (t *floatType) lit() Type { return t }
+func (t *floatType) lit() Type { return t }
-func (t *floatType) isFloat() bool { return true }
+func (t *floatType) isFloat() bool { return true }
-func (t *floatType) String() string { return "<" + t.name + ">" }
+func (t *floatType) String() string { return "<" + t.name + ">" }
func (t *floatType) Zero() Value {
switch t.Bits {
case 32:
- res := float32V(0);
- return &res;
+ res := float32V(0)
+ return &res
case 64:
- res := float64V(0);
- return &res;
+ res := float64V(0)
+ return &res
case 0:
- res := floatV(0);
- return &res;
+ res := floatV(0)
+ return &res
}
- panic("unexpected float bit count: ", t.Bits);
+ panic("unexpected float bit count: ", t.Bits)
}
var maxFloat32Val = bignum.MakeRat(bignum.Int(0xffffff).Shl(127-23), bignum.Nat(1))
@@ -399,7 +399,7 @@ var minFloat32Val = maxFloat32Val.Neg()
var minFloat64Val = maxFloat64Val.Neg()
func (t *floatType) minVal() *bignum.Rational {
- bits := t.Bits;
+ bits := t.Bits
if bits == 0 {
bits = uint(8 * unsafe.Sizeof(float(0)))
}
@@ -409,12 +409,12 @@ func (t *floatType) minVal() *bignum.Rational {
case 64:
return minFloat64Val
}
- log.Crashf("unexpected floating point bit count: %d", bits);
- panic();
+ log.Crashf("unexpected floating point bit count: %d", bits)
+ panic()
}
func (t *floatType) maxVal() *bignum.Rational {
- bits := t.Bits;
+ bits := t.Bits
if bits == 0 {
bits = uint(8 * unsafe.Sizeof(float(0)))
}
@@ -424,8 +424,8 @@ func (t *floatType) maxVal() *bignum.Rational {
case 64:
return maxFloat64Val
}
- log.Crashf("unexpected floating point bit count: %d", bits);
- panic();
+ log.Crashf("unexpected floating point bit count: %d", bits)
+ panic()
}
/*
@@ -433,48 +433,48 @@ func (t *floatType) maxVal() *bignum.Rational {
*/
type idealFloatType struct {
- commonType;
+ commonType
}
var IdealFloatType Type = &idealFloatType{}
func (t *idealFloatType) compat(o Type, conv bool) bool {
- _, ok := o.lit().(*idealFloatType);
- return ok;
+ _, ok := o.lit().(*idealFloatType)
+ return ok
}
-func (t *idealFloatType) lit() Type { return t }
+func (t *idealFloatType) lit() Type { return t }
-func (t *idealFloatType) isFloat() bool { return true }
+func (t *idealFloatType) isFloat() bool { return true }
-func (t *idealFloatType) isIdeal() bool { return true }
+func (t *idealFloatType) isIdeal() bool { return true }
-func (t *idealFloatType) String() string { return "ideal float" }
+func (t *idealFloatType) String() string { return "ideal float" }
-func (t *idealFloatType) Zero() Value { return &idealFloatV{bignum.Rat(1, 0)} }
+func (t *idealFloatType) Zero() Value { return &idealFloatV{bignum.Rat(1, 0)} }
/*
* String
*/
type stringType struct {
- commonType;
+ commonType
}
var StringType = universe.DefineType("string", universePos, &stringType{})
func (t *stringType) compat(o Type, conv bool) bool {
- _, ok := o.lit().(*stringType);
- return ok;
+ _, ok := o.lit().(*stringType)
+ return ok
}
-func (t *stringType) lit() Type { return t }
+func (t *stringType) lit() Type { return t }
-func (t *stringType) String() string { return "<string>" }
+func (t *stringType) String() string { return "<string>" }
func (t *stringType) Zero() Value {
- res := stringV("");
- return &res;
+ res := stringV("")
+ return &res
}
/*
@@ -482,9 +482,9 @@ func (t *stringType) Zero() Value {
*/
type ArrayType struct {
- commonType;
- Len int64;
- Elem Type;
+ commonType
+ Len int64
+ Elem Type
}
var arrayTypes = make(map[int64]map[Type]*ArrayType)
@@ -493,33 +493,33 @@ var arrayTypes = make(map[int64]map[Type]*ArrayType)
// and the same array length.
func NewArrayType(len int64, elem Type) *ArrayType {
- ts, ok := arrayTypes[len];
+ ts, ok := arrayTypes[len]
if !ok {
- ts = make(map[Type]*ArrayType);
- arrayTypes[len] = ts;
+ ts = make(map[Type]*ArrayType)
+ arrayTypes[len] = ts
}
- t, ok := ts[elem];
+ t, ok := ts[elem]
if !ok {
- t = &ArrayType{commonType{}, len, elem};
- ts[elem] = t;
+ t = &ArrayType{commonType{}, len, elem}
+ ts[elem] = t
}
- return t;
+ return t
}
func (t *ArrayType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*ArrayType);
+ t2, ok := o.lit().(*ArrayType)
if !ok {
return false
}
- return t.Len == t2.Len && t.Elem.compat(t2.Elem, conv);
+ return t.Len == t2.Len && t.Elem.compat(t2.Elem, conv)
}
-func (t *ArrayType) lit() Type { return t }
+func (t *ArrayType) lit() Type { return t }
-func (t *ArrayType) String() string { return "[]" + t.Elem.String() }
+func (t *ArrayType) String() string { return "[]" + t.Elem.String() }
func (t *ArrayType) Zero() Value {
- res := arrayV(make([]Value, t.Len));
+ res := arrayV(make([]Value, t.Len))
// TODO(austin) It's unfortunate that each element is
// separately heap allocated. We could add ZeroArray to
// everything, though that doesn't help with multidimensional
@@ -528,7 +528,7 @@ func (t *ArrayType) Zero() Value {
for i := int64(0); i < t.Len; i++ {
res[i] = t.Elem.Zero()
}
- return &res;
+ return &res
}
/*
@@ -536,14 +536,14 @@ func (t *ArrayType) Zero() Value {
*/
type StructField struct {
- Name string;
- Type Type;
- Anonymous bool;
+ Name string
+ Type Type
+ Anonymous bool
}
type StructType struct {
- commonType;
- Elems []StructField;
+ commonType
+ Elems []StructField
}
var structTypes = newTypeArrayMap()
@@ -555,18 +555,18 @@ var structTypes = newTypeArrayMap()
func NewStructType(fields []StructField) *StructType {
// Start by looking up just the types
- fts := make([]Type, len(fields));
+ fts := make([]Type, len(fields))
for i, f := range fields {
fts[i] = f.Type
}
- tMapI := structTypes.Get(fts);
+ tMapI := structTypes.Get(fts)
if tMapI == nil {
tMapI = structTypes.Put(fts, make(map[string]*StructType))
}
- tMap := tMapI.(map[string]*StructType);
+ tMap := tMapI.(map[string]*StructType)
// Construct key for field names
- key := "";
+ key := ""
for _, f := range fields {
// XXX(Spec) It's not clear if struct { T } and struct
// { T T } are either identical or compatible. The
@@ -579,7 +579,7 @@ func NewStructType(fields []StructField) *StructType {
if f.Anonymous {
key += "!"
}
- key += f.Name + " ";
+ key += f.Name + " "
}
// XXX(Spec) Do the tags also have to be identical for the
@@ -587,17 +587,17 @@ func NewStructType(fields []StructField) *StructType {
// otherwise, this is the only case where two distinct type
// objects can represent identical types.
- t, ok := tMap[key];
+ t, ok := tMap[key]
if !ok {
// Create new struct type
- t = &StructType{commonType{}, fields};
- tMap[key] = t;
+ t = &StructType{commonType{}, fields}
+ tMap[key] = t
}
- return t;
+ return t
}
func (t *StructType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*StructType);
+ t2, ok := o.lit().(*StructType)
if !ok {
return false
}
@@ -605,7 +605,7 @@ func (t *StructType) compat(o Type, conv bool) bool {
return false
}
for i, e := range t.Elems {
- e2 := t2.Elems[i];
+ e2 := t2.Elems[i]
// XXX(Spec) An anonymous and a non-anonymous field
// are neither identical nor compatible.
if e.Anonymous != e2.Anonymous ||
@@ -614,13 +614,13 @@ func (t *StructType) compat(o Type, conv bool) bool {
return false
}
}
- return true;
+ return true
}
-func (t *StructType) lit() Type { return t }
+func (t *StructType) lit() Type { return t }
func (t *StructType) String() string {
- s := "struct {";
+ s := "struct {"
for i, f := range t.Elems {
if i > 0 {
s += "; "
@@ -628,17 +628,17 @@ func (t *StructType) String() string {
if !f.Anonymous {
s += f.Name + " "
}
- s += f.Type.String();
+ s += f.Type.String()
}
- return s + "}";
+ return s + "}"
}
func (t *StructType) Zero() Value {
- res := structV(make([]Value, len(t.Elems)));
+ res := structV(make([]Value, len(t.Elems)))
for i, f := range t.Elems {
res[i] = f.Type.Zero()
}
- return &res;
+ return &res
}
/*
@@ -646,8 +646,8 @@ func (t *StructType) Zero() Value {
*/
type PtrType struct {
- commonType;
- Elem Type;
+ commonType
+ Elem Type
}
var ptrTypes = make(map[Type]*PtrType)
@@ -655,39 +655,39 @@ var ptrTypes = make(map[Type]*PtrType)
// Two pointer types are identical if they have identical base types.
func NewPtrType(elem Type) *PtrType {
- t, ok := ptrTypes[elem];
+ t, ok := ptrTypes[elem]
if !ok {
- t = &PtrType{commonType{}, elem};
- ptrTypes[elem] = t;
+ t = &PtrType{commonType{}, elem}
+ ptrTypes[elem] = t
}
- return t;
+ return t
}
func (t *PtrType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*PtrType);
+ t2, ok := o.lit().(*PtrType)
if !ok {
return false
}
- return t.Elem.compat(t2.Elem, conv);
+ return t.Elem.compat(t2.Elem, conv)
}
-func (t *PtrType) lit() Type { return t }
+func (t *PtrType) lit() Type { return t }
-func (t *PtrType) String() string { return "*" + t.Elem.String() }
+func (t *PtrType) String() string { return "*" + t.Elem.String() }
-func (t *PtrType) Zero() Value { return &ptrV{nil} }
+func (t *PtrType) Zero() Value { return &ptrV{nil} }
/*
* Function
*/
type FuncType struct {
- commonType;
+ commonType
// TODO(austin) Separate receiver Type for methods?
- In []Type;
- Variadic bool;
- Out []Type;
- builtin string;
+ In []Type
+ Variadic bool
+ Out []Type
+ builtin string
}
var funcTypes = newTypeArrayMap()
@@ -695,16 +695,16 @@ var variadicFuncTypes = newTypeArrayMap()
// Create singleton function types for magic built-in functions
var (
- capType = &FuncType{builtin: "cap"};
- closeType = &FuncType{builtin: "close"};
- closedType = &FuncType{builtin: "closed"};
- lenType = &FuncType{builtin: "len"};
- makeType = &FuncType{builtin: "make"};
- newType = &FuncType{builtin: "new"};
- panicType = &FuncType{builtin: "panic"};
- paniclnType = &FuncType{builtin: "panicln"};
- printType = &FuncType{builtin: "print"};
- printlnType = &FuncType{builtin: "println"};
+ capType = &FuncType{builtin: "cap"}
+ closeType = &FuncType{builtin: "close"}
+ closedType = &FuncType{builtin: "closed"}
+ lenType = &FuncType{builtin: "len"}
+ makeType = &FuncType{builtin: "make"}
+ newType = &FuncType{builtin: "new"}
+ panicType = &FuncType{builtin: "panic"}
+ paniclnType = &FuncType{builtin: "panicln"}
+ printType = &FuncType{builtin: "print"}
+ printlnType = &FuncType{builtin: "println"}
)
// Two function types are identical if they have the same number of
@@ -713,29 +713,29 @@ var (
// type. Parameter and result names are not required to match.
func NewFuncType(in []Type, variadic bool, out []Type) *FuncType {
- inMap := funcTypes;
+ inMap := funcTypes
if variadic {
inMap = variadicFuncTypes
}
- outMapI := inMap.Get(in);
+ outMapI := inMap.Get(in)
if outMapI == nil {
outMapI = inMap.Put(in, newTypeArrayMap())
}
- outMap := outMapI.(typeArrayMap);
+ outMap := outMapI.(typeArrayMap)
- tI := outMap.Get(out);
+ tI := outMap.Get(out)
if tI != nil {
return tI.(*FuncType)
}
- t := &FuncType{commonType{}, in, variadic, out, ""};
- outMap.Put(out, t);
- return t;
+ t := &FuncType{commonType{}, in, variadic, out, ""}
+ outMap.Put(out, t)
+ return t
}
func (t *FuncType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*FuncType);
+ t2, ok := o.lit().(*FuncType)
if !ok {
return false
}
@@ -752,13 +752,13 @@ func (t *FuncType) compat(o Type, conv bool) bool {
return false
}
}
- return true;
+ return true
}
-func (t *FuncType) lit() Type { return t }
+func (t *FuncType) lit() Type { return t }
func typeListString(ts []Type, ns []*ast.Ident) string {
- s := "";
+ s := ""
for i, t := range ts {
if i > 0 {
s += ", "
@@ -773,61 +773,61 @@ func typeListString(ts []Type, ns []*ast.Ident) string {
s += t.String()
}
}
- return s;
+ return s
}
func (t *FuncType) String() string {
if t.builtin != "" {
return "built-in function " + t.builtin
}
- args := typeListString(t.In, nil);
+ args := typeListString(t.In, nil)
if t.Variadic {
if len(args) > 0 {
args += ", "
}
- args += "...";
+ args += "..."
}
- s := "func(" + args + ")";
+ s := "func(" + args + ")"
if len(t.Out) > 0 {
s += " (" + typeListString(t.Out, nil) + ")"
}
- return s;
+ return s
}
-func (t *FuncType) Zero() Value { return &funcV{nil} }
+func (t *FuncType) Zero() Value { return &funcV{nil} }
type FuncDecl struct {
- Type *FuncType;
- Name *ast.Ident; // nil for function literals
+ Type *FuncType
+ Name *ast.Ident // nil for function literals
// InNames will be one longer than Type.In if this function is
// variadic.
- InNames []*ast.Ident;
- OutNames []*ast.Ident;
+ InNames []*ast.Ident
+ OutNames []*ast.Ident
}
func (t *FuncDecl) String() string {
- s := "func";
+ s := "func"
if t.Name != nil {
s += " " + t.Name.Value
}
- s += funcTypeString(t.Type, t.InNames, t.OutNames);
- return s;
+ s += funcTypeString(t.Type, t.InNames, t.OutNames)
+ return s
}
func funcTypeString(ft *FuncType, ins []*ast.Ident, outs []*ast.Ident) string {
- s := "(";
- s += typeListString(ft.In, ins);
+ s := "("
+ s += typeListString(ft.In, ins)
if ft.Variadic {
if len(ft.In) > 0 {
s += ", "
}
- s += "...";
+ s += "..."
}
- s += ")";
+ s += ")"
if len(ft.Out) > 0 {
s += " (" + typeListString(ft.Out, outs) + ")"
}
- return s;
+ return s
}
/*
@@ -839,76 +839,76 @@ func funcTypeString(ft *FuncType, ins []*ast.Ident, outs []*ast.Ident) string {
// interfaces are.
type InterfaceType struct {
- commonType;
+ commonType
// TODO(austin) This should be a map from names to
// *FuncType's. We only need the sorted list for generating
// the type map key. It's detrimental for everything else.
- methods []IMethod;
+ methods []IMethod
}
type IMethod struct {
- Name string;
- Type *FuncType;
+ Name string
+ Type *FuncType
}
var interfaceTypes = newTypeArrayMap()
func NewInterfaceType(methods []IMethod, embeds []*InterfaceType) *InterfaceType {
// Count methods of embedded interfaces
- nMethods := len(methods);
+ nMethods := len(methods)
for _, e := range embeds {
nMethods += len(e.methods)
}
// Combine methods
- allMethods := make([]IMethod, nMethods);
+ allMethods := make([]IMethod, nMethods)
for i, m := range methods {
allMethods[i] = m
}
- n := len(methods);
+ n := len(methods)
for _, e := range embeds {
for _, m := range e.methods {
- allMethods[n] = m;
- n++;
+ allMethods[n] = m
+ n++
}
}
// Sort methods
- sort.Sort(iMethodSorter(allMethods));
+ sort.Sort(iMethodSorter(allMethods))
- mts := make([]Type, len(allMethods));
+ mts := make([]Type, len(allMethods))
for i, m := range methods {
mts[i] = m.Type
}
- tMapI := interfaceTypes.Get(mts);
+ tMapI := interfaceTypes.Get(mts)
if tMapI == nil {
tMapI = interfaceTypes.Put(mts, make(map[string]*InterfaceType))
}
- tMap := tMapI.(map[string]*InterfaceType);
+ tMap := tMapI.(map[string]*InterfaceType)
- key := "";
+ key := ""
for _, m := range allMethods {
key += m.Name + " "
}
- t, ok := tMap[key];
+ t, ok := tMap[key]
if !ok {
- t = &InterfaceType{commonType{}, allMethods};
- tMap[key] = t;
+ t = &InterfaceType{commonType{}, allMethods}
+ tMap[key] = t
}
- return t;
+ return t
}
type iMethodSorter []IMethod
-func (s iMethodSorter) Less(a, b int) bool { return s[a].Name < s[b].Name }
+func (s iMethodSorter) Less(a, b int) bool { return s[a].Name < s[b].Name }
-func (s iMethodSorter) Swap(a, b int) { s[a], s[b] = s[b], s[a] }
+func (s iMethodSorter) Swap(a, b int) { s[a], s[b] = s[b], s[a] }
-func (s iMethodSorter) Len() int { return len(s) }
+func (s iMethodSorter) Len() int { return len(s) }
func (t *InterfaceType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*InterfaceType);
+ t2, ok := o.lit().(*InterfaceType)
if !ok {
return false
}
@@ -916,27 +916,27 @@ func (t *InterfaceType) compat(o Type, conv bool) bool {
return false
}
for i, e := range t.methods {
- e2 := t2.methods[i];
+ e2 := t2.methods[i]
if e.Name != e2.Name || !e.Type.compat(e2.Type, conv) {
return false
}
}
- return true;
+ return true
}
-func (t *InterfaceType) lit() Type { return t }
+func (t *InterfaceType) lit() Type { return t }
func (t *InterfaceType) String() string {
// TODO(austin) Instead of showing embedded interfaces, this
// shows their methods.
- s := "interface {";
+ s := "interface {"
for i, m := range t.methods {
if i > 0 {
s += "; "
}
- s += m.Name + funcTypeString(m.Type, nil, nil);
+ s += m.Name + funcTypeString(m.Type, nil, nil)
}
- return s + "}";
+ return s + "}"
}
// implementedBy tests if o implements t, returning nil, true if it does.
@@ -960,24 +960,24 @@ func (t *InterfaceType) implementedBy(o Type) (*IMethod, bool) {
switch o := o.(type) {
case *NamedType:
for _, tm := range t.methods {
- sm, ok := o.methods[tm.Name];
+ sm, ok := o.methods[tm.Name]
if !ok || sm.decl.Type != tm.Type {
return &tm, false
}
}
- return nil, true;
+ return nil, true
case *InterfaceType:
- var ti, oi int;
+ var ti, oi int
for ti < len(t.methods) && oi < len(o.methods) {
- tm, om := &t.methods[ti], &o.methods[oi];
+ tm, om := &t.methods[ti], &o.methods[oi]
switch {
case tm.Name == om.Name:
if tm.Type != om.Type {
return tm, false
}
- ti++;
- oi++;
+ ti++
+ oi++
case tm.Name > om.Name:
oi++
default:
@@ -987,21 +987,21 @@ func (t *InterfaceType) implementedBy(o Type) (*IMethod, bool) {
if ti < len(t.methods) {
return &t.methods[ti], false
}
- return nil, true;
+ return nil, true
}
- return &t.methods[0], false;
+ return &t.methods[0], false
}
-func (t *InterfaceType) Zero() Value { return &interfaceV{} }
+func (t *InterfaceType) Zero() Value { return &interfaceV{} }
/*
* Slice
*/
type SliceType struct {
- commonType;
- Elem Type;
+ commonType
+ Elem Type
}
var sliceTypes = make(map[Type]*SliceType)
@@ -1009,25 +1009,25 @@ var sliceTypes = make(map[Type]*SliceType)
// Two slice types are identical if they have identical element types.
func NewSliceType(elem Type) *SliceType {
- t, ok := sliceTypes[elem];
+ t, ok := sliceTypes[elem]
if !ok {
- t = &SliceType{commonType{}, elem};
- sliceTypes[elem] = t;
+ t = &SliceType{commonType{}, elem}
+ sliceTypes[elem] = t
}
- return t;
+ return t
}
func (t *SliceType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*SliceType);
+ t2, ok := o.lit().(*SliceType)
if !ok {
return false
}
- return t.Elem.compat(t2.Elem, conv);
+ return t.Elem.compat(t2.Elem, conv)
}
-func (t *SliceType) lit() Type { return t }
+func (t *SliceType) lit() Type { return t }
-func (t *SliceType) String() string { return "[]" + t.Elem.String() }
+func (t *SliceType) String() string { return "[]" + t.Elem.String() }
func (t *SliceType) Zero() Value {
// The value of an uninitialized slice is nil. The length and
@@ -1040,38 +1040,38 @@ func (t *SliceType) Zero() Value {
*/
type MapType struct {
- commonType;
- Key Type;
- Elem Type;
+ commonType
+ Key Type
+ Elem Type
}
var mapTypes = make(map[Type]map[Type]*MapType)
func NewMapType(key Type, elem Type) *MapType {
- ts, ok := mapTypes[key];
+ ts, ok := mapTypes[key]
if !ok {
- ts = make(map[Type]*MapType);
- mapTypes[key] = ts;
+ ts = make(map[Type]*MapType)
+ mapTypes[key] = ts
}
- t, ok := ts[elem];
+ t, ok := ts[elem]
if !ok {
- t = &MapType{commonType{}, key, elem};
- ts[elem] = t;
+ t = &MapType{commonType{}, key, elem}
+ ts[elem] = t
}
- return t;
+ return t
}
func (t *MapType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*MapType);
+ t2, ok := o.lit().(*MapType)
if !ok {
return false
}
- return t.Elem.compat(t2.Elem, conv) && t.Key.compat(t2.Key, conv);
+ return t.Elem.compat(t2.Elem, conv) && t.Key.compat(t2.Key, conv)
}
-func (t *MapType) lit() Type { return t }
+func (t *MapType) lit() Type { return t }
-func (t *MapType) String() string { return "map[" + t.Key.String() + "] " + t.Elem.String() }
+func (t *MapType) String() string { return "map[" + t.Key.String() + "] " + t.Elem.String() }
func (t *MapType) Zero() Value {
// The value of an uninitialized map is nil.
@@ -1089,20 +1089,20 @@ type ChanType struct {
*/
type Method struct {
- decl *FuncDecl;
- fn Func;
+ decl *FuncDecl
+ fn Func
}
type NamedType struct {
- token.Position;
- Name string;
+ token.Position
+ Name string
// Underlying type. If incomplete is true, this will be nil.
// If incomplete is false and this is still nil, then this is
// a placeholder type representing an error.
- Def Type;
+ Def Type
// True while this type is being defined.
- incomplete bool;
- methods map[string]Method;
+ incomplete bool
+ methods map[string]Method
}
// TODO(austin) This is temporarily needed by the debugger's remote
@@ -1120,12 +1120,12 @@ func (t *NamedType) Complete(def Type) {
if ndef, ok := def.(*NamedType); ok {
def = ndef.Def
}
- t.Def = def;
- t.incomplete = false;
+ t.Def = def
+ t.incomplete = false
}
func (t *NamedType) compat(o Type, conv bool) bool {
- t2, ok := o.(*NamedType);
+ t2, ok := o.(*NamedType)
if ok {
if conv {
// Two named types are conversion compatible
@@ -1141,22 +1141,22 @@ func (t *NamedType) compat(o Type, conv bool) bool {
}
// A named and an unnamed type are compatible if the
// respective type literals are compatible.
- return o.compat(t.Def, conv);
+ return o.compat(t.Def, conv)
}
-func (t *NamedType) lit() Type { return t.Def.lit() }
+func (t *NamedType) lit() Type { return t.Def.lit() }
-func (t *NamedType) isBoolean() bool { return t.Def.isBoolean() }
+func (t *NamedType) isBoolean() bool { return t.Def.isBoolean() }
-func (t *NamedType) isInteger() bool { return t.Def.isInteger() }
+func (t *NamedType) isInteger() bool { return t.Def.isInteger() }
-func (t *NamedType) isFloat() bool { return t.Def.isFloat() }
+func (t *NamedType) isFloat() bool { return t.Def.isFloat() }
-func (t *NamedType) isIdeal() bool { return false }
+func (t *NamedType) isIdeal() bool { return false }
-func (t *NamedType) String() string { return t.Name }
+func (t *NamedType) String() string { return t.Name }
-func (t *NamedType) Zero() Value { return t.Def.Zero() }
+func (t *NamedType) Zero() Value { return t.Def.Zero() }
/*
* Multi-valued type
@@ -1166,8 +1166,8 @@ func (t *NamedType) Zero() Value { return t.Def.Zero() }
// to a tuple type. It's not generally accessible within the
// language.
type MultiType struct {
- commonType;
- Elems []Type;
+ commonType
+ Elems []Type
}
var multiTypes = newTypeArrayMap()
@@ -1177,13 +1177,13 @@ func NewMultiType(elems []Type) *MultiType {
return t.(*MultiType)
}
- t := &MultiType{commonType{}, elems};
- multiTypes.Put(elems, t);
- return t;
+ t := &MultiType{commonType{}, elems}
+ multiTypes.Put(elems, t)
+ return t
}
func (t *MultiType) compat(o Type, conv bool) bool {
- t2, ok := o.lit().(*MultiType);
+ t2, ok := o.lit().(*MultiType)
if !ok {
return false
}
@@ -1195,26 +1195,26 @@ func (t *MultiType) compat(o Type, conv bool) bool {
return false
}
}
- return true;
+ return true
}
var EmptyType Type = NewMultiType([]Type{})
-func (t *MultiType) lit() Type { return t }
+func (t *MultiType) lit() Type { return t }
func (t *MultiType) String() string {
if len(t.Elems) == 0 {
return "<none>"
}
- return typeListString(t.Elems, nil);
+ return typeListString(t.Elems, nil)
}
func (t *MultiType) Zero() Value {
- res := make([]Value, len(t.Elems));
+ res := make([]Value, len(t.Elems))
for i, t := range t.Elems {
res[i] = t.Zero()
}
- return multiV(res);
+ return multiV(res)
}
/*
@@ -1227,17 +1227,17 @@ func init() {
// Make byte an alias for the named type uint8. Type aliases
// are otherwise impossible in Go, so just hack it here.
- universe.defs["byte"] = universe.defs["uint8"];
+ universe.defs["byte"] = universe.defs["uint8"]
// Built-in functions
- universe.DefineConst("cap", universePos, capType, nil);
- universe.DefineConst("close", universePos, closeType, nil);
- universe.DefineConst("closed", universePos, closedType, nil);
- universe.DefineConst("len", universePos, lenType, nil);
- universe.DefineConst("make", universePos, makeType, nil);
- universe.DefineConst("new", universePos, newType, nil);
- universe.DefineConst("panic", universePos, panicType, nil);
- universe.DefineConst("panicln", universePos, paniclnType, nil);
- universe.DefineConst("print", universePos, printType, nil);
- universe.DefineConst("println", universePos, printlnType, nil);
+ universe.DefineConst("cap", universePos, capType, nil)
+ universe.DefineConst("close", universePos, closeType, nil)
+ universe.DefineConst("closed", universePos, closedType, nil)
+ universe.DefineConst("len", universePos, lenType, nil)
+ universe.DefineConst("make", universePos, makeType, nil)
+ universe.DefineConst("new", universePos, newType, nil)
+ universe.DefineConst("panic", universePos, panicType, nil)
+ universe.DefineConst("panicln", universePos, paniclnType, nil)
+ universe.DefineConst("print", universePos, printType, nil)
+ universe.DefineConst("println", universePos, printlnType, nil)
}
diff --git a/src/pkg/exp/eval/typec.go b/src/pkg/exp/eval/typec.go
index a2823b40d..b4bc09a82 100644
--- a/src/pkg/exp/eval/typec.go
+++ b/src/pkg/exp/eval/typec.go
@@ -5,9 +5,9 @@
package eval
import (
- "go/ast";
- "go/token";
- "log";
+ "go/ast"
+ "go/token"
+ "log"
)
@@ -16,78 +16,78 @@ import (
*/
type typeCompiler struct {
- *compiler;
- block *block;
+ *compiler
+ block *block
// Check to be performed after a type declaration is compiled.
//
// TODO(austin) This will probably have to change after we
// eliminate forward declarations.
- lateCheck func() bool;
+ lateCheck func() bool
}
func (a *typeCompiler) compileIdent(x *ast.Ident, allowRec bool) Type {
- _, _, def := a.block.Lookup(x.Value);
+ _, _, def := a.block.Lookup(x.Value)
if def == nil {
- a.diagAt(x, "%s: undefined", x.Value);
- return nil;
+ a.diagAt(x, "%s: undefined", x.Value)
+ return nil
}
switch def := def.(type) {
case *Constant:
- a.diagAt(x, "constant %v used as type", x.Value);
- return nil;
+ a.diagAt(x, "constant %v used as type", x.Value)
+ return nil
case *Variable:
- a.diagAt(x, "variable %v used as type", x.Value);
- return nil;
+ a.diagAt(x, "variable %v used as type", x.Value)
+ return nil
case *NamedType:
if !allowRec && def.incomplete {
- a.diagAt(x, "illegal recursive type");
- return nil;
+ a.diagAt(x, "illegal recursive type")
+ return nil
}
if !def.incomplete && def.Def == nil {
// Placeholder type from an earlier error
return nil
}
- return def;
+ return def
case Type:
return def
}
- log.Crashf("name %s has unknown type %T", x.Value, def);
- return nil;
+ log.Crashf("name %s has unknown type %T", x.Value, def)
+ return nil
}
func (a *typeCompiler) compileArrayType(x *ast.ArrayType, allowRec bool) Type {
// Compile element type
- elem := a.compileType(x.Elt, allowRec);
+ elem := a.compileType(x.Elt, allowRec)
// Compile length expression
if x.Len == nil {
if elem == nil {
return nil
}
- return NewSliceType(elem);
+ return NewSliceType(elem)
}
if _, ok := x.Len.(*ast.Ellipsis); ok {
- a.diagAt(x.Len, "... array initailizers not implemented");
- return nil;
+ a.diagAt(x.Len, "... array initailizers not implemented")
+ return nil
}
- l, ok := a.compileArrayLen(a.block, x.Len);
+ l, ok := a.compileArrayLen(a.block, x.Len)
if !ok {
return nil
}
if l < 0 {
- a.diagAt(x.Len, "array length must be non-negative");
- return nil;
+ a.diagAt(x.Len, "array length must be non-negative")
+ return nil
}
if elem == nil {
return nil
}
- return NewArrayType(l, elem);
+ return NewArrayType(l, elem)
}
func countFields(fs []*ast.Field) int {
- n := 0;
+ n := 0
for _, f := range fs {
if f.Names == nil {
n++
@@ -95,42 +95,42 @@ func countFields(fs []*ast.Field) int {
n += len(f.Names)
}
}
- return n;
+ return n
}
func (a *typeCompiler) compileFields(fs []*ast.Field, allowRec bool) ([]Type, []*ast.Ident, []token.Position, bool) {
- n := countFields(fs);
- ts := make([]Type, n);
- ns := make([]*ast.Ident, n);
- ps := make([]token.Position, n);
+ n := countFields(fs)
+ ts := make([]Type, n)
+ ns := make([]*ast.Ident, n)
+ ps := make([]token.Position, n)
- bad := false;
- i := 0;
+ bad := false
+ i := 0
for _, f := range fs {
- t := a.compileType(f.Type, allowRec);
+ t := a.compileType(f.Type, allowRec)
if t == nil {
bad = true
}
if f.Names == nil {
- ns[i] = nil;
- ts[i] = t;
- ps[i] = f.Type.Pos();
- i++;
- continue;
+ ns[i] = nil
+ ts[i] = t
+ ps[i] = f.Type.Pos()
+ i++
+ continue
}
for _, n := range f.Names {
- ns[i] = n;
- ts[i] = t;
- ps[i] = n.Pos();
- i++;
+ ns[i] = n
+ ts[i] = t
+ ps[i] = n.Pos()
+ i++
}
}
- return ts, ns, ps, bad;
+ return ts, ns, ps, bad
}
func (a *typeCompiler) compileStructType(x *ast.StructType, allowRec bool) Type {
- ts, names, poss, bad := a.compileFields(x.Fields, allowRec);
+ ts, names, poss, bad := a.compileFields(x.Fields, allowRec)
// XXX(Spec) The spec claims that field identifiers must be
// unique, but 6g only checks this when they are accessed. I
@@ -141,11 +141,11 @@ func (a *typeCompiler) compileStructType(x *ast.StructType, allowRec bool) Type
// There's separate language in the spec about checking
// uniqueness of field names inherited from anonymous fields
// at use time.
- fields := make([]StructField, len(ts));
- nameSet := make(map[string]token.Position, len(ts));
+ fields := make([]StructField, len(ts))
+ nameSet := make(map[string]token.Position, len(ts))
for i := range fields {
// Compute field name and check anonymous fields
- var name string;
+ var name string
if names[i] != nil {
name = names[i].Value
} else {
@@ -153,18 +153,18 @@ func (a *typeCompiler) compileStructType(x *ast.StructType, allowRec bool) Type
continue
}
- var nt *NamedType;
+ var nt *NamedType
// [For anonymous fields,] the unqualified
// type name acts as the field identifier.
switch t := ts[i].(type) {
case *NamedType:
- name = t.Name;
- nt = t;
+ name = t.Name
+ nt = t
case *PtrType:
switch t := t.Elem.(type) {
case *NamedType:
- name = t.Name;
- nt = t;
+ name = t.Name
+ nt = t
}
}
// [An anonymous field] must be specified as a
@@ -172,50 +172,50 @@ func (a *typeCompiler) compileStructType(x *ast.StructType, allowRec bool) Type
// *T, and T itself, may not be a pointer or
// interface type.
if nt == nil {
- a.diagAt(&poss[i], "embedded type must T or *T, where T is a named type");
- bad = true;
- continue;
+ a.diagAt(&poss[i], "embedded type must T or *T, where T is a named type")
+ bad = true
+ continue
}
// The check for embedded pointer types must
// be deferred because of things like
// type T *struct { T }
- lateCheck := a.lateCheck;
+ lateCheck := a.lateCheck
a.lateCheck = func() bool {
if _, ok := nt.lit().(*PtrType); ok {
- a.diagAt(&poss[i], "embedded type %v is a pointer type", nt);
- return false;
+ a.diagAt(&poss[i], "embedded type %v is a pointer type", nt)
+ return false
}
- return lateCheck();
- };
+ return lateCheck()
+ }
}
// Check name uniqueness
if prev, ok := nameSet[name]; ok {
- a.diagAt(&poss[i], "field %s redeclared\n\tprevious declaration at %s", name, &prev);
- bad = true;
- continue;
+ a.diagAt(&poss[i], "field %s redeclared\n\tprevious declaration at %s", name, &prev)
+ bad = true
+ continue
}
- nameSet[name] = poss[i];
+ nameSet[name] = poss[i]
// Create field
- fields[i].Name = name;
- fields[i].Type = ts[i];
- fields[i].Anonymous = (names[i] == nil);
+ fields[i].Name = name
+ fields[i].Type = ts[i]
+ fields[i].Anonymous = (names[i] == nil)
}
if bad {
return nil
}
- return NewStructType(fields);
+ return NewStructType(fields)
}
func (a *typeCompiler) compilePtrType(x *ast.StarExpr) Type {
- elem := a.compileType(x.X, true);
+ elem := a.compileType(x.X, true)
if elem == nil {
return nil
}
- return NewPtrType(elem);
+ return NewPtrType(elem)
}
func (a *typeCompiler) compileFuncType(x *ast.FuncType, allowRec bool) *FuncDecl {
@@ -224,56 +224,56 @@ func (a *typeCompiler) compileFuncType(x *ast.FuncType, allowRec bool) *FuncDecl
// The types of parameters and results must be complete.
//
// TODO(austin) It's not clear they actually have to be complete.
- in, inNames, _, inBad := a.compileFields(x.Params, allowRec);
- out, outNames, _, outBad := a.compileFields(x.Results, allowRec);
+ in, inNames, _, inBad := a.compileFields(x.Params, allowRec)
+ out, outNames, _, outBad := a.compileFields(x.Results, allowRec)
if inBad || outBad {
return nil
}
- return &FuncDecl{NewFuncType(in, false, out), nil, inNames, outNames};
+ return &FuncDecl{NewFuncType(in, false, out), nil, inNames, outNames}
}
func (a *typeCompiler) compileInterfaceType(x *ast.InterfaceType, allowRec bool) *InterfaceType {
- ts, names, poss, bad := a.compileFields(x.Methods, allowRec);
+ ts, names, poss, bad := a.compileFields(x.Methods, allowRec)
- methods := make([]IMethod, len(ts));
- nameSet := make(map[string]token.Position, len(ts));
- embeds := make([]*InterfaceType, len(ts));
+ methods := make([]IMethod, len(ts))
+ nameSet := make(map[string]token.Position, len(ts))
+ embeds := make([]*InterfaceType, len(ts))
- var nm, ne int;
+ var nm, ne int
for i := range ts {
if ts[i] == nil {
continue
}
if names[i] != nil {
- name := names[i].Value;
- methods[nm].Name = name;
- methods[nm].Type = ts[i].(*FuncType);
- nm++;
+ name := names[i].Value
+ methods[nm].Name = name
+ methods[nm].Type = ts[i].(*FuncType)
+ nm++
if prev, ok := nameSet[name]; ok {
- a.diagAt(&poss[i], "method %s redeclared\n\tprevious declaration at %s", name, &prev);
- bad = true;
- continue;
+ a.diagAt(&poss[i], "method %s redeclared\n\tprevious declaration at %s", name, &prev)
+ bad = true
+ continue
}
- nameSet[name] = poss[i];
+ nameSet[name] = poss[i]
} else {
// Embedded interface
- it, ok := ts[i].lit().(*InterfaceType);
+ it, ok := ts[i].lit().(*InterfaceType)
if !ok {
- a.diagAt(&poss[i], "embedded type must be an interface");
- bad = true;
- continue;
+ a.diagAt(&poss[i], "embedded type must be an interface")
+ bad = true
+ continue
}
- embeds[ne] = it;
- ne++;
+ embeds[ne] = it
+ ne++
for _, m := range it.methods {
if prev, ok := nameSet[m.Name]; ok {
- a.diagAt(&poss[i], "method %s redeclared\n\tprevious declaration at %s", m.Name, &prev);
- bad = true;
- continue;
+ a.diagAt(&poss[i], "method %s redeclared\n\tprevious declaration at %s", m.Name, &prev)
+ bad = true
+ continue
}
- nameSet[m.Name] = poss[i];
+ nameSet[m.Name] = poss[i]
}
}
}
@@ -282,15 +282,15 @@ func (a *typeCompiler) compileInterfaceType(x *ast.InterfaceType, allowRec bool)
return nil
}
- methods = methods[0:nm];
- embeds = embeds[0:ne];
+ methods = methods[0:nm]
+ embeds = embeds[0:ne]
- return NewInterfaceType(methods, embeds);
+ return NewInterfaceType(methods, embeds)
}
func (a *typeCompiler) compileMapType(x *ast.MapType) Type {
- key := a.compileType(x.Key, true);
- val := a.compileType(x.Value, true);
+ key := a.compileType(x.Key, true)
+ val := a.compileType(x.Value, true)
if key == nil || val == nil {
return nil
}
@@ -298,24 +298,24 @@ func (a *typeCompiler) compileMapType(x *ast.MapType) Type {
// that can be map keys except for function types.
switch key.lit().(type) {
case *StructType:
- a.diagAt(x, "map key cannot be a struct type");
- return nil;
+ a.diagAt(x, "map key cannot be a struct type")
+ return nil
case *ArrayType:
- a.diagAt(x, "map key cannot be an array type");
- return nil;
+ a.diagAt(x, "map key cannot be an array type")
+ return nil
case *SliceType:
- a.diagAt(x, "map key cannot be a slice type");
- return nil;
+ a.diagAt(x, "map key cannot be a slice type")
+ return nil
}
- return NewMapType(key, val);
+ return NewMapType(key, val)
}
func (a *typeCompiler) compileType(x ast.Expr, allowRec bool) Type {
switch x := x.(type) {
case *ast.BadExpr:
// Error already reported by parser
- a.silentErrors++;
- return nil;
+ a.silentErrors++
+ return nil
case *ast.Ident:
return a.compileIdent(x, allowRec)
@@ -330,11 +330,11 @@ func (a *typeCompiler) compileType(x ast.Expr, allowRec bool) Type {
return a.compilePtrType(x)
case *ast.FuncType:
- fd := a.compileFuncType(x, allowRec);
+ fd := a.compileFuncType(x, allowRec)
if fd == nil {
return nil
}
- return fd.Type;
+ return fd.Type
case *ast.InterfaceType:
return a.compileInterfaceType(x, allowRec)
@@ -349,44 +349,44 @@ func (a *typeCompiler) compileType(x ast.Expr, allowRec bool) Type {
return a.compileType(x.X, allowRec)
case *ast.Ellipsis:
- a.diagAt(x, "illegal use of ellipsis");
- return nil;
+ a.diagAt(x, "illegal use of ellipsis")
+ return nil
}
- a.diagAt(x, "expression used as type");
- return nil;
+ a.diagAt(x, "expression used as type")
+ return nil
notimpl:
- a.diagAt(x, "compileType: %T not implemented", x);
- return nil;
+ a.diagAt(x, "compileType: %T not implemented", x)
+ return nil
}
/*
* Type compiler interface
*/
-func noLateCheck() bool { return true }
+func noLateCheck() bool { return true }
func (a *compiler) compileType(b *block, typ ast.Expr) Type {
- tc := &typeCompiler{a, b, noLateCheck};
- t := tc.compileType(typ, false);
+ tc := &typeCompiler{a, b, noLateCheck}
+ t := tc.compileType(typ, false)
if !tc.lateCheck() {
t = nil
}
- return t;
+ return t
}
func (a *compiler) compileTypeDecl(b *block, decl *ast.GenDecl) bool {
- ok := true;
+ ok := true
for _, spec := range decl.Specs {
- spec := spec.(*ast.TypeSpec);
+ spec := spec.(*ast.TypeSpec)
// Create incomplete type for this type
- nt := b.DefineType(spec.Name.Value, spec.Name.Pos(), nil);
+ nt := b.DefineType(spec.Name.Value, spec.Name.Pos(), nil)
if nt != nil {
nt.(*NamedType).incomplete = true
}
// Compile type
- tc := &typeCompiler{a, b, noLateCheck};
- t := tc.compileType(spec.Type, false);
+ tc := &typeCompiler{a, b, noLateCheck}
+ t := tc.compileType(spec.Type, false)
if t == nil {
// Create a placeholder type
ok = false
@@ -397,23 +397,23 @@ func (a *compiler) compileTypeDecl(b *block, decl *ast.GenDecl) bool {
}
// Perform late type checking with complete type
if !tc.lateCheck() {
- ok = false;
+ ok = false
if nt != nil {
// Make the type a placeholder
nt.(*NamedType).Def = nil
}
}
}
- return ok;
+ return ok
}
func (a *compiler) compileFuncType(b *block, typ *ast.FuncType) *FuncDecl {
- tc := &typeCompiler{a, b, noLateCheck};
- res := tc.compileFuncType(typ, false);
+ tc := &typeCompiler{a, b, noLateCheck}
+ res := tc.compileFuncType(typ, false)
if res != nil {
if !tc.lateCheck() {
res = nil
}
}
- return res;
+ return res
}
diff --git a/src/pkg/exp/eval/util.go b/src/pkg/exp/eval/util.go
index bee767d88..6508346dd 100644
--- a/src/pkg/exp/eval/util.go
+++ b/src/pkg/exp/eval/util.go
@@ -5,35 +5,35 @@
package eval
import (
- "bignum";
+ "bignum"
)
// TODO(austin): Maybe add to bignum in more general form
func ratToString(rat *bignum.Rational) string {
- n, dnat := rat.Value();
- d := bignum.MakeInt(false, dnat);
- w, frac := n.QuoRem(d);
- out := w.String();
+ n, dnat := rat.Value()
+ d := bignum.MakeInt(false, dnat)
+ w, frac := n.QuoRem(d)
+ out := w.String()
if frac.IsZero() {
return out
}
- r := frac.Abs();
- r = r.Mul(bignum.Nat(1e6));
- dec, tail := r.DivMod(dnat);
+ r := frac.Abs()
+ r = r.Mul(bignum.Nat(1e6))
+ dec, tail := r.DivMod(dnat)
// Round last digit
if tail.Cmp(dnat.Div(bignum.Nat(2))) >= 0 {
dec = dec.Add(bignum.Nat(1))
}
// Strip zeros
- ten := bignum.Nat(10);
+ ten := bignum.Nat(10)
for !dec.IsZero() {
- dec2, r2 := dec.DivMod(ten);
+ dec2, r2 := dec.DivMod(ten)
if !r2.IsZero() {
break
}
- dec = dec2;
+ dec = dec2
}
- out += "." + dec.String();
- return out;
+ out += "." + dec.String()
+ return out
}
diff --git a/src/pkg/exp/eval/value.go b/src/pkg/exp/eval/value.go
index 3f823bb3e..1558d11dd 100644
--- a/src/pkg/exp/eval/value.go
+++ b/src/pkg/exp/eval/value.go
@@ -5,134 +5,134 @@
package eval
import (
- "bignum";
- "fmt";
+ "bignum"
+ "fmt"
)
type Value interface {
- String() string;
+ String() string
// Assign copies another value into this one. It should
// assume that the other value satisfies the same specific
// value interface (BoolValue, etc.), but must not assume
// anything about its specific type.
- Assign(t *Thread, o Value);
+ Assign(t *Thread, o Value)
}
type BoolValue interface {
- Value;
- Get(*Thread) bool;
- Set(*Thread, bool);
+ Value
+ Get(*Thread) bool
+ Set(*Thread, bool)
}
type UintValue interface {
- Value;
- Get(*Thread) uint64;
- Set(*Thread, uint64);
+ Value
+ Get(*Thread) uint64
+ Set(*Thread, uint64)
}
type IntValue interface {
- Value;
- Get(*Thread) int64;
- Set(*Thread, int64);
+ Value
+ Get(*Thread) int64
+ Set(*Thread, int64)
}
// TODO(austin) IdealIntValue and IdealFloatValue should not exist
// because ideals are not l-values.
type IdealIntValue interface {
- Value;
- Get() *bignum.Integer;
+ Value
+ Get() *bignum.Integer
}
type FloatValue interface {
- Value;
- Get(*Thread) float64;
- Set(*Thread, float64);
+ Value
+ Get(*Thread) float64
+ Set(*Thread, float64)
}
type IdealFloatValue interface {
- Value;
- Get() *bignum.Rational;
+ Value
+ Get() *bignum.Rational
}
type StringValue interface {
- Value;
- Get(*Thread) string;
- Set(*Thread, string);
+ Value
+ Get(*Thread) string
+ Set(*Thread, string)
}
type ArrayValue interface {
- Value;
+ Value
// TODO(austin) Get() is here for uniformity, but is
// completely useless. If a lot of other types have similarly
// useless Get methods, just special-case these uses.
- Get(*Thread) ArrayValue;
- Elem(*Thread, int64) Value;
+ Get(*Thread) ArrayValue
+ Elem(*Thread, int64) Value
// Sub returns an ArrayValue backed by the same array that
// starts from element i and has length len.
- Sub(i int64, len int64) ArrayValue;
+ Sub(i int64, len int64) ArrayValue
}
type StructValue interface {
- Value;
+ Value
// TODO(austin) This is another useless Get()
- Get(*Thread) StructValue;
- Field(*Thread, int) Value;
+ Get(*Thread) StructValue
+ Field(*Thread, int) Value
}
type PtrValue interface {
- Value;
- Get(*Thread) Value;
- Set(*Thread, Value);
+ Value
+ Get(*Thread) Value
+ Set(*Thread, Value)
}
type Func interface {
- NewFrame() *Frame;
- Call(*Thread);
+ NewFrame() *Frame
+ Call(*Thread)
}
type FuncValue interface {
- Value;
- Get(*Thread) Func;
- Set(*Thread, Func);
+ Value
+ Get(*Thread) Func
+ Set(*Thread, Func)
}
type Interface struct {
- Type Type;
- Value Value;
+ Type Type
+ Value Value
}
type InterfaceValue interface {
- Value;
- Get(*Thread) Interface;
- Set(*Thread, Interface);
+ Value
+ Get(*Thread) Interface
+ Set(*Thread, Interface)
}
type Slice struct {
- Base ArrayValue;
- Len, Cap int64;
+ Base ArrayValue
+ Len, Cap int64
}
type SliceValue interface {
- Value;
- Get(*Thread) Slice;
- Set(*Thread, Slice);
+ Value
+ Get(*Thread) Slice
+ Set(*Thread, Slice)
}
type Map interface {
- Len(*Thread) int64;
+ Len(*Thread) int64
// Retrieve an element from the map, returning nil if it does
// not exist.
- Elem(t *Thread, key interface{}) Value;
+ Elem(t *Thread, key interface{}) Value
// Set an entry in the map. If val is nil, delete the entry.
- SetElem(t *Thread, key interface{}, val Value);
+ SetElem(t *Thread, key interface{}, val Value)
// TODO(austin) Perhaps there should be an iterator interface instead.
- Iter(func(key interface{}, val Value) bool);
+ Iter(func(key interface{}, val Value) bool)
}
type MapValue interface {
- Value;
- Get(*Thread) Map;
- Set(*Thread, Map);
+ Value
+ Get(*Thread) Map
+ Set(*Thread, Map)
}
/*
@@ -141,13 +141,13 @@ type MapValue interface {
type boolV bool
-func (v *boolV) String() string { return fmt.Sprint(*v) }
+func (v *boolV) String() string { return fmt.Sprint(*v) }
-func (v *boolV) Assign(t *Thread, o Value) { *v = boolV(o.(BoolValue).Get(t)) }
+func (v *boolV) Assign(t *Thread, o Value) { *v = boolV(o.(BoolValue).Get(t)) }
-func (v *boolV) Get(*Thread) bool { return bool(*v) }
+func (v *boolV) Get(*Thread) bool { return bool(*v) }
-func (v *boolV) Set(t *Thread, x bool) { *v = boolV(x) }
+func (v *boolV) Set(t *Thread, x bool) { *v = boolV(x) }
/*
* Uint
@@ -155,63 +155,63 @@ func (v *boolV) Set(t *Thread, x bool) { *v = boolV(x) }
type uint8V uint8
-func (v *uint8V) String() string { return fmt.Sprint(*v) }
+func (v *uint8V) String() string { return fmt.Sprint(*v) }
-func (v *uint8V) Assign(t *Thread, o Value) { *v = uint8V(o.(UintValue).Get(t)) }
+func (v *uint8V) Assign(t *Thread, o Value) { *v = uint8V(o.(UintValue).Get(t)) }
-func (v *uint8V) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uint8V) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uint8V) Set(t *Thread, x uint64) { *v = uint8V(x) }
+func (v *uint8V) Set(t *Thread, x uint64) { *v = uint8V(x) }
type uint16V uint16
-func (v *uint16V) String() string { return fmt.Sprint(*v) }
+func (v *uint16V) String() string { return fmt.Sprint(*v) }
-func (v *uint16V) Assign(t *Thread, o Value) { *v = uint16V(o.(UintValue).Get(t)) }
+func (v *uint16V) Assign(t *Thread, o Value) { *v = uint16V(o.(UintValue).Get(t)) }
-func (v *uint16V) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uint16V) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uint16V) Set(t *Thread, x uint64) { *v = uint16V(x) }
+func (v *uint16V) Set(t *Thread, x uint64) { *v = uint16V(x) }
type uint32V uint32
-func (v *uint32V) String() string { return fmt.Sprint(*v) }
+func (v *uint32V) String() string { return fmt.Sprint(*v) }
-func (v *uint32V) Assign(t *Thread, o Value) { *v = uint32V(o.(UintValue).Get(t)) }
+func (v *uint32V) Assign(t *Thread, o Value) { *v = uint32V(o.(UintValue).Get(t)) }
-func (v *uint32V) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uint32V) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uint32V) Set(t *Thread, x uint64) { *v = uint32V(x) }
+func (v *uint32V) Set(t *Thread, x uint64) { *v = uint32V(x) }
type uint64V uint64
-func (v *uint64V) String() string { return fmt.Sprint(*v) }
+func (v *uint64V) String() string { return fmt.Sprint(*v) }
-func (v *uint64V) Assign(t *Thread, o Value) { *v = uint64V(o.(UintValue).Get(t)) }
+func (v *uint64V) Assign(t *Thread, o Value) { *v = uint64V(o.(UintValue).Get(t)) }
-func (v *uint64V) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uint64V) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uint64V) Set(t *Thread, x uint64) { *v = uint64V(x) }
+func (v *uint64V) Set(t *Thread, x uint64) { *v = uint64V(x) }
type uintV uint
-func (v *uintV) String() string { return fmt.Sprint(*v) }
+func (v *uintV) String() string { return fmt.Sprint(*v) }
-func (v *uintV) Assign(t *Thread, o Value) { *v = uintV(o.(UintValue).Get(t)) }
+func (v *uintV) Assign(t *Thread, o Value) { *v = uintV(o.(UintValue).Get(t)) }
-func (v *uintV) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uintV) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uintV) Set(t *Thread, x uint64) { *v = uintV(x) }
+func (v *uintV) Set(t *Thread, x uint64) { *v = uintV(x) }
type uintptrV uintptr
-func (v *uintptrV) String() string { return fmt.Sprint(*v) }
+func (v *uintptrV) String() string { return fmt.Sprint(*v) }
-func (v *uintptrV) Assign(t *Thread, o Value) { *v = uintptrV(o.(UintValue).Get(t)) }
+func (v *uintptrV) Assign(t *Thread, o Value) { *v = uintptrV(o.(UintValue).Get(t)) }
-func (v *uintptrV) Get(*Thread) uint64 { return uint64(*v) }
+func (v *uintptrV) Get(*Thread) uint64 { return uint64(*v) }
-func (v *uintptrV) Set(t *Thread, x uint64) { *v = uintptrV(x) }
+func (v *uintptrV) Set(t *Thread, x uint64) { *v = uintptrV(x) }
/*
* Int
@@ -219,69 +219,69 @@ func (v *uintptrV) Set(t *Thread, x uint64) { *v = uintptrV(x) }
type int8V int8
-func (v *int8V) String() string { return fmt.Sprint(*v) }
+func (v *int8V) String() string { return fmt.Sprint(*v) }
-func (v *int8V) Assign(t *Thread, o Value) { *v = int8V(o.(IntValue).Get(t)) }
+func (v *int8V) Assign(t *Thread, o Value) { *v = int8V(o.(IntValue).Get(t)) }
-func (v *int8V) Get(*Thread) int64 { return int64(*v) }
+func (v *int8V) Get(*Thread) int64 { return int64(*v) }
-func (v *int8V) Set(t *Thread, x int64) { *v = int8V(x) }
+func (v *int8V) Set(t *Thread, x int64) { *v = int8V(x) }
type int16V int16
-func (v *int16V) String() string { return fmt.Sprint(*v) }
+func (v *int16V) String() string { return fmt.Sprint(*v) }
-func (v *int16V) Assign(t *Thread, o Value) { *v = int16V(o.(IntValue).Get(t)) }
+func (v *int16V) Assign(t *Thread, o Value) { *v = int16V(o.(IntValue).Get(t)) }
-func (v *int16V) Get(*Thread) int64 { return int64(*v) }
+func (v *int16V) Get(*Thread) int64 { return int64(*v) }
-func (v *int16V) Set(t *Thread, x int64) { *v = int16V(x) }
+func (v *int16V) Set(t *Thread, x int64) { *v = int16V(x) }
type int32V int32
-func (v *int32V) String() string { return fmt.Sprint(*v) }
+func (v *int32V) String() string { return fmt.Sprint(*v) }
-func (v *int32V) Assign(t *Thread, o Value) { *v = int32V(o.(IntValue).Get(t)) }
+func (v *int32V) Assign(t *Thread, o Value) { *v = int32V(o.(IntValue).Get(t)) }
-func (v *int32V) Get(*Thread) int64 { return int64(*v) }
+func (v *int32V) Get(*Thread) int64 { return int64(*v) }
-func (v *int32V) Set(t *Thread, x int64) { *v = int32V(x) }
+func (v *int32V) Set(t *Thread, x int64) { *v = int32V(x) }
type int64V int64
-func (v *int64V) String() string { return fmt.Sprint(*v) }
+func (v *int64V) String() string { return fmt.Sprint(*v) }
-func (v *int64V) Assign(t *Thread, o Value) { *v = int64V(o.(IntValue).Get(t)) }
+func (v *int64V) Assign(t *Thread, o Value) { *v = int64V(o.(IntValue).Get(t)) }
-func (v *int64V) Get(*Thread) int64 { return int64(*v) }
+func (v *int64V) Get(*Thread) int64 { return int64(*v) }
-func (v *int64V) Set(t *Thread, x int64) { *v = int64V(x) }
+func (v *int64V) Set(t *Thread, x int64) { *v = int64V(x) }
type intV int
-func (v *intV) String() string { return fmt.Sprint(*v) }
+func (v *intV) String() string { return fmt.Sprint(*v) }
-func (v *intV) Assign(t *Thread, o Value) { *v = intV(o.(IntValue).Get(t)) }
+func (v *intV) Assign(t *Thread, o Value) { *v = intV(o.(IntValue).Get(t)) }
-func (v *intV) Get(*Thread) int64 { return int64(*v) }
+func (v *intV) Get(*Thread) int64 { return int64(*v) }
-func (v *intV) Set(t *Thread, x int64) { *v = intV(x) }
+func (v *intV) Set(t *Thread, x int64) { *v = intV(x) }
/*
* Ideal int
*/
type idealIntV struct {
- V *bignum.Integer;
+ V *bignum.Integer
}
-func (v *idealIntV) String() string { return v.V.String() }
+func (v *idealIntV) String() string { return v.V.String() }
func (v *idealIntV) Assign(t *Thread, o Value) {
v.V = o.(IdealIntValue).Get()
}
-func (v *idealIntV) Get() *bignum.Integer { return v.V }
+func (v *idealIntV) Get() *bignum.Integer { return v.V }
/*
* Float
@@ -289,49 +289,49 @@ func (v *idealIntV) Get() *bignum.Integer { return v.V }
type float32V float32
-func (v *float32V) String() string { return fmt.Sprint(*v) }
+func (v *float32V) String() string { return fmt.Sprint(*v) }
-func (v *float32V) Assign(t *Thread, o Value) { *v = float32V(o.(FloatValue).Get(t)) }
+func (v *float32V) Assign(t *Thread, o Value) { *v = float32V(o.(FloatValue).Get(t)) }
-func (v *float32V) Get(*Thread) float64 { return float64(*v) }
+func (v *float32V) Get(*Thread) float64 { return float64(*v) }
-func (v *float32V) Set(t *Thread, x float64) { *v = float32V(x) }
+func (v *float32V) Set(t *Thread, x float64) { *v = float32V(x) }
type float64V float64
-func (v *float64V) String() string { return fmt.Sprint(*v) }
+func (v *float64V) String() string { return fmt.Sprint(*v) }
-func (v *float64V) Assign(t *Thread, o Value) { *v = float64V(o.(FloatValue).Get(t)) }
+func (v *float64V) Assign(t *Thread, o Value) { *v = float64V(o.(FloatValue).Get(t)) }
-func (v *float64V) Get(*Thread) float64 { return float64(*v) }
+func (v *float64V) Get(*Thread) float64 { return float64(*v) }
-func (v *float64V) Set(t *Thread, x float64) { *v = float64V(x) }
+func (v *float64V) Set(t *Thread, x float64) { *v = float64V(x) }
type floatV float
-func (v *floatV) String() string { return fmt.Sprint(*v) }
+func (v *floatV) String() string { return fmt.Sprint(*v) }
-func (v *floatV) Assign(t *Thread, o Value) { *v = floatV(o.(FloatValue).Get(t)) }
+func (v *floatV) Assign(t *Thread, o Value) { *v = floatV(o.(FloatValue).Get(t)) }
-func (v *floatV) Get(*Thread) float64 { return float64(*v) }
+func (v *floatV) Get(*Thread) float64 { return float64(*v) }
-func (v *floatV) Set(t *Thread, x float64) { *v = floatV(x) }
+func (v *floatV) Set(t *Thread, x float64) { *v = floatV(x) }
/*
* Ideal float
*/
type idealFloatV struct {
- V *bignum.Rational;
+ V *bignum.Rational
}
-func (v *idealFloatV) String() string { return ratToString(v.V) }
+func (v *idealFloatV) String() string { return ratToString(v.V) }
func (v *idealFloatV) Assign(t *Thread, o Value) {
v.V = o.(IdealFloatValue).Get()
}
-func (v *idealFloatV) Get() *bignum.Rational { return v.V }
+func (v *idealFloatV) Get() *bignum.Rational { return v.V }
/*
* String
@@ -339,13 +339,13 @@ func (v *idealFloatV) Get() *bignum.Rational { return v.V }
type stringV string
-func (v *stringV) String() string { return fmt.Sprint(*v) }
+func (v *stringV) String() string { return fmt.Sprint(*v) }
-func (v *stringV) Assign(t *Thread, o Value) { *v = stringV(o.(StringValue).Get(t)) }
+func (v *stringV) Assign(t *Thread, o Value) { *v = stringV(o.(StringValue).Get(t)) }
-func (v *stringV) Get(*Thread) string { return string(*v) }
+func (v *stringV) Get(*Thread) string { return string(*v) }
-func (v *stringV) Set(t *Thread, x string) { *v = stringV(x) }
+func (v *stringV) Set(t *Thread, x string) { *v = stringV(x) }
/*
* Array
@@ -354,33 +354,33 @@ func (v *stringV) Set(t *Thread, x string) { *v = stringV(x) }
type arrayV []Value
func (v *arrayV) String() string {
- res := "{";
+ res := "{"
for i, e := range *v {
if i > 0 {
res += ", "
}
- res += e.String();
+ res += e.String()
}
- return res + "}";
+ return res + "}"
}
func (v *arrayV) Assign(t *Thread, o Value) {
- oa := o.(ArrayValue);
- l := int64(len(*v));
+ oa := o.(ArrayValue)
+ l := int64(len(*v))
for i := int64(0); i < l; i++ {
(*v)[i].Assign(t, oa.Elem(t, i))
}
}
-func (v *arrayV) Get(*Thread) ArrayValue { return v }
+func (v *arrayV) Get(*Thread) ArrayValue { return v }
func (v *arrayV) Elem(t *Thread, i int64) Value {
return (*v)[i]
}
func (v *arrayV) Sub(i int64, len int64) ArrayValue {
- res := (*v)[i : i+len];
- return &res;
+ res := (*v)[i : i+len]
+ return &res
}
/*
@@ -392,25 +392,25 @@ type structV []Value
// TODO(austin) Should these methods (and arrayV's) be on structV
// instead of *structV?
func (v *structV) String() string {
- res := "{";
+ res := "{"
for i, v := range *v {
if i > 0 {
res += ", "
}
- res += v.String();
+ res += v.String()
}
- return res + "}";
+ return res + "}"
}
func (v *structV) Assign(t *Thread, o Value) {
- oa := o.(StructValue);
- l := len(*v);
+ oa := o.(StructValue)
+ l := len(*v)
for i := 0; i < l; i++ {
(*v)[i].Assign(t, oa.Field(t, i))
}
}
-func (v *structV) Get(*Thread) StructValue { return v }
+func (v *structV) Get(*Thread) StructValue { return v }
func (v *structV) Field(t *Thread, i int) Value {
return (*v)[i]
@@ -422,28 +422,28 @@ func (v *structV) Field(t *Thread, i int) Value {
type ptrV struct {
// nil if the pointer is nil
- target Value;
+ target Value
}
func (v *ptrV) String() string {
if v.target == nil {
return "<nil>"
}
- return "&" + v.target.String();
+ return "&" + v.target.String()
}
-func (v *ptrV) Assign(t *Thread, o Value) { v.target = o.(PtrValue).Get(t) }
+func (v *ptrV) Assign(t *Thread, o Value) { v.target = o.(PtrValue).Get(t) }
-func (v *ptrV) Get(*Thread) Value { return v.target }
+func (v *ptrV) Get(*Thread) Value { return v.target }
-func (v *ptrV) Set(t *Thread, x Value) { v.target = x }
+func (v *ptrV) Set(t *Thread, x Value) { v.target = x }
/*
* Functions
*/
type funcV struct {
- target Func;
+ target Func
}
func (v *funcV) String() string {
@@ -451,32 +451,32 @@ func (v *funcV) String() string {
return "func {...}"
}
-func (v *funcV) Assign(t *Thread, o Value) { v.target = o.(FuncValue).Get(t) }
+func (v *funcV) Assign(t *Thread, o Value) { v.target = o.(FuncValue).Get(t) }
-func (v *funcV) Get(*Thread) Func { return v.target }
+func (v *funcV) Get(*Thread) Func { return v.target }
-func (v *funcV) Set(t *Thread, x Func) { v.target = x }
+func (v *funcV) Set(t *Thread, x Func) { v.target = x }
/*
* Interfaces
*/
type interfaceV struct {
- Interface;
+ Interface
}
func (v *interfaceV) String() string {
if v.Type == nil || v.Value == nil {
return "<nil>"
}
- return v.Value.String();
+ return v.Value.String()
}
func (v *interfaceV) Assign(t *Thread, o Value) {
v.Interface = o.(InterfaceValue).Get(t)
}
-func (v *interfaceV) Get(*Thread) Interface { return v.Interface }
+func (v *interfaceV) Get(*Thread) Interface { return v.Interface }
func (v *interfaceV) Set(t *Thread, x Interface) {
v.Interface = x
@@ -487,62 +487,62 @@ func (v *interfaceV) Set(t *Thread, x Interface) {
*/
type sliceV struct {
- Slice;
+ Slice
}
func (v *sliceV) String() string {
if v.Base == nil {
return "<nil>"
}
- return v.Base.Sub(0, v.Len).String();
+ return v.Base.Sub(0, v.Len).String()
}
-func (v *sliceV) Assign(t *Thread, o Value) { v.Slice = o.(SliceValue).Get(t) }
+func (v *sliceV) Assign(t *Thread, o Value) { v.Slice = o.(SliceValue).Get(t) }
-func (v *sliceV) Get(*Thread) Slice { return v.Slice }
+func (v *sliceV) Get(*Thread) Slice { return v.Slice }
-func (v *sliceV) Set(t *Thread, x Slice) { v.Slice = x }
+func (v *sliceV) Set(t *Thread, x Slice) { v.Slice = x }
/*
* Maps
*/
type mapV struct {
- target Map;
+ target Map
}
func (v *mapV) String() string {
if v.target == nil {
return "<nil>"
}
- res := "map[";
- i := 0;
+ res := "map["
+ i := 0
v.target.Iter(func(key interface{}, val Value) bool {
if i > 0 {
res += ", "
}
- i++;
- res += fmt.Sprint(key) + ":" + val.String();
- return true;
- });
- return res + "]";
+ i++
+ res += fmt.Sprint(key) + ":" + val.String()
+ return true
+ })
+ return res + "]"
}
-func (v *mapV) Assign(t *Thread, o Value) { v.target = o.(MapValue).Get(t) }
+func (v *mapV) Assign(t *Thread, o Value) { v.target = o.(MapValue).Get(t) }
-func (v *mapV) Get(*Thread) Map { return v.target }
+func (v *mapV) Get(*Thread) Map { return v.target }
-func (v *mapV) Set(t *Thread, x Map) { v.target = x }
+func (v *mapV) Set(t *Thread, x Map) { v.target = x }
type evalMap map[interface{}]Value
-func (m evalMap) Len(t *Thread) int64 { return int64(len(m)) }
+func (m evalMap) Len(t *Thread) int64 { return int64(len(m)) }
func (m evalMap) Elem(t *Thread, key interface{}) Value {
if v, ok := m[key]; ok {
return v
}
- return nil;
+ return nil
}
func (m evalMap) SetElem(t *Thread, key interface{}, val Value) {
@@ -568,18 +568,18 @@ func (m evalMap) Iter(cb func(key interface{}, val Value) bool) {
type multiV []Value
func (v multiV) String() string {
- res := "(";
+ res := "("
for i, v := range v {
if i > 0 {
res += ", "
}
- res += v.String();
+ res += v.String()
}
- return res + ")";
+ return res + ")"
}
func (v multiV) Assign(t *Thread, o Value) {
- omv := o.(multiV);
+ omv := o.(multiV)
for i := range v {
v[i].Assign(t, omv[i])
}
@@ -592,10 +592,10 @@ func (v multiV) Assign(t *Thread, o Value) {
// TODO(austin) Nothing complains if I accidentally define init with
// arguments. Is this intentional?
func init() {
- s := universe;
+ s := universe
- true := boolV(true);
- s.DefineConst("true", universePos, BoolType, &true);
- false := boolV(false);
- s.DefineConst("false", universePos, BoolType, &false);
+ true := boolV(true)
+ s.DefineConst("true", universePos, BoolType, &true)
+ false := boolV(false)
+ s.DefineConst("false", universePos, BoolType, &false)
}
diff --git a/src/pkg/exp/eval/world.go b/src/pkg/exp/eval/world.go
index 184e737c6..c36081b26 100644
--- a/src/pkg/exp/eval/world.go
+++ b/src/pkg/exp/eval/world.go
@@ -8,37 +8,37 @@
package eval
import (
- "go/ast";
- parser "exp/parser";
- "go/scanner";
- "go/token";
- "os";
+ "go/ast"
+ parser "exp/parser"
+ "go/scanner"
+ "go/token"
+ "os"
)
type World struct {
- scope *Scope;
- frame *Frame;
+ scope *Scope
+ frame *Frame
}
func NewWorld() *World {
- w := new(World);
- w.scope = universe.ChildScope();
- w.scope.global = true; // this block's vars allocate directly
- return w;
+ w := new(World)
+ w.scope = universe.ChildScope()
+ w.scope.global = true // this block's vars allocate directly
+ return w
}
type Code interface {
// The type of the value Run returns, or nil if Run returns nil.
- Type() Type;
+ Type() Type
// Run runs the code; if the code is a single expression
// with a value, it returns the value; otherwise it returns nil.
- Run() (Value, os.Error);
+ Run() (Value, os.Error)
}
type stmtCode struct {
- w *World;
- code code;
+ w *World
+ code code
}
func (w *World) CompileStmtList(stmts []ast.Stmt) (Code, os.Error) {
@@ -47,9 +47,9 @@ func (w *World) CompileStmtList(stmts []ast.Stmt) (Code, os.Error) {
return w.CompileExpr(s.X)
}
}
- errors := new(scanner.ErrorVector);
- cc := &compiler{errors, 0, 0};
- cb := newCodeBuf();
+ errors := new(scanner.ErrorVector)
+ cc := &compiler{errors, 0, 0}
+ cb := newCodeBuf()
fc := &funcCompiler{
compiler: cc,
fnType: nil,
@@ -57,53 +57,53 @@ func (w *World) CompileStmtList(stmts []ast.Stmt) (Code, os.Error) {
codeBuf: cb,
flow: newFlowBuf(cb),
labels: make(map[string]*label),
- };
+ }
bc := &blockCompiler{
funcCompiler: fc,
block: w.scope.block,
- };
- nerr := cc.numError();
+ }
+ nerr := cc.numError()
for _, stmt := range stmts {
bc.compileStmt(stmt)
}
- fc.checkLabels();
+ fc.checkLabels()
if nerr != cc.numError() {
return nil, errors.GetError(scanner.Sorted)
}
- return &stmtCode{w, fc.get()}, nil;
+ return &stmtCode{w, fc.get()}, nil
}
func (w *World) CompileDeclList(decls []ast.Decl) (Code, os.Error) {
- stmts := make([]ast.Stmt, len(decls));
+ stmts := make([]ast.Stmt, len(decls))
for i, d := range decls {
stmts[i] = &ast.DeclStmt{d}
}
- return w.CompileStmtList(stmts);
+ return w.CompileStmtList(stmts)
}
-func (s *stmtCode) Type() Type { return nil }
+func (s *stmtCode) Type() Type { return nil }
func (s *stmtCode) Run() (Value, os.Error) {
- t := new(Thread);
- t.f = s.w.scope.NewFrame(nil);
- return nil, t.Try(func(t *Thread) { s.code.exec(t) });
+ t := new(Thread)
+ t.f = s.w.scope.NewFrame(nil)
+ return nil, t.Try(func(t *Thread) { s.code.exec(t) })
}
type exprCode struct {
- w *World;
- e *expr;
- eval func(Value, *Thread);
+ w *World
+ e *expr
+ eval func(Value, *Thread)
}
func (w *World) CompileExpr(e ast.Expr) (Code, os.Error) {
- errors := new(scanner.ErrorVector);
- cc := &compiler{errors, 0, 0};
+ errors := new(scanner.ErrorVector)
+ cc := &compiler{errors, 0, 0}
- ec := cc.compileExpr(w.scope.block, false, e);
+ ec := cc.compileExpr(w.scope.block, false, e)
if ec == nil {
return nil, errors.GetError(scanner.Sorted)
}
- var eval func(Value, *Thread);
+ var eval func(Value, *Thread)
switch t := ec.t.(type) {
case *idealIntType:
// nothing
@@ -113,36 +113,36 @@ func (w *World) CompileExpr(e ast.Expr) (Code, os.Error) {
if tm, ok := t.(*MultiType); ok && len(tm.Elems) == 0 {
return &stmtCode{w, code{ec.exec}}, nil
}
- eval = genAssign(ec.t, ec);
+ eval = genAssign(ec.t, ec)
}
- return &exprCode{w, ec, eval}, nil;
+ return &exprCode{w, ec, eval}, nil
}
-func (e *exprCode) Type() Type { return e.e.t }
+func (e *exprCode) Type() Type { return e.e.t }
func (e *exprCode) Run() (Value, os.Error) {
- t := new(Thread);
- t.f = e.w.scope.NewFrame(nil);
+ t := new(Thread)
+ t.f = e.w.scope.NewFrame(nil)
switch e.e.t.(type) {
case *idealIntType:
return &idealIntV{e.e.asIdealInt()()}, nil
case *idealFloatType:
return &idealFloatV{e.e.asIdealFloat()()}, nil
}
- v := e.e.t.Zero();
- eval := e.eval;
- err := t.Try(func(t *Thread) { eval(v, t) });
- return v, err;
+ v := e.e.t.Zero()
+ eval := e.eval
+ err := t.Try(func(t *Thread) { eval(v, t) })
+ return v, err
}
func (w *World) Compile(text string) (Code, os.Error) {
- stmts, err := parser.ParseStmtList("input", text);
+ stmts, err := parser.ParseStmtList("input", text)
if err == nil {
return w.CompileStmtList(stmts)
}
// Otherwise try as DeclList.
- decls, err1 := parser.ParseDeclList("input", text);
+ decls, err1 := parser.ParseDeclList("input", text)
if err1 == nil {
return w.CompileDeclList(decls)
}
@@ -150,36 +150,36 @@ func (w *World) Compile(text string) (Code, os.Error) {
// Have to pick an error.
// Parsing as statement list admits more forms,
// its error is more likely to be useful.
- return nil, err;
+ return nil, err
}
type RedefinitionError struct {
- Name string;
- Prev Def;
+ Name string
+ Prev Def
}
func (e *RedefinitionError) String() string {
- res := "identifier " + e.Name + " redeclared";
- pos := e.Prev.Pos();
+ res := "identifier " + e.Name + " redeclared"
+ pos := e.Prev.Pos()
if pos.IsValid() {
res += "; previous declaration at " + pos.String()
}
- return res;
+ return res
}
func (w *World) DefineConst(name string, t Type, val Value) os.Error {
- _, prev := w.scope.DefineConst(name, token.Position{}, t, val);
+ _, prev := w.scope.DefineConst(name, token.Position{}, t, val)
if prev != nil {
return &RedefinitionError{name, prev}
}
- return nil;
+ return nil
}
func (w *World) DefineVar(name string, t Type, val Value) os.Error {
- v, prev := w.scope.DefineVar(name, token.Position{}, t);
+ v, prev := w.scope.DefineVar(name, token.Position{}, t)
if prev != nil {
return &RedefinitionError{name, prev}
}
- v.Init = val;
- return nil;
+ v.Init = val
+ return nil
}
diff --git a/src/pkg/exp/exception/exception.go b/src/pkg/exp/exception/exception.go
index 45e0be3f1..e34d0f0d7 100644
--- a/src/pkg/exp/exception/exception.go
+++ b/src/pkg/exp/exception/exception.go
@@ -11,8 +11,8 @@
package exception
import (
- "fmt";
- "runtime";
+ "fmt"
+ "runtime"
)
// A Handler function handles an arbitrary exception value x.
@@ -20,7 +20,7 @@ type Handler func(x interface{})
// An Exception carries an exception value.
type Exception struct {
- Value interface{}; // Value may be the nil exception
+ Value interface{} // Value may be the nil exception
}
// Try invokes a function f with a Handler to throw exceptions.
@@ -51,18 +51,18 @@ type Exception struct {
// })
//
func Try(f func(throw Handler)) *Exception {
- h := make(chan *Exception);
+ h := make(chan *Exception)
// execute try block
go func() {
f(func(x interface{}) {
- h <- &Exception{x};
- runtime.Goexit();
- });
- h <- nil; // clean termination
- }();
+ h <- &Exception{x}
+ runtime.Goexit()
+ })
+ h <- nil // clean termination
+ }()
- return <-h;
+ return <-h
}
@@ -79,5 +79,5 @@ func (x *Exception) String() string {
if x != nil {
return fmt.Sprintf("exception: %v", x.Value)
}
- return "";
+ return ""
}
diff --git a/src/pkg/exp/exception/exception_test.go b/src/pkg/exp/exception/exception_test.go
index 91f742ea0..b7b106d77 100644
--- a/src/pkg/exp/exception/exception_test.go
+++ b/src/pkg/exp/exception/exception_test.go
@@ -7,7 +7,7 @@ package exception
import "testing"
func TestNoException(t *testing.T) {
- e := Try(func(throw Handler) {});
+ e := Try(func(throw Handler) {})
if e != nil {
t.Fatalf("no exception expected, found: %v", e)
}
@@ -15,7 +15,7 @@ func TestNoException(t *testing.T) {
func TestNilException(t *testing.T) {
- e := Try(func(throw Handler) { throw(nil) });
+ e := Try(func(throw Handler) { throw(nil) })
if e == nil {
t.Fatalf("exception expected", e)
}
@@ -26,19 +26,19 @@ func TestNilException(t *testing.T) {
func TestTry(t *testing.T) {
- s := 0;
+ s := 0
for i := 1; i <= 10; i++ {
e := Try(func(throw Handler) {
if i%3 == 0 {
- throw(i);
- panic("throw returned");
+ throw(i)
+ panic("throw returned")
}
- });
+ })
if e != nil {
s += e.Value.(int)
}
}
- result := 3 + 6 + 9;
+ result := 3 + 6 + 9
if s != result {
t.Fatalf("expected: %d, found: %d", result, s)
}
@@ -46,7 +46,7 @@ func TestTry(t *testing.T) {
func TestCatch(t *testing.T) {
- s := 0;
+ s := 0
for i := 1; i <= 10; i++ {
Try(func(throw Handler) {
if i%3 == 0 {
@@ -54,7 +54,7 @@ func TestCatch(t *testing.T) {
}
}).Catch(func(x interface{}) { s += x.(int) })
}
- result := 3 + 6 + 9;
+ result := 3 + 6 + 9
if s != result {
t.Fatalf("expected: %d, found: %d", result, s)
}
diff --git a/src/pkg/exp/iterable/array.go b/src/pkg/exp/iterable/array.go
index 371508e5d..b5c7b5c6e 100644
--- a/src/pkg/exp/iterable/array.go
+++ b/src/pkg/exp/iterable/array.go
@@ -9,51 +9,51 @@ package iterable
type ByteArray []byte
func (a ByteArray) Iter() <-chan interface{} {
- ch := make(chan interface{});
+ ch := make(chan interface{})
go func() {
for _, e := range a {
ch <- e
}
- close(ch);
- }();
- return ch;
+ close(ch)
+ }()
+ return ch
}
type IntArray []int
func (a IntArray) Iter() <-chan interface{} {
- ch := make(chan interface{});
+ ch := make(chan interface{})
go func() {
for _, e := range a {
ch <- e
}
- close(ch);
- }();
- return ch;
+ close(ch)
+ }()
+ return ch
}
type FloatArray []float
func (a FloatArray) Iter() <-chan interface{} {
- ch := make(chan interface{});
+ ch := make(chan interface{})
go func() {
for _, e := range a {
ch <- e
}
- close(ch);
- }();
- return ch;
+ close(ch)
+ }()
+ return ch
}
type StringArray []string
func (a StringArray) Iter() <-chan interface{} {
- ch := make(chan interface{});
+ ch := make(chan interface{})
go func() {
for _, e := range a {
ch <- e
}
- close(ch);
- }();
- return ch;
+ close(ch)
+ }()
+ return ch
}
diff --git a/src/pkg/exp/iterable/iterable.go b/src/pkg/exp/iterable/iterable.go
index 764900c53..b1ae0e90f 100644
--- a/src/pkg/exp/iterable/iterable.go
+++ b/src/pkg/exp/iterable/iterable.go
@@ -9,13 +9,13 @@
package iterable
import (
- "container/list";
- "container/vector";
+ "container/list"
+ "container/vector"
)
type Iterable interface {
// Iter should return a fresh channel each time it is called.
- Iter() <-chan interface{};
+ Iter() <-chan interface{}
}
func not(f func(interface{}) bool) (func(interface{}) bool) {
@@ -29,7 +29,7 @@ func All(iter Iterable, f func(interface{}) bool) bool {
return false
}
}
- return true;
+ return true
}
// Any tests whether f is true for at least one element of iter.
@@ -39,18 +39,18 @@ func Any(iter Iterable, f func(interface{}) bool) bool {
// Data returns a slice containing the elements of iter.
func Data(iter Iterable) []interface{} {
- vec := new(vector.Vector);
+ vec := new(vector.Vector)
for e := range iter.Iter() {
vec.Push(e)
}
- return vec.Data();
+ return vec.Data()
}
// filteredIterable is a struct that implements Iterable with each element
// passed through a filter.
type filteredIterable struct {
- it Iterable;
- f func(interface{}) bool;
+ it Iterable
+ f func(interface{}) bool
}
func (f *filteredIterable) iterate(out chan<- interface{}) {
@@ -59,13 +59,13 @@ func (f *filteredIterable) iterate(out chan<- interface{}) {
out <- e
}
}
- close(out);
+ close(out)
}
func (f *filteredIterable) Iter() <-chan interface{} {
- ch := make(chan interface{});
- go f.iterate(ch);
- return ch;
+ ch := make(chan interface{})
+ go f.iterate(ch)
+ return ch
}
// Filter returns an Iterable that returns the elements of iter that satisfy f.
@@ -79,7 +79,7 @@ func Find(iter Iterable, f func(interface{}) bool) interface{} {
for e := range Filter(iter, f).Iter() {
return e
}
- return nil;
+ return nil
}
// Injector is a type representing a function that takes two arguments,
@@ -96,30 +96,30 @@ type Injector func(interface{}, interface{}) interface{}
// func(ax interface {}, x interface {}) interface {} {
// return ax.(int) + x.(int) }).(int)
func Inject(iter Iterable, initial interface{}, f Injector) interface{} {
- acc := initial;
+ acc := initial
for e := range iter.Iter() {
acc = f(acc, e)
}
- return acc;
+ return acc
}
// mappedIterable is a helper struct that implements Iterable, returned by Map.
type mappedIterable struct {
- it Iterable;
- f func(interface{}) interface{};
+ it Iterable
+ f func(interface{}) interface{}
}
func (m *mappedIterable) iterate(out chan<- interface{}) {
for e := range m.it.Iter() {
out <- m.f(e)
}
- close(out);
+ close(out)
}
func (m *mappedIterable) Iter() <-chan interface{} {
- ch := make(chan interface{});
- go m.iterate(ch);
- return ch;
+ ch := make(chan interface{})
+ go m.iterate(ch)
+ return ch
}
// Map returns an Iterable that returns the result of applying f to each
@@ -139,13 +139,13 @@ type iterFunc func(chan<- interface{})
// provide the Iterable interface
func (v iterFunc) Iter() <-chan interface{} {
- ch := make(chan interface{});
- go v(ch);
- return ch;
+ ch := make(chan interface{})
+ go v(ch)
+ return ch
}
// Take returns an Iterable that contains the first n elements of iter.
-func Take(iter Iterable, n int) Iterable { return Slice(iter, 0, n) }
+func Take(iter Iterable, n int) Iterable { return Slice(iter, 0, n) }
// TakeWhile returns an Iterable that contains elements from iter while f is true.
func TakeWhile(iter Iterable, f func(interface{}) bool) Iterable {
@@ -154,41 +154,41 @@ func TakeWhile(iter Iterable, f func(interface{}) bool) Iterable {
if !f(v) {
break
}
- ch <- v;
+ ch <- v
}
- close(ch);
+ close(ch)
})
}
// Drop returns an Iterable that returns each element of iter after the first n elements.
func Drop(iter Iterable, n int) Iterable {
return iterFunc(func(ch chan<- interface{}) {
- m := n;
+ m := n
for v := range iter.Iter() {
if m > 0 {
- m--;
- continue;
+ m--
+ continue
}
- ch <- v;
+ ch <- v
}
- close(ch);
+ close(ch)
})
}
// DropWhile returns an Iterable that returns each element of iter after the initial sequence for which f returns true.
func DropWhile(iter Iterable, f func(interface{}) bool) Iterable {
return iterFunc(func(ch chan<- interface{}) {
- drop := true;
+ drop := true
for v := range iter.Iter() {
if drop {
if f(v) {
continue
}
- drop = false;
+ drop = false
}
- ch <- v;
+ ch <- v
}
- close(ch);
+ close(ch)
})
}
@@ -211,7 +211,7 @@ func Chain(args []Iterable) Iterable {
ch <- v
}
}
- close(ch);
+ close(ch)
})
}
@@ -220,23 +220,23 @@ func Chain(args []Iterable) Iterable {
// the lengths of the input Iterables.
func Zip(args []Iterable) Iterable {
return iterFunc(func(ch chan<- interface{}) {
- defer close(ch);
+ defer close(ch)
if len(args) == 0 {
return
}
- iters := make([]<-chan interface{}, len(args));
+ iters := make([]<-chan interface{}, len(args))
for i := 0; i < len(iters); i++ {
iters[i] = args[i].Iter()
}
for {
- out := make([]interface{}, len(args));
+ out := make([]interface{}, len(args))
for i, v := range iters {
- out[i] = <-v;
+ out[i] = <-v
if closed(v) {
return
}
}
- ch <- out;
+ ch <- out
}
})
}
@@ -244,16 +244,16 @@ func Zip(args []Iterable) Iterable {
// ZipWith returns an Iterable containing the result of executing f using arguments read from a and b.
func ZipWith2(f func(c, d interface{}) interface{}, a, b Iterable) Iterable {
return Map(Zip([]Iterable{a, b}), func(a1 interface{}) interface{} {
- arr := a1.([]interface{});
- return f(arr[0], arr[1]);
+ arr := a1.([]interface{})
+ return f(arr[0], arr[1])
})
}
// ZipWith returns an Iterable containing the result of executing f using arguments read from a, b and c.
func ZipWith3(f func(d, e, f interface{}) interface{}, a, b, c Iterable) Iterable {
return Map(Zip([]Iterable{a, b, c}), func(a1 interface{}) interface{} {
- arr := a1.([]interface{});
- return f(arr[0], arr[1], arr[2]);
+ arr := a1.([]interface{})
+ return f(arr[0], arr[1], arr[2])
})
}
@@ -261,8 +261,8 @@ func ZipWith3(f func(d, e, f interface{}) interface{}, a, b, c Iterable) Iterabl
// with indexes in [start, stop).
func Slice(iter Iterable, start, stop int) Iterable {
return iterFunc(func(ch chan<- interface{}) {
- defer close(ch);
- i := 0;
+ defer close(ch)
+ i := 0
for v := range iter.Iter() {
switch {
case i >= stop:
@@ -270,7 +270,7 @@ func Slice(iter Iterable, start, stop int) Iterable {
case i >= start:
ch <- v
}
- i++;
+ i++
}
})
}
@@ -290,23 +290,23 @@ func RepeatTimes(v interface{}, n int) Iterable {
for i := 0; i < n; i++ {
ch <- v
}
- close(ch);
+ close(ch)
})
}
// Group is the type for elements returned by the GroupBy function.
type Group struct {
- Key interface{}; // key value for matching items
- Vals Iterable; // Iterable for receiving values in the group
+ Key interface{} // key value for matching items
+ Vals Iterable // Iterable for receiving values in the group
}
// Key defines the interface required by the GroupBy function.
type Grouper interface {
// Return the key for the given value
- Key(interface{}) interface{};
+ Key(interface{}) interface{}
// Compute equality for the given keys
- Equal(a, b interface{}) bool;
+ Equal(a, b interface{}) bool
}
// GroupBy combines sequences of logically identical values from iter using k
@@ -317,23 +317,23 @@ type Grouper interface {
func GroupBy(iter Iterable, k Grouper) Iterable {
return iterFunc(func(ch chan<- interface{}) {
var curkey interface{}
- var lst *list.List;
+ var lst *list.List
// Basic strategy is to read one group at a time into a list prior to emitting the Group value
for v := range iter.Iter() {
- kv := k.Key(v);
+ kv := k.Key(v)
if lst == nil || !k.Equal(curkey, kv) {
if lst != nil {
ch <- Group{curkey, lst}
}
- lst = list.New();
- curkey = kv;
+ lst = list.New()
+ curkey = kv
}
- lst.PushBack(v);
+ lst.PushBack(v)
}
if lst != nil {
ch <- Group{curkey, lst}
}
- close(ch);
+ close(ch)
})
}
diff --git a/src/pkg/exp/iterable/iterable_test.go b/src/pkg/exp/iterable/iterable_test.go
index 242a725a9..1d60d4b91 100644
--- a/src/pkg/exp/iterable/iterable_test.go
+++ b/src/pkg/exp/iterable/iterable_test.go
@@ -5,42 +5,42 @@
package iterable
import (
- "container/vector";
- "testing";
+ "container/vector"
+ "testing"
)
func TestArrayTypes(t *testing.T) {
// Test that conversion works correctly.
- bytes := ByteArray([]byte{1, 2, 3});
+ bytes := ByteArray([]byte{1, 2, 3})
if x := Data(bytes)[1].(byte); x != 2 {
t.Error("Data(bytes)[1].(byte) = %v, want 2", x)
}
- ints := IntArray([]int{1, 2, 3});
+ ints := IntArray([]int{1, 2, 3})
if x := Data(ints)[2].(int); x != 3 {
t.Error("Data(ints)[2].(int) = %v, want 3", x)
}
- floats := FloatArray([]float{1, 2, 3});
+ floats := FloatArray([]float{1, 2, 3})
if x := Data(floats)[0].(float); x != 1 {
t.Error("Data(floats)[0].(float) = %v, want 1", x)
}
- strings := StringArray([]string{"a", "b", "c"});
+ strings := StringArray([]string{"a", "b", "c"})
if x := Data(strings)[1].(string); x != "b" {
t.Error(`Data(strings)[1].(string) = %q, want "b"`, x)
}
}
var (
- oneToFive = IntArray{1, 2, 3, 4, 5};
- sixToTen = IntArray{6, 7, 8, 9, 10};
- elevenToTwenty = IntArray{11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
+ oneToFive = IntArray{1, 2, 3, 4, 5}
+ sixToTen = IntArray{6, 7, 8, 9, 10}
+ elevenToTwenty = IntArray{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
)
-func isNegative(n interface{}) bool { return n.(int) < 0 }
-func isPositive(n interface{}) bool { return n.(int) > 0 }
-func isAbove3(n interface{}) bool { return n.(int) > 3 }
-func isEven(n interface{}) bool { return n.(int)%2 == 0 }
-func doubler(n interface{}) interface{} { return n.(int) * 2 }
-func addOne(n interface{}) interface{} { return n.(int) + 1 }
+func isNegative(n interface{}) bool { return n.(int) < 0 }
+func isPositive(n interface{}) bool { return n.(int) > 0 }
+func isAbove3(n interface{}) bool { return n.(int) > 3 }
+func isEven(n interface{}) bool { return n.(int)%2 == 0 }
+func doubler(n interface{}) interface{} { return n.(int) * 2 }
+func addOne(n interface{}) interface{} { return n.(int) + 1 }
func adder(acc interface{}, n interface{}) interface{} {
return acc.(int) + n.(int)
}
@@ -49,13 +49,13 @@ func adder(acc interface{}, n interface{}) interface{} {
type integerStream struct{}
func (i integerStream) Iter() <-chan interface{} {
- ch := make(chan interface{});
+ ch := make(chan interface{})
go func() {
for i := 0; ; i++ {
ch <- i
}
- }();
- return ch;
+ }()
+ return ch
}
func TestAll(t *testing.T) {
@@ -78,236 +78,236 @@ func TestAny(t *testing.T) {
func assertArraysAreEqual(t *testing.T, res []interface{}, expected []int) {
if len(res) != len(expected) {
- t.Errorf("len(res) = %v, want %v", len(res), len(expected));
- goto missing;
+ t.Errorf("len(res) = %v, want %v", len(res), len(expected))
+ goto missing
}
for i := range res {
if v := res[i].(int); v != expected[i] {
- t.Errorf("res[%v] = %v, want %v", i, v, expected[i]);
- goto missing;
+ t.Errorf("res[%v] = %v, want %v", i, v, expected[i])
+ goto missing
}
}
- return;
+ return
missing:
- t.Errorf("res = %v\nwant %v", res, expected);
+ t.Errorf("res = %v\nwant %v", res, expected)
}
func TestFilter(t *testing.T) {
- ints := integerStream{};
- moreInts := Filter(ints, isAbove3).Iter();
- res := make([]interface{}, 3);
+ ints := integerStream{}
+ moreInts := Filter(ints, isAbove3).Iter()
+ res := make([]interface{}, 3)
for i := 0; i < 3; i++ {
res[i] = <-moreInts
}
- assertArraysAreEqual(t, res, []int{4, 5, 6});
+ assertArraysAreEqual(t, res, []int{4, 5, 6})
}
func TestFind(t *testing.T) {
- ints := integerStream{};
- first := Find(ints, isAbove3);
+ ints := integerStream{}
+ first := Find(ints, isAbove3)
if first.(int) != 4 {
t.Errorf("Find(ints, isAbove3) = %v, want 4", first)
}
}
func TestInject(t *testing.T) {
- res := Inject(oneToFive, 0, adder);
+ res := Inject(oneToFive, 0, adder)
if res.(int) != 15 {
t.Errorf("Inject(oneToFive, 0, adder) = %v, want 15", res)
}
}
func TestMap(t *testing.T) {
- res := Data(Map(Map(oneToFive, doubler), addOne));
- assertArraysAreEqual(t, res, []int{3, 5, 7, 9, 11});
+ res := Data(Map(Map(oneToFive, doubler), addOne))
+ assertArraysAreEqual(t, res, []int{3, 5, 7, 9, 11})
}
func TestPartition(t *testing.T) {
- ti, fi := Partition(oneToFive, isEven);
- assertArraysAreEqual(t, Data(ti), []int{2, 4});
- assertArraysAreEqual(t, Data(fi), []int{1, 3, 5});
+ ti, fi := Partition(oneToFive, isEven)
+ assertArraysAreEqual(t, Data(ti), []int{2, 4})
+ assertArraysAreEqual(t, Data(fi), []int{1, 3, 5})
}
func TestTake(t *testing.T) {
- res := Take(oneToFive, 2);
- assertArraysAreEqual(t, Data(res), []int{1, 2});
- assertArraysAreEqual(t, Data(res), []int{1, 2}); // second test to ensure that .Iter() returns a new channel
+ res := Take(oneToFive, 2)
+ assertArraysAreEqual(t, Data(res), []int{1, 2})
+ assertArraysAreEqual(t, Data(res), []int{1, 2}) // second test to ensure that .Iter() returns a new channel
// take none
- res = Take(oneToFive, 0);
- assertArraysAreEqual(t, Data(res), []int{});
+ res = Take(oneToFive, 0)
+ assertArraysAreEqual(t, Data(res), []int{})
// try to take more than available
- res = Take(oneToFive, 20);
- assertArraysAreEqual(t, Data(res), oneToFive);
+ res = Take(oneToFive, 20)
+ assertArraysAreEqual(t, Data(res), oneToFive)
}
func TestTakeWhile(t *testing.T) {
// take some
- res := TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) <= 3 });
- assertArraysAreEqual(t, Data(res), []int{1, 2, 3});
- assertArraysAreEqual(t, Data(res), []int{1, 2, 3}); // second test to ensure that .Iter() returns a new channel
+ res := TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) <= 3 })
+ assertArraysAreEqual(t, Data(res), []int{1, 2, 3})
+ assertArraysAreEqual(t, Data(res), []int{1, 2, 3}) // second test to ensure that .Iter() returns a new channel
// take none
- res = TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) > 3000 });
- assertArraysAreEqual(t, Data(res), []int{});
+ res = TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) > 3000 })
+ assertArraysAreEqual(t, Data(res), []int{})
// take all
- res = TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) < 3000 });
- assertArraysAreEqual(t, Data(res), oneToFive);
+ res = TakeWhile(oneToFive, func(v interface{}) bool { return v.(int) < 3000 })
+ assertArraysAreEqual(t, Data(res), oneToFive)
}
func TestDrop(t *testing.T) {
// drop none
- res := Drop(oneToFive, 0);
- assertArraysAreEqual(t, Data(res), oneToFive);
- assertArraysAreEqual(t, Data(res), oneToFive); // second test to ensure that .Iter() returns a new channel
+ res := Drop(oneToFive, 0)
+ assertArraysAreEqual(t, Data(res), oneToFive)
+ assertArraysAreEqual(t, Data(res), oneToFive) // second test to ensure that .Iter() returns a new channel
// drop some
- res = Drop(oneToFive, 2);
- assertArraysAreEqual(t, Data(res), []int{3, 4, 5});
- assertArraysAreEqual(t, Data(res), []int{3, 4, 5}); // second test to ensure that .Iter() returns a new channel
+ res = Drop(oneToFive, 2)
+ assertArraysAreEqual(t, Data(res), []int{3, 4, 5})
+ assertArraysAreEqual(t, Data(res), []int{3, 4, 5}) // second test to ensure that .Iter() returns a new channel
// drop more than available
- res = Drop(oneToFive, 88);
- assertArraysAreEqual(t, Data(res), []int{});
+ res = Drop(oneToFive, 88)
+ assertArraysAreEqual(t, Data(res), []int{})
}
func TestDropWhile(t *testing.T) {
// drop some
- res := DropWhile(oneToFive, func(v interface{}) bool { return v.(int) < 3 });
- assertArraysAreEqual(t, Data(res), []int{3, 4, 5});
- assertArraysAreEqual(t, Data(res), []int{3, 4, 5}); // second test to ensure that .Iter() returns a new channel
+ res := DropWhile(oneToFive, func(v interface{}) bool { return v.(int) < 3 })
+ assertArraysAreEqual(t, Data(res), []int{3, 4, 5})
+ assertArraysAreEqual(t, Data(res), []int{3, 4, 5}) // second test to ensure that .Iter() returns a new channel
// test case where all elements are dropped
- res = DropWhile(oneToFive, func(v interface{}) bool { return v.(int) < 100 });
- assertArraysAreEqual(t, Data(res), []int{});
+ res = DropWhile(oneToFive, func(v interface{}) bool { return v.(int) < 100 })
+ assertArraysAreEqual(t, Data(res), []int{})
// test case where none are dropped
- res = DropWhile(oneToFive, func(v interface{}) bool { return v.(int) > 1000 });
- assertArraysAreEqual(t, Data(res), oneToFive);
+ res = DropWhile(oneToFive, func(v interface{}) bool { return v.(int) > 1000 })
+ assertArraysAreEqual(t, Data(res), oneToFive)
}
func TestCycle(t *testing.T) {
- res := Cycle(oneToFive);
- exp := []int{1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4};
+ res := Cycle(oneToFive)
+ exp := []int{1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4}
// read the first nineteen values from the iterable
- out := make([]interface{}, 19);
+ out := make([]interface{}, 19)
for i, it := 0, res.Iter(); i < 19; i++ {
out[i] = <-it
}
- assertArraysAreEqual(t, out, exp);
+ assertArraysAreEqual(t, out, exp)
- res2 := Cycle(sixToTen);
- exp2 := []int{6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9};
+ res2 := Cycle(sixToTen)
+ exp2 := []int{6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9}
for i, it := 0, res2.Iter(); i < 19; i++ {
out[i] = <-it
}
- assertArraysAreEqual(t, out, exp2);
+ assertArraysAreEqual(t, out, exp2)
// ensure first iterator was not harmed
for i, it := 0, res.Iter(); i < 19; i++ {
out[i] = <-it
}
- assertArraysAreEqual(t, out, exp);
+ assertArraysAreEqual(t, out, exp)
}
func TestChain(t *testing.T) {
- exp := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
- res := Chain([]Iterable{oneToFive, sixToTen, elevenToTwenty});
- assertArraysAreEqual(t, Data(res), exp);
+ exp := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
+ res := Chain([]Iterable{oneToFive, sixToTen, elevenToTwenty})
+ assertArraysAreEqual(t, Data(res), exp)
// reusing the same iterator should produce the same result again
- assertArraysAreEqual(t, Data(res), exp);
+ assertArraysAreEqual(t, Data(res), exp)
// test short read from Chain
- i := 0;
- out := make([]interface{}, 4);
+ i := 0
+ out := make([]interface{}, 4)
for v := range res.Iter() {
- out[i] = v;
- i++;
+ out[i] = v
+ i++
if i == len(out) {
break
}
}
- assertArraysAreEqual(t, out, exp[0:4]);
+ assertArraysAreEqual(t, out, exp[0:4])
// test zero length array
- res = Chain([]Iterable{});
- assertArraysAreEqual(t, Data(res), []int{});
+ res = Chain([]Iterable{})
+ assertArraysAreEqual(t, Data(res), []int{})
}
func TestZipWith(t *testing.T) {
- exp := []int{7, 9, 11, 13, 15};
+ exp := []int{7, 9, 11, 13, 15}
// f with 2 args and 1 return value
- f := func(a, b interface{}) interface{} { return a.(int) + b.(int) };
- res := ZipWith2(f, oneToFive, sixToTen);
- assertArraysAreEqual(t, Data(res), exp);
+ f := func(a, b interface{}) interface{} { return a.(int) + b.(int) }
+ res := ZipWith2(f, oneToFive, sixToTen)
+ assertArraysAreEqual(t, Data(res), exp)
// test again to make sure returns new iter each time
- assertArraysAreEqual(t, Data(res), exp);
+ assertArraysAreEqual(t, Data(res), exp)
// test a function with 3 args
- f2 := func(a, b, c interface{}) interface{} { return a.(int) + b.(int) + c.(int) };
- res = ZipWith3(f2, oneToFive, sixToTen, oneToFive);
- exp = []int{8, 11, 14, 17, 20};
- assertArraysAreEqual(t, Data(res), exp);
+ f2 := func(a, b, c interface{}) interface{} { return a.(int) + b.(int) + c.(int) }
+ res = ZipWith3(f2, oneToFive, sixToTen, oneToFive)
+ exp = []int{8, 11, 14, 17, 20}
+ assertArraysAreEqual(t, Data(res), exp)
// test a function with multiple values returned
- f3 := func(a, b interface{}) interface{} { return ([]interface{}{a.(int) + 1, b.(int) + 1}) };
- res = ZipWith2(f3, oneToFive, sixToTen);
+ f3 := func(a, b interface{}) interface{} { return ([]interface{}{a.(int) + 1, b.(int) + 1}) }
+ res = ZipWith2(f3, oneToFive, sixToTen)
- exp2 := [][]int{[]int{2, 7}, []int{3, 8}, []int{4, 9}, []int{5, 10}, []int{6, 11}};
- i := 0;
+ exp2 := [][]int{[]int{2, 7}, []int{3, 8}, []int{4, 9}, []int{5, 10}, []int{6, 11}}
+ i := 0
for v := range res.Iter() {
- out := v.([]interface{});
- assertArraysAreEqual(t, out, exp2[i]);
- i++;
+ out := v.([]interface{})
+ assertArraysAreEqual(t, out, exp2[i])
+ i++
}
// test different length iterators--should stop after shortest is exhausted
- res = ZipWith2(f, elevenToTwenty, oneToFive);
- exp = []int{12, 14, 16, 18, 20};
- assertArraysAreEqual(t, Data(res), exp);
+ res = ZipWith2(f, elevenToTwenty, oneToFive)
+ exp = []int{12, 14, 16, 18, 20}
+ assertArraysAreEqual(t, Data(res), exp)
}
func TestSlice(t *testing.T) {
- out := Data(Slice(elevenToTwenty, 2, 6));
- exp := []int{13, 14, 15, 16};
- assertArraysAreEqual(t, out, exp);
+ out := Data(Slice(elevenToTwenty, 2, 6))
+ exp := []int{13, 14, 15, 16}
+ assertArraysAreEqual(t, out, exp)
// entire iterable
- out = Data(Slice(elevenToTwenty, 0, len(elevenToTwenty)));
- exp = []int{11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
- assertArraysAreEqual(t, out, exp);
+ out = Data(Slice(elevenToTwenty, 0, len(elevenToTwenty)))
+ exp = []int{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
+ assertArraysAreEqual(t, out, exp)
// empty slice at offset 0
- exp = []int{};
- out = Data(Slice(elevenToTwenty, 0, 0));
- assertArraysAreEqual(t, out, exp);
+ exp = []int{}
+ out = Data(Slice(elevenToTwenty, 0, 0))
+ assertArraysAreEqual(t, out, exp)
// slice upper bound exceeds length of iterable
- exp = []int{1, 2, 3, 4, 5};
- out = Data(Slice(oneToFive, 0, 88));
- assertArraysAreEqual(t, out, exp);
+ exp = []int{1, 2, 3, 4, 5}
+ out = Data(Slice(oneToFive, 0, 88))
+ assertArraysAreEqual(t, out, exp)
// slice upper bounce is lower than lower bound
- exp = []int{};
- out = Data(Slice(oneToFive, 93, 4));
- assertArraysAreEqual(t, out, exp);
+ exp = []int{}
+ out = Data(Slice(oneToFive, 93, 4))
+ assertArraysAreEqual(t, out, exp)
// slice lower bound is greater than len of iterable
- exp = []int{};
- out = Data(Slice(oneToFive, 93, 108));
- assertArraysAreEqual(t, out, exp);
+ exp = []int{}
+ out = Data(Slice(oneToFive, 93, 108))
+ assertArraysAreEqual(t, out, exp)
}
func TestRepeat(t *testing.T) {
- res := Repeat(42);
- i := 0;
+ res := Repeat(42)
+ i := 0
for v := range res.Iter() {
if v.(int) != 42 {
t.Fatal("Repeat returned the wrong value")
@@ -315,25 +315,25 @@ func TestRepeat(t *testing.T) {
if i == 9 {
break
}
- i++;
+ i++
}
}
func TestRepeatTimes(t *testing.T) {
- res := RepeatTimes(84, 9);
- exp := []int{84, 84, 84, 84, 84, 84, 84, 84, 84};
- assertArraysAreEqual(t, Data(res), exp);
- assertArraysAreEqual(t, Data(res), exp); // second time to ensure new iter is returned
+ res := RepeatTimes(84, 9)
+ exp := []int{84, 84, 84, 84, 84, 84, 84, 84, 84}
+ assertArraysAreEqual(t, Data(res), exp)
+ assertArraysAreEqual(t, Data(res), exp) // second time to ensure new iter is returned
// 0 repeat
- res = RepeatTimes(7, 0);
- exp = []int{};
- assertArraysAreEqual(t, Data(res), exp);
+ res = RepeatTimes(7, 0)
+ exp = []int{}
+ assertArraysAreEqual(t, Data(res), exp)
// negative repeat
- res = RepeatTimes(7, -3);
- exp = []int{};
- assertArraysAreEqual(t, Data(res), exp);
+ res = RepeatTimes(7, -3)
+ exp = []int{}
+ assertArraysAreEqual(t, Data(res), exp)
}
// a type that implements Key for ints
@@ -342,20 +342,20 @@ type intkey struct{}
func (v intkey) Key(a interface{}) interface{} {
return a
}
-func (v intkey) Equal(a, b interface{}) bool { return a.(int) == b.(int) }
+func (v intkey) Equal(a, b interface{}) bool { return a.(int) == b.(int) }
func TestGroupBy(t *testing.T) {
- in := IntArray{1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};
- exp := [][]int{[]int{1}, []int{2, 2}, []int{3, 3, 3}, []int{4, 4, 4, 4}, []int{5, 5, 5, 5, 5}};
- i := 0;
+ in := IntArray{1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5}
+ exp := [][]int{[]int{1}, []int{2, 2}, []int{3, 3, 3}, []int{4, 4, 4, 4}, []int{5, 5, 5, 5, 5}}
+ i := 0
for x := range GroupBy(in, intkey{}).Iter() {
- gr := x.(Group);
+ gr := x.(Group)
if gr.Key.(int) != i+1 {
t.Fatal("group key wrong; expected", i+1, "but got", gr.Key.(int))
}
- vals := Data(gr.Vals);
- assertArraysAreEqual(t, vals, exp[i]);
- i++;
+ vals := Data(gr.Vals)
+ assertArraysAreEqual(t, vals, exp[i])
+ i++
}
if i != 5 {
t.Fatal("did not return expected number of groups")
@@ -367,21 +367,21 @@ func TestGroupBy(t *testing.T) {
}
// test case with only uniques
- var out vector.Vector;
+ var out vector.Vector
for x := range GroupBy(elevenToTwenty, intkey{}).Iter() {
out.Push(x.(Group).Key)
}
- assertArraysAreEqual(t, out.Data(), elevenToTwenty);
+ assertArraysAreEqual(t, out.Data(), elevenToTwenty)
}
func TestUnique(t *testing.T) {
- in := IntArray([]int{1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5});
- exp := []int{1, 2, 3, 4, 5};
- res := Unique(in, intkey{});
- assertArraysAreEqual(t, Data(res), exp);
- assertArraysAreEqual(t, Data(res), exp); // second time to ensure new iter is returned
+ in := IntArray([]int{1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5})
+ exp := []int{1, 2, 3, 4, 5}
+ res := Unique(in, intkey{})
+ assertArraysAreEqual(t, Data(res), exp)
+ assertArraysAreEqual(t, Data(res), exp) // second time to ensure new iter is returned
// test case with only uniques
- res = Unique(elevenToTwenty, intkey{});
- assertArraysAreEqual(t, Data(res), elevenToTwenty);
+ res = Unique(elevenToTwenty, intkey{})
+ assertArraysAreEqual(t, Data(res), elevenToTwenty)
}
diff --git a/src/pkg/exp/nacl/av/av.go b/src/pkg/exp/nacl/av/av.go
index 4c76aeb30..0ed275760 100644
--- a/src/pkg/exp/nacl/av/av.go
+++ b/src/pkg/exp/nacl/av/av.go
@@ -12,12 +12,12 @@
package av
import (
- "exp/draw";
- "exp/nacl/srpc";
- "log";
- "os";
- "syscall";
- "unsafe";
+ "exp/draw"
+ "exp/nacl/srpc"
+ "log"
+ "os"
+ "syscall"
+ "unsafe"
)
var srpcEnabled = srpc.Enabled()
@@ -26,44 +26,44 @@ var srpcEnabled = srpc.Enabled()
// Subsystem values for Init.
const (
- SubsystemVideo = 1 << iota;
- SubsystemAudio;
- SubsystemEmbed;
+ SubsystemVideo = 1 << iota
+ SubsystemAudio
+ SubsystemEmbed
)
// SubsystemRawEvents;
// Audio formats.
const (
- AudioFormatStereo44K = iota;
- AudioFormatStereo48K;
+ AudioFormatStereo44K = iota
+ AudioFormatStereo48K
)
// A Window represents a connection to the Native Client window.
// It implements draw.Context.
type Window struct {
- Embedded bool; // running as part of a web page?
- *Image; // screen image
+ Embedded bool // running as part of a web page?
+ *Image // screen image
- mousec chan draw.Mouse;
- kbdc chan int;
- quitc chan bool;
- resizec chan bool;
+ mousec chan draw.Mouse
+ kbdc chan int
+ quitc chan bool
+ resizec chan bool
}
// *Window implements draw.Context
var _ draw.Context = (*Window)(nil)
-func (w *Window) KeyboardChan() <-chan int { return w.kbdc }
+func (w *Window) KeyboardChan() <-chan int { return w.kbdc }
func (w *Window) MouseChan() <-chan draw.Mouse {
return w.mousec
}
-func (w *Window) QuitChan() <-chan bool { return w.quitc }
+func (w *Window) QuitChan() <-chan bool { return w.quitc }
-func (w *Window) ResizeChan() <-chan bool { return w.resizec }
+func (w *Window) ResizeChan() <-chan bool { return w.resizec }
-func (w *Window) Screen() draw.Image { return w.Image }
+func (w *Window) Screen() draw.Image { return w.Image }
// Init initializes the Native Client subsystems specified by subsys.
// Init must be called before using any of the other functions
@@ -77,18 +77,18 @@ func (w *Window) Screen() draw.Image { return w.Image }
// If the SubsystemAudio flag is set, Init requests a connection to the
// audio device carrying 44 kHz 16-bit stereo PCM audio samples.
func Init(subsys int, dx, dy int) (*Window, os.Error) {
- xsubsys := subsys;
+ xsubsys := subsys
if srpcEnabled {
- waitBridge();
- xsubsys &^= SubsystemVideo | SubsystemEmbed;
+ waitBridge()
+ xsubsys &^= SubsystemVideo | SubsystemEmbed
}
if xsubsys&SubsystemEmbed != 0 {
return nil, os.NewError("not embedded")
}
- w := new(Window);
- err := multimediaInit(xsubsys);
+ w := new(Window)
+ err := multimediaInit(xsubsys)
if err != nil {
return nil, err
}
@@ -97,33 +97,33 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
if dx, dy, err = videoInit(dx, dy); err != nil {
return nil, err
}
- w.Image = newImage(dx, dy, bridge.pixel);
- w.resizec = make(chan bool, 64);
- w.kbdc = make(chan int, 64);
- w.mousec = make(chan draw.Mouse, 64);
- w.quitc = make(chan bool);
+ w.Image = newImage(dx, dy, bridge.pixel)
+ w.resizec = make(chan bool, 64)
+ w.kbdc = make(chan int, 64)
+ w.mousec = make(chan draw.Mouse, 64)
+ w.quitc = make(chan bool)
}
if subsys&SubsystemAudio != 0 {
- var n int;
+ var n int
if n, err = audioInit(AudioFormatStereo44K, 2048); err != nil {
return nil, err
}
- println("audio", n);
+ println("audio", n)
}
if subsys&SubsystemVideo != 0 {
go w.readEvents()
}
- return w, nil;
+ return w, nil
}
func (w *Window) FlushImage() {
if w.Image == nil {
return
}
- videoUpdate(w.Image.Linear);
+ videoUpdate(w.Image.Linear)
}
func multimediaInit(subsys int) (err os.Error) {
@@ -132,45 +132,45 @@ func multimediaInit(subsys int) (err os.Error) {
func videoInit(dx, dy int) (ndx, ndy int, err os.Error) {
if srpcEnabled {
- bridge.share.ready = 1;
- return int(bridge.share.width), int(bridge.share.height), nil;
+ bridge.share.ready = 1
+ return int(bridge.share.width), int(bridge.share.height), nil
}
if e := syscall.VideoInit(dx, dy); e != 0 {
return 0, 0, os.NewSyscallError("video_init", int(e))
}
- return dx, dy, nil;
+ return dx, dy, nil
}
func videoUpdate(data []Color) (err os.Error) {
if srpcEnabled {
- bridge.flushRPC.Call("upcall", nil);
- return;
+ bridge.flushRPC.Call("upcall", nil)
+ return
}
- return os.NewSyscallError("video_update", syscall.VideoUpdate((*uint32)(&data[0])));
+ return os.NewSyscallError("video_update", syscall.VideoUpdate((*uint32)(&data[0])))
}
var noEvents = os.NewError("no events")
func videoPollEvent(ev []byte) (err os.Error) {
if srpcEnabled {
- r := bridge.share.eq.ri;
+ r := bridge.share.eq.ri
if r == bridge.share.eq.wi {
return noEvents
}
- copy(ev, &bridge.share.eq.event[r]);
- bridge.share.eq.ri = (r + 1) % eqsize;
- return nil;
+ copy(ev, &bridge.share.eq.event[r])
+ bridge.share.eq.ri = (r + 1) % eqsize
+ return nil
}
- return os.NewSyscallError("video_poll_event", syscall.VideoPollEvent(&ev[0]));
+ return os.NewSyscallError("video_poll_event", syscall.VideoPollEvent(&ev[0]))
}
func audioInit(fmt int, want int) (got int, err os.Error) {
- var x int;
- e := syscall.AudioInit(fmt, want, &x);
+ var x int
+ e := syscall.AudioInit(fmt, want, &x)
if e == 0 {
return x, nil
}
- return 0, os.NewSyscallError("audio_init", e);
+ return 0, os.NewSyscallError("audio_init", e)
}
var audioSize uintptr
@@ -185,8 +185,8 @@ var audioSize uintptr
//
func AudioStream(data []uint16) (nextSize int, err os.Error) {
if audioSize == 0 {
- e := os.NewSyscallError("audio_stream", syscall.AudioStream(nil, &audioSize));
- return int(audioSize), e;
+ e := os.NewSyscallError("audio_stream", syscall.AudioStream(nil, &audioSize))
+ return int(audioSize), e
}
if data == nil {
return int(audioSize), nil
@@ -194,19 +194,19 @@ func AudioStream(data []uint16) (nextSize int, err os.Error) {
if uintptr(len(data))*2 != audioSize {
log.Stdoutf("invalid audio size want %d got %d", audioSize, len(data))
}
- e := os.NewSyscallError("audio_stream", syscall.AudioStream(&data[0], &audioSize));
- return int(audioSize), e;
+ e := os.NewSyscallError("audio_stream", syscall.AudioStream(&data[0], &audioSize))
+ return int(audioSize), e
}
// Synchronization structure to wait for bridge to become ready.
var bridge struct {
- c chan bool;
- displayFd int;
- rpcFd int;
- share *videoShare;
- pixel []Color;
- client *srpc.Client;
- flushRPC *srpc.RPC;
+ c chan bool
+ displayFd int
+ rpcFd int
+ share *videoShare
+ pixel []Color
+ client *srpc.Client
+ flushRPC *srpc.RPC
}
// Wait for bridge to become ready.
@@ -214,29 +214,29 @@ var bridge struct {
// so this blocks. Once the bridge is ready, multimediaBridge.Run
// will drop a value into the channel. Then any calls
// to waitBridge will finish, taking the value out and immediately putting it back.
-func waitBridge() { bridge.c <- <-bridge.c }
+func waitBridge() { bridge.c <- <-bridge.c }
const eqsize = 64
// Data structure shared with host via mmap.
type videoShare struct {
- revision int32; // definition below is rev 100 unless noted
- mapSize int32;
+ revision int32 // definition below is rev 100 unless noted
+ mapSize int32
// event queue
- eq struct {
- ri uint32; // read index [0,eqsize)
- wi uint32; // write index [0,eqsize)
- eof int32;
- event [eqsize][64]byte;
- };
+ eq struct {
+ ri uint32 // read index [0,eqsize)
+ wi uint32 // write index [0,eqsize)
+ eof int32
+ event [eqsize][64]byte
+ }
// now unused
- _, _, _, _ int32;
+ _, _, _, _ int32
// video backing store information
- width, height, _, size int32;
- ready int32; // rev 0x101
+ width, height, _, size int32
+ ready int32 // rev 0x101
}
// The frame buffer data is videoShareSize bytes after
@@ -249,10 +249,10 @@ type multimediaBridge struct{}
// one to mmap to get the display memory, and another to use for SRPCs back
// to the main process.
func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
- bridge.displayFd = arg[0].(int);
- bridge.rpcFd = arg[1].(int);
+ bridge.displayFd = arg[0].(int)
+ bridge.rpcFd = arg[1].(int)
- var st syscall.Stat_t;
+ var st syscall.Stat_t
if errno := syscall.Fstat(bridge.displayFd, &st); errno != 0 {
log.Exitf("mmbridge stat display: %s", os.Errno(errno))
}
@@ -263,36 +263,36 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
syscall.PROT_READ|syscall.PROT_WRITE,
syscall.MAP_SHARED,
uintptr(bridge.displayFd),
- 0);
+ 0)
if errno != 0 {
log.Exitf("mmap display: %s", os.Errno(errno))
}
- bridge.share = (*videoShare)(unsafe.Pointer(addr));
+ bridge.share = (*videoShare)(unsafe.Pointer(addr))
// Overestimate frame buffer size
// (must use a compile-time constant)
// and then reslice. 256 megapixels (1 GB) should be enough.
- fb := (*[256 * 1024 * 1024]Color)(unsafe.Pointer(addr + videoShareSize));
- bridge.pixel = fb[0 : (st.Size-videoShareSize)/4];
+ fb := (*[256 * 1024 * 1024]Color)(unsafe.Pointer(addr + videoShareSize))
+ bridge.pixel = fb[0 : (st.Size-videoShareSize)/4]
// Configure RPC connection back to client.
- var err os.Error;
- bridge.client, err = srpc.NewClient(bridge.rpcFd);
+ var err os.Error
+ bridge.client, err = srpc.NewClient(bridge.rpcFd)
if err != nil {
log.Exitf("NewClient: %s", err)
}
- bridge.flushRPC = bridge.client.NewRPC(nil);
+ bridge.flushRPC = bridge.client.NewRPC(nil)
// Notify waiters that the bridge is ready.
- println("bridged", bridge.share.revision);
- bridge.c <- true;
+ println("bridged", bridge.share.revision)
+ bridge.c <- true
- return srpc.OK;
+ return srpc.OK
}
func init() {
- bridge.c = make(chan bool, 1);
+ bridge.c = make(chan bool, 1)
if srpcEnabled {
srpc.Add("nacl_multimedia_bridge", "hh:", multimediaBridge{})
}
diff --git a/src/pkg/exp/nacl/av/event.go b/src/pkg/exp/nacl/av/event.go
index 32d9e98c5..11405c980 100644
--- a/src/pkg/exp/nacl/av/event.go
+++ b/src/pkg/exp/nacl/av/event.go
@@ -10,365 +10,365 @@
package av
import (
- "encoding/binary";
- "exp/draw";
- "log";
- "os";
- "time";
+ "encoding/binary"
+ "exp/draw"
+ "log"
+ "os"
+ "time"
)
// An eventType identifies the type of a Native Client Event.
type eventType uint8
const (
- eventActive = 1 + iota;
- eventExpose;
- eventKeyDown;
- eventKeyUp;
- eventMouseMotion;
- eventMouseButtonDown;
- eventMouseButtonUp;
- eventQuit;
- eventUnsupported;
+ eventActive = 1 + iota
+ eventExpose
+ eventKeyDown
+ eventKeyUp
+ eventMouseMotion
+ eventMouseButtonDown
+ eventMouseButtonUp
+ eventQuit
+ eventUnsupported
)
// A key represents a key on a keyboard.
type key uint16
const (
- keyUnknown = 0;
- keyFirst = 0;
- keyBackspace = 8;
- keyTab = 9;
- keyClear = 12;
- keyReturn = 13;
- keyPause = 19;
- keyEscape = 27;
- keySpace = 32;
- keyExclaim = 33;
- keyQuotedbl = 34;
- keyHash = 35;
- keyDollar = 36;
- keyAmpersand = 38;
- keyQuote = 39;
- keyLeftparen = 40;
- keyRightparen = 41;
- keyAsterisk = 42;
- keyPlus = 43;
- keyComma = 44;
- keyMinus = 45;
- keyPeriod = 46;
- keySlash = 47;
- key0 = 48;
- key1 = 49;
- key2 = 50;
- key3 = 51;
- key4 = 52;
- key5 = 53;
- key6 = 54;
- key7 = 55;
- key8 = 56;
- key9 = 57;
- keyColon = 58;
- keySemicolon = 59;
- keyLess = 60;
- keyEquals = 61;
- keyGreater = 62;
- keyQuestion = 63;
- keyAt = 64;
- keyLeftbracket = 91;
- keyBackslash = 92;
- keyRightbracket = 93;
- keyCaret = 94;
- keyUnderscore = 95;
- keyBackquote = 96;
- keyA = 97;
- keyB = 98;
- keyC = 99;
- keyD = 100;
- keyE = 101;
- keyF = 102;
- keyG = 103;
- keyH = 104;
- keyI = 105;
- keyJ = 106;
- keyK = 107;
- keyL = 108;
- keyM = 109;
- keyN = 110;
- keyO = 111;
- keyP = 112;
- keyQ = 113;
- keyR = 114;
- keyS = 115;
- keyT = 116;
- keyU = 117;
- keyV = 118;
- keyW = 119;
- keyX = 120;
- keyY = 121;
- keyZ = 122;
- keyDelete = 127;
- keyWorld0 = 160;
- keyWorld1 = 161;
- keyWorld2 = 162;
- keyWorld3 = 163;
- keyWorld4 = 164;
- keyWorld5 = 165;
- keyWorld6 = 166;
- keyWorld7 = 167;
- keyWorld8 = 168;
- keyWorld9 = 169;
- keyWorld10 = 170;
- keyWorld11 = 171;
- keyWorld12 = 172;
- keyWorld13 = 173;
- keyWorld14 = 174;
- keyWorld15 = 175;
- keyWorld16 = 176;
- keyWorld17 = 177;
- keyWorld18 = 178;
- keyWorld19 = 179;
- keyWorld20 = 180;
- keyWorld21 = 181;
- keyWorld22 = 182;
- keyWorld23 = 183;
- keyWorld24 = 184;
- keyWorld25 = 185;
- keyWorld26 = 186;
- keyWorld27 = 187;
- keyWorld28 = 188;
- keyWorld29 = 189;
- keyWorld30 = 190;
- keyWorld31 = 191;
- keyWorld32 = 192;
- keyWorld33 = 193;
- keyWorld34 = 194;
- keyWorld35 = 195;
- keyWorld36 = 196;
- keyWorld37 = 197;
- keyWorld38 = 198;
- keyWorld39 = 199;
- keyWorld40 = 200;
- keyWorld41 = 201;
- keyWorld42 = 202;
- keyWorld43 = 203;
- keyWorld44 = 204;
- keyWorld45 = 205;
- keyWorld46 = 206;
- keyWorld47 = 207;
- keyWorld48 = 208;
- keyWorld49 = 209;
- keyWorld50 = 210;
- keyWorld51 = 211;
- keyWorld52 = 212;
- keyWorld53 = 213;
- keyWorld54 = 214;
- keyWorld55 = 215;
- keyWorld56 = 216;
- keyWorld57 = 217;
- keyWorld58 = 218;
- keyWorld59 = 219;
- keyWorld60 = 220;
- keyWorld61 = 221;
- keyWorld62 = 222;
- keyWorld63 = 223;
- keyWorld64 = 224;
- keyWorld65 = 225;
- keyWorld66 = 226;
- keyWorld67 = 227;
- keyWorld68 = 228;
- keyWorld69 = 229;
- keyWorld70 = 230;
- keyWorld71 = 231;
- keyWorld72 = 232;
- keyWorld73 = 233;
- keyWorld74 = 234;
- keyWorld75 = 235;
- keyWorld76 = 236;
- keyWorld77 = 237;
- keyWorld78 = 238;
- keyWorld79 = 239;
- keyWorld80 = 240;
- keyWorld81 = 241;
- keyWorld82 = 242;
- keyWorld83 = 243;
- keyWorld84 = 244;
- keyWorld85 = 245;
- keyWorld86 = 246;
- keyWorld87 = 247;
- keyWorld88 = 248;
- keyWorld89 = 249;
- keyWorld90 = 250;
- keyWorld91 = 251;
- keyWorld92 = 252;
- keyWorld93 = 253;
- keyWorld94 = 254;
- keyWorld95 = 255;
+ keyUnknown = 0
+ keyFirst = 0
+ keyBackspace = 8
+ keyTab = 9
+ keyClear = 12
+ keyReturn = 13
+ keyPause = 19
+ keyEscape = 27
+ keySpace = 32
+ keyExclaim = 33
+ keyQuotedbl = 34
+ keyHash = 35
+ keyDollar = 36
+ keyAmpersand = 38
+ keyQuote = 39
+ keyLeftparen = 40
+ keyRightparen = 41
+ keyAsterisk = 42
+ keyPlus = 43
+ keyComma = 44
+ keyMinus = 45
+ keyPeriod = 46
+ keySlash = 47
+ key0 = 48
+ key1 = 49
+ key2 = 50
+ key3 = 51
+ key4 = 52
+ key5 = 53
+ key6 = 54
+ key7 = 55
+ key8 = 56
+ key9 = 57
+ keyColon = 58
+ keySemicolon = 59
+ keyLess = 60
+ keyEquals = 61
+ keyGreater = 62
+ keyQuestion = 63
+ keyAt = 64
+ keyLeftbracket = 91
+ keyBackslash = 92
+ keyRightbracket = 93
+ keyCaret = 94
+ keyUnderscore = 95
+ keyBackquote = 96
+ keyA = 97
+ keyB = 98
+ keyC = 99
+ keyD = 100
+ keyE = 101
+ keyF = 102
+ keyG = 103
+ keyH = 104
+ keyI = 105
+ keyJ = 106
+ keyK = 107
+ keyL = 108
+ keyM = 109
+ keyN = 110
+ keyO = 111
+ keyP = 112
+ keyQ = 113
+ keyR = 114
+ keyS = 115
+ keyT = 116
+ keyU = 117
+ keyV = 118
+ keyW = 119
+ keyX = 120
+ keyY = 121
+ keyZ = 122
+ keyDelete = 127
+ keyWorld0 = 160
+ keyWorld1 = 161
+ keyWorld2 = 162
+ keyWorld3 = 163
+ keyWorld4 = 164
+ keyWorld5 = 165
+ keyWorld6 = 166
+ keyWorld7 = 167
+ keyWorld8 = 168
+ keyWorld9 = 169
+ keyWorld10 = 170
+ keyWorld11 = 171
+ keyWorld12 = 172
+ keyWorld13 = 173
+ keyWorld14 = 174
+ keyWorld15 = 175
+ keyWorld16 = 176
+ keyWorld17 = 177
+ keyWorld18 = 178
+ keyWorld19 = 179
+ keyWorld20 = 180
+ keyWorld21 = 181
+ keyWorld22 = 182
+ keyWorld23 = 183
+ keyWorld24 = 184
+ keyWorld25 = 185
+ keyWorld26 = 186
+ keyWorld27 = 187
+ keyWorld28 = 188
+ keyWorld29 = 189
+ keyWorld30 = 190
+ keyWorld31 = 191
+ keyWorld32 = 192
+ keyWorld33 = 193
+ keyWorld34 = 194
+ keyWorld35 = 195
+ keyWorld36 = 196
+ keyWorld37 = 197
+ keyWorld38 = 198
+ keyWorld39 = 199
+ keyWorld40 = 200
+ keyWorld41 = 201
+ keyWorld42 = 202
+ keyWorld43 = 203
+ keyWorld44 = 204
+ keyWorld45 = 205
+ keyWorld46 = 206
+ keyWorld47 = 207
+ keyWorld48 = 208
+ keyWorld49 = 209
+ keyWorld50 = 210
+ keyWorld51 = 211
+ keyWorld52 = 212
+ keyWorld53 = 213
+ keyWorld54 = 214
+ keyWorld55 = 215
+ keyWorld56 = 216
+ keyWorld57 = 217
+ keyWorld58 = 218
+ keyWorld59 = 219
+ keyWorld60 = 220
+ keyWorld61 = 221
+ keyWorld62 = 222
+ keyWorld63 = 223
+ keyWorld64 = 224
+ keyWorld65 = 225
+ keyWorld66 = 226
+ keyWorld67 = 227
+ keyWorld68 = 228
+ keyWorld69 = 229
+ keyWorld70 = 230
+ keyWorld71 = 231
+ keyWorld72 = 232
+ keyWorld73 = 233
+ keyWorld74 = 234
+ keyWorld75 = 235
+ keyWorld76 = 236
+ keyWorld77 = 237
+ keyWorld78 = 238
+ keyWorld79 = 239
+ keyWorld80 = 240
+ keyWorld81 = 241
+ keyWorld82 = 242
+ keyWorld83 = 243
+ keyWorld84 = 244
+ keyWorld85 = 245
+ keyWorld86 = 246
+ keyWorld87 = 247
+ keyWorld88 = 248
+ keyWorld89 = 249
+ keyWorld90 = 250
+ keyWorld91 = 251
+ keyWorld92 = 252
+ keyWorld93 = 253
+ keyWorld94 = 254
+ keyWorld95 = 255
// Numeric keypad
- keyKp0 = 256;
- keyKp1 = 257;
- keyKp2 = 258;
- keyKp3 = 259;
- keyKp4 = 260;
- keyKp5 = 261;
- keyKp6 = 262;
- keyKp7 = 263;
- keyKp8 = 264;
- keyKp9 = 265;
- keyKpPeriod = 266;
- keyKpDivide = 267;
- keyKpMultiply = 268;
- keyKpMinus = 269;
- keyKpPlus = 270;
- keyKpEnter = 271;
- keyKpEquals = 272;
+ keyKp0 = 256
+ keyKp1 = 257
+ keyKp2 = 258
+ keyKp3 = 259
+ keyKp4 = 260
+ keyKp5 = 261
+ keyKp6 = 262
+ keyKp7 = 263
+ keyKp8 = 264
+ keyKp9 = 265
+ keyKpPeriod = 266
+ keyKpDivide = 267
+ keyKpMultiply = 268
+ keyKpMinus = 269
+ keyKpPlus = 270
+ keyKpEnter = 271
+ keyKpEquals = 272
// Arrow & insert/delete pad
- keyUp = 273;
- keyDown = 274;
- keyRight = 275;
- keyLeft = 276;
- keyInsert = 277;
- keyHome = 278;
- keyEnd = 279;
- keyPageup = 280;
- keyPagedown = 281;
+ keyUp = 273
+ keyDown = 274
+ keyRight = 275
+ keyLeft = 276
+ keyInsert = 277
+ keyHome = 278
+ keyEnd = 279
+ keyPageup = 280
+ keyPagedown = 281
// Function keys
- keyF1 = 282;
- keyF2 = 283;
- keyF3 = 284;
- keyF4 = 285;
- keyF5 = 286;
- keyF6 = 287;
- keyF7 = 288;
- keyF8 = 289;
- keyF9 = 290;
- keyF10 = 291;
- keyF11 = 292;
- keyF12 = 293;
- keyF13 = 294;
- keyF14 = 295;
- keyF15 = 296;
+ keyF1 = 282
+ keyF2 = 283
+ keyF3 = 284
+ keyF4 = 285
+ keyF5 = 286
+ keyF6 = 287
+ keyF7 = 288
+ keyF8 = 289
+ keyF9 = 290
+ keyF10 = 291
+ keyF11 = 292
+ keyF12 = 293
+ keyF13 = 294
+ keyF14 = 295
+ keyF15 = 296
// Modifier keys
- keyNumlock = 300;
- keyCapslock = 301;
- keyScrollock = 302;
- keyRshift = 303;
- keyLshift = 304;
- keyRctrl = 305;
- keyLctrl = 306;
- keyRalt = 307;
- keyLalt = 308;
- keyRmeta = 309;
- keyLmeta = 310;
- keyLsuper = 311;
- keyRsuper = 312;
- keyMode = 313;
- keyCompose = 314;
+ keyNumlock = 300
+ keyCapslock = 301
+ keyScrollock = 302
+ keyRshift = 303
+ keyLshift = 304
+ keyRctrl = 305
+ keyLctrl = 306
+ keyRalt = 307
+ keyLalt = 308
+ keyRmeta = 309
+ keyLmeta = 310
+ keyLsuper = 311
+ keyRsuper = 312
+ keyMode = 313
+ keyCompose = 314
// Misc keys
- keyHelp = 315;
- keyPrint = 316;
- keySysreq = 317;
- keyBreak = 318;
- keyMenu = 319;
- keyPower = 320;
- keyEuro = 321;
- keyUndo = 322;
+ keyHelp = 315
+ keyPrint = 316
+ keySysreq = 317
+ keyBreak = 318
+ keyMenu = 319
+ keyPower = 320
+ keyEuro = 321
+ keyUndo = 322
// Add any other keys here
- keyLast;
+ keyLast
)
// A keymod is a set of bit flags
type keymod uint16
const (
- keymodNone = 0x0000;
- keymodLshift = 0x0001;
- keymodRshift = 0x0002;
- keymodLctrl = 0x0040;
- keymodRctrl = 0x0080;
- keymodLalt = 0x0100;
- keymodRalt = 0x0200;
- keymodLmeta = 0x0400;
- keymodRmeta = 0x0800;
- keymodNum = 0x1000;
- keymodCaps = 0x2000;
- keymodMode = 0x4000;
- keymodReserved = 0x8000;
+ keymodNone = 0x0000
+ keymodLshift = 0x0001
+ keymodRshift = 0x0002
+ keymodLctrl = 0x0040
+ keymodRctrl = 0x0080
+ keymodLalt = 0x0100
+ keymodRalt = 0x0200
+ keymodLmeta = 0x0400
+ keymodRmeta = 0x0800
+ keymodNum = 0x1000
+ keymodCaps = 0x2000
+ keymodMode = 0x4000
+ keymodReserved = 0x8000
)
const (
- mouseButtonLeft = 1;
- mouseButtonMiddle = 2;
- mouseButtonRight = 3;
- mouseScrollUp = 4;
- mouseScrollDown = 5;
+ mouseButtonLeft = 1
+ mouseButtonMiddle = 2
+ mouseButtonRight = 3
+ mouseScrollUp = 4
+ mouseScrollDown = 5
)
const (
- mouseStateLeftButtonPressed = 1;
- mouseStateMiddleButtonPressed = 2;
- mouseStateRightButtonPressed = 4;
+ mouseStateLeftButtonPressed = 1
+ mouseStateMiddleButtonPressed = 2
+ mouseStateRightButtonPressed = 4
)
const (
- activeMouse = 1; // mouse leaving/entering
- activeInputFocus = 2; // input focus lost/restored
- activeApplication = 4; // application minimized/restored
+ activeMouse = 1 // mouse leaving/entering
+ activeInputFocus = 2 // input focus lost/restored
+ activeApplication = 4 // application minimized/restored
)
const maxEventBytes = 64
type activeEvent struct {
- EventType eventType;
- Gain uint8;
- State uint8;
+ EventType eventType
+ Gain uint8
+ State uint8
}
type exposeEvent struct {
- EventType eventType;
+ EventType eventType
}
type keyboardEvent struct {
- EventType eventType;
- Device uint8;
- State uint8;
- Pad uint8;
- ScanCode uint8;
- Pad1 uint8;
- Key key;
- Mod keymod;
- Unicode uint16;
+ EventType eventType
+ Device uint8
+ State uint8
+ Pad uint8
+ ScanCode uint8
+ Pad1 uint8
+ Key key
+ Mod keymod
+ Unicode uint16
}
type mouseMotionEvent struct {
- EventType eventType;
- Device uint8;
- Buttons uint8;
- Pad uint8;
- X uint16;
- Y uint16;
- Xrel int16;
- Yrel int16;
+ EventType eventType
+ Device uint8
+ Buttons uint8
+ Pad uint8
+ X uint16
+ Y uint16
+ Xrel int16
+ Yrel int16
}
type mouseButtonEvent struct {
- EventType eventType;
- Device uint8;
- Button uint8;
- State uint8;
- X uint16;
- Y uint16;
+ EventType eventType
+ Device uint8
+ Button uint8
+ State uint8
+ X uint16
+ Y uint16
}
type quitEvent struct {
- EventType eventType;
+ EventType eventType
}
type syncEvent struct{}
@@ -378,64 +378,64 @@ type event interface{}
type reader []byte
func (r *reader) Read(p []byte) (n int, err os.Error) {
- b := *r;
+ b := *r
if len(b) == 0 && len(p) > 0 {
return 0, os.EOF
}
- n = copy(p, b);
- *r = b[n:];
- return;
+ n = copy(p, b)
+ *r = b[n:]
+ return
}
func (w *Window) readEvents() {
- buf := make([]byte, maxEventBytes);
- clean := false;
+ buf := make([]byte, maxEventBytes)
+ clean := false
var (
- ea *activeEvent;
- ee *exposeEvent;
- ke *keyboardEvent;
- mme *mouseMotionEvent;
- mbe *mouseButtonEvent;
- qe *quitEvent;
+ ea *activeEvent
+ ee *exposeEvent
+ ke *keyboardEvent
+ mme *mouseMotionEvent
+ mbe *mouseButtonEvent
+ qe *quitEvent
)
- var m draw.Mouse;
+ var m draw.Mouse
for {
if err := videoPollEvent(buf); err != nil {
if !clean {
clean = w.resizec <- false
}
- time.Sleep(10e6); // 10ms
- continue;
+ time.Sleep(10e6) // 10ms
+ continue
}
- clean = false;
- var e event;
+ clean = false
+ var e event
switch buf[0] {
default:
- log.Stdout("unsupported event type", buf[0]);
- continue;
+ log.Stdout("unsupported event type", buf[0])
+ continue
case eventActive:
- ea = new(activeEvent);
- e = ea;
+ ea = new(activeEvent)
+ e = ea
case eventExpose:
- ee = new(exposeEvent);
- e = ee;
+ ee = new(exposeEvent)
+ e = ee
case eventKeyDown, eventKeyUp:
- ke = new(keyboardEvent);
- e = ke;
+ ke = new(keyboardEvent)
+ e = ke
case eventMouseMotion:
- mme = new(mouseMotionEvent);
- e = mme;
+ mme = new(mouseMotionEvent)
+ e = mme
case eventMouseButtonDown, eventMouseButtonUp:
- mbe = new(mouseButtonEvent);
- e = mbe;
+ mbe = new(mouseButtonEvent)
+ e = mbe
case eventQuit:
- qe = new(quitEvent);
- e = qe;
+ qe = new(quitEvent)
+ e = qe
}
- r := reader(buf);
+ r := reader(buf)
if err := binary.Read(&r, binary.LittleEndian, e); err != nil {
- log.Stdout("unpacking %T event: %s", e, err);
- continue;
+ log.Stdout("unpacking %T event: %s", e, err)
+ continue
}
// log.Stdoutf("%#v\n", e);
switch buf[0] {
@@ -446,25 +446,25 @@ func (w *Window) readEvents() {
case eventKeyUp:
w.kbdc <- -int(ke.Key)
case eventMouseMotion:
- m.X = int(mme.X);
- m.Y = int(mme.Y);
- m.Buttons = int(mme.Buttons);
- m.Nsec = time.Nanoseconds();
- _ = w.mousec <- m;
+ m.X = int(mme.X)
+ m.Y = int(mme.Y)
+ m.Buttons = int(mme.Buttons)
+ m.Nsec = time.Nanoseconds()
+ _ = w.mousec <- m
case eventMouseButtonDown:
- m.X = int(mbe.X);
- m.Y = int(mbe.Y);
+ m.X = int(mbe.X)
+ m.Y = int(mbe.Y)
// TODO(rsc): Remove uint cast once 8g bug is fixed.
- m.Buttons |= 1 << uint(mbe.Button-1);
- m.Nsec = time.Nanoseconds();
- _ = w.mousec <- m;
+ m.Buttons |= 1 << uint(mbe.Button-1)
+ m.Nsec = time.Nanoseconds()
+ _ = w.mousec <- m
case eventMouseButtonUp:
- m.X = int(mbe.X);
- m.Y = int(mbe.Y);
+ m.X = int(mbe.X)
+ m.Y = int(mbe.Y)
// TODO(rsc): Remove uint cast once 8g bug is fixed.
- m.Buttons &^= 1 << uint(mbe.Button-1);
- m.Nsec = time.Nanoseconds();
- _ = w.mousec <- m;
+ m.Buttons &^= 1 << uint(mbe.Button-1)
+ m.Nsec = time.Nanoseconds()
+ _ = w.mousec <- m
case eventQuit:
w.quitc <- true
}
diff --git a/src/pkg/exp/nacl/av/image.go b/src/pkg/exp/nacl/av/image.go
index 8e096d165..f69f94a65 100644
--- a/src/pkg/exp/nacl/av/image.go
+++ b/src/pkg/exp/nacl/av/image.go
@@ -5,7 +5,7 @@
package av
import (
- "image";
+ "image"
)
// Native Client image format:
@@ -16,41 +16,41 @@ import (
// linear slice or as a two-dimensional slice of slices.
// Image implements image.Image.
type Image struct {
- Linear []Color;
- Pixel [][]Color;
+ Linear []Color
+ Pixel [][]Color
}
var _ image.Image = (*Image)(nil)
-func (m *Image) ColorModel() image.ColorModel { return ColorModel }
+func (m *Image) ColorModel() image.ColorModel { return ColorModel }
func (m *Image) Width() int {
if len(m.Pixel) == 0 {
return 0
}
- return len(m.Pixel[0]);
+ return len(m.Pixel[0])
}
-func (m *Image) Height() int { return len(m.Pixel) }
+func (m *Image) Height() int { return len(m.Pixel) }
-func (m *Image) At(x, y int) image.Color { return m.Pixel[y][x] }
+func (m *Image) At(x, y int) image.Color { return m.Pixel[y][x] }
func (m *Image) Set(x, y int, color image.Color) {
if c, ok := color.(Color); ok {
m.Pixel[y][x] = c
}
- m.Pixel[y][x] = makeColor(color.RGBA());
+ m.Pixel[y][x] = makeColor(color.RGBA())
}
func newImage(dx, dy int, linear []Color) *Image {
if linear == nil {
linear = make([]Color, dx*dy)
}
- pix := make([][]Color, dy);
+ pix := make([][]Color, dy)
for i := range pix {
pix[i] = linear[dx*i : dx*(i+1)]
}
- return &Image{linear, pix};
+ return &Image{linear, pix}
}
// A Color represents a Native Client color value,
@@ -58,20 +58,20 @@ func newImage(dx, dy int, linear []Color) *Image {
type Color uint32
func (p Color) RGBA() (r, g, b, a uint32) {
- x := uint32(p);
- a = x >> 24;
- a |= a << 8;
- a |= a << 16;
- r = (x >> 16) & 0xFF;
- r |= r << 8;
- r |= r << 16;
- g = (x >> 8) & 0xFF;
- g |= g << 8;
- g |= g << 16;
- b = x & 0xFF;
- b |= b << 8;
- b |= b << 16;
- return;
+ x := uint32(p)
+ a = x >> 24
+ a |= a << 8
+ a |= a << 16
+ r = (x >> 16) & 0xFF
+ r |= r << 8
+ r |= r << 16
+ g = (x >> 8) & 0xFF
+ g |= g << 8
+ g |= g << 16
+ b = x & 0xFF
+ b |= b << 8
+ b |= b << 16
+ return
}
func makeColor(r, g, b, a uint32) Color {
@@ -82,7 +82,7 @@ func toColor(color image.Color) image.Color {
if c, ok := color.(Color); ok {
return c
}
- return makeColor(color.RGBA());
+ return makeColor(color.RGBA())
}
// ColorModel is the color model corresponding to the Native Client Color.
diff --git a/src/pkg/exp/nacl/srpc/client.go b/src/pkg/exp/nacl/srpc/client.go
index d19b48888..9e47376f8 100644
--- a/src/pkg/exp/nacl/srpc/client.go
+++ b/src/pkg/exp/nacl/srpc/client.go
@@ -6,48 +6,48 @@
package srpc
import (
- "bytes";
- "log";
- "os";
- "sync";
+ "bytes"
+ "log"
+ "os"
+ "sync"
)
// A Client represents the client side of an SRPC connection.
type Client struct {
- fd int; // fd to server
- r msgReceiver;
- s msgSender;
- service map[string]srv; // services by name
- out chan *msg; // send to out to write to connection
-
- mu sync.Mutex; // protects pending, idGen
- pending map[uint64]*RPC;
- idGen uint64; // generator for request IDs
+ fd int // fd to server
+ r msgReceiver
+ s msgSender
+ service map[string]srv // services by name
+ out chan *msg // send to out to write to connection
+
+ mu sync.Mutex // protects pending, idGen
+ pending map[uint64]*RPC
+ idGen uint64 // generator for request IDs
}
// A srv is a single method that the server offers.
type srv struct {
- num uint32; // method number
- fmt string; // argument format
+ num uint32 // method number
+ fmt string // argument format
}
// An RPC represents a single RPC issued by a client.
type RPC struct {
- Ret []interface{}; // Return values
- Done chan *RPC; // Channel where notification of done arrives
- Errno Errno; // Status code
- c *Client;
- id uint64; // request id
+ Ret []interface{} // Return values
+ Done chan *RPC // Channel where notification of done arrives
+ Errno Errno // Status code
+ c *Client
+ id uint64 // request id
}
// NewClient allocates a new client using the file descriptor fd.
func NewClient(fd int) (c *Client, err os.Error) {
- c = new(Client);
- c.fd = fd;
- c.r.fd = fd;
- c.s.fd = fd;
- c.service = make(map[string]srv);
- c.pending = make(map[uint64]*RPC);
+ c = new(Client)
+ c.fd = fd
+ c.r.fd = fd
+ c.s.fd = fd
+ c.service = make(map[string]srv)
+ c.pending = make(map[uint64]*RPC)
// service discovery request
m := &msg{
@@ -55,54 +55,54 @@ func NewClient(fd int) (c *Client, err os.Error) {
isReq: true,
Ret: []interface{}{[]byte(nil)},
Size: []int{4000},
- };
- m.packRequest();
- c.s.send(m);
- m, err = c.r.recv();
+ }
+ m.packRequest()
+ c.s.send(m)
+ m, err = c.r.recv()
if err != nil {
return nil, err
}
- m.unpackResponse();
+ m.unpackResponse()
if m.status != OK {
- log.Stderrf("NewClient service_discovery: %s", m.status);
- return nil, m.status;
+ log.Stderrf("NewClient service_discovery: %s", m.status)
+ return nil, m.status
}
for n, line := range bytes.Split(m.Ret[0].([]byte), []byte{'\n'}, 0) {
- i := bytes.Index(line, []byte{':'});
+ i := bytes.Index(line, []byte{':'})
if i < 0 {
continue
}
- c.service[string(line[0:i])] = srv{uint32(n), string(line[i+1:])};
+ c.service[string(line[0:i])] = srv{uint32(n), string(line[i+1:])}
}
- c.out = make(chan *msg);
- go c.input();
- go c.output();
- return c, nil;
+ c.out = make(chan *msg)
+ go c.input()
+ go c.output()
+ return c, nil
}
func (c *Client) input() {
for {
- m, err := c.r.recv();
+ m, err := c.r.recv()
if err != nil {
log.Exitf("client recv: %s", err)
}
if m.unpackResponse(); m.status != OK {
- log.Stderrf("invalid message: %s", m.status);
- continue;
+ log.Stderrf("invalid message: %s", m.status)
+ continue
}
- c.mu.Lock();
- rpc, ok := c.pending[m.requestId];
+ c.mu.Lock()
+ rpc, ok := c.pending[m.requestId]
if ok {
c.pending[m.requestId] = nil, false
}
- c.mu.Unlock();
+ c.mu.Unlock()
if !ok {
- log.Stderrf("unexpected response");
- continue;
+ log.Stderrf("unexpected response")
+ continue
}
- rpc.Ret = m.Ret;
- rpc.Done <- rpc;
+ rpc.Ret = m.Ret
+ rpc.Done <- rpc
}
}
@@ -117,11 +117,11 @@ func (c *Client) NewRPC(done chan *RPC) *RPC {
if done == nil {
done = make(chan *RPC)
}
- c.mu.Lock();
- id := c.idGen;
- c.idGen++;
- c.mu.Unlock();
- return &RPC{nil, done, OK, c, id};
+ c.mu.Lock()
+ id := c.idGen
+ c.idGen++
+ c.mu.Unlock()
+ return &RPC{nil, done, OK, c, id}
}
// Start issues an RPC request for method name with the given arguments.
@@ -129,25 +129,25 @@ func (c *Client) NewRPC(done chan *RPC) *RPC {
// To wait for the RPC to finish, receive from r.Done and then
// inspect r.Ret and r.Errno.
func (r *RPC) Start(name string, arg []interface{}) {
- var m msg;
+ var m msg
- r.Errno = OK;
- r.c.mu.Lock();
- srv, ok := r.c.service[name];
+ r.Errno = OK
+ r.c.mu.Lock()
+ srv, ok := r.c.service[name]
if !ok {
- r.c.mu.Unlock();
- r.Errno = ErrBadRPCNumber;
- r.Done <- r;
- return;
+ r.c.mu.Unlock()
+ r.Errno = ErrBadRPCNumber
+ r.Done <- r
+ return
}
- r.c.pending[r.id] = r;
- r.c.mu.Unlock();
+ r.c.pending[r.id] = r
+ r.c.mu.Unlock()
- m.protocol = protocol;
- m.requestId = r.id;
- m.isReq = true;
- m.rpcNumber = srv.num;
- m.Arg = arg;
+ m.protocol = protocol
+ m.requestId = r.id
+ m.isReq = true
+ m.rpcNumber = srv.num
+ m.Arg = arg
// Fill in the return values and sizes to generate
// the right type chars. We'll take most any size.
@@ -155,15 +155,15 @@ func (r *RPC) Start(name string, arg []interface{}) {
// Skip over input arguments.
// We could check them against arg, but the server
// will do that anyway.
- i := 0;
+ i := 0
for srv.fmt[i] != ':' {
i++
}
- fmt := srv.fmt[i+1:];
+ fmt := srv.fmt[i+1:]
// Now the return prototypes.
- m.Ret = make([]interface{}, len(fmt)-i);
- m.Size = make([]int, len(fmt)-i);
+ m.Ret = make([]interface{}, len(fmt)-i)
+ m.Size = make([]int, len(fmt)-i)
for i := 0; i < len(fmt); i++ {
switch fmt[i] {
default:
@@ -171,28 +171,28 @@ func (r *RPC) Start(name string, arg []interface{}) {
case 'b':
m.Ret[i] = false
case 'C':
- m.Ret[i] = []byte(nil);
- m.Size[i] = 1 << 30;
+ m.Ret[i] = []byte(nil)
+ m.Size[i] = 1 << 30
case 'd':
m.Ret[i] = float64(0)
case 'D':
- m.Ret[i] = []float64(nil);
- m.Size[i] = 1 << 30;
+ m.Ret[i] = []float64(nil)
+ m.Size[i] = 1 << 30
case 'h':
m.Ret[i] = int(-1)
case 'i':
m.Ret[i] = int32(0)
case 'I':
- m.Ret[i] = []int32(nil);
- m.Size[i] = 1 << 30;
+ m.Ret[i] = []int32(nil)
+ m.Size[i] = 1 << 30
case 's':
- m.Ret[i] = "";
- m.Size[i] = 1 << 30;
+ m.Ret[i] = ""
+ m.Size[i] = 1 << 30
}
}
- m.packRequest();
- r.c.out <- &m;
+ m.packRequest()
+ r.c.out <- &m
}
// Call is a convenient wrapper that starts the RPC request,
@@ -204,7 +204,7 @@ func (r *RPC) Start(name string, arg []interface{}) {
// return r.Ret, r.Errno;
//
func (r *RPC) Call(name string, arg []interface{}) (ret []interface{}, err Errno) {
- r.Start(name, arg);
- <-r.Done;
- return r.Ret, r.Errno;
+ r.Start(name, arg)
+ <-r.Done
+ return r.Ret, r.Errno
}
diff --git a/src/pkg/exp/nacl/srpc/msg.go b/src/pkg/exp/nacl/srpc/msg.go
index 54ba5a4e3..52f84b884 100644
--- a/src/pkg/exp/nacl/srpc/msg.go
+++ b/src/pkg/exp/nacl/srpc/msg.go
@@ -7,30 +7,30 @@
package srpc
import (
- "math";
- "os";
- "strconv";
- "syscall";
- "unsafe";
+ "math"
+ "os"
+ "strconv"
+ "syscall"
+ "unsafe"
)
// An Errno is an SRPC status code.
type Errno uint32
const (
- OK Errno = 256 + iota;
- ErrBreak;
- ErrMessageTruncated;
- ErrNoMemory;
- ErrProtocolMismatch;
- ErrBadRPCNumber;
- ErrBadArgType;
- ErrTooFewArgs;
- ErrTooManyArgs;
- ErrInArgTypeMismatch;
- ErrOutArgTypeMismatch;
- ErrInternalError;
- ErrAppError;
+ OK Errno = 256 + iota
+ ErrBreak
+ ErrMessageTruncated
+ ErrNoMemory
+ ErrProtocolMismatch
+ ErrBadRPCNumber
+ ErrBadArgType
+ ErrTooFewArgs
+ ErrTooManyArgs
+ ErrInArgTypeMismatch
+ ErrOutArgTypeMismatch
+ ErrInternalError
+ ErrAppError
)
var errstr = [...]string{
@@ -53,7 +53,7 @@ func (e Errno) String() string {
if e < OK || int(e-OK) >= len(errstr) {
return "Errno(" + strconv.Itoa64(int64(e)) + ")"
}
- return errstr[e-OK];
+ return errstr[e-OK]
}
// A *msgHdr is the data argument to the imc_recvmsg
@@ -61,56 +61,56 @@ func (e Errno) String() string {
// counts trusted by the system calls, the data structure is unsafe
// to expose to package clients.
type msgHdr struct {
- iov *iov;
- niov int32;
- desc *int32;
- ndesc int32;
- flags uint32;
+ iov *iov
+ niov int32
+ desc *int32
+ ndesc int32
+ flags uint32
}
// A single region for I/O. Just as unsafe as msgHdr.
type iov struct {
- base *byte;
- len int32;
+ base *byte
+ len int32
}
// A msg is the Go representation of a message.
type msg struct {
- rdata []byte; // data being consumed during message parsing
- rdesc []int32; // file descriptors being consumed during message parsing
- wdata []byte; // data being generated when replying
+ rdata []byte // data being consumed during message parsing
+ rdesc []int32 // file descriptors being consumed during message parsing
+ wdata []byte // data being generated when replying
// parsed version of message
- protocol uint32;
- requestId uint64;
- isReq bool;
- rpcNumber uint32;
- gotHeader bool;
- status Errno; // error code sent in response
- Arg []interface{}; // method arguments
- Ret []interface{}; // method results
- Size []int; // max sizes for arrays in method results
- fmt string; // accumulated format string of arg+":"+ret
+ protocol uint32
+ requestId uint64
+ isReq bool
+ rpcNumber uint32
+ gotHeader bool
+ status Errno // error code sent in response
+ Arg []interface{} // method arguments
+ Ret []interface{} // method results
+ Size []int // max sizes for arrays in method results
+ fmt string // accumulated format string of arg+":"+ret
}
// A msgReceiver receives messages from a file descriptor.
type msgReceiver struct {
- fd int;
- data [128 * 1024]byte;
- desc [8]int32;
- hdr msgHdr;
- iov iov;
+ fd int
+ data [128 * 1024]byte
+ desc [8]int32
+ hdr msgHdr
+ iov iov
}
func (r *msgReceiver) recv() (*msg, os.Error) {
// Init pointers to buffers where syscall recvmsg can write.
- r.iov.base = &r.data[0];
- r.iov.len = int32(len(r.data));
- r.hdr.iov = &r.iov;
- r.hdr.niov = 1;
- r.hdr.desc = &r.desc[0];
- r.hdr.ndesc = int32(len(r.desc));
- n, _, e := syscall.Syscall(syscall.SYS_IMC_RECVMSG, uintptr(r.fd), uintptr(unsafe.Pointer(&r.hdr)), 0);
+ r.iov.base = &r.data[0]
+ r.iov.len = int32(len(r.data))
+ r.hdr.iov = &r.iov
+ r.hdr.niov = 1
+ r.hdr.desc = &r.desc[0]
+ r.hdr.ndesc = int32(len(r.desc))
+ n, _, e := syscall.Syscall(syscall.SYS_IMC_RECVMSG, uintptr(r.fd), uintptr(unsafe.Pointer(&r.hdr)), 0)
if e != 0 {
return nil, os.NewSyscallError("imc_recvmsg", int(e))
}
@@ -118,43 +118,43 @@ func (r *msgReceiver) recv() (*msg, os.Error) {
// Make a copy of the data so that the next recvmsg doesn't
// smash it. The system call did not update r.iov.len. Instead it
// returned the total byte count as n.
- m := new(msg);
- m.rdata = make([]byte, n);
- copy(m.rdata, &r.data);
+ m := new(msg)
+ m.rdata = make([]byte, n)
+ copy(m.rdata, &r.data)
// Make a copy of the desc too.
// The system call *did* update r.hdr.ndesc.
if r.hdr.ndesc > 0 {
- m.rdesc = make([]int32, r.hdr.ndesc);
+ m.rdesc = make([]int32, r.hdr.ndesc)
for i := range m.rdesc {
m.rdesc[i] = r.desc[i]
}
}
- return m, nil;
+ return m, nil
}
// A msgSender sends messages on a file descriptor.
type msgSender struct {
- fd int;
- hdr msgHdr;
- iov iov;
+ fd int
+ hdr msgHdr
+ iov iov
}
func (s *msgSender) send(m *msg) os.Error {
if len(m.wdata) > 0 {
s.iov.base = &m.wdata[0]
}
- s.iov.len = int32(len(m.wdata));
- s.hdr.iov = &s.iov;
- s.hdr.niov = 1;
- s.hdr.desc = nil;
- s.hdr.ndesc = 0;
- _, _, e := syscall.Syscall(syscall.SYS_IMC_SENDMSG, uintptr(s.fd), uintptr(unsafe.Pointer(&s.hdr)), 0);
+ s.iov.len = int32(len(m.wdata))
+ s.hdr.iov = &s.iov
+ s.hdr.niov = 1
+ s.hdr.desc = nil
+ s.hdr.ndesc = 0
+ _, _, e := syscall.Syscall(syscall.SYS_IMC_SENDMSG, uintptr(s.fd), uintptr(unsafe.Pointer(&s.hdr)), 0)
if e != 0 {
return os.NewSyscallError("imc_sendmsg", int(e))
}
- return nil;
+ return nil
}
// Reading from msg.rdata.
@@ -163,12 +163,12 @@ func (m *msg) uint8() uint8 {
return 0
}
if len(m.rdata) < 1 {
- m.status = ErrMessageTruncated;
- return 0;
+ m.status = ErrMessageTruncated
+ return 0
}
- x := m.rdata[0];
- m.rdata = m.rdata[1:];
- return x;
+ x := m.rdata[0]
+ m.rdata = m.rdata[1:]
+ return x
}
func (m *msg) uint32() uint32 {
@@ -176,13 +176,13 @@ func (m *msg) uint32() uint32 {
return 0
}
if len(m.rdata) < 4 {
- m.status = ErrMessageTruncated;
- return 0;
+ m.status = ErrMessageTruncated
+ return 0
}
- b := m.rdata[0:4];
- x := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24;
- m.rdata = m.rdata[4:];
- return x;
+ b := m.rdata[0:4]
+ x := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ m.rdata = m.rdata[4:]
+ return x
}
func (m *msg) uint64() uint64 {
@@ -190,14 +190,14 @@ func (m *msg) uint64() uint64 {
return 0
}
if len(m.rdata) < 8 {
- m.status = ErrMessageTruncated;
- return 0;
+ m.status = ErrMessageTruncated
+ return 0
}
- b := m.rdata[0:8];
- x := uint64(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24);
- x |= uint64(uint32(b[4])|uint32(b[5])<<8|uint32(b[6])<<16|uint32(b[7])<<24) << 32;
- m.rdata = m.rdata[8:];
- return x;
+ b := m.rdata[0:8]
+ x := uint64(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ x |= uint64(uint32(b[4])|uint32(b[5])<<8|uint32(b[6])<<16|uint32(b[7])<<24) << 32
+ m.rdata = m.rdata[8:]
+ return x
}
func (m *msg) bytes(n int) []byte {
@@ -205,54 +205,54 @@ func (m *msg) bytes(n int) []byte {
return nil
}
if len(m.rdata) < n {
- m.status = ErrMessageTruncated;
- return nil;
+ m.status = ErrMessageTruncated
+ return nil
}
- x := m.rdata[0:n];
- m.rdata = m.rdata[n:];
- return x;
+ x := m.rdata[0:n]
+ m.rdata = m.rdata[n:]
+ return x
}
// Writing to msg.wdata.
func (m *msg) grow(n int) []byte {
- i := len(m.wdata);
+ i := len(m.wdata)
if i+n > cap(m.wdata) {
- a := make([]byte, i, (i+n)*2);
- copy(a, m.wdata);
- m.wdata = a;
+ a := make([]byte, i, (i+n)*2)
+ copy(a, m.wdata)
+ m.wdata = a
}
- m.wdata = m.wdata[0 : i+n];
- return m.wdata[i : i+n];
+ m.wdata = m.wdata[0 : i+n]
+ return m.wdata[i : i+n]
}
-func (m *msg) wuint8(x uint8) { m.grow(1)[0] = x }
+func (m *msg) wuint8(x uint8) { m.grow(1)[0] = x }
func (m *msg) wuint32(x uint32) {
- b := m.grow(4);
- b[0] = byte(x);
- b[1] = byte(x >> 8);
- b[2] = byte(x >> 16);
- b[3] = byte(x >> 24);
+ b := m.grow(4)
+ b[0] = byte(x)
+ b[1] = byte(x >> 8)
+ b[2] = byte(x >> 16)
+ b[3] = byte(x >> 24)
}
func (m *msg) wuint64(x uint64) {
- b := m.grow(8);
- lo := uint32(x);
- b[0] = byte(lo);
- b[1] = byte(lo >> 8);
- b[2] = byte(lo >> 16);
- b[3] = byte(lo >> 24);
- hi := uint32(x >> 32);
- b[4] = byte(hi);
- b[5] = byte(hi >> 8);
- b[6] = byte(hi >> 16);
- b[7] = byte(hi >> 24);
+ b := m.grow(8)
+ lo := uint32(x)
+ b[0] = byte(lo)
+ b[1] = byte(lo >> 8)
+ b[2] = byte(lo >> 16)
+ b[3] = byte(lo >> 24)
+ hi := uint32(x >> 32)
+ b[4] = byte(hi)
+ b[5] = byte(hi >> 8)
+ b[6] = byte(hi >> 16)
+ b[7] = byte(hi >> 24)
}
-func (m *msg) wbytes(p []byte) { copy(m.grow(len(p)), p) }
+func (m *msg) wbytes(p []byte) { copy(m.grow(len(p)), p) }
func (m *msg) wstring(s string) {
- b := m.grow(len(s));
+ b := m.grow(len(s))
for i := range b {
b[i] = s[i]
}
@@ -298,14 +298,14 @@ func (m *msg) wstring(s string) {
const protocol = 0xc0da0002
func (m *msg) unpackHeader() {
- m.protocol = m.uint32();
- m.requestId = m.uint64();
- m.isReq = m.uint8() != 0;
- m.rpcNumber = m.uint32();
- m.gotHeader = m.status == OK; // signal that header parsed successfully
+ m.protocol = m.uint32()
+ m.requestId = m.uint64()
+ m.isReq = m.uint8() != 0
+ m.rpcNumber = m.uint32()
+ m.gotHeader = m.status == OK // signal that header parsed successfully
if m.gotHeader && !m.isReq {
- status := Errno(m.uint32());
- m.gotHeader = m.status == OK; // still ok?
+ status := Errno(m.uint32())
+ m.gotHeader = m.status == OK // still ok?
if m.gotHeader {
m.status = status
}
@@ -313,14 +313,14 @@ func (m *msg) unpackHeader() {
}
func (m *msg) packHeader() {
- m.wuint32(m.protocol);
- m.wuint64(m.requestId);
+ m.wuint32(m.protocol)
+ m.wuint64(m.requestId)
if m.isReq {
m.wuint8(1)
} else {
m.wuint8(0)
}
- m.wuint32(m.rpcNumber);
+ m.wuint32(m.rpcNumber)
if !m.isReq {
m.wuint32(uint32(m.status))
}
@@ -328,44 +328,44 @@ func (m *msg) packHeader() {
func (m *msg) unpackValues(v []interface{}) {
for i := range v {
- t := m.uint8();
- m.fmt += string(t);
+ t := m.uint8()
+ m.fmt += string(t)
switch t {
default:
if m.status == OK {
m.status = ErrBadArgType
}
- return;
- case 'b': // bool[1]
+ return
+ case 'b': // bool[1]
v[i] = m.uint8() > 0
- case 'C': // char array
+ case 'C': // char array
v[i] = m.bytes(int(m.uint32()))
- case 'd': // double
+ case 'd': // double
v[i] = math.Float64frombits(m.uint64())
- case 'D': // double array
- a := make([]float64, int(m.uint32()));
+ case 'D': // double array
+ a := make([]float64, int(m.uint32()))
for j := range a {
a[j] = math.Float64frombits(m.uint64())
}
- v[i] = a;
- case 'h': // file descriptor (handle)
+ v[i] = a
+ case 'h': // file descriptor (handle)
if len(m.rdesc) == 0 {
if m.status == OK {
m.status = ErrBadArgType
}
- return;
+ return
}
- v[i] = int(m.rdesc[0]);
- m.rdesc = m.rdesc[1:];
- case 'i': // int
+ v[i] = int(m.rdesc[0])
+ m.rdesc = m.rdesc[1:]
+ case 'i': // int
v[i] = int32(m.uint32())
- case 'I': // int array
- a := make([]int32, int(m.uint32()));
+ case 'I': // int array
+ a := make([]int32, int(m.uint32()))
for j := range a {
a[j] = int32(m.uint32())
}
- v[i] = a;
- case 's': // string
+ v[i] = a
+ case 's': // string
v[i] = string(m.bytes(int(m.uint32())))
}
}
@@ -378,57 +378,57 @@ func (m *msg) packValues(v []interface{}) {
if m.status == OK {
m.status = ErrInternalError
}
- return;
+ return
case bool:
- m.wuint8('b');
+ m.wuint8('b')
if x {
m.wuint8(1)
} else {
m.wuint8(0)
}
case []byte:
- m.wuint8('C');
- m.wuint32(uint32(len(x)));
- m.wbytes(x);
+ m.wuint8('C')
+ m.wuint32(uint32(len(x)))
+ m.wbytes(x)
case float64:
- m.wuint8('d');
- m.wuint64(math.Float64bits(x));
+ m.wuint8('d')
+ m.wuint64(math.Float64bits(x))
case []float64:
- m.wuint8('D');
- m.wuint32(uint32(len(x)));
+ m.wuint8('D')
+ m.wuint32(uint32(len(x)))
for _, f := range x {
m.wuint64(math.Float64bits(f))
}
case int32:
- m.wuint8('i');
- m.wuint32(uint32(x));
+ m.wuint8('i')
+ m.wuint32(uint32(x))
case []int32:
- m.wuint8('I');
- m.wuint32(uint32(len(x)));
+ m.wuint8('I')
+ m.wuint32(uint32(len(x)))
for _, i := range x {
m.wuint32(uint32(i))
}
case string:
- m.wuint8('s');
- m.wuint32(uint32(len(x)));
- m.wstring(x);
+ m.wuint8('s')
+ m.wuint32(uint32(len(x)))
+ m.wstring(x)
}
}
}
func (m *msg) unpackRequest() {
- m.status = OK;
+ m.status = OK
if m.unpackHeader(); m.status != OK {
return
}
if m.protocol != protocol || !m.isReq {
- m.status = ErrProtocolMismatch;
- return;
+ m.status = ErrProtocolMismatch
+ return
}
// type-tagged argument values
- m.Arg = make([]interface{}, m.uint32());
- m.unpackValues(m.Arg);
+ m.Arg = make([]interface{}, m.uint32())
+ m.unpackValues(m.Arg)
if m.status != OK {
return
}
@@ -436,91 +436,91 @@ func (m *msg) unpackRequest() {
// type-tagged expected return sizes.
// fill in zero values for each return value
// and save sizes.
- m.fmt += ":";
- m.Ret = make([]interface{}, m.uint32());
- m.Size = make([]int, len(m.Ret));
+ m.fmt += ":"
+ m.Ret = make([]interface{}, m.uint32())
+ m.Size = make([]int, len(m.Ret))
for i := range m.Ret {
- t := m.uint8();
- m.fmt += string(t);
+ t := m.uint8()
+ m.fmt += string(t)
switch t {
default:
if m.status == OK {
m.status = ErrBadArgType
}
- return;
- case 'b': // bool[1]
+ return
+ case 'b': // bool[1]
m.Ret[i] = false
- case 'C': // char array
- m.Size[i] = int(m.uint32());
- m.Ret[i] = []byte(nil);
- case 'd': // double
+ case 'C': // char array
+ m.Size[i] = int(m.uint32())
+ m.Ret[i] = []byte(nil)
+ case 'd': // double
m.Ret[i] = float64(0)
- case 'D': // double array
- m.Size[i] = int(m.uint32());
- m.Ret[i] = []float64(nil);
- case 'h': // file descriptor (handle)
+ case 'D': // double array
+ m.Size[i] = int(m.uint32())
+ m.Ret[i] = []float64(nil)
+ case 'h': // file descriptor (handle)
m.Ret[i] = int(-1)
- case 'i': // int
+ case 'i': // int
m.Ret[i] = int32(0)
- case 'I': // int array
- m.Size[i] = int(m.uint32());
- m.Ret[i] = []int32(nil);
- case 's': // string
- m.Size[i] = int(m.uint32());
- m.Ret[i] = "";
+ case 'I': // int array
+ m.Size[i] = int(m.uint32())
+ m.Ret[i] = []int32(nil)
+ case 's': // string
+ m.Size[i] = int(m.uint32())
+ m.Ret[i] = ""
}
}
}
func (m *msg) packRequest() {
- m.packHeader();
- m.wuint32(uint32(len(m.Arg)));
- m.packValues(m.Arg);
- m.wuint32(uint32(len(m.Ret)));
+ m.packHeader()
+ m.wuint32(uint32(len(m.Arg)))
+ m.packValues(m.Arg)
+ m.wuint32(uint32(len(m.Ret)))
for i, v := range m.Ret {
switch x := v.(type) {
case bool:
m.wuint8('b')
case []byte:
- m.wuint8('C');
- m.wuint32(uint32(m.Size[i]));
+ m.wuint8('C')
+ m.wuint32(uint32(m.Size[i]))
case float64:
m.wuint8('d')
case []float64:
- m.wuint8('D');
- m.wuint32(uint32(m.Size[i]));
+ m.wuint8('D')
+ m.wuint32(uint32(m.Size[i]))
case int:
m.wuint8('h')
case int32:
m.wuint8('i')
case []int32:
- m.wuint8('I');
- m.wuint32(uint32(m.Size[i]));
+ m.wuint8('I')
+ m.wuint32(uint32(m.Size[i]))
case string:
- m.wuint8('s');
- m.wuint32(uint32(m.Size[i]));
+ m.wuint8('s')
+ m.wuint32(uint32(m.Size[i]))
}
}
}
func (m *msg) unpackResponse() {
- m.status = OK;
+ m.status = OK
if m.unpackHeader(); m.status != OK {
return
}
if m.protocol != protocol || m.isReq {
- m.status = ErrProtocolMismatch;
- return;
+ m.status = ErrProtocolMismatch
+ return
}
// type-tagged return values
- m.fmt = "";
- m.Ret = make([]interface{}, m.uint32());
- m.unpackValues(m.Ret);
+ m.fmt = ""
+ m.Ret = make([]interface{}, m.uint32())
+ m.unpackValues(m.Ret)
}
func (m *msg) packResponse() {
- m.packHeader();
- m.wuint32(uint32(len(m.Ret)));
- m.packValues(m.Ret);
+ m.packHeader()
+ m.wuint32(uint32(len(m.Ret)))
+ m.packValues(m.Ret)
}
diff --git a/src/pkg/exp/nacl/srpc/server.go b/src/pkg/exp/nacl/srpc/server.go
index 56edfccd0..af2b855f5 100644
--- a/src/pkg/exp/nacl/srpc/server.go
+++ b/src/pkg/exp/nacl/srpc/server.go
@@ -7,10 +7,10 @@
package srpc
import (
- "bytes";
- "log";
- "os";
- "syscall";
+ "bytes"
+ "log"
+ "os"
+ "syscall"
)
// TODO(rsc): I'd prefer to make this
@@ -22,13 +22,13 @@ import (
// It reads arguments from arg, checks size for array limits,
// writes return values to ret, and returns an Errno status code.
type Handler interface {
- Run(arg, ret []interface{}, size []int) Errno;
+ Run(arg, ret []interface{}, size []int) Errno
}
type method struct {
- name string;
- fmt string;
- handler Handler;
+ name string
+ fmt string
+ handler Handler
}
var rpcMethod []method
@@ -53,80 +53,80 @@ var rpcMethod []method
// s string
//
func Add(name, fmt string, handler Handler) {
- n := len(rpcMethod);
+ n := len(rpcMethod)
if n >= cap(rpcMethod) {
- a := make([]method, n, (n+4)*2);
+ a := make([]method, n, (n+4)*2)
for i := range a {
a[i] = rpcMethod[i]
}
- rpcMethod = a;
+ rpcMethod = a
}
- rpcMethod = rpcMethod[0 : n+1];
- rpcMethod[n] = method{name, fmt, handler};
+ rpcMethod = rpcMethod[0 : n+1]
+ rpcMethod[n] = method{name, fmt, handler}
}
// Serve accepts new SRPC connections from the file descriptor fd
// and answers RPCs issued on those connections.
// It closes fd and returns an error if the imc_accept system call fails.
func Serve(fd int) os.Error {
- defer syscall.Close(fd);
+ defer syscall.Close(fd)
for {
- cfd, _, e := syscall.Syscall(syscall.SYS_IMC_ACCEPT, uintptr(fd), 0, 0);
+ cfd, _, e := syscall.Syscall(syscall.SYS_IMC_ACCEPT, uintptr(fd), 0, 0)
if e != 0 {
return os.NewSyscallError("imc_accept", int(e))
}
- go serveLoop(int(cfd));
+ go serveLoop(int(cfd))
}
- panic("unreachable");
+ panic("unreachable")
}
func serveLoop(fd int) {
- c := make(chan *msg);
- go sendLoop(fd, c);
+ c := make(chan *msg)
+ go sendLoop(fd, c)
- var r msgReceiver;
- r.fd = fd;
+ var r msgReceiver
+ r.fd = fd
for {
- m, err := r.recv();
+ m, err := r.recv()
if err != nil {
break
}
- m.unpackRequest();
+ m.unpackRequest()
if !m.gotHeader {
- log.Stderrf("cannot unpack header: %s", m.status);
- continue;
+ log.Stderrf("cannot unpack header: %s", m.status)
+ continue
}
// log.Stdoutf("<- %#v", m);
- m.isReq = false; // set up for response
- go serveMsg(m, c);
+ m.isReq = false // set up for response
+ go serveMsg(m, c)
}
- close(c);
+ close(c)
}
func sendLoop(fd int, c <-chan *msg) {
- var s msgSender;
- s.fd = fd;
+ var s msgSender
+ s.fd = fd
for m := range c {
// log.Stdoutf("-> %#v", m);
- m.packResponse();
- s.send(m);
+ m.packResponse()
+ s.send(m)
}
- syscall.Close(fd);
+ syscall.Close(fd)
}
func serveMsg(m *msg, c chan<- *msg) {
if m.status != OK {
- c <- m;
- return;
+ c <- m
+ return
}
if m.rpcNumber >= uint32(len(rpcMethod)) {
- m.status = ErrBadRPCNumber;
- c <- m;
- return;
+ m.status = ErrBadRPCNumber
+ c <- m
+ return
}
- meth := &rpcMethod[m.rpcNumber];
+ meth := &rpcMethod[m.rpcNumber]
if meth.fmt != m.fmt {
switch {
case len(m.fmt) < len(meth.fmt):
@@ -137,20 +137,20 @@ func serveMsg(m *msg, c chan<- *msg) {
// There's a type mismatch.
// It's an in-arg mismatch if the mismatch happens
// before the colon; otherwise it's an out-arg mismatch.
- m.status = ErrInArgTypeMismatch;
+ m.status = ErrInArgTypeMismatch
for i := 0; i < len(m.fmt) && m.fmt[i] == meth.fmt[i]; i++ {
if m.fmt[i] == ':' {
- m.status = ErrOutArgTypeMismatch;
- break;
+ m.status = ErrOutArgTypeMismatch
+ break
}
}
}
- c <- m;
- return;
+ c <- m
+ return
}
- m.status = meth.handler.Run(m.Arg, m.Ret, m.Size);
- c <- m;
+ m.status = meth.handler.Run(m.Arg, m.Ret, m.Size)
+ c <- m
}
// ServeRuntime serves RPCs issued by the Native Client embedded runtime.
@@ -164,19 +164,19 @@ func ServeRuntime() os.Error {
// We are running embedded.
// The fd returned by getFd is a red herring.
// Accept connections on magic fd 3.
- return Serve(3);
+ return Serve(3)
}
// getFd runs the srpc_get_fd system call.
func getFd() (fd int, err os.Error) {
- r1, _, e := syscall.Syscall(syscall.SYS_SRPC_GET_FD, 0, 0, 0);
- return int(r1), os.NewSyscallError("srpc_get_fd", int(e));
+ r1, _, e := syscall.Syscall(syscall.SYS_SRPC_GET_FD, 0, 0, 0)
+ return int(r1), os.NewSyscallError("srpc_get_fd", int(e))
}
// Enabled returns true if SRPC is enabled in the Native Client runtime.
func Enabled() bool {
- _, err := getFd();
- return err == nil;
+ _, err := getFd()
+ return err == nil
}
// Service #0, service_discovery, returns a list of the other services
@@ -184,18 +184,18 @@ func Enabled() bool {
type serviceDiscovery struct{}
func (serviceDiscovery) Run(arg, ret []interface{}, size []int) Errno {
- var b bytes.Buffer;
+ var b bytes.Buffer
for _, m := range rpcMethod {
- b.WriteString(m.name);
- b.WriteByte(':');
- b.WriteString(m.fmt);
- b.WriteByte('\n');
+ b.WriteString(m.name)
+ b.WriteByte(':')
+ b.WriteString(m.fmt)
+ b.WriteByte('\n')
}
if b.Len() > size[0] {
return ErrNoMemory
}
- ret[0] = b.Bytes();
- return OK;
+ ret[0] = b.Bytes()
+ return OK
}
-func init() { Add("service_discovery", ":C", serviceDiscovery{}) }
+func init() { Add("service_discovery", ":C", serviceDiscovery{}) }
diff --git a/src/pkg/exp/ogle/abort.go b/src/pkg/exp/ogle/abort.go
index 7773cac2b..311a7b38e 100644
--- a/src/pkg/exp/ogle/abort.go
+++ b/src/pkg/exp/ogle/abort.go
@@ -5,31 +5,31 @@
package ogle
import (
- "os";
- "runtime";
+ "os"
+ "runtime"
)
// An aborter aborts the thread's current computation, usually
// passing the error to a waiting thread.
type aborter interface {
- Abort(err os.Error);
+ Abort(err os.Error)
}
type ogleAborter chan os.Error
func (a ogleAborter) Abort(err os.Error) {
- a <- err;
- runtime.Goexit();
+ a <- err
+ runtime.Goexit()
}
// try executes a computation; if the computation Aborts, try returns
// the error passed to abort.
func try(f func(a aborter)) os.Error {
- a := make(ogleAborter);
+ a := make(ogleAborter)
go func() {
- f(a);
- a <- nil;
- }();
- err := <-a;
- return err;
+ f(a)
+ a <- nil
+ }()
+ err := <-a
+ return err
}
diff --git a/src/pkg/exp/ogle/arch.go b/src/pkg/exp/ogle/arch.go
index 867ad4ca6..52b1c9757 100644
--- a/src/pkg/exp/ogle/arch.go
+++ b/src/pkg/exp/ogle/arch.go
@@ -5,66 +5,66 @@
package ogle
import (
- "debug/proc";
- "math";
+ "debug/proc"
+ "math"
)
type Arch interface {
// ToWord converts an array of up to 8 bytes in memory order
// to a word.
- ToWord(data []byte) proc.Word;
+ ToWord(data []byte) proc.Word
// FromWord converts a word to an array of up to 8 bytes in
// memory order.
- FromWord(v proc.Word, out []byte);
+ FromWord(v proc.Word, out []byte)
// ToFloat32 converts a word to a float. The order of this
// word will be the order returned by ToWord on the memory
// representation of a float, and thus may require reversing.
- ToFloat32(bits uint32) float32;
+ ToFloat32(bits uint32) float32
// FromFloat32 converts a float to a word. This should return
// a word that can be passed to FromWord to get the memory
// representation of a float on this architecture.
- FromFloat32(f float32) uint32;
+ FromFloat32(f float32) uint32
// ToFloat64 is to float64 as ToFloat32 is to float32.
- ToFloat64(bits uint64) float64;
+ ToFloat64(bits uint64) float64
// FromFloat64 is to float64 as FromFloat32 is to float32.
- FromFloat64(f float64) uint64;
+ FromFloat64(f float64) uint64
// IntSize returns the number of bytes in an 'int'.
- IntSize() int;
+ IntSize() int
// PtrSize returns the number of bytes in a 'uintptr'.
- PtrSize() int;
+ PtrSize() int
// FloatSize returns the number of bytes in a 'float'.
- FloatSize() int;
+ FloatSize() int
// Align rounds offset up to the appropriate offset for a
// basic type with the given width.
- Align(offset, width int) int;
+ Align(offset, width int) int
// G returns the current G pointer.
- G(regs proc.Regs) proc.Word;
+ G(regs proc.Regs) proc.Word
// ClosureSize returns the number of bytes expected by
// ParseClosure.
- ClosureSize() int;
+ ClosureSize() int
// ParseClosure takes ClosureSize bytes read from a return PC
// in a remote process, determines if the code is a closure,
// and returns the frame size of the closure if it is.
- ParseClosure(data []byte) (frame int, ok bool);
+ ParseClosure(data []byte) (frame int, ok bool)
}
type ArchLSB struct{}
func (ArchLSB) ToWord(data []byte) proc.Word {
- var v proc.Word;
+ var v proc.Word
for i, b := range data {
v |= proc.Word(b) << (uint(i) * 8)
}
- return v;
+ return v
}
func (ArchLSB) FromWord(v proc.Word, out []byte) {
for i := range out {
- out[i] = byte(v);
- v >>= 8;
+ out[i] = byte(v)
+ v >>= 8
}
}
@@ -74,11 +74,11 @@ func (ArchLSB) ToFloat32(bits uint32) float32 {
return math.Float32frombits(bits)
}
-func (ArchLSB) FromFloat32(f float32) uint32 { return math.Float32bits(f) }
+func (ArchLSB) FromFloat32(f float32) uint32 { return math.Float32bits(f) }
-func (ArchLSB) ToFloat64(bits uint64) float64 { return math.Float64frombits(bits) }
+func (ArchLSB) ToFloat64(bits uint64) float64 { return math.Float64frombits(bits) }
-func (ArchLSB) FromFloat64(f float64) uint64 { return math.Float64bits(f) }
+func (ArchLSB) FromFloat64(f float64) uint64 { return math.Float64bits(f) }
type ArchAlignedMultiple struct{}
@@ -87,39 +87,39 @@ func (ArchAlignedMultiple) Align(offset, width int) int {
}
type amd64 struct {
- ArchLSB;
- ArchAlignedMultiple;
- gReg int;
+ ArchLSB
+ ArchAlignedMultiple
+ gReg int
}
-func (a *amd64) IntSize() int { return 4 }
+func (a *amd64) IntSize() int { return 4 }
-func (a *amd64) PtrSize() int { return 8 }
+func (a *amd64) PtrSize() int { return 8 }
-func (a *amd64) FloatSize() int { return 4 }
+func (a *amd64) FloatSize() int { return 4 }
func (a *amd64) G(regs proc.Regs) proc.Word {
// See src/pkg/runtime/mkasmh
if a.gReg == -1 {
- ns := regs.Names();
+ ns := regs.Names()
for i, n := range ns {
if n == "r15" {
- a.gReg = i;
- break;
+ a.gReg = i
+ break
}
}
}
- return regs.Get(a.gReg);
+ return regs.Get(a.gReg)
}
-func (a *amd64) ClosureSize() int { return 8 }
+func (a *amd64) ClosureSize() int { return 8 }
func (a *amd64) ParseClosure(data []byte) (int, bool) {
if data[0] == 0x48 && data[1] == 0x81 && data[2] == 0xc4 && data[7] == 0xc3 {
return int(a.ToWord(data[3:7]) + 8), true
}
- return 0, false;
+ return 0, false
}
var Amd64 = &amd64{gReg: -1}
diff --git a/src/pkg/exp/ogle/cmd.go b/src/pkg/exp/ogle/cmd.go
index 2e75fe519..45b47ef5b 100644
--- a/src/pkg/exp/ogle/cmd.go
+++ b/src/pkg/exp/ogle/cmd.go
@@ -6,52 +6,52 @@
package ogle
import (
- "bufio";
- "debug/elf";
- "debug/proc";
- "exp/eval";
- "fmt";
- "go/scanner";
- "go/token";
- "os";
- "strconv";
- "strings";
+ "bufio"
+ "debug/elf"
+ "debug/proc"
+ "exp/eval"
+ "fmt"
+ "go/scanner"
+ "go/token"
+ "os"
+ "strconv"
+ "strings"
)
var world *eval.World
var curProc *Process
func Main() {
- world = eval.NewWorld();
- defineFuncs();
- r := bufio.NewReader(os.Stdin);
+ world = eval.NewWorld()
+ defineFuncs()
+ r := bufio.NewReader(os.Stdin)
for {
- print("; ");
- line, err := r.ReadSlice('\n');
+ print("; ")
+ line, err := r.ReadSlice('\n')
if err != nil {
break
}
// Try line as a command
- cmd, rest := getCmd(line);
+ cmd, rest := getCmd(line)
if cmd != nil {
- err := cmd.handler(rest);
+ err := cmd.handler(rest)
if err != nil {
scanner.PrintError(os.Stderr, err)
}
- continue;
+ continue
}
// Try line as code
- code, err := world.Compile(string(line));
+ code, err := world.Compile(string(line))
if err != nil {
- scanner.PrintError(os.Stderr, err);
- continue;
+ scanner.PrintError(os.Stderr, err)
+ continue
}
- v, err := code.Run();
+ v, err := code.Run()
if err != nil {
- fmt.Fprintf(os.Stderr, err.String());
- continue;
+ fmt.Fprintf(os.Stderr, err.String())
+ continue
}
if v != nil {
println(v.String())
@@ -61,11 +61,11 @@ func Main() {
// newScanner creates a new scanner that scans that given input bytes.
func newScanner(input []byte) (*scanner.Scanner, *scanner.ErrorVector) {
- sc := new(scanner.Scanner);
- ev := new(scanner.ErrorVector);
- sc.Init("input", input, ev, 0);
+ sc := new(scanner.Scanner)
+ ev := new(scanner.ErrorVector)
+ sc.Init("input", input, ev, 0)
- return sc, ev;
+ return sc, ev
}
/*
@@ -75,12 +75,12 @@ func newScanner(input []byte) (*scanner.Scanner, *scanner.ErrorVector) {
// A UsageError occurs when a command is called with illegal arguments.
type UsageError string
-func (e UsageError) String() string { return string(e) }
+func (e UsageError) String() string { return string(e) }
// A cmd represents a single command with a handler.
type cmd struct {
- cmd string;
- handler func([]byte) os.Error;
+ cmd string
+ handler func([]byte) os.Error
}
var cmds = []cmd{
@@ -92,19 +92,19 @@ var cmds = []cmd{
// successful, it returns the command and the bytes remaining after
// the command, which should be passed to the command.
func getCmd(line []byte) (*cmd, []byte) {
- sc, _ := newScanner(line);
- pos, tok, lit := sc.Scan();
+ sc, _ := newScanner(line)
+ pos, tok, lit := sc.Scan()
if sc.ErrorCount != 0 || tok != token.IDENT {
return nil, nil
}
- slit := string(lit);
+ slit := string(lit)
for i := range cmds {
if cmds[i].cmd == slit {
return &cmds[i], line[pos.Offset+len(lit):]
}
}
- return nil, nil;
+ return nil, nil
}
// cmdLoad starts or attaches to a process. Its form is similar to
@@ -124,7 +124,7 @@ func getCmd(line []byte) (*cmd, []byte) {
//
// load always sets the current process to the loaded process.
func cmdLoad(args []byte) os.Error {
- ident, path, err := parseLoad(args);
+ ident, path, err := parseLoad(args)
if err != nil {
return err
}
@@ -136,99 +136,99 @@ func cmdLoad(args []byte) os.Error {
}
// Parse argument and start or attach to process
- var fname string;
- var tproc proc.Process;
+ var fname string
+ var tproc proc.Process
if len(path) >= 4 && path[0:4] == "pid:" {
- pid, err := strconv.Atoi(path[4:]);
+ pid, err := strconv.Atoi(path[4:])
if err != nil {
return err
}
- fname, err = os.Readlink(fmt.Sprintf("/proc/%d/exe", pid));
+ fname, err = os.Readlink(fmt.Sprintf("/proc/%d/exe", pid))
if err != nil {
return err
}
- tproc, err = proc.Attach(pid);
+ tproc, err = proc.Attach(pid)
if err != nil {
return err
}
- println("Attached to", pid);
+ println("Attached to", pid)
} else {
- parts := strings.Split(path, " ", 0);
+ parts := strings.Split(path, " ", 0)
if len(parts) == 0 {
fname = ""
} else {
fname = parts[0]
}
- tproc, err = proc.ForkExec(fname, parts, os.Environ(), "", []*os.File{os.Stdin, os.Stdout, os.Stderr});
+ tproc, err = proc.ForkExec(fname, parts, os.Environ(), "", []*os.File{os.Stdin, os.Stdout, os.Stderr})
if err != nil {
return err
}
- println("Started", path);
+ println("Started", path)
// TODO(austin) If we fail after this point, kill tproc
// before detaching.
}
// Get symbols
- f, err := os.Open(fname, os.O_RDONLY, 0);
+ f, err := os.Open(fname, os.O_RDONLY, 0)
if err != nil {
- tproc.Detach();
- return err;
+ tproc.Detach()
+ return err
}
- defer f.Close();
- elf, err := elf.NewFile(f);
+ defer f.Close()
+ elf, err := elf.NewFile(f)
if err != nil {
- tproc.Detach();
- return err;
+ tproc.Detach()
+ return err
}
- curProc, err = NewProcessElf(tproc, elf);
+ curProc, err = NewProcessElf(tproc, elf)
if err != nil {
- tproc.Detach();
- return err;
+ tproc.Detach()
+ return err
}
// Prepare new process
- curProc.OnGoroutineCreate().AddHandler(EventPrint);
- curProc.OnGoroutineExit().AddHandler(EventPrint);
+ curProc.OnGoroutineCreate().AddHandler(EventPrint)
+ curProc.OnGoroutineExit().AddHandler(EventPrint)
- err = curProc.populateWorld(world);
+ err = curProc.populateWorld(world)
if err != nil {
- tproc.Detach();
- return err;
+ tproc.Detach()
+ return err
}
- return nil;
+ return nil
}
func parseLoad(args []byte) (ident string, path string, err os.Error) {
- err = UsageError("Usage: load [sym] \"path\"");
- sc, ev := newScanner(args);
+ err = UsageError("Usage: load [sym] \"path\"")
+ sc, ev := newScanner(args)
- var toks [4]token.Token;
- var lits [4][]byte;
+ var toks [4]token.Token
+ var lits [4][]byte
for i := range toks {
_, toks[i], lits[i] = sc.Scan()
}
if sc.ErrorCount != 0 {
- err = ev.GetError(scanner.NoMultiples);
- return;
+ err = ev.GetError(scanner.NoMultiples)
+ return
}
- i := 0;
+ i := 0
switch toks[i] {
case token.PERIOD, token.IDENT:
- ident = string(lits[i]);
- i++;
+ ident = string(lits[i])
+ i++
}
if toks[i] != token.STRING {
return
}
- path, uerr := strconv.Unquote(string(lits[i]));
+ path, uerr := strconv.Unquote(string(lits[i]))
if uerr != nil {
- err = uerr;
- return;
+ err = uerr
+ return
}
- i++;
+ i++
if toks[i] == token.SEMICOLON {
i++
@@ -237,13 +237,13 @@ func parseLoad(args []byte) (ident string, path string, err os.Error) {
return
}
- return ident, path, nil;
+ return ident, path, nil
}
// cmdBt prints a backtrace for the current goroutine. It takes no
// arguments.
func cmdBt(args []byte) os.Error {
- err := parseNoArgs(args, "Usage: bt");
+ err := parseNoArgs(args, "Usage: bt")
if err != nil {
return err
}
@@ -252,10 +252,10 @@ func cmdBt(args []byte) os.Error {
return NoCurrentGoroutine{}
}
- f := curProc.curGoroutine.frame;
+ f := curProc.curGoroutine.frame
if f == nil {
- fmt.Println("No frames on stack");
- return nil;
+ fmt.Println("No frames on stack")
+ return nil
}
for f.Inner() != nil {
@@ -268,8 +268,8 @@ func cmdBt(args []byte) os.Error {
} else {
fmt.Printf(" ")
}
- fmt.Printf("%8x %v\n", f.pc, f);
- f, err = f.Outer();
+ fmt.Printf("%8x %v\n", f.pc, f)
+ f, err = f.Outer()
if err != nil {
return err
}
@@ -278,20 +278,20 @@ func cmdBt(args []byte) os.Error {
}
}
- fmt.Println("...");
- return nil;
+ fmt.Println("...")
+ return nil
}
func parseNoArgs(args []byte, usage string) os.Error {
- sc, ev := newScanner(args);
- _, tok, _ := sc.Scan();
+ sc, ev := newScanner(args)
+ _, tok, _ := sc.Scan()
if sc.ErrorCount != 0 {
return ev.GetError(scanner.NoMultiples)
}
if tok != token.EOF {
return UsageError(usage)
}
- return nil;
+ return nil
}
/*
@@ -300,12 +300,12 @@ func parseNoArgs(args []byte, usage string) os.Error {
// defineFuncs populates world with the built-in functions.
func defineFuncs() {
- t, v := eval.FuncFromNativeTyped(fnOut, fnOutSig);
- world.DefineConst("Out", t, v);
- t, v = eval.FuncFromNativeTyped(fnContWait, fnContWaitSig);
- world.DefineConst("ContWait", t, v);
- t, v = eval.FuncFromNativeTyped(fnBpSet, fnBpSetSig);
- world.DefineConst("BpSet", t, v);
+ t, v := eval.FuncFromNativeTyped(fnOut, fnOutSig)
+ world.DefineConst("Out", t, v)
+ t, v = eval.FuncFromNativeTyped(fnContWait, fnContWaitSig)
+ world.DefineConst("ContWait", t, v)
+ t, v = eval.FuncFromNativeTyped(fnBpSet, fnBpSetSig)
+ world.DefineConst("BpSet", t, v)
}
// printCurFrame prints the current stack frame, as it would appear in
@@ -314,47 +314,47 @@ func printCurFrame() {
if curProc == nil || curProc.curGoroutine == nil {
return
}
- f := curProc.curGoroutine.frame;
+ f := curProc.curGoroutine.frame
if f == nil {
return
}
- fmt.Printf("=> %8x %v\n", f.pc, f);
+ fmt.Printf("=> %8x %v\n", f.pc, f)
}
// fnOut moves the current frame to the caller of the current frame.
-func fnOutSig() {}
+func fnOutSig() {}
func fnOut(t *eval.Thread, args []eval.Value, res []eval.Value) {
if curProc == nil {
t.Abort(NoCurrentGoroutine{})
}
- err := curProc.Out();
+ err := curProc.Out()
if err != nil {
t.Abort(err)
}
// TODO(austin) Only in the command form
- printCurFrame();
+ printCurFrame()
}
// fnContWait continues the current process and waits for a stopping event.
-func fnContWaitSig() {}
+func fnContWaitSig() {}
func fnContWait(t *eval.Thread, args []eval.Value, res []eval.Value) {
if curProc == nil {
t.Abort(NoCurrentGoroutine{})
}
- err := curProc.ContWait();
+ err := curProc.ContWait()
if err != nil {
t.Abort(err)
}
// TODO(austin) Only in the command form
- ev := curProc.Event();
+ ev := curProc.Event()
if ev != nil {
fmt.Printf("%v\n", ev)
}
- printCurFrame();
+ printCurFrame()
}
// fnBpSet sets a breakpoint at the entry to the named function.
-func fnBpSetSig(string) {}
+func fnBpSetSig(string) {}
func fnBpSet(t *eval.Thread, args []eval.Value, res []eval.Value) {
// TODO(austin) This probably shouldn't take a symbol name.
// Perhaps it should take an interface that provides PC's.
@@ -363,10 +363,10 @@ func fnBpSet(t *eval.Thread, args []eval.Value, res []eval.Value) {
if curProc == nil {
t.Abort(NoCurrentGoroutine{})
}
- name := args[0].(eval.StringValue).Get(t);
- fn := curProc.syms.LookupFunc(name);
+ name := args[0].(eval.StringValue).Get(t)
+ fn := curProc.syms.LookupFunc(name)
if fn == nil {
t.Abort(UsageError("no such function " + name))
}
- curProc.OnBreakpoint(proc.Word(fn.Entry)).AddHandler(EventStop);
+ curProc.OnBreakpoint(proc.Word(fn.Entry)).AddHandler(EventStop)
}
diff --git a/src/pkg/exp/ogle/event.go b/src/pkg/exp/ogle/event.go
index 18f547915..d7092ded3 100644
--- a/src/pkg/exp/ogle/event.go
+++ b/src/pkg/exp/ogle/event.go
@@ -5,9 +5,9 @@
package ogle
import (
- "debug/proc";
- "fmt";
- "os";
+ "debug/proc"
+ "fmt"
+ "os"
)
/*
@@ -32,19 +32,19 @@ type EventHandler func(e Event) (EventAction, os.Error)
type EventAction int
const (
- EARemoveSelf EventAction = 0x100;
- EADefault EventAction = iota;
- EAStop;
- EAContinue;
+ EARemoveSelf EventAction = 0x100
+ EADefault EventAction = iota
+ EAStop
+ EAContinue
)
// A EventHook allows event handlers to be added and removed.
type EventHook interface {
- AddHandler(EventHandler);
- RemoveHandler(EventHandler);
- NumHandler() int;
- handle(e Event) (EventAction, os.Error);
- String() string;
+ AddHandler(EventHandler)
+ RemoveHandler(EventHandler)
+ NumHandler() int
+ handle(e Event) (EventAction, os.Error)
+ String() string
}
// EventHook is almost, but not quite, suitable for user-defined
@@ -53,26 +53,26 @@ type EventHook interface {
// provide a public interface for posting events to hooks.
type Event interface {
- Process() *Process;
- Goroutine() *Goroutine;
- String() string;
+ Process() *Process
+ Goroutine() *Goroutine
+ String() string
}
type commonHook struct {
// Head of handler chain
- head *handler;
+ head *handler
// Number of non-internal handlers
- len int;
+ len int
}
type handler struct {
- eh EventHandler;
+ eh EventHandler
// True if this handler must be run before user-defined
// handlers in order to ensure correctness.
- internal bool;
+ internal bool
// True if this handler has been removed from the chain.
- removed bool;
- next *handler;
+ removed bool
+ next *handler
}
func (h *commonHook) AddHandler(eh EventHandler) {
@@ -81,56 +81,56 @@ func (h *commonHook) AddHandler(eh EventHandler) {
func (h *commonHook) addHandler(eh EventHandler, internal bool) {
// Ensure uniqueness of handlers
- h.RemoveHandler(eh);
+ h.RemoveHandler(eh)
if !internal {
h.len++
}
// Add internal handlers to the beginning
if internal || h.head == nil {
- h.head = &handler{eh, internal, false, h.head};
- return;
+ h.head = &handler{eh, internal, false, h.head}
+ return
}
// Add handler after internal handlers
// TODO(austin) This should probably go on the end instead
- prev := h.head;
+ prev := h.head
for prev.next != nil && prev.internal {
prev = prev.next
}
- prev.next = &handler{eh, internal, false, prev.next};
+ prev.next = &handler{eh, internal, false, prev.next}
}
func (h *commonHook) RemoveHandler(eh EventHandler) {
- plink := &h.head;
+ plink := &h.head
for l := *plink; l != nil; plink, l = &l.next, l.next {
if l.eh == eh {
if !l.internal {
h.len--
}
- l.removed = true;
- *plink = l.next;
- break;
+ l.removed = true
+ *plink = l.next
+ break
}
}
}
-func (h *commonHook) NumHandler() int { return h.len }
+func (h *commonHook) NumHandler() int { return h.len }
func (h *commonHook) handle(e Event) (EventAction, os.Error) {
- action := EADefault;
- plink := &h.head;
+ action := EADefault
+ plink := &h.head
for l := *plink; l != nil; plink, l = &l.next, l.next {
if l.removed {
continue
}
- a, err := l.eh(e);
+ a, err := l.eh(e)
if a&EARemoveSelf == EARemoveSelf {
if !l.internal {
h.len--
}
- l.removed = true;
- *plink = l.next;
- a &^= EARemoveSelf;
+ l.removed = true
+ *plink = l.next
+ a &^= EARemoveSelf
}
if err != nil {
return EAStop, err
@@ -139,19 +139,19 @@ func (h *commonHook) handle(e Event) (EventAction, os.Error) {
action = a
}
}
- return action, nil;
+ return action, nil
}
type commonEvent struct {
// The process of this event
- p *Process;
+ p *Process
// The goroutine of this event.
- t *Goroutine;
+ t *Goroutine
}
-func (e *commonEvent) Process() *Process { return e.p }
+func (e *commonEvent) Process() *Process { return e.p }
-func (e *commonEvent) Goroutine() *Goroutine { return e.t }
+func (e *commonEvent) Goroutine() *Goroutine { return e.t }
/*
* Standard event handlers
@@ -161,8 +161,8 @@ func (e *commonEvent) Goroutine() *Goroutine { return e.t }
// occur. It will not cause the process to stop.
func EventPrint(ev Event) (EventAction, os.Error) {
// TODO(austin) Include process name here?
- fmt.Fprintf(os.Stderr, "*** %v\n", ev.String());
- return EADefault, nil;
+ fmt.Fprintf(os.Stderr, "*** %v\n", ev.String())
+ return EADefault, nil
}
// EventStop is a standard event handler that causes the process to stop.
@@ -175,18 +175,18 @@ func EventStop(ev Event) (EventAction, os.Error) {
*/
type breakpointHook struct {
- commonHook;
- p *Process;
- pc proc.Word;
+ commonHook
+ p *Process
+ pc proc.Word
}
// A Breakpoint event occurs when a process reaches a particular
// program counter. When this event is handled, the current goroutine
// will be the goroutine that reached the program counter.
type Breakpoint struct {
- commonEvent;
- osThread proc.Thread;
- pc proc.Word;
+ commonEvent
+ osThread proc.Thread
+ pc proc.Word
}
func (h *breakpointHook) AddHandler(eh EventHandler) {
@@ -200,20 +200,20 @@ func (h *breakpointHook) addHandler(eh EventHandler, internal bool) {
if cur, ok := h.p.breakpointHooks[h.pc]; ok {
h = cur
}
- oldhead := h.head;
- h.commonHook.addHandler(eh, internal);
+ oldhead := h.head
+ h.commonHook.addHandler(eh, internal)
if oldhead == nil && h.head != nil {
- h.p.proc.AddBreakpoint(h.pc);
- h.p.breakpointHooks[h.pc] = h;
+ h.p.proc.AddBreakpoint(h.pc)
+ h.p.breakpointHooks[h.pc] = h
}
}
func (h *breakpointHook) RemoveHandler(eh EventHandler) {
- oldhead := h.head;
- h.commonHook.RemoveHandler(eh);
+ oldhead := h.head
+ h.commonHook.RemoveHandler(eh)
if oldhead != nil && h.head == nil {
- h.p.proc.RemoveBreakpoint(h.pc);
- h.p.breakpointHooks[h.pc] = nil, false;
+ h.p.proc.RemoveBreakpoint(h.pc)
+ h.p.breakpointHooks[h.pc] = nil, false
}
}
@@ -223,7 +223,7 @@ func (h *breakpointHook) String() string {
return fmt.Sprintf("breakpoint at %#x", h.pc)
}
-func (b *Breakpoint) PC() proc.Word { return b.pc }
+func (b *Breakpoint) PC() proc.Word { return b.pc }
func (b *Breakpoint) String() string {
// TODO(austin) Include process name and goroutine
@@ -236,40 +236,40 @@ func (b *Breakpoint) String() string {
*/
type goroutineCreateHook struct {
- commonHook;
+ commonHook
}
-func (h *goroutineCreateHook) String() string { return "goroutine create" }
+func (h *goroutineCreateHook) String() string { return "goroutine create" }
// A GoroutineCreate event occurs when a process creates a new
// goroutine. When this event is handled, the current goroutine will
// be the newly created goroutine.
type GoroutineCreate struct {
- commonEvent;
- parent *Goroutine;
+ commonEvent
+ parent *Goroutine
}
// Parent returns the goroutine that created this goroutine. May be
// nil if this event is the creation of the first goroutine.
-func (e *GoroutineCreate) Parent() *Goroutine { return e.parent }
+func (e *GoroutineCreate) Parent() *Goroutine { return e.parent }
func (e *GoroutineCreate) String() string {
// TODO(austin) Include process name
if e.parent == nil {
return fmt.Sprintf("%v created", e.t)
}
- return fmt.Sprintf("%v created by %v", e.t, e.parent);
+ return fmt.Sprintf("%v created by %v", e.t, e.parent)
}
type goroutineExitHook struct {
- commonHook;
+ commonHook
}
-func (h *goroutineExitHook) String() string { return "goroutine exit" }
+func (h *goroutineExitHook) String() string { return "goroutine exit" }
// A GoroutineExit event occurs when a Go goroutine exits.
type GoroutineExit struct {
- commonEvent;
+ commonEvent
}
func (e *GoroutineExit) String() string {
diff --git a/src/pkg/exp/ogle/frame.go b/src/pkg/exp/ogle/frame.go
index 6c93f27c7..1538362ba 100644
--- a/src/pkg/exp/ogle/frame.go
+++ b/src/pkg/exp/ogle/frame.go
@@ -5,10 +5,10 @@
package ogle
import (
- "debug/gosym";
- "debug/proc";
- "fmt";
- "os";
+ "debug/gosym"
+ "debug/proc"
+ "fmt"
+ "os"
)
// A Frame represents a single frame on a remote call stack.
@@ -16,30 +16,30 @@ type Frame struct {
// pc is the PC of the next instruction that will execute in
// this frame. For lower frames, this is the instruction
// following the CALL instruction.
- pc, sp, fp proc.Word;
+ pc, sp, fp proc.Word
// The runtime.Stktop of the active stack segment
- stk remoteStruct;
+ stk remoteStruct
// The function this stack frame is in
- fn *gosym.Func;
+ fn *gosym.Func
// The path and line of the CALL or current instruction. Note
// that this differs slightly from the meaning of Frame.pc.
- path string;
- line int;
+ path string
+ line int
// The inner and outer frames of this frame. outer is filled
// in lazily.
- inner, outer *Frame;
+ inner, outer *Frame
}
// newFrame returns the top-most Frame of the given g's thread.
func newFrame(g remoteStruct) (*Frame, os.Error) {
- var f *Frame;
- err := try(func(a aborter) { f = aNewFrame(a, g) });
- return f, err;
+ var f *Frame
+ err := try(func(a aborter) { f = aNewFrame(a, g) })
+ return f, err
}
func aNewFrame(a aborter, g remoteStruct) *Frame {
- p := g.r.p;
- var pc, sp proc.Word;
+ p := g.r.p
+ var pc, sp proc.Word
// Is this G alive?
switch g.field(p.f.G.Status).(remoteInt).aGet(a) {
@@ -54,39 +54,39 @@ func aNewFrame(a aborter, g remoteStruct) *Frame {
// is difficult because the state isn't updated atomically
// with scheduling changes.
for _, t := range p.proc.Threads() {
- regs, err := t.Regs();
+ regs, err := t.Regs()
if err != nil {
// TODO(austin) What to do?
continue
}
- thisg := p.G(regs);
+ thisg := p.G(regs)
if thisg == g.addr().base {
// Found this G's OS thread
- pc = regs.PC();
- sp = regs.SP();
+ pc = regs.PC()
+ sp = regs.SP()
// If this thread crashed, try to recover it
if pc == 0 {
- pc = p.peekUintptr(a, pc);
- sp += 8;
+ pc = p.peekUintptr(a, pc)
+ sp += 8
}
- break;
+ break
}
}
if pc == 0 && sp == 0 {
// G is not mapped to an OS thread. Use the
// scheduler's stored PC and SP.
- sched := g.field(p.f.G.Sched).(remoteStruct);
- pc = proc.Word(sched.field(p.f.Gobuf.Pc).(remoteUint).aGet(a));
- sp = proc.Word(sched.field(p.f.Gobuf.Sp).(remoteUint).aGet(a));
+ sched := g.field(p.f.G.Sched).(remoteStruct)
+ pc = proc.Word(sched.field(p.f.Gobuf.Pc).(remoteUint).aGet(a))
+ sp = proc.Word(sched.field(p.f.Gobuf.Sp).(remoteUint).aGet(a))
}
// Get Stktop
- stk := g.field(p.f.G.Stackbase).(remotePtr).aGet(a).(remoteStruct);
+ stk := g.field(p.f.G.Stackbase).(remotePtr).aGet(a).(remoteStruct)
- return prepareFrame(a, pc, sp, stk, nil);
+ return prepareFrame(a, pc, sp, stk, nil)
}
// prepareFrame creates a Frame from the PC and SP within that frame,
@@ -94,47 +94,47 @@ func aNewFrame(a aborter, g remoteStruct) *Frame {
// traversing stack breaks and unwinding closures.
func prepareFrame(a aborter, pc, sp proc.Word, stk remoteStruct, inner *Frame) *Frame {
// Based on src/pkg/runtime/amd64/traceback.c:traceback
- p := stk.r.p;
- top := inner == nil;
+ p := stk.r.p
+ top := inner == nil
// Get function
- var path string;
- var line int;
- var fn *gosym.Func;
+ var path string
+ var line int
+ var fn *gosym.Func
for i := 0; i < 100; i++ {
// Traverse segmented stack breaks
if p.sys.lessstack != nil && pc == proc.Word(p.sys.lessstack.Value) {
// Get stk->gobuf.pc
- pc = proc.Word(stk.field(p.f.Stktop.Gobuf).(remoteStruct).field(p.f.Gobuf.Pc).(remoteUint).aGet(a));
+ pc = proc.Word(stk.field(p.f.Stktop.Gobuf).(remoteStruct).field(p.f.Gobuf.Pc).(remoteUint).aGet(a))
// Get stk->gobuf.sp
- sp = proc.Word(stk.field(p.f.Stktop.Gobuf).(remoteStruct).field(p.f.Gobuf.Sp).(remoteUint).aGet(a));
+ sp = proc.Word(stk.field(p.f.Stktop.Gobuf).(remoteStruct).field(p.f.Gobuf.Sp).(remoteUint).aGet(a))
// Get stk->stackbase
- stk = stk.field(p.f.Stktop.Stackbase).(remotePtr).aGet(a).(remoteStruct);
- continue;
+ stk = stk.field(p.f.Stktop.Stackbase).(remotePtr).aGet(a).(remoteStruct)
+ continue
}
// Get the PC of the call instruction
- callpc := pc;
+ callpc := pc
if !top && (p.sys.goexit == nil || pc != proc.Word(p.sys.goexit.Value)) {
callpc--
}
// Look up function
- path, line, fn = p.syms.PCToLine(uint64(callpc));
+ path, line, fn = p.syms.PCToLine(uint64(callpc))
if fn != nil {
break
}
// Closure?
- var buf = make([]byte, p.ClosureSize());
+ var buf = make([]byte, p.ClosureSize())
if _, err := p.Peek(pc, buf); err != nil {
break
}
- spdelta, ok := p.ParseClosure(buf);
+ spdelta, ok := p.ParseClosure(buf)
if ok {
- sp += proc.Word(spdelta);
- pc = p.peekUintptr(a, sp-proc.Word(p.PtrSize()));
+ sp += proc.Word(spdelta)
+ pc = p.peekUintptr(a, sp-proc.Word(p.PtrSize()))
}
}
if fn == nil {
@@ -142,7 +142,7 @@ func prepareFrame(a aborter, pc, sp proc.Word, stk remoteStruct, inner *Frame) *
}
// Compute frame pointer
- var fp proc.Word;
+ var fp proc.Word
if fn.FrameSize < p.PtrSize() {
fp = sp + proc.Word(p.PtrSize())
} else {
@@ -160,15 +160,15 @@ func prepareFrame(a aborter, pc, sp proc.Word, stk remoteStruct, inner *Frame) *
fp -= proc.Word(fn.FrameSize - p.PtrSize())
}
- return &Frame{pc, sp, fp, stk, fn, path, line, inner, nil};
+ return &Frame{pc, sp, fp, stk, fn, path, line, inner, nil}
}
// Outer returns the Frame that called this Frame, or nil if this is
// the outermost frame.
func (f *Frame) Outer() (*Frame, os.Error) {
- var fr *Frame;
- err := try(func(a aborter) { fr = f.aOuter(a) });
- return fr, err;
+ var fr *Frame
+ err := try(func(a aborter) { fr = f.aOuter(a) })
+ return fr, err
}
func (f *Frame) aOuter(a aborter) *Frame {
@@ -177,9 +177,9 @@ func (f *Frame) aOuter(a aborter) *Frame {
return f.outer
}
- p := f.stk.r.p;
+ p := f.stk.r.p
- sp := f.fp;
+ sp := f.fp
if f.fn == p.sys.newproc && f.fn == p.sys.deferproc {
// TODO(rsc) The compiler inserts two push/pop's
// around calls to go and defer. Russ says this
@@ -188,25 +188,25 @@ func (f *Frame) aOuter(a aborter) *Frame {
sp += proc.Word(2 * p.PtrSize())
}
- pc := p.peekUintptr(a, f.fp-proc.Word(p.PtrSize()));
+ pc := p.peekUintptr(a, f.fp-proc.Word(p.PtrSize()))
if pc < 0x1000 {
return nil
}
// TODO(austin) Register this frame for shoot-down.
- f.outer = prepareFrame(a, pc, sp, f.stk, f);
- return f.outer;
+ f.outer = prepareFrame(a, pc, sp, f.stk, f)
+ return f.outer
}
// Inner returns the Frame called by this Frame, or nil if this is the
// innermost frame.
-func (f *Frame) Inner() *Frame { return f.inner }
+func (f *Frame) Inner() *Frame { return f.inner }
func (f *Frame) String() string {
- res := f.fn.Name;
+ res := f.fn.Name
if f.pc > proc.Word(f.fn.Value) {
res += fmt.Sprintf("+%#x", f.pc-proc.Word(f.fn.Entry))
}
- return res + fmt.Sprintf(" %s:%d", f.path, f.line);
+ return res + fmt.Sprintf(" %s:%d", f.path, f.line)
}
diff --git a/src/pkg/exp/ogle/goroutine.go b/src/pkg/exp/ogle/goroutine.go
index 0c0075249..5104ec6d4 100644
--- a/src/pkg/exp/ogle/goroutine.go
+++ b/src/pkg/exp/ogle/goroutine.go
@@ -5,17 +5,17 @@
package ogle
import (
- "debug/proc";
- "exp/eval";
- "fmt";
- "os";
+ "debug/proc"
+ "exp/eval"
+ "fmt"
+ "os"
)
// A Goroutine represents a goroutine in a remote process.
type Goroutine struct {
- g remoteStruct;
- frame *Frame;
- dead bool;
+ g remoteStruct
+ frame *Frame
+ dead bool
}
func (t *Goroutine) String() string {
@@ -24,94 +24,94 @@ func (t *Goroutine) String() string {
}
// TODO(austin) Give threads friendly ID's, possibly including
// the name of the entry function.
- return fmt.Sprintf("thread %#x", t.g.addr().base);
+ return fmt.Sprintf("thread %#x", t.g.addr().base)
}
// isG0 returns true if this thread if the internal idle thread
-func (t *Goroutine) isG0() bool { return t.g.addr().base == t.g.r.p.sys.g0.addr().base }
+func (t *Goroutine) isG0() bool { return t.g.addr().base == t.g.r.p.sys.g0.addr().base }
func (t *Goroutine) resetFrame() (err os.Error) {
// TODO(austin) Reuse any live part of the current frame stack
// so existing references to Frame's keep working.
- t.frame, err = newFrame(t.g);
- return;
+ t.frame, err = newFrame(t.g)
+ return
}
// Out selects the caller frame of the current frame.
func (t *Goroutine) Out() os.Error {
- f, err := t.frame.Outer();
+ f, err := t.frame.Outer()
if f != nil {
t.frame = f
}
- return err;
+ return err
}
// In selects the frame called by the current frame.
func (t *Goroutine) In() os.Error {
- f := t.frame.Inner();
+ f := t.frame.Inner()
if f != nil {
t.frame = f
}
- return nil;
+ return nil
}
func readylockedBP(ev Event) (EventAction, os.Error) {
- b := ev.(*Breakpoint);
- p := b.Process();
+ b := ev.(*Breakpoint)
+ p := b.Process()
// The new g is the only argument to this function, so the
// stack will have the return address, then the G*.
- regs, err := b.osThread.Regs();
+ regs, err := b.osThread.Regs()
if err != nil {
return EAStop, err
}
- sp := regs.SP();
- addr := sp + proc.Word(p.PtrSize());
- arg := remotePtr{remote{addr, p}, p.runtime.G};
- var gp eval.Value;
- err = try(func(a aborter) { gp = arg.aGet(a) });
+ sp := regs.SP()
+ addr := sp + proc.Word(p.PtrSize())
+ arg := remotePtr{remote{addr, p}, p.runtime.G}
+ var gp eval.Value
+ err = try(func(a aborter) { gp = arg.aGet(a) })
if err != nil {
return EAStop, err
}
if gp == nil {
return EAStop, UnknownGoroutine{b.osThread, 0}
}
- gs := gp.(remoteStruct);
- g := &Goroutine{gs, nil, false};
- p.goroutines[gs.addr().base] = g;
+ gs := gp.(remoteStruct)
+ g := &Goroutine{gs, nil, false}
+ p.goroutines[gs.addr().base] = g
// Enqueue goroutine creation event
- parent := b.Goroutine();
+ parent := b.Goroutine()
if parent.isG0() {
parent = nil
}
- p.postEvent(&GoroutineCreate{commonEvent{p, g}, parent});
+ p.postEvent(&GoroutineCreate{commonEvent{p, g}, parent})
// If we don't have any thread selected, select this one
if p.curGoroutine == nil {
p.curGoroutine = g
}
- return EADefault, nil;
+ return EADefault, nil
}
func goexitBP(ev Event) (EventAction, os.Error) {
- b := ev.(*Breakpoint);
- p := b.Process();
+ b := ev.(*Breakpoint)
+ p := b.Process()
- g := b.Goroutine();
- g.dead = true;
+ g := b.Goroutine()
+ g.dead = true
- addr := g.g.addr().base;
- p.goroutines[addr] = nil, false;
+ addr := g.g.addr().base
+ p.goroutines[addr] = nil, false
// Enqueue thread exit event
- p.postEvent(&GoroutineExit{commonEvent{p, g}});
+ p.postEvent(&GoroutineExit{commonEvent{p, g}})
// If we just exited our selected goroutine, selected another
if p.curGoroutine == g {
p.selectSomeGoroutine()
}
- return EADefault, nil;
+ return EADefault, nil
}
diff --git a/src/pkg/exp/ogle/main.go b/src/pkg/exp/ogle/main.go
index 39e002978..1999eccca 100644
--- a/src/pkg/exp/ogle/main.go
+++ b/src/pkg/exp/ogle/main.go
@@ -6,4 +6,4 @@ package main
import "exp/ogle"
-func main() { ogle.Main() }
+func main() { ogle.Main() }
diff --git a/src/pkg/exp/ogle/process.go b/src/pkg/exp/ogle/process.go
index efe3c4da4..63f42a9d4 100644
--- a/src/pkg/exp/ogle/process.go
+++ b/src/pkg/exp/ogle/process.go
@@ -5,14 +5,14 @@
package ogle
import (
- "debug/elf";
- "debug/gosym";
- "debug/proc";
- "exp/eval";
- "fmt";
- "log";
- "os";
- "reflect";
+ "debug/elf"
+ "debug/gosym"
+ "debug/proc"
+ "exp/eval"
+ "fmt"
+ "log"
+ "os"
+ "reflect"
)
// A FormatError indicates a failure to process information in or
@@ -20,7 +20,7 @@ import (
// in the object file or runtime structures.
type FormatError string
-func (e FormatError) String() string { return string(e) }
+func (e FormatError) String() string { return string(e) }
// An UnknownArchitecture occurs when trying to load an object file
// that indicates an architecture not supported by the debugger.
@@ -34,13 +34,13 @@ func (e UnknownArchitecture) String() string {
// memory or registers of a process that is not stopped.
type ProcessNotStopped struct{}
-func (e ProcessNotStopped) String() string { return "process not stopped" }
+func (e ProcessNotStopped) String() string { return "process not stopped" }
// An UnknownGoroutine error is an internal error representing an
// unrecognized G structure pointer.
type UnknownGoroutine struct {
- OSThread proc.Thread;
- Goroutine proc.Word;
+ OSThread proc.Thread
+ Goroutine proc.Word
}
func (e UnknownGoroutine) String() string {
@@ -52,50 +52,50 @@ func (e UnknownGoroutine) String() string {
// process).
type NoCurrentGoroutine struct{}
-func (e NoCurrentGoroutine) String() string { return "no current goroutine" }
+func (e NoCurrentGoroutine) String() string { return "no current goroutine" }
// A Process represents a remote attached process.
type Process struct {
- Arch;
- proc proc.Process;
+ Arch
+ proc proc.Process
// The symbol table of this process
- syms *gosym.Table;
+ syms *gosym.Table
// A possibly-stopped OS thread, or nil
- threadCache proc.Thread;
+ threadCache proc.Thread
// Types parsed from the remote process
- types map[proc.Word]*remoteType;
+ types map[proc.Word]*remoteType
// Types and values from the remote runtime package
- runtime runtimeValues;
+ runtime runtimeValues
// Runtime field indexes
- f runtimeIndexes;
+ f runtimeIndexes
// Globals from the sys package (or from no package)
- sys struct {
- lessstack, goexit, newproc, deferproc, newprocreadylocked *gosym.Func;
- allg remotePtr;
- g0 remoteStruct;
- };
+ sys struct {
+ lessstack, goexit, newproc, deferproc, newprocreadylocked *gosym.Func
+ allg remotePtr
+ g0 remoteStruct
+ }
// Event queue
- posted []Event;
- pending []Event;
- event Event;
+ posted []Event
+ pending []Event
+ event Event
// Event hooks
- breakpointHooks map[proc.Word]*breakpointHook;
- goroutineCreateHook *goroutineCreateHook;
- goroutineExitHook *goroutineExitHook;
+ breakpointHooks map[proc.Word]*breakpointHook
+ goroutineCreateHook *goroutineCreateHook
+ goroutineExitHook *goroutineExitHook
// Current goroutine, or nil if there are no goroutines
- curGoroutine *Goroutine;
+ curGoroutine *Goroutine
// Goroutines by the address of their G structure
- goroutines map[proc.Word]*Goroutine;
+ goroutines map[proc.Word]*Goroutine
}
/*
@@ -114,10 +114,10 @@ func NewProcess(tproc proc.Process, arch Arch, syms *gosym.Table) (*Process, os.
goroutineCreateHook: new(goroutineCreateHook),
goroutineExitHook: new(goroutineExitHook),
goroutines: make(map[proc.Word]*Goroutine),
- };
+ }
// Fill in remote runtime
- p.bootstrap();
+ p.bootstrap()
switch {
case p.sys.allg.addr().base == 0:
@@ -131,127 +131,127 @@ func NewProcess(tproc proc.Process, arch Arch, syms *gosym.Table) (*Process, os.
}
// Get current goroutines
- p.goroutines[p.sys.g0.addr().base] = &Goroutine{p.sys.g0, nil, false};
+ p.goroutines[p.sys.g0.addr().base] = &Goroutine{p.sys.g0, nil, false}
err := try(func(a aborter) {
- g := p.sys.allg.aGet(a);
+ g := p.sys.allg.aGet(a)
for g != nil {
- gs := g.(remoteStruct);
- fmt.Printf("*** Found goroutine at %#x\n", gs.addr().base);
- p.goroutines[gs.addr().base] = &Goroutine{gs, nil, false};
- g = gs.field(p.f.G.Alllink).(remotePtr).aGet(a);
+ gs := g.(remoteStruct)
+ fmt.Printf("*** Found goroutine at %#x\n", gs.addr().base)
+ p.goroutines[gs.addr().base] = &Goroutine{gs, nil, false}
+ g = gs.field(p.f.G.Alllink).(remotePtr).aGet(a)
}
- });
+ })
if err != nil {
return nil, err
}
// Create internal breakpoints to catch new and exited goroutines
- p.OnBreakpoint(proc.Word(p.sys.newprocreadylocked.Entry)).(*breakpointHook).addHandler(readylockedBP, true);
- p.OnBreakpoint(proc.Word(p.sys.goexit.Entry)).(*breakpointHook).addHandler(goexitBP, true);
+ p.OnBreakpoint(proc.Word(p.sys.newprocreadylocked.Entry)).(*breakpointHook).addHandler(readylockedBP, true)
+ p.OnBreakpoint(proc.Word(p.sys.goexit.Entry)).(*breakpointHook).addHandler(goexitBP, true)
// Select current frames
for _, g := range p.goroutines {
g.resetFrame()
}
- p.selectSomeGoroutine();
+ p.selectSomeGoroutine()
- return p, nil;
+ return p, nil
}
func elfGoSyms(f *elf.File) (*gosym.Table, os.Error) {
- text := f.Section(".text");
- symtab := f.Section(".gosymtab");
- pclntab := f.Section(".gopclntab");
+ text := f.Section(".text")
+ symtab := f.Section(".gosymtab")
+ pclntab := f.Section(".gopclntab")
if text == nil || symtab == nil || pclntab == nil {
return nil, nil
}
- symdat, err := symtab.Data();
+ symdat, err := symtab.Data()
if err != nil {
return nil, err
}
- pclndat, err := pclntab.Data();
+ pclndat, err := pclntab.Data()
if err != nil {
return nil, err
}
- pcln := gosym.NewLineTable(pclndat, text.Addr);
- tab, err := gosym.NewTable(symdat, pcln);
+ pcln := gosym.NewLineTable(pclndat, text.Addr)
+ tab, err := gosym.NewTable(symdat, pcln)
if err != nil {
return nil, err
}
- return tab, nil;
+ return tab, nil
}
// NewProcessElf constructs a new remote process around a traced
// process and the process' ELF object.
func NewProcessElf(tproc proc.Process, f *elf.File) (*Process, os.Error) {
- syms, err := elfGoSyms(f);
+ syms, err := elfGoSyms(f)
if err != nil {
return nil, err
}
if syms == nil {
return nil, FormatError("Failed to find symbol table")
}
- var arch Arch;
+ var arch Arch
switch f.Machine {
case elf.EM_X86_64:
arch = Amd64
default:
return nil, UnknownArchitecture(f.Machine)
}
- return NewProcess(tproc, arch, syms);
+ return NewProcess(tproc, arch, syms)
}
// bootstrap constructs the runtime structure of a remote process.
func (p *Process) bootstrap() {
// Manually construct runtime types
- p.runtime.String = newManualType(eval.TypeOfNative(rt1String{}), p.Arch);
- p.runtime.Slice = newManualType(eval.TypeOfNative(rt1Slice{}), p.Arch);
- p.runtime.Eface = newManualType(eval.TypeOfNative(rt1Eface{}), p.Arch);
-
- p.runtime.Type = newManualType(eval.TypeOfNative(rt1Type{}), p.Arch);
- p.runtime.CommonType = newManualType(eval.TypeOfNative(rt1CommonType{}), p.Arch);
- p.runtime.UncommonType = newManualType(eval.TypeOfNative(rt1UncommonType{}), p.Arch);
- p.runtime.StructField = newManualType(eval.TypeOfNative(rt1StructField{}), p.Arch);
- p.runtime.StructType = newManualType(eval.TypeOfNative(rt1StructType{}), p.Arch);
- p.runtime.PtrType = newManualType(eval.TypeOfNative(rt1PtrType{}), p.Arch);
- p.runtime.ArrayType = newManualType(eval.TypeOfNative(rt1ArrayType{}), p.Arch);
- p.runtime.SliceType = newManualType(eval.TypeOfNative(rt1SliceType{}), p.Arch);
-
- p.runtime.Stktop = newManualType(eval.TypeOfNative(rt1Stktop{}), p.Arch);
- p.runtime.Gobuf = newManualType(eval.TypeOfNative(rt1Gobuf{}), p.Arch);
- p.runtime.G = newManualType(eval.TypeOfNative(rt1G{}), p.Arch);
+ p.runtime.String = newManualType(eval.TypeOfNative(rt1String{}), p.Arch)
+ p.runtime.Slice = newManualType(eval.TypeOfNative(rt1Slice{}), p.Arch)
+ p.runtime.Eface = newManualType(eval.TypeOfNative(rt1Eface{}), p.Arch)
+
+ p.runtime.Type = newManualType(eval.TypeOfNative(rt1Type{}), p.Arch)
+ p.runtime.CommonType = newManualType(eval.TypeOfNative(rt1CommonType{}), p.Arch)
+ p.runtime.UncommonType = newManualType(eval.TypeOfNative(rt1UncommonType{}), p.Arch)
+ p.runtime.StructField = newManualType(eval.TypeOfNative(rt1StructField{}), p.Arch)
+ p.runtime.StructType = newManualType(eval.TypeOfNative(rt1StructType{}), p.Arch)
+ p.runtime.PtrType = newManualType(eval.TypeOfNative(rt1PtrType{}), p.Arch)
+ p.runtime.ArrayType = newManualType(eval.TypeOfNative(rt1ArrayType{}), p.Arch)
+ p.runtime.SliceType = newManualType(eval.TypeOfNative(rt1SliceType{}), p.Arch)
+
+ p.runtime.Stktop = newManualType(eval.TypeOfNative(rt1Stktop{}), p.Arch)
+ p.runtime.Gobuf = newManualType(eval.TypeOfNative(rt1Gobuf{}), p.Arch)
+ p.runtime.G = newManualType(eval.TypeOfNative(rt1G{}), p.Arch)
// Get addresses of type.*runtime.XType for discrimination.
- rtv := reflect.Indirect(reflect.NewValue(&p.runtime)).(*reflect.StructValue);
- rtvt := rtv.Type().(*reflect.StructType);
+ rtv := reflect.Indirect(reflect.NewValue(&p.runtime)).(*reflect.StructValue)
+ rtvt := rtv.Type().(*reflect.StructType)
for i := 0; i < rtv.NumField(); i++ {
- n := rtvt.Field(i).Name;
+ n := rtvt.Field(i).Name
if n[0] != 'P' || n[1] < 'A' || n[1] > 'Z' {
continue
}
- sym := p.syms.LookupSym("type.*runtime." + n[1:]);
+ sym := p.syms.LookupSym("type.*runtime." + n[1:])
if sym == nil {
continue
}
- rtv.Field(i).(*reflect.Uint64Value).Set(sym.Value);
+ rtv.Field(i).(*reflect.Uint64Value).Set(sym.Value)
}
// Get runtime field indexes
- fillRuntimeIndexes(&p.runtime, &p.f);
+ fillRuntimeIndexes(&p.runtime, &p.f)
// Fill G status
- p.runtime.runtimeGStatus = rt1GStatus;
+ p.runtime.runtimeGStatus = rt1GStatus
// Get globals
- p.sys.lessstack = p.syms.LookupFunc("sys.lessstack");
- p.sys.goexit = p.syms.LookupFunc("goexit");
- p.sys.newproc = p.syms.LookupFunc("sys.newproc");
- p.sys.deferproc = p.syms.LookupFunc("sys.deferproc");
- p.sys.newprocreadylocked = p.syms.LookupFunc("newprocreadylocked");
+ p.sys.lessstack = p.syms.LookupFunc("sys.lessstack")
+ p.sys.goexit = p.syms.LookupFunc("goexit")
+ p.sys.newproc = p.syms.LookupFunc("sys.newproc")
+ p.sys.deferproc = p.syms.LookupFunc("sys.deferproc")
+ p.sys.newprocreadylocked = p.syms.LookupFunc("newprocreadylocked")
if allg := p.syms.LookupSym("allg"); allg != nil {
p.sys.allg = remotePtr{remote{proc.Word(allg.Value), p}, p.runtime.G}
}
@@ -263,11 +263,11 @@ func (p *Process) bootstrap() {
func (p *Process) selectSomeGoroutine() {
// Once we have friendly goroutine ID's, there might be a more
// reasonable behavior for this.
- p.curGoroutine = nil;
+ p.curGoroutine = nil
for _, g := range p.goroutines {
if !g.isG0() && g.frame != nil {
- p.curGoroutine = g;
- return;
+ p.curGoroutine = g
+ return
}
}
}
@@ -285,27 +285,27 @@ func (p *Process) someStoppedOSThread() proc.Thread {
for _, t := range p.proc.Threads() {
if _, err := t.Stopped(); err == nil {
- p.threadCache = t;
- return t;
+ p.threadCache = t
+ return t
}
}
- return nil;
+ return nil
}
func (p *Process) Peek(addr proc.Word, out []byte) (int, os.Error) {
- thr := p.someStoppedOSThread();
+ thr := p.someStoppedOSThread()
if thr == nil {
return 0, ProcessNotStopped{}
}
- return thr.Peek(addr, out);
+ return thr.Peek(addr, out)
}
func (p *Process) Poke(addr proc.Word, b []byte) (int, os.Error) {
- thr := p.someStoppedOSThread();
+ thr := p.someStoppedOSThread()
if thr == nil {
return 0, ProcessNotStopped{}
}
- return thr.Poke(addr, b);
+ return thr.Poke(addr, b)
}
func (p *Process) peekUintptr(a aborter, addr proc.Word) proc.Word {
@@ -323,7 +323,7 @@ func (p *Process) OnBreakpoint(pc proc.Word) EventHook {
return bp
}
// The breakpoint will register itself when a handler is added
- return &breakpointHook{commonHook{nil, 0}, p, pc};
+ return &breakpointHook{commonHook{nil, 0}, p, pc}
}
// OnGoroutineCreate returns the hook that is run when a goroutine is created.
@@ -332,27 +332,27 @@ func (p *Process) OnGoroutineCreate() EventHook {
}
// OnGoroutineExit returns the hook that is run when a goroutine exits.
-func (p *Process) OnGoroutineExit() EventHook { return p.goroutineExitHook }
+func (p *Process) OnGoroutineExit() EventHook { return p.goroutineExitHook }
// osThreadToGoroutine looks up the goroutine running on an OS thread.
func (p *Process) osThreadToGoroutine(t proc.Thread) (*Goroutine, os.Error) {
- regs, err := t.Regs();
+ regs, err := t.Regs()
if err != nil {
return nil, err
}
- g := p.G(regs);
- gt, ok := p.goroutines[g];
+ g := p.G(regs)
+ gt, ok := p.goroutines[g]
if !ok {
return nil, UnknownGoroutine{t, g}
}
- return gt, nil;
+ return gt, nil
}
// causesToEvents translates the stop causes of the underlying process
// into an event queue.
func (p *Process) causesToEvents() ([]Event, os.Error) {
// Count causes we're interested in
- nev := 0;
+ nev := 0
for _, t := range p.proc.Threads() {
if c, err := t.Stopped(); err == nil {
switch c := c.(type) {
@@ -366,87 +366,87 @@ func (p *Process) causesToEvents() ([]Event, os.Error) {
}
// Translate causes to events
- events := make([]Event, nev);
- i := 0;
+ events := make([]Event, nev)
+ i := 0
for _, t := range p.proc.Threads() {
if c, err := t.Stopped(); err == nil {
switch c := c.(type) {
case proc.Breakpoint:
- gt, err := p.osThreadToGoroutine(t);
+ gt, err := p.osThreadToGoroutine(t)
if err != nil {
return nil, err
}
- events[i] = &Breakpoint{commonEvent{p, gt}, t, proc.Word(c)};
- i++;
+ events[i] = &Breakpoint{commonEvent{p, gt}, t, proc.Word(c)}
+ i++
case proc.Signal:
// TODO(austin)
}
}
}
- return events, nil;
+ return events, nil
}
// postEvent appends an event to the posted queue. These events will
// be processed before any currently pending events.
func (p *Process) postEvent(ev Event) {
- n := len(p.posted);
- m := n * 2;
+ n := len(p.posted)
+ m := n * 2
if m == 0 {
m = 4
}
- posted := make([]Event, n+1, m);
+ posted := make([]Event, n+1, m)
for i, p := range p.posted {
posted[i] = p
}
- posted[n] = ev;
- p.posted = posted;
+ posted[n] = ev
+ p.posted = posted
}
// processEvents processes events in the event queue until no events
// remain, a handler returns EAStop, or a handler returns an error.
// It returns either EAStop or EAContinue and possibly an error.
func (p *Process) processEvents() (EventAction, os.Error) {
- var ev Event;
+ var ev Event
for len(p.posted) > 0 {
- ev, p.posted = p.posted[0], p.posted[1:];
- action, err := p.processEvent(ev);
+ ev, p.posted = p.posted[0], p.posted[1:]
+ action, err := p.processEvent(ev)
if action == EAStop {
return action, err
}
}
for len(p.pending) > 0 {
- ev, p.pending = p.pending[0], p.pending[1:];
- action, err := p.processEvent(ev);
+ ev, p.pending = p.pending[0], p.pending[1:]
+ action, err := p.processEvent(ev)
if action == EAStop {
return action, err
}
}
- return EAContinue, nil;
+ return EAContinue, nil
}
// processEvent processes a single event, without manipulating the
// event queues. It returns either EAStop or EAContinue and possibly
// an error.
func (p *Process) processEvent(ev Event) (EventAction, os.Error) {
- p.event = ev;
+ p.event = ev
- var action EventAction;
- var err os.Error;
+ var action EventAction
+ var err os.Error
switch ev := p.event.(type) {
case *Breakpoint:
- hook, ok := p.breakpointHooks[ev.pc];
+ hook, ok := p.breakpointHooks[ev.pc]
if !ok {
break
}
- p.curGoroutine = ev.Goroutine();
- action, err = hook.handle(ev);
+ p.curGoroutine = ev.Goroutine()
+ action, err = hook.handle(ev)
case *GoroutineCreate:
- p.curGoroutine = ev.Goroutine();
- action, err = p.goroutineCreateHook.handle(ev);
+ p.curGoroutine = ev.Goroutine()
+ action, err = p.goroutineCreateHook.handle(ev)
case *GoroutineExit:
action, err = p.goroutineExitHook.handle(ev)
@@ -460,14 +460,14 @@ func (p *Process) processEvent(ev Event) (EventAction, os.Error) {
} else if action == EAStop {
return EAStop, nil
}
- return EAContinue, nil;
+ return EAContinue, nil
}
// Event returns the last event that caused the process to stop. This
// may return nil if the process has never been stopped by an event.
//
// TODO(austin) Return nil if the user calls p.Stop()?
-func (p *Process) Event() Event { return p.event }
+func (p *Process) Event() Event { return p.event }
/*
* Process control
@@ -489,29 +489,29 @@ func (p *Process) Event() Event { return p.event }
// that stops the process.
func (p *Process) ContWait() os.Error {
for {
- a, err := p.processEvents();
+ a, err := p.processEvents()
if err != nil {
return err
} else if a == EAStop {
break
}
- err = p.proc.Continue();
+ err = p.proc.Continue()
if err != nil {
return err
}
- err = p.proc.WaitStop();
+ err = p.proc.WaitStop()
if err != nil {
return err
}
for _, g := range p.goroutines {
g.resetFrame()
}
- p.pending, err = p.causesToEvents();
+ p.pending, err = p.causesToEvents()
if err != nil {
return err
}
}
- return nil;
+ return nil
}
// Out selects the caller frame of the current frame.
@@ -519,7 +519,7 @@ func (p *Process) Out() os.Error {
if p.curGoroutine == nil {
return NoCurrentGoroutine{}
}
- return p.curGoroutine.Out();
+ return p.curGoroutine.Out()
}
// In selects the frame called by the current frame.
@@ -527,5 +527,5 @@ func (p *Process) In() os.Error {
if p.curGoroutine == nil {
return NoCurrentGoroutine{}
}
- return p.curGoroutine.In();
+ return p.curGoroutine.In()
}
diff --git a/src/pkg/exp/ogle/rruntime.go b/src/pkg/exp/ogle/rruntime.go
index 1a7881476..b13344a5f 100644
--- a/src/pkg/exp/ogle/rruntime.go
+++ b/src/pkg/exp/ogle/rruntime.go
@@ -5,9 +5,9 @@
package ogle
import (
- "debug/proc";
- "exp/eval";
- "reflect";
+ "debug/proc"
+ "exp/eval"
+ "reflect"
)
// This file contains remote runtime definitions. Using reflection,
@@ -31,19 +31,19 @@ import (
*/
type rt1String struct {
- str uintptr;
- len int;
+ str uintptr
+ len int
}
type rt1Slice struct {
- array uintptr;
- len int;
- cap int;
+ array uintptr
+ len int
+ cap int
}
type rt1Eface struct {
- typ uintptr;
- ptr uintptr;
+ typ uintptr
+ ptr uintptr
}
/*
@@ -53,17 +53,17 @@ type rt1Eface struct {
*/
type rt1UncommonType struct {
- name *string;
- pkgPath *string;
+ name *string
+ pkgPath *string
//methods []method;
}
type rt1CommonType struct {
- size uintptr;
- hash uint32;
- alg, align, fieldAlign uint8;
- string *string;
- uncommonType *rt1UncommonType;
+ size uintptr
+ hash uint32
+ alg, align, fieldAlign uint8
+ string *string
+ uncommonType *rt1UncommonType
}
type rt1Type struct {
@@ -71,37 +71,37 @@ type rt1Type struct {
// discriminator as an opaque pointer and taking advantage of
// the commonType prologue on all Type's makes type parsing
// much simpler.
- typ uintptr;
- ptr *rt1CommonType;
+ typ uintptr
+ ptr *rt1CommonType
}
type rt1StructField struct {
- name *string;
- pkgPath *string;
- typ *rt1Type;
- tag *string;
- offset uintptr;
+ name *string
+ pkgPath *string
+ typ *rt1Type
+ tag *string
+ offset uintptr
}
type rt1StructType struct {
- rt1CommonType;
- fields []rt1StructField;
+ rt1CommonType
+ fields []rt1StructField
}
type rt1PtrType struct {
- rt1CommonType;
- elem *rt1Type;
+ rt1CommonType
+ elem *rt1Type
}
type rt1SliceType struct {
- rt1CommonType;
- elem *rt1Type;
+ rt1CommonType
+ elem *rt1Type
}
type rt1ArrayType struct {
- rt1CommonType;
- elem *rt1Type;
- len uintptr;
+ rt1CommonType
+ elem *rt1Type
+ len uintptr
}
/*
@@ -113,30 +113,30 @@ type rt1ArrayType struct {
// Fields beginning with _ are only for padding
type rt1Stktop struct {
- stackguard uintptr;
- stackbase *rt1Stktop;
- gobuf rt1Gobuf;
- _args uint32;
- _fp uintptr;
+ stackguard uintptr
+ stackbase *rt1Stktop
+ gobuf rt1Gobuf
+ _args uint32
+ _fp uintptr
}
type rt1Gobuf struct {
- sp uintptr;
- pc uintptr;
- g *rt1G;
- r0 uintptr;
+ sp uintptr
+ pc uintptr
+ g *rt1G
+ r0 uintptr
}
type rt1G struct {
- _stackguard uintptr;
- stackbase *rt1Stktop;
- _defer uintptr;
- sched rt1Gobuf;
- _stack0 uintptr;
- _entry uintptr;
- alllink *rt1G;
- _param uintptr;
- status int16;
+ _stackguard uintptr
+ stackbase *rt1Stktop
+ _defer uintptr
+ sched rt1Gobuf
+ _stack0 uintptr
+ _entry uintptr
+ alllink *rt1G
+ _param uintptr
+ status int16
// Incomplete
}
@@ -156,67 +156,67 @@ var rt1GStatus = runtimeGStatus{
// exactly and the names of the index fields must be the capitalized
// version of the names of the fields in the runtime structures above.
type runtimeIndexes struct {
- String struct {
- Str, Len int;
- };
- Slice struct {
- Array, Len, Cap int;
- };
- Eface struct {
- Typ, Ptr int;
- };
+ String struct {
+ Str, Len int
+ }
+ Slice struct {
+ Array, Len, Cap int
+ }
+ Eface struct {
+ Typ, Ptr int
+ }
- UncommonType struct {
- Name, PkgPath int;
- };
- CommonType struct {
- Size, Hash, Alg, Align, FieldAlign, String, UncommonType int;
- };
- Type struct {
- Typ, Ptr int;
- };
- StructField struct {
- Name, PkgPath, Typ, Tag, Offset int;
- };
- StructType struct {
- Fields int;
- };
- PtrType struct {
- Elem int;
- };
- SliceType struct {
- Elem int;
- };
- ArrayType struct {
- Elem, Len int;
- };
+ UncommonType struct {
+ Name, PkgPath int
+ }
+ CommonType struct {
+ Size, Hash, Alg, Align, FieldAlign, String, UncommonType int
+ }
+ Type struct {
+ Typ, Ptr int
+ }
+ StructField struct {
+ Name, PkgPath, Typ, Tag, Offset int
+ }
+ StructType struct {
+ Fields int
+ }
+ PtrType struct {
+ Elem int
+ }
+ SliceType struct {
+ Elem int
+ }
+ ArrayType struct {
+ Elem, Len int
+ }
- Stktop struct {
- Stackguard, Stackbase, Gobuf int;
- };
- Gobuf struct {
- Sp, Pc, G int;
- };
- G struct {
- Stackbase, Sched, Status, Alllink int;
- };
+ Stktop struct {
+ Stackguard, Stackbase, Gobuf int
+ }
+ Gobuf struct {
+ Sp, Pc, G int
+ }
+ G struct {
+ Stackbase, Sched, Status, Alllink int
+ }
}
// Values of G status codes
type runtimeGStatus struct {
- Gidle, Grunnable, Grunning, Gsyscall, Gwaiting, Gmoribund, Gdead int64;
+ Gidle, Grunnable, Grunning, Gsyscall, Gwaiting, Gmoribund, Gdead int64
}
// runtimeValues stores the types and values that correspond to those
// in the remote runtime package.
type runtimeValues struct {
// Runtime data headers
- String, Slice, Eface *remoteType;
+ String, Slice, Eface *remoteType
// Runtime type structures
Type, CommonType, UncommonType, StructField, StructType, PtrType,
- ArrayType, SliceType *remoteType;
+ ArrayType, SliceType *remoteType
// Runtime scheduler structures
- Stktop, Gobuf, G *remoteType;
+ Stktop, Gobuf, G *remoteType
// Addresses of *runtime.XType types. These are the
// discriminators on the runtime.Type interface. We use local
// reflection to fill these in from the remote symbol table,
@@ -227,45 +227,45 @@ type runtimeValues struct {
PFloat32Type, PFloat64Type, PFloatType,
PArrayType, PStringType, PStructType, PPtrType, PFuncType,
PInterfaceType, PSliceType, PMapType, PChanType,
- PDotDotDotType, PUnsafePointerType proc.Word;
+ PDotDotDotType, PUnsafePointerType proc.Word
// G status values
- runtimeGStatus;
+ runtimeGStatus
}
// fillRuntimeIndexes fills a runtimeIndexes structure will the field
// indexes gathered from the remoteTypes recorded in a runtimeValues
// structure.
func fillRuntimeIndexes(runtime *runtimeValues, out *runtimeIndexes) {
- outv := reflect.Indirect(reflect.NewValue(out)).(*reflect.StructValue);
- outt := outv.Type().(*reflect.StructType);
- runtimev := reflect.Indirect(reflect.NewValue(runtime)).(*reflect.StructValue);
+ outv := reflect.Indirect(reflect.NewValue(out)).(*reflect.StructValue)
+ outt := outv.Type().(*reflect.StructType)
+ runtimev := reflect.Indirect(reflect.NewValue(runtime)).(*reflect.StructValue)
// out contains fields corresponding to each runtime type
for i := 0; i < outt.NumField(); i++ {
// Find the interpreter type for this runtime type
- name := outt.Field(i).Name;
- et := runtimev.FieldByName(name).Interface().(*remoteType).Type.(*eval.StructType);
+ name := outt.Field(i).Name
+ et := runtimev.FieldByName(name).Interface().(*remoteType).Type.(*eval.StructType)
// Get the field indexes of the interpreter struct type
- indexes := make(map[string]int, len(et.Elems));
+ indexes := make(map[string]int, len(et.Elems))
for j, f := range et.Elems {
if f.Anonymous {
continue
}
- name := f.Name;
+ name := f.Name
if name[0] >= 'a' && name[0] <= 'z' {
name = string(name[0]+'A'-'a') + name[1:]
}
- indexes[name] = j;
+ indexes[name] = j
}
// Fill this field of out
- outStructv := outv.Field(i).(*reflect.StructValue);
- outStructt := outStructv.Type().(*reflect.StructType);
+ outStructv := outv.Field(i).(*reflect.StructValue)
+ outStructt := outStructv.Type().(*reflect.StructType)
for j := 0; j < outStructt.NumField(); j++ {
- f := outStructv.Field(j).(*reflect.IntValue);
- name := outStructt.Field(j).Name;
- f.Set(indexes[name]);
+ f := outStructv.Field(j).(*reflect.IntValue)
+ name := outStructt.Field(j).Name
+ f.Set(indexes[name])
}
}
}
diff --git a/src/pkg/exp/ogle/rtype.go b/src/pkg/exp/ogle/rtype.go
index 8814792ef..b20acbad5 100644
--- a/src/pkg/exp/ogle/rtype.go
+++ b/src/pkg/exp/ogle/rtype.go
@@ -5,25 +5,25 @@
package ogle
import (
- "debug/proc";
- "exp/eval";
- "fmt";
- "log";
+ "debug/proc"
+ "exp/eval"
+ "fmt"
+ "log"
)
const debugParseRemoteType = false
// A remoteType is the local representation of a type in a remote process.
type remoteType struct {
- eval.Type;
+ eval.Type
// The size of values of this type in bytes.
- size int;
+ size int
// The field alignment of this type. Only used for
// manually-constructed types.
- fieldAlign int;
+ fieldAlign int
// The maker function to turn a remote address of a value of
// this type into an interpreter Value.
- mk maker;
+ mk maker
}
var manualTypes = make(map[Arch]map[eval.Type]*remoteType)
@@ -38,76 +38,76 @@ func newManualType(t eval.Type, arch Arch) *remoteType {
}
// Get the type map for this architecture
- typeMap, _ := manualTypes[arch];
+ typeMap, _ := manualTypes[arch]
if typeMap == nil {
- typeMap = make(map[eval.Type]*remoteType);
- manualTypes[arch] = typeMap;
+ typeMap = make(map[eval.Type]*remoteType)
+ manualTypes[arch] = typeMap
// Construct basic types for this architecture
basicType := func(t eval.Type, mk maker, size int, fieldAlign int) {
- t = t.(*eval.NamedType).Def;
+ t = t.(*eval.NamedType).Def
if fieldAlign == 0 {
fieldAlign = size
}
- typeMap[t] = &remoteType{t, size, fieldAlign, mk};
- };
- basicType(eval.Uint8Type, mkUint8, 1, 0);
- basicType(eval.Uint32Type, mkUint32, 4, 0);
- basicType(eval.UintptrType, mkUintptr, arch.PtrSize(), 0);
- basicType(eval.Int16Type, mkInt16, 2, 0);
- basicType(eval.Int32Type, mkInt32, 4, 0);
- basicType(eval.IntType, mkInt, arch.IntSize(), 0);
- basicType(eval.StringType, mkString, arch.PtrSize()+arch.IntSize(), arch.PtrSize());
+ typeMap[t] = &remoteType{t, size, fieldAlign, mk}
+ }
+ basicType(eval.Uint8Type, mkUint8, 1, 0)
+ basicType(eval.Uint32Type, mkUint32, 4, 0)
+ basicType(eval.UintptrType, mkUintptr, arch.PtrSize(), 0)
+ basicType(eval.Int16Type, mkInt16, 2, 0)
+ basicType(eval.Int32Type, mkInt32, 4, 0)
+ basicType(eval.IntType, mkInt, arch.IntSize(), 0)
+ basicType(eval.StringType, mkString, arch.PtrSize()+arch.IntSize(), arch.PtrSize())
}
if rt, ok := typeMap[t]; ok {
return rt
}
- var rt *remoteType;
+ var rt *remoteType
switch t := t.(type) {
case *eval.PtrType:
- var elem *remoteType;
- mk := func(r remote) eval.Value { return remotePtr{r, elem} };
- rt = &remoteType{t, arch.PtrSize(), arch.PtrSize(), mk};
+ var elem *remoteType
+ mk := func(r remote) eval.Value { return remotePtr{r, elem} }
+ rt = &remoteType{t, arch.PtrSize(), arch.PtrSize(), mk}
// Construct the element type after registering the
// type to break cycles.
- typeMap[eval.Type(t)] = rt;
- elem = newManualType(t.Elem, arch);
+ typeMap[eval.Type(t)] = rt
+ elem = newManualType(t.Elem, arch)
case *eval.ArrayType:
- elem := newManualType(t.Elem, arch);
- mk := func(r remote) eval.Value { return remoteArray{r, t.Len, elem} };
- rt = &remoteType{t, elem.size * int(t.Len), elem.fieldAlign, mk};
+ elem := newManualType(t.Elem, arch)
+ mk := func(r remote) eval.Value { return remoteArray{r, t.Len, elem} }
+ rt = &remoteType{t, elem.size * int(t.Len), elem.fieldAlign, mk}
case *eval.SliceType:
- elem := newManualType(t.Elem, arch);
- mk := func(r remote) eval.Value { return remoteSlice{r, elem} };
- rt = &remoteType{t, arch.PtrSize() + 2*arch.IntSize(), arch.PtrSize(), mk};
+ elem := newManualType(t.Elem, arch)
+ mk := func(r remote) eval.Value { return remoteSlice{r, elem} }
+ rt = &remoteType{t, arch.PtrSize() + 2*arch.IntSize(), arch.PtrSize(), mk}
case *eval.StructType:
- layout := make([]remoteStructField, len(t.Elems));
- offset := 0;
- fieldAlign := 0;
+ layout := make([]remoteStructField, len(t.Elems))
+ offset := 0
+ fieldAlign := 0
for i, f := range t.Elems {
- elem := newManualType(f.Type, arch);
+ elem := newManualType(f.Type, arch)
if fieldAlign == 0 {
fieldAlign = elem.fieldAlign
}
- offset = arch.Align(offset, elem.fieldAlign);
- layout[i].offset = offset;
- layout[i].fieldType = elem;
- offset += elem.size;
+ offset = arch.Align(offset, elem.fieldAlign)
+ layout[i].offset = offset
+ layout[i].fieldType = elem
+ offset += elem.size
}
- mk := func(r remote) eval.Value { return remoteStruct{r, layout} };
- rt = &remoteType{t, offset, fieldAlign, mk};
+ mk := func(r remote) eval.Value { return remoteStruct{r, layout} }
+ rt = &remoteType{t, offset, fieldAlign, mk}
default:
log.Crashf("cannot manually construct type %T", t)
}
- typeMap[t] = rt;
- return rt;
+ typeMap[t] = rt
+ return rt
}
var prtIndent = ""
@@ -115,8 +115,8 @@ var prtIndent = ""
// parseRemoteType parses a Type structure in a remote process to
// construct the corresponding interpreter type and remote type.
func parseRemoteType(a aborter, rs remoteStruct) *remoteType {
- addr := rs.addr().base;
- p := rs.addr().p;
+ addr := rs.addr().base
+ p := rs.addr().p
// We deal with circular types by discovering cycles at
// NamedTypes. If a type cycles back to something other than
@@ -128,154 +128,154 @@ func parseRemoteType(a aborter, rs remoteStruct) *remoteType {
// first time we encounter the type and re-use that structure
// the second time we encounter it.
- rt, ok := p.types[addr];
+ rt, ok := p.types[addr]
if ok && rt.Type != nil {
return rt
} else if !ok {
- rt = &remoteType{};
- p.types[addr] = rt;
+ rt = &remoteType{}
+ p.types[addr] = rt
}
if debugParseRemoteType {
- sym := p.syms.SymByAddr(uint64(addr));
- name := "<unknown>";
+ sym := p.syms.SymByAddr(uint64(addr))
+ name := "<unknown>"
if sym != nil {
name = sym.Name
}
- log.Stderrf("%sParsing type at %#x (%s)", prtIndent, addr, name);
- prtIndent += " ";
- defer func() { prtIndent = prtIndent[0 : len(prtIndent)-1] }();
+ log.Stderrf("%sParsing type at %#x (%s)", prtIndent, addr, name)
+ prtIndent += " "
+ defer func() { prtIndent = prtIndent[0 : len(prtIndent)-1] }()
}
// Get Type header
- itype := proc.Word(rs.field(p.f.Type.Typ).(remoteUint).aGet(a));
- typ := rs.field(p.f.Type.Ptr).(remotePtr).aGet(a).(remoteStruct);
+ itype := proc.Word(rs.field(p.f.Type.Typ).(remoteUint).aGet(a))
+ typ := rs.field(p.f.Type.Ptr).(remotePtr).aGet(a).(remoteStruct)
// Is this a named type?
- var nt *eval.NamedType;
- uncommon := typ.field(p.f.CommonType.UncommonType).(remotePtr).aGet(a);
+ var nt *eval.NamedType
+ uncommon := typ.field(p.f.CommonType.UncommonType).(remotePtr).aGet(a)
if uncommon != nil {
- name := uncommon.(remoteStruct).field(p.f.UncommonType.Name).(remotePtr).aGet(a);
+ name := uncommon.(remoteStruct).field(p.f.UncommonType.Name).(remotePtr).aGet(a)
if name != nil {
// TODO(austin) Declare type in appropriate remote package
- nt = eval.NewNamedType(name.(remoteString).aGet(a));
- rt.Type = nt;
+ nt = eval.NewNamedType(name.(remoteString).aGet(a))
+ rt.Type = nt
}
}
// Create type
- var t eval.Type;
- var mk maker;
+ var t eval.Type
+ var mk maker
switch itype {
case p.runtime.PBoolType:
- t = eval.BoolType;
- mk = mkBool;
+ t = eval.BoolType
+ mk = mkBool
case p.runtime.PUint8Type:
- t = eval.Uint8Type;
- mk = mkUint8;
+ t = eval.Uint8Type
+ mk = mkUint8
case p.runtime.PUint16Type:
- t = eval.Uint16Type;
- mk = mkUint16;
+ t = eval.Uint16Type
+ mk = mkUint16
case p.runtime.PUint32Type:
- t = eval.Uint32Type;
- mk = mkUint32;
+ t = eval.Uint32Type
+ mk = mkUint32
case p.runtime.PUint64Type:
- t = eval.Uint64Type;
- mk = mkUint64;
+ t = eval.Uint64Type
+ mk = mkUint64
case p.runtime.PUintType:
- t = eval.UintType;
- mk = mkUint;
+ t = eval.UintType
+ mk = mkUint
case p.runtime.PUintptrType:
- t = eval.UintptrType;
- mk = mkUintptr;
+ t = eval.UintptrType
+ mk = mkUintptr
case p.runtime.PInt8Type:
- t = eval.Int8Type;
- mk = mkInt8;
+ t = eval.Int8Type
+ mk = mkInt8
case p.runtime.PInt16Type:
- t = eval.Int16Type;
- mk = mkInt16;
+ t = eval.Int16Type
+ mk = mkInt16
case p.runtime.PInt32Type:
- t = eval.Int32Type;
- mk = mkInt32;
+ t = eval.Int32Type
+ mk = mkInt32
case p.runtime.PInt64Type:
- t = eval.Int64Type;
- mk = mkInt64;
+ t = eval.Int64Type
+ mk = mkInt64
case p.runtime.PIntType:
- t = eval.IntType;
- mk = mkInt;
+ t = eval.IntType
+ mk = mkInt
case p.runtime.PFloat32Type:
- t = eval.Float32Type;
- mk = mkFloat32;
+ t = eval.Float32Type
+ mk = mkFloat32
case p.runtime.PFloat64Type:
- t = eval.Float64Type;
- mk = mkFloat64;
+ t = eval.Float64Type
+ mk = mkFloat64
case p.runtime.PFloatType:
- t = eval.FloatType;
- mk = mkFloat;
+ t = eval.FloatType
+ mk = mkFloat
case p.runtime.PStringType:
- t = eval.StringType;
- mk = mkString;
+ t = eval.StringType
+ mk = mkString
case p.runtime.PArrayType:
// Cast to an ArrayType
- typ := p.runtime.ArrayType.mk(typ.addr()).(remoteStruct);
- len := int64(typ.field(p.f.ArrayType.Len).(remoteUint).aGet(a));
- elem := parseRemoteType(a, typ.field(p.f.ArrayType.Elem).(remotePtr).aGet(a).(remoteStruct));
- t = eval.NewArrayType(len, elem.Type);
- mk = func(r remote) eval.Value { return remoteArray{r, len, elem} };
+ typ := p.runtime.ArrayType.mk(typ.addr()).(remoteStruct)
+ len := int64(typ.field(p.f.ArrayType.Len).(remoteUint).aGet(a))
+ elem := parseRemoteType(a, typ.field(p.f.ArrayType.Elem).(remotePtr).aGet(a).(remoteStruct))
+ t = eval.NewArrayType(len, elem.Type)
+ mk = func(r remote) eval.Value { return remoteArray{r, len, elem} }
case p.runtime.PStructType:
// Cast to a StructType
- typ := p.runtime.StructType.mk(typ.addr()).(remoteStruct);
- fs := typ.field(p.f.StructType.Fields).(remoteSlice).aGet(a);
+ typ := p.runtime.StructType.mk(typ.addr()).(remoteStruct)
+ fs := typ.field(p.f.StructType.Fields).(remoteSlice).aGet(a)
- fields := make([]eval.StructField, fs.Len);
- layout := make([]remoteStructField, fs.Len);
+ fields := make([]eval.StructField, fs.Len)
+ layout := make([]remoteStructField, fs.Len)
for i := range fields {
- f := fs.Base.(remoteArray).elem(int64(i)).(remoteStruct);
- elemrs := f.field(p.f.StructField.Typ).(remotePtr).aGet(a).(remoteStruct);
- elem := parseRemoteType(a, elemrs);
- fields[i].Type = elem.Type;
- name := f.field(p.f.StructField.Name).(remotePtr).aGet(a);
+ f := fs.Base.(remoteArray).elem(int64(i)).(remoteStruct)
+ elemrs := f.field(p.f.StructField.Typ).(remotePtr).aGet(a).(remoteStruct)
+ elem := parseRemoteType(a, elemrs)
+ fields[i].Type = elem.Type
+ name := f.field(p.f.StructField.Name).(remotePtr).aGet(a)
if name == nil {
fields[i].Anonymous = true
} else {
fields[i].Name = name.(remoteString).aGet(a)
}
- layout[i].offset = int(f.field(p.f.StructField.Offset).(remoteUint).aGet(a));
- layout[i].fieldType = elem;
+ layout[i].offset = int(f.field(p.f.StructField.Offset).(remoteUint).aGet(a))
+ layout[i].fieldType = elem
}
- t = eval.NewStructType(fields);
- mk = func(r remote) eval.Value { return remoteStruct{r, layout} };
+ t = eval.NewStructType(fields)
+ mk = func(r remote) eval.Value { return remoteStruct{r, layout} }
case p.runtime.PPtrType:
// Cast to a PtrType
- typ := p.runtime.PtrType.mk(typ.addr()).(remoteStruct);
- elem := parseRemoteType(a, typ.field(p.f.PtrType.Elem).(remotePtr).aGet(a).(remoteStruct));
- t = eval.NewPtrType(elem.Type);
- mk = func(r remote) eval.Value { return remotePtr{r, elem} };
+ typ := p.runtime.PtrType.mk(typ.addr()).(remoteStruct)
+ elem := parseRemoteType(a, typ.field(p.f.PtrType.Elem).(remotePtr).aGet(a).(remoteStruct))
+ t = eval.NewPtrType(elem.Type)
+ mk = func(r remote) eval.Value { return remotePtr{r, elem} }
case p.runtime.PSliceType:
// Cast to a SliceType
- typ := p.runtime.SliceType.mk(typ.addr()).(remoteStruct);
- elem := parseRemoteType(a, typ.field(p.f.SliceType.Elem).(remotePtr).aGet(a).(remoteStruct));
- t = eval.NewSliceType(elem.Type);
- mk = func(r remote) eval.Value { return remoteSlice{r, elem} };
+ typ := p.runtime.SliceType.mk(typ.addr()).(remoteStruct)
+ elem := parseRemoteType(a, typ.field(p.f.SliceType.Elem).(remotePtr).aGet(a).(remoteStruct))
+ t = eval.NewSliceType(elem.Type)
+ mk = func(r remote) eval.Value { return remoteSlice{r, elem} }
case p.runtime.PMapType, p.runtime.PChanType, p.runtime.PFuncType, p.runtime.PInterfaceType, p.runtime.PUnsafePointerType, p.runtime.PDotDotDotType:
// TODO(austin)
- t = eval.UintptrType;
- mk = mkUintptr;
+ t = eval.UintptrType
+ mk = mkUintptr
default:
- sym := p.syms.SymByAddr(uint64(itype));
- name := "<unknown symbol>";
+ sym := p.syms.SymByAddr(uint64(itype))
+ name := "<unknown symbol>"
if sym != nil {
name = sym.Name
}
- err := fmt.Sprintf("runtime type at %#x has unexpected type %#x (%s)", addr, itype, name);
- a.Abort(FormatError(err));
+ err := fmt.Sprintf("runtime type at %#x has unexpected type %#x (%s)", addr, itype, name)
+ a.Abort(FormatError(err))
}
// Fill in the remote type
@@ -284,8 +284,8 @@ func parseRemoteType(a aborter, rs remoteStruct) *remoteType {
} else {
rt.Type = t
}
- rt.size = int(typ.field(p.f.CommonType.Size).(remoteUint).aGet(a));
- rt.mk = mk;
+ rt.size = int(typ.field(p.f.CommonType.Size).(remoteUint).aGet(a))
+ rt.mk = mk
- return rt;
+ return rt
}
diff --git a/src/pkg/exp/ogle/rvalue.go b/src/pkg/exp/ogle/rvalue.go
index ac5ec2be3..ba915ed5c 100644
--- a/src/pkg/exp/ogle/rvalue.go
+++ b/src/pkg/exp/ogle/rvalue.go
@@ -5,9 +5,9 @@
package ogle
import (
- "debug/proc";
- "exp/eval";
- "fmt";
+ "debug/proc"
+ "exp/eval"
+ "fmt"
)
// A RemoteMismatchError occurs when an operation that requires two
@@ -16,26 +16,26 @@ import (
// point to something in another process.
type RemoteMismatchError string
-func (e RemoteMismatchError) String() string { return string(e) }
+func (e RemoteMismatchError) String() string { return string(e) }
// A ReadOnlyError occurs when attempting to set or assign to a
// read-only value.
type ReadOnlyError string
-func (e ReadOnlyError) String() string { return string(e) }
+func (e ReadOnlyError) String() string { return string(e) }
// A maker is a function that converts a remote address into an
// interpreter Value.
type maker func(remote) eval.Value
type remoteValue interface {
- addr() remote;
+ addr() remote
}
// remote represents an address in a remote process.
type remote struct {
- base proc.Word;
- p *Process;
+ base proc.Word
+ p *Process
}
func (v remote) Get(a aborter, size int) uint64 {
@@ -55,34 +55,34 @@ func (v remote) Get(a aborter, size int) uint64 {
//
// TODO(austin) We need to prevent the remote garbage
// collector from collecting objects out from under us.
- var arr [8]byte;
- buf := arr[0:size];
- _, err := v.p.Peek(v.base, buf);
+ var arr [8]byte
+ buf := arr[0:size]
+ _, err := v.p.Peek(v.base, buf)
if err != nil {
a.Abort(err)
}
- return uint64(v.p.ToWord(buf));
+ return uint64(v.p.ToWord(buf))
}
func (v remote) Set(a aborter, size int, x uint64) {
- var arr [8]byte;
- buf := arr[0:size];
- v.p.FromWord(proc.Word(x), buf);
- _, err := v.p.Poke(v.base, buf);
+ var arr [8]byte
+ buf := arr[0:size]
+ v.p.FromWord(proc.Word(x), buf)
+ _, err := v.p.Poke(v.base, buf)
if err != nil {
a.Abort(err)
}
}
-func (v remote) plus(x proc.Word) remote { return remote{v.base + x, v.p} }
+func (v remote) plus(x proc.Word) remote { return remote{v.base + x, v.p} }
func tryRVString(f func(a aborter) string) string {
- var s string;
- err := try(func(a aborter) { s = f(a) });
+ var s string
+ err := try(func(a aborter) { s = f(a) })
if err != nil {
return fmt.Sprintf("<error: %v>", err)
}
- return s;
+ return s
}
/*
@@ -90,7 +90,7 @@ func tryRVString(f func(a aborter) string) string {
*/
type remoteBool struct {
- r remote;
+ r remote
}
func (v remoteBool) String() string {
@@ -101,9 +101,9 @@ func (v remoteBool) Assign(t *eval.Thread, o eval.Value) {
v.Set(t, o.(eval.BoolValue).Get(t))
}
-func (v remoteBool) Get(t *eval.Thread) bool { return v.aGet(t) }
+func (v remoteBool) Get(t *eval.Thread) bool { return v.aGet(t) }
-func (v remoteBool) aGet(a aborter) bool { return v.r.Get(a, 1) != 0 }
+func (v remoteBool) aGet(a aborter) bool { return v.r.Get(a, 1) != 0 }
func (v remoteBool) Set(t *eval.Thread, x bool) {
v.aSet(t, x)
@@ -117,17 +117,17 @@ func (v remoteBool) aSet(a aborter, x bool) {
}
}
-func (v remoteBool) addr() remote { return v.r }
+func (v remoteBool) addr() remote { return v.r }
-func mkBool(r remote) eval.Value { return remoteBool{r} }
+func mkBool(r remote) eval.Value { return remoteBool{r} }
/*
* Uint
*/
type remoteUint struct {
- r remote;
- size int;
+ r remote
+ size int
}
func (v remoteUint) String() string {
@@ -142,35 +142,35 @@ func (v remoteUint) Get(t *eval.Thread) uint64 {
return v.aGet(t)
}
-func (v remoteUint) aGet(a aborter) uint64 { return v.r.Get(a, v.size) }
+func (v remoteUint) aGet(a aborter) uint64 { return v.r.Get(a, v.size) }
func (v remoteUint) Set(t *eval.Thread, x uint64) {
v.aSet(t, x)
}
-func (v remoteUint) aSet(a aborter, x uint64) { v.r.Set(a, v.size, x) }
+func (v remoteUint) aSet(a aborter, x uint64) { v.r.Set(a, v.size, x) }
-func (v remoteUint) addr() remote { return v.r }
+func (v remoteUint) addr() remote { return v.r }
-func mkUint8(r remote) eval.Value { return remoteUint{r, 1} }
+func mkUint8(r remote) eval.Value { return remoteUint{r, 1} }
-func mkUint16(r remote) eval.Value { return remoteUint{r, 2} }
+func mkUint16(r remote) eval.Value { return remoteUint{r, 2} }
-func mkUint32(r remote) eval.Value { return remoteUint{r, 4} }
+func mkUint32(r remote) eval.Value { return remoteUint{r, 4} }
-func mkUint64(r remote) eval.Value { return remoteUint{r, 8} }
+func mkUint64(r remote) eval.Value { return remoteUint{r, 8} }
-func mkUint(r remote) eval.Value { return remoteUint{r, r.p.IntSize()} }
+func mkUint(r remote) eval.Value { return remoteUint{r, r.p.IntSize()} }
-func mkUintptr(r remote) eval.Value { return remoteUint{r, r.p.PtrSize()} }
+func mkUintptr(r remote) eval.Value { return remoteUint{r, r.p.PtrSize()} }
/*
* Int
*/
type remoteInt struct {
- r remote;
- size int;
+ r remote
+ size int
}
func (v remoteInt) String() string {
@@ -181,35 +181,35 @@ func (v remoteInt) Assign(t *eval.Thread, o eval.Value) {
v.Set(t, o.(eval.IntValue).Get(t))
}
-func (v remoteInt) Get(t *eval.Thread) int64 { return v.aGet(t) }
+func (v remoteInt) Get(t *eval.Thread) int64 { return v.aGet(t) }
-func (v remoteInt) aGet(a aborter) int64 { return int64(v.r.Get(a, v.size)) }
+func (v remoteInt) aGet(a aborter) int64 { return int64(v.r.Get(a, v.size)) }
func (v remoteInt) Set(t *eval.Thread, x int64) {
v.aSet(t, x)
}
-func (v remoteInt) aSet(a aborter, x int64) { v.r.Set(a, v.size, uint64(x)) }
+func (v remoteInt) aSet(a aborter, x int64) { v.r.Set(a, v.size, uint64(x)) }
-func (v remoteInt) addr() remote { return v.r }
+func (v remoteInt) addr() remote { return v.r }
-func mkInt8(r remote) eval.Value { return remoteInt{r, 1} }
+func mkInt8(r remote) eval.Value { return remoteInt{r, 1} }
-func mkInt16(r remote) eval.Value { return remoteInt{r, 2} }
+func mkInt16(r remote) eval.Value { return remoteInt{r, 2} }
-func mkInt32(r remote) eval.Value { return remoteInt{r, 4} }
+func mkInt32(r remote) eval.Value { return remoteInt{r, 4} }
-func mkInt64(r remote) eval.Value { return remoteInt{r, 8} }
+func mkInt64(r remote) eval.Value { return remoteInt{r, 8} }
-func mkInt(r remote) eval.Value { return remoteInt{r, r.p.IntSize()} }
+func mkInt(r remote) eval.Value { return remoteInt{r, r.p.IntSize()} }
/*
* Float
*/
type remoteFloat struct {
- r remote;
- size int;
+ r remote
+ size int
}
func (v remoteFloat) String() string {
@@ -225,14 +225,14 @@ func (v remoteFloat) Get(t *eval.Thread) float64 {
}
func (v remoteFloat) aGet(a aborter) float64 {
- bits := v.r.Get(a, v.size);
+ bits := v.r.Get(a, v.size)
switch v.size {
case 4:
return float64(v.r.p.ToFloat32(uint32(bits)))
case 8:
return v.r.p.ToFloat64(bits)
}
- panic("Unexpected float size ", v.size);
+ panic("Unexpected float size ", v.size)
}
func (v remoteFloat) Set(t *eval.Thread, x float64) {
@@ -240,7 +240,7 @@ func (v remoteFloat) Set(t *eval.Thread, x float64) {
}
func (v remoteFloat) aSet(a aborter, x float64) {
- var bits uint64;
+ var bits uint64
switch v.size {
case 4:
bits = uint64(v.r.p.FromFloat32(float32(x)))
@@ -249,23 +249,23 @@ func (v remoteFloat) aSet(a aborter, x float64) {
default:
panic("Unexpected float size ", v.size)
}
- v.r.Set(a, v.size, bits);
+ v.r.Set(a, v.size, bits)
}
-func (v remoteFloat) addr() remote { return v.r }
+func (v remoteFloat) addr() remote { return v.r }
-func mkFloat32(r remote) eval.Value { return remoteFloat{r, 4} }
+func mkFloat32(r remote) eval.Value { return remoteFloat{r, 4} }
-func mkFloat64(r remote) eval.Value { return remoteFloat{r, 8} }
+func mkFloat64(r remote) eval.Value { return remoteFloat{r, 8} }
-func mkFloat(r remote) eval.Value { return remoteFloat{r, r.p.FloatSize()} }
+func mkFloat(r remote) eval.Value { return remoteFloat{r, r.p.FloatSize()} }
/*
* String
*/
type remoteString struct {
- r remote;
+ r remote
}
func (v remoteString) String() string {
@@ -281,16 +281,16 @@ func (v remoteString) Get(t *eval.Thread) string {
}
func (v remoteString) aGet(a aborter) string {
- rs := v.r.p.runtime.String.mk(v.r).(remoteStruct);
- str := proc.Word(rs.field(v.r.p.f.String.Str).(remoteUint).aGet(a));
- len := rs.field(v.r.p.f.String.Len).(remoteInt).aGet(a);
+ rs := v.r.p.runtime.String.mk(v.r).(remoteStruct)
+ str := proc.Word(rs.field(v.r.p.f.String.Str).(remoteUint).aGet(a))
+ len := rs.field(v.r.p.f.String.Len).(remoteInt).aGet(a)
- bytes := make([]uint8, len);
- _, err := v.r.p.Peek(str, bytes);
+ bytes := make([]uint8, len)
+ _, err := v.r.p.Peek(str, bytes)
if err != nil {
a.Abort(err)
}
- return string(bytes);
+ return string(bytes)
}
func (v remoteString) Set(t *eval.Thread, x string) {
@@ -303,33 +303,33 @@ func (v remoteString) aSet(a aborter, x string) {
a.Abort(ReadOnlyError("remote strings cannot be assigned to"))
}
-func mkString(r remote) eval.Value { return remoteString{r} }
+func mkString(r remote) eval.Value { return remoteString{r} }
/*
* Array
*/
type remoteArray struct {
- r remote;
- len int64;
- elemType *remoteType;
+ r remote
+ len int64
+ elemType *remoteType
}
func (v remoteArray) String() string {
- res := "{";
+ res := "{"
for i := int64(0); i < v.len; i++ {
if i > 0 {
res += ", "
}
- res += v.elem(i).String();
+ res += v.elem(i).String()
}
- return res + "}";
+ return res + "}"
}
func (v remoteArray) Assign(t *eval.Thread, o eval.Value) {
// TODO(austin) Could do a bigger memcpy if o is a
// remoteArray in the same Process.
- oa := o.(eval.ArrayValue);
+ oa := o.(eval.ArrayValue)
for i := int64(0); i < v.len; i++ {
v.Elem(t, i).Assign(t, oa.Elem(t, i))
}
@@ -356,30 +356,30 @@ func (v remoteArray) Sub(i int64, len int64) eval.ArrayValue {
*/
type remoteStruct struct {
- r remote;
- layout []remoteStructField;
+ r remote
+ layout []remoteStructField
}
type remoteStructField struct {
- offset int;
- fieldType *remoteType;
+ offset int
+ fieldType *remoteType
}
func (v remoteStruct) String() string {
- res := "{";
+ res := "{"
for i := range v.layout {
if i > 0 {
res += ", "
}
- res += v.field(i).String();
+ res += v.field(i).String()
}
- return res + "}";
+ return res + "}"
}
func (v remoteStruct) Assign(t *eval.Thread, o eval.Value) {
// TODO(austin) Could do a bigger memcpy.
- oa := o.(eval.StructValue);
- l := len(v.layout);
+ oa := o.(eval.StructValue)
+ l := len(v.layout)
for i := 0; i < l; i++ {
v.Field(t, i).Assign(t, oa.Field(t, i))
}
@@ -394,11 +394,11 @@ func (v remoteStruct) Field(t *eval.Thread, i int) eval.Value {
}
func (v remoteStruct) field(i int) eval.Value {
- f := &v.layout[i];
- return f.fieldType.mk(v.r.plus(proc.Word(f.offset)));
+ f := &v.layout[i]
+ return f.fieldType.mk(v.r.plus(proc.Word(f.offset)))
}
-func (v remoteStruct) addr() remote { return v.r }
+func (v remoteStruct) addr() remote { return v.r }
/*
* Pointer
@@ -409,17 +409,17 @@ func (v remoteStruct) addr() remote { return v.r }
// remotePtr.Get() will be structs.
type remotePtr struct {
- r remote;
- elemType *remoteType;
+ r remote
+ elemType *remoteType
}
func (v remotePtr) String() string {
return tryRVString(func(a aborter) string {
- e := v.aGet(a);
+ e := v.aGet(a)
if e == nil {
return "<nil>"
}
- return "&" + e.String();
+ return "&" + e.String()
})
}
@@ -432,11 +432,11 @@ func (v remotePtr) Get(t *eval.Thread) eval.Value {
}
func (v remotePtr) aGet(a aborter) eval.Value {
- addr := proc.Word(v.r.Get(a, v.r.p.PtrSize()));
+ addr := proc.Word(v.r.Get(a, v.r.p.PtrSize()))
if addr == 0 {
return nil
}
- return v.elemType.mk(remote{addr, v.r.p});
+ return v.elemType.mk(remote{addr, v.r.p})
}
func (v remotePtr) Set(t *eval.Thread, x eval.Value) {
@@ -445,34 +445,34 @@ func (v remotePtr) Set(t *eval.Thread, x eval.Value) {
func (v remotePtr) aSet(a aborter, x eval.Value) {
if x == nil {
- v.r.Set(a, v.r.p.PtrSize(), 0);
- return;
+ v.r.Set(a, v.r.p.PtrSize(), 0)
+ return
}
- xr, ok := x.(remoteValue);
+ xr, ok := x.(remoteValue)
if !ok || v.r.p != xr.addr().p {
a.Abort(RemoteMismatchError("remote pointer must point within the same process"))
}
- v.r.Set(a, v.r.p.PtrSize(), uint64(xr.addr().base));
+ v.r.Set(a, v.r.p.PtrSize(), uint64(xr.addr().base))
}
-func (v remotePtr) addr() remote { return v.r }
+func (v remotePtr) addr() remote { return v.r }
/*
* Slice
*/
type remoteSlice struct {
- r remote;
- elemType *remoteType;
+ r remote
+ elemType *remoteType
}
func (v remoteSlice) String() string {
return tryRVString(func(a aborter) string {
- b := v.aGet(a).Base;
+ b := v.aGet(a).Base
if b == nil {
return "<nil>"
}
- return b.String();
+ return b.String()
})
}
@@ -485,14 +485,14 @@ func (v remoteSlice) Get(t *eval.Thread) eval.Slice {
}
func (v remoteSlice) aGet(a aborter) eval.Slice {
- rs := v.r.p.runtime.Slice.mk(v.r).(remoteStruct);
- base := proc.Word(rs.field(v.r.p.f.Slice.Array).(remoteUint).aGet(a));
- nel := rs.field(v.r.p.f.Slice.Len).(remoteInt).aGet(a);
- cap := rs.field(v.r.p.f.Slice.Cap).(remoteInt).aGet(a);
+ rs := v.r.p.runtime.Slice.mk(v.r).(remoteStruct)
+ base := proc.Word(rs.field(v.r.p.f.Slice.Array).(remoteUint).aGet(a))
+ nel := rs.field(v.r.p.f.Slice.Len).(remoteInt).aGet(a)
+ cap := rs.field(v.r.p.f.Slice.Cap).(remoteInt).aGet(a)
if base == 0 {
return eval.Slice{nil, nel, cap}
}
- return eval.Slice{remoteArray{remote{base, v.r.p}, nel, v.elemType}, nel, cap};
+ return eval.Slice{remoteArray{remote{base, v.r.p}, nel, v.elemType}, nel, cap}
}
func (v remoteSlice) Set(t *eval.Thread, x eval.Slice) {
@@ -500,16 +500,16 @@ func (v remoteSlice) Set(t *eval.Thread, x eval.Slice) {
}
func (v remoteSlice) aSet(a aborter, x eval.Slice) {
- rs := v.r.p.runtime.Slice.mk(v.r).(remoteStruct);
+ rs := v.r.p.runtime.Slice.mk(v.r).(remoteStruct)
if x.Base == nil {
rs.field(v.r.p.f.Slice.Array).(remoteUint).aSet(a, 0)
} else {
- ar, ok := x.Base.(remoteArray);
+ ar, ok := x.Base.(remoteArray)
if !ok || v.r.p != ar.r.p {
a.Abort(RemoteMismatchError("remote slice must point within the same process"))
}
- rs.field(v.r.p.f.Slice.Array).(remoteUint).aSet(a, uint64(ar.r.base));
+ rs.field(v.r.p.f.Slice.Array).(remoteUint).aSet(a, uint64(ar.r.base))
}
- rs.field(v.r.p.f.Slice.Len).(remoteInt).aSet(a, x.Len);
- rs.field(v.r.p.f.Slice.Cap).(remoteInt).aSet(a, x.Cap);
+ rs.field(v.r.p.f.Slice.Len).(remoteInt).aSet(a, x.Len)
+ rs.field(v.r.p.f.Slice.Cap).(remoteInt).aSet(a, x.Cap)
}
diff --git a/src/pkg/exp/ogle/vars.go b/src/pkg/exp/ogle/vars.go
index 7ceeb5101..e6298bc48 100644
--- a/src/pkg/exp/ogle/vars.go
+++ b/src/pkg/exp/ogle/vars.go
@@ -5,11 +5,11 @@
package ogle
import (
- "debug/gosym";
- "debug/proc";
- "exp/eval";
- "log";
- "os";
+ "debug/gosym"
+ "debug/proc"
+ "exp/eval"
+ "log"
+ "os"
)
/*
@@ -19,8 +19,8 @@ import (
// A NotOnStack error occurs when attempting to access a variable in a
// remote frame where that remote frame is not on the current stack.
type NotOnStack struct {
- Fn *gosym.Func;
- Goroutine *Goroutine;
+ Fn *gosym.Func
+ Goroutine *Goroutine
}
func (e NotOnStack) String() string {
@@ -33,9 +33,9 @@ func (e NotOnStack) String() string {
// stack and returns a structure containing the local variables of
// that function.
type remoteFramePtr struct {
- p *Process;
- fn *gosym.Func;
- rt *remoteType;
+ p *Process
+ fn *gosym.Func
+ rt *remoteType
}
func (v remoteFramePtr) String() string {
@@ -48,7 +48,7 @@ func (v remoteFramePtr) Assign(t *eval.Thread, o eval.Value) {
}
func (v remoteFramePtr) Get(t *eval.Thread) eval.Value {
- g := v.p.curGoroutine;
+ g := v.p.curGoroutine
if g == nil || g.frame == nil {
t.Abort(NoCurrentGoroutine{})
}
@@ -59,11 +59,11 @@ func (v remoteFramePtr) Get(t *eval.Thread) eval.Value {
}
// TODO(austin): Register for shootdown with f
- return v.rt.mk(remote{f.fp, v.p});
+ return v.rt.mk(remote{f.fp, v.p})
}
- t.Abort(NotOnStack{v.fn, g});
- panic();
+ t.Abort(NotOnStack{v.fn, g})
+ panic()
}
func (v remoteFramePtr) Set(t *eval.Thread, x eval.Value) {
@@ -87,10 +87,10 @@ func (v remoteFramePtr) Set(t *eval.Thread, x eval.Value) {
// represents a package in a remote process. It's essentially a
// regular struct, except it cannot be assigned to.
type remotePackage struct {
- defs []eval.Value;
+ defs []eval.Value
}
-func (v remotePackage) String() string { return "<remote package>" }
+func (v remotePackage) String() string { return "<remote package>" }
func (v remotePackage) Assign(t *eval.Thread, o eval.Value) {
t.Abort(ReadOnlyError("remote packages cannot be assigned to"))
@@ -113,10 +113,10 @@ func (v remotePackage) Field(t *eval.Thread, i int) eval.Value {
// fields for each global and function in that package.
func (p *Process) populateWorld(w *eval.World) os.Error {
type def struct {
- t eval.Type;
- v eval.Value;
+ t eval.Type
+ v eval.Value
}
- packages := make(map[string]map[string]def);
+ packages := make(map[string]map[string]def)
for _, s := range p.syms.Syms {
if s.ReceiverName() != "" {
@@ -125,27 +125,27 @@ func (p *Process) populateWorld(w *eval.World) os.Error {
}
// Package
- pkgName := s.PackageName();
+ pkgName := s.PackageName()
switch pkgName {
case "", "type", "extratype", "string", "go":
// "go" is really "go.string"
continue
}
- pkg, ok := packages[pkgName];
+ pkg, ok := packages[pkgName]
if !ok {
- pkg = make(map[string]def);
- packages[pkgName] = pkg;
+ pkg = make(map[string]def)
+ packages[pkgName] = pkg
}
// Symbol name
- name := s.BaseName();
+ name := s.BaseName()
if _, ok := pkg[name]; ok {
- log.Stderrf("Multiple definitions of symbol %s", s.Name);
- continue;
+ log.Stderrf("Multiple definitions of symbol %s", s.Name)
+ continue
}
// Symbol type
- rt, err := p.typeOfSym(&s);
+ rt, err := p.typeOfSym(&s)
if err != nil {
return err
}
@@ -157,19 +157,19 @@ func (p *Process) populateWorld(w *eval.World) os.Error {
if rt == nil {
continue
}
- pkg[name] = def{rt.Type, rt.mk(remote{proc.Word(s.Value), p})};
+ pkg[name] = def{rt.Type, rt.mk(remote{proc.Word(s.Value), p})}
case 'T', 't', 'L', 'l':
// Function
- s := s.Func;
+ s := s.Func
// TODO(austin): Ideally, this would *also* be
// callable. How does that interact with type
// conversion syntax?
- rt, err := p.makeFrameType(s);
+ rt, err := p.makeFrameType(s)
if err != nil {
return err
}
- pkg[name] = def{eval.NewPtrType(rt.Type), remoteFramePtr{p, s, rt}};
+ pkg[name] = def{eval.NewPtrType(rt.Type), remoteFramePtr{p, s, rt}}
}
}
@@ -177,25 +177,25 @@ func (p *Process) populateWorld(w *eval.World) os.Error {
// Define packages
for pkgName, defs := range packages {
- fields := make([]eval.StructField, len(defs));
- vals := make([]eval.Value, len(defs));
- i := 0;
+ fields := make([]eval.StructField, len(defs))
+ vals := make([]eval.Value, len(defs))
+ i := 0
for name, def := range defs {
- fields[i].Name = name;
- fields[i].Type = def.t;
- vals[i] = def.v;
- i++;
+ fields[i].Name = name
+ fields[i].Type = def.t
+ vals[i] = def.v
+ i++
}
- pkgType := eval.NewStructType(fields);
- pkgVal := remotePackage{vals};
+ pkgType := eval.NewStructType(fields)
+ pkgVal := remotePackage{vals}
- err := w.DefineConst(pkgName, pkgType, pkgVal);
+ err := w.DefineConst(pkgName, pkgType, pkgVal)
if err != nil {
log.Stderrf("while defining package %s: %v", pkgName, err)
}
}
- return nil;
+ return nil
}
// typeOfSym returns the type associated with a symbol. If the symbol
@@ -204,23 +204,23 @@ func (p *Process) typeOfSym(s *gosym.Sym) (*remoteType, os.Error) {
if s.GoType == 0 {
return nil, nil
}
- addr := proc.Word(s.GoType);
- var rt *remoteType;
- err := try(func(a aborter) { rt = parseRemoteType(a, p.runtime.Type.mk(remote{addr, p}).(remoteStruct)) });
+ addr := proc.Word(s.GoType)
+ var rt *remoteType
+ err := try(func(a aborter) { rt = parseRemoteType(a, p.runtime.Type.mk(remote{addr, p}).(remoteStruct)) })
if err != nil {
return nil, err
}
- return rt, nil;
+ return rt, nil
}
// makeFrameType constructs a struct type for the frame of a function.
// The offsets in this struct type are such that the struct can be
// instantiated at this function's frame pointer.
func (p *Process) makeFrameType(s *gosym.Func) (*remoteType, os.Error) {
- n := len(s.Params) + len(s.Locals);
- fields := make([]eval.StructField, n);
- layout := make([]remoteStructField, n);
- i := 0;
+ n := len(s.Params) + len(s.Locals)
+ fields := make([]eval.StructField, n)
+ layout := make([]remoteStructField, n)
+ i := 0
// TODO(austin): There can be multiple locals/parameters with
// the same name. We probably need liveness information to do
@@ -230,7 +230,7 @@ func (p *Process) makeFrameType(s *gosym.Func) (*remoteType, os.Error) {
// things like "i", where there's an obvious right answer.
for _, param := range s.Params {
- rt, err := p.typeOfSym(param);
+ rt, err := p.typeOfSym(param)
if err != nil {
return nil, err
}
@@ -240,33 +240,33 @@ func (p *Process) makeFrameType(s *gosym.Func) (*remoteType, os.Error) {
}
// TODO(austin): Why do local variables carry their
// package name?
- fields[i].Name = param.BaseName();
- fields[i].Type = rt.Type;
+ fields[i].Name = param.BaseName()
+ fields[i].Type = rt.Type
// Parameters have positive offsets from FP
- layout[i].offset = int(param.Value);
- layout[i].fieldType = rt;
- i++;
+ layout[i].offset = int(param.Value)
+ layout[i].fieldType = rt
+ i++
}
for _, local := range s.Locals {
- rt, err := p.typeOfSym(local);
+ rt, err := p.typeOfSym(local)
if err != nil {
return nil, err
}
if rt == nil {
continue
}
- fields[i].Name = local.BaseName();
- fields[i].Type = rt.Type;
+ fields[i].Name = local.BaseName()
+ fields[i].Type = rt.Type
// Locals have negative offsets from FP - PtrSize
- layout[i].offset = -int(local.Value) - p.PtrSize();
- layout[i].fieldType = rt;
- i++;
+ layout[i].offset = -int(local.Value) - p.PtrSize()
+ layout[i].fieldType = rt
+ i++
}
- fields = fields[0:i];
- layout = layout[0:i];
- t := eval.NewStructType(fields);
- mk := func(r remote) eval.Value { return remoteStruct{r, layout} };
- return &remoteType{t, 0, 0, mk}, nil;
+ fields = fields[0:i]
+ layout = layout[0:i]
+ t := eval.NewStructType(fields)
+ mk := func(r remote) eval.Value { return remoteStruct{r, layout} }
+ return &remoteType{t, 0, 0, mk}, nil
}
diff --git a/src/pkg/exp/parser/interface.go b/src/pkg/exp/parser/interface.go
index ca01de200..495c0c29e 100644
--- a/src/pkg/exp/parser/interface.go
+++ b/src/pkg/exp/parser/interface.go
@@ -7,15 +7,15 @@
package oldParser
import (
- "bytes";
- "fmt";
- "go/ast";
- "go/scanner";
- "io";
- "io/ioutil";
- "os";
- pathutil "path";
- "strings";
+ "bytes"
+ "fmt"
+ "go/ast"
+ "go/scanner"
+ "io"
+ "io/ioutil"
+ "os"
+ pathutil "path"
+ "strings"
)
@@ -36,18 +36,18 @@ func readSource(filename string, src interface{}) ([]byte, os.Error) {
return s.Bytes(), nil
}
case io.Reader:
- var buf bytes.Buffer;
- _, err := io.Copy(&buf, s);
+ var buf bytes.Buffer
+ _, err := io.Copy(&buf, s)
if err != nil {
return nil, err
}
- return buf.Bytes(), nil;
+ return buf.Bytes(), nil
default:
return nil, os.ErrorString("invalid source")
}
}
- return ioutil.ReadFile(filename);
+ return ioutil.ReadFile(filename)
}
@@ -57,14 +57,14 @@ func readSource(filename string, src interface{}) ([]byte, os.Error) {
// may be nil or contain a partial AST.
//
func ParseExpr(filename string, src interface{}) (ast.Expr, os.Error) {
- data, err := readSource(filename, src);
+ data, err := readSource(filename, src)
if err != nil {
return nil, err
}
- var p parser;
- p.init(filename, data, 0);
- return p.parseExpr(), p.GetError(scanner.Sorted);
+ var p parser
+ p.init(filename, data, 0)
+ return p.parseExpr(), p.GetError(scanner.Sorted)
}
@@ -74,14 +74,14 @@ func ParseExpr(filename string, src interface{}) (ast.Expr, os.Error) {
// list may be nil or contain partial ASTs.
//
func ParseStmtList(filename string, src interface{}) ([]ast.Stmt, os.Error) {
- data, err := readSource(filename, src);
+ data, err := readSource(filename, src)
if err != nil {
return nil, err
}
- var p parser;
- p.init(filename, data, 0);
- return p.parseStmtList(), p.GetError(scanner.Sorted);
+ var p parser
+ p.init(filename, data, 0)
+ return p.parseStmtList(), p.GetError(scanner.Sorted)
}
@@ -91,14 +91,14 @@ func ParseStmtList(filename string, src interface{}) ([]ast.Stmt, os.Error) {
// list may be nil or contain partial ASTs.
//
func ParseDeclList(filename string, src interface{}) ([]ast.Decl, os.Error) {
- data, err := readSource(filename, src);
+ data, err := readSource(filename, src)
if err != nil {
return nil, err
}
- var p parser;
- p.init(filename, data, 0);
- return p.parseDeclList(), p.GetError(scanner.Sorted);
+ var p parser
+ p.init(filename, data, 0)
+ return p.parseDeclList(), p.GetError(scanner.Sorted)
}
@@ -121,14 +121,14 @@ func ParseDeclList(filename string, src interface{}) ([]ast.Decl, os.Error) {
// are returned via a scanner.ErrorList which is sorted by file position.
//
func ParseFile(filename string, src interface{}, mode uint) (*ast.File, os.Error) {
- data, err := readSource(filename, src);
+ data, err := readSource(filename, src)
if err != nil {
return nil, err
}
- var p parser;
- p.init(filename, data, mode);
- return p.parseFile(), p.GetError(scanner.NoMultiples);
+ var p parser
+ p.init(filename, data, mode)
+ return p.parseFile(), p.GetError(scanner.NoMultiples)
}
@@ -139,13 +139,13 @@ func ParseFile(filename string, src interface{}, mode uint) (*ast.File, os.Error
// flags that control the amount of source text parsed are ignored.
//
func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
- src, err := ioutil.ReadFile(filename);
+ src, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
if pkgname != "" {
- prog, err := ParseFile(filename, src, PackageClauseOnly);
+ prog, err := ParseFile(filename, src, PackageClauseOnly)
if err != nil {
return nil, err
}
@@ -155,7 +155,7 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
}
// ignore flags that control partial parsing
- return ParseFile(filename, src, mode&^(PackageClauseOnly|ImportsOnly));
+ return ParseFile(filename, src, mode&^(PackageClauseOnly|ImportsOnly))
}
@@ -167,27 +167,27 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
// Mode flags that control the amount of source text parsed are ignored.
//
func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) {
- fd, err := os.Open(path, os.O_RDONLY, 0);
+ fd, err := os.Open(path, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
- defer fd.Close();
+ defer fd.Close()
- list, err := fd.Readdir(-1);
+ list, err := fd.Readdir(-1)
if err != nil {
return nil, err
}
- name := "";
- files := make(map[string]*ast.File);
+ name := ""
+ files := make(map[string]*ast.File)
for i := 0; i < len(list); i++ {
- entry := &list[i];
+ entry := &list[i]
if filter == nil || filter(entry) {
- src, err := ParsePkgFile(name, pathutil.Join(path, entry.Name), mode);
+ src, err := ParsePkgFile(name, pathutil.Join(path, entry.Name), mode)
if err != nil {
return nil, err
}
- files[entry.Name] = src;
+ files[entry.Name] = src
if name == "" {
name = src.Name.Value
}
@@ -198,5 +198,5 @@ func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Packa
return nil, os.NewError(path + ": no package found")
}
- return &ast.Package{name, path, files}, nil;
+ return &ast.Package{name, path, files}, nil
}
diff --git a/src/pkg/exp/parser/parser.go b/src/pkg/exp/parser/parser.go
index 32360b5d6..199334b1b 100644
--- a/src/pkg/exp/parser/parser.go
+++ b/src/pkg/exp/parser/parser.go
@@ -15,11 +15,11 @@
package oldParser
import (
- "container/vector";
- "fmt";
- "go/ast";
- "go/scanner";
- "go/token";
+ "container/vector"
+ "fmt"
+ "go/ast"
+ "go/scanner"
+ "go/token"
)
@@ -32,42 +32,42 @@ var noPos token.Position
// parser functionality.
//
const (
- PackageClauseOnly uint = 1 << iota; // parsing stops after package clause
- ImportsOnly; // parsing stops after import declarations
- ParseComments; // parse comments and add them to AST
- Trace; // print a trace of parsed productions
+ PackageClauseOnly uint = 1 << iota // parsing stops after package clause
+ ImportsOnly // parsing stops after import declarations
+ ParseComments // parse comments and add them to AST
+ Trace // print a trace of parsed productions
)
// The parser structure holds the parser's internal state.
type parser struct {
- scanner.ErrorVector;
- scanner scanner.Scanner;
+ scanner.ErrorVector
+ scanner scanner.Scanner
// Tracing/debugging
- mode uint; // parsing mode
- trace bool; // == (mode & Trace != 0)
- indent uint; // indentation used for tracing output
+ mode uint // parsing mode
+ trace bool // == (mode & Trace != 0)
+ indent uint // indentation used for tracing output
// Comments
- comments *ast.CommentGroup; // list of collected comments
- lastComment *ast.CommentGroup; // last comment in the comments list
- leadComment *ast.CommentGroup; // the last lead comment
- lineComment *ast.CommentGroup; // the last line comment
+ comments *ast.CommentGroup // list of collected comments
+ lastComment *ast.CommentGroup // last comment in the comments list
+ leadComment *ast.CommentGroup // the last lead comment
+ lineComment *ast.CommentGroup // the last line comment
// Next token
- pos token.Position; // token position
- tok token.Token; // one token look-ahead
- lit []byte; // token literal
+ pos token.Position // token position
+ tok token.Token // one token look-ahead
+ lit []byte // token literal
// Non-syntactic parser control
- optSemi bool; // true if semicolon separator is optional in statement list
- exprLev int; // < 0: in control clause, >= 0: in expression
+ optSemi bool // true if semicolon separator is optional in statement list
+ exprLev int // < 0: in control clause, >= 0: in expression
// Scopes
- pkgScope *ast.Scope;
- fileScope *ast.Scope;
- topScope *ast.Scope;
+ pkgScope *ast.Scope
+ fileScope *ast.Scope
+ topScope *ast.Scope
}
@@ -76,15 +76,15 @@ func scannerMode(mode uint) uint {
if mode&ParseComments != 0 {
return scanner.ScanComments
}
- return 0;
+ return 0
}
func (p *parser) init(filename string, src []byte, mode uint) {
- p.scanner.Init(filename, src, p, scannerMode(mode));
- p.mode = mode;
- p.trace = mode&Trace != 0; // for convenience (p.trace is used frequently)
- p.next();
+ p.scanner.Init(filename, src, p, scannerMode(mode))
+ p.mode = mode
+ p.trace = mode&Trace != 0 // for convenience (p.trace is used frequently)
+ p.next()
}
@@ -93,29 +93,29 @@ func (p *parser) init(filename string, src []byte, mode uint) {
func (p *parser) printTrace(a ...) {
const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " +
- ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ";
- const n = uint(len(dots));
- fmt.Printf("%5d:%3d: ", p.pos.Line, p.pos.Column);
- i := 2 * p.indent;
+ ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
+ const n = uint(len(dots))
+ fmt.Printf("%5d:%3d: ", p.pos.Line, p.pos.Column)
+ i := 2 * p.indent
for ; i > n; i -= n {
fmt.Print(dots)
}
- fmt.Print(dots[0:i]);
- fmt.Println(a);
+ fmt.Print(dots[0:i])
+ fmt.Println(a)
}
func trace(p *parser, msg string) *parser {
- p.printTrace(msg, "(");
- p.indent++;
- return p;
+ p.printTrace(msg, "(")
+ p.indent++
+ return p
}
// Usage pattern: defer un(trace(p, "..."));
func un(p *parser) {
- p.indent--;
- p.printTrace(")");
+ p.indent--
+ p.printTrace(")")
}
@@ -126,7 +126,7 @@ func (p *parser) next0() {
// very first token (p.pos.Line == 0) is not initialized (it
// is token.ILLEGAL), so don't print it .
if p.trace && p.pos.Line > 0 {
- s := p.tok.String();
+ s := p.tok.String()
switch {
case p.tok.IsLiteral():
p.printTrace(s, string(p.lit))
@@ -137,8 +137,8 @@ func (p *parser) next0() {
}
}
- p.pos, p.tok, p.lit = p.scanner.Scan();
- p.optSemi = false;
+ p.pos, p.tok, p.lit = p.scanner.Scan()
+ p.optSemi = false
}
@@ -146,7 +146,7 @@ func (p *parser) next0() {
func (p *parser) consumeComment() (comment *ast.Comment, endline int) {
// /*-style comments may end on a different line than where they start.
// Scan the comment for '\n' chars and adjust endline accordingly.
- endline = p.pos.Line;
+ endline = p.pos.Line
if p.lit[1] == '*' {
for _, b := range p.lit {
if b == '\n' {
@@ -155,10 +155,10 @@ func (p *parser) consumeComment() (comment *ast.Comment, endline int) {
}
}
- comment = &ast.Comment{p.pos, p.lit};
- p.next0();
+ comment = &ast.Comment{p.pos, p.lit}
+ p.next0()
- return;
+ return
}
@@ -168,30 +168,30 @@ func (p *parser) consumeComment() (comment *ast.Comment, endline int) {
// a comment group.
//
func (p *parser) consumeCommentGroup() int {
- list := new(vector.Vector);
- endline := p.pos.Line;
+ list := new(vector.Vector)
+ endline := p.pos.Line
for p.tok == token.COMMENT && endline+1 >= p.pos.Line {
- var comment *ast.Comment;
- comment, endline = p.consumeComment();
- list.Push(comment);
+ var comment *ast.Comment
+ comment, endline = p.consumeComment()
+ list.Push(comment)
}
// convert list
- group := make([]*ast.Comment, list.Len());
+ group := make([]*ast.Comment, list.Len())
for i := 0; i < list.Len(); i++ {
group[i] = list.At(i).(*ast.Comment)
}
// add comment group to the comments list
- g := &ast.CommentGroup{group, nil};
+ g := &ast.CommentGroup{group, nil}
if p.lastComment != nil {
p.lastComment.Next = g
} else {
p.comments = g
}
- p.lastComment = g;
+ p.lastComment = g
- return endline;
+ return endline
}
@@ -211,16 +211,16 @@ func (p *parser) consumeCommentGroup() int {
// stored in the AST.
//
func (p *parser) next() {
- p.leadComment = nil;
- p.lineComment = nil;
- line := p.pos.Line; // current line
- p.next0();
+ p.leadComment = nil
+ p.lineComment = nil
+ line := p.pos.Line // current line
+ p.next0()
if p.tok == token.COMMENT {
if p.pos.Line == line {
// The comment is on same line as previous token; it
// cannot be a lead comment but may be a line comment.
- endline := p.consumeCommentGroup();
+ endline := p.consumeCommentGroup()
if p.pos.Line != endline {
// The next token is on a different line, thus
// the last comment group is a line comment.
@@ -229,7 +229,7 @@ func (p *parser) next() {
}
// consume successor comments, if any
- endline := -1;
+ endline := -1
for p.tok == token.COMMENT {
endline = p.consumeCommentGroup()
}
@@ -244,26 +244,26 @@ func (p *parser) next() {
func (p *parser) errorExpected(pos token.Position, msg string) {
- msg = "expected " + msg;
+ msg = "expected " + msg
if pos.Offset == p.pos.Offset {
// the error happened at the current position;
// make the error message more specific
- msg += ", found '" + p.tok.String() + "'";
+ msg += ", found '" + p.tok.String() + "'"
if p.tok.IsLiteral() {
msg += " " + string(p.lit)
}
}
- p.Error(pos, msg);
+ p.Error(pos, msg)
}
func (p *parser) expect(tok token.Token) token.Position {
- pos := p.pos;
+ pos := p.pos
if p.tok != tok {
p.errorExpected(pos, "'"+tok.String()+"'")
}
- p.next(); // make progress in any case
- return pos;
+ p.next() // make progress in any case
+ return pos
}
@@ -271,13 +271,13 @@ func (p *parser) expect(tok token.Token) token.Position {
// Scope support
func openScope(p *parser) *parser {
- p.topScope = ast.NewScope(p.topScope);
- return p;
+ p.topScope = ast.NewScope(p.topScope)
+ return p
}
// Usage pattern: defer close(openScope(p));
-func close(p *parser) { p.topScope = p.topScope.Outer }
+func close(p *parser) { p.topScope = p.topScope.Outer }
func (p *parser) declare(ident *ast.Ident) {
@@ -299,12 +299,12 @@ func (p *parser) declareList(idents []*ast.Ident) {
func (p *parser) parseIdent() *ast.Ident {
if p.tok == token.IDENT {
- x := &ast.Ident{p.pos, string(p.lit)};
- p.next();
- return x;
+ x := &ast.Ident{p.pos, string(p.lit)}
+ p.next()
+ return x
}
- p.expect(token.IDENT); // use expect() error handling
- return &ast.Ident{p.pos, ""};
+ p.expect(token.IDENT) // use expect() error handling
+ return &ast.Ident{p.pos, ""}
}
@@ -313,20 +313,20 @@ func (p *parser) parseIdentList() []*ast.Ident {
defer un(trace(p, "IdentList"))
}
- list := new(vector.Vector);
- list.Push(p.parseIdent());
+ list := new(vector.Vector)
+ list.Push(p.parseIdent())
for p.tok == token.COMMA {
- p.next();
- list.Push(p.parseIdent());
+ p.next()
+ list.Push(p.parseIdent())
}
// convert vector
- idents := make([]*ast.Ident, list.Len());
+ idents := make([]*ast.Ident, list.Len())
for i := 0; i < list.Len(); i++ {
idents[i] = list.At(i).(*ast.Ident)
}
- return idents;
+ return idents
}
@@ -335,20 +335,20 @@ func (p *parser) parseExprList() []ast.Expr {
defer un(trace(p, "ExpressionList"))
}
- list := new(vector.Vector);
- list.Push(p.parseExpr());
+ list := new(vector.Vector)
+ list.Push(p.parseExpr())
for p.tok == token.COMMA {
- p.next();
- list.Push(p.parseExpr());
+ p.next()
+ list.Push(p.parseExpr())
}
// convert list
- exprs := make([]ast.Expr, list.Len());
+ exprs := make([]ast.Expr, list.Len())
for i := 0; i < list.Len(); i++ {
exprs[i] = list.At(i).(ast.Expr)
}
- return exprs;
+ return exprs
}
@@ -360,15 +360,15 @@ func (p *parser) parseType() ast.Expr {
defer un(trace(p, "Type"))
}
- typ := p.tryType();
+ typ := p.tryType()
if typ == nil {
- p.errorExpected(p.pos, "type");
- p.next(); // make progress
- return &ast.BadExpr{p.pos};
+ p.errorExpected(p.pos, "type")
+ p.next() // make progress
+ return &ast.BadExpr{p.pos}
}
- return typ;
+ return typ
}
@@ -377,14 +377,14 @@ func (p *parser) parseQualifiedIdent() ast.Expr {
defer un(trace(p, "QualifiedIdent"))
}
- var x ast.Expr = p.parseIdent();
+ var x ast.Expr = p.parseIdent()
if p.tok == token.PERIOD {
// first identifier is a package identifier
- p.next();
- sel := p.parseIdent();
- x = &ast.SelectorExpr{x, sel};
+ p.next()
+ sel := p.parseIdent()
+ x = &ast.SelectorExpr{x, sel}
}
- return x;
+ return x
}
@@ -393,7 +393,7 @@ func (p *parser) parseTypeName() ast.Expr {
defer un(trace(p, "TypeName"))
}
- return p.parseQualifiedIdent();
+ return p.parseQualifiedIdent()
}
@@ -402,33 +402,33 @@ func (p *parser) parseArrayType(ellipsisOk bool) ast.Expr {
defer un(trace(p, "ArrayType"))
}
- lbrack := p.expect(token.LBRACK);
- var len ast.Expr;
+ lbrack := p.expect(token.LBRACK)
+ var len ast.Expr
if ellipsisOk && p.tok == token.ELLIPSIS {
- len = &ast.Ellipsis{p.pos};
- p.next();
+ len = &ast.Ellipsis{p.pos}
+ p.next()
} else if p.tok != token.RBRACK {
len = p.parseExpr()
}
- p.expect(token.RBRACK);
- elt := p.parseType();
+ p.expect(token.RBRACK)
+ elt := p.parseType()
- return &ast.ArrayType{lbrack, len, elt};
+ return &ast.ArrayType{lbrack, len, elt}
}
func (p *parser) makeIdentList(list *vector.Vector) []*ast.Ident {
- idents := make([]*ast.Ident, list.Len());
+ idents := make([]*ast.Ident, list.Len())
for i := 0; i < list.Len(); i++ {
- ident, isIdent := list.At(i).(*ast.Ident);
+ ident, isIdent := list.At(i).(*ast.Ident)
if !isIdent {
- pos := list.At(i).(ast.Expr).Pos();
- p.errorExpected(pos, "identifier");
- idents[i] = &ast.Ident{pos, ""};
+ pos := list.At(i).(ast.Expr).Pos()
+ p.errorExpected(pos, "identifier")
+ idents[i] = &ast.Ident{pos, ""}
}
- idents[i] = ident;
+ idents[i] = ident
}
- return idents;
+ return idents
}
@@ -437,13 +437,13 @@ func (p *parser) parseFieldDecl() *ast.Field {
defer un(trace(p, "FieldDecl"))
}
- doc := p.leadComment;
+ doc := p.leadComment
// a list of identifiers looks like a list of type names
- list := new(vector.Vector);
+ list := new(vector.Vector)
for {
// TODO(gri): do not allow ()'s here
- list.Push(p.parseType());
+ list.Push(p.parseType())
if p.tok == token.COMMA {
p.next()
} else {
@@ -452,16 +452,16 @@ func (p *parser) parseFieldDecl() *ast.Field {
}
// if we had a list of identifiers, it must be followed by a type
- typ := p.tryType();
+ typ := p.tryType()
// optional tag
- var tag []*ast.BasicLit;
+ var tag []*ast.BasicLit
if p.tok == token.STRING {
tag = p.parseStringList(nil)
}
// analyze case
- var idents []*ast.Ident;
+ var idents []*ast.Ident
if typ != nil {
// IdentifierList Type
idents = p.makeIdentList(list)
@@ -471,12 +471,12 @@ func (p *parser) parseFieldDecl() *ast.Field {
// TODO(gri): check that this looks like a type
typ = list.At(0).(ast.Expr)
} else {
- p.errorExpected(p.pos, "anonymous field");
- typ = &ast.BadExpr{p.pos};
+ p.errorExpected(p.pos, "anonymous field")
+ typ = &ast.BadExpr{p.pos}
}
}
- return &ast.Field{doc, idents, typ, tag, nil};
+ return &ast.Field{doc, idents, typ, tag, nil}
}
@@ -485,27 +485,27 @@ func (p *parser) parseStructType() *ast.StructType {
defer un(trace(p, "StructType"))
}
- pos := p.expect(token.STRUCT);
- lbrace := p.expect(token.LBRACE);
- list := new(vector.Vector);
+ pos := p.expect(token.STRUCT)
+ lbrace := p.expect(token.LBRACE)
+ list := new(vector.Vector)
for p.tok == token.IDENT || p.tok == token.MUL {
- f := p.parseFieldDecl();
+ f := p.parseFieldDecl()
if p.tok != token.RBRACE {
p.expect(token.SEMICOLON)
}
- f.Comment = p.lineComment;
- list.Push(f);
+ f.Comment = p.lineComment
+ list.Push(f)
}
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
// convert vector
- fields := make([]*ast.Field, list.Len());
+ fields := make([]*ast.Field, list.Len())
for i := list.Len() - 1; i >= 0; i-- {
fields[i] = list.At(i).(*ast.Field)
}
- return &ast.StructType{pos, lbrace, fields, rbrace, false};
+ return &ast.StructType{pos, lbrace, fields, rbrace, false}
}
@@ -514,35 +514,35 @@ func (p *parser) parsePointerType() *ast.StarExpr {
defer un(trace(p, "PointerType"))
}
- star := p.expect(token.MUL);
- base := p.parseType();
+ star := p.expect(token.MUL)
+ base := p.parseType()
- return &ast.StarExpr{star, base};
+ return &ast.StarExpr{star, base}
}
func (p *parser) tryParameterType(ellipsisOk bool) ast.Expr {
if ellipsisOk && p.tok == token.ELLIPSIS {
- pos := p.pos;
- p.next();
+ pos := p.pos
+ p.next()
if p.tok != token.RPAREN {
// "..." always must be at the very end of a parameter list
p.Error(pos, "expected type, found '...'")
}
- return &ast.Ellipsis{pos};
+ return &ast.Ellipsis{pos}
}
- return p.tryType();
+ return p.tryType()
}
func (p *parser) parseParameterType(ellipsisOk bool) ast.Expr {
- typ := p.tryParameterType(ellipsisOk);
+ typ := p.tryParameterType(ellipsisOk)
if typ == nil {
- p.errorExpected(p.pos, "type");
- p.next(); // make progress
- typ = &ast.BadExpr{p.pos};
+ p.errorExpected(p.pos, "type")
+ p.next() // make progress
+ typ = &ast.BadExpr{p.pos}
}
- return typ;
+ return typ
}
@@ -552,10 +552,10 @@ func (p *parser) parseParameterDecl(ellipsisOk bool) (*vector.Vector, ast.Expr)
}
// a list of identifiers looks like a list of type names
- list := new(vector.Vector);
+ list := new(vector.Vector)
for {
// TODO(gri): do not allow ()'s here
- list.Push(p.parseParameterType(ellipsisOk));
+ list.Push(p.parseParameterType(ellipsisOk))
if p.tok == token.COMMA {
p.next()
} else {
@@ -564,9 +564,9 @@ func (p *parser) parseParameterDecl(ellipsisOk bool) (*vector.Vector, ast.Expr)
}
// if we had a list of identifiers, it must be followed by a type
- typ := p.tryParameterType(ellipsisOk);
+ typ := p.tryParameterType(ellipsisOk)
- return list, typ;
+ return list, typ
}
@@ -575,18 +575,18 @@ func (p *parser) parseParameterList(ellipsisOk bool) []*ast.Field {
defer un(trace(p, "ParameterList"))
}
- list, typ := p.parseParameterDecl(ellipsisOk);
+ list, typ := p.parseParameterDecl(ellipsisOk)
if typ != nil {
// IdentifierList Type
- idents := p.makeIdentList(list);
- list.Resize(0, 0);
- list.Push(&ast.Field{nil, idents, typ, nil, nil});
+ idents := p.makeIdentList(list)
+ list.Resize(0, 0)
+ list.Push(&ast.Field{nil, idents, typ, nil, nil})
for p.tok == token.COMMA {
- p.next();
- idents := p.parseIdentList();
- typ := p.parseParameterType(ellipsisOk);
- list.Push(&ast.Field{nil, idents, typ, nil, nil});
+ p.next()
+ idents := p.parseIdentList()
+ typ := p.parseParameterType(ellipsisOk)
+ list.Push(&ast.Field{nil, idents, typ, nil, nil})
}
} else {
@@ -598,12 +598,12 @@ func (p *parser) parseParameterList(ellipsisOk bool) []*ast.Field {
}
// convert list
- params := make([]*ast.Field, list.Len());
+ params := make([]*ast.Field, list.Len())
for i := 0; i < list.Len(); i++ {
params[i] = list.At(i).(*ast.Field)
}
- return params;
+ return params
}
@@ -612,14 +612,14 @@ func (p *parser) parseParameters(ellipsisOk bool) []*ast.Field {
defer un(trace(p, "Parameters"))
}
- var params []*ast.Field;
- p.expect(token.LPAREN);
+ var params []*ast.Field
+ p.expect(token.LPAREN)
if p.tok != token.RPAREN {
params = p.parseParameterList(ellipsisOk)
}
- p.expect(token.RPAREN);
+ p.expect(token.RPAREN)
- return params;
+ return params
}
@@ -628,18 +628,18 @@ func (p *parser) parseResult() []*ast.Field {
defer un(trace(p, "Result"))
}
- var results []*ast.Field;
+ var results []*ast.Field
if p.tok == token.LPAREN {
results = p.parseParameters(false)
} else if p.tok != token.FUNC {
- typ := p.tryType();
+ typ := p.tryType()
if typ != nil {
- results = make([]*ast.Field, 1);
- results[0] = &ast.Field{Type: typ};
+ results = make([]*ast.Field, 1)
+ results[0] = &ast.Field{Type: typ}
}
}
- return results;
+ return results
}
@@ -648,10 +648,10 @@ func (p *parser) parseSignature() (params []*ast.Field, results []*ast.Field) {
defer un(trace(p, "Signature"))
}
- params = p.parseParameters(true);
- results = p.parseResult();
+ params = p.parseParameters(true)
+ results = p.parseResult()
- return;
+ return
}
@@ -660,10 +660,10 @@ func (p *parser) parseFuncType() *ast.FuncType {
defer un(trace(p, "FuncType"))
}
- pos := p.expect(token.FUNC);
- params, results := p.parseSignature();
+ pos := p.expect(token.FUNC)
+ params, results := p.parseSignature()
- return &ast.FuncType{pos, params, results};
+ return &ast.FuncType{pos, params, results}
}
@@ -672,21 +672,21 @@ func (p *parser) parseMethodSpec() *ast.Field {
defer un(trace(p, "MethodSpec"))
}
- doc := p.leadComment;
- var idents []*ast.Ident;
- var typ ast.Expr;
- x := p.parseQualifiedIdent();
+ doc := p.leadComment
+ var idents []*ast.Ident
+ var typ ast.Expr
+ x := p.parseQualifiedIdent()
if ident, isIdent := x.(*ast.Ident); isIdent && p.tok == token.LPAREN {
// method
- idents = []*ast.Ident{ident};
- params, results := p.parseSignature();
- typ = &ast.FuncType{noPos, params, results};
+ idents = []*ast.Ident{ident}
+ params, results := p.parseSignature()
+ typ = &ast.FuncType{noPos, params, results}
} else {
// embedded interface
typ = x
}
- return &ast.Field{doc, idents, typ, nil, nil};
+ return &ast.Field{doc, idents, typ, nil, nil}
}
@@ -695,27 +695,27 @@ func (p *parser) parseInterfaceType() *ast.InterfaceType {
defer un(trace(p, "InterfaceType"))
}
- pos := p.expect(token.INTERFACE);
- lbrace := p.expect(token.LBRACE);
- list := new(vector.Vector);
+ pos := p.expect(token.INTERFACE)
+ lbrace := p.expect(token.LBRACE)
+ list := new(vector.Vector)
for p.tok == token.IDENT {
- m := p.parseMethodSpec();
+ m := p.parseMethodSpec()
if p.tok != token.RBRACE {
p.expect(token.SEMICOLON)
}
- m.Comment = p.lineComment;
- list.Push(m);
+ m.Comment = p.lineComment
+ list.Push(m)
}
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
// convert vector
- methods := make([]*ast.Field, list.Len());
+ methods := make([]*ast.Field, list.Len())
for i := list.Len() - 1; i >= 0; i-- {
methods[i] = list.At(i).(*ast.Field)
}
- return &ast.InterfaceType{pos, lbrace, methods, rbrace, false};
+ return &ast.InterfaceType{pos, lbrace, methods, rbrace, false}
}
@@ -724,13 +724,13 @@ func (p *parser) parseMapType() *ast.MapType {
defer un(trace(p, "MapType"))
}
- pos := p.expect(token.MAP);
- p.expect(token.LBRACK);
- key := p.parseType();
- p.expect(token.RBRACK);
- value := p.parseType();
+ pos := p.expect(token.MAP)
+ p.expect(token.LBRACK)
+ key := p.parseType()
+ p.expect(token.RBRACK)
+ value := p.parseType()
- return &ast.MapType{pos, key, value};
+ return &ast.MapType{pos, key, value}
}
@@ -739,22 +739,22 @@ func (p *parser) parseChanType() *ast.ChanType {
defer un(trace(p, "ChanType"))
}
- pos := p.pos;
- dir := ast.SEND | ast.RECV;
+ pos := p.pos
+ dir := ast.SEND | ast.RECV
if p.tok == token.CHAN {
- p.next();
+ p.next()
if p.tok == token.ARROW {
- p.next();
- dir = ast.SEND;
+ p.next()
+ dir = ast.SEND
}
} else {
- p.expect(token.ARROW);
- p.expect(token.CHAN);
- dir = ast.RECV;
+ p.expect(token.ARROW)
+ p.expect(token.CHAN)
+ dir = ast.RECV
}
- value := p.parseType();
+ value := p.parseType()
- return &ast.ChanType{pos, dir, value};
+ return &ast.ChanType{pos, dir, value}
}
@@ -777,30 +777,30 @@ func (p *parser) tryRawType(ellipsisOk bool) ast.Expr {
case token.CHAN, token.ARROW:
return p.parseChanType()
case token.LPAREN:
- lparen := p.pos;
- p.next();
- typ := p.parseType();
- rparen := p.expect(token.RPAREN);
- return &ast.ParenExpr{lparen, typ, rparen};
+ lparen := p.pos
+ p.next()
+ typ := p.parseType()
+ rparen := p.expect(token.RPAREN)
+ return &ast.ParenExpr{lparen, typ, rparen}
}
// no type found
- return nil;
+ return nil
}
-func (p *parser) tryType() ast.Expr { return p.tryRawType(false) }
+func (p *parser) tryType() ast.Expr { return p.tryRawType(false) }
// ----------------------------------------------------------------------------
// Blocks
func makeStmtList(list *vector.Vector) []ast.Stmt {
- stats := make([]ast.Stmt, list.Len());
+ stats := make([]ast.Stmt, list.Len())
for i := 0; i < list.Len(); i++ {
stats[i] = list.At(i).(ast.Stmt)
}
- return stats;
+ return stats
}
@@ -809,24 +809,24 @@ func (p *parser) parseStmtList() []ast.Stmt {
defer un(trace(p, "StatementList"))
}
- list := new(vector.Vector);
- expectSemi := false;
+ list := new(vector.Vector)
+ expectSemi := false
for p.tok != token.CASE && p.tok != token.DEFAULT && p.tok != token.RBRACE && p.tok != token.EOF {
if expectSemi {
- p.expect(token.SEMICOLON);
- expectSemi = false;
+ p.expect(token.SEMICOLON)
+ expectSemi = false
}
- list.Push(p.parseStmt());
+ list.Push(p.parseStmt())
if p.tok == token.SEMICOLON {
p.next()
} else if p.optSemi {
- p.optSemi = false // "consume" optional semicolon
+ p.optSemi = false // "consume" optional semicolon
} else {
expectSemi = true
}
}
- return makeStmtList(list);
+ return makeStmtList(list)
}
@@ -835,14 +835,14 @@ func (p *parser) parseBlockStmt(idents []*ast.Ident) *ast.BlockStmt {
defer un(trace(p, "BlockStmt"))
}
- defer close(openScope(p));
+ defer close(openScope(p))
- lbrace := p.expect(token.LBRACE);
- list := p.parseStmtList();
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
+ lbrace := p.expect(token.LBRACE)
+ list := p.parseStmtList()
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
- return &ast.BlockStmt{lbrace, list, rbrace};
+ return &ast.BlockStmt{lbrace, list, rbrace}
}
@@ -854,23 +854,23 @@ func (p *parser) parseStringList(x *ast.BasicLit) []*ast.BasicLit {
defer un(trace(p, "StringList"))
}
- list := new(vector.Vector);
+ list := new(vector.Vector)
if x != nil {
list.Push(x)
}
for p.tok == token.STRING {
- list.Push(&ast.BasicLit{p.pos, token.STRING, p.lit});
- p.next();
+ list.Push(&ast.BasicLit{p.pos, token.STRING, p.lit})
+ p.next()
}
// convert list
- strings := make([]*ast.BasicLit, list.Len());
+ strings := make([]*ast.BasicLit, list.Len())
for i := 0; i < list.Len(); i++ {
strings[i] = list.At(i).(*ast.BasicLit)
}
- return strings;
+ return strings
}
@@ -879,18 +879,18 @@ func (p *parser) parseFuncTypeOrLit() ast.Expr {
defer un(trace(p, "FuncTypeOrLit"))
}
- typ := p.parseFuncType();
+ typ := p.parseFuncType()
if p.tok != token.LBRACE {
// function type only
return typ
}
- p.exprLev++;
- body := p.parseBlockStmt(nil);
- p.optSemi = false; // function body requires separating ";"
- p.exprLev--;
+ p.exprLev++
+ body := p.parseBlockStmt(nil)
+ p.optSemi = false // function body requires separating ";"
+ p.exprLev--
- return &ast.FuncLit{typ, body};
+ return &ast.FuncLit{typ, body}
}
@@ -907,35 +907,35 @@ func (p *parser) parseOperand() ast.Expr {
return p.parseIdent()
case token.INT, token.FLOAT, token.CHAR, token.STRING:
- x := &ast.BasicLit{p.pos, p.tok, p.lit};
- p.next();
+ x := &ast.BasicLit{p.pos, p.tok, p.lit}
+ p.next()
if p.tok == token.STRING && p.tok == token.STRING {
return &ast.StringList{p.parseStringList(x)}
}
- return x;
+ return x
case token.LPAREN:
- lparen := p.pos;
- p.next();
- p.exprLev++;
- x := p.parseExpr();
- p.exprLev--;
- rparen := p.expect(token.RPAREN);
- return &ast.ParenExpr{lparen, x, rparen};
+ lparen := p.pos
+ p.next()
+ p.exprLev++
+ x := p.parseExpr()
+ p.exprLev--
+ rparen := p.expect(token.RPAREN)
+ return &ast.ParenExpr{lparen, x, rparen}
case token.FUNC:
return p.parseFuncTypeOrLit()
default:
- t := p.tryRawType(true); // could be type for composite literal or conversion
+ t := p.tryRawType(true) // could be type for composite literal or conversion
if t != nil {
return t
}
}
- p.errorExpected(p.pos, "operand");
- p.next(); // make progress
- return &ast.BadExpr{p.pos};
+ p.errorExpected(p.pos, "operand")
+ p.next() // make progress
+ return &ast.BadExpr{p.pos}
}
@@ -944,25 +944,25 @@ func (p *parser) parseSelectorOrTypeAssertion(x ast.Expr) ast.Expr {
defer un(trace(p, "SelectorOrTypeAssertion"))
}
- p.expect(token.PERIOD);
+ p.expect(token.PERIOD)
if p.tok == token.IDENT {
// selector
- sel := p.parseIdent();
- return &ast.SelectorExpr{x, sel};
+ sel := p.parseIdent()
+ return &ast.SelectorExpr{x, sel}
}
// type assertion
- p.expect(token.LPAREN);
- var typ ast.Expr;
+ p.expect(token.LPAREN)
+ var typ ast.Expr
if p.tok == token.TYPE {
// type switch: typ == nil
p.next()
} else {
typ = p.parseType()
}
- p.expect(token.RPAREN);
+ p.expect(token.RPAREN)
- return &ast.TypeAssertExpr{x, typ};
+ return &ast.TypeAssertExpr{x, typ}
}
@@ -971,23 +971,23 @@ func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr {
defer un(trace(p, "IndexOrSlice"))
}
- p.expect(token.LBRACK);
- p.exprLev++;
- index := p.parseExpr();
+ p.expect(token.LBRACK)
+ p.exprLev++
+ index := p.parseExpr()
if p.tok == token.COLON {
- p.next();
- var end ast.Expr;
+ p.next()
+ var end ast.Expr
if p.tok != token.RBRACK {
end = p.parseExpr()
}
- x = &ast.SliceExpr{x, index, end};
+ x = &ast.SliceExpr{x, index, end}
} else {
x = &ast.IndexExpr{x, index}
}
- p.exprLev--;
- p.expect(token.RBRACK);
+ p.exprLev--
+ p.expect(token.RBRACK)
- return x;
+ return x
}
@@ -996,16 +996,16 @@ func (p *parser) parseCallOrConversion(fun ast.Expr) *ast.CallExpr {
defer un(trace(p, "CallOrConversion"))
}
- lparen := p.expect(token.LPAREN);
- p.exprLev++;
- var args []ast.Expr;
+ lparen := p.expect(token.LPAREN)
+ p.exprLev++
+ var args []ast.Expr
if p.tok != token.RPAREN {
args = p.parseExprList()
}
- p.exprLev--;
- rparen := p.expect(token.RPAREN);
+ p.exprLev--
+ rparen := p.expect(token.RPAREN)
- return &ast.CallExpr{fun, lparen, args, rparen};
+ return &ast.CallExpr{fun, lparen, args, rparen}
}
@@ -1014,14 +1014,14 @@ func (p *parser) parseElement() ast.Expr {
defer un(trace(p, "Element"))
}
- x := p.parseExpr();
+ x := p.parseExpr()
if p.tok == token.COLON {
- colon := p.pos;
- p.next();
- x = &ast.KeyValueExpr{x, colon, p.parseExpr()};
+ colon := p.pos
+ p.next()
+ x = &ast.KeyValueExpr{x, colon, p.parseExpr()}
}
- return x;
+ return x
}
@@ -1030,9 +1030,9 @@ func (p *parser) parseElementList() []ast.Expr {
defer un(trace(p, "ElementList"))
}
- list := new(vector.Vector);
+ list := new(vector.Vector)
for p.tok != token.RBRACE && p.tok != token.EOF {
- list.Push(p.parseElement());
+ list.Push(p.parseElement())
if p.tok == token.COMMA {
p.next()
} else {
@@ -1041,12 +1041,12 @@ func (p *parser) parseElementList() []ast.Expr {
}
// convert list
- elts := make([]ast.Expr, list.Len());
+ elts := make([]ast.Expr, list.Len())
for i := 0; i < list.Len(); i++ {
elts[i] = list.At(i).(ast.Expr)
}
- return elts;
+ return elts
}
@@ -1055,13 +1055,13 @@ func (p *parser) parseCompositeLit(typ ast.Expr) ast.Expr {
defer un(trace(p, "CompositeLit"))
}
- lbrace := p.expect(token.LBRACE);
- var elts []ast.Expr;
+ lbrace := p.expect(token.LBRACE)
+ var elts []ast.Expr
if p.tok != token.RBRACE {
elts = p.parseElementList()
}
- rbrace := p.expect(token.RBRACE);
- return &ast.CompositeLit{typ, lbrace, elts, rbrace};
+ rbrace := p.expect(token.RBRACE)
+ return &ast.CompositeLit{typ, lbrace, elts, rbrace}
}
@@ -1087,24 +1087,24 @@ func (p *parser) checkExpr(x ast.Expr) ast.Expr {
case *ast.TypeAssertExpr:
if t.Type == nil {
// the form X.(type) is only allowed in type switch expressions
- p.errorExpected(x.Pos(), "expression");
- x = &ast.BadExpr{x.Pos()};
+ p.errorExpected(x.Pos(), "expression")
+ x = &ast.BadExpr{x.Pos()}
}
case *ast.CallExpr:
case *ast.StarExpr:
case *ast.UnaryExpr:
if t.Op == token.RANGE {
// the range operator is only allowed at the top of a for statement
- p.errorExpected(x.Pos(), "expression");
- x = &ast.BadExpr{x.Pos()};
+ p.errorExpected(x.Pos(), "expression")
+ x = &ast.BadExpr{x.Pos()}
}
case *ast.BinaryExpr:
default:
// all other nodes are not proper expressions
- p.errorExpected(x.Pos(), "expression");
- x = &ast.BadExpr{x.Pos()};
+ p.errorExpected(x.Pos(), "expression")
+ x = &ast.BadExpr{x.Pos()}
}
- return x;
+ return x
}
@@ -1115,13 +1115,13 @@ func isTypeName(x ast.Expr) bool {
case *ast.BadExpr:
case *ast.Ident:
case *ast.ParenExpr:
- return isTypeName(t.X) // TODO(gri): should (TypeName) be illegal?
+ return isTypeName(t.X) // TODO(gri): should (TypeName) be illegal?
case *ast.SelectorExpr:
return isTypeName(t.X)
default:
- return false // all other nodes are not type names
+ return false // all other nodes are not type names
}
- return true;
+ return true
}
@@ -1139,9 +1139,9 @@ func isCompositeLitType(x ast.Expr) bool {
case *ast.StructType:
case *ast.MapType:
default:
- return false // all other nodes are not legal composite literal types
+ return false // all other nodes are not legal composite literal types
}
- return true;
+ return true
}
@@ -1154,18 +1154,18 @@ func (p *parser) checkExprOrType(x ast.Expr) ast.Expr {
case *ast.UnaryExpr:
if t.Op == token.RANGE {
// the range operator is only allowed at the top of a for statement
- p.errorExpected(x.Pos(), "expression");
- x = &ast.BadExpr{x.Pos()};
+ p.errorExpected(x.Pos(), "expression")
+ x = &ast.BadExpr{x.Pos()}
}
case *ast.ArrayType:
if len, isEllipsis := t.Len.(*ast.Ellipsis); isEllipsis {
- p.Error(len.Pos(), "expected array length, found '...'");
- x = &ast.BadExpr{x.Pos()};
+ p.Error(len.Pos(), "expected array length, found '...'")
+ x = &ast.BadExpr{x.Pos()}
}
}
// all other nodes are expressions or types
- return x;
+ return x
}
@@ -1174,8 +1174,8 @@ func (p *parser) parsePrimaryExpr() ast.Expr {
defer un(trace(p, "PrimaryExpr"))
}
- x := p.parseOperand();
-L: for {
+ x := p.parseOperand()
+L: for {
switch p.tok {
case token.PERIOD:
x = p.parseSelectorOrTypeAssertion(p.checkExpr(x))
@@ -1194,7 +1194,7 @@ L: for {
}
}
- return x;
+ return x
}
@@ -1205,20 +1205,20 @@ func (p *parser) parseUnaryExpr() ast.Expr {
switch p.tok {
case token.ADD, token.SUB, token.NOT, token.XOR, token.ARROW, token.AND, token.RANGE:
- pos, op := p.pos, p.tok;
- p.next();
- x := p.parseUnaryExpr();
- return &ast.UnaryExpr{pos, op, p.checkExpr(x)};
+ pos, op := p.pos, p.tok
+ p.next()
+ x := p.parseUnaryExpr()
+ return &ast.UnaryExpr{pos, op, p.checkExpr(x)}
case token.MUL:
// unary "*" expression or pointer type
- pos := p.pos;
- p.next();
- x := p.parseUnaryExpr();
- return &ast.StarExpr{pos, p.checkExprOrType(x)};
+ pos := p.pos
+ p.next()
+ x := p.parseUnaryExpr()
+ return &ast.StarExpr{pos, p.checkExprOrType(x)}
}
- return p.parsePrimaryExpr();
+ return p.parsePrimaryExpr()
}
@@ -1227,17 +1227,17 @@ func (p *parser) parseBinaryExpr(prec1 int) ast.Expr {
defer un(trace(p, "BinaryExpr"))
}
- x := p.parseUnaryExpr();
+ x := p.parseUnaryExpr()
for prec := p.tok.Precedence(); prec >= prec1; prec-- {
for p.tok.Precedence() == prec {
- pos, op := p.pos, p.tok;
- p.next();
- y := p.parseBinaryExpr(prec + 1);
- x = &ast.BinaryExpr{p.checkExpr(x), pos, op, p.checkExpr(y)};
+ pos, op := p.pos, p.tok
+ p.next()
+ y := p.parseBinaryExpr(prec + 1)
+ x = &ast.BinaryExpr{p.checkExpr(x), pos, op, p.checkExpr(y)}
}
}
- return x;
+ return x
}
@@ -1248,7 +1248,7 @@ func (p *parser) parseExpr() ast.Expr {
defer un(trace(p, "Expression"))
}
- return p.parseBinaryExpr(token.LowestPrec + 1);
+ return p.parseBinaryExpr(token.LowestPrec + 1)
}
@@ -1261,19 +1261,19 @@ func (p *parser) parseSimpleStmt(labelOk bool) ast.Stmt {
defer un(trace(p, "SimpleStmt"))
}
- x := p.parseExprList();
+ x := p.parseExprList()
switch p.tok {
case token.COLON:
// labeled statement
- p.next();
+ p.next()
if labelOk && len(x) == 1 {
if label, isIdent := x[0].(*ast.Ident); isIdent {
return &ast.LabeledStmt{label, p.parseStmt()}
}
}
- p.Error(x[0].Pos(), "illegal label declaration");
- return &ast.BadStmt{x[0].Pos()};
+ p.Error(x[0].Pos(), "illegal label declaration")
+ return &ast.BadStmt{x[0].Pos()}
case
token.DEFINE, token.ASSIGN, token.ADD_ASSIGN,
@@ -1281,13 +1281,13 @@ func (p *parser) parseSimpleStmt(labelOk bool) ast.Stmt {
token.REM_ASSIGN, token.AND_ASSIGN, token.OR_ASSIGN,
token.XOR_ASSIGN, token.SHL_ASSIGN, token.SHR_ASSIGN, token.AND_NOT_ASSIGN:
// assignment statement
- pos, tok := p.pos, p.tok;
- p.next();
- y := p.parseExprList();
+ pos, tok := p.pos, p.tok
+ p.next()
+ y := p.parseExprList()
if len(x) > 1 && len(y) > 1 && len(x) != len(y) {
p.Error(x[0].Pos(), "arity of lhs doesn't match rhs")
}
- return &ast.AssignStmt{x, pos, tok, y};
+ return &ast.AssignStmt{x, pos, tok, y}
}
if len(x) > 1 {
@@ -1297,23 +1297,23 @@ func (p *parser) parseSimpleStmt(labelOk bool) ast.Stmt {
if p.tok == token.INC || p.tok == token.DEC {
// increment or decrement
- s := &ast.IncDecStmt{x[0], p.tok};
- p.next(); // consume "++" or "--"
- return s;
+ s := &ast.IncDecStmt{x[0], p.tok}
+ p.next() // consume "++" or "--"
+ return s
}
// expression
- return &ast.ExprStmt{x[0]};
+ return &ast.ExprStmt{x[0]}
}
func (p *parser) parseCallExpr() *ast.CallExpr {
- x := p.parseExpr();
+ x := p.parseExpr()
if call, isCall := x.(*ast.CallExpr); isCall {
return call
}
- p.errorExpected(x.Pos(), "function/method call");
- return nil;
+ p.errorExpected(x.Pos(), "function/method call")
+ return nil
}
@@ -1322,12 +1322,12 @@ func (p *parser) parseGoStmt() ast.Stmt {
defer un(trace(p, "GoStmt"))
}
- pos := p.expect(token.GO);
- call := p.parseCallExpr();
+ pos := p.expect(token.GO)
+ call := p.parseCallExpr()
if call != nil {
return &ast.GoStmt{pos, call}
}
- return &ast.BadStmt{pos};
+ return &ast.BadStmt{pos}
}
@@ -1336,12 +1336,12 @@ func (p *parser) parseDeferStmt() ast.Stmt {
defer un(trace(p, "DeferStmt"))
}
- pos := p.expect(token.DEFER);
- call := p.parseCallExpr();
+ pos := p.expect(token.DEFER)
+ call := p.parseCallExpr()
if call != nil {
return &ast.DeferStmt{pos, call}
}
- return &ast.BadStmt{pos};
+ return &ast.BadStmt{pos}
}
@@ -1350,14 +1350,14 @@ func (p *parser) parseReturnStmt() *ast.ReturnStmt {
defer un(trace(p, "ReturnStmt"))
}
- pos := p.pos;
- p.expect(token.RETURN);
- var x []ast.Expr;
+ pos := p.pos
+ p.expect(token.RETURN)
+ var x []ast.Expr
if p.tok != token.SEMICOLON && p.tok != token.CASE && p.tok != token.DEFAULT && p.tok != token.RBRACE {
x = p.parseExprList()
}
- return &ast.ReturnStmt{pos, x};
+ return &ast.ReturnStmt{pos, x}
}
@@ -1366,13 +1366,13 @@ func (p *parser) parseBranchStmt(tok token.Token) *ast.BranchStmt {
defer un(trace(p, "BranchStmt"))
}
- s := &ast.BranchStmt{p.pos, tok, nil};
- p.expect(tok);
+ s := &ast.BranchStmt{p.pos, tok, nil}
+ p.expect(tok)
if tok != token.FALLTHROUGH && p.tok == token.IDENT {
s.Label = p.parseIdent()
}
- return s;
+ return s
}
@@ -1383,27 +1383,27 @@ func (p *parser) makeExpr(s ast.Stmt) ast.Expr {
if es, isExpr := s.(*ast.ExprStmt); isExpr {
return p.checkExpr(es.X)
}
- p.Error(s.Pos(), "expected condition, found simple statement");
- return &ast.BadExpr{s.Pos()};
+ p.Error(s.Pos(), "expected condition, found simple statement")
+ return &ast.BadExpr{s.Pos()}
}
func (p *parser) parseControlClause(isForStmt bool) (s1, s2, s3 ast.Stmt) {
if p.tok != token.LBRACE {
- prevLev := p.exprLev;
- p.exprLev = -1;
+ prevLev := p.exprLev
+ p.exprLev = -1
if p.tok != token.SEMICOLON {
s1 = p.parseSimpleStmt(false)
}
if p.tok == token.SEMICOLON {
- p.next();
+ p.next()
if p.tok != token.LBRACE && p.tok != token.SEMICOLON {
s2 = p.parseSimpleStmt(false)
}
if isForStmt {
// for statements have a 3rd section
- p.expect(token.SEMICOLON);
+ p.expect(token.SEMICOLON)
if p.tok != token.LBRACE {
s3 = p.parseSimpleStmt(false)
}
@@ -1412,10 +1412,10 @@ func (p *parser) parseControlClause(isForStmt bool) (s1, s2, s3 ast.Stmt) {
s1, s2 = nil, s1
}
- p.exprLev = prevLev;
+ p.exprLev = prevLev
}
- return s1, s2, s3;
+ return s1, s2, s3
}
@@ -1425,18 +1425,18 @@ func (p *parser) parseIfStmt() *ast.IfStmt {
}
// IfStmt block
- defer close(openScope(p));
+ defer close(openScope(p))
- pos := p.expect(token.IF);
- s1, s2, _ := p.parseControlClause(false);
- body := p.parseBlockStmt(nil);
- var else_ ast.Stmt;
+ pos := p.expect(token.IF)
+ s1, s2, _ := p.parseControlClause(false)
+ body := p.parseBlockStmt(nil)
+ var else_ ast.Stmt
if p.tok == token.ELSE {
- p.next();
- else_ = p.parseStmt();
+ p.next()
+ else_ = p.parseStmt()
}
- return &ast.IfStmt{pos, s1, p.makeExpr(s2), body, else_};
+ return &ast.IfStmt{pos, s1, p.makeExpr(s2), body, else_}
}
@@ -1446,22 +1446,22 @@ func (p *parser) parseCaseClause() *ast.CaseClause {
}
// CaseClause block
- defer close(openScope(p));
+ defer close(openScope(p))
// SwitchCase
- pos := p.pos;
- var x []ast.Expr;
+ pos := p.pos
+ var x []ast.Expr
if p.tok == token.CASE {
- p.next();
- x = p.parseExprList();
+ p.next()
+ x = p.parseExprList()
} else {
p.expect(token.DEFAULT)
}
- colon := p.expect(token.COLON);
- body := p.parseStmtList();
+ colon := p.expect(token.COLON)
+ body := p.parseStmtList()
- return &ast.CaseClause{pos, x, colon, body};
+ return &ast.CaseClause{pos, x, colon, body}
}
@@ -1470,20 +1470,20 @@ func (p *parser) parseTypeList() []ast.Expr {
defer un(trace(p, "TypeList"))
}
- list := new(vector.Vector);
- list.Push(p.parseType());
+ list := new(vector.Vector)
+ list.Push(p.parseType())
for p.tok == token.COMMA {
- p.next();
- list.Push(p.parseType());
+ p.next()
+ list.Push(p.parseType())
}
// convert list
- exprs := make([]ast.Expr, list.Len());
+ exprs := make([]ast.Expr, list.Len())
for i := 0; i < list.Len(); i++ {
exprs[i] = list.At(i).(ast.Expr)
}
- return exprs;
+ return exprs
}
@@ -1493,22 +1493,22 @@ func (p *parser) parseTypeCaseClause() *ast.TypeCaseClause {
}
// TypeCaseClause block
- defer close(openScope(p));
+ defer close(openScope(p))
// TypeSwitchCase
- pos := p.pos;
- var types []ast.Expr;
+ pos := p.pos
+ var types []ast.Expr
if p.tok == token.CASE {
- p.next();
- types = p.parseTypeList();
+ p.next()
+ types = p.parseTypeList()
} else {
p.expect(token.DEFAULT)
}
- colon := p.expect(token.COLON);
- body := p.parseStmtList();
+ colon := p.expect(token.COLON)
+ body := p.parseStmtList()
- return &ast.TypeCaseClause{pos, types, colon, body};
+ return &ast.TypeCaseClause{pos, types, colon, body}
}
@@ -1518,11 +1518,11 @@ func isExprSwitch(s ast.Stmt) bool {
}
if e, ok := s.(*ast.ExprStmt); ok {
if a, ok := e.X.(*ast.TypeAssertExpr); ok {
- return a.Type != nil // regular type assertion
+ return a.Type != nil // regular type assertion
}
- return true;
+ return true
}
- return false;
+ return false
}
@@ -1532,34 +1532,34 @@ func (p *parser) parseSwitchStmt() ast.Stmt {
}
// SwitchStmt block
- defer close(openScope(p));
+ defer close(openScope(p))
- pos := p.expect(token.SWITCH);
- s1, s2, _ := p.parseControlClause(false);
+ pos := p.expect(token.SWITCH)
+ s1, s2, _ := p.parseControlClause(false)
if isExprSwitch(s2) {
- lbrace := p.expect(token.LBRACE);
- cases := new(vector.Vector);
+ lbrace := p.expect(token.LBRACE)
+ cases := new(vector.Vector)
for p.tok == token.CASE || p.tok == token.DEFAULT {
cases.Push(p.parseCaseClause())
}
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
- body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace};
- return &ast.SwitchStmt{pos, s1, p.makeExpr(s2), body};
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
+ body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace}
+ return &ast.SwitchStmt{pos, s1, p.makeExpr(s2), body}
}
// type switch
// TODO(gri): do all the checks!
- lbrace := p.expect(token.LBRACE);
- cases := new(vector.Vector);
+ lbrace := p.expect(token.LBRACE)
+ cases := new(vector.Vector)
for p.tok == token.CASE || p.tok == token.DEFAULT {
cases.Push(p.parseTypeCaseClause())
}
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
- body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace};
- return &ast.TypeSwitchStmt{pos, s1, s2, body};
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
+ body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace}
+ return &ast.TypeSwitchStmt{pos, s1, s2, body}
}
@@ -1569,29 +1569,29 @@ func (p *parser) parseCommClause() *ast.CommClause {
}
// CommClause block
- defer close(openScope(p));
+ defer close(openScope(p))
// CommCase
- pos := p.pos;
- var tok token.Token;
- var lhs, rhs ast.Expr;
+ pos := p.pos
+ var tok token.Token
+ var lhs, rhs ast.Expr
if p.tok == token.CASE {
- p.next();
+ p.next()
if p.tok == token.ARROW {
// RecvExpr without assignment
rhs = p.parseExpr()
} else {
// SendExpr or RecvExpr
- rhs = p.parseExpr();
+ rhs = p.parseExpr()
if p.tok == token.ASSIGN || p.tok == token.DEFINE {
// RecvExpr with assignment
- tok = p.tok;
- p.next();
- lhs = rhs;
+ tok = p.tok
+ p.next()
+ lhs = rhs
if p.tok == token.ARROW {
rhs = p.parseExpr()
} else {
- p.expect(token.ARROW) // use expect() error handling
+ p.expect(token.ARROW) // use expect() error handling
}
}
// else SendExpr
@@ -1600,10 +1600,10 @@ func (p *parser) parseCommClause() *ast.CommClause {
p.expect(token.DEFAULT)
}
- colon := p.expect(token.COLON);
- body := p.parseStmtList();
+ colon := p.expect(token.COLON)
+ body := p.parseStmtList()
- return &ast.CommClause{pos, tok, lhs, rhs, colon, body};
+ return &ast.CommClause{pos, tok, lhs, rhs, colon, body}
}
@@ -1612,17 +1612,17 @@ func (p *parser) parseSelectStmt() *ast.SelectStmt {
defer un(trace(p, "SelectStmt"))
}
- pos := p.expect(token.SELECT);
- lbrace := p.expect(token.LBRACE);
- cases := new(vector.Vector);
+ pos := p.expect(token.SELECT)
+ lbrace := p.expect(token.LBRACE)
+ cases := new(vector.Vector)
for p.tok == token.CASE || p.tok == token.DEFAULT {
cases.Push(p.parseCommClause())
}
- rbrace := p.expect(token.RBRACE);
- p.optSemi = true;
- body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace};
+ rbrace := p.expect(token.RBRACE)
+ p.optSemi = true
+ body := &ast.BlockStmt{lbrace, makeStmtList(cases), rbrace}
- return &ast.SelectStmt{pos, body};
+ return &ast.SelectStmt{pos, body}
}
@@ -1632,49 +1632,49 @@ func (p *parser) parseForStmt() ast.Stmt {
}
// ForStmt block
- defer close(openScope(p));
+ defer close(openScope(p))
- pos := p.expect(token.FOR);
- s1, s2, s3 := p.parseControlClause(true);
- body := p.parseBlockStmt(nil);
+ pos := p.expect(token.FOR)
+ s1, s2, s3 := p.parseControlClause(true)
+ body := p.parseBlockStmt(nil)
if as, isAssign := s2.(*ast.AssignStmt); isAssign {
// possibly a for statement with a range clause; check assignment operator
if as.Tok != token.ASSIGN && as.Tok != token.DEFINE {
- p.errorExpected(as.TokPos, "'=' or ':='");
- return &ast.BadStmt{pos};
+ p.errorExpected(as.TokPos, "'=' or ':='")
+ return &ast.BadStmt{pos}
}
// check lhs
- var key, value ast.Expr;
+ var key, value ast.Expr
switch len(as.Lhs) {
case 2:
- value = as.Lhs[1];
- fallthrough;
+ value = as.Lhs[1]
+ fallthrough
case 1:
key = as.Lhs[0]
default:
- p.errorExpected(as.Lhs[0].Pos(), "1 or 2 expressions");
- return &ast.BadStmt{pos};
+ p.errorExpected(as.Lhs[0].Pos(), "1 or 2 expressions")
+ return &ast.BadStmt{pos}
}
// check rhs
if len(as.Rhs) != 1 {
- p.errorExpected(as.Rhs[0].Pos(), "1 expressions");
- return &ast.BadStmt{pos};
+ p.errorExpected(as.Rhs[0].Pos(), "1 expressions")
+ return &ast.BadStmt{pos}
}
if rhs, isUnary := as.Rhs[0].(*ast.UnaryExpr); isUnary && rhs.Op == token.RANGE {
// rhs is range expression; check lhs
return &ast.RangeStmt{pos, key, value, as.TokPos, as.Tok, rhs.X, body}
} else {
- p.errorExpected(s2.Pos(), "range clause");
- return &ast.BadStmt{pos};
+ p.errorExpected(s2.Pos(), "range clause")
+ return &ast.BadStmt{pos}
}
} else {
// regular for statement
return &ast.ForStmt{pos, s1, p.makeExpr(s2), s3, body}
}
- panic(); // unreachable
- return nil;
+ panic() // unreachable
+ return nil
}
@@ -1685,13 +1685,13 @@ func (p *parser) parseStmt() ast.Stmt {
switch p.tok {
case token.CONST, token.TYPE, token.VAR:
- decl, _ := p.parseDecl(false); // do not consume trailing semicolon
- return &ast.DeclStmt{decl};
+ decl, _ := p.parseDecl(false) // do not consume trailing semicolon
+ return &ast.DeclStmt{decl}
case
// tokens that may start a top-level expression
- token.IDENT, token.INT, token.FLOAT, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operand
- token.LBRACK, token.STRUCT, // composite type
- token.MUL, token.AND, token.ARROW, token.ADD, token.SUB, token.XOR: // unary operators
+ token.IDENT, token.INT, token.FLOAT, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operand
+ token.LBRACK, token.STRUCT, // composite type
+ token.MUL, token.AND, token.ARROW, token.ADD, token.SUB, token.XOR: // unary operators
return p.parseSimpleStmt(true)
case token.GO:
return p.parseGoStmt()
@@ -1717,9 +1717,9 @@ func (p *parser) parseStmt() ast.Stmt {
}
// no statement found
- p.errorExpected(p.pos, "statement");
- p.next(); // make progress
- return &ast.BadStmt{p.pos};
+ p.errorExpected(p.pos, "statement")
+ p.next() // make progress
+ return &ast.BadStmt{p.pos}
}
@@ -1734,10 +1734,10 @@ type parseSpecFunction func(p *parser, doc *ast.CommentGroup, getSemi bool) (spe
//
func (p *parser) parseComment(getSemi bool) (comment *ast.CommentGroup, gotSemi bool) {
if getSemi && p.tok == token.SEMICOLON {
- p.next();
- gotSemi = true;
+ p.next()
+ gotSemi = true
}
- return p.lineComment, gotSemi;
+ return p.lineComment, gotSemi
}
@@ -1746,24 +1746,24 @@ func parseImportSpec(p *parser, doc *ast.CommentGroup, getSemi bool) (spec ast.S
defer un(trace(p, "ImportSpec"))
}
- var ident *ast.Ident;
+ var ident *ast.Ident
if p.tok == token.PERIOD {
- ident = &ast.Ident{p.pos, "."};
- p.next();
+ ident = &ast.Ident{p.pos, "."}
+ p.next()
} else if p.tok == token.IDENT {
ident = p.parseIdent()
}
- var path []*ast.BasicLit;
+ var path []*ast.BasicLit
if p.tok == token.STRING {
path = p.parseStringList(nil)
} else {
- p.expect(token.STRING) // use expect() error handling
+ p.expect(token.STRING) // use expect() error handling
}
- comment, gotSemi := p.parseComment(getSemi);
+ comment, gotSemi := p.parseComment(getSemi)
- return &ast.ImportSpec{doc, ident, path, comment}, gotSemi;
+ return &ast.ImportSpec{doc, ident, path, comment}, gotSemi
}
@@ -1772,16 +1772,16 @@ func parseConstSpec(p *parser, doc *ast.CommentGroup, getSemi bool) (spec ast.Sp
defer un(trace(p, "ConstSpec"))
}
- idents := p.parseIdentList();
- typ := p.tryType();
- var values []ast.Expr;
+ idents := p.parseIdentList()
+ typ := p.tryType()
+ var values []ast.Expr
if typ != nil || p.tok == token.ASSIGN {
- p.expect(token.ASSIGN);
- values = p.parseExprList();
+ p.expect(token.ASSIGN)
+ values = p.parseExprList()
}
- comment, gotSemi := p.parseComment(getSemi);
+ comment, gotSemi := p.parseComment(getSemi)
- return &ast.ValueSpec{doc, idents, typ, values, comment}, gotSemi;
+ return &ast.ValueSpec{doc, idents, typ, values, comment}, gotSemi
}
@@ -1790,11 +1790,11 @@ func parseTypeSpec(p *parser, doc *ast.CommentGroup, getSemi bool) (spec ast.Spe
defer un(trace(p, "TypeSpec"))
}
- ident := p.parseIdent();
- typ := p.parseType();
- comment, gotSemi := p.parseComment(getSemi);
+ ident := p.parseIdent()
+ typ := p.parseType()
+ comment, gotSemi := p.parseComment(getSemi)
- return &ast.TypeSpec{doc, ident, typ, comment}, gotSemi;
+ return &ast.TypeSpec{doc, ident, typ, comment}, gotSemi
}
@@ -1803,16 +1803,16 @@ func parseVarSpec(p *parser, doc *ast.CommentGroup, getSemi bool) (spec ast.Spec
defer un(trace(p, "VarSpec"))
}
- idents := p.parseIdentList();
- typ := p.tryType();
- var values []ast.Expr;
+ idents := p.parseIdentList()
+ typ := p.tryType()
+ var values []ast.Expr
if typ == nil || p.tok == token.ASSIGN {
- p.expect(token.ASSIGN);
- values = p.parseExprList();
+ p.expect(token.ASSIGN)
+ values = p.parseExprList()
}
- comment, gotSemi := p.parseComment(getSemi);
+ comment, gotSemi := p.parseComment(getSemi)
- return &ast.ValueSpec{doc, idents, typ, values, comment}, gotSemi;
+ return &ast.ValueSpec{doc, idents, typ, values, comment}, gotSemi
}
@@ -1821,42 +1821,42 @@ func (p *parser) parseGenDecl(keyword token.Token, f parseSpecFunction, getSemi
defer un(trace(p, keyword.String()+"Decl"))
}
- doc := p.leadComment;
- pos := p.expect(keyword);
- var lparen, rparen token.Position;
- list := new(vector.Vector);
+ doc := p.leadComment
+ pos := p.expect(keyword)
+ var lparen, rparen token.Position
+ list := new(vector.Vector)
if p.tok == token.LPAREN {
- lparen = p.pos;
- p.next();
+ lparen = p.pos
+ p.next()
for p.tok != token.RPAREN && p.tok != token.EOF {
- doc := p.leadComment;
- spec, semi := f(p, doc, true); // consume semicolon if any
- list.Push(spec);
+ doc := p.leadComment
+ spec, semi := f(p, doc, true) // consume semicolon if any
+ list.Push(spec)
if !semi {
break
}
}
- rparen = p.expect(token.RPAREN);
+ rparen = p.expect(token.RPAREN)
if getSemi && p.tok == token.SEMICOLON {
- p.next();
- gotSemi = true;
+ p.next()
+ gotSemi = true
} else {
p.optSemi = true
}
} else {
- spec, semi := f(p, nil, getSemi);
- list.Push(spec);
- gotSemi = semi;
+ spec, semi := f(p, nil, getSemi)
+ list.Push(spec)
+ gotSemi = semi
}
// convert vector
- specs := make([]ast.Spec, list.Len());
+ specs := make([]ast.Spec, list.Len())
for i := 0; i < list.Len(); i++ {
specs[i] = list.At(i).(ast.Spec)
}
- return &ast.GenDecl{doc, pos, keyword, lparen, specs, rparen}, gotSemi;
+ return &ast.GenDecl{doc, pos, keyword, lparen, specs, rparen}, gotSemi
}
@@ -1865,19 +1865,19 @@ func (p *parser) parseReceiver() *ast.Field {
defer un(trace(p, "Receiver"))
}
- pos := p.pos;
- par := p.parseParameters(false);
+ pos := p.pos
+ par := p.parseParameters(false)
// must have exactly one receiver
if len(par) != 1 || len(par) == 1 && len(par[0].Names) > 1 {
- p.errorExpected(pos, "exactly one receiver");
- return &ast.Field{Type: &ast.BadExpr{noPos}};
+ p.errorExpected(pos, "exactly one receiver")
+ return &ast.Field{Type: &ast.BadExpr{noPos}}
}
- recv := par[0];
+ recv := par[0]
// recv type must be TypeName or *TypeName
- base := recv.Type;
+ base := recv.Type
if ptr, isPtr := base.(*ast.StarExpr); isPtr {
base = ptr.X
}
@@ -1885,7 +1885,7 @@ func (p *parser) parseReceiver() *ast.Field {
p.errorExpected(base.Pos(), "type name")
}
- return recv;
+ return recv
}
@@ -1894,23 +1894,23 @@ func (p *parser) parseFunctionDecl() *ast.FuncDecl {
defer un(trace(p, "FunctionDecl"))
}
- doc := p.leadComment;
- pos := p.expect(token.FUNC);
+ doc := p.leadComment
+ pos := p.expect(token.FUNC)
- var recv *ast.Field;
+ var recv *ast.Field
if p.tok == token.LPAREN {
recv = p.parseReceiver()
}
- ident := p.parseIdent();
- params, results := p.parseSignature();
+ ident := p.parseIdent()
+ params, results := p.parseSignature()
- var body *ast.BlockStmt;
+ var body *ast.BlockStmt
if p.tok == token.LBRACE {
body = p.parseBlockStmt(nil)
}
- return &ast.FuncDecl{doc, recv, ident, &ast.FuncType{pos, params, results}, body};
+ return &ast.FuncDecl{doc, recv, ident, &ast.FuncType{pos, params, results}, body}
}
@@ -1919,7 +1919,7 @@ func (p *parser) parseDecl(getSemi bool) (decl ast.Decl, gotSemi bool) {
defer un(trace(p, "Declaration"))
}
- var f parseSpecFunction;
+ var f parseSpecFunction
switch p.tok {
case token.CONST:
f = parseConstSpec
@@ -1931,20 +1931,20 @@ func (p *parser) parseDecl(getSemi bool) (decl ast.Decl, gotSemi bool) {
f = parseVarSpec
case token.FUNC:
- decl = p.parseFunctionDecl();
- _, gotSemi := p.parseComment(getSemi);
- return decl, gotSemi;
+ decl = p.parseFunctionDecl()
+ _, gotSemi := p.parseComment(getSemi)
+ return decl, gotSemi
default:
- pos := p.pos;
- p.errorExpected(pos, "declaration");
- decl = &ast.BadDecl{pos};
- gotSemi = getSemi && p.tok == token.SEMICOLON;
- p.next(); // make progress in any case
- return decl, gotSemi;
+ pos := p.pos
+ p.errorExpected(pos, "declaration")
+ decl = &ast.BadDecl{pos}
+ gotSemi = getSemi && p.tok == token.SEMICOLON
+ p.next() // make progress in any case
+ return decl, gotSemi
}
- return p.parseGenDecl(p.tok, f, getSemi);
+ return p.parseGenDecl(p.tok, f, getSemi)
}
@@ -1953,19 +1953,19 @@ func (p *parser) parseDeclList() []ast.Decl {
defer un(trace(p, "DeclList"))
}
- list := new(vector.Vector);
+ list := new(vector.Vector)
for p.tok != token.EOF {
- decl, _ := p.parseDecl(true); // consume optional semicolon
- list.Push(decl);
+ decl, _ := p.parseDecl(true) // consume optional semicolon
+ list.Push(decl)
}
// convert vector
- decls := make([]ast.Decl, list.Len());
+ decls := make([]ast.Decl, list.Len())
for i := 0; i < list.Len(); i++ {
decls[i] = list.At(i).(ast.Decl)
}
- return decls;
+ return decls
}
@@ -1978,47 +1978,47 @@ func (p *parser) parseFile() *ast.File {
}
// file block
- defer close(openScope(p));
+ defer close(openScope(p))
// package clause
- doc := p.leadComment;
- pos := p.expect(token.PACKAGE);
- ident := p.parseIdent();
+ doc := p.leadComment
+ pos := p.expect(token.PACKAGE)
+ ident := p.parseIdent()
// Common error: semicolon after package clause.
// Accept and report it for better error synchronization.
if p.tok == token.SEMICOLON {
- p.Error(p.pos, "expected declaration, found ';'");
- p.next();
+ p.Error(p.pos, "expected declaration, found ';'")
+ p.next()
}
- var decls []ast.Decl;
+ var decls []ast.Decl
// Don't bother parsing the rest if we had errors already.
// Likely not a Go source file at all.
if p.ErrorCount() == 0 && p.mode&PackageClauseOnly == 0 {
// import decls
- list := new(vector.Vector);
+ list := new(vector.Vector)
for p.tok == token.IMPORT {
- decl, _ := p.parseGenDecl(token.IMPORT, parseImportSpec, true); // consume optional semicolon
- list.Push(decl);
+ decl, _ := p.parseGenDecl(token.IMPORT, parseImportSpec, true) // consume optional semicolon
+ list.Push(decl)
}
if p.mode&ImportsOnly == 0 {
// rest of package body
for p.tok != token.EOF {
- decl, _ := p.parseDecl(true); // consume optional semicolon
- list.Push(decl);
+ decl, _ := p.parseDecl(true) // consume optional semicolon
+ list.Push(decl)
}
}
// convert declaration list
- decls = make([]ast.Decl, list.Len());
+ decls = make([]ast.Decl, list.Len())
for i := 0; i < list.Len(); i++ {
decls[i] = list.At(i).(ast.Decl)
}
}
- return &ast.File{doc, pos, ident, decls, p.comments};
+ return &ast.File{doc, pos, ident, decls, p.comments}
}
diff --git a/src/pkg/exp/parser/parser_test.go b/src/pkg/exp/parser/parser_test.go
index e01281815..2aefaa1cf 100644
--- a/src/pkg/exp/parser/parser_test.go
+++ b/src/pkg/exp/parser/parser_test.go
@@ -5,8 +5,8 @@
package oldParser
import (
- "os";
- "testing";
+ "os"
+ "testing"
)
@@ -20,7 +20,7 @@ var illegalInputs = []interface{}{
func TestParseIllegalInputs(t *testing.T) {
for _, src := range illegalInputs {
- _, err := ParseFile("", src, 0);
+ _, err := ParseFile("", src, 0)
if err == nil {
t.Errorf("ParseFile(%v) should have failed", src)
}
@@ -37,7 +37,7 @@ var validPrograms = []interface{}{
func TestParseValidPrograms(t *testing.T) {
for _, src := range validPrograms {
- _, err := ParseFile("", src, 0);
+ _, err := ParseFile("", src, 0)
if err != nil {
t.Errorf("ParseFile(%q): %v", src, err)
}
@@ -52,8 +52,9 @@ var validFiles = []string{
func TestParse3(t *testing.T) {
+ return // disabled since the parser only accepts old syntax
for _, filename := range validFiles {
- _, err := ParseFile(filename, nil, 0);
+ _, err := ParseFile(filename, nil, 0)
if err != nil {
t.Errorf("ParseFile(%s): %v", filename, err)
}
@@ -69,16 +70,17 @@ func nameFilter(filename string) bool {
default:
return false
}
- return true;
+ return true
}
-func dirFilter(d *os.Dir) bool { return nameFilter(d.Name) }
+func dirFilter(d *os.Dir) bool { return nameFilter(d.Name) }
func TestParse4(t *testing.T) {
- path := ".";
- pkg, err := ParsePackage(path, dirFilter, 0);
+ return // disabled since the parser only accepts old syntax
+ path := "."
+ pkg, err := ParsePackage(path, dirFilter, 0)
if err != nil {
t.Fatalf("ParsePackage(%s): %v", path, err)
}
diff --git a/src/pkg/exp/spacewar/pdp1.go b/src/pkg/exp/spacewar/pdp1.go
index d961030d9..e3abd6807 100644
--- a/src/pkg/exp/spacewar/pdp1.go
+++ b/src/pkg/exp/spacewar/pdp1.go
@@ -57,10 +57,10 @@
package pdp1
import (
- "bufio";
- "fmt";
- "os";
- "io";
+ "bufio"
+ "fmt"
+ "os"
+ "io"
)
type Word uint32
@@ -69,82 +69,82 @@ const mask = 0777777
const sign = 0400000
const (
- _ = iota; // 00
- opAND;
- opIOR;
- opXOR;
- opXCT;
- _;
- _;
- opCALJDA;
+ _ = iota // 00
+ opAND
+ opIOR
+ opXOR
+ opXCT
+ _
+ _
+ opCALJDA
- opLAC; // 10
- opLIO;
- opDAC;
- opDAP;
- _;
- opDIO;
- opDZM;
- _;
+ opLAC // 10
+ opLIO
+ opDAC
+ opDAP
+ _
+ opDIO
+ opDZM
+ _
- opADD; // 20
- opSUB;
- opIDX;
- opISP;
- opSAD;
- opSAS;
- opMUS;
- opDIS;
+ opADD // 20
+ opSUB
+ opIDX
+ opISP
+ opSAD
+ opSAS
+ opMUS
+ opDIS
- opJMP; // 30
- opJSP;
- opSKP;
- opSFT;
- opLAW;
- opIOT;
- _;
- opOPR;
+ opJMP // 30
+ opJSP
+ opSKP
+ opSFT
+ opLAW
+ opIOT
+ _
+ opOPR
)
// A Trapper represents an object with a Trap method.
// The machine calls the Trap method to implement the
// PDP-1 IOT instruction.
type Trapper interface {
- Trap(y Word);
+ Trap(y Word)
}
// An M represents the machine state of a PDP-1.
// Clients can set Display to install an output device.
type M struct {
- AC, IO, PC, OV Word;
- Mem [010000]Word;
- Flag [7]bool;
- Sense [7]bool;
- Halt bool;
+ AC, IO, PC, OV Word
+ Mem [010000]Word
+ Flag [7]bool
+ Sense [7]bool
+ Halt bool
}
// Step runs a single machine instruction.
func (m *M) Step(t Trapper) os.Error {
- inst := m.Mem[m.PC];
- m.PC++;
- return m.run(inst, t);
+ inst := m.Mem[m.PC]
+ m.PC++
+ return m.run(inst, t)
}
// Normalize actual 32-bit integer i to 18-bit ones-complement integer.
// Interpret mod 0777777, because 0777777 == -0 == +0 == 0000000.
func norm(i Word) Word {
- i += i >> 18;
- i &= mask;
+ i += i >> 18
+ i &= mask
if i == mask {
i = 0
}
- return i;
+ return i
}
type UnknownInstrError struct {
- Inst Word;
- PC Word;
+ Inst Word
+ PC Word
}
func (e UnknownInstrError) String() string {
@@ -159,18 +159,18 @@ func (e HaltError) String() string {
type LoopError Word
-func (e LoopError) String() string { return fmt.Sprintf("indirect load looping at %06o", e) }
+func (e LoopError) String() string { return fmt.Sprintf("indirect load looping at %06o", e) }
func (m *M) run(inst Word, t Trapper) os.Error {
- ib, y := (inst>>12)&1, inst&07777;
- op := inst >> 13;
+ ib, y := (inst>>12)&1, inst&07777
+ op := inst >> 13
if op < opSKP && op != opCALJDA {
for n := 0; ib != 0; n++ {
if n > 07777 {
return LoopError(m.PC - 1)
}
- ib = (m.Mem[y] >> 12) & 1;
- y = m.Mem[y] & 07777;
+ ib = (m.Mem[y] >> 12) & 1
+ y = m.Mem[y] & 07777
}
}
@@ -184,13 +184,13 @@ func (m *M) run(inst Word, t Trapper) os.Error {
case opXCT:
m.run(m.Mem[y], t)
case opCALJDA:
- a := y;
+ a := y
if ib == 0 {
a = 64
}
- m.Mem[a] = m.AC;
- m.AC = (m.OV << 17) + m.PC;
- m.PC = a + 1;
+ m.Mem[a] = m.AC
+ m.AC = (m.OV << 17) + m.PC
+ m.PC = a + 1
case opLAC:
m.AC = m.Mem[y]
case opLIO:
@@ -204,22 +204,22 @@ func (m *M) run(inst Word, t Trapper) os.Error {
case opDZM:
m.Mem[y] = 0
case opADD:
- m.AC += m.Mem[y];
- m.OV = m.AC >> 18;
- m.AC = norm(m.AC);
+ m.AC += m.Mem[y]
+ m.OV = m.AC >> 18
+ m.AC = norm(m.AC)
case opSUB:
- diffSigns := (m.AC^m.Mem[y])>>17 == 1;
- m.AC += m.Mem[y] ^ mask;
- m.AC = norm(m.AC);
+ diffSigns := (m.AC^m.Mem[y])>>17 == 1
+ m.AC += m.Mem[y] ^ mask
+ m.AC = norm(m.AC)
if diffSigns && m.Mem[y]>>17 == m.AC>>17 {
m.OV = 1
}
case opIDX:
- m.AC = norm(m.Mem[y] + 1);
- m.Mem[y] = m.AC;
+ m.AC = norm(m.Mem[y] + 1)
+ m.Mem[y] = m.AC
case opISP:
- m.AC = norm(m.Mem[y] + 1);
- m.Mem[y] = m.AC;
+ m.AC = norm(m.Mem[y] + 1)
+ m.Mem[y] = m.AC
if m.AC&sign == 0 {
m.PC++
}
@@ -233,25 +233,25 @@ func (m *M) run(inst Word, t Trapper) os.Error {
}
case opMUS:
if m.IO&1 == 1 {
- m.AC += m.Mem[y];
- m.AC = norm(m.AC);
+ m.AC += m.Mem[y]
+ m.AC = norm(m.AC)
}
- m.IO = (m.IO>>1 | m.AC<<17) & mask;
- m.AC >>= 1;
+ m.IO = (m.IO>>1 | m.AC<<17) & mask
+ m.AC >>= 1
case opDIS:
m.AC, m.IO = (m.AC<<1|m.IO>>17)&mask,
- ((m.IO<<1|m.AC>>17)&mask)^1;
+ ((m.IO<<1|m.AC>>17)&mask)^1
if m.IO&1 == 1 {
m.AC = m.AC + (m.Mem[y] ^ mask)
} else {
m.AC = m.AC + 1 + m.Mem[y]
}
- m.AC = norm(m.AC);
+ m.AC = norm(m.AC)
case opJMP:
m.PC = y
case opJSP:
- m.AC = (m.OV << 17) + m.PC;
- m.PC = y;
+ m.AC = (m.OV << 17) + m.PC
+ m.PC = y
case opSKP:
cond := y&0100 == 0100 && m.AC == 0 ||
y&0200 == 0200 && m.AC>>17 == 0 ||
@@ -260,7 +260,7 @@ func (m *M) run(inst Word, t Trapper) os.Error {
y&02000 == 02000 && m.IO>>17 == 0 ||
y&7 != 0 && !m.Flag[y&7] ||
y&070 != 0 && !m.Sense[(y&070)>>3] ||
- y&070 == 010;
+ y&070 == 010
if (ib == 0) == cond {
m.PC++
}
@@ -273,42 +273,42 @@ func (m *M) run(inst Word, t Trapper) os.Error {
continue
}
switch (inst >> 9) & 017 {
- case 001: // rotate AC left
+ case 001: // rotate AC left
m.AC = (m.AC<<1 | m.AC>>17) & mask
- case 002: // rotate IO left
+ case 002: // rotate IO left
m.IO = (m.IO<<1 | m.IO>>17) & mask
- case 003: // rotate AC and IO left.
- w := uint64(m.AC)<<18 | uint64(m.IO);
- w = w<<1 | w>>35;
- m.AC = Word(w>>18) & mask;
- m.IO = Word(w) & mask;
- case 005: // shift AC left (excluding sign bit)
+ case 003: // rotate AC and IO left.
+ w := uint64(m.AC)<<18 | uint64(m.IO)
+ w = w<<1 | w>>35
+ m.AC = Word(w>>18) & mask
+ m.IO = Word(w) & mask
+ case 005: // shift AC left (excluding sign bit)
m.AC = (m.AC<<1|m.AC>>17)&mask&^sign | m.AC&sign
- case 006: // shift IO left (excluding sign bit)
+ case 006: // shift IO left (excluding sign bit)
m.IO = (m.IO<<1|m.IO>>17)&mask&^sign | m.IO&sign
- case 007: // shift AC and IO left (excluding AC's sign bit)
- w := uint64(m.AC)<<18 | uint64(m.IO);
- w = w<<1 | w>>35;
- m.AC = Word(w>>18)&mask&^sign | m.AC&sign;
- m.IO = Word(w)&mask&^sign | m.AC&sign;
- case 011: // rotate AC right
+ case 007: // shift AC and IO left (excluding AC's sign bit)
+ w := uint64(m.AC)<<18 | uint64(m.IO)
+ w = w<<1 | w>>35
+ m.AC = Word(w>>18)&mask&^sign | m.AC&sign
+ m.IO = Word(w)&mask&^sign | m.AC&sign
+ case 011: // rotate AC right
m.AC = (m.AC>>1 | m.AC<<17) & mask
- case 012: // rotate IO right
+ case 012: // rotate IO right
m.IO = (m.IO>>1 | m.IO<<17) & mask
- case 013: // rotate AC and IO right
- w := uint64(m.AC)<<18 | uint64(m.IO);
- w = w>>1 | w<<35;
- m.AC = Word(w>>18) & mask;
- m.IO = Word(w) & mask;
- case 015: // shift AC right (excluding sign bit)
+ case 013: // rotate AC and IO right
+ w := uint64(m.AC)<<18 | uint64(m.IO)
+ w = w>>1 | w<<35
+ m.AC = Word(w>>18) & mask
+ m.IO = Word(w) & mask
+ case 015: // shift AC right (excluding sign bit)
m.AC = m.AC>>1 | m.AC&sign
- case 016: // shift IO right (excluding sign bit)
+ case 016: // shift IO right (excluding sign bit)
m.IO = m.IO>>1 | m.IO&sign
- case 017: // shift AC and IO right (excluding AC's sign bit)
- w := uint64(m.AC)<<18 | uint64(m.IO);
- w = w >> 1;
- m.AC = Word(w>>18) | m.AC&sign;
- m.IO = Word(w) & mask;
+ case 017: // shift AC and IO right (excluding AC's sign bit)
+ w := uint64(m.AC)<<18 | uint64(m.IO)
+ w = w >> 1
+ m.AC = Word(w>>18) | m.AC&sign
+ m.IO = Word(w) & mask
default:
goto Unknown
}
@@ -332,8 +332,8 @@ func (m *M) run(inst Word, t Trapper) os.Error {
m.AC ^= mask
}
if y&0400 == 0400 {
- m.PC--;
- return HaltError(m.PC);
+ m.PC--
+ return HaltError(m.PC)
}
switch i, f := y&7, y&010 == 010; {
case i == 7:
@@ -347,43 +347,43 @@ func (m *M) run(inst Word, t Trapper) os.Error {
Unknown:
return UnknownInstrError{inst, m.PC - 1}
}
- return nil;
+ return nil
}
// Load loads the machine's memory from a text input file
// listing octal address-value pairs, one per line, matching the
// regular expression ^[ +]([0-7]+)\t([0-7]+).
func (m *M) Load(r io.Reader) os.Error {
- b := bufio.NewReader(r);
+ b := bufio.NewReader(r)
for {
- line, err := b.ReadString('\n');
+ line, err := b.ReadString('\n')
if err != nil {
if err != os.EOF {
return err
}
- break;
+ break
}
// look for ^[ +]([0-9]+)\t([0-9]+)
if line[0] != ' ' && line[0] != '+' {
continue
}
- i := 1;
- a := Word(0);
+ i := 1
+ a := Word(0)
for ; i < len(line) && '0' <= line[i] && line[i] <= '7'; i++ {
a = a*8 + Word(line[i]-'0')
}
if i >= len(line) || line[i] != '\t' || i == 1 {
continue
}
- v := Word(0);
- j := i;
+ v := Word(0)
+ j := i
for i++; i < len(line) && '0' <= line[i] && line[i] <= '7'; i++ {
v = v*8 + Word(line[i]-'0')
}
if i == j {
continue
}
- m.Mem[a] = v;
+ m.Mem[a] = v
}
- return nil;
+ return nil
}
diff --git a/src/pkg/exp/spacewar/spacewar.go b/src/pkg/exp/spacewar/spacewar.go
index 40976a420..a86aa7f24 100644
--- a/src/pkg/exp/spacewar/spacewar.go
+++ b/src/pkg/exp/spacewar/spacewar.go
@@ -24,36 +24,36 @@
package main
import (
- "bytes";
- "exp/draw";
- "exp/nacl/av";
- "exp/nacl/srpc";
- "image";
- "log";
- "os";
- "runtime";
- "strings";
- "time";
- "./pdp1";
+ "bytes"
+ "exp/draw"
+ "exp/nacl/av"
+ "exp/nacl/srpc"
+ "image"
+ "log"
+ "os"
+ "runtime"
+ "strings"
+ "time"
+ "./pdp1"
)
func main() {
- runtime.LockOSThread();
+ runtime.LockOSThread()
if srpc.Enabled() {
go srpc.ServeRuntime()
}
- w, err := av.Init(av.SubsystemVideo, 512, 512);
+ w, err := av.Init(av.SubsystemVideo, 512, 512)
if err != nil {
log.Exitf("av.Init: %s", err)
}
- go quitter(w.QuitChan());
+ go quitter(w.QuitChan())
- var m SpacewarPDP1;
- m.Init(w);
- m.PC = 4;
- f := bytes.NewBuffer(strings.Bytes(spacewarCode));
+ var m SpacewarPDP1
+ m.Init(w)
+ m.PC = 4
+ f := bytes.NewBuffer(strings.Bytes(spacewarCode))
if err = m.Load(f); err != nil {
log.Exitf("loading %s: %s", "spacewar.lst", err)
}
@@ -63,12 +63,12 @@ func main() {
// m.Mem[m.PC], m.AC, m.IO, m.OV);
err = m.Step()
}
- log.Exitf("step: %s", err);
+ log.Exitf("step: %s", err)
}
func quitter(c <-chan bool) {
- <-c;
- os.Exit(0);
+ <-c
+ os.Exit(0)
}
// A SpacewarPDP1 is a PDP-1 machine configured to run Spacewar!
@@ -76,49 +76,49 @@ func quitter(c <-chan bool) {
// display and pauses every second time the program counter reaches
// instruction 02051.
type SpacewarPDP1 struct {
- pdp1.M;
- nframe int;
- frameTime int64;
- ctxt draw.Context;
- dx, dy int;
- screen draw.Image;
- ctl pdp1.Word;
- kc <-chan int;
- colorModel image.ColorModel;
- cmap []image.Color;
- pix [][]uint8;
+ pdp1.M
+ nframe int
+ frameTime int64
+ ctxt draw.Context
+ dx, dy int
+ screen draw.Image
+ ctl pdp1.Word
+ kc <-chan int
+ colorModel image.ColorModel
+ cmap []image.Color
+ pix [][]uint8
}
func min(a, b int) int {
if a < b {
return a
}
- return b;
+ return b
}
func (m *SpacewarPDP1) Init(ctxt draw.Context) {
- m.ctxt = ctxt;
- m.kc = ctxt.KeyboardChan();
- m.screen = ctxt.Screen();
- m.dx = m.screen.Width();
- m.dy = m.screen.Height();
- m.colorModel = m.screen.ColorModel();
- m.pix = make([][]uint8, m.dy);
+ m.ctxt = ctxt
+ m.kc = ctxt.KeyboardChan()
+ m.screen = ctxt.Screen()
+ m.dx = m.screen.Width()
+ m.dy = m.screen.Height()
+ m.colorModel = m.screen.ColorModel()
+ m.pix = make([][]uint8, m.dy)
for i := range m.pix {
m.pix[i] = make([]uint8, m.dx)
}
- m.cmap = make([]image.Color, 256);
+ m.cmap = make([]image.Color, 256)
for i := range m.cmap {
- var r, g, b uint8;
- r = uint8(min(0, 255));
- g = uint8(min(i*2, 255));
- b = uint8(min(0, 255));
- m.cmap[i] = m.colorModel.Convert(image.RGBAColor{r, g, b, 0xff});
+ var r, g, b uint8
+ r = uint8(min(0, 255))
+ g = uint8(min(i*2, 255))
+ b = uint8(min(0, 255))
+ m.cmap[i] = m.colorModel.Convert(image.RGBAColor{r, g, b, 0xff})
}
}
const (
- frameDelay = 56 * 1e6; // 56 ms
+ frameDelay = 56 * 1e6 // 56 ms
)
var ctlBits = [...]pdp1.Word{
@@ -134,35 +134,35 @@ var ctlBits = [...]pdp1.Word{
func (m *SpacewarPDP1) Step() os.Error {
if m.PC == 02051 {
- m.pollInput();
- m.nframe++;
+ m.pollInput()
+ m.nframe++
if m.nframe&1 == 0 {
- m.flush();
- t := time.Nanoseconds();
+ m.flush()
+ t := time.Nanoseconds()
if t >= m.frameTime+3*frameDelay {
m.frameTime = t
} else {
- m.frameTime += frameDelay;
+ m.frameTime += frameDelay
for t < m.frameTime {
- time.Sleep(m.frameTime - t);
- t = time.Nanoseconds();
+ time.Sleep(m.frameTime - t)
+ t = time.Nanoseconds()
}
}
}
}
- return m.M.Step(m);
+ return m.M.Step(m)
}
func (m *SpacewarPDP1) Trap(y pdp1.Word) {
switch y & 077 {
case 7:
- x := int(m.AC+0400000) & 0777777;
- y := int(m.IO+0400000) & 0777777;
- x = x * m.dx / 0777777;
- y = y * m.dy / 0777777;
+ x := int(m.AC+0400000) & 0777777
+ y := int(m.IO+0400000) & 0777777
+ x = x * m.dx / 0777777
+ y = y * m.dy / 0777777
if 0 <= x && x < m.dx && 0 <= y && y < m.dy {
- n := uint8(min(int(m.pix[y][x])+128, 255));
- m.pix[y][x] = n;
+ n := uint8(min(int(m.pix[y][x])+128, 255))
+ m.pix[y][x] = n
}
case 011:
m.IO = m.ctl
@@ -173,11 +173,11 @@ func (m *SpacewarPDP1) flush() {
// Update screen image; simulate phosphor decay.
for y := 0; y < m.dy; y++ {
for x := 0; x < m.dx; x++ {
- m.screen.Set(x, y, m.cmap[m.pix[y][x]]);
- m.pix[y][x] >>= 1;
+ m.screen.Set(x, y, m.cmap[m.pix[y][x]])
+ m.pix[y][x] >>= 1
}
}
- m.ctxt.FlushImage();
+ m.ctxt.FlushImage()
}
func (m *SpacewarPDP1) pollInput() {
diff --git a/src/pkg/expvar/expvar.go b/src/pkg/expvar/expvar.go
index 3a2e74b26..b8f9bae5d 100644
--- a/src/pkg/expvar/expvar.go
+++ b/src/pkg/expvar/expvar.go
@@ -8,89 +8,89 @@
package expvar
import (
- "bytes";
- "fmt";
- "http";
- "log";
- "strconv";
- "sync";
+ "bytes"
+ "fmt"
+ "http"
+ "log"
+ "strconv"
+ "sync"
)
// Var is an abstract type for all exported variables.
type Var interface {
- String() string;
+ String() string
}
// Int is a 64-bit integer variable, and satisfies the Var interface.
type Int struct {
- i int64;
- mu sync.Mutex;
+ i int64
+ mu sync.Mutex
}
-func (v *Int) String() string { return strconv.Itoa64(v.i) }
+func (v *Int) String() string { return strconv.Itoa64(v.i) }
func (v *Int) Add(delta int64) {
- v.mu.Lock();
- defer v.mu.Unlock();
- v.i += delta;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ v.i += delta
}
// Map is a string-to-Var map variable, and satisfies the Var interface.
type Map struct {
- m map[string]Var;
- mu sync.Mutex;
+ m map[string]Var
+ mu sync.Mutex
}
// KeyValue represents a single entry in a Map.
type KeyValue struct {
- Key string;
- Value Var;
+ Key string
+ Value Var
}
func (v *Map) String() string {
- v.mu.Lock();
- defer v.mu.Unlock();
- b := new(bytes.Buffer);
- fmt.Fprintf(b, "{");
- first := true;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ b := new(bytes.Buffer)
+ fmt.Fprintf(b, "{")
+ first := true
for key, val := range v.m {
if !first {
fmt.Fprintf(b, ", ")
}
- fmt.Fprintf(b, "\"%s\": %v", key, val.String());
- first = false;
+ fmt.Fprintf(b, "\"%s\": %v", key, val.String())
+ first = false
}
- fmt.Fprintf(b, "}");
- return b.String();
+ fmt.Fprintf(b, "}")
+ return b.String()
}
func (v *Map) Init() *Map {
- v.m = make(map[string]Var);
- return v;
+ v.m = make(map[string]Var)
+ return v
}
func (v *Map) Get(key string) Var {
- v.mu.Lock();
- defer v.mu.Unlock();
+ v.mu.Lock()
+ defer v.mu.Unlock()
if av, ok := v.m[key]; ok {
return av
}
- return nil;
+ return nil
}
func (v *Map) Set(key string, av Var) {
- v.mu.Lock();
- defer v.mu.Unlock();
- v.m[key] = av;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ v.m[key] = av
}
func (v *Map) Add(key string, delta int64) {
- v.mu.Lock();
- defer v.mu.Unlock();
- av, ok := v.m[key];
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ av, ok := v.m[key]
if !ok {
- av = new(Int);
- v.m[key] = av;
+ av = new(Int)
+ v.m[key] = av
}
// Add to Int; ignore otherwise.
@@ -104,29 +104,29 @@ func (v *Map) iterate(c chan<- KeyValue) {
for k, v := range v.m {
c <- KeyValue{k, v}
}
- close(c);
+ close(c)
}
func (v *Map) Iter() <-chan KeyValue {
- c := make(chan KeyValue);
- go v.iterate(c);
- return c;
+ c := make(chan KeyValue)
+ go v.iterate(c)
+ return c
}
// String is a string variable, and satisfies the Var interface.
type String struct {
- s string;
+ s string
}
-func (v *String) String() string { return strconv.Quote(v.s) }
+func (v *String) String() string { return strconv.Quote(v.s) }
-func (v *String) Set(value string) { v.s = value }
+func (v *String) Set(value string) { v.s = value }
// IntFunc wraps a func() int64 to create a value that satisfies the Var interface.
// The function will be called each time the Var is evaluated.
type IntFunc func() int64
-func (v IntFunc) String() string { return strconv.Itoa64(v()) }
+func (v IntFunc) String() string { return strconv.Itoa64(v()) }
// All published variables.
@@ -137,12 +137,12 @@ var mutex sync.Mutex
// package's init function when it creates its Vars. If the name is already
// registered then this will log.Crash.
func Publish(name string, v Var) {
- mutex.Lock();
- defer mutex.Unlock();
+ mutex.Lock()
+ defer mutex.Unlock()
if _, existing := vars[name]; existing {
log.Crash("Reuse of exported var name:", name)
}
- vars[name] = v;
+ vars[name] = v
}
// Get retrieves a named exported variable.
@@ -150,35 +150,35 @@ func Get(name string) Var {
if v, ok := vars[name]; ok {
return v
}
- return nil;
+ return nil
}
// RemoveAll removes all exported variables.
// This is for tests; don't call this on a real server.
func RemoveAll() {
- mutex.Lock();
- defer mutex.Unlock();
- vars = make(map[string]Var);
+ mutex.Lock()
+ defer mutex.Unlock()
+ vars = make(map[string]Var)
}
// Convenience functions for creating new exported variables.
func NewInt(name string) *Int {
- v := new(Int);
- Publish(name, v);
- return v;
+ v := new(Int)
+ Publish(name, v)
+ return v
}
func NewMap(name string) *Map {
- v := new(Map).Init();
- Publish(name, v);
- return v;
+ v := new(Map).Init()
+ Publish(name, v)
+ return v
}
func NewString(name string) *String {
- v := new(String);
- Publish(name, v);
- return v;
+ v := new(String)
+ Publish(name, v)
+ return v
}
// TODO(rsc): Make sure map access in separate thread is safe.
@@ -186,27 +186,27 @@ func iterate(c chan<- KeyValue) {
for k, v := range vars {
c <- KeyValue{k, v}
}
- close(c);
+ close(c)
}
func Iter() <-chan KeyValue {
- c := make(chan KeyValue);
- go iterate(c);
- return c;
+ c := make(chan KeyValue)
+ go iterate(c)
+ return c
}
func expvarHandler(c *http.Conn, req *http.Request) {
- c.SetHeader("content-type", "application/json; charset=utf-8");
- fmt.Fprintf(c, "{\n");
- first := true;
+ c.SetHeader("content-type", "application/json; charset=utf-8")
+ fmt.Fprintf(c, "{\n")
+ first := true
for name, value := range vars {
if !first {
fmt.Fprintf(c, ",\n")
}
- first = false;
- fmt.Fprintf(c, " %q: %s", name, value);
+ first = false
+ fmt.Fprintf(c, " %q: %s", name, value)
}
- fmt.Fprintf(c, "\n}\n");
+ fmt.Fprintf(c, "\n}\n")
}
-func init() { http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) }
+func init() { http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) }
diff --git a/src/pkg/expvar/expvar_test.go b/src/pkg/expvar/expvar_test.go
index e64bdc2cc..51930eb1d 100644
--- a/src/pkg/expvar/expvar_test.go
+++ b/src/pkg/expvar/expvar_test.go
@@ -5,12 +5,12 @@
package expvar
import (
- "json";
- "testing";
+ "json"
+ "testing"
)
func TestInt(t *testing.T) {
- reqs := NewInt("requests");
+ reqs := NewInt("requests")
if reqs.i != 0 {
t.Errorf("reqs.i = %v, want 4", reqs.i)
}
@@ -18,8 +18,8 @@ func TestInt(t *testing.T) {
t.Errorf("Get() failed.")
}
- reqs.Add(1);
- reqs.Add(3);
+ reqs.Add(1)
+ reqs.Add(3)
if reqs.i != 4 {
t.Errorf("reqs.i = %v, want 4", reqs.i)
}
@@ -30,12 +30,12 @@ func TestInt(t *testing.T) {
}
func TestString(t *testing.T) {
- name := NewString("my-name");
+ name := NewString("my-name")
if name.s != "" {
t.Errorf("name.s = %q, want \"\"", name.s)
}
- name.Set("Mike");
+ name.Set("Mike")
if name.s != "Mike" {
t.Errorf("name.s = %q, want \"Mike\"", name.s)
}
@@ -46,11 +46,11 @@ func TestString(t *testing.T) {
}
func TestMapCounter(t *testing.T) {
- colours := NewMap("bike-shed-colours");
+ colours := NewMap("bike-shed-colours")
- colours.Add("red", 1);
- colours.Add("red", 2);
- colours.Add("blue", 4);
+ colours.Add("red", 1)
+ colours.Add("red", 2)
+ colours.Add("blue", 4)
if x := colours.m["red"].(*Int).i; x != 3 {
t.Errorf("colours.m[\"red\"] = %v, want 3", x)
}
@@ -60,17 +60,17 @@ func TestMapCounter(t *testing.T) {
// colours.String() should be '{"red":3, "blue":4}',
// though the order of red and blue could vary.
- s := colours.String();
- j, err := json.Decode(s);
+ s := colours.String()
+ j, err := json.Decode(s)
if err != nil {
t.Errorf("colours.String() isn't valid JSON: %v", err)
}
- m, ok := j.(map[string]interface{});
+ m, ok := j.(map[string]interface{})
if !ok {
t.Error("colours.String() didn't produce a map.")
}
- red := m["red"];
- x, ok := red.(float64);
+ red := m["red"]
+ x, ok := red.(float64)
if !ok {
t.Error("red.Kind() is not a number.")
}
@@ -80,13 +80,13 @@ func TestMapCounter(t *testing.T) {
}
func TestIntFunc(t *testing.T) {
- x := int(4);
- ix := IntFunc(func() int64 { return int64(x) });
+ x := int(4)
+ ix := IntFunc(func() int64 { return int64(x) })
if s := ix.String(); s != "4" {
t.Errorf("ix.String() = %v, want 4", s)
}
- x++;
+ x++
if s := ix.String(); s != "5" {
t.Errorf("ix.String() = %v, want 5", s)
}
diff --git a/src/pkg/flag/flag.go b/src/pkg/flag/flag.go
index 86a3b3dc1..d57a59c03 100644
--- a/src/pkg/flag/flag.go
+++ b/src/pkg/flag/flag.go
@@ -48,9 +48,9 @@
package flag
import (
- "fmt";
- "os";
- "strconv";
+ "fmt"
+ "os"
+ "strconv"
)
// TODO(r): BUG: atob belongs elsewhere
@@ -61,171 +61,171 @@ func atob(str string) (value bool, ok bool) {
case "0", "f", "F", "false", "FALSE", "False":
return false, true
}
- return false, false;
+ return false, false
}
// -- Bool Value
type boolValue struct {
- p *bool;
+ p *bool
}
func newBoolValue(val bool, p *bool) *boolValue {
- *p = val;
- return &boolValue{p};
+ *p = val
+ return &boolValue{p}
}
func (b *boolValue) set(s string) bool {
- v, ok := atob(s);
- *b.p = v;
- return ok;
+ v, ok := atob(s)
+ *b.p = v
+ return ok
}
-func (b *boolValue) String() string { return fmt.Sprintf("%v", *b.p) }
+func (b *boolValue) String() string { return fmt.Sprintf("%v", *b.p) }
// -- Int Value
type intValue struct {
- p *int;
+ p *int
}
func newIntValue(val int, p *int) *intValue {
- *p = val;
- return &intValue{p};
+ *p = val
+ return &intValue{p}
}
func (i *intValue) set(s string) bool {
- v, err := strconv.Atoi(s);
- *i.p = int(v);
- return err == nil;
+ v, err := strconv.Atoi(s)
+ *i.p = int(v)
+ return err == nil
}
-func (i *intValue) String() string { return fmt.Sprintf("%v", *i.p) }
+func (i *intValue) String() string { return fmt.Sprintf("%v", *i.p) }
// -- Int64 Value
type int64Value struct {
- p *int64;
+ p *int64
}
func newInt64Value(val int64, p *int64) *int64Value {
- *p = val;
- return &int64Value{p};
+ *p = val
+ return &int64Value{p}
}
func (i *int64Value) set(s string) bool {
- v, err := strconv.Atoi64(s);
- *i.p = v;
- return err == nil;
+ v, err := strconv.Atoi64(s)
+ *i.p = v
+ return err == nil
}
-func (i *int64Value) String() string { return fmt.Sprintf("%v", *i.p) }
+func (i *int64Value) String() string { return fmt.Sprintf("%v", *i.p) }
// -- Uint Value
type uintValue struct {
- p *uint;
+ p *uint
}
func newUintValue(val uint, p *uint) *uintValue {
- *p = val;
- return &uintValue{p};
+ *p = val
+ return &uintValue{p}
}
func (i *uintValue) set(s string) bool {
- v, err := strconv.Atoui(s);
- *i.p = uint(v);
- return err == nil;
+ v, err := strconv.Atoui(s)
+ *i.p = uint(v)
+ return err == nil
}
-func (i *uintValue) String() string { return fmt.Sprintf("%v", *i.p) }
+func (i *uintValue) String() string { return fmt.Sprintf("%v", *i.p) }
// -- uint64 Value
type uint64Value struct {
- p *uint64;
+ p *uint64
}
func newUint64Value(val uint64, p *uint64) *uint64Value {
- *p = val;
- return &uint64Value{p};
+ *p = val
+ return &uint64Value{p}
}
func (i *uint64Value) set(s string) bool {
- v, err := strconv.Atoui64(s);
- *i.p = uint64(v);
- return err == nil;
+ v, err := strconv.Atoui64(s)
+ *i.p = uint64(v)
+ return err == nil
}
-func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i.p) }
+func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i.p) }
// -- string Value
type stringValue struct {
- p *string;
+ p *string
}
func newStringValue(val string, p *string) *stringValue {
- *p = val;
- return &stringValue{p};
+ *p = val
+ return &stringValue{p}
}
func (s *stringValue) set(val string) bool {
- *s.p = val;
- return true;
+ *s.p = val
+ return true
}
-func (s *stringValue) String() string { return fmt.Sprintf("%s", *s.p) }
+func (s *stringValue) String() string { return fmt.Sprintf("%s", *s.p) }
// -- Float Value
type floatValue struct {
- p *float;
+ p *float
}
func newFloatValue(val float, p *float) *floatValue {
- *p = val;
- return &floatValue{p};
+ *p = val
+ return &floatValue{p}
}
func (f *floatValue) set(s string) bool {
- v, err := strconv.Atof(s);
- *f.p = v;
- return err == nil;
+ v, err := strconv.Atof(s)
+ *f.p = v
+ return err == nil
}
-func (f *floatValue) String() string { return fmt.Sprintf("%v", *f.p) }
+func (f *floatValue) String() string { return fmt.Sprintf("%v", *f.p) }
// -- Float64 Value
type float64Value struct {
- p *float64;
+ p *float64
}
func newFloat64Value(val float64, p *float64) *float64Value {
- *p = val;
- return &float64Value{p};
+ *p = val
+ return &float64Value{p}
}
func (f *float64Value) set(s string) bool {
- v, err := strconv.Atof64(s);
- *f.p = v;
- return err == nil;
+ v, err := strconv.Atof64(s)
+ *f.p = v
+ return err == nil
}
-func (f *float64Value) String() string { return fmt.Sprintf("%v", *f.p) }
+func (f *float64Value) String() string { return fmt.Sprintf("%v", *f.p) }
// FlagValue is the interface to the dynamic value stored in a flag.
// (The default value is represented as a string.)
type FlagValue interface {
- String() string;
- set(string) bool;
+ String() string
+ set(string) bool
}
// A Flag represents the state of a flag.
type Flag struct {
- Name string; // name as it appears on command line
- Usage string; // help message
- Value FlagValue; // value as set
- DefValue string; // default value (as text); for usage message
+ Name string // name as it appears on command line
+ Usage string // help message
+ Value FlagValue // value as set
+ DefValue string // default value (as text); for usage message
}
type allFlags struct {
- actual map[string]*Flag;
- formal map[string]*Flag;
- first_arg int; // 0 is the program name, 1 is first arg
+ actual map[string]*Flag
+ formal map[string]*Flag
+ first_arg int // 0 is the program name, 1 is first arg
}
var flags *allFlags = &allFlags{make(map[string]*Flag), make(map[string]*Flag), 1}
@@ -246,74 +246,74 @@ func Visit(fn func(*Flag)) {
// Lookup returns the Flag structure of the named flag, returning nil if none exists.
func Lookup(name string) *Flag {
- f, ok := flags.formal[name];
+ f, ok := flags.formal[name]
if !ok {
return nil
}
- return f;
+ return f
}
// Set sets the value of the named flag. It returns true if the set succeeded; false if
// there is no such flag defined.
func Set(name, value string) bool {
- f, ok := flags.formal[name];
+ f, ok := flags.formal[name]
if !ok {
return false
}
- ok = f.Value.set(value);
+ ok = f.Value.set(value)
if !ok {
return false
}
- flags.actual[name] = f;
- return true;
+ flags.actual[name] = f
+ return true
}
// PrintDefaults prints to standard error the default values of all defined flags.
func PrintDefaults() {
VisitAll(func(f *Flag) {
- format := " -%s=%s: %s\n";
+ format := " -%s=%s: %s\n"
if _, ok := f.Value.(*stringValue); ok {
// put quotes on the value
format = " -%s=%q: %s\n"
}
- fmt.Fprintf(os.Stderr, format, f.Name, f.DefValue, f.Usage);
+ fmt.Fprintf(os.Stderr, format, f.Name, f.DefValue, f.Usage)
})
}
// Usage prints to standard error a default usage message documenting all defined flags.
// The function is a variable that may be changed to point to a custom function.
var Usage = func() {
- fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]);
- PrintDefaults();
+ fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
+ PrintDefaults()
}
-func NFlag() int { return len(flags.actual) }
+func NFlag() int { return len(flags.actual) }
// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument
// after flags have been processed.
func Arg(i int) string {
- i += flags.first_arg;
+ i += flags.first_arg
if i < 0 || i >= len(os.Args) {
return ""
}
- return os.Args[i];
+ return os.Args[i]
}
// NArg is the number of arguments remaining after flags have been processed.
-func NArg() int { return len(os.Args) - flags.first_arg }
+func NArg() int { return len(os.Args) - flags.first_arg }
// Args returns the non-flag command-line arguments.
-func Args() []string { return os.Args[flags.first_arg:] }
+func Args() []string { return os.Args[flags.first_arg:] }
func add(name string, value FlagValue, usage string) {
// Remember the default value as a string; it won't change.
- f := &Flag{name, usage, value, value.String()};
- _, alreadythere := flags.formal[name];
+ f := &Flag{name, usage, value, value.String()}
+ _, alreadythere := flags.formal[name]
if alreadythere {
- fmt.Fprintln(os.Stderr, "flag redefined:", name);
- panic("flag redefinition"); // Happens only if flags are declared with identical names
+ fmt.Fprintln(os.Stderr, "flag redefined:", name)
+ panic("flag redefinition") // Happens only if flags are declared with identical names
}
- flags.formal[name] = f;
+ flags.formal[name] = f
}
// BoolVar defines a bool flag with specified name, default value, and usage string.
@@ -325,9 +325,9 @@ func BoolVar(p *bool, name string, value bool, usage string) {
// Bool defines a bool flag with specified name, default value, and usage string.
// The return value is the address of a bool variable that stores the value of the flag.
func Bool(name string, value bool, usage string) *bool {
- p := new(bool);
- BoolVar(p, name, value, usage);
- return p;
+ p := new(bool)
+ BoolVar(p, name, value, usage)
+ return p
}
// IntVar defines an int flag with specified name, default value, and usage string.
@@ -339,9 +339,9 @@ func IntVar(p *int, name string, value int, usage string) {
// Int defines an int flag with specified name, default value, and usage string.
// The return value is the address of an int variable that stores the value of the flag.
func Int(name string, value int, usage string) *int {
- p := new(int);
- IntVar(p, name, value, usage);
- return p;
+ p := new(int)
+ IntVar(p, name, value, usage)
+ return p
}
// Int64Var defines an int64 flag with specified name, default value, and usage string.
@@ -353,9 +353,9 @@ func Int64Var(p *int64, name string, value int64, usage string) {
// Int64 defines an int64 flag with specified name, default value, and usage string.
// The return value is the address of an int64 variable that stores the value of the flag.
func Int64(name string, value int64, usage string) *int64 {
- p := new(int64);
- Int64Var(p, name, value, usage);
- return p;
+ p := new(int64)
+ Int64Var(p, name, value, usage)
+ return p
}
// UintVar defines a uint flag with specified name, default value, and usage string.
@@ -367,9 +367,9 @@ func UintVar(p *uint, name string, value uint, usage string) {
// Uint defines a uint flag with specified name, default value, and usage string.
// The return value is the address of a uint variable that stores the value of the flag.
func Uint(name string, value uint, usage string) *uint {
- p := new(uint);
- UintVar(p, name, value, usage);
- return p;
+ p := new(uint)
+ UintVar(p, name, value, usage)
+ return p
}
// Uint64Var defines a uint64 flag with specified name, default value, and usage string.
@@ -381,9 +381,9 @@ func Uint64Var(p *uint64, name string, value uint64, usage string) {
// Uint64 defines a uint64 flag with specified name, default value, and usage string.
// The return value is the address of a uint64 variable that stores the value of the flag.
func Uint64(name string, value uint64, usage string) *uint64 {
- p := new(uint64);
- Uint64Var(p, name, value, usage);
- return p;
+ p := new(uint64)
+ Uint64Var(p, name, value, usage)
+ return p
}
// StringVar defines a string flag with specified name, default value, and usage string.
@@ -395,9 +395,9 @@ func StringVar(p *string, name, value string, usage string) {
// String defines a string flag with specified name, default value, and usage string.
// The return value is the address of a string variable that stores the value of the flag.
func String(name, value string, usage string) *string {
- p := new(string);
- StringVar(p, name, value, usage);
- return p;
+ p := new(string)
+ StringVar(p, name, value, usage)
+ return p
}
// FloatVar defines a float flag with specified name, default value, and usage string.
@@ -409,9 +409,9 @@ func FloatVar(p *float, name string, value float, usage string) {
// Float defines a float flag with specified name, default value, and usage string.
// The return value is the address of a float variable that stores the value of the flag.
func Float(name string, value float, usage string) *float {
- p := new(float);
- FloatVar(p, name, value, usage);
- return p;
+ p := new(float)
+ FloatVar(p, name, value, usage)
+ return p
}
// Float64Var defines a float64 flag with specified name, default value, and usage string.
@@ -423,68 +423,68 @@ func Float64Var(p *float64, name string, value float64, usage string) {
// Float64 defines a float64 flag with specified name, default value, and usage string.
// The return value is the address of a float64 variable that stores the value of the flag.
func Float64(name string, value float64, usage string) *float64 {
- p := new(float64);
- Float64Var(p, name, value, usage);
- return p;
+ p := new(float64)
+ Float64Var(p, name, value, usage)
+ return p
}
func (f *allFlags) parseOne(index int) (ok bool, next int) {
- s := os.Args[index];
- f.first_arg = index; // until proven otherwise
+ s := os.Args[index]
+ f.first_arg = index // until proven otherwise
if len(s) == 0 {
return false, -1
}
if s[0] != '-' {
return false, -1
}
- num_minuses := 1;
+ num_minuses := 1
if len(s) == 1 {
return false, index
}
if s[1] == '-' {
- num_minuses++;
- if len(s) == 2 { // "--" terminates the flags
+ num_minuses++
+ if len(s) == 2 { // "--" terminates the flags
return false, index + 1
}
}
- name := s[num_minuses:];
+ name := s[num_minuses:]
if len(name) == 0 || name[0] == '-' || name[0] == '=' {
- fmt.Fprintln(os.Stderr, "bad flag syntax:", s);
- Usage();
- os.Exit(2);
+ fmt.Fprintln(os.Stderr, "bad flag syntax:", s)
+ Usage()
+ os.Exit(2)
}
// it's a flag. does it have an argument?
- has_value := false;
- value := "";
- for i := 1; i < len(name); i++ { // equals cannot be first
+ has_value := false
+ value := ""
+ for i := 1; i < len(name); i++ { // equals cannot be first
if name[i] == '=' {
- value = name[i+1:];
- has_value = true;
- name = name[0:i];
- break;
+ value = name[i+1:]
+ has_value = true
+ name = name[0:i]
+ break
}
}
- flag, alreadythere := flags.actual[name];
+ flag, alreadythere := flags.actual[name]
if alreadythere {
- fmt.Fprintf(os.Stderr, "flag specified twice: -%s\n", name);
- Usage();
- os.Exit(2);
+ fmt.Fprintf(os.Stderr, "flag specified twice: -%s\n", name)
+ Usage()
+ os.Exit(2)
}
- m := flags.formal;
- flag, alreadythere = m[name]; // BUG
+ m := flags.formal
+ flag, alreadythere = m[name] // BUG
if !alreadythere {
- fmt.Fprintf(os.Stderr, "flag provided but not defined: -%s\n", name);
- Usage();
- os.Exit(2);
+ fmt.Fprintf(os.Stderr, "flag provided but not defined: -%s\n", name)
+ Usage()
+ os.Exit(2)
}
- if f, ok := flag.Value.(*boolValue); ok { // special case: doesn't need an arg
+ if f, ok := flag.Value.(*boolValue); ok { // special case: doesn't need an arg
if has_value {
if !f.set(value) {
- fmt.Fprintf(os.Stderr, "invalid boolean value %t for flag: -%s\n", value, name);
- Usage();
- os.Exit(2);
+ fmt.Fprintf(os.Stderr, "invalid boolean value %t for flag: -%s\n", value, name)
+ Usage()
+ os.Exit(2)
}
} else {
f.set("true")
@@ -493,34 +493,34 @@ func (f *allFlags) parseOne(index int) (ok bool, next int) {
// It must have a value, which might be the next argument.
if !has_value && index < len(os.Args)-1 {
// value is the next arg
- has_value = true;
- index++;
- value = os.Args[index];
+ has_value = true
+ index++
+ value = os.Args[index]
}
if !has_value {
- fmt.Fprintf(os.Stderr, "flag needs an argument: -%s\n", name);
- Usage();
- os.Exit(2);
+ fmt.Fprintf(os.Stderr, "flag needs an argument: -%s\n", name)
+ Usage()
+ os.Exit(2)
}
- ok = flag.Value.set(value);
+ ok = flag.Value.set(value)
if !ok {
- fmt.Fprintf(os.Stderr, "invalid value %s for flag: -%s\n", value, name);
- Usage();
- os.Exit(2);
+ fmt.Fprintf(os.Stderr, "invalid value %s for flag: -%s\n", value, name)
+ Usage()
+ os.Exit(2)
}
}
- flags.actual[name] = flag;
- return true, index + 1;
+ flags.actual[name] = flag
+ return true, index + 1
}
// Parse parses the command-line flags. Must be called after all flags are defined
// and before any are accessed by the program.
func Parse() {
for i := 1; i < len(os.Args); {
- ok, next := flags.parseOne(i);
+ ok, next := flags.parseOne(i)
if next > 0 {
- flags.first_arg = next;
- i = next;
+ flags.first_arg = next
+ i = next
}
if !ok {
break
diff --git a/src/pkg/flag/flag_test.go b/src/pkg/flag/flag_test.go
index 0acfc2f96..d6e642b2b 100644
--- a/src/pkg/flag/flag_test.go
+++ b/src/pkg/flag/flag_test.go
@@ -5,35 +5,35 @@
package flag_test
import (
- . "flag";
- "testing";
+ . "flag"
+ "testing"
)
var (
- test_bool = Bool("test_bool", false, "bool value");
- test_int = Int("test_int", 0, "int value");
- test_int64 = Int64("test_int64", 0, "int64 value");
- test_uint = Uint("test_uint", 0, "uint value");
- test_uint64 = Uint64("test_uint64", 0, "uint64 value");
- test_string = String("test_string", "0", "string value");
- test_float = Float("test_float", 0, "float value");
- test_float64 = Float("test_float64", 0, "float64 value");
+ test_bool = Bool("test_bool", false, "bool value")
+ test_int = Int("test_int", 0, "int value")
+ test_int64 = Int64("test_int64", 0, "int64 value")
+ test_uint = Uint("test_uint", 0, "uint value")
+ test_uint64 = Uint64("test_uint64", 0, "uint64 value")
+ test_string = String("test_string", "0", "string value")
+ test_float = Float("test_float", 0, "float value")
+ test_float64 = Float("test_float64", 0, "float64 value")
)
func boolString(s string) string {
if s == "0" {
return "false"
}
- return "true";
+ return "true"
}
func TestEverything(t *testing.T) {
- m := make(map[string]*Flag);
- desired := "0";
+ m := make(map[string]*Flag)
+ desired := "0"
visitor := func(f *Flag) {
if len(f.Name) > 5 && f.Name[0:5] == "test_" {
- m[f.Name] = f;
- ok := false;
+ m[f.Name] = f
+ ok := false
switch {
case f.Value.String() == desired:
ok = true
@@ -44,35 +44,35 @@ func TestEverything(t *testing.T) {
t.Error("Visit: bad value", f.Value.String(), "for", f.Name)
}
}
- };
- VisitAll(visitor);
+ }
+ VisitAll(visitor)
if len(m) != 8 {
- t.Error("VisitAll misses some flags");
+ t.Error("VisitAll misses some flags")
for k, v := range m {
t.Log(k, *v)
}
}
- m = make(map[string]*Flag);
- Visit(visitor);
+ m = make(map[string]*Flag)
+ Visit(visitor)
if len(m) != 0 {
- t.Errorf("Visit sees unset flags");
+ t.Errorf("Visit sees unset flags")
for k, v := range m {
t.Log(k, *v)
}
}
// Now set all flags
- Set("test_bool", "true");
- Set("test_int", "1");
- Set("test_int64", "1");
- Set("test_uint", "1");
- Set("test_uint64", "1");
- Set("test_string", "1");
- Set("test_float", "1");
- Set("test_float64", "1");
- desired = "1";
- Visit(visitor);
+ Set("test_bool", "true")
+ Set("test_int", "1")
+ Set("test_int64", "1")
+ Set("test_uint", "1")
+ Set("test_uint64", "1")
+ Set("test_string", "1")
+ Set("test_float", "1")
+ Set("test_float64", "1")
+ desired = "1"
+ Visit(visitor)
if len(m) != 8 {
- t.Error("Visit fails after set");
+ t.Error("Visit fails after set")
for k, v := range m {
t.Log(k, *v)
}
diff --git a/src/pkg/fmt/fmt_test.go b/src/pkg/fmt/fmt_test.go
index 51a159ff1..78d4cf29a 100644
--- a/src/pkg/fmt/fmt_test.go
+++ b/src/pkg/fmt/fmt_test.go
@@ -5,27 +5,27 @@
package fmt_test
import (
- . "fmt";
- "io";
- "malloc"; // for the malloc count test only
- "math";
- "strings";
- "testing";
+ . "fmt"
+ "io"
+ "malloc" // for the malloc count test only
+ "math"
+ "strings"
+ "testing"
)
func TestFmtInterface(t *testing.T) {
var i1 interface{}
- i1 = "abc";
- s := Sprintf("%s", i1);
+ i1 = "abc"
+ s := Sprintf("%s", i1)
if s != "abc" {
t.Errorf(`Sprintf("%%s", empty("abc")) = %q want %q`, s, "abc")
}
}
type fmtTest struct {
- fmt string;
- val interface{};
- out string;
+ fmt string
+ val interface{}
+ out string
}
const b32 uint32 = 1<<32 - 1
@@ -35,24 +35,24 @@ var array = []int{1, 2, 3, 4, 5}
var iarray = []interface{}{1, "hello", 2.5, nil}
type A struct {
- i int;
- j uint;
- s string;
- x []int;
+ i int
+ j uint
+ s string
+ x []int
}
type I int
-func (i I) String() string { return Sprintf("<%d>", i) }
+func (i I) String() string { return Sprintf("<%d>", i) }
type B struct {
- i I;
- j int;
+ i I
+ j int
}
type C struct {
- i int;
- B;
+ i int
+ B
}
var b byte
@@ -228,16 +228,16 @@ var fmttests = []fmtTest{
func TestSprintf(t *testing.T) {
for _, tt := range fmttests {
- s := Sprintf(tt.fmt, tt.val);
+ s := Sprintf(tt.fmt, tt.val)
if i := strings.Index(s, "0x"); i >= 0 && strings.Index(tt.out, "PTR") >= 0 {
- j := i + 2;
+ j := i + 2
for ; j < len(s); j++ {
- c := s[j];
+ c := s[j]
if (c < '0' || c > '9') && (c < 'a' || c > 'f') {
break
}
}
- s = s[0:i] + "PTR" + s[j:];
+ s = s[0:i] + "PTR" + s[j:]
}
if s != tt.out {
if _, ok := tt.val.(string); ok {
@@ -276,36 +276,36 @@ func BenchmarkSprintfIntInt(b *testing.B) {
}
func TestCountMallocs(t *testing.T) {
- mallocs := 0 - malloc.GetStats().Mallocs;
+ mallocs := 0 - malloc.GetStats().Mallocs
for i := 0; i < 100; i++ {
Sprintf("")
}
- mallocs += malloc.GetStats().Mallocs;
- Printf("mallocs per Sprintf(\"\"): %d\n", mallocs/100);
- mallocs = 0 - malloc.GetStats().Mallocs;
+ mallocs += malloc.GetStats().Mallocs
+ Printf("mallocs per Sprintf(\"\"): %d\n", mallocs/100)
+ mallocs = 0 - malloc.GetStats().Mallocs
for i := 0; i < 100; i++ {
Sprintf("xxx")
}
- mallocs += malloc.GetStats().Mallocs;
- Printf("mallocs per Sprintf(\"xxx\"): %d\n", mallocs/100);
- mallocs = 0 - malloc.GetStats().Mallocs;
+ mallocs += malloc.GetStats().Mallocs
+ Printf("mallocs per Sprintf(\"xxx\"): %d\n", mallocs/100)
+ mallocs = 0 - malloc.GetStats().Mallocs
for i := 0; i < 100; i++ {
Sprintf("%x", i)
}
- mallocs += malloc.GetStats().Mallocs;
- Printf("mallocs per Sprintf(\"%%x\"): %d\n", mallocs/100);
- mallocs = 0 - malloc.GetStats().Mallocs;
+ mallocs += malloc.GetStats().Mallocs
+ Printf("mallocs per Sprintf(\"%%x\"): %d\n", mallocs/100)
+ mallocs = 0 - malloc.GetStats().Mallocs
for i := 0; i < 100; i++ {
Sprintf("%x %x", i, i)
}
- mallocs += malloc.GetStats().Mallocs;
- Printf("mallocs per Sprintf(\"%%x %%x\"): %d\n", mallocs/100);
+ mallocs += malloc.GetStats().Mallocs
+ Printf("mallocs per Sprintf(\"%%x %%x\"): %d\n", mallocs/100)
}
type flagPrinter struct{}
func (*flagPrinter) Format(f State, c int) {
- s := "%";
+ s := "%"
for i := 0; i < 128; i++ {
if f.Flag(i) {
s += string(i)
@@ -317,13 +317,13 @@ func (*flagPrinter) Format(f State, c int) {
if p, ok := f.Precision(); ok {
s += Sprintf(".%d", p)
}
- s += string(c);
- io.WriteString(f, "["+s+"]");
+ s += string(c)
+ io.WriteString(f, "["+s+"]")
}
type flagTest struct {
- in string;
- out string;
+ in string
+ out string
}
var flagtests = []flagTest{
@@ -342,9 +342,9 @@ var flagtests = []flagTest{
}
func TestFlagParser(t *testing.T) {
- var flagprinter flagPrinter;
+ var flagprinter flagPrinter
for _, tt := range flagtests {
- s := Sprintf(tt.in, &flagprinter);
+ s := Sprintf(tt.in, &flagprinter)
if s != tt.out {
t.Errorf("Sprintf(%q, &flagprinter) => %q, want %q", tt.in, s, tt.out)
}
@@ -353,23 +353,23 @@ func TestFlagParser(t *testing.T) {
func TestStructPrinter(t *testing.T) {
var s struct {
- a string;
- b string;
- c int;
+ a string
+ b string
+ c int
}
- s.a = "abc";
- s.b = "def";
- s.c = 123;
+ s.a = "abc"
+ s.b = "def"
+ s.c = 123
type Test struct {
- fmt string;
- out string;
+ fmt string
+ out string
}
var tests = []Test{
Test{"%v", "{abc def 123}"},
Test{"%+v", "{a:abc b:def c:123}"},
- };
+ }
for _, tt := range tests {
- out := Sprintf(tt.fmt, s);
+ out := Sprintf(tt.fmt, s)
if out != tt.out {
t.Errorf("Sprintf(%q, &s) = %q, want %q", tt.fmt, out, tt.out)
}
@@ -379,12 +379,12 @@ func TestStructPrinter(t *testing.T) {
// Check map printing using substrings so we don't depend on the print order.
func presentInMap(s string, a []string, t *testing.T) {
for i := 0; i < len(a); i++ {
- loc := strings.Index(s, a[i]);
+ loc := strings.Index(s, a[i])
if loc < 0 {
t.Errorf("map print: expected to find %q in %q", a[i], s)
}
// make sure the match ends here
- loc += len(a[i]);
+ loc += len(a[i])
if loc >= len(s) || (s[loc] != ' ' && s[loc] != ']') {
t.Errorf("map print: %q not properly terminated in %q", a[i], s)
}
@@ -392,26 +392,26 @@ func presentInMap(s string, a []string, t *testing.T) {
}
func TestMapPrinter(t *testing.T) {
- m0 := make(map[int]string);
- s := Sprint(m0);
+ m0 := make(map[int]string)
+ s := Sprint(m0)
if s != "map[]" {
t.Errorf("empty map printed as %q not %q", s, "map[]")
}
- m1 := map[int]string{1: "one", 2: "two", 3: "three"};
- a := []string{"1:one", "2:two", "3:three"};
- presentInMap(Sprintf("%v", m1), a, t);
- presentInMap(Sprint(m1), a, t);
+ m1 := map[int]string{1: "one", 2: "two", 3: "three"}
+ a := []string{"1:one", "2:two", "3:three"}
+ presentInMap(Sprintf("%v", m1), a, t)
+ presentInMap(Sprint(m1), a, t)
}
func TestEmptyMap(t *testing.T) {
- const emptyMapStr = "map[]";
- var m map[string]int;
- s := Sprint(m);
+ const emptyMapStr = "map[]"
+ var m map[string]int
+ s := Sprint(m)
if s != emptyMapStr {
t.Errorf("nil map printed as %q not %q", s, emptyMapStr)
}
- m = make(map[string]int);
- s = Sprint(m);
+ m = make(map[string]int)
+ s = Sprint(m)
if s != emptyMapStr {
t.Errorf("empty map printed as %q not %q", s, emptyMapStr)
}
diff --git a/src/pkg/fmt/format.go b/src/pkg/fmt/format.go
index b53bcc5a6..38b234414 100644
--- a/src/pkg/fmt/format.go
+++ b/src/pkg/fmt/format.go
@@ -5,20 +5,20 @@
package fmt
import (
- "bytes";
- "strconv";
+ "bytes"
+ "strconv"
)
const (
- nByte = 64;
+ nByte = 64
- ldigits = "0123456789abcdef";
- udigits = "0123456789ABCDEF";
+ ldigits = "0123456789abcdef"
+ udigits = "0123456789ABCDEF"
)
const (
- signed = true;
- unsigned = false;
+ signed = true
+ unsigned = false
)
var padZeroBytes = make([]byte, nByte)
@@ -28,55 +28,55 @@ var newline = []byte{'\n'}
func init() {
for i := 0; i < nByte; i++ {
- padZeroBytes[i] = '0';
- padSpaceBytes[i] = ' ';
+ padZeroBytes[i] = '0'
+ padSpaceBytes[i] = ' '
}
}
// A fmt is the raw formatter used by Printf etc.
// It prints into a bytes.Buffer that must be set up externally.
type fmt struct {
- intbuf [nByte]byte;
- buf *bytes.Buffer;
+ intbuf [nByte]byte
+ buf *bytes.Buffer
// width, precision
- wid int;
- prec int;
+ wid int
+ prec int
// flags
- widPresent bool;
- precPresent bool;
- minus bool;
- plus bool;
- sharp bool;
- space bool;
- zero bool;
+ widPresent bool
+ precPresent bool
+ minus bool
+ plus bool
+ sharp bool
+ space bool
+ zero bool
}
func (f *fmt) clearflags() {
- f.wid = 0;
- f.widPresent = false;
- f.prec = 0;
- f.precPresent = false;
- f.minus = false;
- f.plus = false;
- f.sharp = false;
- f.space = false;
- f.zero = false;
+ f.wid = 0
+ f.widPresent = false
+ f.prec = 0
+ f.precPresent = false
+ f.minus = false
+ f.plus = false
+ f.sharp = false
+ f.space = false
+ f.zero = false
}
func (f *fmt) init(buf *bytes.Buffer) {
- f.buf = buf;
- f.clearflags();
+ f.buf = buf
+ f.clearflags()
}
// Compute left and right padding widths (only one will be non-zero).
func (f *fmt) computePadding(width int) (padding []byte, leftWidth, rightWidth int) {
- left := !f.minus;
- w := f.wid;
+ left := !f.minus
+ w := f.wid
if w < 0 {
- left = false;
- w = -w;
+ left = false
+ w = -w
}
- w -= width;
+ w -= width
if w > 0 {
if left && f.zero {
return padZeroBytes, w, 0
@@ -88,66 +88,66 @@ func (f *fmt) computePadding(width int) (padding []byte, leftWidth, rightWidth i
return padSpaceBytes, 0, w
}
}
- return;
+ return
}
// Generate n bytes of padding.
func (f *fmt) writePadding(n int, padding []byte) {
for n > 0 {
- m := n;
+ m := n
if m > nByte {
m = nByte
}
- f.buf.Write(padding[0:m]);
- n -= m;
+ f.buf.Write(padding[0:m])
+ n -= m
}
}
// Append b to f.buf, padded on left (w > 0) or right (w < 0 or f.minus)
// clear flags aftewards.
func (f *fmt) pad(b []byte) {
- var padding []byte;
- var left, right int;
+ var padding []byte
+ var left, right int
if f.widPresent && f.wid != 0 {
padding, left, right = f.computePadding(len(b))
}
if left > 0 {
f.writePadding(left, padding)
}
- f.buf.Write(b);
+ f.buf.Write(b)
if right > 0 {
f.writePadding(right, padding)
}
- f.clearflags();
+ f.clearflags()
}
// append s to buf, padded on left (w > 0) or right (w < 0 or f.minus).
// clear flags aftewards.
func (f *fmt) padString(s string) {
- var padding []byte;
- var left, right int;
+ var padding []byte
+ var left, right int
if f.widPresent && f.wid != 0 {
padding, left, right = f.computePadding(len(s))
}
if left > 0 {
f.writePadding(left, padding)
}
- f.buf.WriteString(s);
+ f.buf.WriteString(s)
if right > 0 {
f.writePadding(right, padding)
}
- f.clearflags();
+ f.clearflags()
}
func putint(buf []byte, base, val uint64, digits string) int {
- i := len(buf) - 1;
+ i := len(buf) - 1
for val >= base {
- buf[i] = digits[val%base];
- i--;
- val /= base;
+ buf[i] = digits[val%base]
+ i--
+ val /= base
}
- buf[i] = digits[val];
- return i - 1;
+ buf[i] = digits[val]
+ return i - 1
}
// fmt_boolean formats a boolean.
@@ -162,22 +162,22 @@ func (f *fmt) fmt_boolean(v bool) {
// integer; interprets prec but not wid. Once formatted, result is sent to pad()
// and then flags are cleared.
func (f *fmt) integer(a int64, base uint64, signedness bool, digits string) {
- var buf []byte = &f.intbuf;
- negative := signedness == signed && a < 0;
+ var buf []byte = &f.intbuf
+ negative := signedness == signed && a < 0
if negative {
a = -a
}
// two ways to ask for extra leading zero digits: %.3d or %03d.
// apparently the first cancels the second.
- prec := 0;
+ prec := 0
if f.precPresent {
- prec = f.prec;
- f.zero = false;
+ prec = f.prec
+ f.zero = false
} else if f.zero && f.widPresent && !f.minus && f.wid > 0 {
- prec = f.wid;
+ prec = f.wid
if negative || f.plus || f.space {
- prec-- // leave room for sign
+ prec-- // leave room for sign
}
}
@@ -185,18 +185,18 @@ func (f *fmt) integer(a int64, base uint64, signedness bool, digits string) {
// a is made into unsigned ua. we could make things
// marginally faster by splitting the 32-bit case out into a separate
// block but it's not worth the duplication, so ua has 64 bits.
- i := len(f.intbuf);
- ua := uint64(a);
+ i := len(f.intbuf)
+ ua := uint64(a)
for ua >= base {
- i--;
- buf[i] = digits[ua%base];
- ua /= base;
+ i--
+ buf[i] = digits[ua%base]
+ ua /= base
}
- i--;
- buf[i] = digits[ua];
+ i--
+ buf[i] = digits[ua]
for i > 0 && prec > nByte-i {
- i--;
- buf[i] = '0';
+ i--
+ buf[i] = '0'
}
// Various prefixes: 0x, -, etc.
@@ -204,113 +204,113 @@ func (f *fmt) integer(a int64, base uint64, signedness bool, digits string) {
switch base {
case 8:
if buf[i] != '0' {
- i--;
- buf[i] = '0';
+ i--
+ buf[i] = '0'
}
case 16:
- i--;
- buf[i] = 'x' + digits[10] - 'a';
- i--;
- buf[i] = '0';
+ i--
+ buf[i] = 'x' + digits[10] - 'a'
+ i--
+ buf[i] = '0'
}
}
if negative {
- i--;
- buf[i] = '-';
+ i--
+ buf[i] = '-'
} else if f.plus {
- i--;
- buf[i] = '+';
+ i--
+ buf[i] = '+'
} else if f.space {
- i--;
- buf[i] = ' ';
+ i--
+ buf[i] = ' '
}
- f.pad(buf[i:]);
+ f.pad(buf[i:])
}
// fmt_d64 formats an int64 in decimal.
-func (f *fmt) fmt_d64(v int64) { f.integer(v, 10, signed, ldigits) }
+func (f *fmt) fmt_d64(v int64) { f.integer(v, 10, signed, ldigits) }
// fmt_d32 formats an int32 in decimal.
-func (f *fmt) fmt_d32(v int32) { f.integer(int64(v), 10, signed, ldigits) }
+func (f *fmt) fmt_d32(v int32) { f.integer(int64(v), 10, signed, ldigits) }
// fmt_d formats an int in decimal.
-func (f *fmt) fmt_d(v int) { f.integer(int64(v), 10, signed, ldigits) }
+func (f *fmt) fmt_d(v int) { f.integer(int64(v), 10, signed, ldigits) }
// fmt_ud64 formats a uint64 in decimal.
-func (f *fmt) fmt_ud64(v uint64) { f.integer(int64(v), 10, unsigned, ldigits) }
+func (f *fmt) fmt_ud64(v uint64) { f.integer(int64(v), 10, unsigned, ldigits) }
// fmt_ud32 formats a uint32 in decimal.
-func (f *fmt) fmt_ud32(v uint32) { f.integer(int64(v), 10, unsigned, ldigits) }
+func (f *fmt) fmt_ud32(v uint32) { f.integer(int64(v), 10, unsigned, ldigits) }
// fmt_ud formats a uint in decimal.
-func (f *fmt) fmt_ud(v uint) { f.integer(int64(v), 10, unsigned, ldigits) }
+func (f *fmt) fmt_ud(v uint) { f.integer(int64(v), 10, unsigned, ldigits) }
// fmt_x64 formats an int64 in hexadecimal.
-func (f *fmt) fmt_x64(v int64) { f.integer(v, 16, signed, ldigits) }
+func (f *fmt) fmt_x64(v int64) { f.integer(v, 16, signed, ldigits) }
// fmt_x32 formats an int32 in hexadecimal.
-func (f *fmt) fmt_x32(v int32) { f.integer(int64(v), 16, signed, ldigits) }
+func (f *fmt) fmt_x32(v int32) { f.integer(int64(v), 16, signed, ldigits) }
// fmt_x formats an int in hexadecimal.
-func (f *fmt) fmt_x(v int) { f.integer(int64(v), 16, signed, ldigits) }
+func (f *fmt) fmt_x(v int) { f.integer(int64(v), 16, signed, ldigits) }
// fmt_ux64 formats a uint64 in hexadecimal.
-func (f *fmt) fmt_ux64(v uint64) { f.integer(int64(v), 16, unsigned, ldigits) }
+func (f *fmt) fmt_ux64(v uint64) { f.integer(int64(v), 16, unsigned, ldigits) }
// fmt_ux32 formats a uint32 in hexadecimal.
-func (f *fmt) fmt_ux32(v uint32) { f.integer(int64(v), 16, unsigned, ldigits) }
+func (f *fmt) fmt_ux32(v uint32) { f.integer(int64(v), 16, unsigned, ldigits) }
// fmt_ux formats a uint in hexadecimal.
-func (f *fmt) fmt_ux(v uint) { f.integer(int64(v), 16, unsigned, ldigits) }
+func (f *fmt) fmt_ux(v uint) { f.integer(int64(v), 16, unsigned, ldigits) }
// fmt_X64 formats an int64 in upper case hexadecimal.
-func (f *fmt) fmt_X64(v int64) { f.integer(v, 16, signed, udigits) }
+func (f *fmt) fmt_X64(v int64) { f.integer(v, 16, signed, udigits) }
// fmt_X32 formats an int32 in upper case hexadecimal.
-func (f *fmt) fmt_X32(v int32) { f.integer(int64(v), 16, signed, udigits) }
+func (f *fmt) fmt_X32(v int32) { f.integer(int64(v), 16, signed, udigits) }
// fmt_X formats an int in upper case hexadecimal.
-func (f *fmt) fmt_X(v int) { f.integer(int64(v), 16, signed, udigits) }
+func (f *fmt) fmt_X(v int) { f.integer(int64(v), 16, signed, udigits) }
// fmt_uX64 formats a uint64 in upper case hexadecimal.
-func (f *fmt) fmt_uX64(v uint64) { f.integer(int64(v), 16, unsigned, udigits) }
+func (f *fmt) fmt_uX64(v uint64) { f.integer(int64(v), 16, unsigned, udigits) }
// fmt_uX32 formats a uint32 in upper case hexadecimal.
-func (f *fmt) fmt_uX32(v uint32) { f.integer(int64(v), 16, unsigned, udigits) }
+func (f *fmt) fmt_uX32(v uint32) { f.integer(int64(v), 16, unsigned, udigits) }
// fmt_uX formats a uint in upper case hexadecimal.
-func (f *fmt) fmt_uX(v uint) { f.integer(int64(v), 16, unsigned, udigits) }
+func (f *fmt) fmt_uX(v uint) { f.integer(int64(v), 16, unsigned, udigits) }
// fmt_o64 formats an int64 in octal.
-func (f *fmt) fmt_o64(v int64) { f.integer(v, 8, signed, ldigits) }
+func (f *fmt) fmt_o64(v int64) { f.integer(v, 8, signed, ldigits) }
// fmt_o32 formats an int32 in octal.
-func (f *fmt) fmt_o32(v int32) { f.integer(int64(v), 8, signed, ldigits) }
+func (f *fmt) fmt_o32(v int32) { f.integer(int64(v), 8, signed, ldigits) }
// fmt_o formats an int in octal.
-func (f *fmt) fmt_o(v int) { f.integer(int64(v), 8, signed, ldigits) }
+func (f *fmt) fmt_o(v int) { f.integer(int64(v), 8, signed, ldigits) }
// fmt_uo64 formats a uint64 in octal.
-func (f *fmt) fmt_uo64(v uint64) { f.integer(int64(v), 8, unsigned, ldigits) }
+func (f *fmt) fmt_uo64(v uint64) { f.integer(int64(v), 8, unsigned, ldigits) }
// fmt_uo32 formats a uint32 in octal.
-func (f *fmt) fmt_uo32(v uint32) { f.integer(int64(v), 8, unsigned, ldigits) }
+func (f *fmt) fmt_uo32(v uint32) { f.integer(int64(v), 8, unsigned, ldigits) }
// fmt_uo formats a uint in octal.
-func (f *fmt) fmt_uo(v uint) { f.integer(int64(v), 8, unsigned, ldigits) }
+func (f *fmt) fmt_uo(v uint) { f.integer(int64(v), 8, unsigned, ldigits) }
// fmt_b64 formats a uint64 in binary.
-func (f *fmt) fmt_b64(v uint64) { f.integer(int64(v), 2, unsigned, ldigits) }
+func (f *fmt) fmt_b64(v uint64) { f.integer(int64(v), 2, unsigned, ldigits) }
// fmt_b32 formats a uint32 in binary.
-func (f *fmt) fmt_b32(v uint32) { f.integer(int64(v), 2, unsigned, ldigits) }
+func (f *fmt) fmt_b32(v uint32) { f.integer(int64(v), 2, unsigned, ldigits) }
// fmt_b formats a uint in binary.
-func (f *fmt) fmt_b(v uint) { f.integer(int64(v), 2, unsigned, ldigits) }
+func (f *fmt) fmt_b(v uint) { f.integer(int64(v), 2, unsigned, ldigits) }
// fmt_c formats a Unicode character.
-func (f *fmt) fmt_c(v int) { f.padString(string(v)) }
+func (f *fmt) fmt_c(v int) { f.padString(string(v)) }
// fmt_s formats a string.
func (f *fmt) fmt_s(s string) {
@@ -319,43 +319,43 @@ func (f *fmt) fmt_s(s string) {
s = s[0:f.prec]
}
}
- f.padString(s);
+ f.padString(s)
}
// fmt_sx formats a string as a hexadecimal encoding of its bytes.
func (f *fmt) fmt_sx(s string) {
- t := "";
+ t := ""
for i := 0; i < len(s); i++ {
if i > 0 && f.space {
t += " "
}
- v := s[i];
- t += string(ldigits[v>>4]);
- t += string(ldigits[v&0xF]);
+ v := s[i]
+ t += string(ldigits[v>>4])
+ t += string(ldigits[v&0xF])
}
- f.padString(t);
+ f.padString(t)
}
// fmt_sX formats a string as an uppercase hexadecimal encoding of its bytes.
func (f *fmt) fmt_sX(s string) {
- t := "";
+ t := ""
for i := 0; i < len(s); i++ {
- v := s[i];
- t += string(udigits[v>>4]);
- t += string(udigits[v&0xF]);
+ v := s[i]
+ t += string(udigits[v>>4])
+ t += string(udigits[v&0xF])
}
- f.padString(t);
+ f.padString(t)
}
// fmt_q formats a string as a double-quoted, escaped Go string constant.
func (f *fmt) fmt_q(s string) {
- var quoted string;
+ var quoted string
if f.sharp && strconv.CanBackquote(s) {
quoted = "`" + s + "`"
} else {
quoted = strconv.Quote(s)
}
- f.padString(quoted);
+ f.padString(quoted)
}
// floating-point
@@ -364,7 +364,7 @@ func doPrec(f *fmt, def int) int {
if f.precPresent {
return f.prec
}
- return def;
+ return def
}
// Add a plus sign or space to the floating-point string representation if missing and required.
@@ -376,48 +376,48 @@ func (f *fmt) plusSpace(s string) {
s = " " + s
}
}
- f.padString(s);
+ f.padString(s)
}
// fmt_e64 formats a float64 in the form -1.23e+12.
-func (f *fmt) fmt_e64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'e', doPrec(f, 6))) }
+func (f *fmt) fmt_e64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'e', doPrec(f, 6))) }
// fmt_E64 formats a float64 in the form -1.23E+12.
-func (f *fmt) fmt_E64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'E', doPrec(f, 6))) }
+func (f *fmt) fmt_E64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'E', doPrec(f, 6))) }
// fmt_f64 formats a float64 in the form -1.23.
-func (f *fmt) fmt_f64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'f', doPrec(f, 6))) }
+func (f *fmt) fmt_f64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'f', doPrec(f, 6))) }
// fmt_g64 formats a float64 in the 'f' or 'e' form according to size.
-func (f *fmt) fmt_g64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'g', doPrec(f, -1))) }
+func (f *fmt) fmt_g64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'g', doPrec(f, -1))) }
// fmt_g64 formats a float64 in the 'f' or 'E' form according to size.
-func (f *fmt) fmt_G64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'G', doPrec(f, -1))) }
+func (f *fmt) fmt_G64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'G', doPrec(f, -1))) }
// fmt_fb64 formats a float64 in the form -123p3 (exponent is power of 2).
-func (f *fmt) fmt_fb64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'b', 0)) }
+func (f *fmt) fmt_fb64(v float64) { f.plusSpace(strconv.Ftoa64(v, 'b', 0)) }
// float32
// cannot defer to float64 versions
// because it will get rounding wrong in corner cases.
// fmt_e32 formats a float32 in the form -1.23e+12.
-func (f *fmt) fmt_e32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'e', doPrec(f, 6))) }
+func (f *fmt) fmt_e32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'e', doPrec(f, 6))) }
// fmt_E32 formats a float32 in the form -1.23E+12.
-func (f *fmt) fmt_E32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'E', doPrec(f, 6))) }
+func (f *fmt) fmt_E32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'E', doPrec(f, 6))) }
// fmt_f32 formats a float32 in the form -1.23.
-func (f *fmt) fmt_f32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'f', doPrec(f, 6))) }
+func (f *fmt) fmt_f32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'f', doPrec(f, 6))) }
// fmt_g32 formats a float32 in the 'f' or 'e' form according to size.
-func (f *fmt) fmt_g32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'g', doPrec(f, -1))) }
+func (f *fmt) fmt_g32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'g', doPrec(f, -1))) }
// fmt_G32 formats a float32 in the 'f' or 'E' form according to size.
-func (f *fmt) fmt_G32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'G', doPrec(f, -1))) }
+func (f *fmt) fmt_G32(v float32) { f.plusSpace(strconv.Ftoa32(v, 'G', doPrec(f, -1))) }
// fmt_fb32 formats a float32 in the form -123p3 (exponent is power of 2).
-func (f *fmt) fmt_fb32(v float32) { f.padString(strconv.Ftoa32(v, 'b', 0)) }
+func (f *fmt) fmt_fb32(v float32) { f.padString(strconv.Ftoa32(v, 'b', 0)) }
// float
func (x *fmt) f(a float) {
diff --git a/src/pkg/fmt/print.go b/src/pkg/fmt/print.go
index 6fa747c29..d4ef3c62f 100644
--- a/src/pkg/fmt/print.go
+++ b/src/pkg/fmt/print.go
@@ -77,25 +77,25 @@ package fmt
import (
- "bytes";
- "io";
- "os";
- "reflect";
- "utf8";
+ "bytes"
+ "io"
+ "os"
+ "reflect"
+ "utf8"
)
// Some constants in the form of bytes, to avoid string overhead.
// Needlessly fastidious, I suppose.
var (
- trueBytes = []byte{'t', 'r', 'u', 'e'};
- falseBytes = []byte{'f', 'a', 'l', 's', 'e'};
- commaSpaceBytes = []byte{',', ' '};
- nilAngleBytes = []byte{'<', 'n', 'i', 'l', '>'};
- nilParenBytes = []byte{'(', 'n', 'i', 'l', ')'};
- nilBytes = []byte{'n', 'i', 'l'};
- mapBytes = []byte{'m', 'a', 'p', '['};
- missingBytes = []byte{'m', 'i', 's', 's', 'i', 'n', 'g'};
- extraBytes = []byte{'?', '(', 'e', 'x', 't', 'r', 'a', ' '};
+ trueBytes = []byte{'t', 'r', 'u', 'e'}
+ falseBytes = []byte{'f', 'a', 'l', 's', 'e'}
+ commaSpaceBytes = []byte{',', ' '}
+ nilAngleBytes = []byte{'<', 'n', 'i', 'l', '>'}
+ nilParenBytes = []byte{'(', 'n', 'i', 'l', ')'}
+ nilBytes = []byte{'n', 'i', 'l'}
+ mapBytes = []byte{'m', 'a', 'p', '['}
+ missingBytes = []byte{'m', 'i', 's', 's', 'i', 'n', 'g'}
+ extraBytes = []byte{'?', '(', 'e', 'x', 't', 'r', 'a', ' '}
)
// State represents the printer state passed to custom formatters.
@@ -103,21 +103,21 @@ var (
// the flags and options for the operand's format specifier.
type State interface {
// Write is the function to call to emit formatted output to be printed.
- Write(b []byte) (ret int, err os.Error);
+ Write(b []byte) (ret int, err os.Error)
// Width returns the value of the width option and whether it has been set.
- Width() (wid int, ok bool);
+ Width() (wid int, ok bool)
// Precision returns the value of the precision option and whether it has been set.
- Precision() (prec int, ok bool);
+ Precision() (prec int, ok bool)
// Flag returns whether the flag c, a character, has been set.
- Flag(int) bool;
+ Flag(int) bool
}
// Formatter is the interface implemented by values with a custom formatter.
// The implementation of Format may call Sprintf or Fprintf(f) etc.
// to generate its output.
type Formatter interface {
- Format(f State, c int);
+ Format(f State, c int)
}
// Stringer is implemented by any value that has a String method(),
@@ -125,7 +125,7 @@ type Formatter interface {
// The String method is used to print values passed as an operand
// to a %s or %v format or to an unformatted printer such as Print.
type Stringer interface {
- String() string;
+ String() string
}
// GoStringer is implemented by any value that has a GoString() method,
@@ -133,16 +133,16 @@ type Stringer interface {
// The GoString method is used to print values passed as an operand
// to a %#v format.
type GoStringer interface {
- GoString() string;
+ GoString() string
}
const allocSize = 32
type pp struct {
- n int;
- buf bytes.Buffer;
- runeBuf [utf8.UTFMax]byte;
- fmt fmt;
+ n int
+ buf bytes.Buffer
+ runeBuf [utf8.UTFMax]byte
+ fmt fmt
}
// A leaky bucket of reusable pp structures.
@@ -150,12 +150,12 @@ var ppFree = make(chan *pp, 100)
// Allocate a new pp struct. Probably can grab the previous one from ppFree.
func newPrinter() *pp {
- p, ok := <-ppFree;
+ p, ok := <-ppFree
if !ok {
p = new(pp)
}
- p.fmt.init(&p.buf);
- return p;
+ p.fmt.init(&p.buf)
+ return p
}
// Save used pp structs in ppFree; avoids an allocation per invocation.
@@ -164,13 +164,13 @@ func (p *pp) free() {
if cap(p.buf.Bytes()) > 1024 {
return
}
- p.buf.Reset();
- _ = ppFree <- p;
+ p.buf.Reset()
+ _ = ppFree <- p
}
-func (p *pp) Width() (wid int, ok bool) { return p.fmt.wid, p.fmt.widPresent }
+func (p *pp) Width() (wid int, ok bool) { return p.fmt.wid, p.fmt.widPresent }
-func (p *pp) Precision() (prec int, ok bool) { return p.fmt.prec, p.fmt.precPresent }
+func (p *pp) Precision() (prec int, ok bool) { return p.fmt.prec, p.fmt.precPresent }
func (p *pp) Flag(b int) bool {
switch b {
@@ -185,15 +185,15 @@ func (p *pp) Flag(b int) bool {
case '0':
return p.fmt.zero
}
- return false;
+ return false
}
func (p *pp) add(c int) {
if c < utf8.RuneSelf {
p.buf.WriteByte(byte(c))
} else {
- w := utf8.EncodeRune(c, &p.runeBuf);
- p.buf.Write(p.runeBuf[0:w]);
+ w := utf8.EncodeRune(c, &p.runeBuf)
+ p.buf.Write(p.runeBuf[0:w])
}
}
@@ -207,28 +207,28 @@ func (p *pp) Write(b []byte) (ret int, err os.Error) {
// Fprintf formats according to a format specifier and writes to w.
func Fprintf(w io.Writer, format string, a ...) (n int, error os.Error) {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprintf(format, v);
- n64, error := p.buf.WriteTo(w);
- p.free();
- return int(n64), error;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprintf(format, v)
+ n64, error := p.buf.WriteTo(w)
+ p.free()
+ return int(n64), error
}
// Printf formats according to a format specifier and writes to standard output.
func Printf(format string, v ...) (n int, errno os.Error) {
- n, errno = Fprintf(os.Stdout, format, v);
- return n, errno;
+ n, errno = Fprintf(os.Stdout, format, v)
+ return n, errno
}
// Sprintf formats according to a format specifier and returns the resulting string.
func Sprintf(format string, a ...) string {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprintf(format, v);
- s := p.buf.String();
- p.free();
- return s;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprintf(format, v)
+ s := p.buf.String()
+ p.free()
+ return s
}
// These routines do not take a format string
@@ -236,30 +236,30 @@ func Sprintf(format string, a ...) string {
// Fprint formats using the default formats for its operands and writes to w.
// Spaces are added between operands when neither is a string.
func Fprint(w io.Writer, a ...) (n int, error os.Error) {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprint(v, false, false);
- n64, error := p.buf.WriteTo(w);
- p.free();
- return int(n64), error;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprint(v, false, false)
+ n64, error := p.buf.WriteTo(w)
+ p.free()
+ return int(n64), error
}
// Print formats using the default formats for its operands and writes to standard output.
// Spaces are added between operands when neither is a string.
func Print(v ...) (n int, errno os.Error) {
- n, errno = Fprint(os.Stdout, v);
- return n, errno;
+ n, errno = Fprint(os.Stdout, v)
+ return n, errno
}
// Sprint formats using the default formats for its operands and returns the resulting string.
// Spaces are added between operands when neither is a string.
func Sprint(a ...) string {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprint(v, false, false);
- s := p.buf.String();
- p.free();
- return s;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprint(v, false, false)
+ s := p.buf.String()
+ p.free()
+ return s
}
// These routines end in 'ln', do not take a format string,
@@ -269,30 +269,30 @@ func Sprint(a ...) string {
// Fprintln formats using the default formats for its operands and writes to w.
// Spaces are always added between operands and a newline is appended.
func Fprintln(w io.Writer, a ...) (n int, error os.Error) {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprint(v, true, true);
- n64, error := p.buf.WriteTo(w);
- p.free();
- return int(n64), error;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprint(v, true, true)
+ n64, error := p.buf.WriteTo(w)
+ p.free()
+ return int(n64), error
}
// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
func Println(v ...) (n int, errno os.Error) {
- n, errno = Fprintln(os.Stdout, v);
- return n, errno;
+ n, errno = Fprintln(os.Stdout, v)
+ return n, errno
}
// Sprintln formats using the default formats for its operands and returns the resulting string.
// Spaces are always added between operands and a newline is appended.
func Sprintln(a ...) string {
- v := reflect.NewValue(a).(*reflect.StructValue);
- p := newPrinter();
- p.doprint(v, true, true);
- s := p.buf.String();
- p.free();
- return s;
+ v := reflect.NewValue(a).(*reflect.StructValue)
+ p := newPrinter()
+ p.doprint(v, true, true)
+ s := p.buf.String()
+ p.free()
+ return s
}
@@ -300,13 +300,13 @@ func Sprintln(a ...) string {
// If the arg itself is an interface, return a value for
// the thing inside the interface, not the interface itself.
func getField(v *reflect.StructValue, i int) reflect.Value {
- val := v.Field(i);
+ val := v.Field(i)
if i, ok := val.(*reflect.InterfaceValue); ok {
if inter := i.Interface(); inter != nil {
return reflect.NewValue(inter)
}
}
- return val;
+ return val
}
// Getters for the fields of the argument structure.
@@ -315,7 +315,7 @@ func getBool(v reflect.Value) (val bool, ok bool) {
if b, ok := v.(*reflect.BoolValue); ok {
return b.Get(), true
}
- return;
+ return
}
func getInt(v reflect.Value) (val int64, signed, ok bool) {
@@ -343,7 +343,7 @@ func getInt(v reflect.Value) (val int64, signed, ok bool) {
case *reflect.UintptrValue:
return int64(v.Get()), false, true
}
- return;
+ return
}
func getString(v reflect.Value) (val string, ok bool) {
@@ -353,7 +353,7 @@ func getString(v reflect.Value) (val string, ok bool) {
if bytes, ok := v.Interface().([]byte); ok {
return string(bytes), true
}
- return;
+ return
}
func getFloat32(v reflect.Value) (val float32, ok bool) {
@@ -365,7 +365,7 @@ func getFloat32(v reflect.Value) (val float32, ok bool) {
return float32(v.Get()), true
}
}
- return;
+ return
}
func getFloat64(v reflect.Value) (val float64, ok bool) {
@@ -377,7 +377,7 @@ func getFloat64(v reflect.Value) (val float64, ok bool) {
case *reflect.Float64Value:
return float64(v.Get()), true
}
- return;
+ return
}
func getPtr(v reflect.Value) (val uintptr, ok bool) {
@@ -385,7 +385,7 @@ func getPtr(v reflect.Value) (val uintptr, ok bool) {
case *reflect.PtrValue:
return uintptr(v.Get()), true
}
- return;
+ return
}
// Convert ASCII to integer. n is 0 (and got is false) if no number present.
@@ -394,33 +394,33 @@ func parsenum(s string, start, end int) (n int, got bool, newi int) {
if start >= end {
return 0, false, end
}
- isnum := false;
- num := 0;
+ isnum := false
+ num := 0
for '0' <= s[start] && s[start] <= '9' {
- num = num*10 + int(s[start]-'0');
- start++;
- isnum = true;
+ num = num*10 + int(s[start]-'0')
+ start++
+ isnum = true
}
- return num, isnum, start;
+ return num, isnum, start
}
type uintptrGetter interface {
- Get() uintptr;
+ Get() uintptr
}
func (p *pp) printField(field reflect.Value, plus, sharp bool, depth int) (was_string bool) {
- inter := field.Interface();
+ inter := field.Interface()
if inter != nil {
switch {
default:
if stringer, ok := inter.(Stringer); ok {
- p.buf.WriteString(stringer.String());
- return false; // this value is not a string
+ p.buf.WriteString(stringer.String())
+ return false // this value is not a string
}
case sharp:
if stringer, ok := inter.(GoStringer); ok {
- p.buf.WriteString(stringer.GoString());
- return false; // this value is not a string
+ p.buf.WriteString(stringer.GoString())
+ return false // this value is not a string
}
}
}
@@ -442,17 +442,17 @@ BigSwitch:
if sharp {
p.fmt.fmt_q(f.Get())
} else {
- p.fmt.fmt_s(f.Get());
- was_string = true;
+ p.fmt.fmt_s(f.Get())
+ was_string = true
}
case *reflect.MapValue:
if sharp {
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte('{');
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte('{')
} else {
p.buf.Write(mapBytes)
}
- keys := f.Keys();
+ keys := f.Keys()
for i, key := range keys {
if i > 0 {
if sharp {
@@ -461,9 +461,9 @@ BigSwitch:
p.buf.WriteByte(' ')
}
}
- p.printField(key, plus, sharp, depth+1);
- p.buf.WriteByte(':');
- p.printField(f.Elem(key), plus, sharp, depth+1);
+ p.printField(key, plus, sharp, depth+1)
+ p.buf.WriteByte(':')
+ p.printField(f.Elem(key), plus, sharp, depth+1)
}
if sharp {
p.buf.WriteByte('}')
@@ -474,10 +474,10 @@ BigSwitch:
if sharp {
p.buf.WriteString(field.Type().String())
}
- p.add('{');
- v := f;
- t := v.Type().(*reflect.StructType);
- p.fmt.clearflags(); // clear flags for p.printField
+ p.add('{')
+ v := f
+ t := v.Type().(*reflect.StructType)
+ p.fmt.clearflags() // clear flags for p.printField
for i := 0; i < v.NumField(); i++ {
if i > 0 {
if sharp {
@@ -488,19 +488,19 @@ BigSwitch:
}
if plus || sharp {
if f := t.Field(i); f.Name != "" {
- p.buf.WriteString(f.Name);
- p.buf.WriteByte(':');
+ p.buf.WriteString(f.Name)
+ p.buf.WriteByte(':')
}
}
- p.printField(getField(v, i), plus, sharp, depth+1);
+ p.printField(getField(v, i), plus, sharp, depth+1)
}
- p.buf.WriteByte('}');
+ p.buf.WriteByte('}')
case *reflect.InterfaceValue:
- value := f.Elem();
+ value := f.Elem()
if value == nil {
if sharp {
- p.buf.WriteString(field.Type().String());
- p.buf.Write(nilParenBytes);
+ p.buf.WriteString(field.Type().String())
+ p.buf.Write(nilParenBytes)
} else {
p.buf.Write(nilAngleBytes)
}
@@ -509,8 +509,8 @@ BigSwitch:
}
case reflect.ArrayOrSliceValue:
if sharp {
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte('{');
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte('{')
} else {
p.buf.WriteByte('[')
}
@@ -522,7 +522,7 @@ BigSwitch:
p.buf.WriteByte(' ')
}
}
- p.printField(f.Elem(i), plus, sharp, depth+1);
+ p.printField(f.Elem(i), plus, sharp, depth+1)
}
if sharp {
p.buf.WriteByte('}')
@@ -530,99 +530,99 @@ BigSwitch:
p.buf.WriteByte(']')
}
case *reflect.PtrValue:
- v := f.Get();
+ v := f.Get()
// pointer to array or slice or struct? ok at top level
// but not embedded (avoid loops)
if v != 0 && depth == 0 {
switch a := f.Elem().(type) {
case reflect.ArrayOrSliceValue:
- p.buf.WriteByte('&');
- p.printField(a, plus, sharp, depth+1);
- break BigSwitch;
+ p.buf.WriteByte('&')
+ p.printField(a, plus, sharp, depth+1)
+ break BigSwitch
case *reflect.StructValue:
- p.buf.WriteByte('&');
- p.printField(a, plus, sharp, depth+1);
- break BigSwitch;
+ p.buf.WriteByte('&')
+ p.printField(a, plus, sharp, depth+1)
+ break BigSwitch
}
}
if sharp {
- p.buf.WriteByte('(');
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte(')');
- p.buf.WriteByte('(');
+ p.buf.WriteByte('(')
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte(')')
+ p.buf.WriteByte('(')
if v == 0 {
p.buf.Write(nilBytes)
} else {
- p.fmt.sharp = true;
- p.fmt.fmt_ux64(uint64(v));
+ p.fmt.sharp = true
+ p.fmt.fmt_ux64(uint64(v))
}
- p.buf.WriteByte(')');
- break;
+ p.buf.WriteByte(')')
+ break
}
if v == 0 {
- p.buf.Write(nilAngleBytes);
- break;
+ p.buf.Write(nilAngleBytes)
+ break
}
- p.fmt.sharp = true; // turn 0x on
- p.fmt.fmt_ux64(uint64(v));
+ p.fmt.sharp = true // turn 0x on
+ p.fmt.fmt_ux64(uint64(v))
case uintptrGetter:
- v := f.Get();
+ v := f.Get()
if sharp {
- p.buf.WriteByte('(');
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte(')');
- p.buf.WriteByte('(');
+ p.buf.WriteByte('(')
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte(')')
+ p.buf.WriteByte('(')
if v == 0 {
p.buf.Write(nilBytes)
} else {
- p.fmt.sharp = true;
- p.fmt.fmt_ux64(uint64(v));
+ p.fmt.sharp = true
+ p.fmt.fmt_ux64(uint64(v))
}
- p.buf.WriteByte(')');
+ p.buf.WriteByte(')')
} else {
- p.fmt.sharp = true; // turn 0x on
- p.fmt.fmt_ux64(uint64(f.Get()));
+ p.fmt.sharp = true // turn 0x on
+ p.fmt.fmt_ux64(uint64(f.Get()))
}
default:
- v, signed, ok := getInt(field);
+ v, signed, ok := getInt(field)
if ok {
if signed {
p.fmt.fmt_d64(v)
} else {
if sharp {
- p.fmt.sharp = true; // turn on 0x
- p.fmt.fmt_ux64(uint64(v));
+ p.fmt.sharp = true // turn on 0x
+ p.fmt.fmt_ux64(uint64(v))
} else {
p.fmt.fmt_ud64(uint64(v))
}
}
- break;
+ break
}
- p.buf.WriteByte('?');
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte('?');
+ p.buf.WriteByte('?')
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte('?')
}
- return was_string;
+ return was_string
}
func (p *pp) doprintf(format string, v *reflect.StructValue) {
- end := len(format) - 1;
- fieldnum := 0; // we process one field per non-trivial format
+ end := len(format) - 1
+ fieldnum := 0 // we process one field per non-trivial format
for i := 0; i <= end; {
- c, w := utf8.DecodeRuneInString(format[i:]);
+ c, w := utf8.DecodeRuneInString(format[i:])
if c != '%' || i == end {
if w == 1 {
p.buf.WriteByte(byte(c))
} else {
p.buf.WriteString(format[i : i+w])
}
- i += w;
- continue;
+ i += w
+ continue
}
- i++;
+ i++
// flags and widths
- p.fmt.clearflags();
- F: for ; i < end; i++ {
+ p.fmt.clearflags()
+ F: for ; i < end; i++ {
switch format[i] {
case '#':
p.fmt.sharp = true
@@ -639,34 +639,34 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
}
}
// do we have 20 (width)?
- p.fmt.wid, p.fmt.widPresent, i = parsenum(format, i, end);
+ p.fmt.wid, p.fmt.widPresent, i = parsenum(format, i, end)
// do we have .20 (precision)?
if i < end && format[i] == '.' {
p.fmt.prec, p.fmt.precPresent, i = parsenum(format, i+1, end)
}
- c, w = utf8.DecodeRuneInString(format[i:]);
- i += w;
+ c, w = utf8.DecodeRuneInString(format[i:])
+ i += w
// percent is special - absorbs no operand
if c == '%' {
- p.buf.WriteByte('%'); // TODO: should we bother with width & prec?
- continue;
+ p.buf.WriteByte('%') // TODO: should we bother with width & prec?
+ continue
}
- if fieldnum >= v.NumField() { // out of operands
- p.buf.WriteByte('%');
- p.add(c);
- p.buf.Write(missingBytes);
- continue;
+ if fieldnum >= v.NumField() { // out of operands
+ p.buf.WriteByte('%')
+ p.add(c)
+ p.buf.Write(missingBytes)
+ continue
}
- field := getField(v, fieldnum);
- fieldnum++;
+ field := getField(v, fieldnum)
+ fieldnum++
// Try formatter except for %T,
// which is special and handled internally.
- inter := field.Interface();
+ inter := field.Interface()
if inter != nil && c != 'T' {
if formatter, ok := inter.(Formatter); ok {
- formatter.Format(p, c);
- continue;
+ formatter.Format(p, c)
+ continue
}
}
@@ -686,7 +686,7 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
// int
case 'b':
if v, _, ok := getInt(field); ok {
- p.fmt.fmt_b64(uint64(v)) // always unsigned
+ p.fmt.fmt_b64(uint64(v)) // always unsigned
} else if v, ok := getFloat32(field); ok {
p.fmt.fmt_fb32(v)
} else if v, ok := getFloat64(field); ok {
@@ -792,8 +792,8 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
if inter != nil {
// if object implements String, use the result.
if stringer, ok := inter.(Stringer); ok {
- p.fmt.fmt_s(stringer.String());
- break;
+ p.fmt.fmt_s(stringer.String())
+ break
}
}
if v, ok := getString(field); ok {
@@ -814,8 +814,8 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
if v == 0 {
p.buf.Write(nilAngleBytes)
} else {
- p.fmt.fmt_s("0x");
- p.fmt.fmt_uX64(uint64(v));
+ p.fmt.fmt_s("0x")
+ p.fmt.fmt_uX64(uint64(v))
}
} else {
goto badtype
@@ -823,10 +823,10 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
// arbitrary value; do your best
case 'v':
- plus, sharp := p.fmt.plus, p.fmt.sharp;
- p.fmt.plus = false;
- p.fmt.sharp = false;
- p.printField(field, plus, sharp, 0);
+ plus, sharp := p.fmt.plus, p.fmt.sharp
+ p.fmt.plus = false
+ p.fmt.sharp = false
+ p.printField(field, plus, sharp, 0)
// the value's type
case 'T':
@@ -834,42 +834,42 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
default:
badtype:
- p.buf.WriteByte('%');
- p.add(c);
- p.buf.WriteByte('(');
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte('=');
- p.printField(field, false, false, 0);
- p.buf.WriteByte(')');
+ p.buf.WriteByte('%')
+ p.add(c)
+ p.buf.WriteByte('(')
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte('=')
+ p.printField(field, false, false, 0)
+ p.buf.WriteByte(')')
}
}
if fieldnum < v.NumField() {
- p.buf.Write(extraBytes);
+ p.buf.Write(extraBytes)
for ; fieldnum < v.NumField(); fieldnum++ {
- field := getField(v, fieldnum);
- p.buf.WriteString(field.Type().String());
- p.buf.WriteByte('=');
- p.printField(field, false, false, 0);
+ field := getField(v, fieldnum)
+ p.buf.WriteString(field.Type().String())
+ p.buf.WriteByte('=')
+ p.printField(field, false, false, 0)
if fieldnum+1 < v.NumField() {
p.buf.Write(commaSpaceBytes)
}
}
- p.buf.WriteByte(')');
+ p.buf.WriteByte(')')
}
}
func (p *pp) doprint(v *reflect.StructValue, addspace, addnewline bool) {
- prev_string := false;
+ prev_string := false
for fieldnum := 0; fieldnum < v.NumField(); fieldnum++ {
// always add spaces if we're doing println
- field := getField(v, fieldnum);
+ field := getField(v, fieldnum)
if fieldnum > 0 {
- _, is_string := field.(*reflect.StringValue);
+ _, is_string := field.(*reflect.StringValue)
if addspace || !is_string && !prev_string {
p.buf.WriteByte(' ')
}
}
- prev_string = p.printField(field, false, false, 0);
+ prev_string = p.printField(field, false, false, 0)
}
if addnewline {
p.buf.WriteByte('\n')