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); }
public ES_ClassData.Builder?GetClass(ArrayPointer <byte> name) { CheckDisposed(); if (ClassBuilders.TryGetValue(name, out var builder)) { return(builder); } return(null); }
protected virtual void DoDispose() { if (disposedValue) { return; } ClassBuilders?.Dispose(); StructBuilders?.Dispose(); EnumBuilders?.Dispose(); disposedValue = true; }
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); }