MINOR: acl: add types to ACL patterns

We cannot currently match IPv6 addresses in ACL simply because we don't
support types on the patterns. Let's introduce this notion. For now, we
rely on the SMP_TYPES though it doesn't seem like it will last forever
given that some types are not present there (eg: regex, meth). Still it
should be enough to support mixed matchings for most types.

We use the special impossible value SMP_TYPES for types that don't exist
in the SMP_T_* space.
diff --git a/include/types/acl.h b/include/types/acl.h
index ed8582b..492e963 100644
--- a/include/types/acl.h
+++ b/include/types/acl.h
@@ -181,9 +181,16 @@
 	int h2:5, m2:6;         /* 0..24:0..60. Use 24:0 for all day. */
 };
 
-/* The acl will be linked to from the proxy where it is declared */
+/* This describes one ACL pattern, which might be a single value or a tree of
+ * values. All patterns for a single ACL expression are linked together. Some
+ * of them might have a type (eg: IP). Right now, the types are shared with
+ * the samples, though it is possible that in the future this will change to
+ * accommodate for other types (eg: meth, regex). Unsigned and constant types
+ * are preferred when there is a doubt.
+ */
 struct acl_pattern {
 	struct list list;                       /* chaining */
+	int type;                               /* type of the ACL pattern (SMP_T_*) */
 	union {
 		int i;                          /* integer value */
 		struct {
@@ -209,15 +216,14 @@
 	int flags;                      /* expr or pattern flags. */
 };
 
-/*
- * ACL keyword: Associates keywords with parsers, methods to retrieve the value and testers.
- */
-
 /* some dummy declarations to silent the compiler */
 struct proxy;
 struct session;
 
 /*
+ * ACL keyword: Associates keywords with parsers, methods to retrieve the value and testers.
+ */
+/*
  * NOTE:
  * The 'parse' function is called to parse words in the configuration. It must
  * return the number of valid words read. 0 = error. The 'opaque' argument may
@@ -268,6 +274,7 @@
 	struct eb_root pattern_tree;  /* may be used for lookup in large datasets */
 };
 
+/* The acl will be linked to from the proxy where it is declared */
 struct acl {
 	struct list list;           /* chaining */
 	char *name;		    /* acl name */