Skip to content

feat!: Rego -> RVM Compiler and extensive testsuite - #506

Merged
anakrish merged 9 commits into
microsoft:mainfrom
anakrish:rego-rvm-compiler-checkin
Nov 24, 2025
Merged

feat!: Rego -> RVM Compiler and extensive testsuite#506
anakrish merged 9 commits into
microsoft:mainfrom
anakrish:rego-rvm-compiler-checkin

Conversation

@anakrish

Copy link
Copy Markdown
Collaborator

No description provided.

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

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
- 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>
@anakrish anakrish changed the title Rego rvm compiler checkin feat!: Rego -> RVM Compiler and extensive testsuite Nov 24, 2025
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
Comment thread src/languages/rego/compiler.rs Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This entire file can be ignored. This monolithic compiler implementation is split up into separate files in subsequent checkins and finally removed.

@dpokluda dpokluda left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@anakrish
anakrish merged commit a3a20a1 into microsoft:main Nov 24, 2025
41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants