mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
tweaks for publish
This commit is contained in:
parent
798348ea12
commit
53a7e319d8
@ -93,6 +93,20 @@ main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!file.all_classes_valid() && !dump_brief) {
|
||||
cerr << "File is incomplete. The following classes are undefined:\n";
|
||||
|
||||
int num_classes = file.get_num_classes();
|
||||
for (int i = 0; i < num_classes; i++) {
|
||||
DCClass *dclass = file.get_class(i);
|
||||
if (dclass->is_bogus_class()) {
|
||||
cerr << " " << dclass->get_name() << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (dump_verbose || dump_brief) {
|
||||
if (!file.write(cout, dump_brief)) {
|
||||
return (1);
|
||||
|
@ -161,6 +161,20 @@ get_inherited_field(int n) const {
|
||||
return get_field(n);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DCClass::is_bogus_class
|
||||
// Access: Public
|
||||
// Description: Returns true if the class has been flagged as a bogus
|
||||
// class. This is set for classes that are generated by
|
||||
// the parser as placeholder for missing classes, as
|
||||
// when reading a partial file; it should not occur in a
|
||||
// normal valid dc file.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool DCClass::
|
||||
is_bogus_class() const {
|
||||
return _bogus_class;
|
||||
}
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DCClass::set_class_def
|
||||
@ -511,7 +525,10 @@ ai_format_generate(PyObject *distobj, int do_id,
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
DCClass::
|
||||
DCClass(const string &name) : _name(name) {
|
||||
DCClass(const string &name, bool bogus_class) :
|
||||
_bogus_class(bogus_class),
|
||||
_name(name)
|
||||
{
|
||||
#ifdef HAVE_PYTHON
|
||||
_class_def = NULL;
|
||||
#endif
|
||||
|
@ -44,6 +44,8 @@ PUBLISHED:
|
||||
int get_num_inherited_fields() const;
|
||||
DCField *get_inherited_field(int n) const;
|
||||
|
||||
bool is_bogus_class() const;
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
void set_class_def(PyObject *class_def);
|
||||
PyObject *get_class_def() const;
|
||||
@ -70,7 +72,7 @@ PUBLISHED:
|
||||
#endif
|
||||
|
||||
public:
|
||||
DCClass(const string &name);
|
||||
DCClass(const string &name, bool bogus_class = false);
|
||||
~DCClass();
|
||||
|
||||
void write(ostream &out, bool brief, int indent_level) const;
|
||||
@ -83,6 +85,7 @@ private:
|
||||
|
||||
// These members define the primary interface to the distributed
|
||||
// class as read from the file.
|
||||
bool _bogus_class;
|
||||
int _number;
|
||||
string _name;
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
////////////////////////////////////////////////////////////////////
|
||||
DCFile::
|
||||
DCFile() {
|
||||
_all_classes_valid = true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
@ -232,7 +233,9 @@ write(ostream &out, bool brief) const {
|
||||
|
||||
Classes::const_iterator ci;
|
||||
for (ci = _classes.begin(); ci != _classes.end(); ++ci) {
|
||||
(*ci)->write(out, brief, 0);
|
||||
if (!(*ci)->is_bogus_class()) {
|
||||
(*ci)->write(out, brief, 0);
|
||||
}
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
@ -278,6 +281,19 @@ get_class_by_name(const string &name) {
|
||||
return (DCClass *)NULL;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DCFile::all_classes_valid
|
||||
// Access: Published
|
||||
// Description: Returns true if all of the classes read from the DC
|
||||
// file were defined and valid, or false if any of them
|
||||
// were undefined ("bogus classes"). If this is true,
|
||||
// we might have read a partial file.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool DCFile::
|
||||
all_classes_valid() const {
|
||||
return _all_classes_valid;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DCFile::get_num_import_modules
|
||||
// Access: Published
|
||||
@ -379,6 +395,11 @@ add_class(DCClass *dclass) {
|
||||
|
||||
dclass->_number = get_num_classes();
|
||||
_classes.push_back(dclass);
|
||||
|
||||
if (dclass->is_bogus_class()) {
|
||||
_all_classes_valid = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,8 @@ PUBLISHED:
|
||||
DCClass *get_class(int n);
|
||||
DCClass *get_class_by_name(const string &name);
|
||||
|
||||
bool all_classes_valid() const;
|
||||
|
||||
int get_num_import_modules() const;
|
||||
string get_import_module(int n) const;
|
||||
int get_num_import_symbols(int n) const;
|
||||
@ -79,6 +81,8 @@ public:
|
||||
typedef pvector<Import> Imports;
|
||||
Imports _imports;
|
||||
|
||||
bool _all_classes_valid;
|
||||
|
||||
public:
|
||||
// This map is built up during parsing for the convenience of the parser.
|
||||
typedef pmap<string, DCClass *> ClassesByName;
|
||||
|
@ -112,8 +112,7 @@ dclass_name:
|
||||
DCFile::ClassesByName::const_iterator ni;
|
||||
ni = dc_file->_classes_by_name.find($1);
|
||||
if (ni == dc_file->_classes_by_name.end()) {
|
||||
dcyywarning("Unknown class: " + $1);
|
||||
$$ = new DCClass($1);
|
||||
$$ = new DCClass($1, true);
|
||||
dc_file->add_class($$);
|
||||
} else {
|
||||
$$ = (*ni).second;
|
||||
|
Loading…
x
Reference in New Issue
Block a user