--- parser3/src/include/Attic/pa_vobject.h 2001/02/25 08:12:21 1.3 +++ parser3/src/include/Attic/pa_vobject.h 2001/03/07 13:54:47 1.9 @@ -1,34 +1,33 @@ /* - $Id: pa_vobject.h,v 1.3 2001/02/25 08:12:21 paf Exp $ + $Id: pa_vobject.h,v 1.9 2001/03/07 13:54:47 paf Exp $ */ #ifndef PA_VOBJECT_H #define PA_VOBJECT_H -#include "pa_value.h" +#include "pa_valiased.h" #include "pa_vjunction.h" -class VObject : public Value { +class Temp_class_alias; + +class VObject : public VAliased { + friend Temp_class_alias; public: // Value // all: for error reporting after fail(), etc - const char *type() const { return "Object"; } - - // object_instance: (field)=value;(STATIC)=hash;(method)=method_ref - Value *get_element(const String& name) { - // $STATIC=STATIC hash - if(name==STATIC_NAME) - return &vclass.STATICS; - - // $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); - } + const char *type() const { return "object"; } + // object_instance: (field)=value;(CLASS)=vclass;(method)=method_ref + Value *get_element(String& name) { + // $CLASS=my class + if(name==CLASS_NAME) + 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)); } @@ -36,7 +35,7 @@ public: // Value // object_instance: (field)=value void put_element(const String& name, Value *value) { // speed1: - // will not check for '$STATIC(subst)' trick + // will not check for '$CLASS(subst)' trick // will hope that user ain't THAT self-hating person // speed2: // will not check for '$method_name(subst)' trick @@ -46,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; };