Repository navigation
v1.2.0
Added
- Period characters in identifiers: Variable names and function names can now contain periods (e.g.,
user.name,math.square()) - VariableId struct: Strongly-typed variable identifier that replaces direct
uintusage- Provides implicit conversions to/from
uintandstringfor backwards compatibility - Maintains internal unique identifier mapping through extension methods
- Improves type safety and encapsulates identifier management
- Provides implicit conversions to/from
- Boolean Short-Circuit Optimization: Compile-time optimization for boolean expressions
- String variable support with integer parsing
- Support for
CustomFunction.Createwith zero-parameter functions that have return values (Func<TResult>) AddCustomFunctionRange(IEnumerable<CustomFunction> functions)method for adding multiple custom functions at once- Documentation clarification on function purity requirements
Fixed
- Unity Compatibility: Added conditional compilation support for Unity's
UnsafeUtility.AsAPI inTypeTraits.cs - AST Optimization: Fixed
Compiler.csoptimization pipeline whererootNode.Optimize()result was being discarded instead of captured, causing some AST optimizations to be ignored - Constant Function Folding:
FunctionNode.Optimize()now evaluates constant functions with constant parameters at compile time - Sign Operator Optimization: Fixed unary positive operator (
+expr) returning unoptimized child node instead of optimized result - Trailing Semicolon Support: Trailing semicolons are now allowed and treated as no-op instead of throwing "Cannot find tokens to sequence" error
Changed
- BREAKING CHANGE:
IVariableContainer.TryGetValue()now takesVariableIdinstead ofuint- Existing implementations must be updated to use
VariableIdparameter - Most calling code continues to work due to implicit
uint→VariableIdconversion
- Existing implementations must be updated to use
- AST Node
Build()method signatures updated to useIDictionary<VariableId, CustomFunctionOverload> - Internal function dictionaries now use
VariableIdkeys instead ofuint - Comparison operators
<=and>=now use direct operations instead of< || ==and> || == - Eliminated direct calls to
GetUniqueIdentifier()andGetStringFromUniqueIdentifier()in favor of VariableId implicit conversions
Migration Guide
For custom IVariableContainer implementations:
// Before
public bool TryGetValue(uint variableKey, out VariableValue variableValue)
// After
public bool TryGetValue(VariableId variableKey, out VariableValue variableValue)Most existing code using uint variable identifiers will continue to work due to implicit conversions.