classPlanCompiler
final class PlanCompiler
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
Lowers trusted plans into the same SSA instructions and control-flow blocks as PHP.
Properties§
public array<int, list<Instruction>> $instructions = [0 => []]public array<int, Terminator> $terminators = []public int $current = 0Current block.
public int $sequence = 0SSA sequence.
public SourceRef $sourceMethods§
public function __construct(public SourceRef $source)Parameters
$source | SourceRef | Evaluator declaration provenance |
public function compile(
CallDescriptor $descriptor,
SemanticPlan $plan,
CallableGraph|null $declaration = null,
): CallableGraphCompiles an acyclic semantic plan.
Parameters
$descriptor | CallDescriptor | Evaluator signature and identity |
$plan | SemanticPlan | Ordered API semantics |
$declaration | CallableGraph|null | Optional source declaration supplying lexical method metadata |
Returns
CallableGraph Executable abstract graphTest cases 2
Called from 3
- method-call Deriver\Deriver\Evaluator\CallEvaluation::evaluate() packages/deriver/src/Deriver/Evaluator/CallEvaluation.php:77
- method-call Deriver\Deriver\Evaluator\Execution\Call\CallResolution::body() packages/deriver/src/Deriver/Evaluator/Execution/Call/CallResolution.php:83
- method-call Deriver\Deriver\Evaluator\Execution\Call\Contract\Inputs::bindings() packages/deriver/src/Deriver/Evaluator/Execution/Call/Contract/Inputs.php:37
Calls 10
- method-call PlanCompiler::actions() line 57
- new BoundInstruction line 62
- new CallableGraph line 63
- new BasicBlock line 63
- new Terminator line 63
- class-const TerminatorKind::Return() line 63
- new Parameter line 65
- function-call
str_containsline 74 - function-call
explodeline 74 - class-const Visibility::Public() line 75
public function expression(Expression $expression): stringEmits a evaluator expression as shared solver instructions.
Parameters
$expression | Expression | Declarative expression |
Returns
string Result registerThrows
InvalidInputException If the plan contains an unsupported opcodeTest cases 6
ExpressionKindTest::testIntrinsicExpressionsRetainRegisteredOperationNamescallsPlanCompilerTest::testExpressionLowersParameterReadsThroughStoragecallsPlanCompilerTest::testExpressionPreservesTheOpcodePayloadAndOperandOrdercallsPlanCompilerTest::testExpressionReadsADeclaredParameterLocationcallsPlanCompilerTest::testExpressionReadsAnAbstractSlotThroughItsReceiverAddresscallsPlanCompilerTest::testExpressionRejectsAReadWithoutItsLocationcalls
Called from 6
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:38
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::expression() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:89
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:29
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::arguments() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:54
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:36
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:41
Calls 18
- class-const ExpressionKind::LocationRead() line 86
- method-call PlanCompiler::emit() line 87
- method-call PlanLocations::address() line 87
- new PlanLocations line 87
- function-call
array_mapline 89 - method-call PlanCompiler::expression() line 89
- class-const ExpressionKind::Parameter() line 90
- class-const ExpressionKind::State() line 93
- function-call
in_arrayline 96 - class-const ExpressionKind::Constant() line 96
- class-const ExpressionKind::Binary() line 96
- class-const ExpressionKind::Unary() line 96
- class-const ExpressionKind::Cast() line 96
- class-const ExpressionKind::Intrinsic() line 96
- class-const ExpressionKind::External() line 96
- class-const ExpressionKind::ArrayRead() line 96
- class-const ExpressionKind::ArraySet() line 96
- new InvalidInputException line 97
public function actions(list<Action> $actions): voidLowers ordered actions, keeping callback exceptions and effects in the core.
Parameters
$actions | list<Action> | Plan actions |
Throws
InvalidInputException If the plan uses an unsupported actionTest cases 1
Called from 3
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::compile() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:57
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::choice() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:131
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::choice() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:134
Calls 2
- method-call PlanActions::apply() line 110
- new PlanActions line 110
public function choice(Action $action, string $condition): voidCreates correlated evaluator branches with one continuation.
Parameters
$action | Action | Conditional action |
$condition | string | Predicate register |
Test cases 1
Called from 1
Calls 5
- function-call
countline 123 - new Terminator line 129
- class-const TerminatorKind::Branch() line 129
- method-call PlanCompiler::actions() line 131
- class-const TerminatorKind::Jump() line 132
public function emit(
string $operation,
list<string> $operands = [],
string $name = '',
Term|null $constant = null,
list<Argument> $arguments = [],
array<string, scalar|null> $attributes = [],
): stringEmits one evaluator instruction with stable evaluator provenance.
Parameters
Returns
string Result registerTest cases 2
Called from 19
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:40
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:47
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:49
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:51
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:53
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:55
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::expression() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:87
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::expression() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:91
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::expression() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:94
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanCompiler::expression() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanCompiler.php:99
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:31
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:33
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:34
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:36
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:39
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::arguments() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:55
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:33
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:37
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:42
Calls 1
Test cases 67§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 11
PlanCompilerTest::testActionsStopsAfterACompletioncallsPlanCompilerTest::testChoiceKeepsBothCorrelatedCompletionscallsPlanCompilerTest::testCompilePreservesTheLexicalClassForRelativeReturnTypescallsPlanCompilerTest::testCompileRetainsSignatureDefaultsAndSourceMethodMetadatacallsPlanCompilerTest::testEmitAllocatesUniqueRegistersWithModelProvenancecallsPlanCompilerTest::testEmitRetainsArgumentsAttributesAndPerBlockProvenancecallsPlanCompilerTest::testExpressionLowersParameterReadsThroughStoragecallsPlanCompilerTest::testExpressionPreservesTheOpcodePayloadAndOperandOrdercallsPlanCompilerTest::testExpressionReadsADeclaredParameterLocationcallsPlanCompilerTest::testExpressionReadsAnAbstractSlotThroughItsReceiverAddresscallsPlanCompilerTest::testExpressionRejectsAReadWithoutItsLocationcalls
Other tests reaching this symbol 56
ArrayFunctionsTestcallsFunctionEvaluatorTestcallsLibraryTestcallsScalarFunctionsTestcallsTypePredicatesTestcallsCallDecisionTestcallsCallDescriptionTestcallsCallDescriptorTestcallsEvaluatorsTestcallsActionKindTest::testThrowActionsLowerToExceptionalControlFlowcallsActionTestcallsExpressionKindTest::testIntrinsicExpressionsRetainRegisteredOperationNamescallsExpressionTestcallsPlanActionsTest::testApplyAliasesTheDestinationToTheSourceCellcallsPlanActionsTest::testApplyBindsCompletionToItsExactValuecallsPlanActionsTest::testApplyConnectsAStateAddressToItsReceivercallsPlanActionsTest::testApplyKeepsBothChoiceCompletionsAndTheContinuationSeparatecallsPlanActionsTest::testApplyPreservesEveryHavocLocationAndExceptionalPossibilitycallsPlanActionsTest::testApplyPreservesTheWriteTargetAndOperandOrdercallsPlanActionsTest::testApplyRejectsMalformedStorageTargetscallsPlanActionsTest::testApplyReturnsAReferenceThroughCoreMemorycallsPlanActionsTest::testApplyRoutesEachInvocationThroughPreparedArgumentBindingcallsPlanInvocationsTest::testApplyPreparesCallBeforeItsArgumentscallsPlanInvocationsTest::testApplyPreservesCallbackArgumentOrderAndResultBindingcallsPlanInvocationsTest::testApplyRetainsTheReturnedCellWhenAReferenceResultIsRequestedcallsPlanInvocationsTest::testArgumentsDistinguishesAddressableStorageFromComputedValuescallsPlanInvocationsTest::testArgumentsPreservesNamedUnpackAndLocationMetadatacallsPlanInvocationsTest::testArgumentsSuppliesEarlierBindingsToEachLaterArgumentcallsPlanLocationsTest::testAddressBindsNestedElementsToTheirParentsAndEvaluatesKeysInOrdercallsPlanLocationsTest::testAddressPreservesAnExplicitStateReceiverAndSlotcallsPlanLocationsTest::testAddressPreservesAppendWithoutReadingStoragecallsPlanLocationsTest::testAddressRejectsMalformedDescriptorscallsPlanLocationsTest::testAddressRejectsMissingLocationComponentscallsPlanLocationsTest::testFromExpressionDefaultsMissingStateReceiverToThiscallsPlanLocationsTest::testFromExpressionRecognizesOnlyAddressableExpressionscallsPlanLocationsTest::testFromExpressionRetainsExistingLocationIdentityWithoutEmittingInstructionscallsSemanticPlanTestcallsParameterTestcallsSignatureTestcallsCallExecutorTestcallsCallResolutionTestcallsCaptureTestcallsInputsTestcallsAccessTestcallsInvocationTestcallsMethodInvocationTestcallsCreationTestcallsMethodsTestcallsResolutionTestcallsCollectionCallsTestcallsTransferTestcallsCountableCallsTestcallsIntrinsicTransferTestcallsObjectAccessTestcallsAssignmentLoweringTestcallsDestructuringLoweringTestcalls
Relations§
Instantiated in 3
- new Deriver\Deriver\Evaluator\CallEvaluation::evaluate() packages/deriver/src/Deriver/Evaluator/CallEvaluation.php:77
- new Deriver\Deriver\Evaluator\Execution\Call\CallResolution::body() packages/deriver/src/Deriver/Evaluator/Execution/Call/CallResolution.php:83
- new Deriver\Deriver\Evaluator\Execution\Call\Contract\Inputs::bindings() packages/deriver/src/Deriver/Evaluator/Execution/Call/Contract/Inputs.php:37
Method calls 24
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:38
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:40
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:47
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:49
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:51
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:53
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:55
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanActions::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:57
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:29
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:31
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:33
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:34
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:36
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::apply() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:39
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::arguments() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:54
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations::arguments() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:55
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:33
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:36
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:37
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:41
- method-call Deriver\Deriver\Evaluator\Call\Plan\PlanLocations::address() packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:42
- method-call Deriver\Deriver\Evaluator\CallEvaluation::evaluate() packages/deriver/src/Deriver/Evaluator/CallEvaluation.php:77
- method-call Deriver\Deriver\Evaluator\Execution\Call\CallResolution::body() packages/deriver/src/Deriver/Evaluator/Execution/Call/CallResolution.php:83
- method-call Deriver\Deriver\Evaluator\Execution\Call\Contract\Inputs::bindings() packages/deriver/src/Deriver/Evaluator/Execution/Call/Contract/Inputs.php:37
Type declarations 3
- type Deriver\Deriver\Evaluator\Call\Plan\PlanActions packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanActions.php:20
- type Deriver\Deriver\Evaluator\Call\Plan\PlanInvocations packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanInvocations.php:18
- type Deriver\Deriver\Evaluator\Call\Plan\PlanLocations packages/deriver/src/Deriver/Evaluator/Call/Plan/PlanLocations.php:19