Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37765726
en ru br
ALT Linux repositórios
S:5.4.3-alt1
5.0: 4.10-alt3
4.1: 3.9-alt8.M41.4
4.0: 3.1-alt6
3.0: 2.0-alt0.10.1

Group :: Sistema/Configurações/Rede
RPM: alterator

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: alterator-5.1-eval-set-fix.patch
Download


diff --git a/alterator/interfaces/guile/security/wrap.scm b/alterator/interfaces/guile/security/wrap.scm
index 6966ebd..17b00ab 100644
--- a/alterator/interfaces/guile/security/wrap.scm
+++ b/alterator/interfaces/guile/security/wrap.scm
@@ -44,9 +44,36 @@
   (let* ((result (prepare-definitions <instructions>))
          (defs (car result))
          (insts (cdr result)))
-    `(let ,(map (lambda(x) (list x #f)) defs)
-       ,@(let ((convert (map (lambda(x) (if (definition? x) `(set! ,@(cdr x)) x)) insts)))
-           (if (eq? (car insts) 'list) (list convert) convert)))))
+    `(let ,(append (map (lambda(x) (list x #f)) defs)
+                   `((:list: '())))
+       ,@(let ((convert (map (lambda(x)
+                               (if (definition? x)
+                                   `(set! ,@(cdr x))
+                                   x))
+                             insts)))
+           (if (eq? (car insts) 'list)
+               (append
+                (fold (lambda (x xs)
+                        (if (and (pair? x)
+                                 (eq? (car x) 'set!))
+                            (append xs (list x))
+                            (if (or (null? xs)
+                                    (not (eq? (cadr (last xs)) ':list:)))
+                                (append xs
+                                  (list
+                                   `(set! :list:
+                                      (append :list:
+                                       ,(append `(list) (list x))))))
+                                (append (drop-right xs 1)
+                                  (list
+                                   `(set! :list:
+                                      (append :list:
+                                       ,(append (cadr (cdaddr (last xs)))
+                                                (list x)))))))))
+                      `()
+                      (cdr convert))
+                `(:list:))
+               convert)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009