antlr-ng
Version:
Next generation ANTLR Tool
49 lines (48 loc) • 1.36 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { isCodeBlockForOuterMostAlt } from "../../support/helpers.js";
import { OutputModelObject } from "./OutputModelObject.js";
class SrcOp extends OutputModelObject {
static {
__name(this, "SrcOp");
}
/**
* All operations know in which block they live:
*
* CodeBlock, CodeBlockForAlt
*
* Templates might need to know block nesting level or find a specific declaration, etc...
*/
enclosingBlock;
enclosingRuleFunction;
constructor(factory, ast) {
super(factory, ast);
this.enclosingBlock = factory.getCurrentBlock();
this.enclosingRuleFunction = factory.getCurrentRuleFunction();
}
/** Walk upwards in model tree, looking for outer alt's code block. */
getOuterMostAltCodeBlock() {
if (isCodeBlockForOuterMostAlt(this)) {
return this;
}
let p = this.enclosingBlock;
while (p) {
if (isCodeBlockForOuterMostAlt(p)) {
return p;
}
p = p.enclosingBlock;
}
return void 0;
}
/** Return label alt or return name of rule. */
getContextName() {
const alt = this.getOuterMostAltCodeBlock();
if (alt?.altLabel) {
return alt.altLabel;
}
return this.enclosingRuleFunction.name;
}
}
export {
SrcOp
};