--- parser3/src/classes/op.C 2001/09/26 10:32:25 1.45 +++ parser3/src/classes/op.C 2001/10/09 08:13:04 1.49 @@ -4,7 +4,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: op.C,v 1.45 2001/09/26 10:32:25 parser Exp $ + $Id: op.C,v 1.49 2001/10/09 08:13:04 parser Exp $ */ #include "classes.h" @@ -39,7 +39,7 @@ private: // methods static void _if(Request& r, const String&, MethodParams *params) { - Value& condition_code=params->get(0); + Value& condition_code=params->as_junction(0, "condition must be expression"); bool condition=r.process(condition_code, 0/*no name*/, @@ -53,7 +53,7 @@ static void _if(Request& r, const String static void _untaint(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); - const String& lang_name=r.process(params->get(0)).as_string(); + const String& lang_name=params->as_string(0, "lang must be string"); String::Untaint_lang lang=static_cast( untaint_lang_name2enum->get_int(lang_name)); if(!lang) @@ -76,8 +76,7 @@ static void _taint(Request& r, const Str if(params->size()==1) lang=String::UL_TAINTED; // mark as simply 'tainted'. useful in table:set else { - const String& lang_name= - r.process(params->get(0)).as_string(); + const String& lang_name=params->as_string(0, "lang must be string"); lang=static_cast( untaint_lang_name2enum->get_int(lang_name)); if(!lang) @@ -119,7 +118,7 @@ static void _process(Request& r, const S // evaluate source to process const String& source= - r.process(params->get(0)).as_string(); + r.process(params->as_no_junction(0, "body must be string")).as_string(); // process source code, append processed methods to 'self' class // maybe-define new @main @@ -171,11 +170,11 @@ static void _use(Request& r, const Strin static void _for(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); - const String& var_name=r.process(params->get(0)).as_string(); - int from=r.process(params->get(1)).as_int(); - int to=r.process(params->get(2)).as_int(); + 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); Value& body_code=params->as_junction(3, "body must be code"); - Value *delim_code=params->size()==3+1+1?¶ms->get(3+1):0; + Value *delim_maybe_code=params->size()==3+1+1?¶ms->get(3+1):0; bool need_delim=false; VInt *vint=new(pool) VInt(pool, 0); @@ -189,10 +188,10 @@ static void _for(Request& r, const Strin r.self/*root*/->put_element(var_name, vint); Value& processed_body=r.process(body_code); - if(delim_code) { // delimiter set? + if(delim_maybe_code) { // delimiter set? const String *string=processed_body.get_string(); if(need_delim && string && string->size()) // need delim & iteration produced string? - r.write_pass_lang(r.process(*delim_code)); + r.write_pass_lang(r.process(*delim_maybe_code)); need_delim=true; } r.write_pass_lang(processed_body); @@ -375,7 +374,6 @@ Methoded *MOP_create(Pool& pool) { return new(pool) MOP(pool); } - void MOP::configure_user(Request& r) { Pool& pool=r.pool();