Annotation of parser3/src/types/pa_venv.C, revision 1.25
1.2 paf 1: /** @file
2: Parser: @b env class.
3:
1.24 moko 4: Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com)
1.23 moko 5: Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.2 paf 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.25 ! moko 13: volatile const char * IDENT_PA_PA_VENV_C="$Id: pa_venv.C,v 1.24 2024/11/04 03:53:25 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.18 moko 21: #ifndef OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL
22: // $env:CLASS, $env:CLASS_NAME
1.17 moko 23: if(Value* result=VStateless_class::get_element(aname))
24: return result;
1.18 moko 25: #endif
1.5 misha 26:
1.2 paf 27: // $env:PARSER_VERSION
1.4 misha 28: if(aname==PARSER_VERSION_ELEMENT_NAME)
1.2 paf 29: return new VString(parser_version);
30:
1.15 moko 31: // $env:fields
1.13 misha 32: if(aname==ENV_FIELDS_ELEMENT_NAME){
33: HashStringValue *result=new HashStringValue();
1.15 moko 34: for(SAPI::Env::Iterator i(finfo); i; i.next() )
35: result->put(
36: i.key(),
1.25 ! moko 37: new VString(i.value())
1.15 moko 38: );
1.13 misha 39: return new VHash(*result);
40: }
41:
1.6 misha 42: // $env:field
1.20 moko 43: if(const char* value=SAPI::Env::get(finfo, aname.cstr()))
1.25 ! moko 44: return new VString(value);
1.6 misha 45:
46: return 0;
1.3 paf 47: }
1.20 moko 48:
49: const VJunction* VEnv::put_element(const String& aname, Value* avalue) {
50: if(SAPI::Env::set(finfo, aname.cstr(), avalue->as_string().cstr()))
1.21 moko 51: return 0;
1.20 moko 52:
53: return Value::put_element(aname, avalue);
54: }
55:
E-mail: