summaryrefslogtreecommitdiff
path: root/starts/meaning-vm/level-1/funcs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'starts/meaning-vm/level-1/funcs.cpp')
-rw-r--r--starts/meaning-vm/level-1/funcs.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/starts/meaning-vm/level-1/funcs.cpp b/starts/meaning-vm/level-1/funcs.cpp
index 3d0d88d..07f0eba 100644
--- a/starts/meaning-vm/level-1/funcs.cpp
+++ b/starts/meaning-vm/level-1/funcs.cpp
@@ -21,9 +21,9 @@ static auto & namestruct()
name_t()
: nameref(level0::alloc())
{
- auto namestr = valloc<std::string>("name");
+ level0::ref namestr = alloc((std::string)("name"));
nameref.set(nameref, namestr);
- conceptsByName.emplace(namestr->data, nameref);
+ conceptsByName.emplace(namestr.val<std::string>(), nameref);
}
} namestruct;
return namestruct;
@@ -37,14 +37,14 @@ concept* getnamed(std::string const & name)
return res->second;
} else {
level1::ref con = level0::alloc();
- level0::value<std::string>* namestr = level0::valloc(name);
- ns.conceptsByName.emplace(namestr->data, con);
+ level0::ref namestr = level0::alloc(name);
+ ns.conceptsByName.emplace(namestr.val<std::string>(), con);
con.set(ns.nameref, namestr);
return con.ptr();
}
}
-value<std::string>* getname(concept* r)
+std::string& getname(concept* r)
{
try {
return r->vget<std::string>(namestruct().nameref);
@@ -63,24 +63,31 @@ bool isa(concept* member, concept* group)
return false;
}
-template <typename T>
-value<T>* valloc(T const & val)
+concept* alloc(std::any val)
{
- auto ret = level0::valloc<T>(val);
+
+ ref ret = level0::alloc(val);
std::stringstream ss;
- // << val is making recursion
- ss << typeid(T).name() << "(" << val << ")";
- ret->link(concepts::name, level0::valloc(ss.str()));
+ ss << val.type().name() << "(";
+ if (false);
+#define t(T) \
+ else if (val.type() == typeid(T)) { \
+ ss << ret.val<T>(); \
+ }
+ t(uint8_t) t(int8_t) t(uint16_t) t(int16_t)
+ t(uint32_t) t(int32_t) t(uint64_t) t(int64_t)
+ t(bool) t(float) t(double) t(std::string) t(char const *)
+#undef t
+ else { ss << "?"; }
+ ss << ")";
+ ret.link(concepts::name, level0::alloc(ss.str()));
return ret;
}
concept* hyphenate(concept* a, concept* b)
{
- return getnamed(getname(a)->data + "-" + getname(b)->data);
+ return getnamed(getname(a) + "-" + getname(b));
}
-template value<std::string>* valloc<std::string>(std::string const & val);
-template value<int>* valloc<int>(int const & val);
-
}
}