diff options
author | Benjamin Otte <otte@gnome.org> | 2008-08-20 14:11:18 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2008-08-20 14:11:18 +0100 |
commit | 5c6ac7c02f03ec5b2fc1f4ca38611dd5b83c09bf (patch) | |
tree | 9986ebfe9983395a6b6660bee727812dd1b3da30 | |
parent | c76c19b030fedee1095a08e7374f2ab2d0732849 (diff) |
implement swfdec_abc_function_is_override()
-rw-r--r-- | swfdec/swfdec_abc_function.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/swfdec/swfdec_abc_function.c b/swfdec/swfdec_abc_function.c index 55d94980..12da46c2 100644 --- a/swfdec/swfdec_abc_function.c +++ b/swfdec/swfdec_abc_function.c @@ -181,12 +181,39 @@ swfdec_abc_function_verify (SwfdecAbcFunction *fun) gboolean swfdec_abc_function_is_override (SwfdecAbcFunction *fun, SwfdecAbcFunction *base) { + guint i; + g_return_val_if_fail (SWFDEC_IS_ABC_FUNCTION (fun), FALSE); g_return_val_if_fail (fun->resolved, FALSE); g_return_val_if_fail (SWFDEC_IS_ABC_FUNCTION (base), FALSE); g_return_val_if_fail (base->resolved, FALSE); - SWFDEC_FIXME ("implement"); + if (fun->return_traits != base->return_traits) { + SWFDEC_WARNING ("return types don't match: %s => %s", + base->return_traits->name, fun->return_traits->name); + return FALSE; + } + + if (fun->n_args != base->n_args) { + SWFDEC_WARNING ("argument count doesn't match: %u => %u", + base->n_args, fun->n_args); + return FALSE; + } + + if (!swfdec_abc_traits_is_traits (fun->args[0].traits, base->args[0].traits)) { + SWFDEC_WARNING ("this traits %s aren't subtraits of %s", + fun->args[0].traits->name, base->args[0].traits->name); + return FALSE; + } + + for (i = 1; i <= fun->n_args; i++) { + if (fun->args[i].traits != base->args[i].traits) { + SWFDEC_WARNING ("traits for argument %u don't match: %s => %s", + i, base->args[i].traits->name, fun->args[i].traits->name); + return FALSE; + } + } + return TRUE; } |