--- parser3/src/classes/hash.C 2002/08/15 10:38:18 1.45 +++ parser3/src/classes/hash.C 2002/09/17 09:30:06 1.48 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_HASH_C="$Date: 2002/08/15 10:38:18 $"; +static const char* IDENT_HASH_C="$Date: 2002/09/17 09:30:06 $"; #include "classes.h" #include "pa_request.h" @@ -69,7 +69,10 @@ public: if(column_index==0) { VHash *row_vhash=new(pool) VHash(pool); row_hash=row_vhash->get_hash(0); - rows_hash.put(*cell, row_vhash); + if(rows_hash.put_dont_replace(*cell, row_vhash)) // put. existed? + throw Exception("parser.runtime", + cell, + "duplicate key"); } else row_hash->put(*columns.get_string(column_index), new(pool) VString(*cell)); column_index++; @@ -272,17 +275,17 @@ static void one_foreach_cycle(const Hash Foreach_info& i=*static_cast(info); i.vkey->set_string(akey); - i.r->root->put_element(*i.key_var_name, i.vkey, false); - i.r->root->put_element(*i.value_var_name, static_cast(avalue), false); + i.r->method_frame->put_element(*i.key_var_name, i.vkey, false); + i.r->method_frame->put_element(*i.value_var_name, static_cast(avalue), false); - StringOrValue processed_body=i.r->process(*i.body_code); - if(i.delim_maybe_code) { // delimiter set? - const String *string=processed_body.get_string(); - if(i.need_delim && string && string->size()) // need delim & iteration produced string? + StringOrValue sv_processed=i.r->process(*i.body_code); + const String *s_processed=sv_processed.get_string(); + if(i.delim_maybe_code && s_processed && s_processed->size()) { // delimiter set and we have body + if(i.need_delim) // need delim & iteration produced string? i.r->write_pass_lang(i.r->process(*i.delim_maybe_code)); i.need_delim=true; } - i.r->write_pass_lang(processed_body); + i.r->write_pass_lang(sv_processed); } static void _foreach(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool();