static void FreeScope (TRI_aql_scope_t* const scope) { size_t i, n; // free variables lookup hash n = scope->_variables._nrAlloc; for (i = 0; i < n; ++i) { TRI_aql_variable_t* variable = scope->_variables._table[i]; if (variable) { TRI_FreeVariableAql(variable); } } TRI_DestroyAssociativePointer(&scope->_variables); if (scope->_ranges) { // free ranges if set TRI_FreeAccessesAql(scope->_ranges); } for (i = 0; i < scope->_sorts._length; ++i) { char* criterion = (char*) TRI_AtVectorPointer(&scope->_sorts, i); TRI_Free(TRI_UNKNOWN_MEM_ZONE, criterion); } TRI_DestroyVectorPointer(&scope->_sorts); TRI_Free(TRI_UNKNOWN_MEM_ZONE, scope); }
static void FreeScope (TRI_aql_scope_t* const scope) { size_t i, n; // free variables lookup hash n = scope->_variables._nrAlloc; for (i = 0; i < n; ++i) { TRI_aql_variable_t* variable = scope->_variables._table[i]; if (variable) { TRI_FreeVariableAql(variable); } } TRI_DestroyAssociativePointer(&scope->_variables); if (scope->_ranges) { // free ranges if set TRI_FreeAccessesAql(scope->_ranges); } TRI_Free(TRI_UNKNOWN_MEM_ZONE, scope); }
TRI_aql_variable_t* TRI_CreateVariableAql (const char* const name, TRI_aql_node_t* const definingNode) { TRI_aql_variable_t* variable; variable = (TRI_aql_variable_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_variable_t), false); if (variable == NULL) { return NULL; } variable->_name = TRI_DuplicateString(name); if (variable->_name == NULL) { TRI_FreeVariableAql(variable); return NULL; } variable->_definingNode = definingNode; assert(definingNode); return variable; }
TRI_aql_variable_t* TRI_CreateVariableAql (char const* name, TRI_aql_node_t* definingNode) { TRI_aql_variable_t* variable; variable = (TRI_aql_variable_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_variable_t), false); if (variable == nullptr) { return nullptr; } variable->_name = TRI_DuplicateStringZ(TRI_UNKNOWN_MEM_ZONE, name); if (variable->_name == nullptr) { TRI_FreeVariableAql(variable); return nullptr; } variable->_definingNode = definingNode; variable->_isUpdated = false; TRI_ASSERT(definingNode); return variable; }