@@ -2303,18 +2303,25 @@ auto compiler_draft3_applicator_extends(const Context &context,
23032303 sourcemeta::core::empty_weak_pointer);
23042304 }
23052305
2306+ auto inner{compile (context, schema_context, relative_dynamic_context (),
2307+ sourcemeta::core::empty_weak_pointer,
2308+ sourcemeta::core::empty_weak_pointer)};
2309+ if (inner.empty ()) {
2310+ return {};
2311+ }
2312+
23062313 return {make (sourcemeta::blaze::InstructionIndex::LogicalAnd, context,
23072314 schema_context, dynamic_context, ValueNone{},
2308- compile (context, schema_context, relative_dynamic_context (),
2309- sourcemeta::core::empty_weak_pointer,
2310- sourcemeta::core::empty_weak_pointer))};
2315+ std::move (inner))};
23112316 }
23122317
23132318 if (!value.is_array ()) {
23142319 return {};
23152320 }
23162321
2317- assert (!value.empty ());
2322+ if (value.empty ()) {
2323+ return {};
2324+ }
23182325
23192326 Instructions children;
23202327
@@ -2331,11 +2338,19 @@ auto compiler_draft3_applicator_extends(const Context &context,
23312338 }
23322339
23332340 for (std::uint64_t index = 0 ; index < value.size (); index++) {
2334- for (auto &&step : compile (
2335- context, schema_context, relative_dynamic_context (),
2336- {static_cast <sourcemeta::core::Pointer::Token::Index>(index)})) {
2337- children.push_back (std::move (step));
2341+ auto arm{
2342+ compile (context, schema_context, relative_dynamic_context (),
2343+ {static_cast <sourcemeta::core::Pointer::Token::Index>(index)})};
2344+ if (arm.empty ()) {
2345+ continue ;
23382346 }
2347+ children.push_back (make (sourcemeta::blaze::InstructionIndex::ControlGroup,
2348+ context, schema_context, relative_dynamic_context (),
2349+ ValueNone{}, std::move (arm)));
2350+ }
2351+
2352+ if (children.empty ()) {
2353+ return {};
23392354 }
23402355
23412356 return {make (sourcemeta::blaze::InstructionIndex::LogicalAnd, context,
0 commit comments