BlockItemNode.java
package edu.udel.cis.vsl.abc.ast.node.IF.statement;
import edu.udel.cis.vsl.abc.ast.node.IF.ASTNode;
import edu.udel.cis.vsl.abc.ast.node.IF.PragmaNode;
import edu.udel.cis.vsl.abc.ast.node.IF.StaticAssertionNode;
import edu.udel.cis.vsl.abc.ast.node.IF.declaration.OrdinaryDeclarationNode;
import edu.udel.cis.vsl.abc.ast.node.IF.declaration.TypedefDeclarationNode;
import edu.udel.cis.vsl.abc.ast.node.IF.omp.OmpDeclarativeNode;
import edu.udel.cis.vsl.abc.ast.node.IF.type.EnumerationTypeNode;
import edu.udel.cis.vsl.abc.ast.node.IF.type.StructureOrUnionTypeNode;
/**
* An item that can appear in a "block". Every instance of {@link BlockItemNode}
* is also an instance of (at least) one of the following:
*
* <ul>
* <li>{@link EnumerationTypeNode}</li>
* <li>{@link OmpDeclarativeNode}</li>
* <li>{@link OrdinaryDeclarationNode}</li>
* <li>{@link PragmaNode}</li>
* <li>{@link StatementNode}</li>
* <li>{@link StaticAssertionNode}</li>
* <li>{@link StructureOrUnionTypeNode}</li>
* <li>{@link TypedefDeclarationNode}</li>
* </ul>
*
* @author siegel
*
*/
public interface BlockItemNode extends ASTNode {
public enum BlockItemKind {
/**
* Indicates that the block item is an instance of
* {@link EnumerationTypeNode}.
*/
ENUMERATION,
/**
* Indicates that the block item is an instance of
* {@link OmpDeclarativeNode}.
*/
OMP_DECLARATIVE,
/**
* Indicates that the block item is an instance of
* {@link OrdinaryDeclarationNode}.
*/
ORDINARY_DECLARATION,
/**
* Indicates that the block item is an instance of {@link PragmaNode}.
*/
PRAGMA,
/**
* Indicates that the block item is an instance of {@link StatementNode}
* .
*/
STATEMENT,
/**
* Indicates that the block item is an instance of
* {@link StaticAssertionNode}.
*/
STATIC_ASSERTION,
/**
* Indicates that the block item is an instance of
* {@link StructureOrUnionTypeNode}.
*/
STRUCT_OR_UNION,
/**
* Indicates that the block item is an instance of
* {@link TypedefDeclarationNode}.
*/
TYPEDEF
}
/**
* Returns the kind of this block item.
*
* @return the kind
*/
BlockItemKind blockItemKind();
@Override
BlockItemNode copy();
}