generate_IEC_std.py
changeset 542 cce4903be769
parent 521 457578c31074
child 548 0b6ab74f4b89
--- a/generate_IEC_std.py	Mon Jun 06 16:29:08 2011 +0200
+++ b/generate_IEC_std.py	Wed Jun 08 18:35:28 2011 +0200
@@ -267,6 +267,15 @@
         
         return res.replace('\n','\n'+indent)
 
+def get_default_input_type(fdecls):
+    if type(fdecls) != type(tuple()) and len(fdecls) == 1:
+        ParamTypes = fdecls.values()[0]
+        if len(ParamTypes) == 1:
+            ParamType_name, ParamType_value = ParamTypes.items()[0]
+            if not ParamType_name.startswith("ANY") and type(ParamType_value) == type(tuple()):
+                return "&search_constant_type_c::%s_type_name" % ParamType_name.lower()
+    return "NULL"
+    
 ###################################################################
 ###                                                             ###
 ###                           MAIN                              ###
@@ -346,8 +355,8 @@
  */
     case function_%s :
     {
-        symbol_c *last_type_symbol = NULL;
-"""    %(fname, fname.lower())
+        symbol_c *last_type_symbol = %s;
+"""    %(fname, fname.lower(), get_default_input_type(fdecls))
     indent =  "    "
 
     st_code_gen += recurse_and_indent(fdecls, indent).replace('\n','\n    ')
@@ -378,8 +387,8 @@
  */
     case function_%s :
     {
-        symbol_c *last_type_symbol = NULL;
-"""    %(fname, fname.lower())
+        symbol_c *last_type_symbol = %s;
+"""    %(fname, fname.lower(), get_default_input_type(fdecls))
     indent =  "    "
 
     il_code_gen += recurse_and_indent(fdecls, indent, do_il=True).replace('\n','\n    ')
@@ -427,8 +436,8 @@
  */
     case function_%s :
     {
-        symbol_c *last_type_symbol = NULL;
-"""    %(fname, fname.lower())
+        symbol_c *last_type_symbol = %s;
+"""    %(fname, fname.lower(), get_default_input_type(fdecls))
     indent =  "    "
 
     search_type_code += recurse_and_indent(fdecls, indent, True).replace('\n','\n    ')
@@ -460,8 +469,8 @@
  */
     case function_%s :
     {
-        symbol_c *last_type_symbol = NULL;
-"""    %(fname, fname.lower())
+        symbol_c *last_type_symbol = %s;
+"""    %(fname, fname.lower(), get_default_input_type(fdecls))
     indent =  "    "
 
     search_type_code += recurse_and_indent(fdecls, indent, True, True).replace('\n','\n    ')