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