Patch 7.2.336
Problem:    MzScheme interface can't evaluate an expression.
Solution:   Add mzeval(). (Sergey Khorev)
Files:      runtime/doc/eval.txt, runtime/doc/if_mzsch.txt,
            runtime/doc/usr_41.txt, src/eval.c, src/if_mzsch.c,
            src/proto/eval.pro, src/proto/if_mzsch.pro,
            src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
            src/testdir/Makefile, src/testdir/main.aap, src/testdir/test1.in,
            src/testdir/test70.in, src/testdir/test70.ok


*** ../vim-7.2.335/runtime/doc/eval.txt 2009-11-17 12:20:30.000000000 +0100
--- runtime/doc/eval.txt        2010-01-19 15:30:50.000000000 +0100
***************
*** 1815,1825 ****
                                List    match and submatches of {pat} in {expr}
  matchstr( {expr}, {pat}[, {start}[, {count}]])
                                String  {count}'th match of {pat} in {expr}
! max({list})                   Number  maximum value of items in {list}
! min({list})                   Number  minimum value of items in {list}
! mkdir({name} [, {path} [, {prot}]])
                                Number  create directory {name}
  mode( [expr])                 String  current editing mode
  nextnonblank( {lnum})         Number  line nr of non-blank line >= {lnum}
  nr2char( {expr})              String  single char with ASCII value {expr}
  pathshorten( {expr})          String  shorten directory names in a path
--- 1821,1832 ----
                                List    match and submatches of {pat} in {expr}
  matchstr( {expr}, {pat}[, {start}[, {count}]])
                                String  {count}'th match of {pat} in {expr}
! max( {list})                  Number  maximum value of items in {list}
! min( {list})                  Number  minimum value of items in {list}
! mkdir( {name} [, {path} [, {prot}]])
                                Number  create directory {name}
  mode( [expr])                 String  current editing mode
+ mzeval( {expr})                       any     evaluate |MzScheme| expression
  nextnonblank( {lnum})         Number  line nr of non-blank line >= {lnum}
  nr2char( {expr})              String  single char with ASCII value {expr}
  pathshorten( {expr})          String  shorten directory names in a path
***************
*** 4090,4095 ****
--- 4103,4125 ----
                "c" or "n".
                Also see |visualmode()|.
  
+ mzeval({expr})                                                        
*mzeval()*
+               Evaluate MzScheme expression {expr} and return its result
+               convert to Vim data structures.
+               Numbers and strings are returned as they are.
+               Pairs (including lists and improper lists) and vectors are
+               returned as Vim |Lists|.
+               Hash tables are represented as Vim |Dictionary| type with keys
+               converted to strings.
+               All other types are converted to string with display function.
+               Examples: >
+                   :mz (define l (list 1 2 3))
+                   :mz (define h (make-hash)) (hash-set! h "list" l)
+                   :echo mzeval("l")
+                   :echo mzeval("h")
+ <
+               {only available when compiled with the |+mzscheme| feature}
+ 
  nextnonblank({lnum})                                  *nextnonblank()*
                Return the line number of the first line at or below {lnum}
                that is not blank.  Example: >
*** ../vim-7.2.335/runtime/doc/if_mzsch.txt     2009-06-24 17:51:01.000000000 
+0200
--- runtime/doc/if_mzsch.txt    2010-01-19 15:33:00.000000000 +0100
***************
*** 1,4 ****
! *if_mzsch.txt*  For Vim version 7.2.  Last change: 2009 Jun 24
  
  
                  VIM REFERENCE MANUAL    by Sergey Khorev
--- 1,4 ----
! *if_mzsch.txt*  For Vim version 7.2.  Last change: 2010 Jan 19
  
  
                  VIM REFERENCE MANUAL    by Sergey Khorev
***************
*** 9,16 ****
  1. Commands                           |mzscheme-commands|
  2. Examples                           |mzscheme-examples|
  3. Threads                            |mzscheme-threads|
! 4. The Vim access procedures          |mzscheme-vim|
! 5. Dynamic loading                    |mzscheme-dynamic|
  
  {Vi does not have any of these commands}
  
