/**
* Copyright 2013, Landz and its contributors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jnr.x86asm;
import java.util.LinkedList;
import java.util.List;
import static jnr.x86asm.LABEL_STATE.*;
/**
*
*/
public final class Label extends Operand {
/** Label Id (0 means unknown). */
final int id;
/** State of label, see {@link LABEL_STATE}. */
LABEL_STATE state;
/** Position (always positive, information depends to @c state). */
int position;
final List<LinkData> links = new LinkedList<LinkData>();
public Label() {
this(0);
}
public Label(int id) {
super(OP.OP_LABEL, 4);
this.id = id;
this.state = LABEL_STATE_UNUSED;
this.position = -1;
}
/** Returns @c true if label is unused (not bound or linked). */
final boolean isUnused() {
return state == LABEL_STATE_UNUSED;
}
/** Returns @c true if label is linked. */
final boolean isLinked() {
return state == LABEL_STATE_LINKED;
}
/** Returns @c true if label is bound. */
final boolean isBound() {
return state == LABEL_STATE_BOUND;
}
/** Returns the position of bound or linked labels, -1 if label
* is unused.
*/
final int position() {
return position;
}
final void link(LinkData link) {
links.add(link);
state = LABEL_STATE_LINKED;
}
}