Mercurial > octave-nkf
diff src/genprops.awk @ 9185:1e5c11890f85
check for invalid property names when setting defaults
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 07 May 2009 15:14:19 -0400 |
parents | eb63fbe60fab |
children | bdcfb756d721 |
line wrap: on
line diff
--- a/src/genprops.awk Wed May 06 09:55:26 2009 +0200 +++ b/src/genprops.awk Thu May 07 15:14:19 2009 -0400 @@ -257,6 +257,12 @@ if (class_name && ! base) emit_common_declarations(); + printf ("public:\n\n"); + if (base) + printf ("\n static bool has_property (const std::string& pname, const std::string& cname);\n\n"); + else + printf ("\n static bool has_property (const std::string& pname);\n\n"); + if (idx > 0) print (base ? "protected:\n" : "private:\n"); @@ -422,7 +428,7 @@ ## set method if (base) - printf ("void\nbase_properties::set (const caseless_str& pname, const octave_value& val)\n{\n") >> filename; + printf ("void\nbase_properties::set (const caseless_str& pname, const std::string& cname, const octave_value& val)\n{\n") >> filename; else printf ("void\n%s::properties::set (const caseless_str& pname, const octave_value& val)\n{\n", class_name) >> filename; @@ -440,9 +446,9 @@ } if (base) - printf (" else\n set_dynamic (pname, val);\n}\n\n") >> filename; + printf (" else\n set_dynamic (pname, cname, val);\n}\n\n") >> filename; else - printf (" else\n base_properties::set (pname, val);\n}\n\n") >> filename; + printf (" else\n base_properties::set (pname, \"%s\", val);\n}\n\n", class_name) >> filename; ## get "all" method @@ -559,6 +565,19 @@ if (! base) printf ("std::string %s::properties::go_name (\"%s\");\n\n", class_name, object_name) >> filename; + + if (base) + printf ("bool base_properties::has_property (const std::string& pname, const std::string& cname") >> filename; + else + printf ("bool %s::properties::has_property (const std::string& pname", class_name) >> filename; + printf (")\n{\n static std::set<std::string> all_properties;\n\n static bool initialized = false;\n\n if (! initialized)\n {\n") >> filename; + for (i = 1; i <= idx; i++) + printf (" all_properties.insert (\"%s\");\n", name[i]) >> filename; + printf ("\n initialized = true;\n }\n\n") >> filename; + if (base) + printf (" return all_properties.find (pname) != all_properties.end () || has_dynamic_property (pname, cname);\n}\n\n") >> filename; + else + printf (" return all_properties.find (pname) != all_properties.end () || base_properties::has_property (pname, \"%s\");\n}\n\n", class_name) >> filename; } }