diff --git a/src/stdlib.cpp b/src/stdlib.cpp index 0eceffc..4b9a95e 100644 --- a/src/stdlib.cpp +++ b/src/stdlib.cpp @@ -20,24 +20,32 @@ Result stdlib_unknown(const StackFrame& stack) { Result stdlib_print(const StackFrame& stack) { auto params = TRY(stack.get(0)); auto size = TRY(params.size()); + + String str = TRY(String::create("")); + for (uint64_t i = 0; i < size; i++) { Value param = TRY(params.get(i)); if (i != 0) { - std::cout << " "; + str = TRY(str.concat(" ")); } if (param.is()) { - TRY(print_string(*param.to())); + str = TRY(str.concat(*param.to())); } else { auto s = TRY(write_one(param)); - TRY(print_string(s)); + str = TRY(str.concat(s)); } } + TRY(print_string(str)); + auto nil = Value(TRY(Nil::create())); auto res = TRY(stack.set(0, nil)); - return res.ret(0); + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_println(const StackFrame& stack) { @@ -64,7 +72,10 @@ Result stdlib_assert(const StackFrame& stack) { auto nil = Value(TRY(Nil::create())); auto res = TRY(stack.set(0, nil)); - return res.ret(0); + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_dict(const StackFrame& stack) { @@ -73,7 +84,11 @@ Result stdlib_dict(const StackFrame& stack) { Value d = TRY(Dict::create(*params.to())); auto res = TRY(stack.set(0, d)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_list(const StackFrame& stack) { @@ -82,14 +97,22 @@ Result stdlib_list(const StackFrame& stack) { Value d = TRY(Pair::create(*params.to())); auto res = TRY(stack.set(0, d)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_array(const StackFrame& stack) { auto params = TRY(stack.get(0)); auto res = TRY(stack.set(0, params)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_get(const StackFrame& stack) { @@ -103,7 +126,11 @@ Result stdlib_get(const StackFrame& stack) { auto val = TRY(collection.get(key)); auto res = TRY(stack.set(0, val)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_srcloc(const StackFrame& stack) { @@ -143,7 +170,11 @@ Result stdlib_srcloc(const StackFrame& stack) { auto val = Value(TRY(SrcLoc::create(sr))); auto res = TRY(stack.set(0, val)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_size(const StackFrame& stack) { @@ -158,7 +189,11 @@ Result stdlib_size(const StackFrame& stack) { auto val = Value(TRY(Int64::create((int64_t)psize))); auto res = TRY(stack.set(0, val)); - return res.ret(0); + + res = TRY(res.ret(0)); + res = TRY(res.incpc()); + + return res; } Result stdlib_map(const StackFrame& stack_param) {