static int lua_custom_visitor_visit_node_generic(GT_UNUSED GtNodeVisitor *nv, GtGenomeNode *fn, const char *function, GtError *err) { GT_UNUSED GtNodeVisitor **vis; GtLuaCustomVisitor *lcv; GT_UNUSED GtGenomeNode **node; int had_err = 0; gt_assert(nv); lcv = lua_custom_visitor_cast(nv); node = check_genome_node(lcv->L, 1); vis = check_genome_visitor(lcv->L, 2); gt_assert(*node == (GtGenomeNode*) fn); gt_assert(*vis == (GtNodeVisitor*) nv); lua_pushvalue(lcv->L, 2); lua_pushstring(lcv->L, function); lua_gettable(lcv->L, 2); if (lua_isnil(lcv->L, -1)) { lua_pop(lcv->L, 1); return had_err; } lua_pushvalue(lcv->L, 2); gt_lua_genome_node_push(lcv->L, gt_genome_node_ref((GtGenomeNode*) fn)); if (lua_pcall(lcv->L, 2, 0, 0)) { const char *error = lua_tostring(lcv->L, -1); gt_error_set(err, "%s", error); had_err = -1; } return had_err; }
static int gt_node_visitor_lua_delete(lua_State *L) { GtNodeVisitor **gv; gv = check_genome_visitor(L, 1); gt_node_visitor_delete(*gv); return 0; }
static int genome_node_lua_accept(lua_State *L) { GtGenomeNode **gn; GtNodeVisitor **gv; GtError *err; gn = check_genome_node(L, 1); gv = check_genome_visitor(L, 2); err = gt_error_new(); if (gt_genome_node_accept(*gn, *gv, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; }
static int stream_evaluator_lua_evaluate(lua_State *L) { GtStreamEvaluator **stream_evaluator; GtNodeVisitor **genome_visitor; GtError *err; stream_evaluator = check_stream_evaluator(L); if (lua_gettop(L) >= 2) { genome_visitor = check_genome_visitor(L, 2); } else genome_visitor = NULL; err = gt_error_new(); if (gt_stream_evaluator_evaluate(*stream_evaluator, false, false, genome_visitor ? *genome_visitor : NULL, err)) { return gt_lua_error(L, err); } gt_error_delete(err); return 0; }