Skip to content
Snippets Groups Projects
Forked from Jonathan Wilkes / purr-data
Source project has a limited visibility.
  • Jonathan Wilkes's avatar
    7cfac026
    allow class_addcreator to register an additional creator with the namespace prefix if one was used · 7cfac026
    Jonathan Wilkes authored
    This will allow legacy externals like iemmatrix and zexy to properly load
    aliases the first time when the user instantiates an object with
    [namespace_prefix/alias_name]
    
    This becomes relevant when there are kludge classes that essentially just
    "#include" the original C file of a class and add an alias_setup function
    which just calls the original setup routine. (For example, see iemmatrix.)
    However, such an approach still calls class_new with the original class name.
    Thus "namespace_prefix/classname" gets added to the pd_objectcreator
    methodspace, but "namespace_prefix/alias_name"-- which is what we want--
    does not. This results in a series of 1000 recursive calls into
    pd_objectmaker's new_anything method. (I.e., sys_load_lib finds the
    "namespace_prefix/classname" is already loaded, new_anything_sends a
    typedmess to pd_objectmaker's new_anything method, which calls
    sys_load_lib, etc.)
    
    To prevent this, we just make sure to add "namespace_prefix/alias" by
    adding the relevant lines to class_addcreator. This should really be
    happening anyway-- since internal classes don't have a class_loadsym
    they aren't affected, and externals with aliases won't work with
    namespace prefix without this.
    7cfac026
    History
    allow class_addcreator to register an additional creator with the namespace prefix if one was used
    Jonathan Wilkes authored
    This will allow legacy externals like iemmatrix and zexy to properly load
    aliases the first time when the user instantiates an object with
    [namespace_prefix/alias_name]
    
    This becomes relevant when there are kludge classes that essentially just
    "#include" the original C file of a class and add an alias_setup function
    which just calls the original setup routine. (For example, see iemmatrix.)
    However, such an approach still calls class_new with the original class name.
    Thus "namespace_prefix/classname" gets added to the pd_objectcreator
    methodspace, but "namespace_prefix/alias_name"-- which is what we want--
    does not. This results in a series of 1000 recursive calls into
    pd_objectmaker's new_anything method. (I.e., sys_load_lib finds the
    "namespace_prefix/classname" is already loaded, new_anything_sends a
    typedmess to pd_objectmaker's new_anything method, which calls
    sys_load_lib, etc.)
    
    To prevent this, we just make sure to add "namespace_prefix/alias" by
    adding the relevant lines to class_addcreator. This should really be
    happening anyway-- since internal classes don't have a class_loadsym
    they aren't affected, and externals with aliases won't work with
    namespace prefix without this.