ovidiu      02/01/18 18:13:19

  Modified:    src/scratchpad/schecoon/scheme sitemap.scm
  Log:
  Do some optimizations when generating the Scheme code for the
  sitemap. Eliminate as many `let' forms as possible, to speed up the
  compilation process.
  
  Revision  Changes    Path
  1.6       +66 -41    xml-cocoon2/src/scratchpad/schecoon/scheme/sitemap.scm
  
  Index: sitemap.scm
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/schecoon/scheme/sitemap.scm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- sitemap.scm       19 Jan 2002 01:20:12 -0000      1.5
  +++ sitemap.scm       19 Jan 2002 02:13:19 -0000      1.6
  @@ -61,7 +61,9 @@
   ;; parser to the SXML representation as attributes of the element.
   ;;
   ;; The Scheme code translates the above SXML representation in the
  -;; following code.
  +;; following code. [The code below actually does some optimizations to
  +;; eliminate as many `let' forms as possible. This speeds up a bit the
  +;; compilation process, but the code is semantically the same.]
   ;;
   ;;(define the-sitemap
   ;;  (let ((rx1 (regexp "documentation/(.*).html"))
  @@ -317,27 +319,28 @@
         (let ((procname (string->symbol (format "p~a" pcount)))
               (rxname (string->symbol (format "rx~a" pcount))))
           `(define (,procname url sitemap env)
  -           (let ((result (regexp-match ,rxname url)))
  -             (if result
  -                 (apply
  -                  (lambda ,(let loop ((index 1))
  -                             (if (> index pattern-regexps-no)
  -                                 'rest
  -                                 (cons
  -                                  (string->symbol
  -                                   (format "arg~a" (number->string index)))
  -                                  (loop (+ index 1)))))
  -                    (sitemap:process
  -                     sitemap env '()
  -                     ,(or
  -                       (match-generate pipeline)
  -                       (match-reader pipeline)
  -                       (let* ((nodelist ((node-pos 1) pipeline))
  -                              (node (if (null? nodelist) '() (car nodelist))))
  -                         (xml-error node "Invalid pipeline definition")))))
  -                  (cdr result))
  -                 #f)))
  -        ))
  +           ((lambda (result)
  +           (if result
  +               (apply
  +                (lambda ,(let loop ((index 1))
  +                           (if (> index pattern-regexps-no)
  +                               'rest
  +                               (cons
  +                                (string->symbol
  +                                 (format "arg~a" (number->string index)))
  +                                (loop (+ index 1)))))
  +                  (sitemap:process
  +                   sitemap env '()
  +                   ,(or
  +                     (match-generate pipeline)
  +                     (match-reader pipeline)
  +                     (let* ((nodelist ((node-pos 1) pipeline))
  +                            (node (if (null? nodelist) '() (car nodelist))))
  +                       (xml-error node "Invalid pipeline definition")))))
  +                (cdr result))
  +               #f))
  +         (regexp-match ,rxname url)))
  +     ))
   
       ;; This is the main processing function for a 'match' node in the
       ;; SXML representation of the sitemap. This function returns an
  @@ -384,25 +387,31 @@
                   sitemap
                   `((match . ,(lambda (node) (process-match node))))))
                 (sitemap-code
  -               `(let ,(let loop ((ms matchers))
  -                        (if (null? ms)
  -                            '()
  -                            (cons (caar ms)
  -                                  (loop (cdr ms)))))
  -                  ,@(let loop ((ms matchers))
  -                      (if (null? ms)
  -                          '()
  -                          (cons (cdar ms)
  -                                (loop (cdr ms)))))
  -                  (lambda (url sitemap env)
  -                    (or ,@(let loop ((index 1))
  -                            (if (> index pcount)
  -                                '()
  -                                (cons
  -                                 (list (string->symbol (format "p~a" index))
  -                                       'url 'sitemap 'env)
  -                                 (loop (+ index 1))))))))))
  -;        (newline) (write sitemap-code) (newline)
  +               `((lambda (,@(let loop ((ms matchers))
  +                           (if (null? ms)
  +                               '()
  +                               (cons (caaar ms)
  +                                     (loop (cdr ms))))))
  +                ,@(let loop ((ms matchers))
  +                    (if (null? ms)
  +                        '()
  +                        (cons (cdar ms)
  +                              (loop (cdr ms)))))
  +                (lambda (url sitemap env)
  +                  (or ,@(let loop ((index 1))
  +                          (if (> index pcount)
  +                              '()
  +                              (cons
  +                               (list (string->symbol (format "p~a" index))
  +                                     'url 'sitemap 'env)
  +                               (loop (+ index 1))))))))
  +              ,@(let loop ((ms matchers))
  +                  (if (null? ms)
  +                      '()
  +                      (cons (cadaar ms)
  +                            (loop (cdr ms))))))
  +            ))
  +;         (newline) (pretty-print sitemap-code) (newline)
            (eval sitemap-code (interaction-environment))
            )))
        ))
  @@ -439,3 +448,19 @@
   ;; function is invoked from the SchemeSitemap#process method.
   (define (main url sitemap environment)
     (the-sitemap url sitemap environment))
  +
  +(define test-sitemap
  + '(pipelines (@ (*line* 1))
  +   (pipeline (@ (*line* 2))
  +    (match (@ (pattern "documentation/(.*).html") (*line* 3))
  +           (generate (@ (src "docs/{1}.xml") (type "file") (*line* 4))
  +                     (param (@ (name "test") (value "123") (*line* 5))))
  +        (transform (@ (src "stylesheets/document2html.xsl") (@ (*line* 6)))
  +                   (param (@ (name "test2") (value "456") (@ (*line* 7)))))
  +        (serialize (@ (*line* 8)))
  +        )
  +
  +    (match (@ (pattern "sites/images/(.*).gif") (*line* 10))
  +        (read (@ (src "{1}") (mime-type "image/gif") (@ (*line* 11)))))
  +    )))
  +
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to