#include "scope.h" #include "group.h" #include "token.h" #include void scope_extract(Token *list) { // Recurse in child scopes. for (Token *e = list->group.tokens; e != NULL; e = e->next) if (e->type == TOK_GROUP) scope_extract(e); if (!token_isgroup(list, GROUP_SCOPE)) return; // Extract let groups. Token *e = list->group.tokens; while (e != NULL) if (token_isgroup(e, GROUP_LET)) { token_append(&list->group.scope, token_extract(&list->group.tokens, e)); group_extract(&list->group.scope, token_last(list->group.scope)); e = list->group.tokens; // XXX: this is slow } 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); }