--- parser3/src/classes/op.C 2001/08/02 06:54:12 1.36 +++ parser3/src/classes/op.C 2001/09/06 06:11:13 1.41 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) */ -static const char *RCSId="$Id: op.C,v 1.36 2001/08/02 06:54:12 parser Exp $"; +static const char *RCSId="$Id: op.C,v 1.41 2001/09/06 06:11:13 parser Exp $"; #include "classes.h" #include "pa_config_includes.h" @@ -22,9 +22,6 @@ static const char *RCSId="$Id: op.C,v 1. #define OP_CLASS_NAME "OP" -#define MAIN_SQL_NAME "SQL" -#define MAIN_SQL_DRIVERS_NAME "drivers" - // class class MOP : public Methoded { @@ -110,7 +107,7 @@ static void _process(Request& r, const S origin.file, 1+origin.line, method_name.cstr()); #else - strncpy(place, MAX_STRING, method_name.cstr()); + strncpy(place, method_name.cstr(), MAX_STRING-1); place[MAX_STRING-1]=0; #endif VStateless_class& self_class=*r.self->get_class(); @@ -169,7 +166,7 @@ static void _while(Request& r, const Str static void _use(Request& r, const String& method_name, MethodParams *params) { Value& vfile=params->as_no_junction(0, "file name must not be code"); - r.use_file(r.absolute(vfile.as_string())); + r.use_file(vfile.as_string()); } static void _for(Request& r, const String& method_name, MethodParams *params) { @@ -270,12 +267,13 @@ static void _connect(Request& r, const S rethrow_me.comment()); } +#ifndef DOXYGEN struct Switch_data { Value *searching; Value *found; Value *_default; }; - +#endif static void _switch(Request& r, const String&, MethodParams *params) { void *backup=r.classes_conf.get(*switch_data_name); Switch_data data={&r.process(params->get(0))}; @@ -289,8 +287,14 @@ static void _switch(Request& r, const St r.write_pass_lang(r.process(*code)); } -static void _case(Request& r, const String&, MethodParams *params) { - Switch_data& data=*static_cast(r.classes_conf.get(*switch_data_name)); +static void _case(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + Switch_data *data=static_cast(r.classes_conf.get(*switch_data_name)); + if(!data) + PTHROW(0, 0, + &method_name, + "without switch"); int count=params->size(); Value *code=¶ms->as_junction(--count, "case result must be code"); @@ -298,18 +302,18 @@ static void _case(Request& r, const Stri Value& value=r.process(params->get(i)); if(value.as_string() == *case_default_value) { - data._default=code; + data->_default=code; break; } bool matches; - if(data.searching->is_string()) - matches=data.searching->as_string() == value.as_string(); + if(data->searching->is_string()) + matches=data->searching->as_string() == value.as_string(); else - matches=data.searching->as_double() == value.as_double(); + matches=data->searching->as_double() == value.as_double(); if(matches) { - data.found=code; + data->found=code; break; } }