access Vecs with vec_at

This commit is contained in:
corey 2023-11-10 16:02:31 -06:00
parent 1561c05a68
commit 7ba4b2a9d7

35
pnode.c
View File

@ -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(&current_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(&current_node->tokens,cur_tok->str.buffer);\
tok_copy_nostr(vec_at(&current_node->tokens,current_node->tokens.size-1,Tok*),\
vec_at(t,i,Tok*));}while(0)
#define up() do{if(current_node&&current_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)