Пример #1
0
    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();
    }
Пример #2
0
    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);
    }
Пример #3
0
    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));
    }