From 3fa80f1e1be4b3d321bf1fb2d7c44b29c6cc3cd6 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Mon, 11 May 2020 22:19:06 +0200
Subject: [PATCH] Add AUTO generation for local variables

---
 robotlab_safety/pluto_auto.py | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/robotlab_safety/pluto_auto.py b/robotlab_safety/pluto_auto.py
index 8625d43..8c553d4 100755
--- a/robotlab_safety/pluto_auto.py
+++ b/robotlab_safety/pluto_auto.py
@@ -16,8 +16,8 @@ class PlutoVariables:
         self.by_name[name] = (int(pluto), int(index))
         pass
 
-    def codegen(self, expr):
-        m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', expr)
+    def codegen(self, auto, current):
+        m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', auto)
         if m:
             lh = m.group(1)
             op = m.group(2)
@@ -37,7 +37,17 @@ class PlutoVariables:
                 return("%s=%s" % (lh, '*'.join(rh)))
             elif op == 'OR':
                 return("%s=%s" % (lh, '+'.join(rh)))
-        raise Exception('Invalid expression', expr)
+            pass
+        m = re.match('([^=]+)=(.*)', auto)
+        if m:
+            regexp = '^(' + m.group(1).replace('*', '.*') + ')='
+            expr = '{0}=' + m.group(2)
+            lh_m = re.match(regexp, current)
+            if lh_m:
+                matches = lh_m.groups()
+                return expr.format(*matches)
+            pass
+        raise Exception('Invalid expression', auto)
 
 class SPS:
 
@@ -62,7 +72,7 @@ class SPS:
             result.append(l)
             m = re.match(';\s*AUTO:\s*(.*)', l)
             if m:
-                code = self.gm.codegen(m.group(1))
+                code = self.gm.codegen(m.group(1), current=result[-2])
                 if code != result[-2]:
                     result[-2] = code
                     pass
-- 
GitLab