001package gudusoft.gsqlparser.nodes.powerquery;
002
003import gudusoft.gsqlparser.nodes.TParseTreeNode;
004import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
005
006/**
007 * A single M-language step binding: {@code name = expression}.
008 *
009 * <p>The expression is stored as an AST node reference plus the raw token
010 * range so unknown constructs survive round-trip without semantic loss.
011 */
012public class TPowerQueryStep extends TParseTreeNode {
013
014    private String name;
015    private TParseTreeNode expression;
016
017    /**
018     * Raw M text of the expression.  Useful for diagnostics and for steps
019     * that the parser classified as {@code opaque} (unrecognized constructs).
020     */
021    private String rawExpressionText;
022
023    public String getName() {
024        return name;
025    }
026
027    public void setName(String name) {
028        this.name = name;
029    }
030
031    public TParseTreeNode getExpression() {
032        return expression;
033    }
034
035    public void setExpression(TParseTreeNode expression) {
036        this.expression = expression;
037    }
038
039    public String getRawExpressionText() {
040        return rawExpressionText;
041    }
042
043    public void setRawExpressionText(String rawExpressionText) {
044        this.rawExpressionText = rawExpressionText;
045    }
046
047    @Override
048    public void accept(TParseTreeVisitor v) {
049        v.preVisit(this);
050        v.postVisit(this);
051    }
052
053    @Override
054    public void acceptChildren(TParseTreeVisitor v) {
055        v.preVisit(this);
056        if (expression != null) expression.acceptChildren(v);
057        v.postVisit(this);
058    }
059}