UNPKG

solidity-antlr4

Version:

Solidity Lang Lexer and Parser by official ANTLR4 grammar

71 lines (70 loc) 3.04 kB
import { BaseNode } from "../base.js"; import { ConstructorDefinitionContext, FallbackFunctionDefinitionContext, FunctionTypeNameContext, ReceiveFunctionDefinitionContext } from "../../antlr4/index.js"; export class BaseFunctionDefinition extends BaseNode { type = "FunctionDefinition"; name = null; functionKind = "function"; override = null; virtual = false; visibility = null; stateMutability = null; modifiers = null; parameters = null; returnParameters = null; body = null; constructor(ctx, visitor) { super(ctx, visitor); if (ctx instanceof FunctionTypeNameContext) { this.functionKind = "function"; this.visibility = ctx.visibility(0)?.getText() ?? null; this.stateMutability = ctx.stateMutability(0)?.getText() ?? null; this.parameters = ctx._arguments?.accept(visitor) ?? null; this.returnParameters = ctx._returnParameters?.accept(visitor) ?? null; } else { this.modifiers = ctx.modifierInvocation().map((modifier) => modifier.accept(visitor)); this.body = ctx.block()?.accept(visitor) ?? null; if (ctx instanceof ConstructorDefinitionContext) { this.functionKind = "constructor"; this.visibility = ctx.Internal(0) ? "internal" : ctx.Public(0) ? "public" : null; this.stateMutability = ctx.Payable(0) ? "payable" : null; this.parameters = ctx._arguments?.accept(visitor) ?? null; this.returnParameters = null; } else { this.virtual = !!ctx.Virtual().length; const overrideSpecifier = ctx.overrideSpecifier(0); this.override = overrideSpecifier ? overrideSpecifier.accept(visitor) : null; if (ctx instanceof FallbackFunctionDefinitionContext) { this.functionKind = "fallback"; this.visibility = ctx.External(0) ? "external" : null; this.stateMutability = ctx.stateMutability(0)?.getText() ?? null; this.parameters = ctx.parameterList().map((parameterList) => parameterList.accept(visitor)); this.returnParameters = ctx._returnParameters?.accept(visitor) ?? null; } else if (ctx instanceof ReceiveFunctionDefinitionContext) { this.functionKind = "receive"; this.visibility = ctx.External() ? "external" : null; this.stateMutability = ctx.Payable() ? "payable" : null; } else { this.functionKind = "function"; this.name = ctx.identifier()?.accept(visitor) ?? null; this.visibility = ctx.visibility(0)?.getText() ?? null; this.stateMutability = ctx.stateMutability(0)?.getText() ?? null; this.parameters = ctx._arguments?.accept(visitor) ?? null; this.returnParameters = ctx._returnParameters?.accept(visitor) ?? null; } } } } } export class FunctionDefinition extends BaseFunctionDefinition { type = "FunctionDefinition"; } export { FunctionDefinition as ConstructorDefinition, FunctionDefinition as FallbackFunctionDefinition, FunctionDefinition as ReceiveFunctionDefinition };