solidity-antlr4
Version:
Solidity Lang Lexer and Parser by official ANTLR4 grammar
45 lines (44 loc) • 1.36 kB
JavaScript
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 };