--- parser3/src/classes/table.C 2001/03/19 16:06:13 1.16 +++ parser3/src/classes/table.C 2001/03/19 22:11:07 1.20 @@ -1,9 +1,11 @@ -/* - Parser +/** @file + Parser: table parser class. + Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexander Petrosyan (http://design.ru/paf) - $Id: table.C,v 1.16 2001/03/19 16:06:13 paf Exp $ + $Id: table.C,v 1.20 2001/03/19 22:11:07 paf Exp $ */ #include "pa_common.h" @@ -26,13 +28,17 @@ static void set_or_load( // data is last parameter Value *vdata=static_cast(params->get(params->size()-1)); // forcing - // [this param type] - // [this param type] - r.fail_if_junction_(true, *vdata, - method_name, "body must not be a junction"); + // ^load{this body type} + // ^set{this body type} + r.fail_if_junction_(false, *vdata, method_name, "body must be junction"); // data or file_name - char *data_or_filename=vdata->as_string().cstr(); + char *data_or_filename; + { + Temp_lang temp_lang(r, + is_load ? String::Untaint_lang::FILE : String::Untaint_lang::TABLE); + data_or_filename=r.process(*vdata).as_string().cstr(); + } // data char *data=is_load?file_read(pool, r.absolute(data_or_filename)):data_or_filename; @@ -71,7 +77,7 @@ static void set_or_load( }; // replace any previous table value - r.self->as_vtable().set_table(table); + static_cast(r.self)->set_table(table); } @@ -85,19 +91,19 @@ static void _load(Request& r, const Stri static void _count(Request& r, const String&, Array *) { Pool& pool=r.pool(); - Value& value=*new(pool) VInt(pool, r.self->as_vtable().table().size()); + Value& value=*new(pool) VInt(pool, static_cast(r.self)->table().size()); r.write_no_lang(value); } static void _line(Request& r, const String&, Array *) { Pool& pool=r.pool(); - Value& value=*new(pool) VInt(pool, 1+r.self->as_vtable().table().get_current()); + Value& value=*new(pool) VInt(pool, 1+static_cast(r.self)->table().get_current()); r.write_no_lang(value); } static void _offset(Request& r, const String&, Array *params) { Pool& pool=r.pool(); - Table& table=r.self->as_vtable().table(); + Table& table=static_cast(r.self)->table(); if(params->size()) { if(int size=table.size()) { int offset= @@ -118,7 +124,7 @@ static void _menu(Request& r, const Stri Value *delim_code=params->size()==2?static_cast(params->get(1)):0; - Table& table=r.self->as_vtable().table(); + Table& table=static_cast(r.self)->table(); bool need_delim=false; for(int i=0; ias_vtable().table(); + Table& table=static_cast(r.self)->table(); if(table.size()==0) { Value& value=r.process(*static_cast(params->get(0))); r.write_pass_lang(value);