UNPKG

solidity-antlr4

Version:

Solidity Lang Lexer and Parser by official ANTLR4 grammar

45 lines (44 loc) 1.36 kB
import { BaseNode } from "../base.js"; import { InterfaceDefinitionContext, LibraryDefinitionContext } from "../../antlr4/index.js"; export class ContractDefinition extends BaseNode { type = "ContractDefinition"; /** * The contract name */ name; /** * Type of contract declaration, e.g. `contract`, `library` or `interface`. */ contractKind = "contract"; /** * Is `true` if contract is declared as an abstract * (using `abstract` keyword since Solidity 0.6). * * Is `false` otherwise. */ abstract = false; /** * Base contracts */ baseContracts = []; nodes = []; constructor(ctx, visitor) { super(ctx, visitor); this.name = visitor.visit(ctx.identifier()); this.nodes = ctx.contractBodyElement().map((element) => element.accept(visitor)); if (ctx instanceof InterfaceDefinitionContext) { this.contractKind = "interface"; this.baseContracts = ctx.inheritanceSpecifierList()?.accept(visitor) ?? []; } else if (ctx instanceof LibraryDefinitionContext) { this.contractKind = "library"; } else { this.contractKind = "contract"; this.abstract = !!ctx.Abstract(); this.baseContracts = ctx.inheritanceSpecifierList()?.accept(visitor) ?? []; } } } export { ContractDefinition as InterfaceDefinition, ContractDefinition as LibraryDefinition };