Changeset 1f22c7c for patches


Ignore:
Timestamp:
Dec 30, 2008, 4:23:48 PM (15 years ago)
Author:
Jim Gifford <clfs@…>
Branches:
clfs-1.2, clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
893ca261
Parents:
06dcdf6
Message:

Update VIM Patch to -3

File:
1 moved

Legend:

Unmodified
Added
Removed
  • patches/vim-7.2-branch_update-3.patch

    r06dcdf6 r1f22c7c  
    11Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
    2 Date: 12-20-2008
     2Date: 12-30-2008
    33Initial Package Version: 7.2
    44Origin: Upstream
    55Upstream Status: Applied
    6 Description: Contains all upstream patches up to 7.2.069
     6Description: Contains all upstream patches up to 7.2.076
    77             The following patches were skipped
    8              007 036 041 049
     8             007 036 041 049 071 072 074
    99
    1010diff -Naur vim72.orig/Filelist vim72/Filelist
    1111--- vim72.orig/Filelist 2008-07-06 11:02:23.000000000 -0700
    12 +++ vim72/Filelist      2008-12-20 15:00:39.000000000 -0800
     12+++ vim72/Filelist      2008-12-30 16:15:18.000000000 -0800
    1313@@ -285,6 +285,7 @@
    1414                src/proto/os_win32.pro \
     
    2121diff -Naur vim72.orig/runtime/doc/cmdline.txt vim72/runtime/doc/cmdline.txt
    2222--- vim72.orig/runtime/doc/cmdline.txt  2008-08-09 07:22:59.000000000 -0700
    23 +++ vim72/runtime/doc/cmdline.txt       2008-12-20 15:01:04.000000000 -0800
     23+++ vim72/runtime/doc/cmdline.txt       2008-12-30 16:15:47.000000000 -0800
    2424@@ -1,4 +1,4 @@
    2525-*cmdline.txt*   For Vim version 7.2.  Last change: 2008 Jul 29
     
    8080diff -Naur vim72.orig/runtime/doc/eval.txt vim72/runtime/doc/eval.txt
    8181--- vim72.orig/runtime/doc/eval.txt     2008-08-09 07:22:59.000000000 -0700
    82 +++ vim72/runtime/doc/eval.txt  2008-12-20 15:02:44.000000000 -0800
     82+++ vim72/runtime/doc/eval.txt  2008-12-30 16:17:36.000000000 -0800
    8383@@ -1,4 +1,4 @@
    8484-*eval.txt*     For Vim version 7.2.  Last change: 2008 Aug 09
     
    200200diff -Naur vim72.orig/runtime/doc/options.txt vim72/runtime/doc/options.txt
    201201--- vim72.orig/runtime/doc/options.txt  2008-08-09 07:22:59.000000000 -0700
    202 +++ vim72/runtime/doc/options.txt       2008-12-20 15:02:01.000000000 -0800
     202+++ vim72/runtime/doc/options.txt       2008-12-30 16:16:50.000000000 -0800
    203203@@ -1,4 +1,4 @@
    204204-*options.txt*  For Vim version 7.2.  Last change: 2008 Aug 06
     
    220220diff -Naur vim72.orig/runtime/doc/spell.txt vim72/runtime/doc/spell.txt
    221221--- vim72.orig/runtime/doc/spell.txt    2008-08-09 07:23:00.000000000 -0700
    222 +++ vim72/runtime/doc/spell.txt 2008-12-20 15:02:27.000000000 -0800
     222+++ vim72/runtime/doc/spell.txt 2008-12-30 16:17:18.000000000 -0800
    223223@@ -1,4 +1,4 @@
    224224-*spell.txt*    For Vim version 7.2.  Last change: 2008 Jun 21
     
    350350diff -Naur vim72.orig/runtime/doc/starting.txt vim72/runtime/doc/starting.txt
    351351--- vim72.orig/runtime/doc/starting.txt 2008-08-09 07:23:00.000000000 -0700
    352 +++ vim72/runtime/doc/starting.txt      2008-12-20 15:01:04.000000000 -0800
     352+++ vim72/runtime/doc/starting.txt      2008-12-30 16:15:47.000000000 -0800
    353353@@ -1,4 +1,4 @@
    354354-*starting.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
     
    412412diff -Naur vim72.orig/runtime/doc/usr_21.txt vim72/runtime/doc/usr_21.txt
    413413--- vim72.orig/runtime/doc/usr_21.txt   2008-08-09 07:23:01.000000000 -0700
    414 +++ vim72/runtime/doc/usr_21.txt        2008-12-20 15:01:04.000000000 -0800
     414+++ vim72/runtime/doc/usr_21.txt        2008-12-30 16:15:47.000000000 -0800
    415415@@ -1,4 +1,4 @@
    416416-*usr_21.txt*   For Vim version 7.2.  Last change: 2007 May 01
     
    479479diff -Naur vim72.orig/runtime/scripts.vim vim72/runtime/scripts.vim
    480480--- vim72.orig/runtime/scripts.vim      2008-08-08 15:27:21.000000000 -0700
    481 +++ vim72/runtime/scripts.vim   2008-12-20 14:59:55.000000000 -0800
     481+++ vim72/runtime/scripts.vim   2008-12-30 16:14:26.000000000 -0800
    482482@@ -234,6 +234,10 @@
    483483   elseif s:line1 =~ '\<DTD\s\+XHTML\s'
     
    493493diff -Naur vim72.orig/src/auto/configure vim72/src/auto/configure
    494494--- vim72.orig/src/auto/configure       2008-07-24 05:40:36.000000000 -0700
    495 +++ vim72/src/auto/configure    2008-12-20 15:01:40.000000000 -0800
     495+++ vim72/src/auto/configure    2008-12-30 16:16:27.000000000 -0800
    496496@@ -16819,21 +16819,29 @@
    497497   LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
     
    534534diff -Naur vim72.orig/src/buffer.c vim72/src/buffer.c
    535535--- vim72.orig/src/buffer.c     2008-08-06 04:00:48.000000000 -0700
    536 +++ vim72/src/buffer.c  2008-12-20 15:02:33.000000000 -0800
     536+++ vim72/src/buffer.c  2008-12-30 16:17:24.000000000 -0800
    537537@@ -647,6 +647,9 @@
    538538     vim_free(buf->b_start_fenc);
     
    610610diff -Naur vim72.orig/src/configure.in vim72/src/configure.in
    611611--- vim72.orig/src/configure.in 2008-07-24 05:40:26.000000000 -0700
    612 +++ vim72/src/configure.in      2008-12-20 15:01:40.000000000 -0800
     612+++ vim72/src/configure.in      2008-12-30 16:16:27.000000000 -0800
    613613@@ -3152,18 +3152,25 @@
    614614 dnl But only when making dependencies, cproto and lint don't take "-isystem".
     
    645645diff -Naur vim72.orig/src/diff.c vim72/src/diff.c
    646646--- vim72.orig/src/diff.c       2008-03-05 03:16:56.000000000 -0800
    647 +++ vim72/src/diff.c    2008-12-20 15:02:24.000000000 -0800
     647+++ vim72/src/diff.c    2008-12-30 16:17:15.000000000 -0800
    648648@@ -73,6 +73,8 @@
    649649        {
     
    735735diff -Naur vim72.orig/src/eval.c vim72/src/eval.c
    736736--- vim72.orig/src/eval.c       2008-08-07 12:37:22.000000000 -0700
    737 +++ vim72/src/eval.c    2008-12-20 15:02:44.000000000 -0800
    738 @@ -348,6 +348,7 @@
     737+++ vim72/src/eval.c    2008-12-30 16:17:49.000000000 -0800
     738@@ -32,6 +32,9 @@
     739 
     740 #define DICT_MAXNEST 100       /* maximum nesting of lists and dicts */
     741 
     742+#define DO_NOT_FREE_CNT 99999  /* refcount for dict or list that should not
     743+                                  be freed. */
     744+
     745 /*
     746  * In a hashtab item "hi_key" points to "di_key" in a dictitem.
     747  * This avoids adding a pointer to the hashtab item.
     748@@ -348,6 +351,7 @@
    739749     {VV_NAME("mouse_col",       VAR_NUMBER), 0},
    740750     {VV_NAME("operator",        VAR_STRING), VV_RO},
     
    744754 
    745755 /* shorthand */
    746 @@ -355,6 +356,7 @@
     756@@ -355,6 +359,7 @@
    747757 #define vv_nr          vv_di.di_tv.vval.v_number
    748758 #define vv_float       vv_di.di_tv.vval.v_float
     
    752762 
    753763 /*
    754 @@ -426,7 +428,6 @@
     764@@ -426,7 +431,6 @@
    755765 static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
    756766 static void list_append __ARGS((list_T *l, listitem_T *item));
     
    760770 static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
    761771 static int list_extend __ARGS((list_T  *l1, list_T *l2, listitem_T *bef));
    762 @@ -845,11 +846,17 @@
     772@@ -788,6 +792,8 @@
     773 static void func_unref __ARGS((char_u *name));
     774 static void func_ref __ARGS((char_u *name));
     775 static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
     776+static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
     777+static void free_funccal __ARGS((funccall_T *fc, int free_val));
     778 static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr));
     779 static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp));
     780 static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off));
     781@@ -845,11 +851,17 @@
    763782        p = &vimvars[i];
    764783        if (p->vv_di.di_tv.v_type == VAR_STRING)
     
    780799 
    781800     /* script-local variables */
    782 @@ -1256,23 +1263,26 @@
     801@@ -916,6 +928,10 @@
     802 /* pointer to funccal for currently active function */
     803 funccall_T *current_funccal = NULL;
     804 
     805+/* pointer to list of previously used funccal, still around because some
     806+ * item in it is still being used. */
     807+funccall_T *previous_funccal = NULL;
     808+
     809 /*
     810  * Return TRUE when a function was ended by a ":return" command.
     811  */
     812@@ -1256,23 +1272,26 @@
    783813 
    784814 /*
     
    810840            ga_init2(&ga, (int)sizeof(char), 80);
    811841            if (tv.vval.v_list != NULL)
    812 @@ -1280,6 +1290,13 @@
     842@@ -1280,6 +1299,13 @@
    813843            ga_append(&ga, NUL);
    814844            retval = (char_u *)ga.ga_data;
     
    824854            retval = vim_strsave(get_tv_string(&tv));
    825855        clear_tv(&tv);
    826 @@ -3277,7 +3294,7 @@
     856@@ -3277,7 +3303,7 @@
    827857 
    828858     if (*startarg != '(')
     
    833863     }
    834864 
    835 @@ -3657,8 +3674,8 @@
     865@@ -3657,8 +3683,8 @@
    836866 }
    837867 
     
    844874     static int
    845875 tv_islocked(tv)
    846 @@ -6047,6 +6064,25 @@
     876@@ -6047,6 +6073,25 @@
    847877 }
    848878 
     
    870900  * Returns -1 when "item" is not in the list.
    871901  */
    872 @@ -6137,7 +6173,7 @@
     902@@ -6137,7 +6182,7 @@
    873903  * When "len" >= 0 use "str[len]".
    874904  * Returns FAIL when out of memory.
     
    879909     list_T     *l;
    880910     char_u     *str;
    881 @@ -6497,6 +6533,9 @@
     911@@ -6454,7 +6499,7 @@
     912     buf_T      *buf;
     913     win_T      *wp;
     914     int                i;
     915-    funccall_T *fc;
     916+    funccall_T *fc, **pfc;
     917     int                did_free = FALSE;
     918 #ifdef FEAT_WINDOWS
     919     tabpage_T  *tp;
     920@@ -6497,6 +6542,9 @@
    882921        set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
    883922     }
     
    889928      * 2. Go through the list of dicts and free items without the copyID.
    890929      */
    891 @@ -6587,7 +6626,7 @@
     930@@ -6535,6 +6583,20 @@
     931        else
     932            ll = ll->lv_used_next;
     933 
     934+    /* check if any funccal can be freed now */
     935+    for (pfc = &previous_funccal; *pfc != NULL; )
     936+    {
     937+       if (can_free_funccal(*pfc, copyID))
     938+       {
     939+           fc = *pfc;
     940+           *pfc = fc->caller;
     941+           free_funccal(fc, TRUE);
     942+           did_free = TRUE;
     943+       }
     944+       else
     945+           pfc = &(*pfc)->caller;
     946+    }
     947+
     948     return did_free;
     949 }
     950 
     951@@ -6587,7 +6649,7 @@
    892952     {
    893953        case VAR_DICT:
     
    898958                /* Didn't see this dict yet. */
    899959                dd->dv_copyID = copyID;
    900 @@ -6597,7 +6636,7 @@
     960@@ -6597,7 +6659,7 @@
    901961 
    902962        case VAR_LIST:
     
    907967                /* Didn't see this list yet. */
    908968                ll->lv_copyID = copyID;
    909 @@ -7525,8 +7564,8 @@
     969@@ -7525,8 +7587,8 @@
    910970     {"getwinposx",     0, 0, f_getwinposx},
    911971     {"getwinposy",     0, 0, f_getwinposy},
     
    918978     {"has_key",                2, 2, f_has_key},
    919979     {"haslocaldir",    0, 0, f_haslocaldir},
    920 @@ -9518,7 +9557,7 @@
     980@@ -9518,7 +9580,7 @@
    921981     else
    922982     {
     
    927987                                    && get_tv_number_chk(&argvars[1], &error))
    928988            flags |= WILD_KEEP_ALL;
    929 @@ -10300,7 +10339,8 @@
     989@@ -10300,7 +10362,8 @@
    930990     s = get_tv_string(&argvars[0]);
    931991     if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
     
    937997     else
    938998     {
    939 @@ -10602,7 +10642,7 @@
     999@@ -10602,7 +10665,7 @@
    9401000 # ifdef FEAT_WINDOWS
    9411001            win_T       *wp;
     
    9461006            if (row >= 0 && col >= 0)
    9471007            {
    948 @@ -10612,9 +10652,9 @@
     1008@@ -10612,9 +10675,9 @@
    9491009                (void)mouse_comp_pos(win, &row, &col, &lnum);
    9501010 # ifdef FEAT_WINDOWS
     
    9581018                vimvars[VV_MOUSE_COL].vv_nr = col + 1;
    9591019            }
    960 @@ -11284,13 +11324,25 @@
     1020@@ -11284,13 +11347,25 @@
    9611021     typval_T   *argvars;
    9621022     typval_T   *rettv;
     
    9881048 
    9891049 /*
    990 @@ -11301,14 +11353,22 @@
     1050@@ -11301,14 +11376,22 @@
    9911051     typval_T   *argvars;
    9921052     typval_T   *rettv;
     
    10131073 
    10141074 /*
    1015 @@ -11782,6 +11842,10 @@
     1075@@ -11782,6 +11865,10 @@
    10161076            n = has_patch(atoi((char *)name + 5));
    10171077        else if (STRICMP(name, "vim_starting") == 0)
     
    10241084        else if (STRICMP(name, "balloon_multiline") == 0)
    10251085            n = multiline_balloon_available();
    1026 @@ -15838,10 +15902,9 @@
     1086@@ -15838,10 +15925,9 @@
    10271087     if (res == FAIL)
    10281088        res = ITEM_COMPARE_FAIL;
     
    10361096     return res;
    10371097 }
    1038 @@ -16590,8 +16653,11 @@
     1098@@ -16590,8 +16676,11 @@
    10391099                p = highlight_has_attr(id, HL_INVERSE, modec);
    10401100                break;
     
    10501110 
    10511111        case 'u':
    1052 @@ -16658,7 +16724,7 @@
     1112@@ -16658,7 +16747,7 @@
    10531113     col = get_tv_number(&argvars[1]) - 1;      /* -1 on type error */
    10541114 
     
    10591119     {
    10601120        (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
    1061 @@ -18097,14 +18163,28 @@
     1121@@ -18097,14 +18186,28 @@
    10621122 }
    10631123 
     
    10911151     vimvars[VV_COUNT1].vv_nr = count1;
    10921152 }
    1093 @@ -18132,6 +18212,20 @@
     1153@@ -18132,6 +18235,20 @@
    10941154 }
    10951155 
     
    11121172  */
    11131173     void
    1114 @@ -20590,6 +20684,9 @@
     1174@@ -18868,7 +18985,7 @@
     1175     dictitem_T *dict_var;
     1176 {
     1177     hash_init(&dict->dv_hashtab);
     1178-    dict->dv_refcount = 99999;
     1179+    dict->dv_refcount = DO_NOT_FREE_CNT;
     1180     dict_var->di_tv.vval.v_dict = dict;
     1181     dict_var->di_tv.v_type = VAR_DICT;
     1182     dict_var->di_tv.v_lock = VAR_FIXED;
     1183@@ -19205,6 +19322,8 @@
     1184  * Copy the values from typval_T "from" to typval_T "to".
     1185  * When needed allocates string or increases reference count.
     1186  * Does not make a copy of a list or dict but copies the reference!
     1187+ * It is OK for "from" and "to" to point to the same item.  This is used to
     1188+ * make a copy later.
     1189  */
     1190     static void
     1191 copy_tv(from, to)
     1192@@ -20590,6 +20709,9 @@
    11151193     int                st_len = 0;
    11161194 
     
    11221200 
    11231201     for (hi = func_hashtab.ht_array; todo > 0; ++hi)
    1124 @@ -20638,6 +20735,8 @@
     1202@@ -20638,6 +20760,8 @@
    11251203                                                              prof_self_cmp);
    11261204        prof_sort_list(fd, sorttab, st_len, "SELF", TRUE);
     
    11311209 
    11321210     static void
    1133 @@ -21082,8 +21181,11 @@
    1134      init_var_dict(&fc.l_avars, &fc.l_avars_var);
    1135      add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
     1211@@ -21012,7 +21136,7 @@
     1212     char_u     *save_sourcing_name;
     1213     linenr_T   save_sourcing_lnum;
     1214     scid_T     save_current_SID;
     1215-    funccall_T fc;
     1216+    funccall_T *fc;
     1217     int                save_did_emsg;
     1218     static int depth = 0;
     1219     dictitem_T *v;
     1220@@ -21038,36 +21162,37 @@
     1221 
     1222     line_breakcheck();         /* check for CTRL-C hit */
     1223 
     1224-    fc.caller = current_funccal;
     1225-    current_funccal = &fc;
     1226-    fc.func = fp;
     1227-    fc.rettv = rettv;
     1228+    fc = (funccall_T *)alloc(sizeof(funccall_T));
     1229+    fc->caller = current_funccal;
     1230+    current_funccal = fc;
     1231+    fc->func = fp;
     1232+    fc->rettv = rettv;
     1233     rettv->vval.v_number = 0;
     1234-    fc.linenr = 0;
     1235-    fc.returned = FALSE;
     1236-    fc.level = ex_nesting_level;
     1237+    fc->linenr = 0;
     1238+    fc->returned = FALSE;
     1239+    fc->level = ex_nesting_level;
     1240     /* Check if this function has a breakpoint. */
     1241-    fc.breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
     1242-    fc.dbg_tick = debug_tick;
     1243+    fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
     1244+    fc->dbg_tick = debug_tick;
     1245 
     1246     /*
     1247-     * Note about using fc.fixvar[]: This is an array of FIXVAR_CNT variables
     1248+     * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables
     1249      * with names up to VAR_SHORT_LEN long.  This avoids having to alloc/free
     1250      * each argument variable and saves a lot of time.
     1251      */
     1252     /*
     1253      * Init l: variables.
     1254      */
     1255-    init_var_dict(&fc.l_vars, &fc.l_vars_var);
     1256+    init_var_dict(&fc->l_vars, &fc->l_vars_var);
     1257     if (selfdict != NULL)
     1258     {
     1259        /* Set l:self to "selfdict".  Use "name" to avoid a warning from
     1260         * some compiler that checks the destination size. */
     1261-       v = &fc.fixvar[fixvar_idx++].var;
     1262+       v = &fc->fixvar[fixvar_idx++].var;
     1263        name = v->di_key;
     1264        STRCPY(name, "self");
     1265        v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX;
     1266-       hash_add(&fc.l_vars.dv_hashtab, DI2HIKEY(v));
     1267+       hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v));
     1268        v->di_tv.v_type = VAR_DICT;
     1269        v->di_tv.v_lock = 0;
     1270        v->di_tv.vval.v_dict = selfdict;
     1271@@ -21079,28 +21204,31 @@
     1272      * Set a:0 to "argcount".
     1273      * Set a:000 to a list with room for the "..." arguments.
     1274      */
     1275-    init_var_dict(&fc.l_avars, &fc.l_avars_var);
     1276-    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
     1277+    init_var_dict(&fc->l_avars, &fc->l_avars_var);
     1278+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
    11361279                                (varnumber_T)(argcount - fp->uf_args.ga_len));
     1280-    v = &fc.fixvar[fixvar_idx++].var;
     1281-    STRCPY(v->di_key, "000");
    11371282+    /* Use "name" to avoid a warning from some compiler that checks the
    11381283+     * destination size. */
    1139      v = &fc.fixvar[fixvar_idx++].var;
    1140 -    STRCPY(v->di_key, "000");
     1284+    v = &fc->fixvar[fixvar_idx++].var;
    11411285+    name = v->di_key;
    11421286+    STRCPY(name, "000");
    11431287     v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
    1144      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
     1288-    hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
     1289+    hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
    11451290     v->di_tv.v_type = VAR_LIST;
    1146 @@ -21204,7 +21306,7 @@
     1291     v->di_tv.v_lock = VAR_FIXED;
     1292-    v->di_tv.vval.v_list = &fc.l_varlist;
     1293-    vim_memset(&fc.l_varlist, 0, sizeof(list_T));
     1294-    fc.l_varlist.lv_refcount = 99999;
     1295-    fc.l_varlist.lv_lock = VAR_FIXED;
     1296+    v->di_tv.vval.v_list = &fc->l_varlist;
     1297+    vim_memset(&fc->l_varlist, 0, sizeof(list_T));
     1298+    fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT;
     1299+    fc->l_varlist.lv_lock = VAR_FIXED;
     1300 
     1301     /*
     1302      * Set a:firstline to "firstline" and a:lastline to "lastline".
     1303      * Set a:name to named arguments.
     1304      * Set a:N to the "..." arguments.
     1305      */
     1306-    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "firstline",
     1307+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline",
     1308                                                      (varnumber_T)firstline);
     1309-    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "lastline",
     1310+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline",
     1311                                                       (varnumber_T)lastline);
     1312     for (i = 0; i < argcount; ++i)
     1313     {
     1314@@ -21116,7 +21244,7 @@
     1315        }
     1316        if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN)
     1317        {
     1318-           v = &fc.fixvar[fixvar_idx++].var;
     1319+           v = &fc->fixvar[fixvar_idx++].var;
     1320            v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
     1321        }
     1322        else
     1323@@ -21128,7 +21256,7 @@
     1324            v->di_flags = DI_FLAGS_RO;
     1325        }
     1326        STRCPY(v->di_key, name);
     1327-       hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
     1328+       hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
     1329 
     1330        /* Note: the values are copied directly to avoid alloc/free.
     1331         * "argvars" must have VAR_FIXED for v_lock. */
     1332@@ -21137,9 +21265,9 @@
     1333 
     1334        if (ai >= 0 && ai < MAX_FUNC_ARGS)
     1335        {
     1336-           list_append(&fc.l_varlist, &fc.l_listitems[ai]);
     1337-           fc.l_listitems[ai].li_tv = argvars[i];
     1338-           fc.l_listitems[ai].li_tv.v_lock = VAR_FIXED;
     1339+           list_append(&fc->l_varlist, &fc->l_listitems[ai]);
     1340+           fc->l_listitems[ai].li_tv = argvars[i];
     1341+           fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED;
     1342        }
     1343     }
     1344 
     1345@@ -21204,7 +21332,7 @@
    11471346        if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
    11481347            func_do_profile(fp);
    11491348        if (fp->uf_profiling
    11501349-                      || (fc.caller != NULL && &fc.caller->func->uf_profiling))
    1151 +                      || (fc.caller != NULL && fc.caller->func->uf_profiling))
     1350+                   || (fc->caller != NULL && fc->caller->func->uf_profiling))
    11521351        {
    11531352            ++fp->uf_tm_count;
    11541353            profile_start(&call_start);
    1155 @@ -21235,13 +21337,13 @@
     1354@@ -21220,7 +21348,7 @@
     1355     did_emsg = FALSE;
     1356 
     1357     /* call do_cmdline() to execute the lines */
     1358-    do_cmdline(NULL, get_func_line, (void *)&fc,
     1359+    do_cmdline(NULL, get_func_line, (void *)fc,
     1360                                     DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
     1361 
     1362     --RedrawingDisabled;
     1363@@ -21235,16 +21363,16 @@
    11561364 
    11571365 #ifdef FEAT_PROFILE
    11581366     if (do_profiling == PROF_YES && (fp->uf_profiling
    11591367-                   || (fc.caller != NULL && &fc.caller->func->uf_profiling)))
    1160 +                   || (fc.caller != NULL && fc.caller->func->uf_profiling)))
     1368+                   || (fc->caller != NULL && fc->caller->func->uf_profiling)))
    11611369     {
    11621370        profile_end(&call_start);
     
    11651373        profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
    11661374-       if (fc.caller != NULL && &fc.caller->func->uf_profiling)
    1167 +       if (fc.caller != NULL && fc.caller->func->uf_profiling)
     1375+       if (fc->caller != NULL && fc->caller->func->uf_profiling)
    11681376        {
    1169             profile_add(&fc.caller->func->uf_tm_children, &call_start);
    1170             profile_add(&fc.caller->func->uf_tml_children, &call_start);
    1171 @@ -21886,6 +21988,62 @@
     1377-           profile_add(&fc.caller->func->uf_tm_children, &call_start);
     1378-           profile_add(&fc.caller->func->uf_tml_children, &call_start);
     1379+           profile_add(&fc->caller->func->uf_tm_children, &call_start);
     1380+           profile_add(&fc->caller->func->uf_tml_children, &call_start);
     1381        }
     1382     }
     1383 #endif
     1384@@ -21257,9 +21385,9 @@
     1385 
     1386        if (aborting())
     1387            smsg((char_u *)_("%s aborted"), sourcing_name);
     1388-       else if (fc.rettv->v_type == VAR_NUMBER)
     1389+       else if (fc->rettv->v_type == VAR_NUMBER)
     1390            smsg((char_u *)_("%s returning #%ld"), sourcing_name,
     1391-                                              (long)fc.rettv->vval.v_number);
     1392+                                              (long)fc->rettv->vval.v_number);
     1393        else
     1394        {
     1395            char_u      buf[MSG_BUF_LEN];
     1396@@ -21270,7 +21398,7 @@
     1397            /* The value may be very long.  Skip the middle part, so that we
     1398             * have some idea how it starts and ends. smsg() would always
     1399             * truncate it at the end. */
     1400-           s = tv2string(fc.rettv, &tofree, numbuf2, 0);
     1401+           s = tv2string(fc->rettv, &tofree, numbuf2, 0);
     1402            if (s != NULL)
     1403            {
     1404                trunc_string(s, buf, MSG_BUF_CLEN);
     1405@@ -21306,14 +21434,84 @@
     1406     }
     1407 
     1408     did_emsg |= save_did_emsg;
     1409-    current_funccal = fc.caller;
     1410+    current_funccal = fc->caller;
     1411+    --depth;
     1412 
     1413-    /* The a: variables typevals were not allocated, only free the allocated
     1414-     * variables. */
     1415-    vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE);
     1416+    /* if the a:000 list and the a: dict are not referenced we can free the
     1417+     * funccall_T and what's in it. */
     1418+    if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT
     1419+           && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT
     1420+           && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT)
     1421+    {
     1422+       free_funccal(fc, FALSE);
     1423+    }
     1424+    else
     1425+    {
     1426+       hashitem_T      *hi;
     1427+       listitem_T      *li;
     1428+       int             todo;
     1429 
     1430-    vars_clear(&fc.l_vars.dv_hashtab);         /* free all l: variables */
     1431-    --depth;
     1432+       /* "fc" is still in use.  This can happen when returning "a:000" or
     1433+        * assigning "l:" to a global variable.
     1434+        * Link "fc" in the list for garbage collection later. */
     1435+       fc->caller = previous_funccal;
     1436+       previous_funccal = fc;
     1437+
     1438+       /* Make a copy of the a: variables, since we didn't do that above. */
     1439+       todo = (int)fc->l_avars.dv_hashtab.ht_used;
     1440+       for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi)
     1441+       {
     1442+           if (!HASHITEM_EMPTY(hi))
     1443+           {
     1444+               --todo;
     1445+               v = HI2DI(hi);
     1446+               copy_tv(&v->di_tv, &v->di_tv);
     1447+           }
     1448+       }
     1449+
     1450+       /* Make a copy of the a:000 items, since we didn't do that above. */
     1451+       for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
     1452+           copy_tv(&li->li_tv, &li->li_tv);
     1453+    }
     1454+}
     1455+
     1456+/*
     1457+ * Return TRUE if items in "fc" do not have "copyID".  That means they are not
     1458+ * referenced from anywyere.
     1459+ */
     1460+    static int
     1461+can_free_funccal(fc, copyID)
     1462+    funccall_T *fc;
     1463+    int                copyID;
     1464+{
     1465+    return (fc->l_varlist.lv_copyID != copyID
     1466+           && fc->l_vars.dv_copyID != copyID
     1467+           && fc->l_avars.dv_copyID != copyID);
     1468+}
     1469+
     1470+/*
     1471+ * Free "fc" and what it contains.
     1472+ */
     1473+   static void
     1474+free_funccal(fc, free_val)
     1475+    funccall_T *fc;
     1476+    int                free_val;  /* a: vars were allocated */
     1477+{
     1478+    listitem_T *li;
     1479+
     1480+    /* The a: variables typevals may not have been allocated, only free the
     1481+     * allocated variables. */
     1482+    vars_clear_ext(&fc->l_avars.dv_hashtab, free_val);
     1483+
     1484+    /* free all l: variables */
     1485+    vars_clear(&fc->l_vars.dv_hashtab);
     1486+
     1487+    /* Free the a:000 variables if they were allocated. */
     1488+    if (free_val)
     1489+       for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
     1490+           clear_tv(&li->li_tv);
     1491+
     1492+    vim_free(fc);
     1493 }
     1494 
     1495 /*
     1496@@ -21886,6 +22084,62 @@
    11721497     }
    11731498 }
     
    12341559diff -Naur vim72.orig/src/ex_cmds.c vim72/src/ex_cmds.c
    12351560--- vim72.orig/src/ex_cmds.c    2008-08-04 12:15:00.000000000 -0700
    1236 +++ vim72/src/ex_cmds.c 2008-12-20 15:02:13.000000000 -0800
     1561+++ vim72/src/ex_cmds.c 2008-12-30 16:17:03.000000000 -0800
    12371562@@ -24,7 +24,7 @@
    12381563 static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
     
    13631688diff -Naur vim72.orig/src/ex_cmds.h vim72/src/ex_cmds.h
    13641689--- vim72.orig/src/ex_cmds.h    2008-06-21 11:47:57.000000000 -0700
    1365 +++ vim72/src/ex_cmds.h 2008-12-20 15:01:04.000000000 -0800
     1690+++ vim72/src/ex_cmds.h 2008-12-30 16:15:47.000000000 -0800
    13661691@@ -278,7 +278,7 @@
    13671692 EX(CMD_crewind,                "crewind",      ex_cc,
     
    14111736diff -Naur vim72.orig/src/ex_cmds2.c vim72/src/ex_cmds2.c
    14121737--- vim72.orig/src/ex_cmds2.c   2008-07-13 09:18:22.000000000 -0700
    1413 +++ vim72/src/ex_cmds2.c        2008-12-20 15:00:13.000000000 -0800
     1738+++ vim72/src/ex_cmds2.c        2008-12-30 16:14:45.000000000 -0800
    14141739@@ -3145,8 +3145,8 @@
    14151740        verbose_leave();
     
    14251750diff -Naur vim72.orig/src/ex_docmd.c vim72/src/ex_docmd.c
    14261751--- vim72.orig/src/ex_docmd.c   2008-07-26 04:51:05.000000000 -0700
    1427 +++ vim72/src/ex_docmd.c        2008-12-20 15:02:47.000000000 -0800
     1752+++ vim72/src/ex_docmd.c        2008-12-30 16:17:40.000000000 -0800
    14281753@@ -364,6 +364,7 @@
    14291754 # define ex_function           ex_ni
     
    15681893diff -Naur vim72.orig/src/ex_getln.c vim72/src/ex_getln.c
    15691894--- vim72.orig/src/ex_getln.c   2008-08-08 02:31:33.000000000 -0700
    1570 +++ vim72/src/ex_getln.c        2008-12-20 15:02:01.000000000 -0800
     1895+++ vim72/src/ex_getln.c        2008-12-30 16:16:50.000000000 -0800
    15711896@@ -31,6 +31,8 @@
    15721897     int                cmdattr;        /* attributes for prompt */
     
    17022027diff -Naur vim72.orig/src/feature.h vim72/src/feature.h
    17032028--- vim72.orig/src/feature.h    2008-08-06 04:00:39.000000000 -0700
    1704 +++ vim72/src/feature.h 2008-12-20 15:01:04.000000000 -0800
     2029+++ vim72/src/feature.h 2008-12-30 16:15:47.000000000 -0800
    17052030@@ -767,9 +767,13 @@
    17062031 
     
    17212046diff -Naur vim72.orig/src/fileio.c vim72/src/fileio.c
    17222047--- vim72.orig/src/fileio.c     2008-08-06 04:01:03.000000000 -0700
    1723 +++ vim72/src/fileio.c  2008-12-20 15:02:13.000000000 -0800
     2048+++ vim72/src/fileio.c  2008-12-30 16:18:07.000000000 -0800
    17242049@@ -932,7 +932,10 @@
    17252050     else
     
    18062131        } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
    18072132     }
    1808 @@ -8523,6 +8522,7 @@
     2133@@ -6120,6 +6119,47 @@
     2134     if (mch_stat((char *)from, &st) < 0)
     2135        return -1;
     2136 
     2137+#ifdef UNIX
     2138+    {
     2139+       struct stat     st_to;
     2140+       char            tempname[MAXPATHL + 1];
     2141+
     2142+       /* It's possible for the source and destination to be the same file.
     2143+        * This happens when "from" and "to" differ in case and are on a FAT32
     2144+        * filesystem.  In that case go through a temp file name. */
     2145+       if (mch_stat((char *)to, &st_to) >= 0
     2146+               && st.st_dev == st_to.st_dev
     2147+               && st.st_ino == st_to.st_ino)
     2148+       {
     2149+           /* Find a name that doesn't exist and is in the same directory.
     2150+            * Move "from" to "tempname" and then to "to". */
     2151+           if (STRLEN(from) >= MAXPATHL - 5)
     2152+               return -1;
     2153+           STRCPY(tempname, from);
     2154+           for (n = 123; n < 99999; ++n)
     2155+           {
     2156+               sprintf(gettail(tempname), "%d", n);
     2157+               if (mch_stat(tempname, &st_to) < 0)
     2158+               {
     2159+                   if (mch_rename((char *)from, tempname) == 0)
     2160+                   {
     2161+                       if (mch_rename(tempname, (char *)to) == 0)
     2162+                           return 0;
     2163+                       /* Strange, the second step failed.  Try moving the
     2164+                        * file back and return failure. */
     2165+                       mch_rename(tempname, (char *)from);
     2166+                       return -1;
     2167+                   }
     2168+                   /* If it fails for one temp name it will most likely fail
     2169+                    * for any temp name, give up. */
     2170+                   return -1;
     2171+               }
     2172+           }
     2173+           return -1;
     2174+       }
     2175+    }
     2176+#endif
     2177+
     2178     /*
     2179      * Delete the "to" file, this is required on some systems to make the
     2180      * mch_rename() work, on other systems it makes sure that we don't have
     2181@@ -8523,6 +8563,7 @@
    18092182     char_u     *save_sourcing_name;
    18102183     linenr_T   save_sourcing_lnum;
     
    18142187     char_u     *save_autocmd_match;
    18152188     int                save_autocmd_busy;
    1816 @@ -8601,6 +8601,7 @@
     2189@@ -8601,6 +8642,7 @@
    18172190      * Save the autocmd_* variables and info about the current buffer.
    18182191      */
     
    18222195     save_autocmd_match = autocmd_match;
    18232196     save_autocmd_busy = autocmd_busy;
    1824 @@ -8618,14 +8619,15 @@
     2197@@ -8618,14 +8660,15 @@
    18252198        if (fname != NULL && *fname != NUL)
    18262199            autocmd_fname = fname;
     
    18402213     /*
    18412214      * Set the buffer number to be used for <abuf>.
    1842 @@ -8810,6 +8812,7 @@
     2215@@ -8810,6 +8853,7 @@
    18432216     sourcing_lnum = save_sourcing_lnum;
    18442217     vim_free(autocmd_fname);
     
    18482221     autocmd_match = save_autocmd_match;
    18492222 #ifdef FEAT_EVAL
    1850 @@ -8918,7 +8921,7 @@
     2223@@ -8918,7 +8962,7 @@
    18512224     {
    18522225        apc->curpat = NULL;
     
    18572230         * buffer number. */
    18582231        if (ap->pat != NULL && ap->cmds != NULL
    1859 @@ -9104,7 +9107,7 @@
     2232@@ -9104,7 +9148,7 @@
    18602233 set_context_in_autocmd(xp, arg, doautocmd)
    18612234     expand_T   *xp;
     
    18682241diff -Naur vim72.orig/src/fold.c vim72/src/fold.c
    18692242--- vim72.orig/src/fold.c       2008-08-06 04:01:12.000000000 -0700
    1870 +++ vim72/src/fold.c    2008-12-20 15:02:13.000000000 -0800
     2243+++ vim72/src/fold.c    2008-12-30 16:17:03.000000000 -0800
    18712244@@ -48,7 +48,7 @@
    18722245 static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
     
    19022275diff -Naur vim72.orig/src/getchar.c vim72/src/getchar.c
    19032276--- vim72.orig/src/getchar.c    2008-07-22 09:57:48.000000000 -0700
    1904 +++ vim72/src/getchar.c 2008-12-20 15:02:09.000000000 -0800
     2277+++ vim72/src/getchar.c 2008-12-30 16:16:59.000000000 -0800
    19052278@@ -4702,7 +4702,7 @@
    19062279                        return FAIL;
     
    19232296diff -Naur vim72.orig/src/globals.h vim72/src/globals.h
    19242297--- vim72.orig/src/globals.h    2008-07-26 04:53:29.000000000 -0700
    1925 +++ vim72/src/globals.h 2008-12-20 15:02:13.000000000 -0800
     2298+++ vim72/src/globals.h 2008-12-30 16:17:03.000000000 -0800
    19262299@@ -1022,6 +1022,7 @@
    19272300 #endif
     
    19492322diff -Naur vim72.orig/src/gui.c vim72/src/gui.c
    19502323--- vim72.orig/src/gui.c        2008-07-27 12:32:14.000000000 -0700
    1951 +++ vim72/src/gui.c     2008-12-20 15:02:41.000000000 -0800
     2324+++ vim72/src/gui.c     2008-12-30 16:17:34.000000000 -0800
    19522325@@ -139,7 +139,7 @@
    19532326                /* The read returns when the child closes the pipe (or when
     
    20422415diff -Naur vim72.orig/src/gui_at_sb.c vim72/src/gui_at_sb.c
    20432416--- vim72.orig/src/gui_at_sb.c  2004-06-07 07:32:25.000000000 -0700
    2044 +++ vim72/src/gui_at_sb.c       2008-12-20 15:02:13.000000000 -0800
     2417+++ vim72/src/gui_at_sb.c       2008-12-30 16:17:03.000000000 -0800
    20452418@@ -1078,6 +1078,12 @@
    20462419     Cardinal   *num_params;    /* unused */
     
    20682441diff -Naur vim72.orig/src/gui_gtk_x11.c vim72/src/gui_gtk_x11.c
    20692442--- vim72.orig/src/gui_gtk_x11.c        2008-07-04 03:46:24.000000000 -0700
    2070 +++ vim72/src/gui_gtk_x11.c     2008-12-20 15:02:13.000000000 -0800
     2443+++ vim72/src/gui_gtk_x11.c     2008-12-30 16:17:03.000000000 -0800
    20712444@@ -4070,14 +4070,14 @@
    20722445 
     
    20922465diff -Naur vim72.orig/src/gui_x11.c vim72/src/gui_x11.c
    20932466--- vim72.orig/src/gui_x11.c    2008-06-08 08:13:45.000000000 -0700
    2094 +++ vim72/src/gui_x11.c 2008-12-20 15:01:15.000000000 -0800
     2467+++ vim72/src/gui_x11.c 2008-12-30 16:15:59.000000000 -0800
    20952468@@ -2450,7 +2450,7 @@
    20962469        *colorPtr = colortable[closest];
     
    21042477diff -Naur vim72.orig/src/gui_xmdlg.c vim72/src/gui_xmdlg.c
    21052478--- vim72.orig/src/gui_xmdlg.c  2008-06-21 09:05:32.000000000 -0700
    2106 +++ vim72/src/gui_xmdlg.c       2008-12-20 15:02:13.000000000 -0800
     2479+++ vim72/src/gui_xmdlg.c       2008-12-30 16:17:03.000000000 -0800
    21072480@@ -369,10 +369,10 @@
    21082481     char       buf[TEMP_BUF_SIZE];
     
    22602633diff -Naur vim72.orig/src/gui_xmebw.c vim72/src/gui_xmebw.c
    22612634--- vim72.orig/src/gui_xmebw.c  2007-09-06 03:57:51.000000000 -0700
    2262 +++ vim72/src/gui_xmebw.c       2008-12-20 15:02:13.000000000 -0800
     2635+++ vim72/src/gui_xmebw.c       2008-12-30 16:17:03.000000000 -0800
    22632636@@ -1256,7 +1256,7 @@
    22642637     }
     
    22872660diff -Naur vim72.orig/src/if_cscope.c vim72/src/if_cscope.c
    22882661--- vim72.orig/src/if_cscope.c  2008-06-24 09:32:34.000000000 -0700
    2289 +++ vim72/src/if_cscope.c       2008-12-20 14:59:49.000000000 -0800
     2662+++ vim72/src/if_cscope.c       2008-12-30 16:14:15.000000000 -0800
    22902663@@ -74,7 +74,7 @@
    22912664     { "add",   cs_add,
     
    23172690diff -Naur vim72.orig/src/if_cscope.h vim72/src/if_cscope.h
    23182691--- vim72.orig/src/if_cscope.h  2007-09-02 07:51:08.000000000 -0700
    2319 +++ vim72/src/if_cscope.h       2008-12-20 14:59:49.000000000 -0800
     2692+++ vim72/src/if_cscope.h       2008-12-30 16:14:15.000000000 -0800
    23202693@@ -42,17 +42,6 @@
    23212694  * f 7name     Find this file
     
    23382711diff -Naur vim72.orig/src/if_perl.xs vim72/src/if_perl.xs
    23392712--- vim72.orig/src/if_perl.xs   2008-07-17 13:55:09.000000000 -0700
    2340 +++ vim72/src/if_perl.xs        2008-12-20 15:02:36.000000000 -0800
     2713+++ vim72/src/if_perl.xs        2008-12-30 16:17:28.000000000 -0800
    23412714@@ -136,6 +136,9 @@
    23422715 #  define Perl_newXS_flags dll_Perl_newXS_flags
     
    23892762diff -Naur vim72.orig/src/if_python.c vim72/src/if_python.c
    23902763--- vim72.orig/src/if_python.c  2008-07-17 14:09:32.000000000 -0700
    2391 +++ vim72/src/if_python.c       2008-12-20 15:01:43.000000000 -0800
     2764+++ vim72/src/if_python.c       2008-12-30 16:16:31.000000000 -0800
    23922765@@ -531,6 +531,12 @@
    23932766        if (PythonMod_Init())
     
    24152788diff -Naur vim72.orig/src/if_xcmdsrv.c vim72/src/if_xcmdsrv.c
    24162789--- vim72.orig/src/if_xcmdsrv.c 2008-07-18 06:05:03.000000000 -0700
    2417 +++ vim72/src/if_xcmdsrv.c      2008-12-20 15:01:23.000000000 -0800
     2790+++ vim72/src/if_xcmdsrv.c      2008-12-30 16:16:09.000000000 -0800
    24182791@@ -736,7 +736,7 @@
    24192792                + serverReply.ga_len;
     
    24452818diff -Naur vim72.orig/src/main.c vim72/src/main.c
    24462819--- vim72.orig/src/main.c       2008-07-24 01:40:56.000000000 -0700
    2447 +++ vim72/src/main.c    2008-12-20 15:02:13.000000000 -0800
     2820+++ vim72/src/main.c    2008-12-30 16:17:03.000000000 -0800
    24482821@@ -645,11 +645,12 @@
    24492822 
     
    25072880diff -Naur vim72.orig/src/mark.c vim72/src/mark.c
    25082881--- vim72.orig/src/mark.c       2008-08-08 15:06:49.000000000 -0700
    2509 +++ vim72/src/mark.c    2008-12-20 15:01:04.000000000 -0800
     2882+++ vim72/src/mark.c    2008-12-30 16:15:47.000000000 -0800
    25102883@@ -1627,15 +1627,17 @@
    25112884 
     
    25762949diff -Naur vim72.orig/src/mbyte.c vim72/src/mbyte.c
    25772950--- vim72.orig/src/mbyte.c      2008-07-14 05:38:05.000000000 -0700
    2578 +++ vim72/src/mbyte.c   2008-12-20 15:02:13.000000000 -0800
     2951+++ vim72/src/mbyte.c   2008-12-30 16:17:03.000000000 -0800
    25792952@@ -717,7 +717,7 @@
    25802953                     * where mblen() returns 0 for invalid character.
     
    26583031diff -Naur vim72.orig/src/menu.c vim72/src/menu.c
    26593032--- vim72.orig/src/menu.c       2008-06-21 12:53:43.000000000 -0700
    2660 +++ vim72/src/menu.c    2008-12-20 14:59:42.000000000 -0800
     3033+++ vim72/src/menu.c    2008-12-30 16:14:07.000000000 -0800
    26613034@@ -1120,6 +1120,7 @@
    26623035        parent = menu;
     
    26693042diff -Naur vim72.orig/src/message.c vim72/src/message.c
    26703043--- vim72.orig/src/message.c    2008-07-09 11:24:55.000000000 -0700
    2671 +++ vim72/src/message.c 2008-12-20 15:02:13.000000000 -0800
     3044+++ vim72/src/message.c 2008-12-30 16:17:03.000000000 -0800
    26723045@@ -4585,61 +4585,62 @@
    26733046                        if (remove_trailing_zeroes)
     
    27563129diff -Naur vim72.orig/src/misc1.c vim72/src/misc1.c
    27573130--- vim72.orig/src/misc1.c      2008-07-12 12:20:53.000000000 -0700
    2758 +++ vim72/src/misc1.c   2008-12-20 15:01:04.000000000 -0800
     3131+++ vim72/src/misc1.c   2008-12-30 16:15:47.000000000 -0800
    27593132@@ -3245,9 +3245,9 @@
    27603133 
     
    27713144diff -Naur vim72.orig/src/misc2.c vim72/src/misc2.c
    27723145--- vim72.orig/src/misc2.c      2008-07-23 12:12:56.000000000 -0700
    2773 +++ vim72/src/misc2.c   2008-12-20 15:01:15.000000000 -0800
     3146+++ vim72/src/misc2.c   2008-12-30 16:17:58.000000000 -0800
    27743147@@ -873,7 +873,7 @@
    27753148            /* 3. check for available memory: call mch_avail_mem() */
     
    28073180 /*
    28083181  * Like vim_strsave(), but make all characters uppercase.
     3182@@ -2565,7 +2561,7 @@
     3183     int                key;
     3184     int                dlen = 0;
     3185 
     3186-    key = find_special_key(srcp, &modifiers, keycode);
     3187+    key = find_special_key(srcp, &modifiers, keycode, FALSE);
     3188     if (key == 0)
     3189        return 0;
     3190 
     3191@@ -2601,10 +2597,11 @@
     3192  * returns 0 if there is no match.
     3193  */
     3194     int
     3195-find_special_key(srcp, modp, keycode)
     3196+find_special_key(srcp, modp, keycode, keep_x_key)
     3197     char_u     **srcp;
     3198     int                *modp;
     3199-    int                keycode; /* prefer key code, e.g. K_DEL instead of DEL */
     3200+    int                keycode;     /* prefer key code, e.g. K_DEL instead of DEL */
     3201+    int                keep_x_key;  /* don't translate xHome to Home key */
     3202 {
     3203     char_u     *last_dash;
     3204     char_u     *end_of_name;
     3205@@ -2672,7 +2669,8 @@
     3206            else
     3207            {
     3208                key = get_special_key_code(last_dash + 1);
     3209-               key = handle_x_keys(key);
     3210+               if (!keep_x_key)
     3211+                   key = handle_x_keys(key);
     3212            }
     3213 
     3214            /*
    28093215diff -Naur vim72.orig/src/move.c vim72/src/move.c
    28103216--- vim72.orig/src/move.c       2008-07-12 09:26:47.000000000 -0700
    2811 +++ vim72/src/move.c    2008-12-20 15:01:35.000000000 -0800
     3217+++ vim72/src/move.c    2008-12-30 16:16:21.000000000 -0800
    28123218@@ -280,18 +280,20 @@
    28133219 
     
    28593265diff -Naur vim72.orig/src/netbeans.c vim72/src/netbeans.c
    28603266--- vim72.orig/src/netbeans.c   2008-07-13 09:19:54.000000000 -0700
    2861 +++ vim72/src/netbeans.c        2008-12-20 15:02:13.000000000 -0800
     3267+++ vim72/src/netbeans.c        2008-12-30 16:17:03.000000000 -0800
    28623268@@ -1043,7 +1043,7 @@
    28633269        nbdebug(("EVT: %s", buf));
     
    28973303diff -Naur vim72.orig/src/normal.c vim72/src/normal.c
    28983304--- vim72.orig/src/normal.c     2008-07-31 13:03:08.000000000 -0700
    2899 +++ vim72/src/normal.c  2008-12-20 15:01:52.000000000 -0800
     3305+++ vim72/src/normal.c  2008-12-30 16:16:40.000000000 -0800
    29003306@@ -183,6 +183,8 @@
    29013307 static void    nv_cursorhold __ARGS((cmdarg_T *cap));
     
    30853491diff -Naur vim72.orig/src/ops.c vim72/src/ops.c
    30863492--- vim72.orig/src/ops.c        2008-06-21 13:08:59.000000000 -0700
    3087 +++ vim72/src/ops.c     2008-12-20 15:02:38.000000000 -0800
     3493+++ vim72/src/ops.c     2008-12-30 16:17:30.000000000 -0800
    30883494@@ -2209,12 +2209,15 @@
    30893495     {
     
    31063512diff -Naur vim72.orig/src/option.c vim72/src/option.c
    31073513--- vim72.orig/src/option.c     2008-07-18 06:05:33.000000000 -0700
    3108 +++ vim72/src/option.c  2008-12-20 15:02:13.000000000 -0800
     3514+++ vim72/src/option.c  2008-12-30 16:17:58.000000000 -0800
    31093515@@ -2593,13 +2593,13 @@
    31103516 #ifdef FEAT_VIMINFO
     
    31533559                        /* There's another character after zeros or the string
    31543560                         * is empty.  In both cases, we are trying to set a
     3561@@ -8323,7 +8328,7 @@
     3562     {
     3563        --arg;                      /* put arg at the '<' */
     3564        modifiers = 0;
     3565-       key = find_special_key(&arg, &modifiers, TRUE);
     3566+       key = find_special_key(&arg, &modifiers, TRUE, TRUE);
     3567        if (modifiers)              /* can't handle modifiers here */
     3568            key = 0;
     3569     }
    31553570diff -Naur vim72.orig/src/os_unix.c vim72/src/os_unix.c
    31563571--- vim72.orig/src/os_unix.c    2008-08-06 04:01:40.000000000 -0700
    3157 +++ vim72/src/os_unix.c 2008-12-20 15:02:13.000000000 -0800
     3572+++ vim72/src/os_unix.c 2008-12-30 16:17:03.000000000 -0800
    31583573@@ -315,12 +315,15 @@
    31593574     {-1,           "Unknown!", FALSE}
     
    32693684diff -Naur vim72.orig/src/proto/eval.pro vim72/src/proto/eval.pro
    32703685--- vim72.orig/src/proto/eval.pro       2008-08-09 07:31:25.000000000 -0700
    3271 +++ vim72/src/proto/eval.pro    2008-12-20 15:01:52.000000000 -0800
     3686+++ vim72/src/proto/eval.pro    2008-12-30 16:16:40.000000000 -0800
    32723687@@ -17,7 +17,7 @@
    32733688 int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
     
    33113726diff -Naur vim72.orig/src/proto/ex_cmds.pro vim72/src/proto/ex_cmds.pro
    33123727--- vim72.orig/src/proto/ex_cmds.pro    2008-08-09 07:31:25.000000000 -0700
    3313 +++ vim72/src/proto/ex_cmds.pro 2008-12-20 15:01:04.000000000 -0800
     3728+++ vim72/src/proto/ex_cmds.pro 2008-12-30 16:15:47.000000000 -0800
    33143729@@ -11,7 +11,7 @@
    33153730 char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
     
    33233738diff -Naur vim72.orig/src/proto/ex_getln.pro vim72/src/proto/ex_getln.pro
    33243739--- vim72.orig/src/proto/ex_getln.pro   2008-08-09 07:31:28.000000000 -0700
    3325 +++ vim72/src/proto/ex_getln.pro        2008-12-20 15:02:01.000000000 -0800
     3740+++ vim72/src/proto/ex_getln.pro        2008-12-30 16:16:50.000000000 -0800
    33263741@@ -31,7 +31,7 @@
    33273742 void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
     
    33353750diff -Naur vim72.orig/src/proto/mark.pro vim72/src/proto/mark.pro
    33363751--- vim72.orig/src/proto/mark.pro       2008-08-09 07:31:36.000000000 -0700
    3337 +++ vim72/src/proto/mark.pro    2008-12-20 15:01:04.000000000 -0800
     3752+++ vim72/src/proto/mark.pro    2008-12-30 16:15:47.000000000 -0800
    33383753@@ -26,5 +26,5 @@
    33393754 void write_viminfo_filemarks __ARGS((FILE *fp));
     
    33433758+void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
    33443759 /* vim: set ft=c : */
     3760diff -Naur vim72.orig/src/proto/misc2.pro vim72/src/proto/misc2.pro
     3761--- vim72.orig/src/proto/misc2.pro      2008-08-09 07:31:40.000000000 -0700
     3762+++ vim72/src/proto/misc2.pro   2008-12-30 16:17:58.000000000 -0800
     3763@@ -59,7 +59,7 @@
     3764 int handle_x_keys __ARGS((int key));
     3765 char_u *get_special_key_name __ARGS((int c, int modifiers));
     3766 int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
     3767-int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
     3768+int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key));
     3769 int extract_modifiers __ARGS((int key, int *modp));
     3770 int find_special_key_in_table __ARGS((int c));
     3771 int get_special_key_code __ARGS((char_u *name));
    33453772diff -Naur vim72.orig/src/pty.c vim72/src/pty.c
    33463773--- vim72.orig/src/pty.c        2008-06-21 11:52:58.000000000 -0700
    3347 +++ vim72/src/pty.c     2008-12-20 14:59:39.000000000 -0800
     3774+++ vim72/src/pty.c     2008-12-30 16:14:03.000000000 -0800
    33483775@@ -270,9 +270,10 @@
    33493776 }
     
    33613788diff -Naur vim72.orig/src/screen.c vim72/src/screen.c
    33623789--- vim72.orig/src/screen.c     2008-07-24 07:45:07.000000000 -0700
    3363 +++ vim72/src/screen.c  2008-12-20 15:00:42.000000000 -0800
     3790+++ vim72/src/screen.c  2008-12-30 16:15:21.000000000 -0800
    33643791@@ -2439,9 +2439,17 @@
    33653792 
     
    33853812diff -Naur vim72.orig/src/spell.c vim72/src/spell.c
    33863813--- vim72.orig/src/spell.c      2008-07-12 12:20:55.000000000 -0700
    3387 +++ vim72/src/spell.c   2008-12-20 15:02:52.000000000 -0800
     3814+++ vim72/src/spell.c   2008-12-30 16:17:46.000000000 -0800
    33883815@@ -77,7 +77,7 @@
    33893816 
     
    42204647diff -Naur vim72.orig/src/structs.h vim72/src/structs.h
    42214648--- vim72.orig/src/structs.h    2008-07-30 13:02:50.000000000 -0700
    4222 +++ vim72/src/structs.h 2008-12-20 15:01:35.000000000 -0800
     4649+++ vim72/src/structs.h 2008-12-30 16:16:21.000000000 -0800
    42234650@@ -459,7 +459,7 @@
    42244651 typedef struct
     
    42494676diff -Naur vim72.orig/src/tag.c vim72/src/tag.c
    42504677--- vim72.orig/src/tag.c        2008-07-16 14:31:30.000000000 -0700
    4251 +++ vim72/src/tag.c     2008-12-20 15:02:50.000000000 -0800
     4678+++ vim72/src/tag.c     2008-12-30 16:17:42.000000000 -0800
    42524679@@ -2725,7 +2725,24 @@
    42534680         */
     
    42954722diff -Naur vim72.orig/src/testdir/Make_ming.mak vim72/src/testdir/Make_ming.mak
    42964723--- vim72.orig/src/testdir/Make_ming.mak        1969-12-31 16:00:00.000000000 -0800
    4297 +++ vim72/src/testdir/Make_ming.mak     2008-12-20 15:00:39.000000000 -0800
     4724+++ vim72/src/testdir/Make_ming.mak     2008-12-30 16:15:18.000000000 -0800
    42984725@@ -0,0 +1,91 @@
    42994726+# Makefile to run tests for Vim, on Dos-like machines
     
    43904817diff -Naur vim72.orig/src/testdir/Makefile vim72/src/testdir/Makefile
    43914818--- vim72.orig/src/testdir/Makefile     2008-06-19 13:29:46.000000000 -0700
    4392 +++ vim72/src/testdir/Makefile  2008-12-20 15:00:21.000000000 -0800
     4819+++ vim72/src/testdir/Makefile  2008-12-30 16:14:55.000000000 -0800
    43934820@@ -26,15 +26,17 @@
    43944821 
     
    44244851diff -Naur vim72.orig/src/testdir/test42.ok vim72/src/testdir/test42.ok
    44254852--- vim72.orig/src/testdir/test42.ok    2008-02-20 04:27:37.000000000 -0800
    4426 +++ vim72/src/testdir/test42.ok 2008-12-20 15:01:10.000000000 -0800
     4853+++ vim72/src/testdir/test42.ok 2008-12-30 16:15:53.000000000 -0800
    44274854@@ -20,7 +20,7 @@
    44284855 ucs-2
     
    44364863diff -Naur vim72.orig/src/ui.c vim72/src/ui.c
    44374864--- vim72.orig/src/ui.c 2008-07-14 11:14:56.000000000 -0700
    4438 +++ vim72/src/ui.c      2008-12-20 15:02:13.000000000 -0800
     4865+++ vim72/src/ui.c      2008-12-30 16:17:03.000000000 -0800
    44394866@@ -1820,7 +1820,7 @@
    44404867 #ifdef HAVE_DUP
     
    45444971diff -Naur vim72.orig/src/version.c vim72/src/version.c
    45454972--- vim72.orig/src/version.c    2008-08-09 07:24:52.000000000 -0700
    4546 +++ vim72/src/version.c 2008-12-20 15:02:52.000000000 -0800
    4547 @@ -677,9 +677,152 @@
     4973+++ vim72/src/version.c 2008-12-30 16:18:07.000000000 -0800
     4974@@ -677,9 +677,160 @@
    45484975 static int included_patches[] =
    45494976 {   /* Add new patch number below this line */
    45504977 /**/
     4978+    76,
     4979+/**/
     4980+    75,
     4981+/**/
     4982+    73,
     4983+/**/
     4984+    70,
     4985+/**/
    45514986+    69,
    45524987+/**/
     
    46875122+ * Also add a comment marker to separate the lines.
    46885123+ * See the official Vim patches for the diff format: It must use a context of
    4689 + * one line only.  Use "diff -C2".
     5124+ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
    46905125+ */
    46915126+static char *(extra_patches[]) =
     
    46985133 highest_patch()
    46995134 {
    4700 @@ -786,7 +929,7 @@
     5135@@ -786,7 +937,7 @@
    47015136     MSG_PUTS(_("\nRISC OS version"));
    47025137 #endif
     
    47075142     if (*compiled_arch != NUL)
    47085143     {
    4709 @@ -825,6 +968,19 @@
     5144@@ -825,6 +976,19 @@
    47105145        }
    47115146     }
     
    47295164diff -Naur vim72.orig/src/vim.h vim72/src/vim.h
    47305165--- vim72.orig/src/vim.h        2008-08-09 09:03:38.000000000 -0700
    4731 +++ vim72/src/vim.h     2008-12-20 15:01:49.000000000 -0800
     5166+++ vim72/src/vim.h     2008-12-30 16:16:37.000000000 -0800
    47325167@@ -341,8 +341,14 @@
    47335168 #ifdef BACKSLASH_IN_FILENAME
     
    47895224diff -Naur vim72.orig/src/window.c vim72/src/window.c
    47905225--- vim72.orig/src/window.c     2008-08-06 04:00:30.000000000 -0700
    4791 +++ vim72/src/window.c  2008-12-20 15:02:13.000000000 -0800
     5226+++ vim72/src/window.c  2008-12-30 16:17:03.000000000 -0800
    47925227@@ -4028,14 +4028,14 @@
    47935228            if (mch_dirname(cwd, MAXPATHL) == OK)
     
    48105245diff -Naur vim72.orig/src/workshop.c vim72/src/workshop.c
    48115246--- vim72.orig/src/workshop.c   2008-06-21 11:53:26.000000000 -0700
    4812 +++ vim72/src/workshop.c        2008-12-20 15:02:07.000000000 -0800
     5247+++ vim72/src/workshop.c        2008-12-30 16:16:56.000000000 -0800
    48135248@@ -1121,8 +1121,12 @@
    48145249                                      ? (char *)curbuf->b_sfname : "<None>");
Note: See TracChangeset for help on using the changeset viewer.