|
|
| version 1.14, 2001/03/13 13:43:28 | version 1.18, 2001/04/03 08:23:06 |
|---|---|
| Line 1 | Line 1 |
| /* | /** @file |
| Parser | Parser: @b int parser class. |
| Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) |
| Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) | Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) |
| $Id$ | $Id$ |
| Line 22 static void _int(Request& r, const Strin | Line 24 static void _int(Request& r, const Strin |
| Pool& pool=r.pool(); | Pool& pool=r.pool(); |
| VInt *vint=static_cast<VInt *>(r.self); | VInt *vint=static_cast<VInt *>(r.self); |
| Value& value=*new(pool) VInt(pool, vint->get_int()); | Value& value=*new(pool) VInt(pool, vint->get_int()); |
| r.wcontext->write(value, String::Untaint_lang::NO /*always object, not string*/); | r.write_no_lang(value); |
| } | } |
| static void _double(Request& r, const String&, Array *) { | static void _double(Request& r, const String&, Array *) { |
| Pool& pool=r.pool(); | Pool& pool=r.pool(); |
| VInt *vint=static_cast<VInt *>(r.self); | VInt *vint=static_cast<VInt *>(r.self); |
| Value& value=*new(pool) VDouble(pool, vint->get_double()); | Value& value=*new(pool) VDouble(pool, vint->as_double()); |
| r.wcontext->write(value, String::Untaint_lang::NO /*always object, not string*/); | r.write_no_lang(value); |
| } | } |
| typedef void (*vint_op_func_ptr)(VInt& vint, double param); | typedef void (*vint_op_func_ptr)(VInt& vint, double param); |
| Line 47 static void vint_op(Request& r, Array *p | Line 49 static void vint_op(Request& r, Array *p |
| r.process( | r.process( |
| *static_cast<Value *>(params->get(0)), | *static_cast<Value *>(params->get(0)), |
| 0/*no name*/, | 0/*no name*/, |
| false/*don't intercept string*/).get_double():1; | false/*don't intercept string*/).as_double():1; |
| (*func)(*vint, param); | (*func)(*vint, param); |
| } | } |
| Line 57 static void _mul(Request& r, const Strin | Line 59 static void _mul(Request& r, const Strin |
| static void _div(Request& r, const String&, Array *params) { vint_op(r, params, &__div); } | static void _div(Request& r, const String&, Array *params) { vint_op(r, params, &__div); } |
| static void _mod(Request& r, const String&, Array *params) { vint_op(r, params, &__mod); } | static void _mod(Request& r, const String&, Array *params) { vint_op(r, params, &__mod); } |
| // initialize | |
| void initialize_int_class(Pool& pool, VStateless_class& vclass) { | void initialize_int_class(Pool& pool, VStateless_class& vclass) { |
| // ^int.int[] | // ^int.int[] |
| vclass.add_native_method("int", _int, 0, 0); | vclass.add_native_method("int", Method::CT_DYNAMIC, _int, 0, 0); |
| // ^int.double[] | // ^int.double[] |
| vclass.add_native_method("double", _double, 0, 0); | vclass.add_native_method("double", Method::CT_DYNAMIC, _double, 0, 0); |
| // ^int.inc[] | // ^int.inc[] |
| // ^int.inc[offset] | // ^int.inc[offset] |
| vclass.add_native_method("inc", _inc, 0, 1); | vclass.add_native_method("inc", Method::CT_DYNAMIC, _inc, 0, 1); |
| // ^int.dec[] | // ^int.dec[] |
| // ^int.dec[offset] | // ^int.dec[offset] |
| vclass.add_native_method("dec", _dec, 0, 1); | vclass.add_native_method("dec", Method::CT_DYNAMIC, _dec, 0, 1); |
| // ^int.mul[k] | // ^int.mul[k] |
| vclass.add_native_method("mul", _mul, 1, 1); | vclass.add_native_method("mul", Method::CT_DYNAMIC, _mul, 1, 1); |
| // ^int.div[d] | // ^int.div[d] |
| vclass.add_native_method("div", _div, 1, 1); | vclass.add_native_method("div", Method::CT_DYNAMIC, _div, 1, 1); |
| // ^int.mod[offset] | // ^int.mod[offset] |
| vclass.add_native_method("mod", _mod, 1, 1); | vclass.add_native_method("mod", Method::CT_DYNAMIC, _mod, 1, 1); |
| // ^int.format[] | // ^int.format{format} |
| vclass.add_native_method("format", _string_format, 1, 1); | vclass.add_native_method("format", Method::CT_DYNAMIC, _string_format, 1, 1); |
| } | } |