List & Eval

list函数比较简单。它只需将输入的一个或多个S-表达式转化为一个Q-表达式。

eval函数更像是转化。它将一个Q-表达式转化为S-表达式,然后使用lval_eval运行。

  1. lval* builtin_list(lval* a) {
  2. a->type = LVAL_QEXPR;
  3. return a;
  4. }
  5. lval* builtin_eval(lval* a) {
  6. LASSERT(a, a->count == 1,
  7. "Function 'eval' passed too many arguments!");
  8. LASSERT(a, a->cell[0]->type == LVAL_QEXPR,
  9. "Function 'eval' passed incorrect type!");
  10. lval* x = lval_take(a, 0);
  11. x->type = LVAL_SEXPR;
  12. return lval_eval(x);
  13. }