--- parser3/src/include/Attic/pa_vobject.h 2001/02/25 08:50:12 1.4 +++ parser3/src/include/Attic/pa_vobject.h 2001/02/25 16:36:11 1.7 @@ -1,16 +1,17 @@ /* - $Id: pa_vobject.h,v 1.4 2001/02/25 08:50:12 paf Exp $ + $Id: pa_vobject.h,v 1.7 2001/02/25 16:36:11 paf Exp $ */ #ifndef PA_VOBJECT_H #define PA_VOBJECT_H -#include "pa_value.h" +#include "pa_valiased.h" #include "pa_vjunction.h" -#define CLASS_NAME "CLASS" +class Temp_class_alias; -class VObject : public Value { +class VObject : public VAliased { + friend Temp_class_alias; public: // Value // all: for error reporting after fail(), etc @@ -20,17 +21,13 @@ public: // Value Value *get_element(const String& name) { // $CLASS=my class if(name==CLASS_NAME) - return &vclass; - - // $method=junction(this+method) - if(Method *method=static_cast(vclass.methods().get(name))) { - Junction& j=*NEW Junction(pool(), - *this, - method,0,0,0,0); - - return NEW VJunction(j); - } - + return class_alias; + // $BASE=my parent + if(name==BASE_NAME) + return class_alias->base(); + // $method=junction(self+class+method) + if(Junction *junction=class_real.get_junction(*this, name)) + return NEW VJunction(*junction); // $field=fields.field return static_cast(fields.get(name)); } @@ -48,19 +45,18 @@ public: // Value } // object_class, object_instance: object_class - VClass *get_class() { return &vclass; } + VClass *get_class() { return &class_real; } public: // creation - VObject(Pool& apool, VClass& vclass) : - Value(apool), - vclass(vclass), + VObject(Pool& apool, VClass& vclass) : VAliased(apool, vclass), + class_real(vclass), fields(apool) { } private: - VClass& vclass; + VClass& class_real; Hash fields; };