Annotation of parser3/src/types/pa_venv.C, revision 1.17

1.2       paf         1: /** @file
                      2:        Parser: @b env class.
                      3: 
1.16      moko        4:        Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com)
1.2       paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
                      6: */
                      7: 
                      8: #include "pa_venv.h"
                      9: #include "pa_vstring.h"
1.13      misha      10: #include "pa_vhash.h"
1.2       paf        11: #include "pa_version.h"
                     12: 
1.17    ! moko       13: volatile const char * IDENT_PA_PA_VENV_C="$Id: pa_venv.C,v 1.16 2015/10/26 01:22:01 moko Exp $" IDENT_PA_VENV_H;
1.12      moko       14: 
1.4       misha      15: #define PARSER_VERSION_ELEMENT_NAME "PARSER_VERSION"
1.13      misha      16: #define ENV_FIELDS_ELEMENT_NAME "fields"
1.4       misha      17: 
1.2       paf        18: static const String parser_version(PARSER_VERSION);
                     19: 
1.11      misha      20: Value* VEnv::get_element(const String& aname) {
1.17    ! moko       21:        // $env:CLASS, CLASS_NAME or method
        !            22:        if(Value* result=VStateless_class::get_element(aname))
        !            23:                return result;
1.5       misha      24: 
1.2       paf        25:        // $env:PARSER_VERSION
1.4       misha      26:        if(aname==PARSER_VERSION_ELEMENT_NAME)
1.2       paf        27:                return new VString(parser_version);
                     28: 
1.15      moko       29:        // $env:fields
1.13      misha      30:        if(aname==ENV_FIELDS_ELEMENT_NAME){
                     31:                HashStringValue *result=new HashStringValue();
1.15      moko       32:                for(SAPI::Env::Iterator i(finfo); i; i.next() )
                     33:                        result->put(
                     34:                                i.key(),
                     35:                                new VString(*new String(i.value(), String::L_TAINTED))
                     36:                        );
1.13      misha      37:                return new VHash(*result);
                     38:        }
                     39: 
1.6       misha      40:        // $env:field
1.15      moko       41:        if(const char* value=SAPI::Env::get(finfo, aname.cstr())){
                     42:                return new VString(*new String(value, String::L_TAINTED));
1.7       misha      43:        }
1.6       misha      44:        
                     45:        return 0;
1.3       paf        46: }

E-mail: