void Package::compute_type(WrapperStr name, UmlTypeSpec & typespec, Class ** need_object) { typespec.type = 0; typespec.explicit_type = 0; // no base type like int Class * cl; if (((cl = Defined[name]) != 0) || ((cl = Undefined[name]) != 0) || ((cl = classes[name]) != 0)) { if (need_object != 0) *need_object = cl; typespec.type = cl->get_uml(); return; } UmlClass * uml_cl; if ((uml_cl = user_classes[name]) != 0) { typespec.type = uml_cl; return; } if ((cl = php_classes[name]) != 0) { // a php class if (need_object != 0) *need_object = cl; typespec.type = cl->get_uml(); return; } if (need_object == 0) typespec.explicit_type = name; else if (! Lex::identifierp(name)) // strange typespec.explicit_type = name; else { // the class does not already exist, create it Package * pack = package_unknown(); cl = pack->declare_if_needed(name, FALSE); typespec.type = cl->get_uml(); *need_object = cl; } }