@@ -60660,7 +60660,7 @@ char* ecs_rule_str_w_profile(
6066060660
6066160661#ifdef FLECS_LOG
6066260662 char *str = ecs_strbuf_get(&buf);
60663- flecs_colorize_buf(str, true , &buf);
60663+ flecs_colorize_buf(str, ecs_os_api.flags_ & EcsOsApiLogWithColors , &buf);
6066460664 ecs_os_free(str);
6066560665#endif
6066660666 return ecs_strbuf_get(&buf);
@@ -62462,6 +62462,24 @@ int flecs_rule_compile_term(
6246262462 return -1;
6246362463}
6246462464
62465+ static
62466+ bool flecs_rule_var_is_unknown(
62467+ ecs_rule_t *rule,
62468+ ecs_var_id_t var_id,
62469+ ecs_rule_compile_ctx_t *ctx)
62470+ {
62471+ ecs_rule_var_t *vars = rule->vars;
62472+ if (ctx->written & (1ull << var_id)) {
62473+ return false;
62474+ } else {
62475+ ecs_var_id_t table_var = vars[var_id].table_id;
62476+ if (table_var != EcsVarNone) {
62477+ return flecs_rule_var_is_unknown(rule, table_var, ctx);
62478+ }
62479+ }
62480+ return true;
62481+ }
62482+
6246562483static
6246662484bool flecs_rule_term_is_unknown(
6246762485 ecs_rule_t *rule,
@@ -62473,7 +62491,7 @@ bool flecs_rule_term_is_unknown(
6247362491 &dummy.first, EcsRuleFirst, EcsVarEntity, ctx, false);
6247462492 flecs_rule_compile_term_id(NULL, rule, &dummy, &term->second,
6247562493 &dummy.second, EcsRuleSecond, EcsVarEntity, ctx, false);
62476- flecs_rule_compile_term_id(NULL, rule, &dummy, &term->second ,
62494+ flecs_rule_compile_term_id(NULL, rule, &dummy, &term->src ,
6247762495 &dummy.src, EcsRuleSrc, EcsVarAny, ctx, false);
6247862496
6247962497 bool has_vars = dummy.flags &
@@ -62487,17 +62505,17 @@ bool flecs_rule_term_is_unknown(
6248762505 }
6248862506
6248962507 if (dummy.flags & (EcsRuleIsVar << EcsRuleFirst)) {
62490- if (ctx->written & (1 << dummy.first.var)) {
62508+ if (!flecs_rule_var_is_unknown(rule, dummy.first.var, ctx )) {
6249162509 return false;
6249262510 }
6249362511 }
6249462512 if (dummy.flags & (EcsRuleIsVar << EcsRuleSecond)) {
62495- if (ctx->written & (1 << dummy.second.var)) {
62513+ if (!flecs_rule_var_is_unknown(rule, dummy.second.var, ctx )) {
6249662514 return false;
6249762515 }
6249862516 }
6249962517 if (dummy.flags & (EcsRuleIsVar << EcsRuleSrc)) {
62500- if (ctx->written & (1 << dummy.src.var)) {
62518+ if (!flecs_rule_var_is_unknown(rule, dummy.src.var, ctx )) {
6250162519 return false;
6250262520 }
6250362521 }
@@ -62518,7 +62536,7 @@ int32_t flecs_rule_term_next_known(
6251862536
6251962537 for (i = offset; i < count; i ++) {
6252062538 ecs_term_t *term = &terms[i];
62521- if (compiled & (1 << i)) {
62539+ if (compiled & (1ull << i)) {
6252262540 continue;
6252362541 }
6252462542
@@ -62593,7 +62611,7 @@ int flecs_rule_compile(
6259362611 ecs_term_t *term = &terms[i];
6259462612 int32_t compile = i;
6259562613
62596- if (compiled & (1 << i)) {
62614+ if (compiled & (1ull << i)) {
6259762615 continue; /* Already compiled */
6259862616 }
6259962617
@@ -62623,7 +62641,7 @@ int flecs_rule_compile(
6262362641 return -1;
6262462642 }
6262562643
62626- compiled |= (1 << compile);
62644+ compiled |= (1ull << compile);
6262762645 }
6262862646
6262962647 ecs_var_id_t this_id = flecs_rule_find_var_id(rule, "This", EcsVarEntity);
0 commit comments