public ES_TypeInfo( ES_TypeTag typeTag, ES_AccessModifier accessMod, ES_TypeFlag flags, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName ) { TypeTag = typeTag; RuntimeSize = -1; AccessModifier = accessMod; Flags = flags; Name = fullyQualifiedName; SourceUnit = sourceUnit; RefsList = ArrayPointer <nint> .Null; MembersList = new ES_TypeMembers(); }
private void CreateTypes_Aggregate( ref TranslationUnitData transUnit, ES_NamespaceData.Builder namespaceBuilder, ES_TypeTag type, ES_AstAggregateDefinition typeDef ) { var namespaceName = namespaceBuilder.NamespaceData.NamespaceName; var typeName = Environment !.IdPool.GetIdentifier(typeDef.Name.Text.Span); if (namespaceBuilder.CheckTypeExists(typeName, null) != null) { errorList.Add(ES_FrontendErrors.GenTypeAlreadyDefined( namespaceBuilder.NamespaceData.NamespaceNameString, typeDef.Name.Text.Span.GetPooledString(), typeDef.Name )); return; } ES_TypeInfo *typeData = null; if (type == ES_TypeTag.Class) { var classBuilder = namespaceBuilder.GetOrCreateClass(typeDef.AccessModifier, typeName, transUnit.Name); typeData = &classBuilder.ClassData->TypeInfo; } else if (type == ES_TypeTag.Struct) { var structBuilder = namespaceBuilder.GetOrCreateStruct(typeDef.AccessModifier, typeName, transUnit.Name); typeData = &structBuilder.StructData->TypeInfo; } else { Debug.Fail("Not implemented/supported."); } EnvironmentBuilder !.PointerAstMap.Add((IntPtr)typeData, typeDef); }
private Pointer <ES_TypeInfo> GenerateBuiltinTypes_Simple(ReadOnlySpan <char> name, ES_TypeTag tag, int runtimeSize) { var voidDataPtr = EnvironmentBuilder !.MemoryManager.GetMemory <ES_TypeInfo> (); var namePtr = Environment !.IdPool.GetIdentifier(name); var fqn = new ES_FullyQualifiedName(Environment.GlobalTypesNamespace, namePtr); *voidDataPtr = new ES_TypeInfo(tag, ES_AccessModifier.Public, ES_TypeFlag.NoRefs | ES_TypeFlag.NoNew, ArrayPointer <byte> .Null, fqn); voidDataPtr->RuntimeSize = runtimeSize; return(new Pointer <ES_TypeInfo> (voidDataPtr)); }