CallableItem.avt

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

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

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

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

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

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

package ru.malik.elaborarer.avtoo.lang;

import avt.lang.array.*;
import platform.independent.streamformat.*;

public abstract class CallableItem(Object, DataHolder, Cloneable, Measureable, ObjectArray)
{
    private int fldPosition;
    private int2 fldLocation;
    private final LexemeSequence fldSequence;

    protected (LexemeSequence sequence) {
        fldPosition = -1;
        fldLocation = new int2 { -1, -1 };
        fldSequence = sequence;
    }

    public abstract boolean isEmpty();

    public abstract Node[] clone();

    public abstract void replaceJumpNode(Node oldJumpNode, Node newJumpNode);

    public abstract boolean hasJumpsTo(Node node);

    public abstract int length { read }

    public final int position { read = fldPosition, write = setPosition }

    public final int2 location { read = fldLocation, write = fldLocation }

    public final LexemeSequence sequence { read = fldSequence }

    public abstract Node operator [](int index);

    protected void setPosition(int newPosition) {
        fldPosition = newPosition;
        LexemeSequence sequence = fldSequence;
        if(sequence == null || newPosition < 0 || newPosition >= sequence.length)
        {
            fldLocation = new int2 { -1, -1 };
            return;
        }
        fldLocation = sequence.getLexemeLocation(newPosition);
    }
}