summaryrefslogtreecommitdiff
path: root/src/interface-map.h
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2015-08-09 11:07:11 +0100
committerVincent Sanders <vince@kyllikki.org>2015-08-09 11:07:11 +0100
commita9e5295d8735ff4ffe10e63f48728380edf6d7a0 (patch)
tree2ab8872a172bc11ac1a4c2b62b13170d9363bb58 /src/interface-map.h
parente78ea8b28064181d9081e7ff0143830c4ec37d7f (diff)
downloadnsgenbind-a9e5295d8735ff4ffe10e63f48728380edf6d7a0.tar.gz
nsgenbind-a9e5295d8735ff4ffe10e63f48728380edf6d7a0.tar.bz2
Update the interface map to contain all operation arguments
This extends the interface map (the intermediate representation) to have information on every operations arguments including overloading and optional arguments. This is important to allow automated checking of passed parameters numbers and types in future.
Diffstat (limited to 'src/interface-map.h')
-rw-r--r--src/interface-map.h33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/interface-map.h b/src/interface-map.h
index 04d9df1..5f1926e 100644
--- a/src/interface-map.h
+++ b/src/interface-map.h
@@ -12,12 +12,37 @@
struct genbind_node;
struct webidl_node;
+/**
+ *map entry for each argument of an overload on an operation
+ */
+struct interface_map_operation_argument_entry {
+ const char *name;
+
+ int optionalc; /**< Number of parameters that are optional */
+ int elipsisc; /**< Number of elipsis parameters */
+
+ struct webidl_node *node;
+};
+
+/** map entry for each overload of an operation */
+struct interface_map_operation_overload_entry {
+ struct webidl_node *type; /**< The return type of this overload */
+
+ int optionalc; /**< Number of parameters that are optional */
+ int elipsisc; /**< Number of elipsis parameters */
+
+ int argumentc; /**< the number of parameters */
+ struct interface_map_operation_argument_entry *argumentv;
+};
+
/** map entry for operations on an interface */
struct interface_map_operation_entry {
const char *name; /** operation name */
struct webidl_node *node; /**< AST operation node */
- struct genbind_node *method; /**< method from binding (if any) */
- int overloadc; /**< Number of previous overloads of this operation */
+ struct genbind_node *method; /**< method from binding */
+
+ int overloadc; /**< Number of overloads of this operation */
+ struct interface_map_operation_overload_entry *overloadv;
};
/** map entry for attributes on an interface */
@@ -25,8 +50,8 @@ struct interface_map_attribute_entry {
const char *name; /** attribute name */
struct webidl_node *node; /**< AST attribute node */
enum webidl_type_modifier modifier;
- struct genbind_node *getter; /**< getter from binding (if any) */
- struct genbind_node *setter; /**< getter from binding (if any) */
+ struct genbind_node *getter; /**< getter from binding */
+ struct genbind_node *setter; /**< getter from binding */
};
/** map entry for constants on an interface */