+=head1 C API
+
+=head2 C<sub_op_config_t>
+
+A typedef'd struct that configures how L<Sub::Op> should handle a given subroutine name.
+It has the following members :
+
+=over 4
+
+=item *
+
+C<const char *name>
+
+The name of the subroutine you want to replace.
+Allowed to be static.
+
+=item *
+
+C<STRLEN namelen>
+
+C<name>'s length, in bytes.
+
+=item *
+
+C<const char *proto>
+
+The prototype you want to apply to the subroutine, or C<NULL> if none.
+Allowed to be static.
+
+=item *
+
+C<STRLEN protolen>
+
+C<proto>'s length, in bytes.
+
+=item *
+
+C<sub_op_check_t call>
+
+An optional callback that will be fired each time C<perl> compiles a function call to C<name>.
+You can use it to attach extra info to those ops (e.g. with a pointer table), perform some optimizations to the optree, or completely replace the call.
+C<sub_op_check_t> is a typedef'd function pointer defined by :
+
+ typedef OP *(*sub_op_check_t)(pTHX_ OP *, void *);
+
+=item *
+
+C<sub_op_check_t ref>
+
+An optional callback that will be fired each time a reference to C<name> is taken.
+
+=item *
+
+C<void *ud>
+
+An optional user data passed to the C<call> and C<ref> callbacks.
+
+=back
+
+=head2 C<sub_op_init>
+
+ void sub_op_init(sub_op_config_t *c);
+
+Initializes the fields of the C<sub_op_config_t> object.
+For future compatibility, it is required to call this function with your config object before storing your actual values.
+It will store safe defaults for members you won't set.
+
+=head2 C<sub_op_register>
+
+ void sub_op_register(pTHX_ const sub_op_config_t *c, U32 flags);
+
+Registers a name and its configuration into L<Sub::Op>.
+The caller is responsible for allocating and freeing the C<sub_op_config_t> object.
+No pointer to it or to its members is kept, except if you pass the flag C<SUB_OP_REGISTER_STEAL> in which case the configuration object will be stolen to be stored into L<Sub::Op>'s internal datastructure.
+
+=head2 C<sub_op_dup>
+
+ sub_op_config_t *sub_op_dup(pTHX_ const sub_op_config_t *orig);
+
+Deeply clones the specified C<sub_op_config_t> object.
+
+=head2 C<sub_op_free>
+
+ void sub_op_free(pTHX_ sub_op_config_t *c);
+
+Free the memory associated with the specified C<sub_op_config_t> object.
+
+=head2 C<sub_op_study>
+
+ OP *sub_op_study(OP *o, OP **last_arg_p, OP **rv2cv_p);
+
+Studies the subset of the optree based on C<o>, expecting it to be an C<entersub> or C<rv2cv> op (the ones you get in the C<call> and C<ref> callbacks).
+If the tree is well-formed, C<*last_arg_p> will be set to the last argument of the call, C<*rv2cv_p> to the C<rv2cv> op that resolves the function name, and the C<gv> op will be returned.
+Otherwise, this function returns C<NULL>.
+
+=head1 PERL API
+
+=head2 C<enable>
+
+ enable($name);
+ enable($name, $pkg);
+
+Enable the capture of function calls and references constructors to C<$name> in the C<$pkg> package in the current lexical scope.
+You must have registered an appropriate C<sub_op_config_t> configuration by calling the C function C<sub_op_register> in the XS section of your module.
+
+When C<$pkg> is not set, it defaults to the caller package.
+
+=cut
+