Eliminate tagging strategies altogether.
authorChris Hanson <org/chris-hanson/cph>
Sat, 13 Jan 2018 21:30:07 +0000 (13:30 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sat, 13 Jan 2018 21:30:07 +0000 (13:30 -0800)
The structure of the tagged data belongs outside of the core code.

src/runtime/compound-predicate.scm
src/runtime/parametric-predicate.scm
src/runtime/predicate-lattice.scm
src/runtime/predicate-metadata.scm
src/runtime/predicate-tagging.scm
src/runtime/runtime.pkg

index 9ce38d74ae5e57ee8fc10bffb2ab737ba2757c3a..77fa568fe619944cd8713905c07415022df1da34 100644 (file)
@@ -29,15 +29,11 @@ USA.
 
 (declare (usual-integrations))
 \f
-(define (make-compound-tag datum-test operator operands)
-  (%make-compound-tag tagging-strategy:optional datum-test operator operands))
-
-(define (%make-compound-tag tagging-strategy datum-test operator operands)
-  (tagging-strategy datum-test
-    (lambda (predicate tagger)
-      (make-tag (cons operator (map tag-name operands))
-               predicate tagger operator
-               (make-compound-tag-extra operator operands)))))
+(define (make-compound-tag predicate operator operands)
+  (make-tag (cons operator (map tag-name operands))
+           predicate
+           operator
+           (make-compound-tag-extra operator operands)))
 
 (define (tag-is-compound? tag)
   (compound-tag-extra? (tag-extra tag)))
index 2193cac6652c165bfcfa7ca1442d88a1c59a341d..cf4955220a9294b49e27dbd91dce6f7833cd0f1b 100644 (file)
@@ -39,11 +39,9 @@ USA.
 (define (parametric-predicate-bindings predicate)
   (parametric-tag-bindings (predicate->tag predicate)))
 
-(define (make-parametric-tag name datum-test template bindings)
-  (tagging-strategy:optional datum-test
-    (lambda (predicate tagger)
-      (make-tag name predicate tagger 'make-predicate-template
-               (make-parametric-tag-extra template bindings)))))
+(define (make-parametric-tag name predicate template bindings)
+  (make-tag name predicate 'make-predicate-template
+           (make-parametric-tag-extra template bindings)))
 
 (define (tag-is-parametric? tag)
   (parametric-tag-extra? (tag-extra tag)))
index b183ad2d098fbf73973ec0ab8748fde6bff1447e..c74c9f978de245abab5b3435f448646dda8bf60d 100644 (file)
@@ -92,10 +92,10 @@ USA.
 (define-integrable (tag-is-bottom? tag) (eq? the-bottom-tag tag))
 
 (define-deferred the-top-tag
-  (%make-compound-tag tagging-strategy:never any-object? 'conjoin '()))
+  (make-compound-tag any-object? 'conjoin '()))
 
 (define-deferred the-bottom-tag
-  (%make-compound-tag tagging-strategy:never no-object? 'disjoin '()))
+  (make-compound-tag no-object? 'disjoin '()))
 
 (define tag<=-cache)
 (define tag<=-overrides)
