public StringConstructor(List<Expression>/*!*/ parts, StringKind kind, SourceSpan location) : base(location) { ContractUtils.RequiresNotNullItems(parts, "parts"); _parts = parts; _kind = kind; }
public StringConstructor(List <Expression> /*!*/ parts, StringKind kind, SourceSpan location) : base(location) { ContractUtils.RequiresNotNullItems(parts, "parts"); _parts = parts; _kind = kind; }
/// <summary> /// /// </summary> /// <param name="kind"></param> public StringKindAttribute(StringKind kind) { Kind = kind; }
public void HandleKindHidesSpecialStringAndNamespaces() { foreach (uint virtualBit in new[] { 0U, TokenTypeIds.VirtualTokenMask }) { uint invalidStringTypeCount = 0; uint invalidNamespaceTypeCount = 0; for (uint i = 0; i <= sbyte.MaxValue; i++) { Handle handle = new Handle(virtualBit | i << TokenTypeIds.RowIdBitCount); Assert.True(handle.IsNil ^ handle.IsVirtual); Assert.Equal(virtualBit != 0, handle.IsVirtual); Assert.Equal(handle.TokenType, i << TokenTypeIds.RowIdBitCount); switch (i) { // String and namespace have two extra bits to represent their kind that are hidden from the handle type case (uint)HandleKind.String: case (uint)HandleKind.String + 1: case (uint)HandleKind.String + 2: case (uint)HandleKind.String + 3: Assert.Equal(HandleKind.String, handle.Kind); StringKind stringType = (StringKind)(i - (int)HandleKind.String); StringHandle stringHandle; try { stringHandle = (StringHandle)handle; } catch (InvalidCastException) { Assert.True(handle.TokenType > TokenTypeIds.MaxString); invalidStringTypeCount++; break; } Assert.Equal(stringType, stringHandle.StringKind); break; case (uint)HandleKind.NamespaceDefinition: case (uint)HandleKind.NamespaceDefinition + 1: case (uint)HandleKind.NamespaceDefinition + 2: case (uint)HandleKind.NamespaceDefinition + 3: Assert.Equal(HandleKind.NamespaceDefinition, handle.Kind); NamespaceKind namespaceType = (NamespaceKind)(i - (int)HandleKind.NamespaceDefinition); NamespaceDefinitionHandle namespaceHandle; try { namespaceHandle = (NamespaceDefinitionHandle)handle; } catch (InvalidCastException) { Assert.True(handle.TokenType > TokenTypeIds.MaxNamespace); invalidNamespaceTypeCount++; break; } Assert.Equal(namespaceType, namespaceHandle.NamespaceKind); break; // all other types surface token type directly. default: Assert.Equal((uint)handle.Kind, i); break; } } Assert.Equal((uint)((TokenTypeIds.String | TokenTypeIds.StringOrNamespaceKindMask) - TokenTypeIds.MaxString) >> TokenTypeIds.RowIdBitCount, invalidStringTypeCount); Assert.Equal((uint)((TokenTypeIds.Namespace | TokenTypeIds.StringOrNamespaceKindMask) - TokenTypeIds.MaxNamespace) >> TokenTypeIds.RowIdBitCount, invalidNamespaceTypeCount); } }