--- parser3/src/classes/op.C 2004/07/07 16:04:53 1.149 +++ parser3/src/classes/op.C 2005/08/30 08:22:52 1.152.4.3 @@ -1,11 +1,11 @@ /** @file Parser: parser @b operators. - Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_OP_C="$Date: 2004/07/07 16:04:53 $"; +static const char * const IDENT_OP_C="$Date: 2005/08/30 08:22:52 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -83,14 +83,11 @@ public: // methods static void _if(Request& r, MethodParams& params) { - Value& condition_code=params.as_junction(0, "condition must be expression"); - - bool condition=r.process_to_value(condition_code, - false/*don't intercept string*/).as_bool(); + bool condition=params.as_bool(0, "condition must be expression", r); if(condition) - r.write_pass_lang(r.process(params.as_junction(1, "'then' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(1))); else if(params.count()>2) - r.write_pass_lang(r.process(params.as_junction(2, "'else' parameter must be code"))); + r.write_pass_lang(r.process(*params.get(2))); } static void _untaint(Request& r, MethodParams& params) { @@ -382,7 +379,7 @@ static void _case(Request& r, MethodPara for(int i=0; i_default=&code; break; } @@ -466,7 +463,7 @@ static Try_catch_result try_catch(Reques // consts -const int DATA_STRING_SERIALIZED_VERSION=0x0005; +const int DATA_STRING_SERIALIZED_VERSION=0x0006; // helper types @@ -757,6 +754,11 @@ static void _throw_operator(Request&, Me } } +static void _sleep_operator(Request& r, MethodParams& params) { + double seconds=params.as_double(0, "seconds must be double", r); + pa_sleep((int)trunc(seconds), (int)trunc(seconds*1000)); + } + #if defined(WIN32) && defined(_DEBUG) # define PA_BPT static void _bpt(Request&, MethodParams&) { @@ -827,6 +829,7 @@ VClassMAIN::VClassMAIN(): VClass() { // ^throw[type;source;comment] add_native_method("throw", Method::CT_ANY, _throw_operator, 1, 3); + add_native_method("sleep", Method::CT_ANY, _sleep_operator, 1, 1); } // constructor & configurator