Skip to content

Commit e335c81

Browse files
gh-39: Fix TNS truthiness.
1 parent b703631 commit e335c81

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

src/interpreter.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,44 @@ int value_truthiness(Value v) {
495495
return 1; // Functions are always truthy
496496
case VAL_THR:
497497
return value_thr_is_running(v);
498+
case VAL_TNS: {
499+
Tensor* t = v.as.tns;
500+
if (!t || t->length == 0) return 0;
501+
for (size_t i = 0; i < t->length; i++) {
502+
Value e = t->data[i];
503+
switch (e.type) {
504+
case VAL_INT:
505+
if (e.as.i != 0) return 1;
506+
break;
507+
case VAL_FLT:
508+
if (e.as.f != 0.0) return 1;
509+
break;
510+
case VAL_STR:
511+
if (e.as.s && e.as.s[0] != '\0') return 1;
512+
break;
513+
case VAL_FUNC:
514+
return 1;
515+
case VAL_THR:
516+
if (value_thr_is_running(e)) return 1;
517+
break;
518+
case VAL_TNS:
519+
if (value_truthiness(e)) return 1;
520+
break;
521+
case VAL_MAP: {
522+
struct Map* m = e.as.map;
523+
if (m) {
524+
for (size_t j = 0; j < m->count; j++) {
525+
if (value_truthiness(m->items[j].value)) return 1;
526+
}
527+
}
528+
break;
529+
}
530+
default:
531+
break;
532+
}
533+
}
534+
return 0;
535+
}
498536
default:
499537
return 0;
500538
}

0 commit comments

Comments
 (0)