--- parser3/src/classes/op.C 2008/05/15 09:34:32 1.176 +++ parser3/src/classes/op.C 2008/05/26 14:23:46 1.178 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_OP_C="$Date: 2008/05/15 09:34:32 $"; +static const char * const IDENT_OP_C="$Date: 2008/05/26 14:23:46 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -343,8 +343,12 @@ static void _eval(Request& r, MethodPara Value& value_result=r.process_to_value(expr, false/*don't intercept string*/).as_expr_result(); if(params.count()>1) { - Value& fmt=params.as_no_junction(1, "fmt must not be code"); - r.write_no_lang(String(format(value_result.as_double(), fmt.as_string().cstrm()))); + const String& fmt=params.as_string(1, "fmt must be string").trim(); + if(fmt.is_empty()){ + r.write_no_lang(value_result); + } else { + r.write_no_lang(String(format(value_result.as_double(), fmt.cstrm()))); + } } else r.write_no_lang(value_result); } @@ -776,7 +780,7 @@ static void _try_operator(Request& r, Me } static void _throw_operator(Request&, MethodParams& params) { - if(params.count()==1) { + if(params.count()==1 && !params[0].is_string()) { if(HashStringValue *hash=params[0].get_hash()) { const char* type=0; if(Value* value=hash->get(exception_type_part_name)) @@ -794,13 +798,12 @@ static void _throw_operator(Request&, Me } else throw Exception(PARSER_RUNTIME, 0, - "one-param version has hash param"); + "one-param version has hash or string param"); } else { const char* type=params.as_string(0, "type must be string").cstr(); - const String& source=params.as_string(1, "source must be string"); - const char* comment=params.count()>2? params.as_string(2, "comment must be string").cstr() - :0; - throw Exception(type, &source, "%s", comment?comment:""); + const String* source=params.count()>1? ¶ms.as_string(1, "source must be string"):0; + const char* comment=params.count()>2? params.as_string(2, "comment must be string").cstr():0; + throw Exception(type, source, "%s", comment?comment:""); } }