Annotation of parser3/src/include/pa_vobject.h, revision 1.12

1.1       paf         1: /*
1.12    ! paf         2:   $Id: pa_vobject.h,v 1.11 2001/03/08 16:54:25 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
1.12    ! paf        21:        Value *clone() const { return NEW VObject(fclass_real, ffields); };
1.11      paf        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: