import org.gnunet.seaspider.parser.nodes.IfStatement;
import org.gnunet.seaspider.parser.nodes.InclusiveORExpression;
import org.gnunet.seaspider.parser.nodes.InitDeclarator;
+import org.gnunet.seaspider.parser.nodes.InitDeclaratorList;
+import org.gnunet.seaspider.parser.nodes.Initializer;
+import org.gnunet.seaspider.parser.nodes.InitializerList;
import org.gnunet.seaspider.parser.nodes.JumpStatement;
import org.gnunet.seaspider.parser.nodes.LogicalANDExpression;
import org.gnunet.seaspider.parser.nodes.LogicalORExpression;
import org.gnunet.seaspider.parser.nodes.MultiplicativeExpression;
+import org.gnunet.seaspider.parser.nodes.Node;
import org.gnunet.seaspider.parser.nodes.NodeChoice;
import org.gnunet.seaspider.parser.nodes.NodeSequence;
import org.gnunet.seaspider.parser.nodes.NodeToken;
import org.gnunet.seaspider.parser.nodes.TypeDeclaration;
import org.gnunet.seaspider.parser.nodes.UnaryExpression;
import org.gnunet.seaspider.parser.nodes.UnaryOperator;
+import org.gnunet.seaspider.parser.nodes.VariableDeclaration;
import org.gnunet.seaspider.parser.nodes.WhileStatement;
import org.gnunet.seaspider.parser.visitors.DepthFirstVisitor;
import org.grothoff.LineNumberInfo;
// do nothing -- skip!
}
+ public void visit(InitDeclaratorList n) {
+ assert skip_mode == true;
+ super.visit(n);
+ assert skip_mode == true;
+ }
+
+ public void visit(Initializer n) {
+ assert skip_mode == true;
+ if (n.f0.which == 0) {
+ boolean old_mode = skip_mode;
+ skip_mode = false;
+ ExpressionBuilder old = current_expression;
+ current_expression = new ExpressionBuilder();
+ n.f0.accept(this);
+ LineNumberInfo lin = LineNumberInfo.get(n);
+ if (old != null) {
+ old.push(current_expression.expression);
+ old.commit(lin.lineEnd);
+ } else {
+ current_expression.commit(lin.lineEnd);
+ }
+ current_expression = old;
+ skip_mode = old_mode;
+ } else {
+ super.visit(n);
+ }
+ assert skip_mode == true;
+ }
+
+ public void visit(InitializerList n) {
+ assert skip_mode == true;
+ super.visit(n);
+ assert skip_mode == true;
+ }
+
+ public void visit(VariableDeclaration n) {
+ assert skip_mode == true;
+ super.visit(n);
+ }
+
public void visit(FunctionDeclaration n) {
if (n.f5.which == 0)
return; // no body
public void visit(ParameterDeclaration n) {
skip_mode = false;
assert current_expression == null;
- current_expression = new ExpressionBuilder();
- n.f1.accept(this);
- LineNumberInfo lin = LineNumberInfo.get(n);
- current_expression.commit(lin.lineEnd);
+ if (n.f1.present()) {
+ NodeSequence ns = (NodeSequence) n.f1.node;
+ Node var = ns.elementAt(0);
+ current_expression = new ExpressionBuilder();
+ var.accept(this);
+ LineNumberInfo lin = LineNumberInfo.get(var);
+ current_expression.commit(lin.lineEnd);
+ }
current_expression = null;
skip_mode = true;
}
}
public void visit(CompoundStatement n) {
+ assert current_expression == null;
+ assert skip_mode == true;
int old_end = scope_end_line;
scope_end_line = n.f2.endLine;
n.f1.accept(this);
}
old.push(current_expression.expression);
current_expression = old;
- }
-
- public void visit(AssignmentExpression n) {
- skip_mode = false;
- assert current_expression == null;
- ExpressionBuilder old = current_expression;
- current_expression = new ExpressionBuilder();
- n.f0.accept(this);
- if (old != null) {
- old.push(current_expression.expression);
- LineNumberInfo lin = LineNumberInfo.get(n);
- old.commit(lin.lineEnd);
- }
- current_expression = old;
- }
-
+ }
+
public void visit(AssignmentOperator n) {
operator = true;
super.visit(n);
operator = false;
}
+
+ public void visit(AssignmentExpression n)
+ {
+ if (0 == n.f0.which)
+ {
+ NodeSequence ns = (NodeSequence) n.f0.choice;
+ UnaryExpression u = (UnaryExpression) ns.elementAt(0);
+ AssignmentOperator ao = (AssignmentOperator) ns.elementAt(1);
+ AssignmentExpression ae = (AssignmentExpression) ns.elementAt(2);
+ LineNumberInfo lin = LineNumberInfo.get(n);
+
+ ExpressionBuilder old = current_expression;
+ current_expression = new ExpressionBuilder();
+ u.accept(this);
+ current_expression.commit(lin.lineEnd);
+ ao.accept (this);
+ old.push(current_expression.expression);
+ current_expression = new ExpressionBuilder();
+ ae.accept(this);
+ current_expression.commit(lin.lineEnd);
+ old.push(current_expression.expression);
+ current_expression = old;
+ }
+ else
+ {
+ n.f0.choice.accept (this);
+ }
+ }
public void visit(ConditionalExpression n) {
ExpressionBuilder old = current_expression;
n.f0.accept(this);
old.push(current_expression.expression);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n);
NodeSequence ns = (NodeSequence) n.f1.node;
current_expression = new ExpressionBuilder();
ns.elementAt(1).accept(this);
+ current_expression.commit(lin.lineEnd);
old.push("?");
old.push(current_expression.expression);
current_expression = new ExpressionBuilder();
ns.elementAt(3).accept(this);
+ current_expression.commit(lin.lineEnd);
old.push(":");
old.push(current_expression.expression);
- LineNumberInfo lin = LineNumberInfo.get(n);
old.commit(lin.lineEnd);
}
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ old.push(current_expression.expression);
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ current_expression.commit(lin.lineEnd);
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ old.push(current_expression.expression);
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ current_expression.commit(lin.lineEnd);
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
n.f0.accept(this);
if (n.f1.present()) {
LineNumberInfo lin = LineNumberInfo.get(n);
- current_expression.commit(lin.lineEnd);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
old.push(current_expression.expression);
current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
- current_expression.commit(lin.lineEnd);
+ current_expression.commit(lin.lineEnd);
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ old.push(current_expression.expression);
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ current_expression.commit(lin.lineEnd);
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
current_expression = new ExpressionBuilder();
n.f0.accept(this);
if (n.f1.present()) {
+ LineNumberInfo lin = LineNumberInfo.get(n.f0);
+ current_expression.commit(lin.lineEnd);
operator = true;
NodeSequence ns = (NodeSequence) n.f1.node;
ns.nodes.get(0).accept(this);
operator = false;
+ ExpressionBuilder tmp = current_expression;
+ current_expression = new ExpressionBuilder();
ns.nodes.get(1).accept(this);
+ lin = LineNumberInfo.get(ns.nodes.get(1));
+ current_expression.commit(lin.lineEnd);
+ tmp.push (current_expression.expression);
+ current_expression = tmp;
}
old.push(current_expression.expression);
current_expression = old;
NodeSequence ns = (NodeSequence) nc.choice;
ns.elementAt(1).accept(this);
LineNumberInfo lin = LineNumberInfo.get(n);
- current_expression.commit(lin.colEnd);
+ current_expression.commit(lin.lineEnd);
old.push("[");
old.push(current_expression.expression);
old.push("]");
current_expression = new ExpressionBuilder();
NodeSequence ns = (NodeSequence) nc.choice;
ns.elementAt(1).accept(this);
+ LineNumberInfo lin = LineNumberInfo.get (ns.elementAt(1));
+ current_expression.commit(lin.lineEnd);
old.push("(");
old.push(current_expression.expression);
old.push(")");
current_expression = new ExpressionBuilder();
NodeSequence ns = (NodeSequence) n.f0.choice;
ns.elementAt(1).accept(this);
+ LineNumberInfo lin1 = LineNumberInfo.get (ns.elementAt(1));
+ current_expression.commit(lin1.lineEnd);
old.push("(");
old.push(current_expression.expression);
old.push(")");