[augeas-devel] augeas: master - * src/lens.h (struct lens): explain better how we handle recursive lenses
David Lutterkort
lutter at fedoraproject.org
Tue Jan 26 02:22:04 UTC 2010
Gitweb: http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=6dc551f62fcec0b16a6b17b7ac109c72e320430f
Commit: 6dc551f62fcec0b16a6b17b7ac109c72e320430f
Parent: aa5a167aa623d0be9aebcf845f97bf501c86aa5a
Author: David Lutterkort <lutter at redhat.com>
AuthorDate: Mon Jan 25 17:09:27 2010 -0800
Committer: David Lutterkort <lutter at redhat.com>
CommitterDate: Mon Jan 25 18:04:33 2010 -0800
* src/lens.h (struct lens): explain better how we handle recursive lenses
---
src/lens.h | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/lens.h b/src/lens.h
index 9742c87..889cdd4 100644
--- a/src/lens.h
+++ b/src/lens.h
@@ -65,20 +65,24 @@ enum lens_tag {
* means that recursive lenses accept context free languages in the string
* -> tree direction, but only regular tree languages in the tree -> string
* direction.
+ *
+ * Any lens that uses a recursive lens somehow is marked as recursive
+ * itself.
*/
struct lens {
unsigned int ref;
enum lens_tag tag;
struct info *info;
- struct regexp *ctype;
+ struct regexp *ctype; /* NULL when recursive == 1 */
struct regexp *atype;
struct regexp *ktype;
struct regexp *vtype;
+ struct jmt *jmt; /* NULL when recursive == 0 */
unsigned int value : 1;
unsigned int key : 1;
unsigned int recursive : 1;
unsigned int consumes_value : 1;
- /* Flag to help avoid cycles in recursive lenses */
+ /* Whether we are inside a recursive lens or outside */
unsigned int rec_internal : 1;
unsigned int ctype_nullable : 1;
union {
@@ -102,6 +106,13 @@ struct lens {
* is necessary to break the cycles inherent in recursive
* lenses with reference counting. The link through alias is
* set up in lns_check_rec, and not reference counted.
+ *
+ * Generally, any lens used in the body of a recursive lens is
+ * marked with rec_internal == 1; lenses that use the recursive
+ * lens 'from the outside' are marked with rec_internal ==
+ * 0. In the latter case, we can assign types right away,
+ * except for the ctype, which we never have for any recursive
+ * lens.
*/
struct lens *alias;
struct jmt *jmt;
More information about the augeas-devel
mailing list