Annotation of parser3/src/types/pa_vvoid.h, revision 1.38
1.1 parser 1: /** @file
2: Parser: @b void parser class.
3:
1.35 moko 4: Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)
1.8 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 parser 6: */
7:
8: #ifndef PA_VVOID_H
9: #define PA_VVOID_H
1.10 paf 10:
1.38 ! moko 11: #define IDENT_PA_VVOID_H "$Id: pa_vvoid.h,v 1.37 2012-05-11 20:41:28 moko Exp $"
1.36 moko 12:
13: #define STRICT_VARS
1.1 parser 14:
1.3 parser 15: #include "classes.h"
1.1 parser 16: #include "pa_vstateless_object.h"
17: #include "pa_globals.h"
1.34 moko 18: #include "pa_vstring.h"
1.1 parser 19:
1.18 paf 20: extern Methoded* void_class;
1.1 parser 21:
22: /// value of type 'void'. ex: usually $sjfklsjfksjdfk has this type
1.34 moko 23: class VVoid: public VString {
1.1 parser 24: public: // Value
25:
1.18 paf 26: override const char* type() const { return "void"; }
27: override VStateless_class *get_class() { return void_class; }
1.1 parser 28:
1.27 paf 29: /// VVoid: true [the only one, that reports true]
30: override bool is_void() const { return true; }
1.34 moko 31:
1.32 misha 32: /// VVoid: json-string ("null")
33: override const String* get_json_string(Json_options*) {
34: static const String singleton_json_null(String("null"));
35: return &singleton_json_null;
36: }
1.36 moko 37:
1.1 parser 38: /// VVoid: methods
1.31 misha 39: override Value* get_element(const String& aname) {
1.1 parser 40: // methods
1.31 misha 41: if(Value* result=VStateless_object::get_element(aname))
1.1 parser 42: return result;
1.37 moko 43: return 0;
44: }
1.1 parser 45:
1.36 moko 46: #ifdef STRICT_VARS
1.37 moko 47: static bool strict_vars;
48: #define CHECK_STRICT if(strict_vars) throw Exception(PARSER_RUNTIME, 0, "Use of uninitialized value");
49: #else
50: #define CHECK_STRICT
1.36 moko 51: #endif
1.16 paf 52:
1.37 moko 53: /// VVoid: with OPTIMIZE_SINGLE_STRING_WRITE it allows void to survive in [$void]
54: override bool is_string() const {
1.36 moko 55: CHECK_STRICT
1.37 moko 56: return true;
1.36 moko 57: }
1.37 moko 58:
1.36 moko 59: override const String* get_string() {
60: CHECK_STRICT
61: return VString::get_string();
62: }
63:
1.38 ! moko 64: override Value& as_expr_result() {
1.36 moko 65: CHECK_STRICT
1.38 ! moko 66: return VString::as_expr_result();
1.36 moko 67: }
68:
1.29 misha 69: inline static VVoid *get(){
70: static VVoid singleton;
71: return &singleton;
72: }
1.1 parser 73: };
74:
75: #endif
E-mail: