summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/linebreak.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/linebreak.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/linebreak.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/linebreak.c b/Build/source/texk/web2c/luatexdir/tex/linebreak.c
index d31a63236a8..3da4b1386a0 100644
--- a/Build/source/texk/web2c/luatexdir/tex/linebreak.c
+++ b/Build/source/texk/web2c/luatexdir/tex/linebreak.c
@@ -114,9 +114,9 @@ void line_break(boolean d, int line_break_context)
tail_append(new_penalty(inf_penalty,line_penalty));
} else {
halfword t = alink(cur_list.tail_field);
- flush_node(cur_list.tail_field);
- cur_list.tail_field = t;
- tail_append(new_penalty(inf_penalty,line_penalty));
+ flush_node(cur_list.tail_field);
+ cur_list.tail_field = t;
+ tail_append(new_penalty(inf_penalty,line_penalty));
}
final_par_glue = new_param_glue(par_fill_skip_code);
couple_nodes(cur_list.tail_field, final_par_glue);
@@ -1811,8 +1811,16 @@ static void ext_try_break(
else
d += final_hyphen_demerits;
}
- if (abs(fit_class - fitness(r)) > 1)
- d = d + adj_demerits;
+ /*tex
+
+ Direct calculation of the absolute value of ((|fit_class| - |fitness(r)|) > 1) where
+ |fitness(r)| is an unsigned integral type can lead to unexpected results if
+ |fitness(r)| is not an |int|, due to the rules of integer promotions.
+ It's better to use the equivalent expanded expression.
+ */
+ if ( (fit_class>(fitness(r)+1)) || (fitness(r)>(fit_class+1)) )
+ d = d + adj_demerits;
+
}
if (tracing_paragraphs > 0) {
print_feasible_break(cur_p, r, b, pi, d, artificial_demerits);