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

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

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

            var structDataPtr = envBuilder.MemoryManager.GetMemory <ES_StructData> ();

            builder = new ES_StructData.Builder(structDataPtr, accessMod, new ES_FullyQualifiedName(NamespaceName, name), sourceUnit);
            StructBuilders.Add(name, builder);
            NamespaceData.types.Add(&structDataPtr->TypeInfo);

            return(builder);
        }