solidity-antlr4
Version:
Solidity Lang Lexer and Parser by official ANTLR4 grammar
155 lines (154 loc) • 5.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PrinterStatement = void 0;
var _base = require("./base.cjs");
class PrinterStatement extends _base.BasePrinter {
printAssemblyStatement = ({
node,
path,
print
}) => {
const parts = ["assembly"];
if (node.dialect !== null) {
parts.push(this.space, this.quote, node.dialect, this.quote);
}
if (node.flags !== null) {
parts.push(this.space, this.tuple(this.paramater((node.flags ?? []).map(f => [this.quote, f, this.quote]))));
}
const statements = path.map(p => [print(p), this.pangu(p)], "yulStatements");
parts.push(this.space, this.block(this.builders.join(this.builders.hardline, statements), !node.yulStatements.length));
return this.builders.group(parts);
};
printBlock = ({
node,
path,
print
}) => {
const statements = path.map(p => [print(p), this.pangu(p)], "statements");
return this.block([this.builders.join(this.builders.line, statements), this.builders.breakParent], !node.statements.length);
};
printBreakStatement = ({
node
}) => [node.name, this.semi];
printCatchClause = ({
node,
path,
print
}) => {
const groupId = Symbol("catch");
const parts = ["catch"];
if (node.errorName !== null || node.parameters !== null) parts.push(this.space);
if (node.errorName !== null) parts.push(path.call(print, "errorName"));
if (node.parameters !== null) {
parts.push(this.tuple(this.paramater(path.map(print, "parameters")), groupId));
}
return [this.builders.group(parts, {
id: groupId
}), this.space, path.call(print, "body")];
};
printContinueStatement = ({
node
}) => [node.name, this.semi];
printDoWhileStatement = ({
path,
print
}) => {
const parts = ["while", this.space, this.tuple(path.call(print, "condition"))];
return ["do", this.space, path.call(print, "body"), this.space, this.builders.group(parts)];
};
printEmitStatement = ({
path,
print
}) => {
return this.builders.group(["emit", this.space, path.call(print, "expression"), this.tuple(this.paramater(path.map(print, "arguments"))), this.semi]);
};
printExpressionStatement = ({
path,
print
}) => {
return [path.call(print, "expression"), this.semi];
};
printForStatement = ({
node,
path,
print
}) => {
const parts = ["for"];
const initialization = node.initializationExpression === null ? ";" : path.call(print, "initializationExpression");
const condition = node.conditionExpression === null ? ";" : path.call(print, "conditionExpression");
const loop = node.loopExpression === null ? "" : path.call(print, "loopExpression");
parts.push(this.space, this.tuple(this.builders.join(this.space, [initialization, condition, loop])));
parts.push(this.space, path.call(print, "body"));
return this.builders.group(parts);
};
printIfStatement = ({
node,
path,
print
}) => {
const parts = ["if", this.space, this.tuple(path.call(print, "condition")), this.space, path.call(print, "ifStatement")];
if (node.elseStatement !== null) {
parts.push(this.space, "else", this.space, path.call(print, "elseStatement"));
}
return this.builders.group(parts);
};
printReturnStatement = ({
node,
path,
print
}) => {
const parts = ["return"];
if (node.expression !== null) {
parts.push(this.space, path.call(print, "expression"));
}
parts.push(this.semi);
return this.builders.group(parts);
};
printRevertStatement = ({
path,
print
}) => {
return this.builders.group(["revert", this.space, path.call(print, "expression"), this.tuple(this.paramater(path.map(print, "arguments"))), this.semi]);
};
printTryStatement = ({
node,
print,
path
}) => {
const parts = ["try", this.space, path.call(print, "expression")];
if (node.returnParameters !== null) {
parts.push(this.space, ["returns", this.space, this.tuple(this.paramater(path.map(print, "returnParameters")))]);
}
parts.push(this.space, path.call(print, "body"));
parts.push(this.space, this.builders.join(this.space, path.map(print, "catchClauses")));
parts.push(this.semi);
return this.builders.group(parts);
};
printVariableDeclarationStatement = ({
node,
path,
print
}) => {
const parts = [];
if (node.variableTuple !== null) {
parts.push(this.tuple(this.paramater(path.map(print, "variableTuple"))));
} else {
parts.push(path.call(print, "variable"));
}
if (node.expression !== null) {
parts.push(this.space, "=", this.space, path.call(print, "expression"));
}
parts.push(this.semi);
return this.builders.group(parts);
};
printWhileStatement = ({
path,
print
}) => {
const parts = ["while", this.space, this.tuple(path.call(print, "condition"))];
return [this.builders.group(parts), this.space, path.call(print, "body")];
};
}
exports.PrinterStatement = PrinterStatement;