Annotation of parser3/src/types/pa_vvoid.h, revision 1.40
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.40 ! moko 11: #define IDENT_PA_VVOID_H "$Id: pa_vvoid.h,v 1.39 2012-05-28 19:47:53 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")
1.39 moko 33: override const String* get_json_string(Json_options&) {
1.32 misha 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 {
55: return true;
1.36 moko 56: }
1.37 moko 57:
1.36 moko 58: override const String* get_string() {
59: CHECK_STRICT
60: return VString::get_string();
61: }
62:
1.38 moko 63: override Value& as_expr_result() {
1.36 moko 64: CHECK_STRICT
1.38 moko 65: return VString::as_expr_result();
1.36 moko 66: }
67:
1.29 misha 68: inline static VVoid *get(){
69: static VVoid singleton;
70: return &singleton;
71: }
1.1 parser 72: };
73:
74: #endif
E-mail: