diff options
author | kdx <kdx@42l.fr> | 2023-03-17 03:49:29 +0100 |
---|---|---|
committer | kdx <kdx@42l.fr> | 2023-03-17 03:49:29 +0100 |
commit | 1aa823effc534526c1bc2ec4ca80139826660f2f (patch) | |
tree | 8739530a2a8ec0df738cbdd72277b85bbfce2715 | |
parent | 4160e9650bcfe7449beb150cdf8196b768a92eb3 (diff) | |
download | golem-1aa823effc534526c1bc2ec4ca80139826660f2f.tar.gz |
scope function arguments
-rw-r--r-- | main.c | 1 | ||||
-rw-r--r-- | scope.c | 20 | ||||
-rw-r--r-- | scope.h | 1 | ||||
-rw-r--r-- | token.c | 10 | ||||
-rw-r--r-- | token.h | 1 |
5 files changed, 33 insertions, 0 deletions
@@ -62,6 +62,7 @@ main(int argc, char **argv) } group->group.type = GROUP_SCOPE; scope_extract(tokens); + scope_function(tokens); token_print(tokens, 1, 0); } while(0); token_destroy(tokens); @@ -25,3 +25,23 @@ scope_extract(Token *list) } else e = e->next; } + +static void +_scope_function(Token *list) +{ + unsigned int len = token_len(list->group.tokens); + while (len > 2) { + token_append(&list->group.scope, + token_extract(&list->group.tokens, + list->group.tokens->next)); + len -= 1; + } +} + +void +scope_function(Token *list) +{ + for (Token *e = list->group.tokens; e != NULL; e = e->next) + if (token_isgroup(e, GROUP_FUNCTION)) + _scope_function(e); +} @@ -2,3 +2,4 @@ #include "token.h" void scope_extract(Token *list); +void scope_function(Token *list); @@ -47,6 +47,16 @@ token_append(Token **list, Token *elem) return *list; } +Token * +token_prepend(Token **list, Token *elem) +{ + elem->next = *list; + if (*list) + (*list)->prev = elem; + *list = elem; + return *list; +} + void token_delete(Token **list, Token *elem) { @@ -38,6 +38,7 @@ struct Token { Token *token_create(Slice slice, unsigned int type); void token_destroy(Token *token); Token *token_append(Token **list, Token *elem); +Token *token_prepend(Token **list, Token *elem); void token_delete(Token **list, Token *elem); Token *token_extract(Token **list, Token *elem); Token *token_search(Token *list, unsigned int type); |