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
>
>
>
>