/* generic s-exp evaluator class */ #ifndef _E_SEXP_H #define _E_SEXP_H #include <setjmp.h> #include <time.h> #include <glib.h> #ifdef E_SEXP_IS_GTK_OBJECT #include <gtk/gtkobject.h> #endif #ifdef E_SEXP_IS_GTK_OBJECT #define E_SEXP(obj) GTK_CHECK_CAST (obj, e_sexp_get_type (), ESExp) #define E_SEXP_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, e_sexp_get_type (), ESExpClass) #define FILTER_IS_SEXP(obj) GTK_CHECK_TYPE (obj, e_sexp_get_type ()) #else #define E_SEXP(obj) ((struct _ESExp *)(obj)) #define E_SEXP_CLASS(klass) ((struct _ESExpClass *)(klass)) #define FILTER_IS_SEXP(obj) (1) #endif typedef struct _ESExp ESExp; typedef struct _ESExpClass ESExpClass; typedef struct _ESExpSymbol ESExpSymbol; typedef struct _ESExpResult ESExpResult; typedef struct _ESExpTerm ESExpTerm; typedef struct _ESExpResult *(ESExpFunc)(struct _ESExp *sexp, int argc, struct _ESExpResult **argv, void *data); typedef struct _ESExpResult *(ESExpIFunc)(struct _ESExp *sexp, int argc, struct _ESExpTerm **argv, void *data); enum _ESExpResultType { ESEXP_RES_ARRAY_PTR=0, /* type is a ptrarray, what it points to is implementation dependant */ ESEXP_RES_INT, /* type is a number */ ESEXP_RES_STRING, /* type is a pointer to a single string */ ESEXP_RES_BOOL, /* boolean type */ ESEXP_RES_TIME, /* time_t type */ ESEXP_RES_UNDEFINED /* unknown type */ }; struct _ESExpResult { enum _ESExpResultType type; union { GPtrArray *ptrarray; int number; char *string; int bool; time_t time; } value; }; enum _ESExpTermType { ESEXP_TERM_INT = 0, /* integer literal */ ESEXP_TERM_BOOL, /* boolean literal */ ESEXP_TERM_STRING, /* string literal */ ESEXP_TERM_TIME, /* time_t literal (number of seconds past the epoch) */ ESEXP_TERM_FUNC, /* normal function, arguments are evaluated before calling */ ESEXP_TERM_IFUNC, /* immediate function, raw terms are arguments */ ESEXP_TERM_VAR, /* variable reference */ }; struct _ESExpSymbol { int type; /* ESEXP_TERM_FUNC or ESEXP_TERM_VAR */ char *name; void *data; union { ESExpFunc *func; ESExpIFunc *ifunc; } f; }; struct _ESExpTerm { enum _ESExpTermType type; union { char *string; int number; int bool; time_t time; struct { struct _ESExpSymbol *sym; struct _ESExpTerm **terms; int termcount; } func; struct _ESExpSymbol *var; } value; }; struct _ESExp { #ifdef E_SEXP_IS_GTK_OBJECT GtkObject object; #else int refcount; #endif GScanner *scanner; /* for parsing text version */ ESExpTerm *tree; /* root of expression tree */ /* private stuff */ jmp_buf failenv; char *error; /* TODO: may also need a pool allocator for term strings, so we dont lose them in error conditions? */ struct _EMemChunk *term_chunks; struct _EMemChunk *result_chunks; }; struct _ESExpClass { #ifdef E_SEXP_IS_GTK_OBJECT GtkObjectClass parent_class; #endif }; #ifdef E_SEXP_IS_GTK_OBJECT guint e_sexp_get_type (void); #endif ESExp *e_sexp_new (void); #ifndef E_SEXP_IS_GTK_OBJECT void e_sexp_ref (ESExp *f); void e_sexp_unref (ESExp *f); #endif void e_sexp_add_function (ESExp *f, int scope, char *name, ESExpFunc *func, void *data); void e_sexp_add_ifunction (ESExp *f, int scope, char *name, ESExpIFunc *func, void *data); void e_sexp_add_variable (ESExp *f, int scope, char *name, ESExpTerm *value); void e_sexp_remove_symbol (ESExp *f, int scope, char *name); int e_sexp_set_scope (ESExp *f, int scope); void e_sexp_input_text (ESExp *f, const char *text, int len); void e_sexp_input_file (ESExp *f, int fd); int e_sexp_parse (ESExp *f); ESExpResult *e_sexp_eval (ESExp *f); ESExpResult *e_sexp_term_eval (struct _ESExp *f, struct _ESExpTerm *t); ESExpResult *e_sexp_result_new (struct _ESExp *f, int type); void e_sexp_result_free (struct _ESExp *f, struct _ESExpResult *t); /* used in normal functions if they have to abort, to free their arguments */ void e_sexp_resultv_free (struct _ESExp *f, int argc, struct _ESExpResult **argv); /* utility functions for creating s-exp strings. */ void e_sexp_encode_bool (GString *s, gboolean state); void e_sexp_encode_string (GString *s, const char *string); /* only to be called from inside a callback to signal a fatal execution error */ void e_sexp_fatal_error (struct _ESExp *f, char *why, ...); /* return the error string */ const char *e_sexp_error (struct _ESExp *f); #endif /* _E_SEXP_H */ 'gstreamer'>gstreamer</option> <option value='gstreamer-1.16'>gstreamer-1.16</option> <option value='gstreamer0.10-removal' selected='selected'>gstreamer0.10-removal</option> <option value='main'>main</option> <option value='master'>master</option> <option value='mate-1.16'>mate-1.16</option> <option value='mate-1.18'>mate-1.18</option> <option value='mate-1.20'>mate-1.20</option> <option value='mate-1.22'>mate-1.22</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>FreeBSD GNOME current development ports (https://github.com/freebsd/freebsd-ports-gnome)</td><td class='sub right'></td></tr></table> <table class='tabs'><tr><td> <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/about/?h=gstreamer0.10-removal'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/?h=gstreamer0.10-removal'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/refs/?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/tree/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/diff/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/stats/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/p5-Plack-Handler-AnyEvent-ReverseHTTP'> <input type='hidden' name='h' value='gstreamer0.10-removal'/><input type='hidden' name='id' value='133802a1977f876853f50ed6ec5f002b6a8b118f'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>www</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f'>p5-Plack-Handler-AnyEvent-ReverseHTTP</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=133802a1977f876853f50ed6ec5f002b6a8b118f&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=e598d34341b62529b9ef63db27d571f9bcb8c766'>Add NO_STAGE all over the place in preparation for the staging support (cat: ...</a></td><td>bapt</td><td><span title='2013-09-21 07:36:50 +0800'>2013-09-21</span></td><td>1</td><td><span class='deletions'>-5</span>/<span class='insertions'>+1</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=6baf7039c86d473e80dadb8c18e58a99ff11272a'>- convert to the new perl5 framework</a></td><td>az</td><td><span title='2013-09-02 19:04:10 +0800'>2013-09-02</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+2</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=586b104534333ef33a853e192eb1ad5c50a9e0c1'>Fix @dirrmtry in plist found by 9.1-REL exp run.</a></td><td>kuriyama</td><td><span title='2012-11-08 13:39:07 +0800'>2012-11-08</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=811c4be9f0b92363ffcd033d9165287cd6bc9b63'>- Convert all remaining instances of BUILD_DEPENDS=${RUN_DEPENDS} or</a></td><td>swills</td><td><span title='2012-06-11 02:42:48 +0800'>2012-06-11</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/p5-Plack-Handler-AnyEvent-ReverseHTTP?h=gstreamer0.10-removal&id=4ab972b7468e739167f0f48c87471c6c6b7da9e5'>- Get Rid MD5 support</a></td><td>miwi</td><td><span title='2011-03-19 20:38:54 +0800'>2011-03-19</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+0</span></td></tr>