aboutsummaryrefslogtreecommitdiff
path: root/rego-proofs/compiler/passes/compile-definition.scm
diff options
context:
space:
mode:
Diffstat (limited to 'rego-proofs/compiler/passes/compile-definition.scm')
-rw-r--r--rego-proofs/compiler/passes/compile-definition.scm74
1 files changed, 0 insertions, 74 deletions
diff --git a/rego-proofs/compiler/passes/compile-definition.scm b/rego-proofs/compiler/passes/compile-definition.scm
deleted file mode 100644
index b9f7ce8..0000000
--- a/rego-proofs/compiler/passes/compile-definition.scm
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; Copyright © 2023 Jakob L. Kreuze <zerodaysfordays@sdf.org>
-;;;
-;;; This program is free software; you can redistribute it and/or
-;;; modify it under the terms of the GNU General Public License as
-;;; published by the Free Software Foundation; either version 3 of the
-;;; License, or (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;; General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see
-;;; <http://www.gnu.org/licenses/>.
-
-(define-module (compiler passes compile-definition)
- #:use-module ((rnrs base) #:select (assert))
- #:use-module (compiler lean)
- #:use-module (compiler types)
- #:use-module (compiler utilities)
- #:use-module (ice-9 match)
- #:use-module (ice-9 pretty-print)
- #:use-module (oop goops)
- #:use-module (srfi srfi-1)
- #:use-module (srfi srfi-11)
- #:export (compile-definition))
-
-(define (find-default rules)
- (find default-rule? rules))
-
-(define (all-but-default rules)
- (let ((result (filter (negate default-rule?) rules)))
- (unless (member (- (length rules) (length result)) '(0 1) )
- (error "expected at most 1 default rule, found"
- (- (length rules) (length result))))
- result))
-
-(define (process-rule-group rule-group)
- (define subject-ref (make <variable-ref> #:name "rulesubject"))
- (define (collapse-rule rule)
- (match rule
- (($ <rule> default head ($ <body> clauses) else-arm)
- (make <lean-conjunction>
- #:clauses `(,@clauses
- ,(make <lean-compare>
- #:left subject-ref
- #:right (right head)
- #:kind 'eq))))))
- (match rule-group
- ((left rules ...)
- (list
- (make <definition>
- #:left left
- #:kind (kind (head (first rules))) ;; TODO: When do we rewrite as `plain'?
- #:right #f
- #:default (let ((default (find-default rules)))
- (if default
- (collapse-rule default)
- default))
- #:rules (map collapse-rule (all-but-default rules)))
- (variable-ref->local subject-ref)))))
-
-;; Convert grouped rules into a `<definition>'
-(define (compile-definition policy)
- (define new-scope (scope policy))
- (define new-rules
- (map (lambda (rule-group)
- (match (process-rule-group rule-group)
- ((definition subject-ref)
- (add-to-scope new-scope `(,(left definition)) subject-ref)
- definition)))
- (rules policy)))
- (with-modified-slot (with-modified-slot policy 'rules new-rules) 'scope new-scope))

© 2015 - 2026 Jakob L. Kreuze