static ListHead* local_var_declaration(int type) { AutoInfo *a = NULL; int size = SIZE(type); a = malloc(sizeof(AutoInfo)); if(a == NULL){ fprintf(stderr, "line %d: malloc auto error\n", save_line); exit(0); } memset(a, 0, sizeof(AutoInfo)); INIT_LIST_NODE(&a->auto_list); match(token); strncpy(a->name,save_word,NAME_SIZE); match(TOK_ID); a->type = type; /* var */ if(token == TOK_SEMI){ if(type == TOK_PINT || type == TOK_PCHAR) a->is_pointer = true; a->size = size; match(TOK_SEMI); } /* array */ else if(token == TOK_LSQUARE){ /* match [ */ match(TOK_LSQUARE); match(TOK_NUM); match(TOK_RSQUARE); match(TOK_SEMI); a->size = size * save_num; a->is_array = true; }else{ fprintf(stderr, "line %d: param does not a type\n", save_line); } return &a->auto_list; }
static struct client_info *xio_create_client(struct xio_session *session, struct xio_connection *conn) { struct client_info *ci; ci = zalloc(sizeof(*ci)); if (!ci) return NULL; ci->type = CLIENT_INFO_TYPE_XIO; ci->conn.session = session; ci->conn.conn = conn; INIT_LIST_NODE(&ci->conn.list); refcount_set(&ci->refcnt, 0); INIT_LIST_HEAD(&ci->done_reqs); return ci; }
static ListHead* param() { ParamInfo *param = NULL; param = malloc(sizeof(ParamInfo)); if(param == NULL) { fprintf(stderr,"param node malloc error"); exit(0); } memset(param,0,sizeof(ParamInfo)); INIT_LIST_NODE(¶m->param_list); param->type = token; param->size = SIZE(token); if(token == TOK_INT || token == TOK_CHAR|| token == TOK_PINT || token == TOK_PCHAR|| token == TOK_VOID || token == TOK_PVOID) { match(token); } strncpy(param->name,save_word,NAME_SIZE); match(TOK_ID); if(token==TOK_LSQUARE) { param->is_array = true; match(TOK_LSQUARE); match(TOK_RSQUARE); } return ¶m->param_list; }