Skip to content

Commit

Permalink
patch 9.0.0776: MSVC can't have field name "small"
Browse files Browse the repository at this point in the history
Problem:    MSVC can't have field name "small".
Solution:   Rename small to smallfont.
  • Loading branch information
brammool committed Oct 16, 2022
1 parent 2a46f81 commit 9d8620b
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 25 deletions.
2 changes: 1 addition & 1 deletion src/libvterm/include/vterm.h
Expand Up @@ -528,7 +528,7 @@ typedef struct {
unsigned int font : 4; /* 0 to 9 */
unsigned int dwl : 1; /* On a DECDWL or DECDHL line */
unsigned int dhl : 2; /* On a DECDHL line (1=top 2=bottom) */
unsigned int small : 1;
unsigned int smallfont : 1;
unsigned int baseline : 2;
} VTermScreenCellAttrs;

Expand Down
12 changes: 6 additions & 6 deletions src/libvterm/src/pen.c
Expand Up @@ -181,7 +181,7 @@ INTERNAL void vterm_state_resetpen(VTermState *state)
state->pen.conceal = 0; setpenattr_bool(state, VTERM_ATTR_CONCEAL, 0);
state->pen.strike = 0; setpenattr_bool(state, VTERM_ATTR_STRIKE, 0);
state->pen.font = 0; setpenattr_int (state, VTERM_ATTR_FONT, 0);
state->pen.small = 0; setpenattr_bool(state, VTERM_ATTR_SMALL, 0);
state->pen.smallfont = 0; setpenattr_bool(state, VTERM_ATTR_SMALL, 0);
state->pen.baseline = 0; setpenattr_int (state, VTERM_ATTR_BASELINE, 0);

state->pen.fg = state->default_fg; setpenattr_col(state, VTERM_ATTR_FOREGROUND, state->default_fg);
Expand All @@ -204,7 +204,7 @@ INTERNAL void vterm_state_savepen(VTermState *state, int save)
setpenattr_bool(state, VTERM_ATTR_CONCEAL, state->pen.conceal);
setpenattr_bool(state, VTERM_ATTR_STRIKE, state->pen.strike);
setpenattr_int (state, VTERM_ATTR_FONT, state->pen.font);
setpenattr_bool(state, VTERM_ATTR_SMALL, state->pen.small);
setpenattr_bool(state, VTERM_ATTR_SMALL, state->pen.smallfont);
setpenattr_int (state, VTERM_ATTR_BASELINE, state->pen.baseline);

