/* This file is autogenerated by jig 0.3.0 from file ENode.jsi
*
* DO NOT EDIT THIS FILE */
#include <njs/jig.h>
#include "js-ENode.h"
/* This interface complies with the following standard:
* ENode IDL (docs/ENode.idl) */
#line 11 "ENode.jsi"
/*
* Javascript binding for Entity
* Copyright (c) 2000 Brian Bassett and Ian Main
*
* Authors: Brian Bassett <bbassett@bbassett.net>
* Ian Main <imain@gtk.org>
*/
/*
* This renderer is free software; please see the LICENSE file for
* specific information as to licensing conditions.
*/
/*
* $Source: /home/cvs/entity/renderers/javascript/js-ENode.c,v $
* $Id: js-ENode.c,v 1.39 2000/12/10 00:29:15 imain Exp $
*/
#line 32 "js-ENode.c"
#line 32 "ENode.jsi"
void
js_return_enode (JSVirtualMachine *js_vm, JSBuiltinInfo *js_info,
JSNode *retval, ENode *node)
{
ENodeInstanceCtx *ni;
ni = js_calloc(js_vm, 1, sizeof(*ni));
ni->enode = node;
enode_ref (node);
js_vm_builtin_create(js_vm, retval, js_info, ni);
/* If all we ever do is call enode(), the vm will never
* do gc otherwise.. */
/*
if (js_vm->gc.bytes_allocated >= js_vm->gc.trigger) {
js_vm_garbage_collect (js_vm, retval, retval);
}
*/
}
static void
js_return_enode_array (JSVirtualMachine *js_vm, JSNode *js_retval,
JSBuiltinInfo *js_info, GSList *list)
{
ENodeInstanceCtx *ni;
gint i = 0;
GSList *tmp = list;
gint len = g_slist_length (tmp);
js_vm_make_array (js_vm, js_retval, len);
while (tmp) {
ENode *enode = tmp->data;
ni = js_calloc(js_vm, 1, sizeof(*ni));
ni->enode = enode;
enode_ref (enode);
js_vm_builtin_create(js_vm, &js_retval->u.varray->data[i],
js_info, ni);
i++;
tmp = tmp->next;
}
}
static void
js_return_ebuf_array (JSVirtualMachine *js_vm, JSNode *js_retval,
GSList *list)
{
gint i = 0;
GSList *tmp = list;
gint len = g_slist_length (tmp);
EDEBUG (("javascript", "Creating ebuf array of length %d\n", len));
js_vm_make_array (js_vm, js_retval, len);
while (tmp) {
EBufConst *buf = tmp->data;
js_retval->u.varray->data[i].type = JS_STRING;
js_vm_make_string (js_vm, &js_retval->u.varray->data[i],
buf->str, buf->len);
i++;
tmp = tmp->next;
}
}
static void
js_return_string_array (JSVirtualMachine *js_vm, JSNode *js_retval,
GSList *list)
{
gint i = 0;
GSList *tmp = list;
gint len = g_slist_length (tmp);
EDEBUG (("javascript", "Creating string array of length %d\n", len));
js_vm_make_array (js_vm, js_retval, len);
while (tmp) {
gchar *str = tmp->data;
js_retval->u.varray->data[i].type = JS_STRING;
js_vm_make_string (js_vm, &js_retval->u.varray->data[i],
str, strlen (str));
i++;
tmp = tmp->next;
}
}
#line 131 "js-ENode.c"
static int ENode_method(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_ictx, JSSymbol js_method, JSNode *js_retval, JSNode *js_args) {
ENodeCtx *js_context = js_info->obj_context;
ENodeInstanceCtx *js_instance = (ENodeInstanceCtx *)js_ictx;
if(js_ictx == NULL) {
return JS_PROPERTY_UNKNOWN;
return JS_PROPERTY_FOUND;
}
if(js_method == js_context->s_new_child) {
#undef js_return
#define js_return js_return_object
char *basename = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "new_child(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
basename = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 145 "ENode.jsi"
ENode *node = js_instance->enode;
ENode *new_child;
new_child = enode_new_child (node, basename, NULL);
js_return_enode (js_vm, js_info, js_retval, new_child);
#line 167 "js-ENode.c"
} while(0);
js_free(basename);
} else if(js_method == js_context->s_parent) {
#undef js_return
#define js_return js_return_object
char *search = NULL;
unsigned int search_valid = (js_args->u.vinteger >= 1);
JSNode js_tempnode;
if (js_args->u.vinteger > 1 || js_args->u.vinteger < 0) {
js_vm_set_err(js_vm, "parent(): illegal number of arguments"); js_vm_error(js_vm);
}
if (search_valid) {
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
search = js_string_to_c_string(js_vm, &js_tempnode);
}
do {
#line 269 "ENode.jsi"
ENode *node;
ENode *parent;
node = js_instance->enode;
parent = enode_parent (node, search);
if (parent) {
js_return_enode (js_vm, js_info, js_retval, parent);
} else {
js_retval->type = JS_NULL;
}
#line 201 "js-ENode.c"
} while(0);
js_free(search);
} else if(js_method == js_context->s_child) {
#undef js_return
#define js_return js_return_object
char *search = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "child(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
search = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 285 "ENode.jsi"
ENode *node;
ENode *child;
node = js_instance->enode;
child = enode_child (node, search);
if (child) {
js_return_enode (js_vm, js_info, js_retval, child);
} else {
js_retval->type = JS_NULL;
}
#line 232 "js-ENode.c"
} while(0);
js_free(search);
} else if(js_method == js_context->s_child_rx) {
#undef js_return
#define js_return js_return_object
char *regex = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "child_rx(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
regex = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 300 "ENode.jsi"
ENode *node;
ENode *child;
node = js_instance->enode;
child = enode_child_rx (node, regex);
if (child) {
js_return_enode (js_vm, js_info, js_retval, child);
} else {
js_retval->type = JS_NULL;
}
#line 263 "js-ENode.c"
} while(0);
js_free(regex);
} else if(js_method == js_context->s_children) {
#undef js_return
#define js_return js_return_array
char *search = NULL;
unsigned int search_valid = (js_args->u.vinteger >= 1);
JSNode js_tempnode;
if (js_args->u.vinteger > 1 || js_args->u.vinteger < 0) {
js_vm_set_err(js_vm, "children(): illegal number of arguments"); js_vm_error(js_vm);
}
if (search_valid) {
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
search = js_string_to_c_string(js_vm, &js_tempnode);
}
do {
#line 315 "ENode.jsi"
ENode *node;
GSList *children;
node = js_instance->enode;
children = enode_children (node, search);
if (children) {
js_return_enode_array (js_vm, js_retval,
js_info, children);
g_slist_free (children);
} else {
js_retval->type = JS_NULL;
}
#line 299 "js-ENode.c"
} while(0);
js_free(search);
} else if(js_method == js_context->s_children_rx) {
#undef js_return
#define js_return js_return_array
char *regex = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "children_rx(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
regex = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 332 "ENode.jsi"
ENode *node;
GSList *children;
node = js_instance->enode;
children = enode_children_rx (node, regex);
if (children) {
js_return_enode_array (js_vm, js_retval,
js_info, children);
g_slist_free (children);
} else {
js_retval->type = JS_NULL;
}
#line 331 "js-ENode.c"
} while(0);
js_free(regex);
} else if(js_method == js_context->s_children_attrib) {
#undef js_return
#define js_return js_return_array
char *attrib = NULL;
char *attrval = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 2) {
js_vm_set_err(js_vm, "children_attrib(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
js_vm_to_string(js_vm, &js_args[2], &js_tempnode);
attrval = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 348 "ENode.jsi"
ENode *node;
GSList *children;
EBufFreeMe *eval;
node = js_instance->enode;
eval = ebuf_new_with_str (attrval);
children = enode_children_attrib (node, attrib, eval);
ebuf_free (eval);
if (children) {
js_return_enode_array (js_vm, js_retval,
js_info, children);
g_slist_free (children);
} else {
js_retval->type = JS_NULL;
}
#line 369 "js-ENode.c"
} while(0);
js_free(attrib);
js_free(attrval);
} else if(js_method == js_context->s_children_attrib_rx) {
#undef js_return
#define js_return js_return_array
char *attrib = NULL;
char *regex = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 2) {
js_vm_set_err(js_vm, "children_attrib_rx(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
js_vm_to_string(js_vm, &js_args[2], &js_tempnode);
regex = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 367 "ENode.jsi"
ENode *node;
GSList *children;
node = js_instance->enode;
children = enode_children_attrib_rx (node, attrib, regex);
if (children) {
js_return_enode_array (js_vm, js_retval,
js_info, children);
g_slist_free (children);
} else {
js_retval->type = JS_NULL;
}
#line 405 "js-ENode.c"
} while(0);
js_free(attrib);
js_free(regex);
} else if(js_method == js_context->s_call) {
#undef js_return
#define js_return js_return_cstring
char *function = NULL;
long js_varargc = (js_args->u.vinteger - 1);
JSNode *js_varargv = &js_args[2];
JSNode js_tempnode;
if (js_args->u.vinteger < 1) {
js_vm_set_err(js_vm, "call(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
function = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 384 "ENode.jsi"
EBufFreeMe *valret;
GSList *call_args = NULL;
char *fmt = NULL;
if (js_varargc > 1) {
js_vm_to_string (js_vm, &js_varargv[0], &js_tempnode);
fmt = js_string_to_c_string (js_vm, &js_tempnode);
/* Advance start of varargs to next entry */
js_varargv = &js_varargv[1];
js_varargc--;
}
if (fmt) {
int i;
int n_args = strlen (fmt);
EDEBUG(("js-embed", "node.call: got the function name %s, argstring '%s'",
function, fmt));
if (n_args != js_varargc) {
js_vm_set_err (js_vm, "call(): argument list does not match argument count");
js_vm_error (js_vm);
}
/* We start at 1 because the fmt argument is the first real vararg */
for (i = 0; i < js_varargc; i++) {
JSNode js_tempnode;
char *str;
int vint;
switch(fmt[i]) {
case 'n':
EDEBUG(("js-embed", "call(): processing got an enode"));
if (js_varargv[i].type == JS_BUILTIN) {
ENodeInstanceCtx *ni;
ni = js_varargv[i].u.vbuiltin->instance_context;
if (ni)
call_args = enode_call_push_node(call_args, ni->enode);
} else {
js_vm_set_err (js_vm,
"call(): argument does not match format (node not an Object)");
js_vm_error (js_vm);
}
break;
/* We're just gonna make strings for all of these for now */
case 'e':
case 'b':
js_vm_to_string (js_vm, &js_varargv[i], &js_tempnode);
call_args = enode_call_push_data (call_args,
js_tempnode.u.vstring->data,
js_tempnode.u.vstring->len);
break;
case 's':
js_vm_to_string (js_vm, &js_varargv[i], &js_tempnode);
str = js_string_to_c_string (js_vm, &js_tempnode);
call_args = enode_call_push_str (call_args, str);
EDEBUG(("js-embed", "call(): vararg %d: string '%s'",
i, str));
break;
case 'i':
js_vm_to_number (js_vm, &js_varargv[i], &js_tempnode);
vint = js_tempnode.u.vinteger;
call_args = enode_call_push_int (call_args, vint);
EDEBUG(("js-embed", "call(): vararg %d: int '%d'",
i, vint));
break;
default:
/* bad args string */
enode_call_free_arg_list_items (call_args);
js_vm_set_err (js_vm, "call(): Bad argument character '%s'", fmt[i]);
js_vm_error (js_vm);
}
}
}
valret = enode_call_with_list (js_instance->enode, function, call_args);
if (!valret) {
EDEBUG(("js-embed", "call(): retval was NULL. returning none"));
js_retval->type = JS_NULL;
} else {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, valret->str, valret->len);
ebuf_free(valret);
}
#line 522 "js-ENode.c"
} while(0);
js_free(function);
} else if(js_method == js_context->s_attrib_quiet) {
#undef js_return
#define js_return js_return_cstring
char *attrib = NULL;
char *value = NULL;
unsigned int value_valid = (js_args->u.vinteger >= 2);
JSNode js_tempnode;
if (js_args->u.vinteger > 2 || js_args->u.vinteger < 1) {
js_vm_set_err(js_vm, "attrib_quiet(): illegal number of arguments"); js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
if (value_valid) {
js_vm_to_string(js_vm, &js_args[2], &js_tempnode);
value = js_string_to_c_string(js_vm, &js_tempnode);
}
do {
#line 482 "ENode.jsi"
ENode *node;
EBufConst *valret;
EBuf *val = NULL;
node = js_instance->enode;
if (value)
val = ebuf_new_with_str (value);
valret = enode_attrib_quiet (node, attrib, val);
if (valret) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, valret->str, valret->len);
} else {
js_retval->type = JS_NULL;
}
#line 564 "js-ENode.c"
} while(0);
js_free(attrib);
js_free(value);
} else if(js_method == js_context->s_attrib_is_true) {
#undef js_return
#define js_return js_return_boolean
char *attrib = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "attrib_is_true(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 502 "ENode.jsi"
js_retval->type= JS_BOOLEAN;
js_retval->u.vboolean = enode_attrib_is_true (js_instance->enode, attrib);
#line 586 "js-ENode.c"
} while(0);
js_free(attrib);
} else if(js_method == js_context->s_list_set_attribs) {
#undef js_return
#define js_return js_return_array
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "list_set_attribs(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 507 "ENode.jsi"
GSList *lst;
lst = enode_list_set_attribs (js_instance->enode);
if (lst) {
js_return_ebuf_array (js_vm, js_retval, lst);
g_slist_free (lst);
} else {
js_retval->type = JS_NULL;
}
#line 612 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_supported_attribs) {
#undef js_return
#define js_return js_return_array
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "supported_attribs(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 520 "ENode.jsi"
GSList *lst;
lst = enode_supported_attribs (js_instance->enode);
if (lst) {
js_return_string_array (js_vm, js_retval, lst);
g_slist_free (lst);
} else {
js_retval->type = JS_NULL;
}
#line 638 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_attrib_description) {
#undef js_return
#define js_return js_return_cstring
char *attrib = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "attrib_description(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 534 "ENode.jsi"
gchar *ret;
ret = enode_attrib_description (js_instance->enode, attrib);
if (ret) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, ret, strlen (ret));
} else {
js_retval->type = JS_NULL;
}
#line 664 "js-ENode.c"
} while(0);
js_free(attrib);
} else if(js_method == js_context->s_attrib_value_type) {
#undef js_return
#define js_return js_return_cstring
char *attrib = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "attrib_value_type(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 545 "ENode.jsi"
gchar *ret;
ret = enode_attrib_value_type (js_instance->enode, attrib);
if (ret) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, ret, strlen (ret));
} else {
js_retval->type = JS_NULL;
}
#line 691 "js-ENode.c"
} while(0);
js_free(attrib);
} else if(js_method == js_context->s_attrib_possible_values) {
#undef js_return
#define js_return js_return_cstring
char *attrib = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "attrib_possible_values(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
attrib = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 556 "ENode.jsi"
gchar *ret;
ret = enode_attrib_possible_values (js_instance->enode, attrib);
if (ret) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, ret, strlen (ret));
} else {
js_retval->type = JS_NULL;
}
#line 718 "js-ENode.c"
} while(0);
js_free(attrib);
} else if(js_method == js_context->s_attribs_sync) {
#undef js_return
#define js_return js_return_undef
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "attribs_sync(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 567 "ENode.jsi"
enode_attribs_sync (js_instance->enode);
#line 735 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_destroy) {
#undef js_return
#define js_return js_return_undef
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "destroy(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 571 "ENode.jsi"
enode_destroy (js_instance->enode);
#line 751 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_destroy_children) {
#undef js_return
#define js_return js_return_undef
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "destroy_children(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 582 "ENode.jsi"
ENode *node;
node = js_instance->enode;
enode_destroy_children (node);
#line 771 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_get_xml) {
#undef js_return
#define js_return js_return_cstring
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "get_xml(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 592 "ENode.jsi"
ENode *node;
EBufFreeMe *xml;
node = js_instance->enode;
xml = enode_get_xml (node);
if (xml) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, xml->str, xml->len);
}
#line 795 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_get_child_xml) {
#undef js_return
#define js_return js_return_cstring
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "get_child_xml(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 604 "ENode.jsi"
ENode *node;
EBufFreeMe *xml;
node = js_instance->enode;
xml = enode_get_child_xml (node);
if (xml) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, xml->str, xml->len);
ebuf_free (xml);
} else {
js_retval->type = JS_NULL;
}
#line 822 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_append_xml) {
#undef js_return
#define js_return js_return_undef
char *xml = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "append_xml(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
xml = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 619 "ENode.jsi"
ENode *node;
EBuf *xmlbuf;
node = js_instance->enode;
xmlbuf = ebuf_new_with_str (xml);
enode_append_xml (node, xmlbuf);
ebuf_free (xmlbuf);
#line 847 "js-ENode.c"
} while(0);
js_free(xml);
} else if(js_method == js_context->s_set_data) {
#undef js_return
#define js_return js_return_undef
char *data = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "set_data(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
data = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 629 "ENode.jsi"
EBufFreeMe *databuf;
databuf = ebuf_new_with_data (js_tempnode.u.vstring->data,
js_tempnode.u.vstring->len);
enode_set_data (js_instance->enode, databuf);
ebuf_free (databuf);
#line 871 "js-ENode.c"
} while(0);
js_free(data);
} else if(js_method == js_context->s_get_data) {
#undef js_return
#define js_return js_return_cstring
if (js_args->u.vinteger != 0) {
js_vm_set_err(js_vm, "get_data(): illegal number of arguments");
js_vm_error(js_vm);
}
do {
#line 637 "ENode.jsi"
EBufConst *data;
data = enode_get_data (js_instance->enode);
if (data) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, data->str, data->len);
} else {
js_retval->type = JS_NULL;
}
#line 896 "js-ENode.c"
} while(0);
} else if(js_method == js_context->s_append_data) {
#undef js_return
#define js_return js_return_undef
char *data = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "append_data(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
data = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 649 "ENode.jsi"
EBufFreeMe *databuf;
databuf = ebuf_new_with_data (js_tempnode.u.vstring->data,
js_tempnode.u.vstring->len);
enode_append_data (js_instance->enode, databuf);
ebuf_free (databuf);
#line 920 "js-ENode.c"
} while(0);
js_free(data);
} else if(js_method == js_context->s_insert_data) {
#undef js_return
#define js_return js_return_undef
long offset = 0;
char *data = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 2) {
js_vm_set_err(js_vm, "insert_data(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_number(js_vm, &js_args[1], &js_tempnode);
if(js_tempnode.type == JS_INTEGER) {
offset = js_tempnode.u.vinteger;
} else {
js_vm_set_err(js_vm, "insert_data(): illegal argument (offset not an integer)");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[2], &js_tempnode);
data = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 658 "ENode.jsi"
EBufFreeMe *databuf;
databuf = ebuf_new_with_data (js_tempnode.u.vstring->data,
js_tempnode.u.vstring->len);
enode_insert_data (js_instance->enode, offset, databuf);
ebuf_free (databuf);
#line 953 "js-ENode.c"
} while(0);
js_free(data);
} else if(js_method == js_context->s_delete_data) {
#undef js_return
#define js_return js_return_undef
long offset = 0;
long count = 0;
JSNode js_tempnode;
if (js_args->u.vinteger != 2) {
js_vm_set_err(js_vm, "delete_data(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_number(js_vm, &js_args[1], &js_tempnode);
if(js_tempnode.type == JS_INTEGER) {
offset = js_tempnode.u.vinteger;
} else {
js_vm_set_err(js_vm, "delete_data(): illegal argument (offset not an integer)");
js_vm_error(js_vm);
}
js_vm_to_number(js_vm, &js_args[2], &js_tempnode);
if(js_tempnode.type == JS_INTEGER) {
count = js_tempnode.u.vinteger;
} else {
js_vm_set_err(js_vm, "delete_data(): illegal argument (count not an integer)");
js_vm_error(js_vm);
}
do {
#line 667 "ENode.jsi"
enode_delete_data (js_instance->enode, offset, count);
#line 986 "js-ENode.c"
} while(0);
} else
return JS_PROPERTY_UNKNOWN;
return JS_PROPERTY_FOUND;
}
static int ENode_property(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_ictx, JSSymbol js_property, int js_op, JSNode *js_retval) {
ENodeCtx *js_context = js_info->obj_context;
ENodeInstanceCtx *js_instance = (ENodeInstanceCtx *)js_ictx;
if(js_ictx == NULL) {
return JS_PROPERTY_UNKNOWN;
return JS_PROPERTY_FOUND;
}
if(js_property == js_context->s_type) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "type: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "type: undeletable property");
js_vm_error(js_vm);
}
else {
#line 156 "ENode.jsi"
ENode *node = js_instance->enode;
EBufConst *type;
type = enode_type (node);
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, type->str, type->len);
#line 1028 "js-ENode.c"
}
} else if(js_property == js_context->s_attrib) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "attrib: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "attrib: undeletable property");
js_vm_error(js_vm);
}
else {
#line 173 "ENode.jsi"
ENodeAttribInstanceCtx *ni;
JSBuiltinInfo *enode_info;
JSNode *enode_node;
enode_node = &js_vm->globals[js_vm_intern(js_vm, "ENodeAttrib")];
enode_info = enode_node->u.vbuiltin->info;
ni = js_calloc(js_vm, 1, sizeof(*ni));
ni->enode = js_instance->enode;
enode_ref (ni->enode);
js_vm_builtin_create(js_vm, js_retval, enode_info, ni);
#line 1056 "js-ENode.c"
}
} else if(js_property == js_context->s_attribval) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "attribval: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "attribval: undeletable property");
js_vm_error(js_vm);
}
else {
#line 193 "ENode.jsi"
ENodeAttribInstanceCtx *ni;
JSBuiltinInfo *enode_info;
JSNode *enode_node;
enode_node = &js_vm->globals[js_vm_intern(js_vm, "ENodeAttribVal")];
enode_info = enode_node->u.vbuiltin->info;
ni = js_calloc(js_vm, 1, sizeof(*ni));
ni->enode = js_instance->enode;
enode_ref (ni->enode);
js_vm_builtin_create(js_vm, js_retval, enode_info, ni);
#line 1084 "js-ENode.c"
}
} else if(js_property == js_context->s_path) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "path: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "path: undeletable property");
js_vm_error(js_vm);
}
else {
#line 213 "ENode.jsi"
ENode *node = js_instance->enode;
EBufFreeMe *path;
path = enode_path (node);
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, path->str, path->len);
ebuf_free (path);
#line 1110 "js-ENode.c"
}
} else if(js_property == js_context->s_basename) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "basename: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "basename: undeletable property");
js_vm_error(js_vm);
}
else {
#line 231 "ENode.jsi"
EBufFreeMe *basename;
ENode *node = js_instance->enode;
basename = enode_basename (node);
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, basename->str, basename->len);
ebuf_free (basename);
#line 1136 "js-ENode.c"
}
} else if(js_property == js_context->s_description) {
if(js_op == JS_BUILTIN_PROP_SET) {
js_vm_set_err(js_vm, "description: read-only property");
js_vm_error(js_vm);
}
else if(js_op == JS_BUILTIN_PROP_DELETE) {
js_vm_set_err(js_vm, "description: undeletable property");
js_vm_error(js_vm);
}
else {
#line 249 "ENode.jsi"
ENode *node = js_instance->enode;
gchar *description;
description = enode_description (node);
if (description) {
js_retval->type = JS_STRING;
js_vm_make_string (js_vm, js_retval, description, strlen (description));
} else {
js_retval->type = JS_NULL;
}
#line 1164 "js-ENode.c"
}
} else
return JS_PROPERTY_UNKNOWN;
return JS_PROPERTY_FOUND;
}
static void ENode_constructor(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, JSNode *js_args, JSNode *js_retval) {
ENodeInstanceCtx *js_instance = js_calloc(js_vm, 1, sizeof(*js_instance));
char *basename = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_free(js_instance);
js_vm_set_err(js_vm, "ENode(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
basename = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 139 "ENode.jsi"
js_instance->enode = enode (basename);
enode_ref (js_instance->enode);
#line 1190 "js-ENode.c"
} while(0);
js_free(basename);
js_vm_builtin_create(js_vm, js_retval, js_info, js_instance);
}
static void ENode_destructor(JSBuiltinInfo *js_info, void *js_ictx) {
ENodeInstanceCtx *js_instance = js_ictx;
if(js_instance) {
do {
#line 577 "ENode.jsi"
/* g_print ("deleting node %s\n", js_instance->enode->element->str); */
enode_unref (js_instance->enode);
#line 1206 "js-ENode.c"
} while(0);
js_free(js_instance);
}
}
static int ENode_query(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_ictx, JSSymbol js_symbol) {
ENodeCtx *js_context = js_info->obj_context;
if(js_ictx == NULL) {
return JS_PROPERTY_UNKNOWN;
}
if(js_symbol == js_context->s_new_child) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_type) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attribval) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_path) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_basename) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_description) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_parent) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_child) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_child_rx) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_children) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_children_rx) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_children_attrib) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_children_attrib_rx) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_call) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib_quiet) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib_is_true) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_list_set_attribs) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_supported_attribs) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib_description) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib_value_type) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attrib_possible_values) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_attribs_sync) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_destroy) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_destroy_children) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_get_xml) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_get_child_xml) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_append_xml) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_set_data) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_get_data) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_append_data) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_insert_data) return JS_PROPERTY_FOUND;
else if(js_symbol == js_context->s_delete_data) return JS_PROPERTY_FOUND;
else return JS_PROPERTY_UNKNOWN;
}
static int ENode_enumerate(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_ictx, int js_nth, JSNode *js_retval) {
if(js_ictx == NULL) {
switch(js_nth) {
default:
return js_vm_object_nth (js_vm, js_info->prototype, js_nth - 0, js_retval);
}
}
switch(js_nth) {
case 0:
js_vm_make_static_string(js_vm, js_retval, "type", 4);
return 1;
case 1:
js_vm_make_static_string(js_vm, js_retval, "attrib", 6);
return 1;
case 2:
js_vm_make_static_string(js_vm, js_retval, "attribval", 9);
return 1;
case 3:
js_vm_make_static_string(js_vm, js_retval, "path", 4);
return 1;
case 4:
js_vm_make_static_string(js_vm, js_retval, "basename", 8);
return 1;
case 5:
js_vm_make_static_string(js_vm, js_retval, "description", 11);
return 1;
default:
return js_vm_object_nth (js_vm, js_retval->u.vbuiltin->prototype, js_nth - 6, js_retval);
}
}
#undef js_return
#define js_return js_return_object
static void enode_global(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_instance, JSNode *js_retval, JSNode *js_args) {
char *basename = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "enode(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
basename = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 674 "ENode.jsi"
ENode *node;
JSBuiltinInfo *enode_info;
node = enode (basename);
if (node) {
JSNode *enode_node;
enode_node = &js_vm->globals[js_vm_intern(js_vm, "ENode")];
enode_info = enode_node->u.vbuiltin->info;
js_return_enode (js_vm, enode_info, js_retval, node);
} else {
js_retval->type = JS_NULL;
}
#line 1317 "js-ENode.c"
} while(0);
js_free(basename);
return;
}
#undef js_return
#define js_return js_return_object
static void enode_rx_global(JSVirtualMachine *js_vm, JSBuiltinInfo *js_info, void *js_instance, JSNode *js_retval, JSNode *js_args) {
char *regex = NULL;
JSNode js_tempnode;
if (js_args->u.vinteger != 1) {
js_vm_set_err(js_vm, "enode_rx(): illegal number of arguments");
js_vm_error(js_vm);
}
js_vm_to_string(js_vm, &js_args[1], &js_tempnode);
regex = js_string_to_c_string(js_vm, &js_tempnode);
do {
#line 691 "ENode.jsi"
ENode *node;
JSBuiltinInfo *enode_info;
node = enode_rx (regex);
if (node) {
JSNode *enode_node;
enode_node = &js_vm->globals[js_vm_intern(js_vm, "ENode")];
enode_info = enode_node->u.vbuiltin->info;
js_return_enode (js_vm, enode_info, js_retval, node);
} else {
js_retval->type = JS_NULL;
}
#line 1354 "js-ENode.c"
} while(0);
js_free(regex);
return;
}
void njs_extension_entry(JSVirtualMachine *js_vm) {
JSNode *js_node;
JSBuiltinInfo *js_info;
ENodeCtx *ENodectx;
ENodectx = js_calloc(js_vm, 1, sizeof(*ENodectx));
ENodectx->s_new_child = js_vm_intern(js_vm, "new_child");
ENodectx->s_type = js_vm_intern(js_vm, "type");
ENodectx->s_attrib = js_vm_intern(js_vm, "attrib");
ENodectx->s_attribval = js_vm_intern(js_vm, "attribval");
ENodectx->s_path = js_vm_intern(js_vm, "path");
ENodectx->s_basename = js_vm_intern(js_vm, "basename");
ENodectx->s_description = js_vm_intern(js_vm, "description");
ENodectx->s_parent = js_vm_intern(js_vm, "parent");
ENodectx->s_child = js_vm_intern(js_vm, "child");
ENodectx->s_child_rx = js_vm_intern(js_vm, "child_rx");
ENodectx->s_children = js_vm_intern(js_vm, "children");
ENodectx->s_children_rx = js_vm_intern(js_vm, "children_rx");
ENodectx->s_children_attrib = js_vm_intern(js_vm, "children_attrib");
ENodectx->s_children_attrib_rx = js_vm_intern(js_vm, "children_attrib_rx");
ENodectx->s_call = js_vm_intern(js_vm, "call");
ENodectx->s_attrib_quiet = js_vm_intern(js_vm, "attrib_quiet");
ENodectx->s_attrib_is_true = js_vm_intern(js_vm, "attrib_is_true");
ENodectx->s_list_set_attribs = js_vm_intern(js_vm, "list_set_attribs");
ENodectx->s_supported_attribs = js_vm_intern(js_vm, "supported_attribs");
ENodectx->s_attrib_description = js_vm_intern(js_vm, "attrib_description");
ENodectx->s_attrib_value_type = js_vm_intern(js_vm, "attrib_value_type");
ENodectx->s_attrib_possible_values = js_vm_intern(js_vm, "attrib_possible_values");
ENodectx->s_attribs_sync = js_vm_intern(js_vm, "attribs_sync");
ENodectx->s_destroy = js_vm_intern(js_vm, "destroy");
ENodectx->s_destroy_children = js_vm_intern(js_vm, "destroy_children");
ENodectx->s_get_xml = js_vm_intern(js_vm, "get_xml");
ENodectx->s_get_child_xml = js_vm_intern(js_vm, "get_child_xml");
ENodectx->s_append_xml = js_vm_intern(js_vm, "append_xml");
ENodectx->s_set_data = js_vm_intern(js_vm, "set_data");
ENodectx->s_get_data = js_vm_intern(js_vm, "get_data");
ENodectx->s_append_data = js_vm_intern(js_vm, "append_data");
ENodectx->s_insert_data = js_vm_intern(js_vm, "insert_data");
ENodectx->s_delete_data = js_vm_intern(js_vm, "delete_data");
js_info = js_vm_builtin_info_create(js_vm);
js_info->method_proc = ENode_method;
js_info->property_proc = ENode_property;
js_info->new_proc = ENode_constructor;
js_info->delete_proc = ENode_destructor;
js_info->query_proc = ENode_query;
js_info->enumerate_proc = ENode_enumerate;
js_info->obj_context = ENodectx;
js_info->obj_context_delete = js_free;
js_node = &js_vm->globals[js_vm_intern(js_vm, "ENode")];
js_vm_builtin_create(js_vm, js_node, js_info, NULL);
js_info = js_vm_builtin_info_create(js_vm);
js_info->global_method_proc = enode_global;
js_node = &js_vm->globals[js_vm_intern(js_vm, "enode")];
js_vm_builtin_create(js_vm, js_node, js_info, NULL);
js_info = js_vm_builtin_info_create(js_vm);
js_info->global_method_proc = enode_rx_global;
js_node = &js_vm->globals[js_vm_intern(js_vm, "enode_rx")];
js_vm_builtin_create(js_vm, js_node, js_info, NULL);
return;
}
syntax highlighted by Code2HTML, v. 0.9.1