Annotation of parser3/src/types/pa_vstateless_object.h, revision 1.48

1.5       paf         1: /** @file
1.8       paf         2:        Parser: @b stateless_object class decl.
1.5       paf         3: 
1.48    ! moko        4:        Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com)
1.45      moko        5:        Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.1       paf         6: */
                      7: 
                      8: #ifndef PA_VSTATELESS_OBJECT_H
                      9: #define PA_VSTATELESS_OBJECT_H
1.18      paf        10: 
1.48    ! moko       11: #define IDENT_PA_VSTATELESS_OBJECT_H "$Id: pa_vstateless_object.h,v 1.47 2023/10/05 01:28:08 moko Exp $"
1.29      paf        12: 
                     13: // include
1.1       paf        14: 
                     15: #include "pa_vjunction.h"
1.13      paf        16: #include "pa_vstateless_class.h"
1.1       paf        17: 
1.6       paf        18: /**    the object of some class. 
1.5       paf        19:        
1.23      paf        20:        "of some class" means "with some set of methods and CLASS_fields".
1.5       paf        21: */
1.29      paf        22: class VStateless_object: public Value {
1.1       paf        23: public: // Value
1.47      moko       24: 
1.27      paf        25:        /// VStateless_object: class_transparent
1.39      misha      26:        override Value* get_element(const String& aname) {
1.47      moko       27:                // $methods (CLASS, CLASS_NAME only if no OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL)
1.39      misha      28:                return get_class()->get_element(*this, aname);
1.27      paf        29:        }
                     30: 
1.46      moko       31: #ifdef FEATURE_GET_ELEMENT4CALL
                     32:        /// same as get_element, but with proper error reporting
                     33:        override Value* get_element4call(const String& aname) {
                     34:                if(Value* result=get_class()->get_element(*this, aname))
                     35:                        return result;
                     36:                return bark("%s method not found", &aname);
                     37:        }
                     38: #endif
                     39: 
1.27      paf        40:        /// VStateless_object: class_transparent
1.41      moko       41:        override const VJunction* put_element(const String& aname, Value* avalue) { 
                     42:                return get_class()->put_element(*this, aname, avalue);
1.1       paf        43:        }
                     44: 
1.37      misha      45:        /// VStateless_object: class_transparent
                     46:        override Value* get_default_getter(Value& aself, const String& aname) { 
                     47:                return get_class()->get_default_getter(aself, aname);
                     48:        }
                     49: 
1.38      misha      50:        /// VStateless_object: class_transparent
                     51:        override Value* get_scalar(Value& aself){
                     52:                return get_class()->get_scalar(aself);
                     53:        }
                     54: 
1.1       paf        55: };
                     56: 
1.47      moko       57: class VSimple_stateless_object: public VStateless_object {
                     58: public: // Value
                     59: 
                     60:        /// VSimple_stateless_object: class_transparent
                     61:        override Value* get_element(const String& aname) {
                     62:                // $methods (CLASS, CLASS_NAME only if no OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL)
                     63:                if(Value* result=get_class()->get_element(*this, aname))
                     64:                        return result;
                     65: 
                     66:                // bad $type.field
                     67:                return Value::get_element(aname);
                     68:        }
                     69: };
                     70: 
1.1       paf        71: #endif

E-mail: