Commit 8dc40ca9 authored by claes's avatar claes

*** empty log message ***

parent ee0b1473
......@@ -166,6 +166,18 @@ void wb_cdrep::templateBody( pwr_tStatus *sts, pwr_eBix bix, void *p)
orep->unref();
}
pwr_mClassDef wb_cdrep::flags()
{
pwr_sClassDef *classdef;
pwr_tStatus sts;
classdef = (pwr_sClassDef *) m_orep->m_vrep->readBody( &sts, m_orep, pwr_eBix_sys, 0);
if ( EVEN(sts))
throw wb_error( sts);
return classdef->Flags;
}
const char *wb_cdrep::name() const
{
return m_orep->name();
......
......@@ -32,6 +32,7 @@ public:
//wb_object& operator=(const wb_orep&);
size_t size() { return 0;} // Fix get objects runtime body size
pwr_mClassDef flags();
pwr_tCid cid();
......
......@@ -419,9 +419,9 @@ void wb_erep::loadMeta( pwr_tStatus *status)
strcat( vname, ".db");
dcli_translate_filename( vname, vname);
wb_vrepdb *vrepdb = new wb_vrepdb( this, vname);
vrepdb->name(vol_array[0]);
addDbs( &sts, vrepdb);
// wb_vrepdb *vrepdb = new wb_vrepdb( this, vname);
// vrepdb->name(vol_array[0]);
// addDbs( &sts, vrepdb);
vol_cnt++;
}
}
......
......@@ -531,6 +531,29 @@ int wb_vrepwbl::getTypeInfo( pwr_tTid tid, pwr_eType *type, size_t *size,
return 1;
}
void wb_vrepwbl::getClassFlags( pwr_tStatus *sts, pwr_tCid cid, pwr_mClassDef *flags)
{
// Search type in this volume
ref_wblnode n = findClass( cid);
if ( n) {
if ( !n->is_built)
n->build( 0);
*flags = n->m_flags;
*sts = LDH__SUCCESS;
}
else {
// Search type in other volumes
wb_cdrep *cdrep = m_merep->cdrep( sts, cid);
if ( EVEN(*sts)) return;
*flags = cdrep->flags();
delete cdrep;
*sts = LDH__SUCCESS;
}
}
int wb_vrepwbl::getClassInfo( pwr_tCid cid, size_t *rsize, size_t *dsize)
{
// Search type in this volume
......
......@@ -81,6 +81,7 @@ public:
int getAttrInfoRec( wb_attrname *attr, pwr_eBix bix, pwr_tCid cid, size_t *size,
size_t *offset, pwr_tTid *tid, int *elements,
pwr_eType *type, int level);
void getClassFlags( pwr_tStatus *sts, pwr_tCid cid, pwr_mClassDef *flags);
ref_wblnode findObject( pwr_tOix oix);
ref_wblnode findClass( const char *name);
ref_wblnode findType( const char *name);
......
......@@ -423,10 +423,14 @@ void wb_wblnode::build( bool recursive)
is_built = 0;
}
if ( isClassDef()) {
m_oid.oix = cdh_cixToOix( m_oid.oix, 0, 0);
if ( !m_vrep->registerObject( m_oid.oix, this))
m_vrep->error( "Duplicate class index", getFileName(), line_number);
if ( m_vrep->vid() == 1)
((pwr_sClassDef *)rbody)->Flags.b.System = 1;
// Calculate offset for attributes
wb_wblnode *child = o_fch;
while ( child) {
......@@ -460,10 +464,14 @@ void wb_wblnode::build( bool recursive)
;
}
}
attr = attr->o_fws;
}
}
child = child->o_fws;
m_flags = ((pwr_sClassDef *)rbody)->Flags;
}
is_built = 1;
......@@ -540,7 +548,7 @@ void wb_wblnode::buildObjBodyDef( ref_wblnode classdef)
((pwr_sObjBodyDef *)rbody)->NumOfParams = index;
}
void wb_wblnode::buildAttribute( ref_wblnode classdef, ref_wblnode objbodydef,
void wb_wblnode::buildAttribute( ref_wblnode classdef, ref_wblnode objbodydef,
int *bindex, size_t *boffset)
{
pwr_eType type;
......@@ -668,6 +676,8 @@ void wb_wblnode::buildTemplate( ref_wblnode classdef)
}
objbodydef = objbodydef->o_fws;
}
m_flags.b.Template = 1;
ref_wblnode first_child;
first_child = getFirstChild();
if ( first_child)
......@@ -1437,6 +1447,13 @@ void wb_wblnode::iterRbody( wb_dbs *dbs)
bool wb_wblnode::exportHead(wb_import &i)
{
pwr_tStatus sts;
pwr_mClassDef flags;
m_vrep->getClassFlags( &sts, m_cid, &flags);
if ( EVEN(sts)) throw wb_error( sts);
m_flags.m |= flags.m;
ref_wblnode o_lch = get_o_lch();
pwr_tOid fthoid = o_fth ? o_fth->m_oid : pwr_cNOid;
pwr_tOid fwsoid = o_fws ? o_fws->m_oid : pwr_cNOid;
......
......@@ -50,6 +50,7 @@ public:
line_number(0), file(0), is_built(0), c_cid(0), c_cix(0), c_template(0),
b_bix(pwr_eBix__), a_tid(0), a_size(0), a_offset(0), a_elements(0), a_flags(0)
{
m_flags.m = 0;
strcpy( cname, "");
}
wb_wblnode(antlr::RefToken t) :
......@@ -59,6 +60,7 @@ public:
line_number(0), file(0), is_built(0), c_cid(0), c_cix(0), c_template(0),
b_bix(pwr_eBix__), a_tid(0), a_size(0), a_offset(0), a_elements(0), a_flags(0)
{
m_flags.m = 0;
CommonAST::setType(t->getType());
CommonAST::setText(t->getText());
}
......@@ -217,6 +219,7 @@ public:
const char *name() { return getText().c_str();}
char cname[32];
wb_vrepwbl *m_vrep;
pwr_mClassDef m_flags;
wb_wblnode *o_fth;
wb_wblnode *o_bws;
wb_wblnode *o_fws;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment