@@ -390,7 +390,6 @@ std::optional<NodeInfo> ConsumeNodeStable(MsCtx script_ctx, FuzzedDataProvider&
390390 bool allow_K = (type_needed == " " _mst) || (type_needed << " K" _mst);
391391 bool allow_V = (type_needed == " " _mst) || (type_needed << " V" _mst);
392392 bool allow_W = (type_needed == " " _mst) || (type_needed << " W" _mst);
393- static constexpr auto B{" B" _mst}, K{" K" _mst}, V{" V" _mst}, W{" W" _mst};
394393
395394 switch (provider.ConsumeIntegral <uint8_t >()) {
396395 case 0 :
@@ -440,22 +439,22 @@ std::optional<NodeInfo> ConsumeNodeStable(MsCtx script_ctx, FuzzedDataProvider&
440439 }
441440 case 11 :
442441 if (!(allow_B || allow_K || allow_V)) return {};
443- return {{{B , type_needed, type_needed}, Fragment::ANDOR}};
442+ return {{{" B " _mst , type_needed, type_needed}, Fragment::ANDOR}};
444443 case 12 :
445444 if (!(allow_B || allow_K || allow_V)) return {};
446- return {{{V , type_needed}, Fragment::AND_V}};
445+ return {{{" V " _mst , type_needed}, Fragment::AND_V}};
447446 case 13 :
448447 if (!allow_B) return {};
449- return {{{B, W }, Fragment::AND_B}};
448+ return {{{" B " _mst, " W " _mst }, Fragment::AND_B}};
450449 case 15 :
451450 if (!allow_B) return {};
452- return {{{B, W }, Fragment::OR_B}};
451+ return {{{" B " _mst, " W " _mst }, Fragment::OR_B}};
453452 case 16 :
454453 if (!allow_V) return {};
455- return {{{B, V }, Fragment::OR_C}};
454+ return {{{" B " _mst, " V " _mst }, Fragment::OR_C}};
456455 case 17 :
457456 if (!allow_B) return {};
458- return {{{B, B }, Fragment::OR_D}};
457+ return {{{" B " _mst, " B " _mst }, Fragment::OR_D}};
459458 case 18 :
460459 if (!(allow_B || allow_K || allow_V)) return {};
461460 return {{{type_needed, type_needed}, Fragment::OR_I}};
@@ -472,25 +471,25 @@ std::optional<NodeInfo> ConsumeNodeStable(MsCtx script_ctx, FuzzedDataProvider&
472471 }
473472 case 20 :
474473 if (!allow_W) return {};
475- return {{{B }, Fragment::WRAP_A}};
474+ return {{{" B " _mst }, Fragment::WRAP_A}};
476475 case 21 :
477476 if (!allow_W) return {};
478- return {{{B }, Fragment::WRAP_S}};
477+ return {{{" B " _mst }, Fragment::WRAP_S}};
479478 case 22 :
480479 if (!allow_B) return {};
481- return {{{K }, Fragment::WRAP_C}};
480+ return {{{" K " _mst }, Fragment::WRAP_C}};
482481 case 23 :
483482 if (!allow_B) return {};
484- return {{{V }, Fragment::WRAP_D}};
483+ return {{{" V " _mst }, Fragment::WRAP_D}};
485484 case 24 :
486485 if (!allow_V) return {};
487- return {{{B }, Fragment::WRAP_V}};
486+ return {{{" B " _mst }, Fragment::WRAP_V}};
488487 case 25 :
489488 if (!allow_B) return {};
490- return {{{B }, Fragment::WRAP_J}};
489+ return {{{" B " _mst }, Fragment::WRAP_J}};
491490 case 26 :
492491 if (!allow_B) return {};
493- return {{{B }, Fragment::WRAP_N}};
492+ return {{{" B " _mst }, Fragment::WRAP_N}};
494493 case 27 : {
495494 if (!allow_B || !IsTapscript (script_ctx)) return {};
496495 const auto k = provider.ConsumeIntegral <uint16_t >();
@@ -528,23 +527,20 @@ struct SmartInfo
528527 {
529528 /* Construct a set of interesting type requirements to reason with (sections of BKVWzondu). */
530529 std::vector<Type> types;
531- static constexpr auto B_mst{" B" _mst}, K_mst{" K" _mst}, V_mst{" V" _mst}, W_mst{" W" _mst};
532- static constexpr auto d_mst{" d" _mst}, n_mst{" n" _mst}, o_mst{" o" _mst}, u_mst{" u" _mst}, z_mst{" z" _mst};
533- static constexpr auto NONE_mst{" " _mst};
534530 for (int base = 0 ; base < 4 ; ++base) { /* select from B,K,V,W */
535- Type type_base = base == 0 ? B_mst : base == 1 ? K_mst : base == 2 ? V_mst : W_mst ;
531+ Type type_base = base == 0 ? " B " _mst : base == 1 ? " K " _mst : base == 2 ? " V " _mst : " W " _mst ;
536532 for (int zo = 0 ; zo < 3 ; ++zo) { /* select from z,o,(none) */
537- Type type_zo = zo == 0 ? z_mst : zo == 1 ? o_mst : NONE_mst ;
533+ Type type_zo = zo == 0 ? " z " _mst : zo == 1 ? " o " _mst : " " _mst ;
538534 for (int n = 0 ; n < 2 ; ++n) { /* select from (none),n */
539535 if (zo == 0 && n == 1 ) continue ; /* z conflicts with n */
540536 if (base == 3 && n == 1 ) continue ; /* W conflicts with n */
541- Type type_n = n == 0 ? NONE_mst : n_mst ;
537+ Type type_n = n == 0 ? " " _mst : " n " _mst ;
542538 for (int d = 0 ; d < 2 ; ++d) { /* select from (none),d */
543539 if (base == 2 && d == 1 ) continue ; /* V conflicts with d */
544- Type type_d = d == 0 ? NONE_mst : d_mst ;
540+ Type type_d = d == 0 ? " " _mst : " d " _mst ;
545541 for (int u = 0 ; u < 2 ; ++u) { /* select from (none),u */
546542 if (base == 2 && u == 1 ) continue ; /* V conflicts with u */
547- Type type_u = u == 0 ? NONE_mst : u_mst ;
543+ Type type_u = u == 0 ? " " _mst : " u " _mst ;
548544 Type type = type_base | type_zo | type_n | type_d | type_u;
549545 types.push_back (type);
550546 }
@@ -686,7 +682,7 @@ struct SmartInfo
686682 /* Find which types are useful. The fuzzer logic only cares about constructing
687683 * B,V,K,W nodes, so any type that isn't needed in any recipe (directly or
688684 * indirectly) for the construction of those is uninteresting. */
689- std::set<Type> useful_types{B_mst, V_mst, K_mst, W_mst };
685+ std::set<Type> useful_types{" B " _mst, " V " _mst, " K " _mst, " W " _mst };
690686 // Find the transitive closure by adding types until the set of types does not change.
691687 while (true ) {
692688 size_t set_size = useful_types.size ();
0 commit comments