setpenattr_col( state, VTERM_ATTR_FOREGROUND, state->pen.fg);
Expand Down Expand Up @@ -454,12 +454,12 @@ INTERNAL void vterm_state_setpen(VTermState *state, const long args[], int argco
case 73: // Superscript
case 74: // Subscript
case 75: // Superscript/subscript off
state->pen.small = (arg != 75);
state->pen.smallfont = (arg != 75);
state->pen.baseline =
(arg == 73) ? VTERM_BASELINE_RAISE :
(arg == 74) ? VTERM_BASELINE_LOWER :
VTERM_BASELINE_NORMAL;
setpenattr_bool(state, VTERM_ATTR_SMALL, state->pen.small);
setpenattr_bool(state, VTERM_ATTR_SMALL, state->pen.smallfont);
setpenattr_int (state, VTERM_ATTR_BASELINE, state->pen.baseline);
break;

Expand Down Expand Up @@ -560,7 +560,7 @@ INTERNAL int vterm_state_getpen(VTermState *state, long args[], int argcount UNU

argi = vterm_state_getpen_color(&state->pen.bg, argi, args, FALSE);

if(state->pen.small) {
if(state->pen.smallfont) {
if(state->pen.baseline == VTERM_BASELINE_RAISE)
args[argi++] = 73;
else if(state->pen.baseline == VTERM_BASELINE_LOWER)
Expand Down Expand Up @@ -614,7 +614,7 @@ int vterm_state_get_penattr(const VTermState *state, VTermAttr attr, VTermValue
return 1;

case VTERM_ATTR_SMALL:
val->boolean = state->pen.small;
val->boolean = state->pen.smallfont;
return 1;

case VTERM_ATTR_BASELINE:
Expand Down
12 changes: 6 additions & 6 deletions src/libvterm/src/rect.h
Expand Up @@ -35,13 +35,13 @@ static int rect_equal(VTermRect *a, VTermRect *b)
(a->end_col == b->end_col);
}

/* True if small is contained entirely within big */
static int rect_contains(VTermRect *big, VTermRect *small)
/* True if smallrect is contained entirely within big */
static int rect_contains(VTermRect *big, VTermRect *smallrect)
{
if(small->start_row < big->start_row) return 0;
if(small->start_col < big->start_col) return 0;
if(small->end_row > big->end_row) return 0;
if(small->end_col > big->end_col) return 0;
if(smallrect->start_row < big->start_row) return 0;
if(smallrect->start_col < big->start_col) return 0;
if(smallrect->end_row > big->end_row) return 0;
if(smallrect->end_col > big->end_col) return 0;
return 1;
}

Expand Down
10 changes: 5 additions & 5 deletions src/libvterm/src/screen.c
Expand Up @@ -26,7 +26,7 @@ typedef struct
unsigned int conceal : 1;
unsigned int strike : 1;
unsigned int font : 4; /* 0 to 9 */
unsigned int small : 1;
unsigned int smallfont : 1;
unsigned int baseline : 2;

/* Extra state storage that isn't strictly pen-related */
Expand Down Expand Up @@ -446,7 +446,7 @@ static int setpenattr(VTermAttr attr, VTermValue *val, void *user)
screen->pen.bg = val->color;
return 1;
case VTERM_ATTR_SMALL:
screen->pen.small = val->boolean;
screen->pen.smallfont = val->boolean;
return 1;
case VTERM_ATTR_BASELINE:
screen->pen.baseline = val->number;
Expand Down Expand Up @@ -700,7 +700,7 @@ static void resize_buffer(VTermScreen *screen, int bufidx, int new_rows, int new
dst->pen.conceal = src->attrs.conceal;
dst->pen.strike = src->attrs.strike;
dst->pen.font = src->attrs.font;
dst->pen.small = src->attrs.small;
dst->pen.smallfont = src->attrs.smallfont;
dst->pen.baseline = src->attrs.baseline;

dst->pen.fg = src->fg;
Expand Down Expand Up @@ -1014,7 +1014,7 @@ int vterm_screen_get_cell(const VTermScreen *screen, VTermPos pos, VTermScreenCe
cell->attrs.conceal = intcell->pen.conceal;
cell->attrs.strike = intcell->pen.strike;
cell->attrs.font = intcell->pen.font;
cell->attrs.small = intcell->pen.small;
cell->attrs.smallfont = intcell->pen.smallfont;
cell->attrs.baseline = intcell->pen.baseline;

cell->attrs.dwl = intcell->pen.dwl;
Expand Down Expand Up @@ -1158,7 +1158,7 @@ static int attrs_differ(VTermAttrMask attrs, ScreenCell *a, ScreenCell *b)
return 1;
if((attrs & VTERM_ATTR_BACKGROUND_MASK) && !vterm_color_is_equal(&a->pen.bg, &b->pen.bg))
return 1;
if((attrs & VTERM_ATTR_SMALL_MASK) && (a->pen.small != b->pen.small))
if((attrs & VTERM_ATTR_SMALL_MASK) && (a->pen.smallfont != b->pen.smallfont))
return 1;
if((attrs & VTERM_ATTR_BASELINE_MASK) && (a->pen.baseline != b->pen.baseline))
return 1;
Expand Down
2 changes: 1 addition & 1 deletion src/libvterm/src/vterm_internal.h
Expand Up @@ -60,7 +60,7 @@ struct VTermPen
unsigned int conceal:1;
unsigned int strike:1;
unsigned int font:4; /* To store 0-9 */
unsigned int small:1;
unsigned int smallfont:1;
unsigned int baseline:2;
};

Expand Down
12 changes: 6 additions & 6 deletions src/libvterm/t/harness.c
Expand Up @@ -410,7 +410,7 @@ static struct {
int conceal;
int strike;
int font;
int small;
int smallfont;
int baseline;
VTermColor foreground;
VTermColor background;
Expand Down Expand Up @@ -443,7 +443,7 @@ static int state_setpenattr(VTermAttr attr, VTermValue *val, void *user UNUSED)
state_pen.font = val->number;
break;
case VTERM_ATTR_SMALL:
state_pen.small = val->boolean;
state_pen.smallfont = val->boolean;
break;
case VTERM_ATTR_BASELINE:
state_pen.baseline = val->number;
Expand Down Expand Up @@ -1015,11 +1015,11 @@ int main(int argc UNUSED, char **argv UNUSED)
}
else if(streq(linep, "small")) {
vterm_state_get_penattr(state, VTERM_ATTR_SMALL, &val);
if(val.boolean != state_pen.small)
if(val.boolean != state_pen.smallfont)
printf("! pen small mismatch; state=%s, event=%s\n",
BOOLSTR(val.boolean), BOOLSTR(state_pen.small));
BOOLSTR(val.boolean), BOOLSTR(state_pen.smallfont));
else
printf("%s\n", BOOLSTR(state_pen.small));
printf("%s\n", BOOLSTR(state_pen.smallfont));
}
else if(streq(linep, "baseline")) {
vterm_state_get_penattr(state, VTERM_ATTR_BASELINE, &val);
Expand Down Expand Up @@ -1160,7 +1160,7 @@ int main(int argc UNUSED, char **argv UNUSED)
if(cell.attrs.blink) printf("K");
if(cell.attrs.reverse) printf("R");
if(cell.attrs.font) printf("F%d", cell.attrs.font);
if(cell.attrs.small) printf("S");
if(cell.attrs.smallfont) printf("S");
if(cell.attrs.baseline) printf(
cell.attrs.baseline == VTERM_BASELINE_RAISE ? "^" :
"_");
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
776,
/**/
775,
/**/
Expand Down

4 comments on commit 9d8620b

@k-takata
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/vim/vim/actions/runs/3260522361/jobs/5354144363#step:8:63

D:\a\vim\vim\src\libvterm/include/vterm.h(531): error C2632: 'int' followed by 'char' is illegal

This error is caused because rpcndr.h in Windows SDK has the following definition: #define small char
Undefine small after including windows.h may also solve this error.

@brammool
Copy link
Contributor Author

@brammool brammool commented on 9d8620b Oct 17, 2022 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@k-takata
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I confirmed that applying the following patch on top of 9.0.0775 works as expected:

--- a/src/os_win32.h
+++ b/src/os_win32.h
@@ -86,6 +86,7 @@
 #endif
 #ifndef PROTO
 # include <windows.h>
+# undef small
 # ifndef SM_CXPADDEDBORDER
 #  define SM_CXPADDEDBORDER     92
 # endif

In my understanding, #undef can be safely used even for a non-defined symbol, so #ifdef small might be redundant.

@brammool
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I've done that in patch 9.0.0781

Please sign in to comment.