Files
whetstone_DSL/editor/src/ast/Annotation.h
Bill 650e8557ae Phase 3f complete: Advanced Memory Management (Steps 64-67)
Step 64: AnnotationValidator — @Deallocate missing-intent, @Owner(Single) alias detection, parent/child conflict (5/5 tests)
Step 65: MemoryStrategyInference — language defaults, per-function pattern analysis, confidence scores (5/5 tests)
Step 66: CrossLanguageProjector — deep-copy AST projection, annotation-aware CppGenerator (shared_ptr/unique_ptr) (5/5 tests)
Step 67: Optimization annotations — HotCold, Inline, Pure, ConstExpr with C++ attribute generation (9/9 tests)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:57:58 -07:00

144 lines
4.0 KiB
C++

#pragma once
#include "ASTNode.h"
class Annotation : public ASTNode {
public:
Annotation() { conceptType = "Annotation"; }
};
class DerefStrategy : public Annotation {
public:
std::string strategy;
std::string derefLocation;
std::string owner;
DerefStrategy() { conceptType = "DerefStrategy"; }
DerefStrategy(const std::string& id, const std::string& strategy)
: strategy(strategy) {
this->id = id;
this->conceptType = "DerefStrategy";
}
// children: derefTime (0..1) via setChild("derefTime", ...)
};
class OptimizationLock : public Annotation {
public:
std::string lockedBy;
std::string lockReason;
std::string lockLevel;
std::string affectedStrategies;
std::string timestamp;
OptimizationLock() { conceptType = "OptimizationLock"; }
};
class LangSpecific : public Annotation {
public:
std::string language;
std::string idiomType;
std::string rawSyntax;
std::string semanticHint;
std::string position;
LangSpecific() { conceptType = "LangSpecific"; }
};
// New canonical memory annotations replacing the old DerefStrategy
class DeallocateAnnotation : public Annotation {
public:
std::string strategy; // "Explicit" for manual allocation/deallocation
std::string deallocateLocation;
std::string owner;
DeallocateAnnotation() {
conceptType = "DeallocateAnnotation";
strategy = "Explicit";
}
DeallocateAnnotation(const std::string& id, const std::string& strategy_val)
: strategy(strategy_val) {
this->id = id;
this->conceptType = "DeallocateAnnotation";
}
};
class LifetimeAnnotation : public Annotation {
public:
std::string strategy; // "RAII" for destructor-based cleanup
std::string lifetimeScope;
LifetimeAnnotation() {
conceptType = "LifetimeAnnotation";
strategy = "RAII";
}
LifetimeAnnotation(const std::string& id, const std::string& strategy_val)
: strategy(strategy_val) {
this->id = id;
this->conceptType = "LifetimeAnnotation";
}
};
class ReclaimAnnotation : public Annotation {
public:
std::string strategy; // "Tracing", "Cycle", "Escape" for different GC strategies
std::string reclaimPattern;
ReclaimAnnotation() {
conceptType = "ReclaimAnnotation";
strategy = "Tracing";
}
ReclaimAnnotation(const std::string& id, const std::string& strategy_val)
: strategy(strategy_val) {
this->id = id;
this->conceptType = "ReclaimAnnotation";
}
};
class OwnerAnnotation : public Annotation {
public:
std::string strategy; // "Single", "Shared_ARC" for ownership strategies
std::string ownerType;
OwnerAnnotation() {
conceptType = "OwnerAnnotation";
strategy = "Single";
}
OwnerAnnotation(const std::string& id, const std::string& strategy_val)
: strategy(strategy_val) {
this->id = id;
this->conceptType = "OwnerAnnotation";
}
};
class AllocateAnnotation : public Annotation {
public:
std::string strategy; // "Static", "Register", "Allocator" for allocation strategies
std::string allocationPattern;
AllocateAnnotation() {
conceptType = "AllocateAnnotation";
strategy = "Static";
}
AllocateAnnotation(const std::string& id, const std::string& strategy_val)
: strategy(strategy_val) {
this->id = id;
this->conceptType = "AllocateAnnotation";
}
};
// Optimization annotations (Step 67)
class HotColdAnnotation : public Annotation {
public:
std::string hint; // "Hot" or "Cold"
HotColdAnnotation() { conceptType = "HotColdAnnotation"; }
};
class InlineAnnotation : public Annotation {
public:
std::string mode; // "Always", "Never", "Hint"
InlineAnnotation() { conceptType = "InlineAnnotation"; }
};
class PureAnnotation : public Annotation {
public:
PureAnnotation() { conceptType = "PureAnnotation"; }
};
class ConstExprAnnotation : public Annotation {
public:
ConstExprAnnotation() { conceptType = "ConstExprAnnotation"; }
};