From 90ce0a544d705ef902ba30b8f855aa215f33f5f9 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Wed, 26 May 2021 14:27:03 +0200 Subject: [PATCH] The Racket preserves package needs a local copy of schema.prs for the package-builder to work. Use a git hook to keep it in sync with the master copy --- Makefile | 2 + git-hooks/pre-commit | 6 ++ .../preserves/preserves-schema/metaschema.rkt | 2 +- .../preserves/preserves-schema/schema.prs | 92 +++++++++++++++++++ setup.sh | 18 ++++ 5 files changed, 119 insertions(+), 1 deletion(-) create mode 100755 git-hooks/pre-commit create mode 100644 implementations/racket/preserves/preserves-schema/schema.prs create mode 100755 setup.sh diff --git a/Makefile b/Makefile index 03ef341..2d0bd74 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +__ignored__ := $(shell ./setup.sh) + PDFS=preserves.pdf preserves-schema.pdf all: $(PDFS) diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit new file mode 100755 index 0000000..804638a --- /dev/null +++ b/git-hooks/pre-commit @@ -0,0 +1,6 @@ +#!/bin/sh + +exec 1>&2 + +# Ensure that various copies of schema.prs are in fact identical. +cmp schema/schema.prs implementations/racket/preserves/preserves-schema/schema.prs diff --git a/implementations/racket/preserves/preserves-schema/metaschema.rkt b/implementations/racket/preserves/preserves-schema/metaschema.rkt index e0eb750..570d767 100644 --- a/implementations/racket/preserves/preserves-schema/metaschema.rkt +++ b/implementations/racket/preserves/preserves-schema/metaschema.rkt @@ -1,4 +1,4 @@ #lang preserves-schema version 1 . -include "../../../../schema/schema.prs" . +include "./schema.prs" . diff --git a/implementations/racket/preserves/preserves-schema/schema.prs b/implementations/racket/preserves/preserves-schema/schema.prs new file mode 100644 index 0000000..9fba3e2 --- /dev/null +++ b/implementations/racket/preserves/preserves-schema/schema.prs @@ -0,0 +1,92 @@ +@ + +; TODO: some kind of constants +; TODO: rename "version" to "schema-version" ? + +version 1 . + +Bundle = . +Modules = { ModulePath: Schema ...:... }. + +Schema = . + +; version 1 . +Version = 1 . + +EmbeddedTypeName = Ref / #f. + +Definitions = { symbol: Definition ...:... }. + +Definition = + ; Pattern / Pattern / ... + / + + ; Pattern & Pattern & ... + / + + ; Pattern + / Pattern +. + +Pattern = SimplePattern / CompoundPattern . + +SimplePattern = + ; any + / =any + + ; special builtins: bool, float, double, int, string, bytes, symbol + / + + ; matches an embedded value in the input: embedded + / + + ; =symbol, < any>, or plain non-symbol atom + / + + ; [p ...] ----> >; see also tuple* below. + / + + ; #{p} ----> > + / + + ; {k: v, ...:...} ----> > + / + + ; symbol, symbol.symbol, symbol.symbol.symbol, ... + / Ref +. + +CompoundPattern = + ;