/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.ast;
/**
* Base class for all abstract-syntax-tree nodes
*/
abstract class AstNode implements Node {
private final long beginPosition, endPosition;
/**
* Constructs a new ast node.
*
* @param beginPosition
* the begin source position
* @param endPosition
* the end source position
*/
protected AstNode(long beginPosition, long endPosition) {
this.beginPosition = beginPosition;
this.endPosition = endPosition;
}
@Override
public final int getBeginLine() {
return (int) beginPosition;
}
@Override
public final int getBeginColumn() {
return (int) (beginPosition >>> 32);
}
@Override
public final long getBeginPosition() {
return beginPosition;
}
@Override
public final int getEndLine() {
return (int) endPosition;
}
@Override
public final int getEndColumn() {
return (int) (endPosition >>> 32);
}
@Override
public final long getEndPosition() {
return endPosition;
}
@Override
public abstract <R, V> R accept(NodeVisitor<R, V> visitor, V value);
@Override
public abstract <V> int accept(IntNodeVisitor<V> visitor, V value);
@Override
public abstract <V> void accept(VoidNodeVisitor<V> visitor, V value);
}