index 93b5de164cc90111daa95d1ff39312352fb69f91..804e0570bf0215d3a2d5cab58daed50ad57b7194 100644 (file)
@@ -44,11 +44,9 @@ USA.
   (named-lambda (register-predicate! predicate name . keylist)
     (guarantee keyword-list? keylist 'register-predicate!)
     (let ((tag
-          (tagging-strategy:never predicate
-            (lambda (predicate tagger)
-              (make-tag name predicate tagger 'register-predicate!
-                        (get-keyword-value keylist 'extra)
-                        (get-keyword-value keylist 'description))))))
+          (make-tag name predicate 'register-predicate!
+                    (get-keyword-value keylist 'extra)
+                    (get-keyword-value keylist 'description))))
       (for-each (lambda (superset)
                  (set-tag<=! tag (predicate->tag superset)))
                (get-keyword-values keylist '<=))
@@ -57,9 +55,6 @@ USA.
 (define (predicate-name predicate)
   (tag-name (predicate->tag predicate 'predicate-name)))
 
-(define (predicate-tagger predicate)
-  (tag-tagger (predicate->tag predicate 'predicate-tagger)))
-
 (define (predicate-description predicate)
   (let ((tag (get-predicate-tag predicate #f)))
     (if tag
@@ -95,15 +90,16 @@ USA.
                                             (predicate-description predicate))
                              caller))
 \f
-(define (make-tag name predicate tagger caller #!optional extra description)
+(define (make-tag name predicate caller #!optional extra description)
   (guarantee tag-name? name caller)
   (guarantee unary-procedure? predicate caller)
+  (if (predicate? predicate)
+      (error "Can't assign multiple tags to the same predicate:" predicate))
   (if (not (default-object? description))
       (guarantee string? description caller))
   (let ((tag
         (%make-tag name
                    predicate
-                   tagger
                    (if (default-object? extra) #f extra)
                    (if (default-object? description)
                        (delay (object->description name))
@@ -129,11 +125,10 @@ USA.
       (write object port))))
 
 (define-record-type <tag>
-    (%make-tag name predicate tagger extra description subsets supersets)
+    (%make-tag name predicate extra description subsets supersets)
     tag?
   (name tag-name)
   (predicate tag->predicate)
-  (tagger tag-tagger)
   (extra tag-extra)
   (description %tag-description)
   (subsets tag-subsets)
@@ -288,7 +283,6 @@ USA.
    (register-predicate! stack-address? 'stack-address)
    (register-predicate! thread-mutex? 'thread-mutex)
    (register-predicate! undefined-value? 'undefined-value)
-   (register-predicate! unicode-char? 'unicode-char '<= bitless-char?)
    (register-predicate! unicode-code-point? 'unicode-code-point
                        '<= index-fixnum?)
    (register-predicate! unicode-scalar-value? 'unicode-scalar-value
index fd8cce3c3a3bb17f1e24581b62e8bbbda4de4d4d..129e920c5398c6144a77de997c5a7ea85ac0a664 100644 (file)
@@ -43,38 +43,20 @@ USA.
       (%tagged-object-datum object)
       object))
 
-;;;; Tagging strategies
+(define (predicate-tagger predicate)
+  (%tag-tagger (predicate->tag predicate 'predicate-tagger) predicate))
 
-(define (tagging-strategy:never predicate make-tag)
+(define (tag-tagger tag)
+  (%tag-tagger tag (tag->predicate tag)))
 
-  (define (tagger object #!optional tagger-name)
-    (guarantee predicate object tagger-name)
-    object)
-
-  (define tag
-    (make-tag predicate tagger))
-
-  tag)
-
-(define (tagging-strategy:optional datum-test make-tag)
-
-  (define (predicate object)
-    (if (%tagged-object? object)
-       (tag<= (%tagged-object-tag object) tag)
-        (datum-test object)))
-
-  (define (tagger datum #!optional tagger-name)
+(define (%tag-tagger tag predicate)
+  (lambda (datum #!optional tagger-name)
     (if (tag<= (object->tag datum) tag)
-        datum
+       datum
        (begin
-         (guarantee datum-test datum tagger-name)
-         (%make-tagged-object tag datum))))
-
-  (define tag
-    (make-tag predicate tagger))
+         (guarantee predicate datum tagger-name)
+         (%make-tagged-object tag datum)))))
 
-  tag)
-\f
 (define primitive-tags)
 (define primitive-tag-methods)
 (add-boot-init!
index 2111df025f9d4d8f1f53860990b5481d53f13236..767d115a8aa27b471304d632d4a1bfe3289e96c5 100644 (file)
@@ -1825,7 +1825,6 @@ USA.
          guarantee-list-of
          predicate-description
          predicate-name
-         predicate-tagger
          set-predicate<=!)
   (export (runtime)
          event:predicate-metadata
@@ -1838,7 +1837,6 @@ USA.
          tag-description
          tag-extra
          tag-name
-         tag-tagger
          tag?))
 
 (define-package (runtime predicate-lattice)
@@ -1875,7 +1873,7 @@ USA.
          compound-tag-operator
          tag-is-compound?)
   (export (runtime predicate-lattice)
-         %make-compound-tag))
+         make-compound-tag))
 
 (define-package (runtime parametric-predicate)
   (files "parametric-predicate")
@@ -1910,11 +1908,11 @@ USA.
   (parent (runtime))
   (export ()
          object->datum
-         object->predicate)
+         object->predicate
+         predicate-tagger)
   (export (runtime)
          object->tag
-         tagging-strategy:never
-         tagging-strategy:optional))
+         tag-tagger))
 
 (define-package (runtime predicate-dispatch)
   (files "predicate-dispatch")