Example #1
0
        public StringConstructor(List<Expression>/*!*/ parts, StringKind kind, SourceSpan location) 
            : base(location) {
            ContractUtils.RequiresNotNullItems(parts, "parts");

            _parts = parts;
            _kind = kind;
        }
Example #2
0
        public StringConstructor(List <Expression> /*!*/ parts, StringKind kind, SourceSpan location)
            : base(location)
        {
            ContractUtils.RequiresNotNullItems(parts, "parts");

            _parts = parts;
            _kind  = kind;
        }
Example #3
0
 /// <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);
            }
        }