summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ast-to-instr/src/VHDLNode.java')
-rw-r--r--ast-to-instr/src/VHDLNode.java122
1 files changed, 84 insertions, 38 deletions
diff --git a/ast-to-instr/src/VHDLNode.java b/ast-to-instr/src/VHDLNode.java
index 970be9a..b05f08c 100644
--- a/ast-to-instr/src/VHDLNode.java
+++ b/ast-to-instr/src/VHDLNode.java
@@ -1,70 +1,116 @@
import org.w3c.dom.Node;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathExpression;
public abstract class VHDLNode extends ParsableXML
{
- /** Static *****************************************************************/
- private static XPathExpression XPE_FIND_EXPR_NAMED_ENTITIES;
+ protected final IDs next_node;
+ protected final int depth;
+ protected final String[] attributes;
+ protected final OutputFile output;
- static
+ public VHDLNode
+ (
+ final OutputFile output,
+ final IDs parent_id,
+ final Node xml_node,
+ final IDs next_node,
+ final int depth,
+ final String[] attributes
+ )
{
- XPE_FIND_EXPR_NAMED_ENTITIES =
- XMLManager.compile_or_die
- (
- ".//named_entity"
- );
+ super(parent_id, xml_node);
+
+ this.output = output;
+ this.next_node = next_node;
+ this.depth = depth;
+ this.attributes = attributes;
}
- protected void handle_expression
+ protected void handle_read_expr_predicates
(
final IDs local_id,
- final Node expression_start
+ final Node expr_node
)
throws XPathExpressionException
{
- final String ref;
+ final List<IDs> elements;
+ final StringBuilder structure;
+ final int elements_count;
- ref = XMLManager.get_attribute(expression_start, "ref");
+ elements = new ArrayList<IDs>();
+ structure = new StringBuilder();
- if (!Main.node_is_function_or_literal(ref))
+ Expressions.process(elements, structure, expr_node);
+
+ Predicates.add_entry
+ (
+ output,
+ "is_read_structure",
+ local_id,
+ Strings.get_id_from_string
+ (
+ structure.toString()
+ )
+ );
+
+ elements_count = elements.size();
+
+ for (int i = 0; i < elements_count; ++i)
{
Predicates.add_entry
(
output,
- "expr_reads",
+ "is_read_element",
local_id,
- Waveforms.get_associated_waveform_id
- (
- IDs.get_id_from_xml_id(ref, (String) null)
- )
+ Strings.get_id_from_string(Integer.toString(i)),
+ elements.get(i)
);
}
}
- /** Non-Static *************************************************************/
- protected final IDs next_node;
- protected final int depth;
- protected final String[] attributes;
- protected final OutputFile output;
-
- public VHDLNode
+ protected void handle_written_expr_predicates
(
- final OutputFile output,
- final IDs parent_id,
- final Node xml_node,
- final IDs next_node,
- final int depth,
- final String[] attributes
+ final IDs local_id,
+ final Node expr_node
)
+ throws XPathExpressionException
{
- super(parent_id, xml_node);
+ final List<IDs> elements;
+ final StringBuilder structure;
+ final int elements_count;
- this.output = output;
- this.next_node = next_node;
- this.depth = depth;
- this.attributes = attributes;
- }
+ elements = new ArrayList<IDs>();
+ structure = new StringBuilder();
+ Expressions.process(elements, structure, expr_node);
+
+ Predicates.add_entry
+ (
+ output,
+ "is_written_structure",
+ local_id,
+ Strings.get_id_from_string
+ (
+ structure.toString()
+ )
+ );
+
+ elements_count = elements.size();
+
+ for (int i = 0; i < elements_count; ++i)
+ {
+ Predicates.add_entry
+ (
+ output,
+ "is_written_element",
+ local_id,
+ Strings.get_id_from_string(Integer.toString(i)),
+ elements.get(i)
+ );
+ }
+ }
}