// Copyright 2009 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Constants

package dwarf

import "strconv"

// An Attr identifies the attribute type in a DWARF Entry's Field.
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;
)

var attrNames = [...]string {
	AttrSibling: "Sibling",
	AttrLocation: "Location",
	AttrName: "Name",
	AttrOrdering: "Ordering",
	AttrByteSize: "ByteSize",
	AttrBitOffset: "BitOffset",
	AttrBitSize: "BitSize",
	AttrStmtList: "StmtList",
	AttrLowpc: "Lowpc",
	AttrHighpc: "Highpc",
	AttrLanguage: "Language",
	AttrDiscr: "Discr",
	AttrDiscrValue: "DiscrValue",
	AttrVisibility: "Visibility",
	AttrImport: "Import",
	AttrStringLength: "StringLength",
	AttrCommonRef: "CommonRef",
	AttrCompDir: "CompDir",
	AttrConstValue: "ConstValue",
	AttrContainingType: "ContainingType",
	AttrDefaultValue: "DefaultValue",
	AttrInline: "Inline",
	AttrIsOptional: "IsOptional",
	AttrLowerBound: "LowerBound",
	AttrProducer: "Producer",
	AttrPrototyped: "Prototyped",
	AttrReturnAddr: "ReturnAddr",
	AttrStartScope: "StartScope",
	AttrStrideSize: "StrideSize",
	AttrUpperBound: "UpperBound",
	AttrAbstractOrigin: "AbstractOrigin",
	AttrAccessibility: "Accessibility",
	AttrAddrClass: "AddrClass",
	AttrArtificial: "Artificial",
	AttrBaseTypes: "BaseTypes",
	AttrCalling: "Calling",
	AttrCount: "Count",
	AttrDataMemberLoc: "DataMemberLoc",
	AttrDeclColumn: "DeclColumn",
	AttrDeclFile: "DeclFile",
	AttrDeclLine: "DeclLine",
	AttrDeclaration: "Declaration",
	AttrDiscrList: "DiscrList",
	AttrEncoding: "Encoding",
	AttrExternal: "External",
	AttrFrameBase: "FrameBase",
	AttrFriend: "Friend",
	AttrIdentifierCase: "IdentifierCase",
	AttrMacroInfo: "MacroInfo",
	AttrNamelistItem: "NamelistItem",
	AttrPriority: "Priority",
	AttrSegment: "Segment",
	AttrSpecification: "Specification",
	AttrStaticLink: "StaticLink",
	AttrType: "Type",
	AttrUseLocation: "UseLocation",
	AttrVarParam: "VarParam",
	AttrVirtuality: "Virtuality",
	AttrVtableElemLoc: "VtableElemLoc",
	AttrAllocated: "Allocated",
	AttrAssociated: "Associated",
	AttrDataLocation: "DataLocation",
	AttrStride: "Stride",
	AttrEntrypc: "Entrypc",
	AttrUseUTF8: "UseUTF8",
	AttrExtension: "Extension",
	AttrRanges: "Ranges",
	AttrTrampoline: "Trampoline",
	AttrCallColumn: "CallColumn",
	AttrCallFile: "CallFile",
	AttrCallLine: "CallLine",
	AttrDescription: "Description",
}

func (a Attr) String() string {
	if int(a) < len(attrNames) {
		s := attrNames[a];
		if s != "" {
			return s;
		}
	}
	return strconv.Itoa(int(a));
}

func (a Attr) GoString() string {
	if int(a) < len(attrNames) {
		s := attrNames[a];
		if s != "" {
			return "dwarf.Attr" + s;
		}
	}
	return "dwarf.Attr(" + strconv.Itoa64(int64(a)) + ")";
}

// A format is a DWARF data encoding format.
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;
)

// 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;
)

var tagNames = [...]string {
	TagArrayType: "ArrayType",
	TagClassType: "ClassType",
	TagEntryPoint: "EntryPoint",
	TagEnumerationType: "EnumerationType",
	TagFormalParameter: "FormalParameter",
	TagImportedDeclaration: "ImportedDeclaration",
	TagLabel: "Label",
	TagLexDwarfBlock: "LexDwarfBlock",
	TagMember: "Member",
	TagPointerType: "PointerType",
	TagReferenceType: "ReferenceType",
	TagCompileUnit: "CompileUnit",
	TagStringType: "StringType",
	TagStructType: "StructType",
	TagSubroutineType: "SubroutineType",
	TagTypedef: "Typedef",
	TagUnionType: "UnionType",
	TagUnspecifiedParameters: "UnspecifiedParameters",
	TagVariant: "Variant",
	TagCommonDwarfBlock: "CommonDwarfBlock",
	TagCommonInclusion: "CommonInclusion",
	TagInheritance: "Inheritance",
	TagInlinedSubroutine: "InlinedSubroutine",
	TagModule: "Module",
	TagPtrToMemberType: "PtrToMemberType",
	TagSetType: "SetType",
	TagSubrangeType: "SubrangeType",
	TagWithStmt: "WithStmt",
	TagAccessDeclaration: "AccessDeclaration",
	TagBaseType: "BaseType",
	TagCatchDwarfBlock: "CatchDwarfBlock",
	TagConstType: "ConstType",
	TagConstant: "Constant",
	TagEnumerator: "Enumerator",
	TagFileType: "FileType",
	TagFriend: "Friend",
	TagNamelist: "Namelist",
	TagNamelistItem: "NamelistItem",
	TagPackedType: "PackedType",
	TagSubprogram: "Subprogram",
	TagTemplateTypeParameter: "TemplateTypeParameter",
	TagTemplateValueParameter: "TemplateValueParameter",
	TagThrownType: "ThrownType",
	TagTryDwarfBlock: "TryDwarfBlock",
	TagVariantPart: "VariantPart",
	TagVariable: "Variable",
	TagVolatileType: "VolatileType",
	TagDwarfProcedure: "DwarfProcedure",
	TagRestrictType: "RestrictType",
	TagInterfaceType: "InterfaceType",
	TagNamespace: "Namespace",
	TagImportedModule: "ImportedModule",
	TagUnspecifiedType: "UnspecifiedType",
	TagPartialUnit: "PartialUnit",
	TagImportedUnit: "ImportedUnit",
	TagMutableType: "MutableType",
}

func (t Tag) String() string {
	if int(t) < len(tagNames) {
		s := tagNames[t];
		if s != "" {
			return s;
		}
	}
	return strconv.Itoa(int(t));
}

func (t Tag) GoString() string {
	if int(t) < len(tagNames) {
		s := tagNames[t];
		if s != "" {
			return "dwarf.Tag" + s;
		}
	}
	return "dwarf.Tag(" + strconv.Itoa64(int64(t)) + ")";
}

// Location expression operators.
// The debug info encodes value locations like 8(R3)
// as a sequence of these op codes.
// 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;
		/* OpLitN = OpLit0 + N for N = 0..31 */
	opReg0 = 0x50;
		/* OpRegN = OpReg0 + N for N = 0..31 */
	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;
	/* 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 */
	/* 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;
)
