/* 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; }