예제 #1
0
        public static NameReference Create(TypeMutability overrideMutability, IExpression prefix, string name,
                                           IEnumerable <INameReference> arguments, EntityInstance target, bool isLocal)
        {
            var result = new NameReference(overrideMutability, prefix, BrowseMode.None, null, name,
                                           arguments?.Select(it => new TemplateArgument(it)),
                                           ExpressionReadMode.ReadRequired, isRoot: false);

            if (target != null)
            {
                result.Binding.Set(new[] { new BindingMatch(target, isLocal) });
            }
            return(result);
        }
예제 #2
0
 public static bool TryGetSingleType(this INameReference @this, out NameReference nameReference, out EntityInstance typeInstance)
 {
     nameReference = @this as NameReference;
     if (nameReference == null)
     {
         typeInstance = null;
         return(false);
     }
     else
     {
         typeInstance = nameReference.Evaluation.Components.Cast <EntityInstance>();
         return(true);
     }
 }
예제 #3
0
        public void SetConstraint(TemplateConstraint constraint)
        {
            if (this.Constraint != null)
            {
                throw new InvalidOperationException();
            }

            this.Constraint = constraint ?? TemplateConstraint.Create(NameReference.Create(this.Name), null, null, null, null);

            this.AssociatedType = TypeDefinition.CreateTypeParameter(this);
            this.InstanceOf     = AssociatedType.GetInstance(overrideMutability: TypeMutability.None, translation: null, lifetime: Lifetime.Timeless);

            this.attachPostConstructor();
        }
예제 #4
0
 public static NameReference Create(params string[] parts)
 {
     if (parts.Length == 0)
     {
         throw new ArgumentException();
     }
     else if (parts.Length == 1)
     {
         return(NameReference.Create(parts.Single()));
     }
     else
     {
         return(NameReference.Create(NameReference.Create(parts.SkipTail(1).ToArray()), parts.Last()));
     }
 }
예제 #5
0
        private TemplateConstraint(
            NameReference name,
            EntityModifier constraintModifier,
            IEnumerable <FunctionDefinition> hasFunctions,
            IEnumerable <NameReference> inherits,
            IEnumerable <NameReference> baseOf)
        {
            if (name == null)
            {
                throw new ArgumentNullException();
            }

            this.Name          = name;
            this.Modifier      = constraintModifier ?? EntityModifier.None;
            this.HasFunctions  = (hasFunctions ?? Enumerable.Empty <FunctionDefinition>()).StoreReadOnly();
            this.InheritsNames = (inherits ?? Enumerable.Empty <NameReference>()).StoreReadOnly();
            this.BaseOfNames   = (baseOf ?? Enumerable.Empty <NameReference>()).StoreReadOnly();

            this.attachPostConstructor();
        }
예제 #6
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ReferenceNameReference(string name)
 {
     return(ReferenceNameReference(NameReference.Create(name)));
 }
예제 #7
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ReferenceNameReference(INameReference name)
 {
     return(NameReference.Create(NameReference.Root, NameFactory.ReferenceTypeName, name));
 }
예제 #8
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference PointerNameReference(INameReference name, TypeMutability mutability = TypeMutability.None)
 {
     return(NameReference.Create(mutability, NameReference.Root, NameFactory.PointerTypeName, name));
 }
예제 #9
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference RegexNameReference()
 {
     return(NameReference.Create(TextNamespaceReference(), NameFactory.RegexTypeName));
 }
예제 #10
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference CaptureNameReference()
 {
     return(NameReference.Create(TextNamespaceReference(), NameFactory.CaptureTypeName));
 }
예제 #11
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ExceptionNameReference()
 {
     return(NameReference.Create(SystemNamespaceReference(), NameFactory.ExceptionTypeName));
 }
예제 #12
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ITupleMutableNameReference(params INameReference[] templateParamNames)
 {
     return(NameReference.Create(TypeMutability.ForceMutable, CollectionsNamespaceReference(), ITupleTypeName, templateParamNames));
 }
예제 #13
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ITupleNameReference(params INameReference[] templateParamNames)
 {
     return(NameReference.Create(CollectionsNamespaceReference(), ITupleTypeName, templateParamNames));
 }
예제 #14
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference TupleFactoryReference()
 {
     return(NameReference.Create(CollectionsNamespaceReference(), TupleTypeName));
 }
예제 #15
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ConcatReference()
 {
     return(NameReference.Create(CollectionsNamespaceReference(), ConcatFunctionName));
 }
예제 #16
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference OrderingNameReference()
 {
     return(NameReference.Create(SystemNamespaceReference(), NameFactory.OrderingTypeName));
 }
예제 #17
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference OptionNameReference(LifetimeScope lifetimeScope, INameReference name, TypeMutability mutability = TypeMutability.None)
 {
     return(NameReference.Create(mutability, SystemNamespaceReference(), lifetimeScope, NameFactory.OptionTypeName, name));
 }
예제 #18
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference IObjectNameReference(TypeMutability overrideMutability = TypeMutability.None)
 {
     return(NameReference.Create(overrideMutability, NameReference.Root, IObjectTypeName));
 }
예제 #19
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference TypeInfoPointerNameReference()
 {
     return(PointerNameReference(NameReference.Create(SystemNamespaceReference(), NameFactory.TypeInfoTypeName)));
 }
예제 #20
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference SystemNamespaceReference()
 {
     return(NameReference.Create(NameReference.Root, SystemNamespace));
 }
예제 #21
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference MatchNameReference()
 {
     return(NameReference.Create(TextNamespaceReference(), NameFactory.MatchTypeName));
 }
예제 #22
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference CollectionsNamespaceReference()
 {
     return(NameReference.Create(SystemNamespaceReference(), CollectionsNamespace));
 }
예제 #23
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference Real64NameReference()
 {
     return(NameReference.Create(NameReference.Root, NameFactory.Real64TypeName));
 }
예제 #24
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference IoNamespaceReference()
 {
     return(NameReference.Create(SystemNamespaceReference(), IoNamespace));
 }
예제 #25
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference PointerNameReference(string typeName)
 {
     return(PointerNameReference(NameReference.Create(typeName)));
 }
예제 #26
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ConcurrencyNamespaceReference()
 {
     return(NameReference.Create(SystemNamespaceReference(), ConcurrencyNamespace));
 }
예제 #27
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference ReferenceNameReference(LifetimeScope lifetimeScope, INameReference name)
 {
     return(NameReference.Create(NameReference.Root, lifetimeScope, NameFactory.ReferenceTypeName, name));
 }
예제 #28
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference Utf8StringNameReference(TypeMutability mutability = TypeMutability.None)
 {
     return(NameReference.Create(mutability, SystemNamespaceReference(), NameFactory.Utf8StringTypeName));
 }
예제 #29
0
파일: NameFactory.cs 프로젝트: macias/Skila
 internal static INameReference ShouldBeThisNameReference(string typeName, TypeMutability mutability = TypeMutability.None)
 {
     // todo: Skila1 supported the notion of dynamic "this type", Skila-3 should also have it
     // so once we have time to do it this method will help us fast track all the use cases to replace
     return(NameReference.Create(mutability, typeName));
 }
예제 #30
0
파일: NameFactory.cs 프로젝트: macias/Skila
 public static NameReference IComparableNameReference(TypeMutability mutability = TypeMutability.None)
 {
     return(NameReference.Create(mutability, SystemNamespaceReference(), NameFactory.IComparableTypeName));
 }