Ejemplo n.º 1
0
/* Given the argument list, parse it into ArgList format. */
ArgList ParseArgList(VyObj list){
    int num = CountParams(list);
    Param* params = VyMalloc(sizeof(Param) * num);
    int i;

    /* Each element of the list is either a parameter or an argument mode setting symbol...
     * Check if it sets the argument type (?, ~, or ..), and if it doesn't, parse it as a parameter 
     */
    VyObj opt_arg_set = CreateSymbol("?");
    VyObj rest_arg_set = CreateSymbol("..");

    bool opt, rest;
    opt = rest = false;

    int param_num = 0;
    int arg_list_len = ListLen(list);
    for(i = 0; i < arg_list_len; i++){
        VyObj next = ListGet(UNWRAP(list, VyCons), i);

        if(ObjEq(next, opt_arg_set)){
            opt = true;
        }
        else if(ObjEq(next, rest_arg_set)){
            opt = rest = true;
        }
        else {
            params[param_num] = ParseParam(next, opt, rest);
            param_num++;
        }

    }

    ArgList args = {num_params: num, params: params};
    return args;
}
status_t
jmember::AddParam(SString id, SString type)
{
	int32_t i, count = CountParams();
	for (i=0; i<count; i++) {
		if (ParamAt(i)->m_id == id)
			return B_NAME_IN_USE;
	}

	sptr<jnamedtype> j=new jnamedtype(id, type);
	m_params.AddItem(j);	
	
	return B_OK;
}
status_t
IDLTypeScope::AddParam(SString id, const sptr<IDLType>& typeptr, const sptr<IDLCommentBlock>& comment)
{
	int32_t i, count = CountParams();
	for (i=0; i<count; i++) {
		if (ParamAt(i)->m_id == id) {
			return B_NAME_IN_USE;
		}
	}
	
	sptr<IDLNameType> newItem= new IDLNameType(id, typeptr, comment);
	m_params.AddItem(newItem);
	return B_OK;
}