--- parser3/src/classes/op.C 2016/09/29 18:49:42 1.234 +++ parser3/src/classes/op.C 2016/10/04 13:23:46 1.236 @@ -18,11 +18,7 @@ #include "pa_vclass.h" #include "pa_charset.h" -volatile const char * IDENT_OP_C="$Id: op.C,v 1.234 2016/09/29 18:49:42 moko Exp $"; - -// limits - -#define MAX_LOOPS 20000 +volatile const char * IDENT_OP_C="$Id: op.C,v 1.236 2016/10/04 13:23:46 moko Exp $"; // defines @@ -196,7 +192,7 @@ static void _process(Request& r, MethodP line_no_alias_offset=value->as_int(); } else if(key == "replace") { valid_options++; - allow_class_replace=r.process_to_value(*value).as_bool(); + allow_class_replace=r.process(*value).as_bool(); } } @@ -244,12 +240,10 @@ static void _while(Request& r, MethodPar if(delim_maybe_code){ // delimiter set bool need_delim=false; while(true) { - if(++endless_loop_count>=MAX_LOOPS) // endless loop? - throw Exception(PARSER_RUNTIME, - 0, - "endless loop detected"); + if(++endless_loop_count>=pa_loop_limit) // endless loop? + throw Exception(PARSER_RUNTIME, 0, "endless loop detected"); - if(!r.process_to_value(vcondition, false/*don't intercept string*/).as_bool()) + if(!r.process(vcondition, false/*don't intercept string*/).as_bool()) break; Value& sv_processed=r.process(body_code); @@ -269,12 +263,10 @@ static void _while(Request& r, MethodPar } } else { while(true) { - if(++endless_loop_count>=MAX_LOOPS) // endless loop? - throw Exception(PARSER_RUNTIME, - 0, - "endless loop detected"); + if(++endless_loop_count>=pa_loop_limit) // endless loop? + throw Exception(PARSER_RUNTIME, 0, "endless loop detected"); - if(!r.process_to_value(vcondition, false/*don't intercept string*/).as_bool()) + if(!r.process(vcondition, false/*don't intercept string*/).as_bool()) break; r.process_write(body_code); @@ -301,7 +293,7 @@ static void _use(Request& r, MethodParam if(key == "replace") { valid_options++; - allow_class_replace=r.process_to_value(*value).as_bool(); + allow_class_replace=r.process(*value).as_bool(); } if(valid_options!=options->count()) @@ -338,10 +330,8 @@ static void _for(Request& r, MethodParam Value& body_code=params.as_junction(3, "body must be code"); Value* delim_maybe_code=params.count()>4?¶ms[4]:0; - if(to-from>=MAX_LOOPS) // too long loop? - throw Exception(PARSER_RUNTIME, - 0, - "endless loop detected"); + if(to-from>=pa_loop_limit) // too long loop? + throw Exception(PARSER_RUNTIME, 0, "endless loop detected"); VInt* vint=new VInt(0); @@ -384,7 +374,7 @@ static void _for(Request& r, MethodParam static void _eval(Request& r, MethodParams& params) { Value& expr=params.as_junction(0, "need expression"); // evaluate expresion - Value& value_result=r.process_to_value(expr, + Value& value_result=r.process(expr, false/*don't intercept string*/).as_expr_result(); if(params.count()>1) { const String& fmt=params.as_string(1, "fmt must be string").trim(); @@ -454,7 +444,7 @@ public: }; #endif static void _switch(Request& r, MethodParams& params) { - Switch_data* data=new Switch_data(r, r.process_to_value(params[0])); + Switch_data* data=new Switch_data(r, r.process(params[0])); Temp_hash_value, void*> switch_data_setter(&r.classes_conf, switch_data_name, data); Value& cases_code=params.as_junction(1, "switch cases must be code"); @@ -487,7 +477,7 @@ static void _case(Request& r, MethodPara #endif for(int i=0; i_default=code;