Skip to content

Commit

Permalink
Inject evaluator and type-computer registry as service
Browse files Browse the repository at this point in the history
  • Loading branch information
georg-schwarz committed Apr 2, 2024
1 parent ea89232 commit e593726
Show file tree
Hide file tree
Showing 43 changed files with 413 additions and 219 deletions.
6 changes: 5 additions & 1 deletion libs/execution/test/utils/test-infrastructure-util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// SPDX-License-Identifier: AGPL-3.0-only

import {
DefaultExpressionEvaluatorRegistry,
EvaluationContext,
PipelineDefinition,
RuntimeParameterProvider,
Expand Down Expand Up @@ -61,7 +62,10 @@ export function getTestExecutionContext(
new DefaultConstraintExtension(),
new CachedLogger(runOptions.isDebugMode, undefined, loggerPrintLogs),
runOptions,
new EvaluationContext(new RuntimeParameterProvider()),
new EvaluationContext(
new RuntimeParameterProvider(),
new DefaultExpressionEvaluatorRegistry(),
),
);

initialStack.forEach((node) => executionContext.enterNode(node));
Expand Down
15 changes: 9 additions & 6 deletions libs/interpreter-lib/src/interpreter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ export async function interpretModel(
model,
new StdExecExtension(),
new DefaultConstraintExtension(),
services.RuntimeParameterProvider,
services,
loggerFactory,
{
debug: options.debug,
Expand Down Expand Up @@ -177,7 +177,7 @@ async function interpretJayveeModel(
model: JayveeModel,
executionExtension: JayveeExecExtension,
constraintExtension: JayveeConstraintExtension,
runtimeParameterProvider: RuntimeParameterProvider,
jayveeServices: JayveeServices,
loggerFactory: LoggerFactory,
runOptions: InterpreterOptions,
): Promise<ExitCode> {
Expand All @@ -186,7 +186,7 @@ async function interpretJayveeModel(
pipeline,
executionExtension,
constraintExtension,
runtimeParameterProvider,
jayveeServices,
loggerFactory,
runOptions,
);
Expand All @@ -203,7 +203,7 @@ async function runPipeline(
pipeline: PipelineDefinition,
executionExtension: JayveeExecExtension,
constraintExtension: JayveeConstraintExtension,
runtimeParameterProvider: RuntimeParameterProvider,
jayveeServices: JayveeServices,
loggerFactory: LoggerFactory,
runOptions: InterpreterOptions,
): Promise<ExitCode> {
Expand All @@ -217,12 +217,15 @@ async function runPipeline(
debugGranularity: runOptions.debugGranularity,
debugTargets: runOptions.debugTargets,
},
new EvaluationContext(runtimeParameterProvider),
new EvaluationContext(
jayveeServices.RuntimeParameterProvider,
jayveeServices.operators.ExpressionEvaluatorRegistry,
),
);

logPipelineOverview(
pipeline,
runtimeParameterProvider,
jayveeServices.RuntimeParameterProvider,
executionContext.logger,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import * as path from 'path';

import { parseValueToInternalRepresentation } from '@jvalue/jayvee-execution';
import {
DefaultExpressionEvaluatorRegistry,
DefaultTypeComputerRegistry,
EvaluationContext,
RuntimeParameterLiteral,
RuntimeParameterProvider,
Expand Down Expand Up @@ -62,8 +64,14 @@ describe('Validation of validateRuntimeParameterLiteral', () => {

validateRuntimeParameterLiteral(
runtimeParameter,
new ValidationContext(validationAcceptorMock),
new EvaluationContext(runtimeProvider),
new ValidationContext(
validationAcceptorMock,
new DefaultTypeComputerRegistry(),
),
new EvaluationContext(
runtimeProvider,
new DefaultExpressionEvaluatorRegistry(),
),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,6 @@ import { CellRangeWrapper, Valuetype } from '../wrappers';
import { type EvaluationContext } from './evaluation-context';
import { EvaluationStrategy } from './evaluation-strategy';
import { type InternalValueRepresentation } from './internal-value-representation';
import {
binaryOperatorRegistry,
ternaryOperatorRegistry,
unaryOperatorRegistry,
} from './operator-registry';
import { isEveryValueDefined } from './typeguards';

export function evaluatePropertyValue<T extends InternalValueRepresentation>(
Expand Down Expand Up @@ -101,17 +96,17 @@ export function evaluateExpression(
}
if (isUnaryExpression(expression)) {
const operator = expression.operator;
const evaluator = unaryOperatorRegistry[operator].evaluation;
const evaluator = evaluationContext.operatorRegistry.unary[operator];
return evaluator.evaluate(expression, evaluationContext, strategy, context);
}
if (isBinaryExpression(expression)) {
const operator = expression.operator;
const evaluator = binaryOperatorRegistry[operator].evaluation;
const evaluator = evaluationContext.operatorRegistry.binary[operator];
return evaluator.evaluate(expression, evaluationContext, strategy, context);
}
if (isTernaryExpression(expression)) {
const operator = expression.operator;
const evaluator = ternaryOperatorRegistry[operator].evaluation;
const evaluator = evaluationContext.operatorRegistry.ternary[operator];
return evaluator.evaluate(expression, evaluationContext, strategy, context);
}
assertUnreachable(expression);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ import {
isTransformPortDefinition,
isValueKeywordLiteral,
} from '../generated/ast';
// eslint-disable-next-line import/no-cycle
import { PrimitiveValuetypes } from '../wrappers/value-type/primitive/primitive-valuetypes';
import { type Valuetype } from '../wrappers/value-type/valuetype';

import { type InternalValueRepresentation } from './internal-value-representation';
import { type ExpressionEvaluatorRegistry } from './operator-registry';

export class EvaluationContext {
private readonly variableValues = new Map<
Expand All @@ -34,6 +36,7 @@ export class EvaluationContext {

constructor(
public readonly runtimeParameterProvider: RuntimeParameterProvider,
public readonly operatorRegistry: ExpressionEvaluatorRegistry,
) {}

getValueFor(
Expand Down
1 change: 1 addition & 0 deletions libs/language-server/src/lib/ast/expressions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// SPDX-License-Identifier: AGPL-3.0-only

export * from './evaluation-strategy';
// eslint-disable-next-line import/no-cycle
export * from './evaluation-context';
export * from './internal-value-representation';
export * from './operator-registry';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
type UnaryExpression,
} from '../generated/ast';

// eslint-disable-next-line import/no-cycle
import { evaluateExpression } from './evaluate-expression';
import { type EvaluationContext } from './evaluation-context';
import { EvaluationStrategy } from './evaluation-strategy';
Expand Down Expand Up @@ -230,7 +231,6 @@ export abstract class DefaultTernaryOperatorEvaluator<
validationContext,
strategy,
);
EvaluationContext

const secondValue = evaluateExpression(
expression.second,
Expand Down
Loading

0 comments on commit e593726

Please sign in to comment.