From 856267ebffee5506047fdb56d1b7b317566adaad Mon Sep 17 00:00:00 2001 From: Teddy Date: Sun, 11 Aug 2013 15:20:27 +0800 Subject: added more comments --- builtin.cpp | 76 ++++++++++++++++--------------------------------------------- 1 file changed, 19 insertions(+), 57 deletions(-) (limited to 'builtin.cpp') diff --git a/builtin.cpp b/builtin.cpp index 1c76053..aa69c06 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -11,20 +11,6 @@ using std::stringstream; extern EmptyList *empty_list; -#define ARGS_EXACTLY_TWO \ - if (args == empty_list || \ - args->cdr == empty_list || \ - TO_PAIR(args->cdr)->cdr != empty_list) \ - throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) - -#define ARGS_EXACTLY_ONE \ - if (args == empty_list || \ - args->cdr != empty_list ) \ - throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) - -#define ARGS_AT_LEAST_ONE \ - if (args == empty_list) \ - throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) SpecialOptIf::SpecialOptIf() : SpecialOptObj("if") {} @@ -107,10 +93,6 @@ Pair *SpecialOptIf::call(Pair *args, Environment * &envt, } } -ReprCons *SpecialOptIf::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptLambda::SpecialOptLambda() : SpecialOptObj("lambda") {} #define CHECK_COM(pc) \ do \ @@ -191,10 +173,6 @@ Pair *SpecialOptLambda::call(Pair *args, Environment * &envt, return ret_addr->next; // Move to the next instruction } -ReprCons *SpecialOptLambda::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptDefine::SpecialOptDefine() : SpecialOptObj("define") {} void SpecialOptDefine::prepare(Pair *pc) { @@ -266,10 +244,6 @@ Pair *SpecialOptDefine::call(Pair *args, Environment * &envt, return ret_addr->next; } -ReprCons *SpecialOptDefine::get_repr_cons() { - return new ReprStr("#"); -} - void SpecialOptSet::prepare(Pair *pc) { if (!pc->cdr->is_pair_obj()) throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS); @@ -306,10 +280,6 @@ Pair *SpecialOptSet::call(Pair *args, Environment * &envt, SpecialOptSet::SpecialOptSet() : SpecialOptObj("set!") {} -ReprCons *SpecialOptSet::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptQuote::SpecialOptQuote() : SpecialOptObj("quote") {} void SpecialOptQuote::prepare(Pair *pc) { @@ -328,10 +298,6 @@ Pair *SpecialOptQuote::call(Pair *args, Environment * &envt, return ret_addr->next; } -ReprCons *SpecialOptQuote::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptEval::SpecialOptEval() : SpecialOptObj("eval") {} void SpecialOptEval::prepare(Pair *pc) { @@ -357,10 +323,6 @@ Pair *SpecialOptEval::call(Pair *args, Environment * &envt, } } -ReprCons *SpecialOptEval::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptAnd::SpecialOptAnd() : SpecialOptObj("and") {} void SpecialOptAnd::prepare(Pair *pc) { @@ -405,10 +367,6 @@ Pair *SpecialOptAnd::call(Pair *args, Environment * &envt, throw NormalError(INT_ERR); } -ReprCons *SpecialOptAnd::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptOr::SpecialOptOr() : SpecialOptObj("or") {} void SpecialOptOr::prepare(Pair *pc) { @@ -453,10 +411,6 @@ Pair *SpecialOptOr::call(Pair *args, Environment * &envt, throw NormalError(INT_ERR); } -ReprCons *SpecialOptOr::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptApply::SpecialOptApply() : SpecialOptObj("apply") {} void SpecialOptApply::prepare(Pair *pc) {} @@ -499,10 +453,6 @@ Pair *SpecialOptApply::call(Pair *args, Environment * &envt, return NULL; // force the invocation } -ReprCons *SpecialOptApply::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptForce::SpecialOptForce() : SpecialOptObj("force") {} void SpecialOptForce::prepare(Pair *pc) { @@ -544,10 +494,6 @@ Pair *SpecialOptForce::call(Pair *args, Environment * &envt, } } -ReprCons *SpecialOptForce::get_repr_cons() { - return new ReprStr("#"); -} - SpecialOptDelay::SpecialOptDelay() : SpecialOptObj("delay") {} void SpecialOptDelay::prepare(Pair *pc) { @@ -565,10 +511,26 @@ Pair *SpecialOptDelay::call(Pair *args, Environment * &envt, return ret_addr->next; // Move to the next instruction } -ReprCons *SpecialOptDelay::get_repr_cons() { - return new ReprStr("#"); -} +/*************************************************************************/ +/* The following lines are the implementation of various simple built-in + * procedures. Some library procdures are implemented here for the sake of + * efficiency. */ + +#define ARGS_EXACTLY_TWO \ + if (args == empty_list || \ + args->cdr == empty_list || \ + TO_PAIR(args->cdr)->cdr != empty_list) \ + throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) + +#define ARGS_EXACTLY_ONE \ + if (args == empty_list || \ + args->cdr != empty_list ) \ + throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) + +#define ARGS_AT_LEAST_ONE \ + if (args == empty_list) \ + throw TokenError(name, RUN_ERR_WRONG_NUM_OF_ARGS) BUILTIN_PROC_DEF(make_pair) { ARGS_EXACTLY_TWO; -- cgit v1.2.3