From bb2f76674df56baa480924081cb3be5ca1737e1f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 3 Mar 2023 22:05:15 +0800 Subject: [PATCH] 1 --- a8/lisp.cc | 7 +++++-- a8/lisp.h | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/a8/lisp.cc b/a8/lisp.cc index 92e3062..ccdea56 100644 --- a/a8/lisp.cc +++ b/a8/lisp.cc @@ -29,9 +29,10 @@ namespace a8 value = symbol; } - Value::Value(CProc cproc) + Value::Value(const std::string& proc_name, CProc cproc) { type = ValueType::kCProc; + name = proc_name; value = cproc; } @@ -67,6 +68,8 @@ namespace a8 case ValueType::kCProc: { auto obj = a8::MutableXObject::CreateObject(); + obj->SetVal("type", "lambda"); + obj->SetVal("name", name); return *obj; } break; @@ -86,7 +89,7 @@ namespace a8 void Scope::RegisterCProc(const std::string& name, CProc proc) { - vars_[name] = std::make_shared(proc); + vars_[name] = std::make_shared(name, proc); } GlobalScope::GlobalScope() diff --git a/a8/lisp.h b/a8/lisp.h index c7bd48b..37c74c2 100644 --- a/a8/lisp.h +++ b/a8/lisp.h @@ -36,12 +36,13 @@ namespace a8 struct Value { ValueType type; + std::string name; std::any value; Value(Atom atom); Value(List list); Value(Symbol symbol); - Value(CProc cproc); + Value(const std::string& proc_name, CProc cproc); bool IsType(ValueType t) { return t == type; }; a8::XObject ToXObject(); };