|
|
| version 1.42, 2001/09/18 16:05:42 | version 1.48, 2001/10/09 07:06:00 |
|---|---|
| Line 2 | Line 2 |
| Parser: parser @b operators. | Parser: parser @b operators. |
| Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) |
| Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) | Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) |
| $Id$ | |
| */ | */ |
| static const char *RCSId="$Id$"; | |
| #include "classes.h" | #include "classes.h" |
| #include "pa_config_includes.h" | #include "pa_config_includes.h" |
| Line 39 private: | Line 39 private: |
| // methods | // methods |
| static void _if(Request& r, const String&, MethodParams *params) { | 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, | bool condition=r.process(condition_code, |
| 0/*no name*/, | 0/*no name*/, |
| Line 53 static void _if(Request& r, const String | Line 53 static void _if(Request& r, const String |
| static void _untaint(Request& r, const String& method_name, MethodParams *params) { | static void _untaint(Request& r, const String& method_name, MethodParams *params) { |
| Pool& pool=r.pool(); | 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<String::Untaint_lang>( | String::Untaint_lang lang=static_cast<String::Untaint_lang>( |
| untaint_lang_name2enum->get_int(lang_name)); | untaint_lang_name2enum->get_int(lang_name)); |
| if(!lang) | if(!lang) |
| Line 76 static void _taint(Request& r, const Str | Line 76 static void _taint(Request& r, const Str |
| if(params->size()==1) | if(params->size()==1) |
| lang=String::UL_TAINTED; // mark as simply 'tainted'. useful in table:set | lang=String::UL_TAINTED; // mark as simply 'tainted'. useful in table:set |
| else { | else { |
| const String& lang_name= | const String& lang_name=params->as_string(0, "lang must be string"); |
| r.process(params->get(0)).as_string(); | |
| lang=static_cast<String::Untaint_lang>( | lang=static_cast<String::Untaint_lang>( |
| untaint_lang_name2enum->get_int(lang_name)); | untaint_lang_name2enum->get_int(lang_name)); |
| if(!lang) | if(!lang) |
| Line 119 static void _process(Request& r, const S | Line 118 static void _process(Request& r, const S |
| // evaluate source to process | // evaluate source to process |
| const String& source= | 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 | // process source code, append processed methods to 'self' class |
| // maybe-define new @main | // maybe-define new @main |
| Line 171 static void _use(Request& r, const Strin | Line 170 static void _use(Request& r, const Strin |
| static void _for(Request& r, const String& method_name, MethodParams *params) { | static void _for(Request& r, const String& method_name, MethodParams *params) { |
| Pool& pool=r.pool(); | Pool& pool=r.pool(); |
| const String& var_name=r.process(params->get(0)).as_string(); | const String& var_name=params->as_string(0, "var name must be string"); |
| int from=r.process(params->get(1)).as_int(); | int from=params->as_int(1, "from must be int", r); |
| int to=r.process(params->get(2)).as_int(); | int to=params->as_int(2, "to must be int", r); |
| Value& body_code=params->as_junction(3, "body must be code"); | 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_code=params->size()==3+1+1?¶ms->as_junction(3+1, "delim must be code"):0; |
| bool need_delim=false; | bool need_delim=false; |
| VInt *vint=new(pool) VInt(pool, 0); | VInt *vint=new(pool) VInt(pool, 0); |
| Line 375 Methoded *MOP_create(Pool& pool) { | Line 374 Methoded *MOP_create(Pool& pool) { |
| return new(pool) MOP(pool); | return new(pool) MOP(pool); |
| } | } |
| void MOP::configure_user(Request& r) { | void MOP::configure_user(Request& r) { |
| Pool& pool=r.pool(); | Pool& pool=r.pool(); |