a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
80 lines
2.0 KiB
C#
80 lines
2.0 KiB
C#
//-----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Microsoft.Cci.Pdb {
|
|
internal class PdbConstant {
|
|
internal string name;
|
|
internal uint token;
|
|
internal object value;
|
|
|
|
internal PdbConstant(BitAccess bits) {
|
|
bits.ReadUInt32(out this.token);
|
|
byte tag1;
|
|
bits.ReadUInt8(out tag1);
|
|
byte tag2;
|
|
bits.ReadUInt8(out tag2);
|
|
if (tag2 == 0) {
|
|
this.value = tag1;
|
|
} else if (tag2 == 0x80) {
|
|
switch (tag1) {
|
|
case 0x01: //short
|
|
short s;
|
|
bits.ReadInt16(out s);
|
|
this.value = s;
|
|
break;
|
|
case 0x02: //ushort
|
|
ushort us;
|
|
bits.ReadUInt16(out us);
|
|
this.value = us;
|
|
break;
|
|
case 0x03: //int
|
|
int i;
|
|
bits.ReadInt32(out i);
|
|
this.value = i;
|
|
break;
|
|
case 0x04: //uint
|
|
uint ui;
|
|
bits.ReadUInt32(out ui);
|
|
this.value = ui;
|
|
break;
|
|
case 0x05: //float
|
|
this.value = bits.ReadFloat();
|
|
break;
|
|
case 0x06: //double
|
|
this.value = bits.ReadDouble();
|
|
break;
|
|
case 0x09: //long
|
|
long sl;
|
|
bits.ReadInt64(out sl);
|
|
this.value = sl;
|
|
break;
|
|
case 0x0a: //ulong
|
|
ulong ul;
|
|
bits.ReadUInt64(out ul);
|
|
this.value = ul;
|
|
break;
|
|
case 0x10: //string
|
|
string str;
|
|
bits.ReadBString(out str);
|
|
this.value = str;
|
|
break;
|
|
case 0x19: //decimal
|
|
this.value = bits.ReadDecimal();
|
|
break;
|
|
default:
|
|
//TODO: error
|
|
break;
|
|
}
|
|
} else {
|
|
//TODO: error
|
|
}
|
|
bits.ReadCString(out name);
|
|
}
|
|
}
|
|
}
|