Re: [Prothon-commits] rev 232 - trunk/src
"Mark Hahn" <[email protected]> Wed, 31 Mar 2004 09:22:03 -0800
| Newsgroups | gmane.comp.lang.prothon.devel |
|---|---|
| Message-ID | <004501c41744$b1e7f400$da01a8c0@walker> |
This dict generator should return a tuple of key,value pairs. Then to use it you have to say: for key,value in dict: The for loop supports tuples. ----- Original Message ----- From: "SVN User" <[email protected]> To: <[email protected]> Sent: Wednesday, March 31, 2004 7:39 AM Subject: [Prothon-commits] rev 232 - trunk/src > Author: bcollins > Date: 2004-03-31 10:39:21 -0500 (Wed, 31 Mar 2004) > New Revision: 232 > > Modified: > trunk/src/builtins.c > Log: > Add generator for Dict object. Like python, it iterates a list of the > keys. > > > Modified: trunk/src/builtins.c > =================================================================== > --- trunk/src/builtins.c 2004-03-31 15:12:34 UTC (rev 231) > +++ trunk/src/builtins.c 2004-03-31 15:39:21 UTC (rev 232) > @@ -74,6 +74,7 @@ > MODULE_DECLARE(Tuple); > MODULE_DECLARE(List); > MODULE_DECLARE(Dict); > +MODULE_DECLARE(DictGen); > MODULE_DECLARE(Seq); > MODULE_DECLARE(Func); > MODULE_DECLARE(Int); > @@ -1278,8 +1279,38 @@ > return NULL; > } > > +DEF(Dict, __gen__, NULL) { > + obj_p list_obj, gen_obj = new_object(DictGen_OBJ); > + > + gen_obj->data_type = OBJ_TYPE_DATAPTR; > + gen_obj->data.ptr = list_obj = clone_list_obj(ist, dict_keys(ist, self)); > + > + listlen(list_obj) = 0; > + return gen_obj; > +} > + > MODULE_END(Dict); > > +MODULE_START(DictGen) > +{ > + DictGen_OBJ = new_object(NULL); > +} > + > +DEF(DictGen, next, NULL) { > + obj_p res, list_obj = self->data.ptr; > + size_t lsiz = listsize(list_obj); > + size_t llen = listlen(list_obj); > + if (llen == lsiz) { > + raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL); > + return NULL; > + } > + res = listitem(list_obj, llen); > + listlen(list_obj)++; > + return res; > +} > + > +MODULE_END(DictGen); > + > // ***************************** FUNC ****************************************** > > MODULE_START(Func) > @@ -1345,6 +1376,7 @@ > MODULE_SUB_INIT(Gen); > MODULE_SUB_INIT(String); > MODULE_SUB_INIT(Dict); > + MODULE_SUB_INIT(DictGen); > MODULE_SUB_INIT(Func); > > SYM_LIMIT = sym(ist, "limit"); > > > _______________________________________________ > Prothon-commits mailing list > [email protected] > http://lists.prothon.org/mailman/listinfo/prothon-commits > > > >