--- 9,17 ----
  1. Commands                           |mzscheme-commands|
  2. Examples                           |mzscheme-examples|
  3. Threads                            |mzscheme-threads|
! 4. Vim access from MzScheme           |mzscheme-vim|
! 5. mzeval() Vim function              |mzscheme-mzeval|
! 6. Dynamic loading                    |mzscheme-dynamic|
  
  {Vi does not have any of these commands}
  
***************
*** 142,148 ****
  GUI version.
  
  ==============================================================================
! 5. VIM Functions                                      *mzscheme-vim*
  
                                                        *mzscheme-vimext*
  The 'vimext' module provides access to procedures defined in the MzScheme
--- 143,149 ----
  GUI version.
  
  ==============================================================================
! 4. Vim access from MzScheme                           *mzscheme-vim*
  
                                                        *mzscheme-vimext*
  The 'vimext' module provides access to procedures defined in the MzScheme
***************
*** 231,237 ****
      (set-cursor (line . col) [window])  Set cursor position.
  
  ==============================================================================
! 5. Dynamic loading                                *mzscheme-dynamic* *E815*
  
  On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version|
  output then includes |+mzscheme/dyn|.
--- 232,244 ----
      (set-cursor (line . col) [window])  Set cursor position.
  
  ==============================================================================
! 5. mzeval() Vim function                                  *mzscheme-mzeval*
! 
! To facilitate bi-directional interface, you can use |mzeval| function to
! evaluate MzScheme expressions and pass their values to VimL.
! 
! ==============================================================================
! 6. Dynamic loading                                *mzscheme-dynamic* *E815*
  
  On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version|
  output then includes |+mzscheme/dyn|.
*** ../vim-7.2.335/runtime/doc/usr_41.txt       2008-08-09 19:36:54.000000000 
+0200
--- runtime/doc/usr_41.txt      2010-01-19 15:29:01.000000000 +0100
***************
*** 868,873 ****
--- 868,875 ----
        taglist()               get list of matching tags
        tagfiles()              get a list of tags files
  
+       mzeval()                evaluate |MzScheme| expression
+ 
  ==============================================================================
  *41.7*        Defining a function
  
*** ../vim-7.2.335/src/eval.c   2010-01-19 12:46:51.000000000 +0100
--- src/eval.c  2010-01-19 15:48:12.000000000 +0100
***************
*** 433,439 ****
  static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
  static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
  static void list_append __ARGS((list_T *l, listitem_T *item));
- static int list_append_tv __ARGS((list_T *l, typval_T *tv));
  static int list_append_number __ARGS((list_T *l, varnumber_T n));
  static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
  static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef));
--- 433,438 ----
***************
*** 448,459 ****
  static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
  static void dict_unref __ARGS((dict_T *d));
  static void dict_free __ARGS((dict_T *d, int recurse));
- static dictitem_T *dictitem_alloc __ARGS((char_u *key));
  static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
  static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
- static void dictitem_free __ARGS((dictitem_T *item));
  static dict_T *dict_copy __ARGS((dict_T *orig, int deep, int copyID));
- static int dict_add __ARGS((dict_T *d, dictitem_T *item));
  static long dict_len __ARGS((dict_T *d));
  static dictitem_T *dict_find __ARGS((dict_T *d, char_u *key, int len));
  static char_u *dict2string __ARGS((typval_T *tv, int copyID));
--- 447,455 ----
***************
*** 628,633 ****
--- 624,632 ----
  static void f_mkdir __ARGS((typval_T *argvars, typval_T *rettv));
  #endif
  static void f_mode __ARGS((typval_T *argvars, typval_T *rettv));
+ #ifdef FEAT_MZSCHEME
+ static void f_mzeval __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
  static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
***************
*** 764,770 ****
  static int var_check_ro __ARGS((int flags, char_u *name));
  static int var_check_fixed __ARGS((int flags, char_u *name));
  static int tv_check_lock __ARGS((int lock, char_u *name));
- static void copy_tv __ARGS((typval_T *from, typval_T *to));
  static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int 
