closure_routine_rep Class Reference

Inheritance diagram for closure_routine_rep:
routine_rep rep_struct

List of all members.

Public Member Functions

Public Attributes


Detailed Description

Definition at line 355 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 361 of file glue_declare.cpp.

00362                                                           :
00363     routine_rep (GEN_CLOSURE), ev (e), sig (s), args (a), body (b) {}
  generic apply (const vector<generic>& v) const {


Member Function Documentation

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

Reimplemented from routine_rep.

Definition at line 364 of file glue_declare.cpp.

References mmx::cdr(), mmx::compound_to_vector(), mmx::current_ev, mmx::eval(), mmx::gen(), mmx::GEN_RETURN, mmx::is_func(), mmx::mmerr, mmx::N(), n, mmx::restore_evaluator(), mmx::select_evaluator(), mmx::trace_push(), and mmx::wrong_nr_args().

00364                                                  {
00365     nat i, n= N(args);
00366     //mmout << "Trace] " << args[0];
00367     //for (nat i=0; i<N(v); i++) mmout << ", " << v[i];
00368     //mmout << "\n";
00369     if (N(v) != n-1) {
00370       mmerr << "Routine  : " << args[0] << "\n";
00371       mmerr << "Expected : " << cdr (compound_to_vector (args)) << "\n";
00372       mmerr << "Arguments: " << v << "\n";
00373       return wrong_nr_args (gen (args[0], v));
00374     }
00375     select_evaluator (base_evaluator (ev));
00376     for (i=1; i<n; i++) {
00377       if (sig[i] == 0) current_ev->set (args[i], v[i-1]);
00378       else {
00379         //mmout << "Convert " << v[i-1] << " to " << sig[i] << "\n";
00380         generic r= convert_to (v[i-1], sig[i], args[i]);
00381         if (is<exception> (r)) {
00382           restore_evaluator ();
00383           return trace_push (r, gen (args[0], v));
00384         }
00385         current_ev->set (args[i], r);
00386       }
00387     }
00388     generic r= eval (body);
00389     if (is<exception> (r)) {
00390       generic msg= *as<exception> (r);
00391       if (is_func (msg, GEN_RETURN, 1)) r= msg[1];
00392     }
00393     if (sig[0] != 0 && !is<exception> (r))
00394       r= convert_to (r, sig[0], body);
00395     restore_evaluator ();
00396     if (is<exception> (r)) return trace_push (r, gen (args[0], v));
00397     return r;
00398   }

generic function_body (  )  const [inline, virtual]

Reimplemented from routine_rep.

Definition at line 400 of file glue_declare.cpp.

References mmx::gen(), and mmx::GEN_MAPSTO.

00400 { return gen (GEN_MAPSTO, args, body); }

vector<nat> signature (  )  const [inline, virtual]

Reimplemented from routine_rep.

Definition at line 399 of file glue_declare.cpp.

00399 { return sig; }


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

Generated on 6 Dec 2012 for mmxlight by  doxygen 1.6.1