Hi Bram and list,

Title is as it is.

Merit:
- Compiler optimizations will be a bit smarter.
- Execution speed will be a bit faster.
- Compiler us warn the code assignment wrong.

Demerit:
- None. (maybe)

I made a patch for proposal.
How about this?

When it's Okay, I'll continue with the remaining of the work.
--
Best regards,
Hirohito Higashi (a.k.a. h_east)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/buffer.c b/src/buffer.c
index b013295..b2fe5fa 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -377,7 +377,7 @@ set_bufref(bufref_T *bufref, buf_T *buf)
  * Only goes through the buffer list if buf_free_count changed.
  */
     int
-bufref_valid(bufref_T *bufref)
+bufref_valid(const bufref_T *bufref)
 {
     return bufref->br_buf_free_count == buf_free_count
 					   ? TRUE : buf_valid(bufref->br_buf);
@@ -388,7 +388,7 @@ bufref_valid(bufref_T *bufref)
  * This can be slow if there are many buffers, prefer using bufref_valid().
  */
     int
-buf_valid(buf_T *buf)
+buf_valid(const buf_T *buf)
 {
     buf_T	*bp;
 
diff --git a/src/eval.c b/src/eval.c
index 6873b97..5ec9733 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6696,7 +6696,7 @@ v_throwpoint(char_u *oldval)
  * Must always be called in pairs!
  */
     char_u *
-set_cmdarg(exarg_T *eap, char_u *oldarg)
+set_cmdarg(const exarg_T *eap, char_u *oldarg)
 {
     char_u	*oldval;
     char_u	*newval;
diff --git a/src/fileio.c b/src/fileio.c
index ea1f338..44f381d 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7780,7 +7780,7 @@ static char_u *find_end_event(char_u *arg, int have_group);
 static int event_ignored(event_T event);
 static int au_get_grouparg(char_u **argp);
 static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group);
-static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap);
+static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, const buf_T *buf, const exarg_T *eap);
 static void auto_next_pat(AutoPatCmd *apc, int stop_at_last);
 #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN)
 static int match_file_pat(char_u *pattern, regprog_T **prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs);
@@ -7949,7 +7949,7 @@ au_cleanup(void)
  * autocmds.
  */
     void
-aubuflocal_remove(buf_T *buf)
+aubuflocal_remove(const buf_T *buf)
 {
     AutoPat	*ap;
     event_T	event;
@@ -9098,7 +9098,7 @@ apply_autocmds(
     char_u	*fname,	    /* NULL or empty means use actual file name */
     char_u	*fname_io,  /* fname to use for <afile> on cmdline */
     int		force,	    /* when TRUE, ignore autocmd_busy */
-    buf_T	*buf)	    /* buffer for <abuf> */
+    const buf_T	*buf)	    /* buffer for <abuf> */
 {
     return apply_autocmds_group(event, fname, fname_io, force,
 						      AUGROUP_ALL, buf, NULL);
@@ -9263,8 +9263,8 @@ apply_autocmds_group(
 			       use fname */
     int		force,	    /* when TRUE, ignore autocmd_busy */
     int		group,	    /* group ID, or AUGROUP_ALL */
-    buf_T	*buf,	    /* buffer for <abuf> */
-    exarg_T	*eap)	    /* command arguments */
+    const buf_T	*buf,	    /* buffer for <abuf> */
+    const exarg_T *eap)	    /* command arguments */
 {
     char_u	*sfname = NULL;	/* short file name */
     char_u	*tail;
diff --git a/src/fold.c b/src/fold.c
index d3635a6..42d92ab 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -100,7 +100,7 @@ static int foldendmarkerlen;
  * Copy that folding state from window "wp_from" to window "wp_to".
  */
     void
-copyFoldingState(win_T *wp_from, win_T *wp_to)
+copyFoldingState(const win_T *wp_from, win_T *wp_to)
 {
     wp_to->w_fold_manual = wp_from->w_fold_manual;
     wp_to->w_foldinvalid = wp_from->w_foldinvalid;
@@ -1083,17 +1083,17 @@ foldAdjustCursor(void)
  * Return FAIL if the operation cannot be completed, otherwise OK.
  */
     void
-cloneFoldGrowArray(garray_T *from, garray_T *to)
+cloneFoldGrowArray(const garray_T *from, garray_T *to)
 {
     int		i;
-    fold_T	*from_p;
+    const fold_T *from_p;
     fold_T	*to_p;
 
     ga_init2(to, from->ga_itemsize, from->ga_growsize);
     if (from->ga_len == 0 || ga_grow(to, from->ga_len) == FAIL)
 	return;
 
-    from_p = (fold_T *)from->ga_data;
+    from_p = (const fold_T *)from->ga_data;
     to_p = (fold_T *)to->ga_data;
 
     for (i = 0; i < from->ga_len; i++)
diff --git a/src/mark.c b/src/mark.c
index 0627a7c..04e7abf 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -1315,7 +1315,7 @@ cleanup_jumplist(void)
  * Copy the jumplist from window "from" to window "to".
  */
     void
-copy_jumplist(win_T *from, win_T *to)
+copy_jumplist(const win_T *from, win_T *to)
 {
     int		i;
 
diff --git a/src/option.c b/src/option.c
index 2d5f3b8..fe0113e 100644
--- a/src/option.c
+++ b/src/option.c
@@ -10489,7 +10489,7 @@ get_equalprg(void)
  * Used when splitting a window.
  */
     void
-win_copy_options(win_T *wp_from, win_T *wp_to)
+win_copy_options(const win_T *wp_from, win_T *wp_to)
 {
     copy_winopt(&wp_from->w_onebuf_opt, &wp_to->w_onebuf_opt);
     copy_winopt(&wp_from->w_allbuf_opt, &wp_to->w_allbuf_opt);
@@ -10512,7 +10512,7 @@ win_copy_options(win_T *wp_from, win_T *wp_to)
  * The 'previewwindow' option is reset, there can be only one preview window.
  */
     void
-copy_winopt(winopt_T *from, winopt_T *to)
+copy_winopt(const winopt_T *from, winopt_T *to)
 {
 #ifdef FEAT_ARABIC
     to->wo_arab = from->wo_arab;
diff --git a/src/proto/buffer.pro b/src/proto/buffer.pro
index 183f79a..4ebf662 100644
--- a/src/proto/buffer.pro
+++ b/src/proto/buffer.pro
@@ -1,8 +1,8 @@
 /* buffer.c */
 int open_buffer(int read_stdin, exarg_T *eap, int flags);
 void set_bufref(bufref_T *bufref, buf_T *buf);
-int bufref_valid(bufref_T *bufref);
-int buf_valid(buf_T *buf);
+int bufref_valid(const bufref_T *bufref);
+int buf_valid(const buf_T *buf);
 void close_buffer(win_T *win, buf_T *buf, int action, int abort_if_last);
 void buf_clear_file(buf_T *buf);
 void buf_freeall(buf_T *buf, int flags);
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index edca43e..30f6eb1 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -72,7 +72,7 @@ void set_vim_var_dict(int idx, dict_T *val);
 void set_reg_var(int c);
 char_u *v_exception(char_u *oldval);
 char_u *v_throwpoint(char_u *oldval);
-char_u *set_cmdarg(exarg_T *eap, char_u *oldarg);
+char_u *set_cmdarg(const exarg_T *eap, char_u *oldarg);
 int get_var_tv(char_u *name, int len, typval_T *rettv, dictitem_T **dip, int verbose, int no_autoload);
 int handle_subscript(char_u **arg, typval_T *rettv, int evaluate, int verbose);
 typval_T *alloc_tv(void);
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index 30582d4..99e7d06 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -27,7 +27,7 @@ int delete_recursive(char_u *name);
 void vim_deltempdir(void);
 char_u *vim_tempname(int extra_char, int keep);
 void forward_slash(char_u *fname);
-void aubuflocal_remove(buf_T *buf);
+void aubuflocal_remove(const buf_T *buf);
 int au_has_group(char_u *name);
 void do_augroup(char_u *arg, int del_group);
 void free_all_autocmds(void);
@@ -40,7 +40,7 @@ void ex_doautoall(exarg_T *eap);
 int check_nomodeline(char_u **argp);
 void aucmd_prepbuf(aco_save_T *aco, buf_T *buf);
 void aucmd_restbuf(aco_save_T *aco);
-int apply_autocmds(event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf);
+int apply_autocmds(event_T event, char_u *fname, char_u *fname_io, int force, const buf_T *buf);
 int apply_autocmds_retval(event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, int *retval);
 int has_cursorhold(void);
 int trigger_cursorhold(void);
diff --git a/src/proto/fold.pro b/src/proto/fold.pro
index dce1803..dac1131 100644
--- a/src/proto/fold.pro
+++ b/src/proto/fold.pro
@@ -1,5 +1,5 @@
 /* fold.c */
-void copyFoldingState(win_T *wp_from, win_T *wp_to);
+void copyFoldingState(const win_T *wp_from, win_T *wp_to);
 int hasAnyFolding(win_T *win);
 int hasFolding(linenr_T lnum, linenr_T *firstp, linenr_T *lastp);
 int hasFoldingWin(win_T *win, linenr_T lnum, linenr_T *firstp, linenr_T *lastp, int cache, foldinfo_T *infop);
@@ -31,7 +31,7 @@ void foldInitWin(win_T *new_win);
 int find_wl_entry(win_T *win, linenr_T lnum);
 void foldAdjustVisual(void);
 void foldAdjustCursor(void);
-void cloneFoldGrowArray(garray_T *from, garray_T *to);
+void cloneFoldGrowArray(const garray_T *from, garray_T *to);
 void deleteFoldRecurse(garray_T *gap);
 void foldMarkAdjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after);
 int getDeepestNesting(void);
diff --git a/src/proto/mark.pro b/src/proto/mark.pro
index 90be1a5..84b5dbc 100644
--- a/src/proto/mark.pro
+++ b/src/proto/mark.pro
@@ -20,7 +20,7 @@ void ex_clearjumps(exarg_T *eap);
 void ex_changes(exarg_T *eap);
 void mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after);
 void mark_col_adjust(linenr_T lnum, colnr_T mincol, long lnum_amount, long col_amount);
-void copy_jumplist(win_T *from, win_T *to);
+void copy_jumplist(const win_T *from, win_T *to);
 void free_jumplist(win_T *wp);
 void set_last_cursor(win_T *win);
 void free_all_marks(void);
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 8c9bde5..e39bf1d 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -37,8 +37,8 @@ void set_term_defaults(void);
 void comp_col(void);
 void unset_global_local_option(char_u *name, void *from);
 char_u *get_equalprg(void);
-void win_copy_options(win_T *wp_from, win_T *wp_to);
-void copy_winopt(winopt_T *from, winopt_T *to);
+void win_copy_options(const win_T *wp_from, win_T *wp_to);
+void copy_winopt(const winopt_T *from, winopt_T *to);
 void check_win_options(win_T *win);
 void clear_winopt(winopt_T *wop);
 void buf_copy_options(buf_T *buf, int flags);
diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro
index d48eb25..42deb56 100644
--- a/src/proto/quickfix.pro
+++ b/src/proto/quickfix.pro
@@ -1,7 +1,7 @@
 /* quickfix.c */
 int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u *qf_title);
 void qf_free_all(win_T *wp);
-void copy_loclist(win_T *from, win_T *to);
+void copy_loclist(const win_T *from, win_T *to);
 void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
 void qf_list(exarg_T *eap);
 void qf_age(exarg_T *eap);
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 8b649db..f1bf364 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -3,13 +3,13 @@ void do_window(int nchar, long Prenum, int xchar);
 void get_wincmd_addr_type(char_u *arg, exarg_T *eap);
 int win_split(int size, int flags);
 int win_split_ins(int size, int flags, win_T *new_wp, int dir);
-int win_valid(win_T *win);
-int win_valid_any_tab(win_T *win);
+int win_valid(const win_T *win);
+int win_valid_any_tab(const win_T *win);
 int win_count(void);
 int make_windows(int count, int vertical);
 void win_move_after(win_T *win1, win_T *win2);
 void win_equal(win_T *next_curwin, int current, int dir);
-void close_windows(buf_T *buf, int keep_curwin);
+void close_windows(const buf_T *buf, int keep_curwin);
 int one_window(void);
 int win_close(win_T *win, int free_buf);
 void win_close_othertab(win_T *win, int free_buf, tabpage_T *tp);
diff --git a/src/quickfix.c b/src/quickfix.c
index 2f5256b..41353f7 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1498,7 +1498,7 @@ ll_get_or_alloc_list(win_T *wp)
  * Copy the location list from window "from" to window "to".
  */
     void
-copy_loclist(win_T *from, win_T *to)
+copy_loclist(const win_T *from, win_T *to)
 {
     qf_info_T	*qi;
     int		idx;
diff --git a/src/window.c b/src/window.c
index f61a83b..c16fac6 100644
--- a/src/window.c
+++ b/src/window.c
@@ -12,29 +12,29 @@
 static int path_is_url(char_u *p);
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 static void cmd_with_count(char *cmd, char_u *bufp, size_t bufsize, long Prenum);
-static void win_init(win_T *newp, win_T *oldp, int flags);
-static void win_init_some(win_T *newp, win_T *oldp);
+static void win_init(win_T *newp, const win_T *oldp, int flags);
+static void win_init_some(win_T *newp, const win_T *oldp);
 static void frame_comp_pos(frame_T *topfrp, int *row, int *col);
 static void frame_setheight(frame_T *curfrp, int height);
 static void frame_setwidth(frame_T *curfrp, int width);
 static void win_exchange(long);
 static void win_rotate(int, int);
 static void win_totop(int size, int flags);
-static void win_equal_rec(win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height);
+static void win_equal_rec(const win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height);
 static int last_window(void);
 static int close_last_window_tabpage(win_T *win, int free_buf, tabpage_T *prev_curtab);
 static win_T *win_free_mem(win_T *win, int *dirp, tabpage_T *tp);
-static frame_T *win_altframe(win_T *win, tabpage_T *tp);
+static frame_T *win_altframe(const win_T *win, tabpage_T *tp);
 static tabpage_T *alt_tabpage(void);
 static win_T *frame2win(frame_T *frp);
-static int frame_has_win(frame_T *frp, win_T *wp);
+static int frame_has_win(const frame_T *frp, const win_T *wp);
 static void frame_new_height(frame_T *topfrp, int height, int topfirst, int wfh);
-static int frame_fixed_height(frame_T *frp);
-static int frame_fixed_width(frame_T *frp);
+static int frame_fixed_height(const frame_T *frp);
+static int frame_fixed_width(const frame_T *frp);
 static void frame_add_statusline(frame_T *frp);
 static void frame_new_width(frame_T *topfrp, int width, int leftfirst, int wfw);
 static void frame_add_vsep(frame_T *frp);
-static int frame_minwidth(frame_T *topfrp, win_T *next_curwin);
+static int frame_minwidth(const frame_T *topfrp, const win_T *next_curwin);
 static void frame_fix_width(win_T *wp);
 #endif
 static int win_alloc_firstwin(win_T *oldwin);
@@ -44,7 +44,7 @@ static tabpage_T *alloc_tabpage(void);
 static int leave_tabpage(buf_T *new_curbuf, int trigger_leave_autocmds);
 static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_autocmds, int trigger_leave_autocmds);
 static void frame_fix_height(win_T *wp);
-static int frame_minheight(frame_T *topfrp, win_T *next_curwin);
+static int frame_minheight(const frame_T *topfrp, const win_T *next_curwin);
 static void win_enter_ext(win_T *wp, int undo_sync, int no_curwin, int trigger_new_autocmds, int trigger_enter_autocmds, int trigger_leave_autocmds);
 static void win_free(win_T *wp, tabpage_T *tp);
 static void frame_append(frame_T *after, frame_T *frp);
@@ -1277,7 +1277,7 @@ win_split_ins(
  * being copied.
  */
     static void
-win_init(win_T *newp, win_T *oldp, int flags UNUSED)
+win_init(win_T *newp, const win_T *oldp, int flags UNUSED)
 {
     int		i;
 
@@ -1343,7 +1343,7 @@ win_init(win_T *newp, win_T *oldp, int flags UNUSED)
  * Only the essential things are copied.
  */
     static void
-win_init_some(win_T *newp, win_T *oldp)
+win_init_some(win_T *newp, const win_T *oldp)
 {
     /* Use the same argument list. */
     newp->w_alist = oldp->w_alist;
@@ -1361,7 +1361,7 @@ win_init_some(win_T *newp, win_T *oldp)
  * Check if "win" is a pointer to an existing window in the current tab page.
  */
     int
-win_valid(win_T *win)
+win_valid(const win_T *win)
 {
     win_T	*wp;
 
@@ -1377,7 +1377,7 @@ win_valid(win_T *win)
  * Check if "win" is a pointer to an existing window in any tab page.
  */
     int
-win_valid_any_tab(win_T *win)
+win_valid_any_tab(const win_T *win)
 {
     win_T	*wp;
     tabpage_T	*tp;
@@ -1788,7 +1788,7 @@ win_equal(
  */
     static void
 win_equal_rec(
-    win_T	*next_curwin,	/* pointer to current window to be or NULL */
+    const win_T *next_curwin,	/* pointer to current window to be or NULL */
     int		current,	/* do only frame with current window */
     frame_T	*topfr,		/* frame to set size off */
     int		dir,		/* 'v', 'h' or 'b', see win_equal() */
@@ -2111,7 +2111,7 @@ win_equal_rec(
  */
     void
 close_windows(
-    buf_T	*buf,
+    const buf_T *buf,
     int		keep_curwin)	    /* don't close "curwin" */
 {
     win_T	*wp;
@@ -2774,7 +2774,7 @@ winframe_remove(
  */
     static frame_T *
 win_altframe(
-    win_T	*win,
+    const win_T	*win,
     tabpage_T	*tp)		/* tab page "win" is in, NULL for current */
 {
     frame_T	*frp;
@@ -2827,9 +2827,9 @@ frame2win(frame_T *frp)
  * Return TRUE if frame "frp" contains window "wp".
  */
     static int
-frame_has_win(frame_T *frp, win_T *wp)
+frame_has_win(const frame_T *frp, const win_T *wp)
 {
-    frame_T	*p;
+    const frame_T *p;
 
     if (frp->fr_layout == FR_LEAF)
 	return frp->fr_win == wp;
@@ -2954,7 +2954,7 @@ frame_new_height(
  * the 'winfixheight' option.
  */
     static int
-frame_fixed_height(frame_T *frp)
+frame_fixed_height(const frame_T *frp)
 {
     /* frame with one window: fixed height if 'winfixheight' set. */
     if (frp->fr_win != NULL)
@@ -2983,7 +2983,7 @@ frame_fixed_height(frame_T *frp)
  * the 'winfixwidth' option.
  */
     static int
-frame_fixed_width(frame_T *frp)
+frame_fixed_width(const frame_T *frp)
 {
     /* frame with one window: fixed width if 'winfixwidth' set. */
     if (frp->fr_win != NULL)
@@ -3217,9 +3217,9 @@ frame_fix_height(win_T *wp)
  * window.
  */
     static int
-frame_minheight(frame_T *topfrp, win_T *next_curwin)
+frame_minheight(const frame_T *topfrp, const win_T *next_curwin)
 {
-    frame_T	*frp;
+    const frame_T *frp;
     int		m;
     int		n;
 
@@ -3266,10 +3266,10 @@ frame_minheight(frame_T *topfrp, win_T *next_curwin)
  */
     static int
 frame_minwidth(
-    frame_T	*topfrp,
-    win_T	*next_curwin)	/* use p_wh and p_wiw for next_curwin */
+    const frame_T *topfrp,
+    const win_T *next_curwin)	/* use p_wh and p_wiw for next_curwin */
 {
-    frame_T	*frp;
+    const frame_T *frp;
     int		m, n;
 
     if (topfrp->fr_win != NULL)

Raspunde prin e-mail lui