home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 7.2.374
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.2.374
- Problem: Ruby eval() doesn't understand Vim types.
- Solution: Add the vim_to_ruby() function. (George Gensure)
- Files: src/eval.c, src/if_ruby.c
-
-
- *** ../vim-7.2.373/src/eval.c 2010-01-19 15:51:29.000000000 +0100
- --- src/eval.c 2010-02-24 15:36:40.000000000 +0100
- ***************
- *** 5872,5878 ****
- return item1 == NULL && item2 == NULL;
- }
-
- ! #if defined(FEAT_PYTHON) || defined(FEAT_MZSCHEME) || defined(PROTO)
- /*
- * Return the dictitem that an entry in a hashtable points to.
- */
- --- 5872,5879 ----
- return item1 == NULL && item2 == NULL;
- }
-
- ! #if defined(FEAT_RUBY) || defined(FEAT_PYTHON) || defined(FEAT_MZSCHEME) \
- ! || defined(PROTO)
- /*
- * Return the dictitem that an entry in a hashtable points to.
- */
- *** ../vim-7.2.373/src/if_ruby.c 2010-02-18 15:51:25.000000000 +0100
- --- src/if_ruby.c 2010-02-24 15:45:15.000000000 +0100
- ***************
- *** 660,679 ****
- return Qnil;
- }
-
- static VALUE vim_evaluate(VALUE self UNUSED, VALUE str)
- {
- #ifdef FEAT_EVAL
- ! char_u *value = eval_to_string((char_u *)StringValuePtr(str), NULL, TRUE);
-
- ! if (value != NULL)
- {
- ! VALUE val = rb_str_new2((char *)value);
- ! vim_free(value);
- ! return val;
- }
- ! else
- #endif
- - return Qnil;
- }
-
- static VALUE buffer_new(buf_T *buf)
- --- 660,747 ----
- return Qnil;
- }
-
- + #ifdef FEAT_EVAL
- + static VALUE vim_to_ruby(typval_T *tv)
- + {
- + VALUE result = Qnil;
- +
- + if (tv->v_type == VAR_STRING)
- + {
- + result = rb_str_new2((char *)tv->vval.v_string);
- + }
- + else if (tv->v_type == VAR_NUMBER)
- + {
- + result = INT2NUM(tv->vval.v_number);
- + }
- + # ifdef FEAT_FLOAT
- + else if (tv->v_type == VAR_FLOAT)
- + {
- + result = rb_float_new(tv->vval.v_float);
- + }
- + # endif
- + else if (tv->v_type == VAR_LIST)
- + {
- + list_T *list = tv->vval.v_list;
- + listitem_T *curr;
- +
- + result = rb_ary_new();
- +
- + if (list != NULL)
- + {
- + for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
- + {
- + rb_ary_push(result, vim_to_ruby(&curr->li_tv));
- + }
- + }
- + }
- + else if (tv->v_type == VAR_DICT)
- + {
- + result = rb_hash_new();
- +
- + if (tv->vval.v_dict != NULL)
- + {
- + hashtab_T *ht = &tv->vval.v_dict->dv_hashtab;
- + long_u todo = ht->ht_used;
- + hashitem_T *hi;
- + dictitem_T *di;
- +
- + for (hi = ht->ht_array; todo > 0; ++hi)
- + {
- + if (!HASHITEM_EMPTY(hi))
- + {
- + --todo;
- +
- + di = dict_lookup(hi);
- + rb_hash_aset(result, rb_str_new2((char *)hi->hi_key),
- + vim_to_ruby(&di->di_tv));
- + }
- + }
- + }
- + } /* else return Qnil; */
- +
- + return result;
- + }
- + #endif
- +
- static VALUE vim_evaluate(VALUE self UNUSED, VALUE str)
- {
- #ifdef FEAT_EVAL
- ! typval_T *tv;
- ! VALUE result;
-
- ! tv = eval_expr((char_u *)StringValuePtr(str), NULL);
- ! if (tv == NULL)
- {
- ! return Qnil;
- }
- ! result = vim_to_ruby(tv);
- !
- ! free_tv(tv);
- !
- ! return result;
- ! #else
- ! return Qnil;
- #endif
- }
-
- static VALUE buffer_new(buf_T *buf)
- *** ../vim-7.2.373/src/version.c 2010-02-24 15:25:13.000000000 +0100
- --- src/version.c 2010-02-24 15:46:57.000000000 +0100
- ***************
- *** 683,684 ****
- --- 683,686 ----
- { /* Add new patch number below this line */
- + /**/
- + 374,
- /**/
-
- --
- ARTHUR: (as the MAN next to him is squashed by a sheep) Knights! Run away!
- Midst echoing shouts of "run away" the KNIGHTS retreat to cover with the odd
- cow or goose hitting them still. The KNIGHTS crouch down under cover.
- "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///
-