summaryrefslogtreecommitdiff
path: root/gobject/gparamspecs.h
Commit message (Collapse)AuthorAgeFilesLines
* More docs fixesRyan Lortie2010-07-121-0/+2
| | | | | | | | Remove the g*alias.h from the ignore lists Remove other old files from ignore lists Clean up gobject docs
* Add fundamental type and pspec for GVariantChristian Persch2010-06-171-0/+52
| | | | | | | | | Make G_TYPE_VARIANT a fundamental type instead of boxed, and add g_variant_{set,get,dup}_variant. Add GParamSpecVariant. Bug #610863.
* Migrating docs.Stefan Kost2008-06-211-2/+646
| | | | | | | | | | | | | | | | | | | | * docs/reference/gobject/tmpl/param_value_types.sgml: * gobject/gboxed.c: * gobject/gboxed.h: * gobject/genums.c: * gobject/genums.h: * gobject/gobject.c: * gobject/gobject.h: * gobject/gparam.c: * gobject/gparam.h: * gobject/gparamspecs.c: * gobject/gparamspecs.h: * gobject/gvaluetypes.c: * gobject/gvaluetypes.h: Migrating docs. svn path=/trunk/; revision=7081
* implemented G_TYPE_GTPYE. applied patch from matthias which implementsTim Janik2005-12-221-1/+14
| | | | | | | | | | | | | | | Thu Dec 22 14:59:24 2005 Tim Janik <timj@imendio.com> * gvaluetypes.[hc]: implemented G_TYPE_GTPYE. applied patch from matthias which implements GType accessors for GValue. * gparamspecs.[hc]: applied patch from matthias which implements G_TYPE_PARAM_GTYPE. * gobject.[hc]: GUnowned: introduced a new object type that has an initially floating reference. g_object_compat_control(): allow setting of a floating flag handler.
* Add a new GParamSpecOverride type that is a pointer to a differentOwen Taylor2003-10-211-0/+12
| | | | | | | | | | | | | | | | | | | | | Tue Oct 14 17:40:19 2003 Owen Taylor <otaylor@redhat.com> * gparamspecs.[ch]: Add a new GParamSpecOverride type that is a pointer to a different paramspec in a parent class or interface. * gparam.[ch]: Add g_paramspec_get_redirect_target() which follows GParamSpecOverride to the real property. Make g_param_spec_pool_list() hand redirections, properties on interfaces. * gobject.[ch] gobjectnotifyqueue.c: Add g_object_interface_install_property, g_object_interface_find_property, g_object_interface_list_properties(). Redirect virtually all publically exposed GParamSpec's to the redirect target if any. (->constructor is the exception.) (#105894)
* Improve the detection of invalid includes by moving the test outside theOwen Taylor2001-11-221-3/+3
| | | | | | | | | Mon Nov 19 14:35:56 2001 Owen Taylor <otaylor@redhat.com> * *.h: Improve the detection of invalid includes by moving the test outside the duplicate include guards. * gsourceclosure.c (g_source_set_closure): Doc fix.
* Set G_LOG_DOMAIN as in Makefile.am.Tor Lillqvist2001-11-211-1/+24
| | | | | | | | | | | | | | | | | | | | 2001-11-21 Tor Lillqvist <tml@iki.fi> * glib/makefile.mingw.in (DEFINES): Set G_LOG_DOMAIN as in Makefile.am. gobject: 2001-11-22 Tor Lillqvist <tml@iki.fi> * makefile.mingw.in (DEFINES): Set G_LOG_DOMAIN as in Makefile.am. * gparamspecs.h (GOBJECT_VAR): Can't use GLIB_VAR here, as that makes sense only when building libglib. GOBJECT_VAR is similar for libgobject. * gobject.def: Add g_param_spec_types, remove g_type_fundamental_branch_last.
* put newly created param spec types into a global array.GOBJECT_GType_guintTim Janik2001-11-211-4/+28
| | | | | | | | | | | | | | Wed Nov 21 17:23:33 2001 Tim Janik <timj@gtk.org> * gparamspecs.[hc]: put newly created param spec types into a global array. * gboxed.[hc]: moved boxed types with _get_type() function here, for: G_TYPE_CLOSURE, G_TYPE_VALUE, G_TYPE_VALUE_ARRAY, G_TYPE_GSTRING. * gtype.h: removed fundamental branch APIs and derived enum values.
* Include gtypes.h not gobject/gtype.hOwen Taylor2001-11-181-0/+3
| | | | | | | | | | | | | | | | | Sat Nov 17 14:10:35 2001 Owen Taylor <otaylor@redhat.com> * glib/gbsearcharray.h: Include gtypes.h not gobject/gtype.h * glib/glib-object.h gobject/*.h: Prevent headers from being included directly except when compiling GObject. * gobject/gvaluecollector.h: Include glib-object.h so that this file can be included directly, since we don't include it _from_ glib-object.h. * gobject/gtype.c: Remove struct _GValue hack since we now include glib/gvaluecollector.h which simply pulls in glib-object.h.
* add API for chaining: g_signal_chain_from_overridden() andTim Janik2001-11-141-11/+0
| | | | | | | | | | | | | | | | | Tue Nov 13 23:18:10 2001 Tim Janik <timj@gtk.org> * gsignal.[hc]: add API for chaining: g_signal_chain_from_overridden() and g_signal_override_class_closure(), implementation yet to come. * gtype.[hc], Makefile.am: provide G_LOG_DOMAIN as compile flag. * gparam.[hc]: s/g_param_get/g_param_spec_get/ for get_nick, get_name and get_blurb, to be consistent with the rest of the g_param_spec_*() functions. * gparamspecs.[hc]: got rid of bogus GClosure paramspec. G_TYPE_CLOSURE is a boxed type already.
* Fill in missing support for gint64 & guint64 (#59254).Joshua N Pritikin2001-10-111-39/+36
| | | | | | | | * glib-genmarshal.c gparamspecs.[ch] gtype.[ch] gvalue.h gvaluecollector.h gvaluetypes.[ch]: Fill in missing support for gint64 & guint64 (#59254). * Unconditionalize same (compile with or without G_HAVE_INT64).
* Fix order of *_PARAM_SPEC_ULONG defines.Joshua N Pritikin2001-10-101-1/+1
| | | | | * gparamspecs.h (G_IS_PARAM_SPEC_FLAGS): Fix order of *_PARAM_SPEC_ULONG defines.
* Add missing G_HAVE_GINT64 conditionalization.Owen Taylor2001-10-041-1/+3
| | | | | | Thu Oct 4 01:10:52 2001 Owen Taylor <otaylor@redhat.com> * gparamspecs.h: Add missing G_HAVE_GINT64 conditionalization.
* Add support for G_TYPE_INT64 and storing it in GValue (Patch from MathieuOwen Taylor2001-10-031-1/+37
| | | | | | | | Wed Oct 3 16:02:24 2001 Owen Taylor <otaylor@redhat.com> * glib-genmarshal.c gparamspecs.[ch] gvalue.h gobject/gvaluetypes.[ch]: Add support for G_TYPE_INT64 and storing it in GValue (Patch from Mathieu Lacage, #59254.)
* s/long/int/ for default_value in enum and flags pspecs.Tim Janik2001-06-211-2/+2
| | | | | | | Thu Jun 21 02:43:10 2001 Tim Janik <timj@gtk.org> * gparamspecs.h: s/long/int/ for default_value in enum and flags pspecs.
* use g_str_hash() algorithm to generate hashes.Tim Janik2001-05-101-5/+0
| | | | | | | | | | | | | | | | | | | | | | Thu May 10 15:19:01 2001 Tim Janik <timj@gtk.org> * gscanner.c (g_scanner_key_hash): use g_str_hash() algorithm to generate hashes. * gmem.c (standard_calloc): free() doesn't return a value (Mark Murnane). Thu May 10 14:00:48 2001 Tim Janik <timj@gtk.org> * gparamspecs.[hc]: removed g_param_spec_stringc() in lack of evidence of public need. * gsignal.h: added g_signal_disconnect_by_func(), g_signal_block_by_func() and g_signal_unblock_by_func() convenience macros as per owen's request. * gtype.c (SIZEOF_FUNDAMENTAL_INFO): align sizeof (GTypeFundamentalInfo) to size of longs and pointers.
* applied patch from owen to implement GParamSpecUnichar.Tim Janik2001-04-011-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | Sat Mar 31 23:55:58 2001 Tim Janik <timj@gtk.org> * gtype.h: * gparamspecs.[hc]: applied patch from owen to implement GParamSpecUnichar. Fri Mar 30 07:34:02 2001 Tim Janik <timj@gtk.org> * gtype.c (type_iface_retrive_holder_info_Wm): * gtypeplugin.c (g_type_plugin_complete_interface_info): * gtypemodule.c (g_type_module_complete_interface_info): change order of instance_type and interface_type so they match the g_type_add_interface_*() API. * gsignal.c (g_signal_emit_valist): always assign C return value location, people depending on unaltered return values after emissions that had no handlers to run need to use g_signal_emitv(). * gtype.[hc] (g_type_query): new function to allow querying of class and object size (semantics like g_signal_query()). currently the implementation is better held conservative so as to only support types that are classed and static.
* Use G_BEGIN_DECLS and G_END_DECLS.Tor Lillqvist2001-03-091-8/+2
| | | | | | | | | 2001-02-21 Tor Lillqvist <tml@iki.fi> * *.h: Use G_BEGIN_DECLS and G_END_DECLS. * Makefile.am: Use libglib-1.3.la from top_builddir. Invoke libtool with -no-undefined for Win32 and Cygwin.
* destruction cleanup. there's one ->finalize_hook member in the hooklistTim Janik2001-03-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Thu Mar 8 16:23:34 2001 Tim Janik <timj@gtk.org> * ghook.[hc]: destruction cleanup. there's one ->finalize_hook member in the hooklist now that gets called when a hook should be destroyed, that's it. that function is guarranteed to be called only when all ref_counts to the hook vanished, thus also when the hook is not in call. Thu Mar 8 16:35:48 2001 Tim Janik <timj@gtk.org> * gparamspecs.[hc]: s/g_param_spec_string_c/g_param_spec_stringc/. * gsignal.[hc]: fixed accumulator invocation, implemented emission hooks. and no, neither of these callbacks are called via a closure, language bindings can wrap the accumulator and emission hook interface, they already get parameters marshalled into a GValue array. (g_signal_connect): removed this function as its C specific, doesn't cover the swapped argument, is too close to its broken original gtk_signal_connect() and creates demand for _swapped, _after and _swapped_after variants <brrr>. (g_signal_connectc): convenience macro to connect a C handler func with data, like the old g_signal_connect() plus swapped argument. * gtype.h: * gboxed.c: added G_TYPE_VALUE boxed type.
* changed prototype of g_boxed_type_register_static() to contain an optionalTim Janik2001-03-071-171/+173
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Wed Mar 7 09:36:33 2001 Tim Janik <timj@gtk.org> * gboxed.[hc]: changed prototype of g_boxed_type_register_static() to contain an optional init function and a hint at whether the boxed structure uses ref counting internally. added g_value_set_boxed_take_ownership(). made G_TYPE_BOXED an abstract value type. * genums.[hc]: made G_TYPE_ENUM and G_TYPE_FLAGS abstract value types. * glib-genmarshal.c: argument type changes, preparation for third-party arg specification. * gobject.[hc]: cleaned up get/set property code. added g_strdup_value_contents() to improve warnings. * gparam.[hc]: added g_param_value_convert(), taking over responsibility of the old g_value_convert(). added G_PARAM_LAX_VALIDATION flag so validation alterations may be valid a part of the property setting process. * gparamspecs.[hc]: made value comparisons stable (for sort applications). added GParamSpecValueArray, a param spec for value arrays and GParamSpecClosure. nuked the value exchange functions and GParamSpecCCallback. * gtype.[hc]: catch unintialized usages of the type system with g_return_val_if_uninitialized(). introduced G_TYPE_FLAG_VALUE_ABSTRACT to flag types that introduce a value table, but can't be used for g_value_init(). cleaned up reserved type ids. * gvalue.[hc]: code cleanups and saner checking. nuked the value exchange API. implemented value transformations, we can't really "convert" values, rather transforms are an anylogy to C casts, real conversions need a param spec for validation, which is why g_param_value_convert() does real conversions now. * gvaluearray.[hc]: new files that implement a GValueArray, a struct that can hold inhomogeneous arrays of value (to that extend that it also allowes undefined values, i.e. G_VALUE_TYPE(value)==0). this is exposed to the type system as a boxed type. * gvaluetransform.c: new file implementing most of the former value exchange functions as single-sided transformations. * gvaluetypes.[hc]: nuked G_TYPE_CCALLBACK, added g_value_set_string_take_ownership(). * *.h: s/G_IS_VALUE_/G_VALUE_HOLDS_/. * *.[hc]: many fixes and cleanups. * many warning improvements. Tue Feb 27 18:35:15 2001 Tim Janik <timj@gtk.org> * gobject.c (g_object_get_valist): urg, pass G_VALUE_NOCOPY_CONTENTS into G_VALUE_LCOPY(), this needs proper documenting. * gparam.c: fixed G_PARAM_USER_MASK. * gtype.c (type_data_make_W): (type_data_last_unref_Wm): fixed invalid memory freeing. * gobject.c (g_object_last_unref): destroy signal handlers associated with object, right before finalization. * gsignal.c (g_signal_parse_name): catch destroyed nodes or signals that don't actually support details. * gobject.[hc]: got rid of property trailers. nuked GObject properties "data" and the "signal" variants. (g_object_connect): new convenience function to do multiple signal connections at once. (g_object_disconnect): likewise, for disconnections. * gparam.[hc] (g_param_spec_pool_lookup): took out trailer support. * gvalue.[hc]: marked g_value_fits_pointer() and g_value_peek_pointer() as private (the latter got renamed from g_value_get_as_pointer()). Wed Mar 7 09:32:06 2001 Tim Janik <timj@gtk.org> * glib-object.h: add gvaluearray.h. * gstring.[hc]: fixup naming of g_string_sprint*. * gtypes.h: fixed GCompareDataFunc naming. Wed Mar 7 09:33:27 2001 Tim Janik <timj@gtk.org> * gobject/Makefile.am: shuffled rules to avoid excessive rebuilds. * gobject/gobject-sections.txt: updates. * gobject/tmpl/*: bunch of updates, added another patch from Eric Lemings <eric.b.lemings@lmco.com>.
* add a new param spec to handle interfaces.Jonathan Blandford2001-03-061-0/+12
| | | | | | | Mon Mar 5 15:26:30 2001 Jonathan Blandford <jrb@redhat.com> * gparamspecs.c (g_param_spec_interface): add a new param spec to handle interfaces.
* add an instance member value_type so the default value of the pspec classTim Janik2000-12-151-6/+0
| | | | | | | Fri Dec 15 04:40:23 2000 Tim Janik <timj@gtk.org> * gparam.[hc]: add an instance member value_type so the default value of the pspec class can be overridden.
* urg managed to forget this last time ;(Tim Janik2000-12-131-0/+15
| | | | | | | | Wed Dec 13 09:31:26 2000 Tim Janik <timj@gtk.org> * gparamspecs.[hc]: add G_TYPE_PARAM_BOXED implementation. * gobject.[hc]: minor fixes.
* fixed dealing with collection/lcopy of NULL values.Tim Janik2000-12-121-39/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mon Dec 11 04:44:11 2000 Tim Janik <timj@gtk.org> * gboxed.c: fixed dealing with collection/lcopy of NULL values. * gclosure.h: removed insane ramblings, added G_CALLBACK() a casting convenience macro. * Makefile.am: cleanups, marshaller generation rules. * gmarshal.[hc]: new files with GRuntime standard marshallers. * glib-genmarshal.c: fix log domain, support gruntime standard marshallers, suport G_TYPE_PARAM, come with extern "C" and #include gmarshal.h. * glib-genmarshal.1: reflect glib-genmarshal.c updates. * gobject.[hc]: implement object constructor. rework parameter changed notification queueing, we support queue freezes now and don't dispatch from an idle handler anymore. parameter->property rename hassle. implemented ::properties_changed and ::notify::* signals for property change notification (the later supports property names as details). added signal connection and named data properties. (g_signal_connect_object): new function to setup while_alive connections. (g_object_class_install_property): sink properties now, since they are initially floating. (g_object_steal_data): (g_object_set_data_full): (g_object_set_data): (g_object_get_data): set/get data by using g_datalist_*() functions directly. (g_object_queue_param_changed): nuked. (g_object_freeze_notify): start queueing of property changes (freeze/ thaw calls stack). (g_object_notify): announce changes of a certain property directly. (g_object_thaw_notify): process queue of property changes, therefore emitting GObject::notify::detail with detail being the changed properties names. (G_OBJECT_WARN_INVALID_PROPERTY_ID): saner macro variant of former G_WARN_INVALID_PARAM_ID(). * gparam.[hc]: param specs are now initially floating and need to be sunken with g_param_spec_sink(), support G_TYPE_PARAM values. added G_PARAM_CONSTRUCT and G_PARAM_CONSTRUCT_ONLY parameter flags, required by GObjectClass.constructor(). * gparamspecs.[hc]: added GParamSpecParam, GParamSpecPointer and GParamSpecCCallback, param specs for G_TYPE_PARAM, G_TYPE_POINTER and G_TYPE_CCALLBACK respectively. * gsignal.[hc]: cleanups. (signal_id_lookup): after walking the anchestry, try interfaces as well. (g_signal_new): new function to create signals from varargs type list. (g_signal_connect_closure): closure connection variant that works from signal name+detail. (g_signal_connect_data): c handler connection variant that works from signal name+detail. (g_signal_emit_valist): emit signal for an instance with paraneters collected from a va_list. (g_signal_emit): emit signal, taking parameters from varargs list. (g_signal_emit_by_name): same as g_signal_emit, working from signal name+detail. (signal_emit_R): return whether return_value needs to be altered. * gtype.[hc]: set log-domain to GRuntime, i'm slowly getting to all the points that need to reflect the upcoming rename. melt g_type_conforms_to() functionality into g_type_is_a(), as that is what we really want (liskov substitution principle). assorted changes to other files due to conforms_to->is_a. * gvalue.[hc]: implemented g_value_set_instance() that sets a value from an instantiatable type via the value_table's collect_value() function (based on an idea from James Henstridge <james@daa.com.au>). cleanups/fixes. * gvaluetypes.[hc]: implement G_TYPE_CCALLBACK and G_TYPE_PARAM.
* define gstring in terms of gchar*. this typedef reflects the type name ofTim Janik2000-06-241-74/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fri Jun 23 17:20:26 2000 Tim Janik <timj@gtk.org> * glib.h: define gstring in terms of gchar*. this typedef reflects the type name of the primitive G_TYPE_STRING in the gobject module. Sat Jun 24 23:03:04 2000 Tim Janik <timj@gtk.org> * gtype.[hc]: provide G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_FLOAT, G_TYPE_DOUBLE and G_TYPE_STRING fundamental types. added a GTypeValueTable* pointer to GTypeInfo structure for types to implement GValue handling functions. GTypeValueTable contains the following members: value_init(): initialize a GValue structure. value_free(): free GValue structure contents (optional). value_copy(): copy one GValue contents to another GValue structure of collect_type: varargs collection type for the first variable argument to be collected by collect_value(). collect_value(): variable arguments collection function (optional). lcopy_type: varargs collection type for the first variable argument to be location copyied by lcopy_value(). lcopy_value(): variable arguments location copy function (optional). g_type_value_table_peek(): new function to retrive the GTypeValueTable* for a type node. ValueTables get inherited from parent types, unless overridden through the GTypeInfo structure. internally, GTypeValueTable support means an added overhead of one pointer per static or used dynamic type node. g_type_add_class_cache_func(): provide a cache_func/data pair to be called prior to a type nodes last_unref() function, this can be used to prevent premature class destruction. multiple installed cache_func() will be chained upon last_unref() untill one of them returns TRUE. the cache_func()s have to check the type id passed in to figure whether they actually wants to cache the class of this type (since any types are routed through the cache_func() chain). g_type_remove_class_cache_func(): remove a previously installed cache_func/data pair. the cache maintained by this function has to be clear when calling g_type_remove_class_cache_func() to avoid leaks. g_type_class_unref_uncached(): class unref function for cache_func() implementations, unreferences a class omitting the cache chain (and therefore unref->cache->unref->... loops). * gvaluetypes.[hc]: provide the value setters/getters for the primitive fundamental types boolean, char, uchar, int, uint, long, ulong, float, double and string. * gvalue.[hc]: provide G_TYPE_IS_VALUE() in terms of whether a GTypeValueTable is provided for this type. removed g_value_init_default(), g_value_validate(), g_value_defaults(), g_value_set_default() and g_values_cmp() as these are supplied by the GParamSpec API now. moved g_values_exchange() into the "implementation details" section, since it just provides the underlying functionality for g_value_convert(). * gvaluecollector.h: renamed the varargs value container from GParamCValue to GTypeCValue as the value collection methods are supplied by the type system now. G_PARAM_COLLECT_VALUE() and G_PARAM_LCOPY_VALUE() got renamed to G_VALUE_COLLECT() and G_VALUE_LCOPY() and operate without a GParamSpec structure now. * genums.h: macros cleanups/fixes. * genum.c: provide G_TYPE_ENUM and G_TYPE_FLAGS type and assorted g_value_{s|g}et_{enum|flags}() implementations. * gobject.[hc]: provide G_IS_VALUE_OBJECT(), G_TYPE_OBJECT ValueTable methods and g_value_{s|g}et_object(). * gparam.[hc]: reduced class to value_set_default(), value_validate() and values_cmp(). also parameters now need to fill in a GType value_type; field to indicate the GValue type they are handling. provide g_param_value_set_default(), g_param_value_defaults(), g_param_value_validate() and g_param_values_cmp(). * gparamspecs.[hc]: got rid of the g_value_* functions and the G_IS_VALUE_* macros. adapted param spec implementations according to the GParamSpecClass changes.
* add reserved fundamental ids for gtk types (for transition time). addedTim Janik2000-05-121-0/+335
Fri May 5 01:15:48 2000 Tim Janik <timj@gtk.org> * gtype.h: add reserved fundamental ids for gtk types (for transition time). added G_TYPE_FUNDAMENTAL_MAX for gtk. Mon Apr 17 20:45:50 2000 Tim Janik <timj@gtk.org> * glib-gobject.c (g_object_base_class_finalize): oops, don't unset n_params prior to destructing them. Tue Apr 11 04:28:10 2000 Tim Janik <timj@gtk.org> * fixed a couple of bugs in the initial parameter/object implementations, after getting beast running on GObject and GValue. Fri Apr 7 04:27:49 2000 Tim Janik <timj@gtk.org> * glib-gobject.[hc]: completed parameter set/get implementations, along with asyncronous parameter changed notification queue. Sun Apr 2 04:54:36 2000 Tim Janik <timj@gtk.org> * glib-gobject.[hc]: GObject implementation, that is facilities for setting/getting quarked data and reference counting. * glib-gparamspecs.[hc]: first actuall parameter implementations for GLib, so far we have: char, uchar, bool, int, uint, long, ulong, enum, flags, float, double, string and object. each of these GParamSpecs is a new instantiatable type in its own respect, so the .c file derives 13 new types from G_TYPE_PARAM and defines over 50 (*2) conversion facilities. * glib-gvaluecollector.h: generic varargs handling stubs for GParamSpecs, private header file (does get installed for inclusion into user code though). * glib-gvalue.[hc]: GValue functionality implementation. * glib-gparam.[hc]: basis GParamSpec implementation for the virtual base type G_TYPE_PARAM. * glib-genums.[hc]: enum/flags type implementation, based on bseenum.[hc]. * glib-extra.[hc]: GLib additions, including 1.3 compatibility routines and various other functions, from string manipulation over list manipulation up to a unix signal GSource. * glib-gtype.[hc]: GLib Type System implementation, heavily based on BSE's dynamic type system.