Annotation of parser3/src/types/pa_vvoid.h, revision 1.36
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.36 ! moko 11: #define IDENT_PA_VVOID_H "$Id: pa_vvoid.h,v 1.35 2012-03-16 09:24:19 moko Exp $"
! 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.33 moko 31: /// VVoid: with OPTIMIZE_SINGLE_STRING_WRITE it allows void to survive in [$void]
32: override bool is_string() const { return true; }
1.34 moko 33:
1.32 misha 34: /// VVoid: json-string ("null")
35: override const String* get_json_string(Json_options*) {
36: static const String singleton_json_null(String("null"));
37: return &singleton_json_null;
38: }
1.36 ! moko 39:
! 40: #ifdef STRICT_VARS
! 41: static bool strict_vars;
! 42: #define CHECK_STRICT if(strict_vars) throw Exception(PARSER_RUNTIME, 0, "Use of uninitialized value");
! 43: #else
! 44: #define CHECK_STRICT
! 45: #endif
! 46:
1.1 parser 47: /// VVoid: methods
1.31 misha 48: override Value* get_element(const String& aname) {
1.1 parser 49: // methods
1.31 misha 50: if(Value* result=VStateless_object::get_element(aname))
1.1 parser 51: return result;
52:
1.36 ! moko 53: #ifdef STRICT_VARS
! 54: if(strict_vars)
! 55: throw Exception(PARSER_RUNTIME, 0, "Use of uninitialized value field");
! 56: #endif
1.18 paf 57: return 0;
1.16 paf 58: }
59:
1.36 ! moko 60: override Value& as_expr_result(bool return_string_as_is=false) {
! 61: CHECK_STRICT
! 62: return VString::as_expr_result(return_string_as_is);
! 63: }
! 64:
! 65: override const String* get_string() {
! 66: CHECK_STRICT
! 67: return VString::get_string();
! 68: }
! 69:
! 70: override double as_double() const {
! 71: CHECK_STRICT
! 72: return VString::as_double();
! 73: }
! 74:
! 75: override int as_int() const {
! 76: CHECK_STRICT
! 77: return VString::as_int();
! 78: }
! 79:
1.29 misha 80: inline static VVoid *get(){
81: static VVoid singleton;
82: return &singleton;
83: }
1.1 parser 84: };
85:
86: #endif
E-mail: