about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/src/scope.c
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/src/scope.c')
-rw-r--r--js/scripting-lang/baba-yaga-c/src/scope.c330
1 files changed, 0 insertions, 330 deletions
diff --git a/js/scripting-lang/baba-yaga-c/src/scope.c b/js/scripting-lang/baba-yaga-c/src/scope.c
deleted file mode 100644
index 93ba957..0000000
--- a/js/scripting-lang/baba-yaga-c/src/scope.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/**
- * @file scope.c
- * @brief Scope management implementation for Baba Yaga
- * @author eli_oat
- * @version 0.0.1
- * @date 2025
- * 
- * This file implements scope management for the Baba Yaga language.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "baba_yaga.h"
-
-/* ============================================================================
- * Scope Entry Structure
- * ============================================================================ */
-
-typedef struct ScopeEntry {
-    char* name;
-    Value value;
-    bool is_constant;
-    struct ScopeEntry* next;
-} ScopeEntry;
-
-/* ============================================================================
- * Scope Structure
- * ============================================================================ */
-
-struct Scope {
-    struct Scope* parent;
-    ScopeEntry* entries;
-    int entry_count;
-    int capacity;
-};
-
-/* ============================================================================
- * Scope Management Functions
- * ============================================================================ */
-
-/**
- * @brief Create a new scope
- * 
- * @param parent Parent scope, or NULL for global scope
- * @return New scope instance, or NULL on failure
- */
-Scope* scope_create(Scope* parent) {
-    Scope* scope = malloc(sizeof(Scope));
-    if (scope == NULL) {
-        return NULL;
-    }
-    
-    scope->parent = parent;
-    scope->entries = NULL;
-    scope->entry_count = 0;
-    scope->capacity = 0;
-    
-    return scope;
-}
-
-/**
- * @brief Destroy a scope and all its entries
- * 
- * @param scope Scope to destroy
- */
-void scope_destroy(Scope* scope) {
-    if (scope == NULL) {
-        return;
-    }
-    
-    /* Free all entries */
-    ScopeEntry* entry = scope->entries;
-    while (entry != NULL) {
-        ScopeEntry* next = entry->next;
-        
-        /* Destroy the value */
-        baba_yaga_value_destroy(&entry->value);
-        
-        /* Free the entry */
-        free(entry->name);
-        free(entry);
-        
-        entry = next;
-    }
-    
-    free(scope);
-}
-
-/**
- * @brief Get the global scope (root scope with no parent)
- * 
- * @param scope Starting scope
- * @return Global scope, or NULL if not found
- */
-Scope* scope_get_global(Scope* scope) {
-    if (scope == NULL) {
-        return NULL;
-    }
-    
-    /* Traverse up the scope chain until we find a scope with no parent */
-    while (scope->parent != NULL) {
-        scope = scope->parent;
-    }
-    
-    return scope;
-}
-
-/**
- * @brief Find an entry in the scope chain
- * 
- * @param scope Starting scope
- * @param name Variable name to find
- * @return Scope entry if found, NULL otherwise
- */
-static ScopeEntry* scope_find_entry(Scope* scope, const char* name) {
-    while (scope != NULL) {
-        ScopeEntry* entry = scope->entries;
-        while (entry != NULL) {
-            if (strcmp(entry->name, name) == 0) {
-                return entry;
-            }
-            entry = entry->next;
-        }
-        scope = scope->parent;
-    }
-    return NULL;
-}
-
-/**
- * @brief Get a value from the scope chain
- * 
- * @param scope Starting scope
- * @param name Variable name
- * @return Value if found, nil otherwise
- */
-Value scope_get(Scope* scope, const char* name) {
-    if (scope == NULL || name == NULL) {
-        return baba_yaga_value_nil();
-    }
-    
-    ScopeEntry* entry = scope_find_entry(scope, name);
-    if (entry == NULL) {
-        DEBUG_DEBUG("scope_get: variable '%s' not found in scope", name);
-        return baba_yaga_value_nil();
-    }
-    
-    DEBUG_DEBUG("scope_get: found variable '%s' in scope with type %d", name, entry->value.type);
-    /* Return a copy of the value */
-    return baba_yaga_value_copy(&entry->value);
-}
-
-/**
- * @brief Set a value in the current scope (creates if doesn't exist)
- * 
- * @param scope Current scope
- * @param name Variable name
- * @param value Value to set
- * @return true on success, false on failure
- */
-bool scope_set(Scope* scope, const char* name, Value value) {
-    if (scope == NULL || name == NULL) {
-        return false;
-    }
-    
-    /* Look for existing entry in current scope only */
-    ScopeEntry* entry = scope->entries;
-    while (entry != NULL) {
-        if (strcmp(entry->name, name) == 0) {
-            /* Update existing entry */
-            baba_yaga_value_destroy(&entry->value);
-            entry->value = baba_yaga_value_copy(&value);
-            return true;
-        }
-        entry = entry->next;
-    }
-    
-    /* Create new entry */
-    entry = malloc(sizeof(ScopeEntry));
-    if (entry == NULL) {
-        return false;
-    }
-    
-    entry->name = strdup(name);
-    if (entry->name == NULL) {
-        free(entry);
-        return false;
-    }
-    
-    entry->value = baba_yaga_value_copy(&value);
-    entry->is_constant = false;
-    entry->next = scope->entries;
-    scope->entries = entry;
-    scope->entry_count++;
-    
-    return true;
-}
-
-/**
- * @brief Define a new variable in the current scope
- * 
- * @param scope Current scope
- * @param name Variable name
- * @param value Initial value
- * @param is_constant Whether the variable is constant
- * @return true on success, false on failure
- */
-bool scope_define(Scope* scope, const char* name, Value value, bool is_constant) {
-    if (scope == NULL || name == NULL) {
-        return false;
-    }
-    
-    /* Check if variable already exists in current scope */
-    ScopeEntry* entry = scope->entries;
-    while (entry != NULL) {
-        if (strcmp(entry->name, name) == 0) {
-            /* Variable already exists */
-            return false;
-        }
-        entry = entry->next;
-    }
-    
-    /* Create new entry */
-    entry = malloc(sizeof(ScopeEntry));
-    if (entry == NULL) {
-        return false;
-    }
-    
-    entry->name = strdup(name);
-    if (entry->name == NULL) {
-        free(entry);
-        return false;
-    }
-    
-    entry->value = baba_yaga_value_copy(&value);
-    entry->is_constant = is_constant;
-    entry->next = scope->entries;
-    scope->entries = entry;
-    scope->entry_count++;
-    
-    DEBUG_DEBUG("scope_define: defined variable '%s' in scope with type %d", name, entry->value.type);
-    
-    return true;
-}
-
-/**
- * @brief Check if a variable exists in the scope chain
- * 
- * @param scope Starting scope
- * @param name Variable name
- * @return true if variable exists, false otherwise
- */
-bool scope_has(Scope* scope, const char* name) {
-    if (scope == NULL || name == NULL) {
-        return false;
-    }
-    
-    return scope_find_entry(scope, name) != NULL;
-}
-
-/**
- * @brief Get all variable names in the current scope
- * 
- * @param scope Current scope
- * @param names Output array for variable names
- * @param max_names Maximum number of names to return
- * @return Number of names returned
- */
-int scope_get_names(Scope* scope, char** names, int max_names) {
-    if (scope == NULL || names == NULL || max_names <= 0) {
-        return 0;
-    }
-    
-    int count = 0;
-    ScopeEntry* entry = scope->entries;
-    
-    while (entry != NULL && count < max_names) {
-        names[count] = strdup(entry->name);
-        count++;
-        entry = entry->next;
-    }
-    
-    return count;
-}
-
-/**
- * @brief Print scope contents for debugging
- * 
- * @param scope Scope to print
- * @param indent Indentation level
- */
-void scope_print(Scope* scope, int indent) {
-    if (scope == NULL) {
-        return;
-    }
-    
-    /* Print indentation */
-    for (int i = 0; i < indent; i++) {
-        printf("  ");
-    }
-    
-    printf("Scope (entries: %d):\n", scope->entry_count);
-    
-    /* Print entries */
-    ScopeEntry* entry = scope->entries;
-    while (entry != NULL) {
-        for (int i = 0; i < indent + 1; i++) {
-            printf("  ");
-        }
-        
-        char* value_str = baba_yaga_value_to_string(&entry->value);
-        printf("%s%s = %s\n", 
-               entry->is_constant ? "const " : "",
-               entry->name, 
-               value_str);
-        free(value_str);
-        
-        entry = entry->next;
-    }
-    
-    /* Print parent scope */
-    if (scope->parent != NULL) {
-        for (int i = 0; i < indent; i++) {
-            printf("  ");
-        }
-        printf("Parent scope:\n");
-        scope_print(scope->parent, indent + 1);
-    }
-}