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

1.1       paf         1: /*
1.2     ! paf         2:   $Id: pa_vobject.h,v 1.1 2001/02/24 13:18:19 paf Exp $
1.1       paf         3: */
                      4: 
                      5: #ifndef PA_VOBJECT_H
                      6: #define PA_VOBJECT_H
                      7: 
                      8: #include "pa_value.h"
                      9: #include "pa_vjunction.h"
                     10: 
                     11: class VObject : public Value {
                     12: public: // Value
                     13:        
                     14:        // all: for error reporting after fail(), etc
                     15:        const char *type() const { return "Object"; }
                     16: 
                     17:        // object_instance: (field)=value;(STATIC)=hash;(method)=method_ref
                     18:        Value *get_element(const String& name) {
                     19:                // $STATIC=STATIC hash
                     20:                if(name==STATIC_NAME)
1.2     ! paf        21:                        return &vclass.STATICS;
1.1       paf        22: 
                     23:                // $method=junction(this+method)
                     24:                if(Method *method=static_cast<Method *>(vclass.methods.get(name))) {
                     25:                        Junction& j=*NEW Junction(pool(), 
                     26:                                *this,
                     27:                                method,0,0,0,0);
                     28: 
                     29:                        return NEW VJunction(j);
                     30:                }
                     31: 
                     32:                // $field=fields.field
                     33:                return static_cast<Value *>(fields.get(name));
                     34:        }
                     35: 
                     36:        // object_instance: (field)=value
                     37:        void put_element(const String& name, Value *value) {
                     38:                // speed1:
                     39:                //   will not check for '$STATIC(subst)' trick
                     40:                //   will hope that user ain't THAT self-hating person
                     41:                // speed2:
                     42:                //   will not check for '$method_name(subst)' trick
                     43:                //   -same-
                     44: 
                     45:                fields.put(name, value);
                     46:        }
                     47: 
                     48:        // object_class, object_instance: object_class
                     49:        VClass *get_class() { return &vclass; }
                     50: 
                     51: public: // creation
                     52: 
                     53:        VObject(Pool& apool, VClass& vclass) : 
                     54:                Value(apool), 
                     55:                vclass(vclass),
                     56:                fields(apool) {
                     57:        }
                     58: 
                     59: private:
                     60: 
                     61:        VClass& vclass;
                     62:        Hash fields;
                     63: };
                     64: 
                     65: #endif

E-mail: