Patch 9.0.1058
Problem: String value of class and object do not have useful information.
Solution: Add the class name and for the object the member values.
Files: src/eval.c, src/testdir/test_vim9_class.vim
*** ../vim-9.0.1057/src/eval.c 2022-12-10 18:42:09.094378801 +0000
--- src/eval.c 2022-12-14 17:21:38.170624143 +0000
***************
*** 5604,5610 ****
}
case VAR_CLASS:
! // TODO: mark methods in class_obj_methods ?
break;
case VAR_OBJECT:
--- 5604,5611 ----
}
case VAR_CLASS:
! // TODO: Mark methods in class_obj_methods ?
! // Mark initializer expressions?
break;
case VAR_OBJECT:
***************
*** 5863,5875 ****
break;
case VAR_CLASS:
! *tofree = NULL;
! r = (char_u *)"class";
break;
case VAR_OBJECT:
! *tofree = NULL;
! r = (char_u *)"object";
break;
case VAR_FLOAT:
--- 5864,5905 ----
break;
case VAR_CLASS:
! {
! class_T *cl = tv->vval.v_class;
! size_t len = 6 + (cl == NULL ? 9 : STRLEN(cl->class_name)) + 1;
! r = *tofree = alloc(len);
! vim_snprintf((char *)r, len, "class %s",
! cl == NULL ? "[unknown]" : (char *)cl->class_name);
! }
break;
case VAR_OBJECT:
! garray_T ga;
! ga_init2(&ga, 1, 50);
! ga_concat(&ga, (char_u *)"object of ");
! object_T *obj = tv->vval.v_object;
! class_T *cl = obj == NULL ? NULL : obj->obj_class;
! ga_concat(&ga, cl == NULL ? (char_u *)"[unknown]" : cl->class_name);
! if (cl != NULL)
! {
! ga_concat(&ga, (char_u *)" {");
! for (int i = 0; i < cl->class_obj_member_count; ++i)
! {
! if (i > 0)
! ga_concat(&ga, (char_u *)", ");
! objmember_T *m = &cl->class_obj_members[i];
! ga_concat(&ga, m->om_name);
! ga_concat(&ga, (char_u *)": ");
! char_u *tf = NULL;
! ga_concat(&ga, echo_string_core((typval_T *)(obj + 1) + i,
! &tf, numbuf, copyID, echo_style,
! restore_copyID, composite_val));
! vim_free(tf);
! }
! ga_concat(&ga, (char_u *)"}");
! }
!
! *tofree = r = ga.ga_data;
break;
case VAR_FLOAT:
*** ../vim-9.0.1057/src/testdir/test_vim9_class.vim 2022-12-13
21:14:19.219930894 +0000
--- src/testdir/test_vim9_class.vim 2022-12-14 17:20:09.422603391 +0000
***************
*** 283,288 ****
--- 283,303 ----
v9.CheckScriptFailure(lines, 'E1330:')
enddef
+ def Test_class_object_to_string()
+ var lines =<< trim END
+ vim9script
+ class TextPosition
+ this.lnum = 1
+ this.col = 22
+ endclass
+
+ assert_equal("class TextPosition", string(TextPosition))
+
+ var pos = TextPosition.new()
+ assert_equal("object of TextPosition {lnum: 1, col: 22}", string(pos))
+ END
+ v9.CheckScriptSuccess(lines)
+ enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-9.0.1057/src/version.c 2022-12-14 16:42:11.286755477 +0000
--- src/version.c 2022-12-14 17:13:47.054526492 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1058,
/**/
--
FATHER: Make sure the Prince doesn't leave this room until I come and
get him.
FIRST GUARD: Not ... to leave the room ... even if you come and get him.
FATHER: No. Until I come and get him.
SECOND GUARD: Hic.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20221214173105.0B2C91C0CF1%40moolenaar.net.