Anand Krishnamoorthi
3f7a5496dc
feat(bindings)!: add RVM/Program support across FFI and language bindings ( #565 )
...
- FFI: add RVM/Program APIs, execution state accessors, HostAwait handling, and buffer/result helpers in rvm.rs, common.rs, engine.rs.
- Compiler: emit HostAwait for __builtin_host_await in function_calls.rs.
- RVM tests: add HostAwait regression cases and extend harness for suspend/resume responses in host_await.yaml and mod.rs.
- C/C++: add RVM tests/examples and wrapper updates in rvm_tests.c, rvm_tests.cpp, regorus.hpp, plus CMake wiring.
- C#: add Program/Rvm bindings, SafeHandle/PInvoke, tests, and example usage in Regorus, RvmProgramTests.cs, Program.cs, and README updates.
- Go: add Program/Rvm bindings, tests, and examples in rvm.go, rvm_test.go, main.go.
- Java: add Program/Rvm bindings, JNI glue, and examples in lib.rs, regorus, Test.java.
- Python: add Program/Rvm bindings and examples in lib.rs, test.py.
- WASM: add Program/Rvm bindings and examples in lib.rs, test.js.
- Tooling: wire binding tests in xtask and ignore generated Java artifacts in .gitignore.
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com >
2026-01-30 23:55:31 +05:30
Anand Krishnamoorthi
b7b3d3ec87
feat: Soft-assert mode for builtin out-params under not
...
- Add a scoped soft_assert_mode to the compiler so `not` statements compile their subexpressions without emitting hard AssertCondition/AssertNotUndefined instructions.
- Teach binding-plan application to return an optional result register; equality plans now yield a boolean in soft mode, allowing not abs(-5 , 3) to succeed instead of aborting.
- Update function-call, loop, and rule plumbing to consume the new binding-plan outcome, including copying the produced register when an out-parameter equality is used.
- Trim the OPA TODO list to the remaining troublesome folders.
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com >
2025-12-02 15:27:43 -06:00
Anand Krishnamoorthi
30bd134a0b
fix: Handle builtin out-parameter calls in RVM compiler
...
- Teach the hoister/destructuring planner to respect parent scope when building binding plans for extra arguments, so already-bound vars yield equality checks.
- Update the compiler’s function-call path to drop the trailing out-argument, run its binding plan after the call, and share call-target resolution logic.
- Add regression suites for builtin and user-defined out-parameter scenarios plus align the CLI example output when RVM returns undefined.
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com >
2025-12-02 13:29:12 -06:00
Anand Krishnamoorthi
a3a20a1235
feat!: Rego -> RVM Compiler and extensive testsuite ( #506 )
...
# RVM compiler test cases
Coverage:
- arithmetic
- arrays
- chained lookups
- comparisons
- comprehensions
- default rules
- destructuring
- function rules
- loops/quantifiers
- multiple entrypoints
- objects/sets
- variables
- negative/edge scenarios such as data/rule conflicts
- virtual data lookups
- etc
# Modify interpreter and compiled policy for RVM Compilation
- Interpreter::eval_default_rule_for_compiler:
evaluates a named default rule in isolation - allows compiler to emit a constant value instead of instructions
for the default value
# feat: Rego Compiler Scaffolding
- Introduce the rego::compiler module surface and entry point wiring
- Add the core compiler concepts:
- register allocator
- scope tracking
- literal/builtin tables
- rule worklists
- instruction emit helpers
- compiler-specific error types
- context structs for rules, comprehensions, and loops to support later lowering passes.
# feat: Compile Rules/Queries
- add compiler::compile_from_policy workflow plus rule worklist, entry-point wiring, and recursion checks
- implement query lowering:
- scheduling-aware statement ordering
- loop hoisting
- “every/some” semantics
- context yields
- literal assertions
- finalize Program construction
# feat: Expression Lowering
- add compile_rego_expr and helpers to translate every AST expression into RVM instructions,
- interop with binding plans, comprehensions, and membership checks.
- implement collection literal builders (ArrayCreate, SetCreate, ObjectCreate)
- dedupe literal keys and handle mixed literal/dynamic fields via instruction data blocks.
- operations:
- arithmetic/boolean/bin operators
- membership
- unary minus
- set unions/intersections
- etc
- user-defined and builtin function calls
- reference handling
- analyse chained refs
- distinguishe data/input/local roots
- perform rule dispatch or virtual document lookups
- emits optimized Index/ChainedIndex instructions.
# feat: Comprehensions & Loops
- shared comprehension emitter
- wraps array/set/object comprehensions with ComprehensionBegin/End
- context management
- loop lowering utilities
- read hoisting metadata
- emit LoopStart/LoopNext
- some in lowering
- every quantifiers
- index iteration
- propagate binding plans into stored registers so downstream statements see bound variables.
# feat: Destructuring Lowering
- destructuring planner integration
- assignment/parameter/loop bindings use hoisted plans instead of re-walking ASTs.
- handle :=, =, wildcard matches, and equality
- evaluate RHS
- applying destructuring plans
- emit assert condition as needed
- support nested array/object destructuring, dynamic keys, and some ... in forms
# test: Shared Testing + RVM Suites
- move YAML test helpers into test_utils.rs and re-export via common.rs for use by interpreter and vm test suites
- comprehensive compiler test suite
- compiles policies with the new Rego→RVM compiler
- runs them through RegoVM
- compares against interpreter behavior
- supports multiple entry points
- provides assembly listings
- filterable YAML suites.
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com >
2025-11-24 12:08:37 -06:00