--- parser3/src/classes/op.C 2005/08/09 08:14:48 1.155 +++ parser3/src/classes/op.C 2005/11/22 15:09:09 1.159 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_OP_C="$Date: 2005/08/09 08:14:48 $"; +static const char * const IDENT_OP_C="$Date: 2005/11/22 15:09:09 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -76,6 +76,7 @@ public: ULN("optimized-xml", XML|String::L_OPTIMIZE_BIT); ULN("html", HTML); ULN("optimized-html", HTML|String::L_OPTIMIZE_BIT); + ULN("regex", REGEX); #undef ULN } } untaint_lang_name2enum; @@ -83,14 +84,11 @@ public: // methods static void _if(Request& r, MethodParams& params) { - Value& condition_code=params.as_junction(0, "condition must be expression"); - - bool condition=r.process_to_value(condition_code, - false/*don't intercept string*/).as_bool(); + bool condition=params.as_bool(0, "condition must be expression", r); if(condition) - r.write_pass_lang(r.process(params.as_junction(1, "'then' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(1))); else if(params.count()>2) - r.write_pass_lang(r.process(params.as_junction(2, "'else' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(2))); } static void _untaint(Request& r, MethodParams& params) { @@ -384,7 +382,7 @@ static void _case(Request& r, MethodPara for(int i=0; i_default=&code; break; } @@ -614,6 +612,18 @@ static const String& as_file_spec(Reques return r.absolute(params.as_string(index, "filespec must be string")); } static void _cache(Request& r, MethodParams& params) { + if(params.count()==0) + { + // return current expiration time + Cache_scope* scope=static_cast(r.classes_conf.get(cache_data_name)); + if(!scope) + throw Exception("parser.runtime", + 0, + "expire-time get without cache"); + r.write_no_lang(*new VDate(scope->expires)); + return; + } + time_t now=time(0); // ^cache[filename] ^cache(seconds) ^cache[expires date]