Annotation of parser3/src/types/pa_vvoid.h, revision 1.42
1.1 parser 1: /** @file
2: Parser: @b void parser class.
3:
1.42 ! moko 4: Copyright (c) 2001-2015 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.42 ! moko 11: #define IDENT_PA_VVOID_H "$Id: pa_vvoid.h,v 1.41 2014/06/29 05:55:35 misha 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.41 misha 33: override const String* get_json_string(Json_options& options) {
34: if(options.fvoid == Json_options::V_STRING){
35: static const String singleton_json_empty_string(String("\"\""));
36: return &singleton_json_empty_string;
37: } else {
38: static const String singleton_json_null(String("null"));
39: return &singleton_json_null;
40: }
1.32 misha 41: }
1.36 moko 42:
1.1 parser 43: /// VVoid: methods
1.31 misha 44: override Value* get_element(const String& aname) {
1.1 parser 45: // methods
1.31 misha 46: if(Value* result=VStateless_object::get_element(aname))
1.1 parser 47: return result;
1.37 moko 48: return 0;
49: }
1.1 parser 50:
1.36 moko 51: #ifdef STRICT_VARS
1.37 moko 52: static bool strict_vars;
53: #define CHECK_STRICT if(strict_vars) throw Exception(PARSER_RUNTIME, 0, "Use of uninitialized value");
54: #else
55: #define CHECK_STRICT
1.36 moko 56: #endif
1.16 paf 57:
1.37 moko 58: /// VVoid: with OPTIMIZE_SINGLE_STRING_WRITE it allows void to survive in [$void]
59: override bool is_string() const {
60: return true;
1.36 moko 61: }
1.37 moko 62:
1.36 moko 63: override const String* get_string() {
64: CHECK_STRICT
65: return VString::get_string();
66: }
67:
1.38 moko 68: override Value& as_expr_result() {
1.36 moko 69: CHECK_STRICT
1.38 moko 70: return VString::as_expr_result();
1.36 moko 71: }
72:
1.29 misha 73: inline static VVoid *get(){
74: static VVoid singleton;
75: return &singleton;
76: }
1.1 parser 77: };
78:
79: #endif
E-mail: