--- parser3/src/classes/op.C 2003/03/21 13:42:27 1.127.2.22.2.7 +++ parser3/src/classes/op.C 2003/03/24 10:35:09 1.127.2.22.2.13 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_OP_C="$Date: 2003/03/21 13:42:27 $"; +static const char* IDENT_OP_C="$Date: 2003/03/24 10:35:09 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -47,23 +47,23 @@ public: // statics //^switch ^case -static const String& switch_data_name(new String(SWITCH_DATA_NAME)); +static const String switch_data_name(SWITCH_DATA_NAME); //^cache -static const String& cache_data_name(new String(CACHE_DATA_NAME)); +static const String cache_data_name(CACHE_DATA_NAME); -static const String& exception_var_name(new String(EXCEPTION_VAR_NAME)); -static const String& exception_type_part_name(new String(EXCEPTION_TYPE_PART_NAME)); -static const String& exception_source_part_name(new String(EXCEPTION_SOURCE_PART_NAME)); -static const String& exception_comment_part_name(new String(EXCEPTION_COMMENT_PART_NAME)); -static const String& exception_handled_part_name(new String(EXCEPTION_HANDLED_PART_NAME)); +static const String exception_var_name(EXCEPTION_VAR_NAME); +static const String exception_type_part_name(EXCEPTION_TYPE_PART_NAME); +static const String exception_source_part_name(EXCEPTION_SOURCE_PART_NAME); +static const String exception_comment_part_name(EXCEPTION_COMMENT_PART_NAME); +static const String exception_handled_part_name(EXCEPTION_HANDLED_PART_NAME); // helpers -class Untaint_lang_name2enum: public Hash { +class Untaint_lang_name2enum: public Hash { public: Untaint_lang_name2enum() { #define ULN(name, LANG) \ - put(String* (new String(name)), (value_type)String::L_##LANG); + put(StringBody(name), (value_type)String::L_##LANG); ULN("as-is", AS_IS); ULN("optimized-as-is", AS_IS|String::L_OPTIMIZE_BIT); ULN("file-spec", FILE_SPEC); @@ -84,7 +84,7 @@ public: // methods static void _if(Request& r, const String& /*method_name*/, MethodParams* params) { - Value* condition_code=params->as_junction(0, "condition must be expression"); + Value& condition_code=params->as_junction(0, "condition must be expression"); bool condition=r.process_to_value(condition_code, /*0/*no name* /,*/ @@ -95,7 +95,7 @@ static void _if(Request& r, const String r.write_pass_lang(r.process(params->as_junction(2, "'else' parameter must be code"))); } -static void _untaint(Request& r, const String& method_name, MethodParams* params) { +static void _untaint(Request& r, MethodParams* params) { Language lang; if(params->count()==1) @@ -142,7 +142,7 @@ static void _taint(Request& r, const Str } } -static void _process(Request& r, const String& method_name, MethodParams* params) { +static void _process(Request& r, MethodParams* params) { const String* source; // must be declared here to prevent premature destruction Method* main_method; Value* target_self=params->count()>1? @@ -211,7 +211,7 @@ static void _rem(Request& r, const Strin params->as_junction(0, "body must be code"); } -static void _while(Request& r, const String& method_name, MethodParams* params) { +static void _while(Request& r, MethodParams* params) { Value* vcondition=params->as_junction(0, "condition must be expression"); Value* body=params->as_junction(1, "body must be code"); @@ -235,12 +235,12 @@ static void _while(Request& r, const Str } } -static void _use(Request& r, const String& method_name, MethodParams* params) { +static void _use(Request& r, MethodParams* params) { Value* vfile=params->as_no_junction(0, "file name must not be code"); r.use_file(*r.main_class, vfile->as_string()); } -static void _for(Request& r, const String& method_name, MethodParams* params) { +static void _for(Request& r, MethodParams* params) { const String& var_name=params->as_string(0, "var name must be string"); int from=params->as_int(1, "from must be int", r); int to=params->as_int(2, "to must be int", r); @@ -269,7 +269,7 @@ static void _for(Request& r, const Strin } } -static void _eval(Request& r, const String& method_name, MethodParams* params) { +static void _eval(Request& r, MethodParams* params) { Value* expr=params->as_junction(0, "need expression"); // evaluate expresion Value* value_result=r.process_to_value(expr, @@ -279,13 +279,13 @@ static void _eval(Request& r, const Stri Value* fmt=params->as_no_junction(1, "fmt must not be code"); String string; string.APPEND_CONST( - format(value_result->as_double(), fmt->as_string()->cstr())); + format(value_result->as_double(), fmt->as_string().cstr())); r.write_no_lang(string); } else r.write_no_lang(value_result); } -static void _connect(Request& r, const String& method_name, MethodParams* params) { +static void _connect(Request& r, MethodParams* params) { #ifdef RESOURCES_DEBUG struct timeval mt[2]; #endif @@ -304,7 +304,7 @@ struct timeval mt[2]; gettimeofday(&mt[0],NULL); #endif // connect - SQL_ConnectionPtr connection=SQL_driver_manager.get_connection(pool, + SQL_Connection* connection=SQL_driver_manager.get_connection(pool, url->as_string(), method_name, protocol2driver_and_client); #ifdef RESOURCES_DEBUG @@ -341,7 +341,7 @@ public: DECLARE_OBJECT_PTR(Switch_data); #endif static void _switch(Request& r, const String& /*method_name*/, MethodParams* params) { - Switch_dataPtr data(new Switch_data(r, r.process_to_value(params->get(0)))); + Switch_dataPtr data(new Switch_data(r, r.process_to_value((*params)[0]))); Temp_hash_value switch_data_setter(r.classes_conf, switch_data_name, data); @@ -356,7 +356,7 @@ static void _switch(Request& r, const St } } -static void _case(Request& r, const String& method_name, MethodParams* params) { +static void _case(Request& r, MethodParams* params) { Switch_data* data=static_cast(r.classes_conf.get(switch_data_name).get()); if(!data) @@ -502,7 +502,7 @@ const String& cache_getCharset& charset, return 0; } -static time_t as_expires(Request& r, const String& method_name, MethodParams* params, +static time_t as_expires(Request& r, MethodParams* params, int index, time_t now) { time_t result; if(Value* vdate=(*params)[index]->as(VDATE_TYPE, false)) @@ -515,7 +515,7 @@ static time_t as_expires(Request& r, con static const String& as_file_spec(Request& r, MethodParams* params, int index) { return r.absolute(params->as_string(index, "filespec must be string")); } -static void _cache(Request& r, const String& method_name, MethodParams* params) { +static void _cache(Request& r, MethodParams* params) { time_t now=time(0); // ^cache[filename] ^cache(seconds) ^cache[expires date] @@ -602,9 +602,9 @@ static void _cache(Request& r, const Str } // also used in pa_request.C to pass param to @unhandled_exception -VHash* exception2vhashconst Exception& e) { - VHash* result(new VHash); - HashStringValue& hash=result->hash(0); +VHash& exception2vhashconst Exception& e) { + VHash& result=*new VHash; + HashStringValue& hash=result->hash(); if(const char* type=e.type(true)) hash.put(exception_type_part_name, Value*(new VString(String* (new String(type))))); if(const String& asource=e.problem_source()) { @@ -631,7 +631,7 @@ VHash* exception2vhashconst Exception& e return result; } -static void _try_operator(Request& r, const String& method_name, MethodParams* params) { +static void _try_operator(Request& r, MethodParams* params) { Value* body_code=params->as_junction(0, "body_code must be code"); Value* catch_code=params->as_junction(1, "catch_code must be code"); @@ -654,7 +654,7 @@ static void _try_operator(Request& r, co result=r.process(catch_code); bool handled=false; if(Value* value= - vhash->hash(0).get(exception_handled_part_name)) + vhash->hash().get(exception_handled_part_name)) handled=value->as_bool(); junction->method_frame->put_element(exception_var_name, saved_exception_var_value, false); @@ -667,20 +667,20 @@ static void _try_operator(Request& r, co r.write_pass_lang(result); } -static void _throw_operator(Request& r, const String& method_name, MethodParams* params) { +static void _throw_operator(Request& r, MethodParams* params) { if(params->count()==1) { Value* param0=(*params)[0]; - if(HashStringValue *hash=param0->get_hash(method_name)) { + if(HashStringValue *hash=param0->get_hash()) { const char* type=0; if(Value* value=hash->get(exception_type_part_name)) - type=value->as_string()->cstr(); + type=value->as_string().cstr(); const String* source; if(Value* value=hash->get(exception_source_part_name)) source=value->as_string(); const char* comment; if(Value* value=hash->get(exception_comment_part_name)) - comment=value->as_string()->cstr(); + comment=value->as_string().cstr(); throw Exception(type, source?source:method_name, @@ -693,14 +693,14 @@ static void _throw_operator(Request& r, const char* type=params->as_string(0, "type must be string")->cstr(); const String* source=params->as_string(1, "source must be string"); const char* comment=params->count()>2? params->as_string(2, "comment must be string")->cstr() - :CharPtr(0); + :0; throw Exception(type, source, "%s", comment?comment.get():""); } } #if defined(WIN32) && defined(_DEBUG) # define PA_BPT -static void _bpt(Request& r, const String& method_name, MethodParams* params) { +static void _bpt(Request& r, MethodParams* params) { _asm int 3; } #endif