Annotation of parser3/src/types/pa_vstateless_object.h, revision 1.49
1.5 paf 1: /** @file
1.8 paf 2: Parser: @b stateless_object class decl.
1.5 paf 3:
1.49 ! moko 4: Copyright (c) 2001-2026 Art. Lebedev Studio (https://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.49 ! moko 11: #define IDENT_PA_VSTATELESS_OBJECT_H "$Id: pa_vstateless_object.h,v 1.48 2024/11/04 03:53:26 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: