diff --git a/src/xdiff/xdiffi.c b/src/xdiff/xdiffi.c
index 96d5277..3806903 100644
--- a/src/xdiff/xdiffi.c
+++ b/src/xdiff/xdiffi.c
@@ -418,24 +418,24 @@
 			ret += 1;
 		else if (c == '\t')
 			ret += 8 - ret % 8;
-		/* ignore other whitespace characters */
+		// ignore other whitespace characters
 
 		if (ret >= MAX_INDENT)
 			return MAX_INDENT;
 	}
 
-	/* The line contains only whitespace. */
+	// The line contains only whitespace.
 	return -1;
 }
 
 /*
- * If more than this number of consecutive blank rows are found, just return this
- * value. This avoids requiring O(N^2) work for pathological cases, and also
- * ensures that the output of score_split fits in an int.
+ * If more than this number of consecutive blank rows are found, just return
+ * this value. This avoids requiring O(N^2) work for pathological cases, and
+ * also ensures that the output of score_split fits in an int.
  */
 #define MAX_BLANKS 20
 
-/* Characteristics measured about a hypothetical split position. */
+// Characteristics measured about a hypothetical split position.
 struct split_measurement {
 	/*
 	 * Is the split at the end of the file (aside from any blank lines)?
@@ -472,10 +472,10 @@
 };
 
 struct split_score {
-	/* The effective indent of this split (smaller is preferred). */
+	// The effective indent of this split (smaller is preferred).
 	int effective_indent;
 
-	/* Penalty for this split (smaller is preferred). */
+	// Penalty for this split (smaller is preferred).
 	int penalty;
 };
 
@@ -534,16 +534,16 @@
  * integer math.
  */
 
-/* Penalty if there are no non-blank lines before the split */
+// Penalty if there are no non-blank lines before the split
 #define START_OF_FILE_PENALTY 1
 
-/* Penalty if there are no non-blank lines after the split */
+// Penalty if there are no non-blank lines after the split
 #define END_OF_FILE_PENALTY 21
 
-/* Multiplier for the number of blank lines around the split */
+// Multiplier for the number of blank lines around the split
 #define TOTAL_BLANK_WEIGHT (-30)
 
-/* Multiplier for the number of blank lines after the split */
+// Multiplier for the number of blank lines after the split
 #define POST_BLANK_WEIGHT 6
 
 /*
@@ -610,7 +610,7 @@
 	post_blank = (m->indent == -1) ? 1 + m->post_blank : 0;
 	total_blank = m->pre_blank + post_blank;
 
-	/* Penalties based on nearby blank lines: */
+	// Penalties based on nearby blank lines:
 	s->penalty += TOTAL_BLANK_WEIGHT * total_blank;
 	s->penalty += POST_BLANK_WEIGHT * post_blank;
 
@@ -621,13 +621,13 @@
 
 	any_blanks = (total_blank != 0);
 
-	/* Note that the effective indent is -1 at the end of the file: */
+	// Note that the effective indent is -1 at the end of the file:
 	s->effective_indent += indent;
 
 	if (indent == -1) {
-		/* No additional adjustments needed. */
+		// No additional adjustments needed.
 	} else if (m->pre_indent == -1) {
-		/* No additional adjustments needed. */
+		// No additional adjustments needed.
 	} else if (indent > m->pre_indent) {
 		/*
 		 * The line is indented more than its predecessor.
@@ -669,7 +669,7 @@
 
 static int score_cmp(struct split_score *s1, struct split_score *s2)
 {
-	/* -1 if s1.effective_indent < s2->effective_indent, etc. */
+	// -1 if s1.effective_indent < s2->effective_indent, etc.
 	int cmp_indents = ((s1->effective_indent > s2->effective_indent) -
 			   (s1->effective_indent < s2->effective_indent));
 
@@ -809,7 +809,7 @@
 	group_init(xdfo, &go);
 
 	while (1) {
-		/* If the group is empty in the to-be-compacted file, skip it: */
+		// If the group is empty in the to-be-compacted file, skip it:
 		if (g.end == g.start)
 			goto next;
 
@@ -828,7 +828,7 @@
 			 */
 			end_matching_other = -1;
 
-			/* Shift the group backward as much as possible: */
+			// Shift the group backward as much as possible:
 			while (!group_slide_up(xdf, &g, flags))
 				if (group_previous(xdfo, &go))
 					xdl_bug("group sync broken sliding up");
@@ -842,7 +842,7 @@
 			if (go.end > go.start)
 				end_matching_other = g.end;
 
-			/* Now shift the group forward as far as possible: */
+			// Now shift the group forward as far as possible:
 			while (1) {
 				if (group_slide_down(xdf, &g, flags))
 					break;
@@ -863,7 +863,7 @@
 		 */
 
 		if (g.end == earliest_end) {
-			/* no shifting was possible */
+			// no shifting was possible
 		} else if (end_matching_other != -1) {
 			/*
 			 * Move the possibly merged group of changes back to line
@@ -921,7 +921,7 @@
 		}
 
 	next:
-		/* Move past the just-processed group: */
+		// Move past the just-processed group:
 		if (group_next(xdf, &g))
 			break;
 		if (group_next(xdfo, &go))
