Permalink
Browse files

Finished adding support for converting CodedTokenTypes + TableIds int…

…o the correct tag values for encoding coded tokens
  • Loading branch information...
1 parent f2e0835 commit e2f2a7c119c60e7f2809eb99e988a92f40d54fb3 @philiplaureano philiplaureano committed Nov 28, 2011
@@ -65,8 +65,8 @@ namespace Tao
this[CodedTokenType.HasSemantics][1] = TableId.Property;
this[CodedTokenType.Implementation][0] = TableId.File;
- this[CodedTokenType.Implementation][2] = TableId.AssemblyRef;
- this[CodedTokenType.Implementation][3] = TableId.ExportedType;
+ this[CodedTokenType.Implementation][1] = TableId.AssemblyRef;
+ this[CodedTokenType.Implementation][2] = TableId.ExportedType;
this[CodedTokenType.MemberForwarded][0] = TableId.Field;
this[CodedTokenType.MemberForwarded][1] = TableId.MethodDef;
@@ -14,50 +14,55 @@ namespace Tao
{
public this()
{
- this[CodedTokenType.CustomAttributeType] = Dictionary.[TableId, byte]();
+ this[CodedTokenType.CustomAttributeType] = Dictionary.[TableId, byte]();
this[CodedTokenType.CustomAttributeType][TableId.MethodDef] = 2;
this[CodedTokenType.CustomAttributeType][TableId.MemberRef] = 3;
- this[CodedTokenType.HasConstant] = Dictionary.[TableId, byte]();
- this[CodedTokenType.HasConstant][TableId.Field] = 0;
- this[CodedTokenType.HasConstant][TableId.Param] = 1;
- this[CodedTokenType.HasConstant][TableId.Property] = 2;
+ AddSet(CodedTokenType.HasConstant, TableId.Field, TableId.Param, TableId.Property);
+ AddSet(CodedTokenType.HasCustomAttribute, TableId.MethodDef,
+ TableId.Field,
+ TableId.TypeRef,
+ TableId.TypeDef,
+ TableId.Param,
+ TableId.InterfaceImpl,
+ TableId.MemberRef,
+ TableId.Module,
+ TableId.DeclSecurity,
+ TableId.Property,
+ TableId.Event,
+ TableId.StandAloneSig,
+ TableId.ModuleRef,
+ TableId.TypeSpec,
+ TableId.Assembly,
+ TableId.AssemblyRef,
+ TableId.File,
+ TableId.ExportedType,
+ TableId.ManifestResource);
- this[CodedTokenType.HasCustomAttribute] = System.Collections.Generic.Dictionary.[TableId, byte]()<-
- [
- (TableId.MethodDef, 0 : byte),
- (TableId.Field, 1 : byte),
- (TableId.TypeRef, 2 : byte),
- (TableId.TypeDef, 3 : byte),
- (TableId.Param, 4 : byte),
- (TableId.InterfaceImpl, 5 : byte),
- (TableId.MemberRef, 6 : byte),
- (TableId.Module, 7 : byte),
- (TableId.DeclSecurity, 8 : byte),
- (TableId.Property, 9 : byte),
- (TableId.Event, 10 : byte),
- (TableId.StandAloneSig, 11 : byte),
- (TableId.ModuleRef, 12 : byte),
- (TableId.TypeSpec, 13 : byte),
- (TableId.Assembly, 14 : byte),
- (TableId.AssemblyRef, 15 : byte),
- (TableId.File, 16 : byte),
- (TableId.ExportedType, 17 : byte),
- (TableId.ManifestResource, 18 : byte)
- ];
-
- this[CodedTokenType.HasDeclSecurity] = System.Collections.Generic.Dictionary.[TableId, byte]()<-
- [
- (TableId.TypeDef, 0 : byte),
- (TableId.MethodDef, 1 : byte),
- (TableId.Assembly, 2 : byte)
- ];
-
- this[CodedTokenType.HasFieldMarshall] = System.Collections.Generic.Dictionary.[TableId, byte]()<-
- [
- (TableId.Field, 0 : byte),
- (TableId.Param, 1 : byte)
- ];
+ AddSet(CodedTokenType.HasDeclSecurity, TableId.TypeDef, TableId.MethodDef, TableId.Assembly);
+ AddSet(CodedTokenType.HasFieldMarshall, TableId.Field, TableId.Param);
+ AddSet(CodedTokenType.HasSemantics, TableId.Event, TableId.Property);
+ AddSet(CodedTokenType.Implementation, TableId.File, TableId.AssemblyRef, TableId.ExportedType);
+ AddSet(CodedTokenType.MemberForwarded, TableId.Field, TableId.MethodDef);
+ AddSet(CodedTokenType.MemberRefParent, TableId.TypeRef, TableId.ModuleRef, TableId.MethodDef, TableId.TypeSpec);
+ AddSet(CodedTokenType.MethodDefOrRef, TableId.MethodDef, TableId.MemberRef);
+ AddSet(CodedTokenType.ResolutionScope, TableId.Module, TableId.ModuleRef, TableId.AssemblyRef, TableId.TypeRef);
+ AddSet(CodedTokenType.TypeDefOrTypeRef, TableId.TypeDef, TableId.TypeRef, TableId.TypeSpec);
+ AddSet(CodedTokenType.TypeOrMethodDef, TableId.TypeDef, TableId.MethodDef);
+ }
+ private AddSet(tokenType : CodedTokenType, params tableIds : array[TableId]) : void
+ {
+ mutable index : byte = 0;
+ foreach(tableId in tableIds)
+ {
+ unless(this.ContainsKey(tokenType))
+ {
+ this[tokenType] = System.Collections.Generic.Dictionary.[TableId, byte]();
+ }
+
+ this[tokenType][tableId] = index;
+ index++;
+ }
}
}
}
@@ -220,12 +220,12 @@ namespace Tests
public ShouldBeAbleToGiveCorrectTableIdFromCodedTokenId_Implementation_And_RowAndTagFrom_AssemblyRef() : void
{
- Test(CodedTokenType.Implementation, 2, TableId.AssemblyRef);
+ Test(CodedTokenType.Implementation, 1, TableId.AssemblyRef);
}
public ShouldBeAbleToGiveCorrectTableIdFromCodedTokenId_Implementation_And_RowAndTagFrom_ExportedType() : void
{
- Test(CodedTokenType.Implementation, 3, TableId.ExportedType);
+ Test(CodedTokenType.Implementation, 2, TableId.ExportedType);
}
public ShouldBeAbleToGiveCorrectTableIdFromCodedTokenId_CustomAttributeType_And_RowAndTagFrom_MethodDef() : void
@@ -74,12 +74,67 @@ namespace Tests
{
def values = System.Collections.Generic.Dictionary.[TableId, byte]()<-
[
- (TableId.Field, 0 : byte),
- (TableId.Param, 1 : byte)
+ (TableId.Field, 0 : byte),
+ (TableId.Param, 1 : byte)
];
ShouldHaveExpectedTagValues(CodedTokenType.HasFieldMarshall, values);
}
+ public ShouldBeAbleToMapHasSemanticsTokenValues() : void
+ {
+ def values = System.Collections.Generic.Dictionary.[TableId, byte]()<-
+ [
+ (TableId.Event, 0 : byte),
+ (TableId.Property, 1 : byte)
+ ];
+ ShouldHaveExpectedTagValues(CodedTokenType.HasSemantics, values);
+ }
+ public ShouldBeAbleToMapImplementationTokenValues() : void
+ {
+ def values = System.Collections.Generic.Dictionary.[TableId, byte]()<-
+ [
+ (TableId.File, 0 : byte),
+ (TableId.AssemblyRef, 1 : byte),
+ (TableId.ExportedType, 2 : byte)
+ ];
+ ShouldHaveExpectedTagValues(CodedTokenType.Implementation, values);
+ }
+ public ShouldBeAbleToMapMemberForwardedTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.MemberForwarded, TableId.Field, TableId.MethodDef);
+ }
+ public ShouldBeAbleToMapMemberRefParentTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.MemberRefParent, TableId.TypeRef, TableId.ModuleRef, TableId.MethodDef, TableId.TypeSpec);
+ }
+ public ShouldBeAbleToMapMethodDefOrRefTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.MethodDefOrRef, TableId.MethodDef, TableId.MemberRef);
+ }
+ public ShouldBeAbleToMapResolutionScopeTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.ResolutionScope, TableId.Module, TableId.ModuleRef, TableId.AssemblyRef, TableId.TypeRef);
+ }
+ public ShouldBeAbleToMapTypeDefOrTypeRefTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.TypeDefOrTypeRef, TableId.TypeDef, TableId.TypeRef, TableId.TypeSpec);
+ }
+ public ShouldBeAbleToMapTypeOrMethodDefTokenValues() : void
+ {
+ ShouldHaveExpectedTagValues(CodedTokenType.TypeOrMethodDef, TableId.TypeDef, TableId.MethodDef);
+ }
+ private ShouldHaveExpectedTagValues(tokenType : CodedTokenType, params tableIds : array[TableId]) : void
+ {
+ def values = System.Collections.Generic.Dictionary.[TableId, byte]();
+ mutable index : byte = 0;
+ foreach(tableId in tableIds)
+ {
+ values[tableId] = index;
+ index++;
+ }
+
+ ShouldHaveExpectedTagValues(tokenType, values);
+ }
private ShouldHaveExpectedTagValues(tokenType : CodedTokenType, values : IDictionary.[TableId, byte]) : void
{
def shouldHaveExpectedValue = BindShouldHaveExpectedTagValue(tokenType);
@@ -124,7 +124,14 @@ namespace Tests
// Note: There should be one encoding test per CodedTokenType
throw NotImplementedException();
}
-
+ public ShouldBeAbleToEncodeSimpleTokenIntoTableAndRow() : void
+ {
+ throw NotImplementedException();
+ }
+ public ShouldBeAbleToDecodeSimpleTokenIntoTableAndRow() : void
+ {
+ throw NotImplementedException();
+ }
private Test(tokenType : CodedTokenType, tag : byte, expectedTableId : TableId) : void
{
def converter = CodedTokenConverter();

0 comments on commit e2f2a7c

Please sign in to comment.