Reimplemented 'print', channeled it through PrintBuffer
This commit is contained in:
@@ -5,20 +5,31 @@
|
||||
#include <iostream>
|
||||
|
||||
|
||||
LuaDefine(string_isidentifier, "c") {
|
||||
LuaArg str;
|
||||
LuaRet result;
|
||||
LuaStack LS(L, str, result);
|
||||
if (LS.isstring(str)) {
|
||||
std::string s = LS.ckstring(str);
|
||||
LS.set(result, util::is_identifier(s));
|
||||
} else {
|
||||
LS.set(result, false);
|
||||
void atomic_print(LuaStack &LS, LuaSlot val, std::ostream *os) {
|
||||
switch (LS.type(val)) {
|
||||
case LUA_TNIL:
|
||||
(*os) << "nil";
|
||||
return;
|
||||
case LUA_TSTRING:
|
||||
// TODO: this could be more efficient.
|
||||
(*os) << LS.ckstring(val);
|
||||
return;
|
||||
case LUA_TNUMBER:
|
||||
(*os) << LS.ckinteger(val);
|
||||
return;
|
||||
case LUA_TBOOLEAN:
|
||||
(*os) << (LS.ckboolean(val) ? "true" : "false");
|
||||
return;
|
||||
case LUA_TTABLE:
|
||||
(*os) << "table";
|
||||
return;
|
||||
default:
|
||||
(*os) << "unknown";
|
||||
return;
|
||||
}
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
bool string_quote(LuaStack &LS, LuaSlot val, std::ostream *os) {
|
||||
static bool string_quote(LuaStack &LS, LuaSlot val, std::ostream *os) {
|
||||
switch (LS.type(val)) {
|
||||
case LUA_TNIL:
|
||||
(*os) << "nil";
|
||||
@@ -37,15 +48,6 @@ bool string_quote(LuaStack &LS, LuaSlot val, std::ostream *os) {
|
||||
}
|
||||
}
|
||||
|
||||
LuaDefine(string_quote, "c") {
|
||||
LuaArg val;
|
||||
LuaRet result;
|
||||
LuaStack LS(L, val, result);
|
||||
std::ostringstream oss;
|
||||
string_quote(LS, val, &oss);
|
||||
LS.set(result, oss.str());
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
// Find tables recursively.
|
||||
//
|
||||
@@ -242,6 +244,28 @@ void pprint(LuaStack &LS0, LuaSlot root, bool indent, std::ostream *os) {
|
||||
LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(string_isidentifier, "c") {
|
||||
LuaArg str;
|
||||
LuaRet result;
|
||||
LuaStack LS(L, str, result);
|
||||
if (LS.isstring(str)) {
|
||||
std::string s = LS.ckstring(str);
|
||||
LS.set(result, util::is_identifier(s));
|
||||
} else {
|
||||
LS.set(result, false);
|
||||
}
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(string_print, "c") {
|
||||
LuaArg val;
|
||||
LuaRet result;
|
||||
LuaStack LS(L, val, result);
|
||||
std::ostringstream oss;
|
||||
atomic_print(LS, val, &oss);
|
||||
LS.set(result, oss.str());
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(string_pprint, "c") {
|
||||
LuaArg root, indent;
|
||||
@@ -253,3 +277,13 @@ LuaDefine(string_pprint, "c") {
|
||||
LS.set(result, oss.str());
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(string_tostring, "f") {
|
||||
LuaArg val;
|
||||
LuaRet result;
|
||||
LuaStack LS(L, val, result);
|
||||
std::ostringstream oss;
|
||||
atomic_print(LS, val, &oss);
|
||||
LS.set(result, oss.str());
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user