Annotation of parser3/src/include/pa_vobject.h, revision 1.11
1.1 paf 1: /*
1.11 ! paf 2: $Id: pa_vobject.h,v 1.10 2001/03/07 13:55:46 paf Exp $
1.1 paf 3: */
4:
5: #ifndef PA_VOBJECT_H
6: #define PA_VOBJECT_H
7:
1.7 paf 8: #include "pa_valiased.h"
1.1 paf 9: #include "pa_vjunction.h"
1.4 paf 10:
1.7 paf 11: class Temp_class_alias;
12:
13: class VObject : public VAliased {
14: friend Temp_class_alias;
1.1 paf 15: public: // Value
16:
17: // all: for error reporting after fail(), etc
1.8 paf 18: const char *type() const { return "object"; }
1.1 paf 19:
1.11 ! paf 20: // clone
! 21: Value *clone() { return NEW VObject(fclass_real, ffields); };
! 22:
1.4 paf 23: // object_instance: (field)=value;(CLASS)=vclass;(method)=method_ref
1.10 paf 24: Value *get_element(const String& name) {
1.4 paf 25: // $CLASS=my class
26: if(name==CLASS_NAME)
1.11 ! paf 27: return fclass_alias;
1.6 paf 28: // $BASE=my parent
29: if(name==BASE_NAME)
1.11 ! paf 30: return fclass_alias->base();
1.7 paf 31: // $method=junction(self+class+method)
1.11 ! paf 32: if(Junction *junction=fclass_real.get_junction(*this, name))
1.9 paf 33: return NEW VJunction(*junction);;
1.11 ! paf 34: // $field=ffields.field
! 35: return static_cast<Value *>(ffields.get(name));
1.1 paf 36: }
37:
38: // object_instance: (field)=value
39: void put_element(const String& name, Value *value) {
40: // speed1:
1.4 paf 41: // will not check for '$CLASS(subst)' trick
1.1 paf 42: // will hope that user ain't THAT self-hating person
43: // speed2:
44: // will not check for '$method_name(subst)' trick
45: // -same-
46:
1.11 ! paf 47: ffields.put(name, value);
1.1 paf 48: }
49:
50: // object_class, object_instance: object_class
1.11 ! paf 51: VClass *get_class() { return &fclass_real; }
1.1 paf 52:
53: public: // creation
54:
1.11 ! paf 55: VObject(VClass& aclass_real) : VAliased(aclass_real.pool(), aclass_real),
! 56: fclass_real(aclass_real),
! 57: ffields(*new(aclass_real.pool()) Hash(aclass_real.pool())) {
! 58: }
! 59:
! 60: VObject(VClass& aclass_real, Hash& afields) : VAliased(aclass_real.pool(), aclass_real),
! 61: fclass_real(aclass_real),
! 62: ffields(afields) {
1.1 paf 63: }
64:
65: private:
66:
1.11 ! paf 67: VClass& fclass_real;
! 68: Hash& ffields;
1.1 paf 69: };
70:
71: #endif
E-mail: