ReferenceType.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Компилятор языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

    Copyright © 2021, 2024 Малик Разработчик

    Это свободная программа: вы можете перераспространять ее и/или изменять
    ее на условиях Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
*/

package ru.malik.elaborarer.avtoo.lang;

import avt.lang.array.*;

public abstract class ReferenceType(Type, Cloneable, Measureable, ObjectArray, AVTOOConstants)
{
    package (Package parentPackage, int attributes, String specialSimpleName, Source source, int declarationPosition, int documentationPosition):
        super(parentPackage, attributes, specialSimpleName, source, declarationPosition, documentationPosition) {
    }

    public abstract boolean isAssignableFrom(Type anot);

    public abstract boolean isCompatibleWith(Type anot);

    public final boolean isConvertableFrom(Type anot) { return isAssignableFrom(anot); }

    public final ReferenceType getScalarCommonType(Type anot) { return getCommonType(anot); }

    public final ReferenceType getVectorCommonType(Type anot) { return getCommonType(anot); }

    public final int kind { read = REF }

    protected abstract ReferenceType getCommonType(ReferenceType anot);

    protected String composeRecompilableName() { return null; }

    protected String composeFasmSimpleName() { return null; }

    protected String composeFasmFullName() { return null; }

    protected String composeFasmFileName() { return null; }

    protected final int computeFieldWidth() {
        Programme programme = parentProgramme;
        return programme == null ? 8 : programme.pointerSize >> 3;
    }

    private ReferenceType getCommonType(Type anot) {
        if(anot == null)
        {
            throw new NullPointerException(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "anot" }));
        }
        return !(anot instanceof ReferenceType) ? null : getCommonType((ReferenceType) anot);
    }
}