Example #1
0
static void context_cleanup(EEL_state *es, EEL_context *c)
{
	switch((EEL_ctxtypes)c->type)
	{
	  case ECTX_MODULE:
		eel_unlock_modules(es);
		break;
	  case ECTX_BLOCK:
	  case ECTX_BODY:
	  case ECTX_FUNCTION:
		break;
	}
	while(c->endjumps)
	{
		EEL_codemark *cm = c->endjumps;
		ej_unlink(c, cm);
		eel_free(es->vm, cm);
	}
	while(c->contjumps)
	{
		EEL_codemark *cm = c->contjumps;
		cj_unlink(c, cm);
		eel_free(es->vm, cm);
	}
	while(c->firstel)
		eel_e_close(c->firstel);
	if((c->flags & ECTX_OWNS_BIO) && c->bio)
		eel_bio_close(c->bio);
	if((c->flags & ECTX_OWNS_CODER) && c->coder)
		eel_coder_close(c->coder);
	DBGD(printf("Killed context '%s'\n", c->name);)
Example #2
0
/*----------------------------------------------------------
	Unloading
----------------------------------------------------------*/
static EEL_xno eb_net_unload(EEL_object *m, int closing)
{
	if(closing)
	{
		eel_free(m->vm, eb_sockets);
		eb_sockets = NULL;
		return 0;
	}
	else
		return EEL_XREFUSE;
}
Example #3
0
void eel_close()
{
	int h;
	if(!_eel_users)
		return;

	for(h = 0; h < MAX_SCRIPTS; ++h)
		eel_free(h);

	eel_s_freeall();
	eel_set_path(NULL);
	eel_s_close();
	eel_lexer_cleanup();

	--_eel_users;
}
Example #4
0
void eel_s_free(EEL_state *es, EEL_symbol *s)
{
	/* Unlink */
	if(s->parent)
		eel_s_unlink(s->parent, s);

	/* Cleanup */
	while(s->symbols)
		eel_s_free(es, s->symbols);
	switch(s->type)
	{
	  case EEL_SUNDEFINED:
	  case EEL_SKEYWORD:
	  case EEL_SVARIABLE:
	  case EEL_SUPVALUE:
	  case EEL_SBODY:
	  case EEL_SNAMESPACE:
		break;
	  case EEL_SCONSTANT:
		eel_v_disown(&s->v.value);
		break;
	  case EEL_SCLASS:
	  case EEL_SMODULE:
	  case EEL_SFUNCTION:
		if(s->v.object)
			eel_o_disown_nz(s->v.object);
		break;
	  case EEL_SOPERATOR:
		eel_operator_free(s->v.op);
		break;
	}
	if(s->name)
		eel_o_disown_nz(s->name);

	/* Destroy */
	eel_free(es->vm, s);
}