Пример #1
0
        public ES_ClassData.Builder GetOrCreateClass(ES_AccessModifier accessMod,
                                                     ArrayPointer <byte> name, ArrayPointer <byte> sourceUnit
                                                     )
        {
            CheckDisposed();

            if (CheckTypeExists(name, ES_TypeTag.Class) != null)
            {
                throw new CompilationException(ES_FrontendErrors.ClashingTypeExists);
            }

            if (ClassBuilders.TryGetValue(name, out var builder))
            {
                return(builder);
            }

            var classDataPtr = envBuilder.MemoryManager.GetMemory <ES_ClassData> ();

            builder = new ES_ClassData.Builder(classDataPtr, accessMod, new ES_FullyQualifiedName(NamespaceName, name), sourceUnit);
            ClassBuilders.Add(name, builder);
            NamespaceData.types.Add(&classDataPtr->TypeInfo);

            var unknType = NamespaceData.environment.TypeUnknownValue;

            builder.BaseClass      = (ES_ClassData *)unknType;
            builder.InterfacesList = ArrayPointer <Pointer <ES_InterfaceData> > .Null;

            return(builder);
        }
        public IGeneratedTypeBuilder WithClass(string name)
        {
            var generatedClassBuilder = new GeneratedClassBuilder(this, name);

            ClassBuilders.Add(generatedClassBuilder);

            return(generatedClassBuilder);
        }
Пример #3
0
        public ES_ClassData.Builder?GetClass(ArrayPointer <byte> name)
        {
            CheckDisposed();

            if (ClassBuilders.TryGetValue(name, out var builder))
            {
                return(builder);
            }

            return(null);
        }
Пример #4
0
        protected virtual void DoDispose()
        {
            if (disposedValue)
            {
                return;
            }

            ClassBuilders?.Dispose();
            StructBuilders?.Dispose();
            EnumBuilders?.Dispose();

            disposedValue = true;
        }
Пример #5
0
        public ES_TypeTag?CheckTypeExists(ArrayPointer <byte> name, ES_TypeTag?ignoredType)
        {
            if (ignoredType != ES_TypeTag.Class && ClassBuilders.TryGetValue(name, out var _))
            {
                return(ES_TypeTag.Class);
            }

            if (ignoredType != ES_TypeTag.Struct && StructBuilders.TryGetValue(name, out var _))
            {
                return(ES_TypeTag.Struct);
            }

            if (ignoredType != ES_TypeTag.Enum && EnumBuilders.TryGetValue(name, out var _))
            {
                return(ES_TypeTag.Enum);
            }

            if (ignoredType != ES_TypeTag.Function && NamespaceData.functions.TryGetValue(name, out var _))
            {
                return(ES_TypeTag.Function);
            }

            return(null);
        }