UNPKG

antlr-ng

Version:

Next generation ANTLR Tool

49 lines (48 loc) 1.36 kB
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 };