예제 #1
0
 internal Builder([DisallowNull] ES_InterfaceData *data, ES_AccessModifier accessMod,
                  ES_FullyQualifiedName fullyQualifiedName, ArrayPointer <byte> sourceUnit
                  )
 {
     InterfaceData  = data;
     data->TypeInfo = new ES_TypeInfo(ES_TypeTag.Interface, accessMod, ES_TypeFlag.NoNew, sourceUnit, fullyQualifiedName);
 }
예제 #2
0
    public ES_ArrayTypeData(ES_FullyQualifiedName fullyQualifiedName, [NotNull] ES_TypeInfo *elemType, int dims)
    {
        TypeInfo             = new (ES_TypeTag.Array, ES_AccessModifier.Public, ES_TypeFlag.None, ArrayPointer <byte> .Null, fullyQualifiedName);
        TypeInfo.RuntimeSize = sizeof(void *) + sizeof(int);

        elementType = elemType;
        dimCount    = dims;
    }
예제 #3
0
    public ES_ConstData(
        ES_FullyQualifiedName fullyQualifiedName, ES_TypeInfo *innerType, bool immutable
        )
    {
        var tag = immutable ? ES_TypeTag.Immutable : ES_TypeTag.Const;

        TypeInfo = new ES_TypeInfo(tag, ES_AccessModifier.Public, ES_TypeFlag.None, ArrayPointer <byte> .Null, fullyQualifiedName);

        InnerType = innerType;
    }
예제 #4
0
    public ES_FunctionPrototypeData(ES_AccessModifier accessMod,
                                    ES_TypeInfo *retType, ArrayPointer <ES_FunctionPrototypeArgData> argsList,
                                    ES_FullyQualifiedName fullyQualifiedName, ArrayPointer <byte> sourceUnit
                                    )
    {
        TypeInfo             = new (ES_TypeTag.Function, accessMod, ES_TypeFlag.NoNew, sourceUnit, fullyQualifiedName);
        TypeInfo.RuntimeSize = IntPtr.Size;

        returnType    = retType;
        argumentsList = argsList;
    }
예제 #5
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));
    }
예제 #6
0
    public ES_ReferenceData(
        ES_FullyQualifiedName fullyQualifiedName, ES_TypeInfo *pointedType
        )
    {
        TypeInfo = new (ES_TypeTag.Reference, ES_AccessModifier.Public, ES_TypeFlag.None, ArrayPointer <byte> .Null, fullyQualifiedName) {
            RuntimeSize = sizeof(void *)
        };

        PointedType = pointedType;
    }

    #endregion
}
예제 #7
0
    public ES_FloatTypeData(
        ES_AccessModifier accessMod, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName,
        ES_FloatSize size
        )
    {
        TypeInfo = new ES_TypeInfo(ES_TypeTag.Float, accessMod, ES_TypeFlag.NoRefs, sourceUnit, fullyQualifiedName);

        FloatSize = size;

        TypeInfo.RuntimeSize = size switch {
            ES_FloatSize.Single => 4,
            ES_FloatSize.Double => 8,

            _ => throw new NotImplementedException("Size not implemented."),
        };
    }
예제 #8
0
    public ES_IntTypeData(
        ES_AccessModifier accessMod, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName,
        ES_IntSize size, bool unsigned
        )
    {
        TypeInfo = new ES_TypeInfo(ES_TypeTag.Int, accessMod, ES_TypeFlag.NoRefs, sourceUnit, fullyQualifiedName);

        IntSize  = size;
        Unsigned = unsigned;

        TypeInfo.RuntimeSize = size switch {
            ES_IntSize.Int8 => 1,
            ES_IntSize.Int16 => 2,
            ES_IntSize.Int32 => 4,
            ES_IntSize.Int64 => 8,

            _ => throw new NotImplementedException("Size not implemented."),
        };
    }