simc-ast-builder
Version:
Parser and AST generator for SimulationCraft files
93 lines • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleUnaryPlusExpr = exports.handleUnaryMinusExpr = exports.handleUnaryExpr = exports.handleNotExpr = exports.handleAbsExpr = void 0;
/**
* Handler for unary plus expressions
*/
const handleUnaryPlusExpr = (ctx, visitor) => {
// Only handle if this is a unary plus
if (!ctx.OP_PLUS()) {
throw new Error("Not a unary plus expression");
}
return {
argument: visitor.visit(ctx.expression()),
expressionType: "numeric",
kind: "expression",
nodeType: "unary",
operator: "plus",
};
};
exports.handleUnaryPlusExpr = handleUnaryPlusExpr;
/**
* Handler for unary minus expressions
*/
const handleUnaryMinusExpr = (ctx, visitor) => {
// Only handle if this is a unary minus
if (!ctx.OP_MINUS()) {
throw new Error("Not a unary minus expression");
}
return {
argument: visitor.visit(ctx.expression()),
expressionType: "numeric",
kind: "expression",
nodeType: "unary",
operator: "minus",
};
};
exports.handleUnaryMinusExpr = handleUnaryMinusExpr;
/**
* Handler for absolute value expressions
*/
const handleAbsExpr = (ctx, visitor) => {
// Only handle if this is an abs operator
if (!ctx.OP_ABS()) {
throw new Error("Not an abs expression");
}
return {
argument: visitor.visit(ctx.expression()),
expressionType: "numeric",
kind: "expression",
nodeType: "unary",
operator: "abs",
};
};
exports.handleAbsExpr = handleAbsExpr;
/**
* Handler for logical not expressions
*/
const handleNotExpr = (ctx, visitor) => {
// Only handle if this is a logical not
if (!ctx.OP_NOT()) {
throw new Error("Not a logical not expression");
}
return {
argument: visitor.visit(ctx.expression()),
expressionType: "boolean",
kind: "expression",
nodeType: "unary",
operator: "not",
};
};
exports.handleNotExpr = handleNotExpr;
/**
* Generic handler for all unary expressions
*/
const handleUnaryExpr = (ctx, visitor) => {
if (ctx.OP_PLUS()) {
return handleUnaryPlusExpr(ctx, visitor);
}
else if (ctx.OP_MINUS()) {
return handleUnaryMinusExpr(ctx, visitor);
}
else if (ctx.OP_ABS()) {
return handleAbsExpr(ctx, visitor);
}
else if (ctx.OP_NOT()) {
return handleNotExpr(ctx, visitor);
}
else {
throw new Error("Unknown unary operator");
}
};
exports.handleUnaryExpr = handleUnaryExpr;
//# sourceMappingURL=UnaryExprHandler.js.map