access Vecs with vec_at
This commit is contained in:
parent
1561c05a68
commit
7ba4b2a9d7
35
pnode.c
35
pnode.c
@ -23,7 +23,7 @@ void parser_free(Parser*p)
|
||||
{
|
||||
pnode_free(&p->root);
|
||||
for(size_t i=0;i<p->mem_locations.size;++i)
|
||||
var_free(&((Var*)p->mem_locations.buffer)[i]);
|
||||
var_free(vec_at(&p->mem_locations,i,Var*));
|
||||
vec_free(&p->mem_locations);
|
||||
}
|
||||
|
||||
@ -45,10 +45,13 @@ void pnode_free(PNode*n)
|
||||
if(!n)return;
|
||||
|
||||
for(size_t i=0;i<n->pnodes.size;++i)
|
||||
pnode_free(((PNode*)n->pnodes.buffer)+i);
|
||||
pnode_free(vec_at(&n->pnodes,i,PNode*));
|
||||
|
||||
if(n->pnodes.buffer)
|
||||
{
|
||||
pnode_free(vec_at(&n->pnodes,0,PNode*));
|
||||
vec_free(&n->pnodes);
|
||||
}
|
||||
|
||||
if(n->tokens.buffer)
|
||||
{
|
||||
@ -64,8 +67,8 @@ PNode*pnode_pushnode(PNode*n)
|
||||
if(!n)return NULL;
|
||||
|
||||
vec_push(&n->pnodes,&t);
|
||||
((PNode*)n->pnodes.buffer)[n->pnodes.size-1].parentnode=n;
|
||||
return &((PNode*)n->pnodes.buffer)[n->pnodes.size-1];
|
||||
vec_at(&n->pnodes,n->pnodes.size-1,PNode*)->parentnode=n;
|
||||
return vec_at(&n->pnodes,n->pnodes.size-1,PNode*);
|
||||
}
|
||||
|
||||
void pnode_print(PNode*n,size_t lvl)
|
||||
@ -90,11 +93,11 @@ void pnode_print(PNode*n,size_t lvl)
|
||||
if(usecolor)
|
||||
printf("'%s%s%s'",
|
||||
lextype_colors[((Tok*)n->tokens.buffer)[i].type],
|
||||
((Tok*)n->tokens.buffer)[i].str.buffer,
|
||||
vec_at(&n->tokens,i,Tok*)->str.buffer,
|
||||
"\033[0m"
|
||||
);
|
||||
else
|
||||
printf("'%s'",((Tok*)n->tokens.buffer)[i].str.buffer);
|
||||
printf("'%s'",vec_at(&n->tokens,i,Tok*)->str.buffer);
|
||||
if(i<n->tokens.size-1)
|
||||
printf(", ");
|
||||
}
|
||||
@ -107,7 +110,7 @@ void pnode_print(PNode*n,size_t lvl)
|
||||
if(n->pnodes.size>0)
|
||||
{
|
||||
for(size_t i=0;i<n->pnodes.size;++i)
|
||||
pnode_print(((PNode*)n->pnodes.buffer)+i,lvl);
|
||||
pnode_print(vec_at(&n->pnodes,i,PNode*),lvl);
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,21 +122,21 @@ void pnode_print_brief(PNode*n,size_t lvl)
|
||||
printf(" ");
|
||||
|
||||
if(n->tokens.size>0)
|
||||
printf("%lu: ",((Tok*)n->tokens.buffer)[0].line);
|
||||
printf("%lu: ",vec_at(&n->tokens,0,Tok*)->line);
|
||||
printf("%s: ",partype_names[n->type]);
|
||||
|
||||
// Print tokens
|
||||
for(size_t i=0;i<n->tokens.size;++i)
|
||||
{
|
||||
//printf("%s",((Tok*)n->tokens.buffer)[i].str.buffer);
|
||||
//printf("%s",vec_at(&n->tokens,i,Tok*)->str.buffer);
|
||||
if(usecolor)
|
||||
printf("%s%s%s",
|
||||
lextype_colors[((Tok*)n->tokens.buffer)[i].type],
|
||||
((Tok*)n->tokens.buffer)[i].str.buffer,
|
||||
lextype_colors[vec_at(&n->tokens,i,Tok*)->type],
|
||||
vec_at(&n->tokens,i,Tok*)->str.buffer,
|
||||
"\033[0m"
|
||||
);
|
||||
else
|
||||
printf("%s",((Tok*)n->tokens.buffer)[i].str.buffer);
|
||||
printf("%s",vec_at(&n->tokens,i,Tok*)->str.buffer);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
@ -141,7 +144,7 @@ void pnode_print_brief(PNode*n,size_t lvl)
|
||||
|
||||
if(n->pnodes.size>0)
|
||||
for(size_t i=0;i<n->pnodes.size;++i)
|
||||
pnode_print_brief(((PNode*)n->pnodes.buffer)+i,lvl);
|
||||
pnode_print_brief(vec_at(&n->pnodes,i,PNode*),lvl);
|
||||
}
|
||||
|
||||
// Parse Vec of Tok
|
||||
@ -156,9 +159,11 @@ void parser_parse(Parser*p,Vec*t)
|
||||
for(size_t i=0;i<t->size;++i)
|
||||
{
|
||||
if(!current_node)current_node=&p->root;
|
||||
cur_tok=((Tok*)t->buffer)+i;
|
||||
cur_tok=vec_at(t,i,Tok*);
|
||||
#define descend(m) do{--i;current_node=pnode_pushnode(current_node);current_node->type=m;p->mode=m;current_node->firstline=cur_tok->line;}while(0)
|
||||
#define pushcurrenttoken() do{vec_pushta(¤t_node->tokens,cur_tok->str.buffer);tok_copy_nostr(&((Tok*)current_node->tokens.buffer)[current_node->tokens.size-1],&((Tok*)t->buffer)[i]);}while(0)
|
||||
#define pushcurrenttoken() do{vec_pushta(¤t_node->tokens,cur_tok->str.buffer);\
|
||||
tok_copy_nostr(vec_at(¤t_node->tokens,current_node->tokens.size-1,Tok*),\
|
||||
vec_at(t,i,Tok*));}while(0)
|
||||
#define up() do{if(current_node&¤t_node->parentnode)current_node=current_node->parentnode;}while(0)
|
||||
#define checktype(t) if(cur_tok->type==t)
|
||||
#define checktypesub(t,s) if(cur_tok->type==t&&cur_tok->subtype==s)
|
||||
|
Loading…
Reference in New Issue
Block a user