examples/advanced/05_pragma_features.cat
# Exemples de pragmas Catnip
# Les pragmas contrôlent le comportement du compilateur/runtime


# 1. Tail-Call Optimization (TCO)


# Activer TCO avec un booléen
pragma("tco", True)

factorial = (n, acc=1) => {
    if n <= 1 { acc }
    else { factorial(n - 1, n * acc) }
}

print("Factorial(10) with TCO:")
print(factorial(10))

# Désactiver TCO
pragma("tco", False)


# 2. Cache Control


# Activer le cache de parsing
pragma("cache", True)

# Désactiver le cache
pragma("cache", False)


# 3. Debug Mode


# Activer le mode debug
pragma("debug", True)

print("Debug mode is now enabled")

# Désactiver le mode debug
pragma("debug", False)


# 4. Feature Loading (charger des modules Python)


# Charger le module json
pragma("feature", "json")

data = dict(("name", "Bob"), ("age", 25), ("city", "Paris"))
json_string = json.dumps(data)
print("JSON string:")
print(json_string)

# Charger avec un alias
pragma("feature", "math", "m")

print("Square root of 144:")
print(m.sqrt(144))

print("Pi value:")
print(m.pi)

# Charger datetime avec alias
pragma("feature", "datetime", "dt")

now = dt.datetime.now()
print("Current datetime:")
print(now)


# 5. Optimization Level


# Définir le niveau d'optimisation (0-3)
pragma("optimize", "3")

# Ou avec un nombre
pragma("optimize", "2")


# Notes:

# - Les pragmas booléens acceptent True/False
# - La syntaxe string ("enable"/"disable") est encore supportée pour compatibilité
# - pragma("feature") charge un module Python (nom ou fichier) ou un module Catnip (.cat)
# - L'alias est optionnel pour feature