Using JavaScript closures

## Using JavaScript closures Using JavaScript closures — Creating and invoking closures over JavaScript functions using GClosure |

## Synopsis

    #include <seed/seed.h>

    struct              SeedClosure;
    GClosure *          seed_closure_new                    (SeedContext ctx,
                                                             SeedObject function,
                                                             SeedObject user_data,
                                                             const gchar *description);
    SeedObject          seed_closure_get_callable           (GClosure *c);
    SeedValue           seed_closure_invoke                 (GClosure *closure,
                                                             SeedValue *args,
                                                             guint argc,
                                                             SeedException *exception);
    SeedValue           seed_closure_invoke_with_context    (SeedContext ctx,
                                                             GClosure *closure,
                                                             SeedValue *args,
                                                             guint argc,
                                                             SeedException *exception);
    void                seed_closure_warn_exception         (GClosure *c,
                                                             SeedContext ctx,
                                                             SeedException exception);

## Description

Long description

## Details

### struct SeedClosure

    struct SeedClosure {
      GClosure closure;

      JSObjectRef function;
      JSValueRef user_data;

      GType return_type;
      gchar *description;
    };

### seed_closure_new ()

    GClosure *          seed_closure_new                    (SeedContext ctx,
                                                             SeedObject function,
                                                             SeedObject user_data,
                                                             const gchar *description);

### seed_closure_get_callable ()

    SeedObject          seed_closure_get_callable           (GClosure *c);

### seed_closure_invoke ()

    SeedValue           seed_closure_invoke                 (GClosure *closure,
                                                             SeedValue *args,
                                                             guint argc,
                                                             SeedException *exception);

### seed_closure_invoke_with_context ()

    SeedValue           seed_closure_invoke_with_context    (SeedContext ctx,
                                                             GClosure *closure,
                                                             SeedValue *args,
                                                             guint argc,
                                                             SeedException *exception);

### seed_closure_warn_exception ()

    void                seed_closure_warn_exception         (GClosure *c,
                                                             SeedContext ctx,
                                                             SeedException exception);