Add (eval) function, for evaluating strings
Added a few tests for this new function
This commit is contained in:
parent
875228a2b6
commit
963996f3a0
|
@ -230,7 +230,7 @@ struct Environment defaultEnv()
|
|||
{"ap", &append}, {"pre", &prepend},
|
||||
{"at", &at}, {"rest", &rest}, {"rev", &reverse},
|
||||
{"isnum", &isNum}, {"isstr", &isString},
|
||||
{"prn", &print}, {"penv", &printEnvO},
|
||||
{"prn", &print}, {"penv", &printEnvO}, {"eval", &parseEvalO},
|
||||
};
|
||||
|
||||
for(unsigned i = 0; i < sizeof(symFuncs)/sizeof(symFuncs[0]); i++) {
|
||||
|
|
|
@ -219,7 +219,8 @@ static const char *errorText[] = {
|
|||
"ONLY_ONE_ARGUMENT",
|
||||
"NOT_A_LIST",
|
||||
"SCRIPT_NOT_FOUND",
|
||||
"NO_CLONE_SPECIFIED"
|
||||
"NO_CLONE_SPECIFIED",
|
||||
"CAN_ONLY_EVAL_STRINGS"
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -39,7 +39,8 @@ enum errorCode {
|
|||
ONLY_ONE_ARGUMENT,
|
||||
NOT_A_LIST,
|
||||
SCRIPT_NOT_FOUND,
|
||||
NO_CLONE_SPECIFIED
|
||||
NO_CLONE_SPECIFIED,
|
||||
CAN_ONLY_EVAL_STRINGS
|
||||
};
|
||||
|
||||
#define MALLOC_FLAG 64
|
||||
|
|
|
@ -415,6 +415,14 @@ Object printEnvO(Object i1, Object i2, struct Environment *env) {
|
|||
return numberObject(0);
|
||||
}
|
||||
|
||||
Object parseEvalO(Object text, Object ignore, struct Environment *env)
|
||||
{
|
||||
if(text.type != TYPE_STRING) {
|
||||
return errorObject(CAN_ONLY_EVAL_STRINGS);
|
||||
}
|
||||
return parseEval(text.string, env);
|
||||
}
|
||||
|
||||
void copySlice(char * dest, struct Slice *src)
|
||||
{
|
||||
if(!dest || !src)
|
||||
|
|
|
@ -60,5 +60,6 @@ Object isString(Object test, Object ignore, struct Environment *ignore2);
|
|||
|
||||
Object print(Object p, Object ignore, struct Environment *ignore2);
|
||||
Object printEnvO(Object i1, Object i2, struct Environment *env);
|
||||
Object parseEvalO(Object text, Object ignore, struct Environment *env);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -177,6 +177,12 @@ check "BadParens4" ")))hey" "MISMATCHED_PARENS"
|
|||
check "BadParens5" "hey))(" "MISMATCHED_PARENS"
|
||||
endBlock
|
||||
|
||||
title "Eval"
|
||||
check "BasicNumberEval" "(eval \"5\")" "5"
|
||||
check "BasicOpEval" "(eval \"(+ 5 10)\")" "15"
|
||||
check "MapFilter" "(eval \"(fil (< 50) (map sq (1 2 3 4 5 6 7 8 9 10 11 12)))\")" "( 64 81 100 121 144 )"
|
||||
endBlock
|
||||
|
||||
# title "Environment"
|
||||
# check "EnvStressTestEarly" "(def a 1)(def b 20)(def c 'yee')(def d 'yeehunnid')(def e 3) (a)" "1"
|
||||
# check "EnvStressTestLate" "(def a 1)(def b 2)(def c 3)(def d 4)(def e 5)(def f 6)(def n 40) (n)" "40"
|
||||
|
|
Loading…
Reference in New Issue