--- parser3/src/classes/op.C 2008/07/08 13:37:30 1.181 +++ parser3/src/classes/op.C 2009/04/21 09:27:20 1.184 @@ -1,11 +1,11 @@ /** @file Parser: parser @b operators. - Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_OP_C="$Date: 2008/07/08 13:37:30 $"; +static const char * const IDENT_OP_C="$Date: 2009/04/21 09:27:20 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -106,7 +106,7 @@ static String::Language get_untaint_lang const String& lang_name=params.as_string(index, "lang must be string"); String::Language lang=untaint_lang_name2enum.get(lang_name); if(!lang) - throw Exception(0, + throw Exception(PARSER_RUNTIME, &lang_name, "invalid taint language"); return lang; @@ -446,13 +446,21 @@ static void _case(Request& r, MethodPara return; int count=params.count(); - Value& code=params.as_junction(--count, "case result must be code"); + Value* code=¶ms.as_expression(--count, "case result must be code"); + +#ifdef USE_DESTRUCTORS + Junction *j=code->get_junction(); + if (j){ + code=new VJunction(j->self,j->method,j->method_frame,j->rcontext,j->wcontext,j->code); + if (j->wcontext) j->wcontext->attach_junction((VJunction *)code); + } +#endif for(int i=0; i_default=&code; + data->_default=code; continue; } @@ -463,7 +471,7 @@ static void _case(Request& r, MethodPara matches=data->searching_double == value.as_double(); if(matches){ - data->found=&code; + data->found=code; break; } }