diff -r eecc53781498 -r fd1f6ae26d4f generate_IEC_std.py --- a/generate_IEC_std.py Mon Jan 19 17:07:03 2009 +0100 +++ b/generate_IEC_std.py Mon Jan 19 17:08:17 2009 +0100 @@ -108,14 +108,14 @@ This tests are defined in search_expression_type.cc """ return {"ANY" : "", - "ANY_BIT" : "if(search_expression_type->is_binary_type(%(paramname)s_type_symbol))", - "ANY_NBIT" : "if(search_expression_type->is_nbinary_type(%(paramname)s_type_symbol))", - "ANY_NUM" : "if(search_expression_type->is_num_type(%(paramname)s_type_symbol))", - "ANY_REAL" : "if(search_expression_type->is_real_type(%(paramname)s_type_symbol))", - "ANY_INT" : "if(search_expression_type->is_integer_type(%(paramname)s_type_symbol))" + "ANY_BIT" : "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_binary_type(%(paramname)s_type_symbol))", + "ANY_NBIT" : "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_nbinary_type(%(paramname)s_type_symbol))", + "ANY_NUM" : "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_num_type(%(paramname)s_type_symbol))", + "ANY_REAL" : "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_real_type(%(paramname)s_type_symbol))", + "ANY_INT" : "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_integer_type(%(paramname)s_type_symbol))" }.get(typename, #"if (typeid(*last_type_symbol) == typeid(%(typename)s_type_name_c))")%{ - "if(search_expression_type->is_same_type(&search_constant_type_c::%(typename)s_type_name, last_type_symbol))")%{ + "if(%(paramname)s_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::%(typename)s_type_name, last_type_symbol))")%{ "paramname" : paramname, "typename": typename.lower()} def recurse_and_indent(fdecls, indent, do_type_search_only = False, do_il = False): @@ -151,12 +151,15 @@ identifier_c param_name("%(input_name)s"); /* Get the value from a foo( = ) style call */ symbol_c *%(input_name)s_param_value = function_call_param_iterator.search(¶m_name); + symbol_c *%(input_name)s_type_symbol = NULL; /* Get the value from a foo() style call */ if (%(input_name)s_param_value == NULL) %(input_name)s_param_value = function_call_param_iterator.next(); - symbol_c *%(input_name)s_type_symbol = search_expression_type->get_type(%(input_name)s_param_value); - last_type_symbol = last_type_symbol && search_expression_type->is_same_type(%(input_name)s_type_symbol, last_type_symbol) ? search_expression_type->common_type(%(input_name)s_type_symbol, last_type_symbol) : %(input_name)s_type_symbol ; + if (%(input_name)s_param_value != NULL) { + %(input_name)s_type_symbol = search_expression_type->get_type(%(input_name)s_param_value); + last_type_symbol = last_type_symbol && %(input_name)s_type_symbol && search_expression_type->is_same_type(%(input_name)s_type_symbol, last_type_symbol) ? search_expression_type->common_type(%(input_name)s_type_symbol, last_type_symbol) : %(input_name)s_type_symbol ; + } """%{"input_name":Paramname} for ParamType,NextParamDecl in ParamTypes.iteritems(): @@ -188,13 +191,18 @@ res += "function_name = (symbol_c*)(new pragma_c(\"%s\"));\n"%code_gen[1] if fdecl["extensible"]: res += """ +if (nb_param < %(min_nb_param)d) + nb_param = %(min_nb_param)d; char* nb_param_str = new char[10]; -sprintf(nb_param_str, "%d", nb_param); +sprintf(nb_param_str, "%%d", nb_param); ADD_PARAM_LIST((symbol_c*)(new integer_c((const char *)nb_param_str)), (symbol_c*)(new int_type_name_c()), function_param_iterator_c::direction_in) -""" +"""%{"min_nb_param" : len(fdecl["inputs"])} for paramname,paramtype,unused in fdecl["inputs"]: - res += "ADD_PARAM_LIST(%(input_name)s_param_value, %(input_name)s_type_symbol, function_param_iterator_c::direction_in)\n"%{"input_name" : paramname} - + res += """ +if (%(input_name)s_type_symbol == NULL) + %(input_name)s_type_symbol = last_type_symbol; +ADD_PARAM_LIST(%(input_name)s_param_value, %(input_name)s_type_symbol, function_param_iterator_c::direction_in) +"""%{"input_name" : paramname} if fdecl["extensible"]: res += """ int base_num = %d;