[DGD] Question about overriding AUTO objects

Noah Gibbs noah_gibbs at yahoo.com
Mon Sep 6 17:48:54 CEST 2004


  I've got a path_special object for use in Phantasmal.  I'm trying to
get nonstandard AUTO objects working for some specific files.  I got
them working on one particular special case, but I'm trying to apply
them more broadly and I'm having problems.

  Phantasmal dies, claiming 'Runtime error: Cycle in inheritance from
"/usr/common/lib/script_auto.c"'.  That's a little odd since I'm not
sure why it's compiling the /usr/common/lib/script_auto.c file at all. 
Anyway, this problem suggests that I'm somehow inheriting something I
don't mean to be.  Let me show you the core function that does this
stuff and maybe somebody more perceptive than I am will show me the
error of my ways:

string path_special(string file) {
  string user, subdir;

  if(sscanf(file, "/usr/%s/%s/%*s", user, subdir) != 3) {
    return nil;
  }

  if(file == "/usr/common/lib/common_auto") {
    return nil;
  }

  if(user != "System" && user != "common" && subdir == "script") {
    LOGD->write_syslog("Inheriting script AUTO for file " + file);
    return INHERIT_SCRIPT_AUTO;
  }

  if(user == "common") {
    LOGD->write_syslog("Inheriting common AUTO for file " + file);
    return INHERIT_COMMON_AUTO;
  }

  if(user == "System") {
    return nil;
  }

  if(game_path_object)
    return game_path_object->path_special(file);

  return nil;
}

That perceptive person may have noticed that I'm logging which file
gets inherited.  My log shows SoulD being successfully compiled, and
inheriting the COMMON_AUTO version.  Then, the script AUTO file
("/usr/common/lib/script_auto.c") gets compiled (why?), and it says
that it inherits from the common AUTO as well.

The INHERIT_COMMON_AUTO file, a header, has only a single line in it: 
'inherit "/usr/common/lib/common_auto"'.

The /usr/common/lib/common_auto file overrides call_other to check for
errors.  It doesn't explicitly inherit from anybody else, though of
course it winds up inheriting from the Kernel Lib's AUTO object since
everything in the system does.

The version that worked before had no "common AUTO", just a "script
AUTO", which worked fine.  Scripts were written only outside of
/usr/common, which may be why this all worked out.


=====



		
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush
_________________________________________________________________
List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list