Annotation of parser3/src/include/pa_vobject.h, revision 1.13
1.1 paf 1: /*
1.13 ! paf 2: $Id: pa_vobject.h,v 1.12 2001/03/08 17:08:13 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.11 paf 19:
1.4 paf 20: // object_instance: (field)=value;(CLASS)=vclass;(method)=method_ref
1.10 paf 21: Value *get_element(const String& name) {
1.4 paf 22: // $CLASS=my class
23: if(name==CLASS_NAME)
1.11 paf 24: return fclass_alias;
1.6 paf 25: // $BASE=my parent
26: if(name==BASE_NAME)
1.11 paf 27: return fclass_alias->base();
1.7 paf 28: // $method=junction(self+class+method)
1.11 paf 29: if(Junction *junction=fclass_real.get_junction(*this, name))
1.9 paf 30: return NEW VJunction(*junction);;
1.11 paf 31: // $field=ffields.field
32: return static_cast<Value *>(ffields.get(name));
1.1 paf 33: }
34:
35: // object_instance: (field)=value
36: void put_element(const String& name, Value *value) {
37: // speed1:
1.4 paf 38: // will not check for '$CLASS(subst)' trick
1.1 paf 39: // will hope that user ain't THAT self-hating person
40: // speed2:
41: // will not check for '$method_name(subst)' trick
42: // -same-
43:
1.11 paf 44: ffields.put(name, value);
1.1 paf 45: }
46:
47: // object_class, object_instance: object_class
1.11 paf 48: VClass *get_class() { return &fclass_real; }
1.1 paf 49:
50: public: // creation
51:
1.11 paf 52: VObject(VClass& aclass_real) : VAliased(aclass_real.pool(), aclass_real),
53: fclass_real(aclass_real),
54: ffields(*new(aclass_real.pool()) Hash(aclass_real.pool())) {
55: }
56:
57: VObject(VClass& aclass_real, Hash& afields) : VAliased(aclass_real.pool(), aclass_real),
58: fclass_real(aclass_real),
59: ffields(afields) {
1.1 paf 60: }
61:
62: private:
63:
1.11 paf 64: VClass& fclass_real;
65: Hash& ffields;
1.1 paf 66: };
67:
68: #endif
E-mail: