diff --git a/clutter/clutter-script-parser.c b/clutter/clutter-script-parser.c index 4fed7676a..94a3b1c44 100644 --- a/clutter/clutter-script-parser.c +++ b/clutter/clutter-script-parser.c @@ -19,8 +19,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * - * - * * Original author: * * Emmanuele Bassi <ebassi@linux.intel.com> @@ -913,16 +911,28 @@ clutter_script_parser_object_end (JsonParser *json_parser, const gchar *id; GList *members, *l; + /* if the object definition does not have an 'id' field we'll + * fake one for it... + */ if (!json_object_has_member (object, "id")) { gchar *fake; + /* ... unless it doesn't even have a type - in which case + * it is an internal object definition and we're not + * supposed to touch it + */ if (!json_object_has_member (object, "type")) return; fake = _clutter_script_generate_fake_id (script); json_object_set_string_member (object, "id", fake); + CLUTTER_NOTE (SCRIPT, + "Adding fake id '%s' to object of type '%s'", + json_object_get_string_member (object, "id"), + json_object_get_string_member (object, "type")); + g_free (fake); } @@ -937,9 +947,10 @@ clutter_script_parser_object_end (JsonParser *json_parser, } id = json_object_get_string_member (object, "id"); + CLUTTER_NOTE (SCRIPT, "Getting object info for object '%s'", id); oinfo = _clutter_script_get_object_info (script, id); - if (G_LIKELY (!oinfo)) + if (oinfo == NULL) { const gchar *class_name; @@ -957,6 +968,9 @@ clutter_script_parser_object_end (JsonParser *json_parser, type_func = json_object_get_string_member (object, "type_func"); oinfo->type_func = g_strdup (type_func); + /* remove the type_func member; we don't want it to + * pollute the object members + */ json_object_remove_member (object, "type_func"); } } @@ -1007,12 +1021,21 @@ clutter_script_parser_object_end (JsonParser *json_parser, PropertyInfo *pinfo; JsonNode *node; + CLUTTER_NOTE (SCRIPT, "Object '%s' member '%s'", + oinfo->id, + name); + /* we have already parsed these */ if (strcmp (name, "id") == 0 || strcmp (name, "type") == 0) continue; node = json_object_get_member (object, name); - if (node == NULL) + + /* this should not really happen; we're getting a list of + * member names, and if one does not map a real member + * value then it's likely that something has gone wrong + */ + if (G_UNLIKELY (node == NULL)) { CLUTTER_NOTE (SCRIPT, "Empty node for member '%s' of object '%s' (type: %s)",