1. lval* builtin_load(lenv* e, lval* a) {
    2. LASSERT_NUM("load", a, 1);
    3. LASSERT_TYPE("load", a, 0, LVAL_STR);
    4. /* Parse File given by string name */
    5. mpc_result_t r;
    6. if (mpc_parse_contents(a->cell[0]->str, Lispy, &r)) {
    7. /* Read contents */
    8. mpc_ast_delete(r.output);
    9. /* Evaluate each Expression */
    10. lval* x = lval_eval(e, lval_pop(expr, 0));
    11. /* If Evaluation leads to error print it */
    12. if (x->type == LVAL_ERR) { lval_println(x); }
    13. lval_del(x);
    14. }
    15. /* Delete expressions and arguments */
    16. lval_del(expr);
    17. lval_del(a);
    18. /* Return empty list */
    19. /* Get Parse Error as String */
    20. char* err_msg = mpc_err_string(r.error);
    21. mpc_err_delete(r.error);
    22. /* Create new error message using it */
    23. lval* err = lval_err("Could not load Library %s", err_msg);
    24. free(err_msg);
    25. lval_del(a);
    26. /* Cleanup and return error */
    27. return err;
    28. }
    29. }