Example #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);
        }