Diff for /parser3/src/classes/Attic/root.C between versions 1.30 and 1.31

version 1.30, 2001/03/12 20:36:52 version 1.31, 2001/03/12 21:18:00
Line 11 Line 11
   
 #include "pa_request.h"  #include "pa_request.h"
 #include "_root.h"  #include "_root.h"
   #include "pa_vint.h"
   
 static void _if(Request& r, const String&, Array *params) {  static void _if(Request& r, const String&, Array *params) {
         bool condition=          bool condition=
Line 130  static void _use(Request& r, const Strin Line 131  static void _use(Request& r, const Strin
         r.use_file(r.absolute(file));          r.use_file(r.absolute(file));
 }  }
   
   static void _for(Request& r, const String& method_name, Array *params) {
           // ^for[i;from-number;to-number-inclusive]{code}[delim]
   
           Pool& pool=r.pool();
           const String& var_name=r.process(*static_cast<Value *>(params->get(0))).as_string();
           int from=(int)r.process(*static_cast<Value *>(params->get(1))).get_double();
           int to=(int)r.process(*static_cast<Value *>(params->get(2))).get_double();
           Value& body_code=*static_cast<Value *>(params->get(3));
           // forcing ^menu{this param type}
           r.fail_if_junction_(false, body_code, 
                   method_name, "body must be junction");
           Value *delim_code=params->size()==3+1+1?static_cast<Value *>(params->get(3+1)):0;
   
           bool need_delim=false;
           int endless_loop_count=0;
           for(VInt *vint=new(pool) VInt(pool, from); vint->get_int()<=to; vint->inc()) {
                   if(++endless_loop_count>=2001) // endless loop?
                           R_THROW(0, 0,
                                   &method_name,
                                   "endless loop detected");
                   r.wcontext->put_element(var_name, vint);
   
                   Value& processed_body=r.process(body_code);
                   if(delim_code) { // delimiter set?
                           const String *string=processed_body.get_string();
                           if(need_delim && string && string->size()) // need delim & iteration produced string?
                                   r.write_pass_lang(r.process(*delim_code));
                           need_delim=true;
                   }
                   r.write_pass_lang(processed_body);
           }
   }
   
   
   
 typedef double (*math_one_double_op_func_ptr)(double);  typedef double (*math_one_double_op_func_ptr)(double);
 static double round(double op) { return floor(op+0.5); }  static double round(double op) { return floor(op+0.5); }
 static double sign(double op) { return op > 0 ? 1 : ( op < 0 ? -1 : 0 ); }  static double sign(double op) { return op > 0 ? 1 : ( op < 0 ? -1 : 0 ); }
Line 149  static void _math_one_double_op( Line 185  static void _math_one_double_op(
         r.wcontext->write(result, String::Untaint_lang::NO /*always object, not string*/);          r.wcontext->write(result, String::Untaint_lang::NO /*always object, not string*/);
 }  }
   
   
 static void _round(Request& r, const String& method_name, Array *params) {  static void _round(Request& r, const String& method_name, Array *params) {
         _math_one_double_op(r, method_name, params,     &round);          _math_one_double_op(r, method_name, params,     &round);
 }  }
Line 190  void initialize_root_class(Pool& pool, V Line 225  void initialize_root_class(Pool& pool, V
         // ^use[file]          // ^use[file]
         vclass.add_native_method("use", _use, 1, 1);          vclass.add_native_method("use", _use, 1, 1);
   
           // ^for[i;from-number;to-number-inclusive]{code}[delim]
           vclass.add_native_method("for", _for, 3+1, 3+1+1);
   
   
         // math functions          // math functions
   
Line 207  void initialize_root_class(Pool& pool, V Line 245  void initialize_root_class(Pool& pool, V
   
         // ^sign(expr)          // ^sign(expr)
         vclass.add_native_method("sign", _sign, 1, 1);          vclass.add_native_method("sign", _sign, 1, 1);
   
 }  }

Removed from v.1.30  
changed lines
  Added in v.1.31


E-mail: