changeset 6:d9f74f325135

name base: fix meta_stub bug.
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 01 Sep 2015 17:22:50 +0900
parents 7af72e3e4b62
children 4b015ace1eb4
files meta_connector/meta_connector_name.py
diffstat 1 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/meta_connector/meta_connector_name.py	Mon Aug 10 21:45:18 2015 +0900
+++ b/meta_connector/meta_connector_name.py	Tue Sep 01 17:22:50 2015 +0900
@@ -13,7 +13,7 @@
 Parse meta connect syntax. Default output is stdout.
 
 sample)
-    goto meta_code1|code1(arg1, arg2, ...);
+    goto code1(arg1, arg2, ...);
     \t|
     \tV
     goto meta_code1(context, arg1, arg2, ..., Code1);
@@ -35,7 +35,7 @@
     comment_out = False
     target_cs = False
     caller_name = ''
-    isMeta = False
+    isMetaOrStub = False
     for i,l in enumerate(lines):
 
         regexed_l = re.search(r"[a-zA-Z0-9_]+ *\(",l)
@@ -43,21 +43,32 @@
         # get caller code segment name
         if re.search(r"^ *__code",l) is not None:
             caller_name = regexed_l.group(0).rstrip('(')
-            if re.search(r"^ *meta_*",caller_name) is not None:
-                isMeta = True
+            if re.search(r"^ *meta_*|stub$",caller_name) is not None:
+                isMetaOrStub = True
             else:
-                isMeta = False
+                isMetaOrStub = False
                 file.write(l)
-        elif not isMeta and regexed_l is not None and re.search(r"^ *goto",l):
+        elif not isMetaOrStub and regexed_l is not None and re.search(r"^ *goto",l):
             callee_name = regexed_l.group(0).rstrip('(')
-            file.write("/*-- connected by script */\n")
-            file.write('// '+l)
-            file.write("goto {0:s}(context, {1:s}, {2:s});\n".format('meta_'+caller_name,\
+            if meta_search(lines, callee_name):
+                file.write("/*-- connected by script */\n")
+                file.write('// '+l)
+                file.write("goto {0:s}(context, {1:s}, {2:s});\n".format('meta_'+caller_name,\
                                                                      l.split('(')[1].rsplit(')')[0],\
                                                                      callee_name.capitalize()))
+            else:
+                file.write(l)
         else:
             file.write(l)
 
+# search meta code segment.
+# Find it :  __code meta_'name'
+def meta_search(lines, name):
+    for l in lines:
+        if re.search(r"^ *__code +meta_{0:s}\(".format(name),l) is not None:
+            return True
+    return False
+
 def main():
     args = get_args()
     output = sys.stdout