--- parser3/src/classes/reflection.C 2015/10/25 22:24:05 1.35 +++ parser3/src/classes/reflection.C 2015/10/26 01:21:54 1.38 @@ -1,7 +1,7 @@ /** @file Parser: @b reflection parser class. - Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ @@ -9,7 +9,7 @@ #include "pa_request.h" #include "pa_vbool.h" -volatile const char * IDENT_REFLECTION_C="$Id: reflection.C,v 1.35 2015/10/25 22:24:05 moko Exp $"; +volatile const char * IDENT_REFLECTION_C="$Id: reflection.C,v 1.38 2015/10/26 01:21:54 moko Exp $"; static const String class_type_methoded("methoded"); @@ -336,8 +336,8 @@ static void _dynamical(Request& r, Metho static void _is(Request& r, MethodParams& params) { const String& type=params.as_string(0, "class name must be string"); const String& name=params.as_string(params.count()-1, "element name must be string"); - Value &context=params.count()==3 ? params.as_no_junction(1, "context must not be code") : *(r.get_method_frame()->caller()); - Value *value=context.get_element(name); + Value *context=params.count()==3 ? &(params.as_no_junction(1, "context must not be code")) : r.get_method_frame()->caller(); + Value *value=context ? context->get_element(name) : 0; if(value) { if(type == "code" || type == "method") { @@ -347,7 +347,7 @@ static void _is(Request& r, MethodParams r.write_no_lang(VBool::get( value->is(type.cstr()) )); } } else - r.write_no_lang(VBool::get(false)); + r.write_no_lang(VBool::get(type == "void")); } static void _copy(Request& r, MethodParams& params) {