copyID));
  static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
  static char_u *trans_function_name __ARGS((char_u **pp, int skip, int flags, 
funcdict_T *fd));
--- 763,768 ----
***************
*** 6155,6161 ****
   * Append typval_T "tv" to the end of list "l".
   * Return FAIL when out of memory.
   */
!     static int
  list_append_tv(l, tv)
      list_T    *l;
      typval_T  *tv;
--- 6153,6159 ----
   * Append typval_T "tv" to the end of list "l".
   * Return FAIL when out of memory.
   */
!     int
  list_append_tv(l, tv)
      list_T    *l;
      typval_T  *tv;
***************
*** 6812,6818 ****
   * Note that the value of the item "di_tv" still needs to be initialized!
   * Returns NULL when out of memory.
   */
!     static dictitem_T *
  dictitem_alloc(key)
      char_u    *key;
  {
--- 6810,6816 ----
   * Note that the value of the item "di_tv" still needs to be initialized!
   * Returns NULL when out of memory.
   */
!     dictitem_T *
  dictitem_alloc(key)
      char_u    *key;
  {
***************
*** 6868,6874 ****
  /*
   * Free a dict item.  Also clears the value.
   */
!     static void
  dictitem_free(item)
      dictitem_T *item;
  {
--- 6866,6872 ----
  /*
   * Free a dict item.  Also clears the value.
   */
!     void
  dictitem_free(item)
      dictitem_T *item;
  {
***************
*** 6948,6954 ****
   * Add item "item" to Dictionary "d".
   * Returns FAIL when out of memory and when key already existed.
   */
!     static int
  dict_add(d, item)
      dict_T    *d;
      dictitem_T        *item;
--- 6946,6952 ----
   * Add item "item" to Dictionary "d".
   * Returns FAIL when out of memory and when key already existed.
   */
!     int
  dict_add(d, item)
      dict_T    *d;
      dictitem_T        *item;
***************
*** 7699,7704 ****
--- 7697,7705 ----
      {"mkdir",         1, 3, f_mkdir},
  #endif
      {"mode",          0, 1, f_mode},
+ #ifdef FEAT_MZSCHEME
+     {"mzeval",                1, 1, f_mzeval},
+ #endif
      {"nextnonblank",  1, 1, f_nextnonblank},
      {"nr2char",               1, 1, f_nr2char},
      {"pathshorten",   1, 1, f_pathshorten},
***************
*** 13591,13596 ****
--- 13592,13614 ----
      rettv->v_type = VAR_STRING;
  }
  
+ #ifdef FEAT_MZSCHEME
+ /*
+  * "mzeval()" function
+  */
+     static void
+ f_mzeval(argvars, rettv)
+     typval_T  *argvars;
+     typval_T  *rettv;
+ {
+     char_u    *str;
+     char_u    buf[NUMBUFLEN];
+ 
+     str = get_tv_string_buf(&argvars[0], buf);
+     do_mzeval(str, rettv);
+ }
+ #endif
+ 
  /*
   * "nextnonblank()" function
   */
***************
*** 19274,19280 ****
   * It is OK for "from" and "to" to point to the same item.  This is used to
   * make a copy later.
   */
!     static void
  copy_tv(from, to)
      typval_T *from;
      typval_T *to;
--- 19292,19298 ----
   * It is OK for "from" and "to" to point to the same item.  This is used to
   * make a copy later.
   */
!     void
  copy_tv(from, to)
      typval_T *from;
      typval_T *to;
*** ../vim-7.2.335/src/if_mzsch.c       2009-12-16 19:02:05.000000000 +0100
--- src/if_mzsch.c      2010-01-19 15:43:05.000000000 +0100
***************
*** 170,175 ****
--- 170,177 ----
  #ifdef FEAT_EVAL
  static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth,
        Scheme_Hash_Table *visited);
+ static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+       Scheme_Hash_Table *visited);
  #endif
  
  #ifdef MZ_PRECISE_GC
***************
*** 2733,2738 ****
--- 2735,2959 ----
      MZ_GC_UNREG();
      return result;
  }
+ 
+     static int
+ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+       Scheme_Hash_Table *visited)
+ {
+     int               status = OK;
+     typval_T  *found;
+     MZ_GC_CHECK();
+     if (depth > 100) /* limit the deepest recursion level */
+     {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = 0;
+       return FAIL;
+     }
+ 
+     found = (typval_T *)scheme_hash_get(visited, obj);
+     if (found != NULL)
+       copy_tv(found, tv);
+     else if (SCHEME_VOIDP(obj))
+     {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = 0;
+     }
+     else if (SCHEME_INTP(obj))
+     {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = SCHEME_INT_VAL(obj);
+     }
+     else if (SCHEME_BOOLP(obj))
+     {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = SCHEME_TRUEP(obj);
+     }
+ # ifdef FEAT_FLOAT
+     else if (SCHEME_DBLP(obj))
+     {
+       tv->v_type = VAR_FLOAT;
+       tv->vval.v_float = SCHEME_DBL_VAL(obj);
+     }
+ # endif
+     else if (SCHEME_STRINGP(obj))
+     {
+       tv->v_type = VAR_STRING;
+       tv->vval.v_string = vim_strsave((char_u *)SCHEME_STR_VAL(obj));
+     }
+     else if (SCHEME_VECTORP(obj) || SCHEME_NULLP(obj)
+           || SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj))
+     {
+       list_T  *list = list_alloc();
+       if (list == NULL)
+           status = FAIL;
+       else
+       {
+           int             i;
+           Scheme_Object   *curr = NULL;
+           Scheme_Object   *cval = NULL;
+           /* temporary var to hold current element of vectors and pairs */
+           typval_T        *v;
+ 
+           MZ_GC_DECL_REG(2);
+           MZ_GC_VAR_IN_REG(0, curr);
+           MZ_GC_VAR_IN_REG(1, cval);
+           MZ_GC_REG();
+ 
+           tv->v_type = VAR_LIST;
+           tv->vval.v_list = list;
+           ++list->lv_refcount;
+ 
+           v = (typval_T *)alloc(sizeof(typval_T));
+           if (v == NULL)
+               status = FAIL;
+           else
+           {
+               /* add the value in advance to allow handling of 
self-referencial
+                * data structures */
+               typval_T    *visited_tv = (typval_T *)alloc(sizeof(typval_T));
+               copy_tv(tv, visited_tv);
+               scheme_hash_set(visited, obj, (Scheme_Object *)visited_tv);
+ 
+               if (SCHEME_VECTORP(obj))
+               {
+                   for (i = 0; i < SCHEME_VEC_SIZE(obj); ++i)
+                   {
+                       cval = SCHEME_VEC_ELS(obj)[i];
+                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       if (status == FAIL)
+                           break;
+                       status = list_append_tv(list, v);
+                       clear_tv(v);
+                       if (status == FAIL)
+                           break;
+                   }
+               }
+               else if (SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj))
+               {
+                   for (curr = obj;
+                           SCHEME_PAIRP(curr) || SCHEME_MUTABLE_PAIRP(curr);
+                           curr = SCHEME_CDR(curr))
+                   {
+                       cval = SCHEME_CAR(curr);
+                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       if (status == FAIL)
+                           break;
+                       status = list_append_tv(list, v);
+                       clear_tv(v);
+                       if (status == FAIL)
+                           break;
+                   }
+                   /* impoper list not terminated with null
+                    * need to handle the last element */
+                   if (status == OK && !SCHEME_NULLP(curr))
+                   {
+                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       if (status == OK)
+                       {
+                           status = list_append_tv(list, v);
+                           clear_tv(v);
+                       }
+                   }
+               }
+               /* nothing to do for scheme_null */
+               vim_free(v);
+           }
+           MZ_GC_UNREG();
+       }
+     }
+     else if (SCHEME_HASHTP(obj))
+     {
+       int             i;
+       dict_T          *dict;
+       Scheme_Object   *key = NULL;
+       Scheme_Object   *val = NULL;
+ 
+       MZ_GC_DECL_REG(2);
+       MZ_GC_VAR_IN_REG(0, key);
+       MZ_GC_VAR_IN_REG(1, val);
+       MZ_GC_REG();
+ 
+       dict = dict_alloc();
+       if (dict == NULL)
+           status = FAIL;
+       else
+       {
+           typval_T    *visited_tv = (typval_T *)alloc(sizeof(typval_T));
+ 
+           tv->v_type = VAR_DICT;
+           tv->vval.v_dict = dict;
+           ++dict->dv_refcount;
+ 
+           copy_tv(tv, visited_tv);
+           scheme_hash_set(visited, obj, (Scheme_Object *)visited_tv);
+ 
+           for (i = 0; i < ((Scheme_Hash_Table *)obj)->size; ++i)
+           {
+               if (((Scheme_Hash_Table *) obj)->vals[i] != NULL)
+               {
+                   /* generate item for `diplay'ed Scheme key */
+                   dictitem_T  *item = dictitem_alloc((char_u *)string_to_line(
+                               ((Scheme_Hash_Table *) obj)->keys[i]));
+                   /* convert Scheme val to Vim and add it to the dict */
+                   if (mzscheme_to_vim(((Scheme_Hash_Table *) obj)->vals[i],
+                                   &item->di_tv, depth + 1, visited) == FAIL
+                           || dict_add(dict, item) == FAIL)
+                   {
+                       dictitem_free(item);
+                       status = FAIL;
+                       break;
+                   }
+               }
+ 
+           }
+       }
+       MZ_GC_UNREG();
+     }
+     else
+     {
+       /* `display' any other value to string */
+       tv->v_type = VAR_STRING;
+       tv->vval.v_string = (char_u *)string_to_line(obj);
+     }
+     return status;
+ }
+ 
+     void
+ do_mzeval(char_u *str, typval_T *rettv)
+ {
+     int i;
+     Scheme_Object     *ret = NULL;
+     Scheme_Hash_Table *visited = NULL;
+ 
+     MZ_GC_DECL_REG(2);
+     MZ_GC_VAR_IN_REG(0, ret);
+     MZ_GC_VAR_IN_REG(0, visited);
+     MZ_GC_REG();
+ 
+     if (mzscheme_init())
+     {
+       MZ_GC_UNREG();
+       return;
+     }
+ 
+     MZ_GC_CHECK();
+     visited = scheme_make_hash_table(SCHEME_hash_ptr);
+     MZ_GC_CHECK();
+ 
+     if (eval_with_exn_handling(str, do_eval, &ret) == OK)
+       mzscheme_to_vim(ret, rettv, 1, visited);
+ 
+     for (i = 0; i < visited->size; ++i)
+     {
+       /* free up remembered objects */
+       if (visited->vals[i] != NULL)
+       {
+           free_tv((typval_T *)visited->vals[i]);
+       }
+     }
+ 
+     MZ_GC_UNREG();
+ }
  #endif
  
  /*
*** ../vim-7.2.335/src/proto/eval.pro   2009-09-30 15:15:33.000000000 +0200
--- src/proto/eval.pro  2010-01-19 15:45:39.000000000 +0100
***************
*** 47,56 ****
--- 47,60 ----
  void list_free __ARGS((list_T *l, int recurse));
  dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
  char_u *list_find_str __ARGS((list_T *l, long idx));
+ int list_append_tv __ARGS((list_T *l, typval_T *tv));
  int list_append_dict __ARGS((list_T *list, dict_T *dict));
  int list_append_string __ARGS((list_T *l, char_u *str, int len));
  int garbage_collect __ARGS((void));
  dict_T *dict_alloc __ARGS((void));
+ dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ void dictitem_free __ARGS((dictitem_T *item));
+ int dict_add __ARGS((dict_T *d, dictitem_T *item));
  int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
  char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
  long get_dict_number __ARGS((dict_T *d, char_u *key));
***************
*** 77,82 ****
--- 81,87 ----
  void new_script_vars __ARGS((scid_T id));
  void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
  void vars_clear __ARGS((hashtab_T *ht));
+ void copy_tv __ARGS((typval_T *from, typval_T *to));
  void ex_echo __ARGS((exarg_T *eap));
  void ex_echohl __ARGS((exarg_T *eap));
  void ex_execute __ARGS((exarg_T *eap));
*** ../vim-7.2.335/src/proto/if_mzsch.pro       2009-12-16 19:02:05.000000000 
+0100
--- src/proto/if_mzsch.pro      2010-01-19 15:29:01.000000000 +0100
***************
*** 15,18 ****
--- 15,19 ----
  void *mzvim_eval_string __ARGS((char_u *str));
  int mzthreads_allowed __ARGS((void));
  void mzscheme_main __ARGS((void));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
  /* vim: set ft=c : */
*** ../vim-7.2.335/src/testdir/Make_dos.mak     2009-11-17 17:57:10.000000000 
+0100
--- src/testdir/Make_dos.mak    2010-01-19 15:43:48.000000000 +0100
***************
*** 29,35 ****
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out
  
! SCRIPTS32 =   test50.out
  
  SCRIPTS_GUI = test16.out
  
--- 29,35 ----
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out
  
! SCRIPTS32 =   test50.out test70.out
  
  SCRIPTS_GUI = test16.out
  
*** ../vim-7.2.335/src/testdir/Make_ming.mak    2009-11-17 17:57:10.000000000 
+0100
--- src/testdir/Make_ming.mak   2010-01-19 15:29:01.000000000 +0100
***************
*** 48,54 ****
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out
  
! SCRIPTS32 =   test50.out
  
  SCRIPTS_GUI = test16.out
  
--- 48,54 ----
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out
  
! SCRIPTS32 =   test50.out test70.out
  
  SCRIPTS_GUI = test16.out
  
***************
*** 78,83 ****
--- 78,84 ----
        -$(DEL) small.vim
        -$(DEL) tiny.vim
        -$(DEL) mbyte.vim
+       -$(DEL) mzscheme.vim
        -$(DEL) X*
        -$(DEL) viminfo
  
*** ../vim-7.2.335/src/testdir/Makefile 2009-11-17 17:40:34.000000000 +0100
--- src/testdir/Makefile        2010-01-19 15:29:01.000000000 +0100
***************
*** 23,29 ****
                test54.out test55.out test56.out test57.out test58.out \
                test59.out test60.out test61.out test62.out test63.out \
                test64.out test65.out test66.out test67.out test68.out \
!               test69.out
  
  SCRIPTS_GUI = test16.out
  
--- 23,29 ----
                test54.out test55.out test56.out test57.out test58.out \
                test59.out test60.out test61.out test62.out test63.out \
                test64.out test65.out test66.out test67.out test68.out \
!               test69.out test70.out
  
  SCRIPTS_GUI = test16.out
  
***************
*** 44,53 ****
  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
  
  clean:
!       -rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim 
mbyte.vim test.ok X* valgrind.pid* viminfo
  
  test1.out: test1.in
!       -rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
        $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
        @/bin/sh -c "if diff test.out $*.ok; \
                then mv -f test.out $*.out; \
--- 44,53 ----
  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
  
  clean:
!       -rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim 
mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
  
  test1.out: test1.in
!       -rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* 
viminfo
        $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
        @/bin/sh -c "if diff test.out $*.ok; \
                then mv -f test.out $*.out; \
*** ../vim-7.2.335/src/testdir/main.aap 2004-06-13 21:05:31.000000000 +0200
--- src/testdir/main.aap        2010-01-19 15:29:01.000000000 +0100
***************
*** 32,42 ****
  $Scripts $ScriptsGUI: $VimProg
  
  clean:
!       :del {r}{force} *.out test.log tiny.vim small.vim mbyte.vim test.ok X*
  
  # test1 is special, it checks for features
  test1.out: test1.in
!       :del {force} test1.failed tiny.vim small.vim mbyte.vim
        :sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in test1.in
        @if os.system("diff test.out test1.ok") != 0:
                :error test1 FAILED - Something basic is wrong
--- 32,42 ----
  $Scripts $ScriptsGUI: $VimProg
  
  clean:
!       :del {r}{force} *.out test.log tiny.vim small.vim mbyte.vim 
mzscheme.vim test.ok X*
  
  # test1 is special, it checks for features
  test1.out: test1.in
!       :del {force} test1.failed tiny.vim small.vim mbyte.vim mzscheme.vim
        :sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in test1.in
        @if os.system("diff test.out test1.ok") != 0:
                :error test1 FAILED - Something basic is wrong
*** ../vim-7.2.335/src/testdir/test1.in 2004-06-13 20:19:23.000000000 +0200
--- src/testdir/test1.in        2010-01-19 15:38:44.000000000 +0100
***************
*** 13,18 ****
--- 13,19 ----
  
  If Vim was not compiled with the +multi_byte feature, the mbyte.vim script 
will be set like small.vim above.  mbyte.vim is sourced by tests that require 
the
  +multi_byte feature.
+ Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
  
  STARTTEST
  :" Write a single line to test.out to check if testing works at all.
***************
*** 25,32 ****
--- 26,36 ----
  w! test.out
  qa!
  :w! mbyte.vim
+ :w! mzscheme.vim
  :" If +multi_byte feature supported, make mbyte.vim empty.
  :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
+ :" If +mzscheme feature supported, make mzscheme.vim empty.
+ :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
  :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
  :" Otherwise write small.vim to skip the test.
  :if 1 | q! | endif
*** ../vim-7.2.335/src/testdir/test70.in        2010-01-19 15:47:24.000000000 
+0100
--- src/testdir/test70.in       2010-01-19 15:29:01.000000000 +0100
***************
*** 0 ****
--- 1,53 ----
+ Smoke test for MzScheme interface and mzeval() function
+ 
+ STARTTEST
+ :so mzscheme.vim
+ :set nocompatible viminfo+=nviminfo
+ :function! MzRequire()
+ :redir => l:mzversion
+ :mz (version)
+ :redir END
+ :if strpart(l:mzversion, 1, 1) < "4"
+ :" MzScheme versions < 4.x:
+ :mz (require (prefix vim- vimext))
+ :else
+ :" newer versions:
+ :mz (require (prefix-in vim- 'vimext))
+ :mz (require r5rs)
+ :endif
+ :endfunction
+ :silent call MzRequire()
+ :mz (define l '("item0" "dictionary with list OK" "item2"))
+ :mz (define h (make-hash))
+ :mz (hash-set! h "list" l)
+ /^1
+ :" change buffer contents
+ :mz (vim-set-buff-line (vim-eval "line('.')") "1 changed line 1")
+ :" scalar test
+ :let tmp_string = mzeval('"string"')
+ :let tmp_1000 = mzeval('1000')
+ :if tmp_string . tmp_1000 == "string1000"
+ :let scalar_res = "OK"
+ :else
+ :let scalar_res = "FAILED"
+ :endif
+ :call append(search("^1"), "scalar test " . scalar_res)
+ :" dictionary containing a list
+ :let tmp = mzeval("h")["list"][1]
+ :/^2/put =tmp
+ :" circular list (at the same time test lists containing lists)
+ :mz (set-car! (cddr l) l)
+ :let l2 = mzeval("h")["list"]
+ :if l2[2] == l2
+ :let res = "OK"
+ :else
+ :let res = "FAILED"
+ :endif
+ :call setline(search("^3"), "circular test " . res)
+ :?^1?,$w! test.out
+ :qa!
+ ENDTEST
+ 
+ 1 line 1
+ 2 line 2
+ 3 line 3
*** ../vim-7.2.335/src/testdir/test70.ok        2010-01-19 15:47:24.000000000 
+0100
--- src/testdir/test70.ok       2010-01-19 15:29:01.000000000 +0100
***************
*** 0 ****
--- 1,5 ----
+ 1 changed line 1
+ scalar test OK
+ 2 line 2
+ dictionary with list OK
+ circular test OK
*** ../vim-7.2.335/src/version.c        2010-01-19 15:23:38.000000000 +0100
--- src/version.c       2010-01-19 15:46:44.000000000 +0100
***************
*** 683,684 ****
--- 683,686 ----
  {   /* Add new patch number below this line */
+ /**/
+     336,
  /**/

-- 
"Computers in the future may weigh no more than 1.5 tons."
                                   Popular Mechanics, 1949

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
-- 
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui