| 287 | }; |
| 288 | |
| 289 | absl::Status ContainerAccessStep::Evaluate(ExecutionFrame* frame) const { |
| 290 | if (!frame->value_stack().HasEnough(kNumContainerAccessArguments)) { |
| 291 | return absl::Status( |
| 292 | absl::StatusCode::kInternal, |
| 293 | "Insufficient arguments supplied for ContainerAccess-type expression"); |
| 294 | } |
| 295 | |
| 296 | Value result; |
| 297 | AttributeTrail result_trail; |
| 298 | auto args = frame->value_stack().GetSpan(kNumContainerAccessArguments); |
| 299 | const AttributeTrail& container_trail = |
| 300 | frame->value_stack().GetAttributeSpan(kNumContainerAccessArguments)[0]; |
| 301 | |
| 302 | PerformLookup(*frame, args[0], args[1], container_trail, |
| 303 | enable_optional_types_, result, result_trail); |
| 304 | frame->value_stack().PopAndPush(kNumContainerAccessArguments, |
| 305 | std::move(result), std::move(result_trail)); |
| 306 | |
| 307 | return absl::OkStatus(); |
| 308 | } |
| 309 | |
| 310 | class DirectContainerAccessStep : public DirectExpressionStep { |
| 311 | public: |
nothing calls this directly
no test coverage detected