Ejemplo n.º 1
0
/**
 * Assign queue element with an exist queue adaptor.
 */
void queue_assign(queue_t* pque_dest, const queue_t* cpque_src)
{
    assert(pque_dest != NULL);
    assert(cpque_src != NULL);

#ifdef CSTL_QUEUE_LIST_SEQUENCE
    list_assign(&pque_dest->_t_sequence, &cpque_src->_t_sequence);
#else
    deque_assign(&pque_dest->_t_sequence, &cpque_src->_t_sequence);
#endif
}
Ejemplo n.º 2
0
/**
 * Assign stack element with an exist stack adaptor.
 */
void stack_assign(cstl_stack_t* psk_dest, const cstl_stack_t* cpsk_src)
{
    assert(psk_dest != NULL);
    assert(cpsk_src != NULL);

#if defined (CSTL_STACK_VECTOR_SEQUENCE)
    vector_assign(&psk_dest->_t_sequence, &cpsk_src->_t_sequence);
#elif defined (CSTL_STACK_LIST_SEQUENCE)
    list_assign(&psk_dest->_t_sequence, &cpsk_src->_t_sequence);
#else
    deque_assign(&psk_dest->_t_sequence, &cpsk_src->_t_sequence);
#endif
}
Ejemplo n.º 3
0
static int
do_asgnindex(Var var, Var idx, Var expr, Var *ret)
{
    ret->type = var.type;
    if (var.type == LIST) {
	if (idx.type != NUM) {
	    var_free(idx);  var_free(expr);
	    raise(E_TYPE);  return -1;
	} else if (idx.v.num <= 0 || idx.v.num > var.v.list->len) {
	    var_free(expr);
	    raise(E_RANGE);  return -2;
	} else {
	    ret->v.list = list_assign(var.v.list, expr, idx.v.num);
	    return 0;
	}
    } else if (var.type == MAP) {
	ret->v.map = map_add(var.v.map, idx, expr);
	return 0;
    } else {
	var_free(expr);  var_free(idx);
	raise(E_TYPE);  return -3;
    }
}    
Ejemplo n.º 4
0
PRIVATE void list_horse(char **buf, struct comal_line *line)
{
	if (!line) return;

	switch (line->cmd) {
	case 0:
		break;

	case runSYM:
	case delSYM:
	case chdirSYM:
	case rmdirSYM:
	case mkdirSYM:
	case osSYM:
	case dirSYM:
	case unitSYM:
	case select_outputSYM:
	case select_inputSYM:
	case returnSYM:
	case elifSYM:
	case traceSYM:
	case untilSYM:
		list_symsp(buf, line->cmd);
		list_exp(buf, line->lc.exp);
		break;

	case exitSYM:
		list_sym(buf, line->cmd);

		if (line->lc.exp) {
			list_char(buf, ' ');
			list_symsp(buf, whenSYM);
			list_exp(buf, line->lc.exp);
		}

		break;

	case stopSYM:
		list_sym(buf, line->cmd);

		if (line->lc.exp) {
			list_char(buf, ' ');
			list_exp(buf, line->lc.exp);
		}

		break;

	case elseSYM:
	case endSYM:
	case endcaseSYM:
	case endifSYM:
	case endloopSYM:
	case endwhileSYM:
	case otherwiseSYM:
	case loopSYM:
	case nullSYM:
	case retrySYM:
	case pageSYM:
	case handlerSYM:
	case endtrapSYM:
		list_sym(buf, line->cmd);
		break;

	case repeatSYM:
		list_repeat(buf, line);
		break;

	case trapSYM:
		list_sym(buf, line->cmd);

		if (line->lc.traprec.esc) {
			list_char(buf, ' ');
			list_sym(buf, escSYM);
			list_sym(buf, line->lc.traprec.esc);
		}

		break;

	case execSYM:
		if (show_exec)
			list_symsp(buf, execSYM);

		list_exp(buf, line->lc.exp);
		break;

	case caseSYM:
		list_symsp(buf, line->cmd);
		list_expsp(buf, line->lc.exp);
		list_sym(buf, ofSYM);
		break;

	case cursorSYM:
		list_symsp(buf, line->cmd);
		list_twoexp(buf, &line->lc.twoexp, ",", 1);
		break;

	case closeSYM:
		list_sym(buf, line->cmd);

		if (line->lc.exproot) {
			list_char(buf, ' ');
			list_symsp(buf, fileSYM);
			list_explist(buf, line->lc.exproot, 0);
		}

		break;


	case sysSYM:
	case dataSYM:
		list_symsp(buf, line->cmd);
		list_explist(buf, line->lc.exproot, 0);
		break;

	case localSYM:
	case dimSYM:
		list_dim(buf, line);
		break;

	case forSYM:
		list_for(buf, line);
		break;

	case funcSYM:
	case procSYM:
		list_pf(buf, line);
		break;

	case ifSYM:
		list_ifwhile(buf, thenSYM, line);
		break;

	case importSYM:
		list_import(buf, line);
		break;

	case inputSYM:
		list_input(buf, line);
		break;

	case openSYM:
		list_symsp(buf, line->cmd);
		list_symsp(buf, fileSYM);
		list_exp(buf, line->lc.openrec.filenum);
		list_text(buf, ", ");
		list_exp(buf, line->lc.openrec.filename);
		list_text(buf, ", ");
		list_symsp(buf, line->lc.openrec.type);

		if (line->lc.openrec.reclen) {
			list_exp(buf, line->lc.openrec.reclen);

			if (line->lc.openrec.read_only) {
				list_char(buf, ' ');
				list_sym(buf, read_onlySYM);
			}
		}

		break;

	case printSYM:
		list_print(buf, line);
		break;

	case readSYM:
		list_symsp(buf, line->cmd);

		if (line->lc.readrec.modifier)
			list_file(buf, line->lc.readrec.modifier);

		list_explist(buf, line->lc.readrec.lvalroot, 0);
		break;

	case endfuncSYM:
	case endprocSYM:
		list_sym(buf, line->cmd);

		if (line->lineptr) {
			list_char(buf, ' ');
			list_text(buf, line->lineptr->lc.pfrec.id->name);
		}

		break;

	case endforSYM:
		list_sym(buf, line->cmd);

		if (line->lineptr) {
			list_char(buf, ' ');
			list_exp(buf, line->lineptr->lc.forrec.lval);
		}

		break;

	case restoreSYM:
		list_sym(buf, line->cmd);

		if (line->lc.id) {
			list_char(buf, ' ');
			list_text(buf, line->lc.id->name);
		}

		break;


	case whenSYM:
		list_symsp(buf, line->cmd);
		list_whenlist(buf, line->lc.whenroot);
		break;

	case whileSYM:
		list_ifwhile(buf, doSYM, line);
		break;

	case writeSYM:
		list_symsp(buf, line->cmd);
		list_file(buf, &line->lc.writerec.twoexp);
		list_explist(buf, line->lc.writerec.exproot, 0);
		break;

	case becomesSYM:
		list_assign(buf, line);
		break;

	case idSYM:
		list_text(buf, line->lc.id->name);
		list_char(buf, ':');
		break;

	default:
		list_text(buf, "<error: List default action>");
	}
}
Ejemplo n.º 5
0
void _type_copy_list(const void* cpv_first, const void* cpv_second, void* pv_output)
{
    assert(cpv_first != NULL && cpv_second != NULL && pv_output != NULL);
    list_assign((list_t*)cpv_first, (list_t*)cpv_second);
    *(bool_t*)pv_output = true;
}