Fixed bug where all func calls require an argument
Certain I/O functions (like `inp` or `repl`) do not need arguments, but previously all functions required at least one argument to called correctly (i.e. `(inp 0)` or `(repl "banana")`). Now, these can be called as intended: `(inp)` or `(repl)`.
This commit is contained in:
parent
811e9e3dd2
commit
a6f3fc96e6
|
@ -15,8 +15,13 @@ Object fetchFromEnvironment(const char *name, struct Environment *env)
|
|||
if(!env)
|
||||
return errorObject(NULL_ENV);
|
||||
|
||||
if(env->size == 0)
|
||||
return errorObject(EMPTY_ENV);
|
||||
if(env->size == 0) {
|
||||
if (env->outer) {
|
||||
return fetchFromEnvironment(name, env->outer);
|
||||
} else {
|
||||
return errorObject(EMPTY_ENV);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < env->size; i++) {
|
||||
if(env->strings[i] == NULL) {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#!/usr/bin/pl
|
||||
(def repl (fn (_) (
|
||||
(def repl (fn () (
|
||||
(prn "pebblisp::> ")
|
||||
(def input (inp 0))
|
||||
(def input (inp))
|
||||
(if (= input "q") () (
|
||||
(prnl (eval input))
|
||||
(repl 0)))
|
||||
(repl)))
|
||||
)))
|
||||
|
||||
(repl 0)
|
||||
(repl)
|
||||
|
|
|
@ -162,6 +162,10 @@ Object listEvalFunc(
|
|||
const int length,
|
||||
struct Environment *env)
|
||||
{
|
||||
if(length == 0) {
|
||||
return function->func(boolObject(0), boolObject(0), env);
|
||||
}
|
||||
|
||||
Object rest[length];
|
||||
evalForms(rest, list->list->forward, env);
|
||||
|
||||
|
@ -244,13 +248,6 @@ Object evalList(const Object *obj, struct Environment *env)
|
|||
return cloneObject(*obj);
|
||||
}
|
||||
|
||||
if(evalLength == 1) {
|
||||
if(listLength(obj->list) == 0) {
|
||||
return cloneObject(*obj);
|
||||
}
|
||||
return startList(eval(obj->list, env));
|
||||
}
|
||||
|
||||
Object *first_form = obj->list;
|
||||
|
||||
{ // Try to eval built-ins
|
||||
|
|
Loading…
Reference in New Issue