/// <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); }
/// <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); }
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); }