/** * Constructs a new {@code ExpressionStatement} * @param expr the wrapped {@link AstNode}. * The {@code ExpressionStatement}'s bounds are set to those of expr, * and expr's parent is set to this node. * @throws IllegalArgumentException if {@code expr} is null */ public ExpressionStatement(int pos, int len, AstNode expr) { super(pos, len); setExpression(expr); }
/** * Constructs a new {@code ExpressionStatement} * @param expr the wrapped {@link AstNode}. * The {@code ExpressionStatement}'s bounds are set to those of expr, * and expr's parent is set to this node. * @throws IllegalArgumentException if {@code expr} is null */ public ExpressionStatement(int pos, int len, AstNode expr) { super(pos, len); setExpression(expr); }
/** * Constructs a new {@code ExpressionStatement} * @param expr the wrapped {@link AstNode}. * The {@code ExpressionStatement}'s bounds are set to those of expr, * and expr's parent is set to this node. * @throws IllegalArgumentException if {@code expr} is null */ public ExpressionStatement(int pos, int len, AstNode expr) { super(pos, len); setExpression(expr); }
/** * Constructs a new {@code ExpressionStatement} * @param expr the wrapped {@link AstNode}. * The {@code ExpressionStatement}'s bounds are set to those of expr, * and expr's parent is set to this node. * @throws IllegalArgumentException if {@code expr} is null */ public ExpressionStatement(int pos, int len, AstNode expr) { super(pos, len); setExpression(expr); }
private static AstNode makeEmptyLabelStmt(String label) { Label l = new Label(); l.setName(label); LabeledStatement st = new LabeledStatement(); st.addLabel(l); ExpressionStatement ex = new ExpressionStatement(); ex.setExpression(new EmptyExpression()); st.setStatement(ex); return st; }
@Override public CAstNode visitLabeledStatement(LabeledStatement node, WalkContext arg) { ExpressionStatement ex = new ExpressionStatement(); ex.setExpression(new EmptyExpression()); CAstNode exNode = visit(ex, arg); arg.cfg().map(ex, exNode); WalkContext labelBodyContext = makeBreakContext(node, arg, ex); CAstNode result = visit(node.getStatement(), labelBodyContext); AstNode prev = node; for(Label label : node.getLabels()) { result = Ast.makeNode(CAstNode.LABEL_STMT, visit(label, arg), result); arg.cfg().map(prev, result); prev = label; } return Ast.makeNode(CAstNode.BLOCK_STMT, result, exNode); }