summaryrefslogtreecommitdiff
path: root/source/luametatex/source/tex/texconditional.c
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2023-04-27 00:04:07 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2023-04-27 00:04:07 +0200
commit6b25a7a970ba9553adf8077ef2eecb50a5d77818 (patch)
treef06e40077ba9e55af4bf6cab52313f79f8ea84a8 /source/luametatex/source/tex/texconditional.c
parent657457ef4a08c1f000f272e00f654f4064cc37bd (diff)
downloadcontext-6b25a7a970ba9553adf8077ef2eecb50a5d77818.tar.gz
2023-04-26 23:31:00
Diffstat (limited to 'source/luametatex/source/tex/texconditional.c')
-rw-r--r--source/luametatex/source/tex/texconditional.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texconditional.c b/source/luametatex/source/tex/texconditional.c
index 40c704492..b2219e2ab 100644
--- a/source/luametatex/source/tex/texconditional.c
+++ b/source/luametatex/source/tex/texconditional.c
@@ -578,6 +578,36 @@ void tex_conditional_if(halfword code, int unless)
case if_zero_int_code:
result = tex_scan_int(0, NULL) == 0;
goto RESULT;
+ case if_abs_posit_code:
+ case if_posit_code:
+ {
+ halfword n1 = tex_scan_posit(0);
+ halfword cp = tex_aux_scan_comparison(code);
+ halfword n2 = tex_scan_posit(0);
+ if (code == if_abs_posit_code) {
+ tex_posit zero = tex_integer_to_posit(0);
+ if (tex_posit_lt(n1,zero.v)) {
+ n1 = tex_posit_neg(n1);
+ }
+ if (tex_posit_lt(n2,zero.v)) {
+ n2 = tex_posit_neg(n2);
+ }
+ }
+ switch (cp) {
+ case 0: result = tex_posit_eq(n1,n2); break;
+ case 1: result = tex_posit_lt(n1,n2); break;
+ case 2: result = tex_posit_gt(n1,n2); break;
+ case 3: result = tex_posit_ne(n1,n2); break;
+ case 4: result = tex_posit_gt(n1,n2); break;
+ case 5: result = tex_posit_lt(n1,n2); break;
+ case 6: result = tex_posit_eq(tex_integer_to_posit(tex_posit_to_integer(n1) & tex_posit_to_integer(n2)).v,n1); break;
+ case 7: result = tex_posit_ne(tex_integer_to_posit(tex_posit_to_integer(n1) & tex_posit_to_integer(n2)).v,n1); break;
+ }
+ }
+ goto RESULT;
+ case if_zero_posit_code:
+ result = tex_posit_eq_zero(tex_scan_posit(0));
+ goto RESULT;
case if_abs_dim_code:
case if_dim_code:
{