Public Member Functions

closure_routine_rep Class Reference

List of all members.

Public Member Functions


Detailed Description

Definition at line 347 of file glue_declare.cpp.


Constructor & Destructor Documentation

closure_routine_rep ( const evaluator &  e,
const vector< nat > &  s,
const generic &  a,
const generic &  b 
) [inline]

Definition at line 353 of file glue_declare.cpp.

                                                          :
    routine_rep (GEN_CLOSURE), ev (e), sig (s), args (a), body (b) {}

Member Function Documentation

generic apply ( const vector< generic > &  v ) const [inline]

Definition at line 356 of file glue_declare.cpp.

References mmx::base_evaluator(), and mmx::convert_to().

                                                 {
    nat i, n= N(args);
    //mmout << "Trace] " << args[0];
    //for (nat i=0; i<N(v); i++) mmout << ", " << v[i];
    //mmout << "\n";
    if (N(v) != n-1) {
      mmerr << "Routine  : " << args[0] << "\n";
      mmerr << "Expected : " << cdr (compound_to_vector (args)) << "\n";
      mmerr << "Arguments: " << v << "\n";
      return wrong_nr_args (gen (args[0], v));
    }
    select_evaluator (base_evaluator (ev));
    for (i=1; i<n; i++) {
      if (sig[i] == 0) current_ev->set (args[i], v[i-1]);
      else {
        //mmout << "Convert " << v[i-1] << " to " << sig[i] << "\n";
        generic r= convert_to (v[i-1], sig[i], args[i]);
        if (is<exception> (r)) {
          restore_evaluator ();
          return trace_push (r, gen (args[0], v));
        }
        current_ev->set (args[i], r);
      }
    }
    generic r= eval (body);
    if (is<exception> (r)) {
      generic msg= *as<exception> (r);
      if (is_func (msg, GEN_RETURN, 1)) r= msg[1];
    }
    if (sig[0] != 0 && !is<exception> (r))
      r= convert_to (r, sig[0], body);
    restore_evaluator ();
    if (is<exception> (r)) return trace_push (r, gen (args[0], v));
    return r;
  }
generic function_body (  ) const [inline]

Definition at line 392 of file glue_declare.cpp.

{ return gen (GEN_MAPSTO, args, body); }
vector<nat> signature (  ) const [inline]

Definition at line 391 of file glue_declare.cpp.

{ return sig; }

The documentation for this class was generated from the following file: