Beispiel #1
0
 /// <summary>
 /// Creates a generic parameter from a declaring member
 /// and a name.
 /// </summary>
 /// <param name="parentMember">
 /// The member that declares the generic parameter.
 /// </param>
 /// <param name="name">
 /// The generic parameter's name.
 /// </param>
 public DescribedGenericParameter(
     IGenericMember parentMember,
     SimpleName name)
     : base(name.Qualify(parentMember.FullName))
 {
     this.ParentMember = parentMember;
 }
        public INamespaceBuilder DeclareNamespace(string Name)
        {
            var childName      = new SimpleName(Name);
            var childNamespace = new LLVMNamespace(
                childName, childName.Qualify(FullName), Assembly);

            declaredNamespaces.Add(childNamespace);
            return(childNamespace);
        }
Beispiel #3
0
        /// <summary>
        /// For now, we are putting string in the runtime library
        /// </summary>
        private static ISymbol BuildStringSymbol()
        {
            var typeName = new SimpleName("String");
            var stringLiteralOperator = Symbol.New(typeName.Qualify(SpecialName.OperatorStringLiteral));
            var symbols = new List <ISymbol>()
            {
                // Making these fields for now
                Symbol.New(typeName.Qualify("bytes"), DataType.BytePointer),
                Symbol.New(typeName.Qualify("byte_count"), DataType.Size),
                stringLiteralOperator
            };

            var stringSymbol = Symbol.NewType(typeName, symbols);
            var stringType   = new ObjectType(stringSymbol, false, Lifetime.None);

            stringSymbol.Type          = new Metatype(stringType);
            stringLiteralOperator.Type = new FunctionType(new DataType[] { DataType.Size, DataType.BytePointer }, stringType);
            return(stringSymbol);
        }
Beispiel #4
0
        private (Name, TextSpan) ParseNamespaceName()
        {
            var  nameSegment = Tokens.RequiredToken <IIdentifierToken>();
            var  span        = nameSegment.Span;
            Name name        = new SimpleName(nameSegment.Value);

            while (Tokens.Accept <IDotToken>())
            {
                TextSpan segmentSpan;
                (segmentSpan, nameSegment) = Tokens.ExpectIdentifier();
                // We need the span to cover a trailing dot
                span = TextSpan.Covering(span, segmentSpan);
                if (nameSegment == null)
                {
                    break;
                }
                name = name.Qualify(nameSegment.Value);
            }

            return(name, span);
        }