mirror of https://github.com/OpenTTD/OpenTTD
Codechange: use std::string_view for sq_getstring
parent
f4f05dea33
commit
278aee2c19
|
@ -174,7 +174,7 @@ typedef SQObject HSQOBJECT;
|
|||
typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);
|
||||
typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);
|
||||
typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
|
||||
typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const std::string &);
|
||||
typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,std::string_view);
|
||||
|
||||
typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
||||
typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
||||
|
@ -250,7 +250,7 @@ SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
|
|||
SQBool sq_instanceof(HSQUIRRELVM v);
|
||||
void sq_tostring(HSQUIRRELVM v,SQInteger idx);
|
||||
void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,std::string_view &str);
|
||||
SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
|
||||
SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
|
||||
SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
|
||||
|
|
|
@ -16,7 +16,6 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
|||
SQInteger i;
|
||||
SQBool b;
|
||||
SQFloat f;
|
||||
const SQChar *s;
|
||||
SQInteger level=1; //1 is to skip this function that is level 0
|
||||
const SQChar *name=nullptr;
|
||||
SQInteger seq=0;
|
||||
|
@ -66,10 +65,12 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
|||
case OT_USERPOINTER:
|
||||
pf(v,fmt::format("[{}] USERPOINTER\n",name));
|
||||
break;
|
||||
case OT_STRING:
|
||||
sq_getstring(v,-1,&s);
|
||||
pf(v,fmt::format("[{}] \"{}\"\n",name,s));
|
||||
case OT_STRING: {
|
||||
std::string_view view;
|
||||
sq_getstring(v,-1,view);
|
||||
pf(v,fmt::format("[{}] \"{}\"\n",name,view));
|
||||
break;
|
||||
}
|
||||
case OT_TABLE:
|
||||
pf(v,fmt::format("[{}] TABLE\n",name));
|
||||
break;
|
||||
|
@ -117,10 +118,10 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
|
|||
{
|
||||
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
||||
if(pf) {
|
||||
const SQChar *sErr = nullptr;
|
||||
std::string_view error;
|
||||
if(sq_gettop(v)>=1) {
|
||||
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
||||
pf(v,fmt::format("\nAN ERROR HAS OCCURRED [{}]\n",sErr));
|
||||
if(SQ_SUCCEEDED(sq_getstring(v,2,error))) {
|
||||
pf(v,fmt::format("\nAN ERROR HAS OCCURRED [{}]\n",error));
|
||||
}
|
||||
else{
|
||||
pf(v,"\nAN ERROR HAS OCCURRED [unknown]\n");
|
||||
|
|
|
@ -553,11 +553,11 @@ SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b)
|
|||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,std::string_view &str)
|
||||
{
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_STRING,o);
|
||||
*c = _stringval(*o);
|
||||
str = _stringval(*o);
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -170,9 +170,9 @@ static SQInteger get_slice_params(HSQUIRRELVM v,SQInteger &sidx,SQInteger &eidx,
|
|||
|
||||
static SQInteger base_print(HSQUIRRELVM v)
|
||||
{
|
||||
const SQChar *str;
|
||||
std::string_view str;
|
||||
sq_tostring(v,2);
|
||||
sq_getstring(v,-1,&str);
|
||||
sq_getstring(v,-1,str);
|
||||
if(_ss(v)->_printfunc) _ss(v)->_printfunc(v,str);
|
||||
return 0;
|
||||
}
|
||||
|
@ -181,12 +181,12 @@ static SQInteger base_print(HSQUIRRELVM v)
|
|||
static SQInteger base_compilestring(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger nargs=sq_gettop(v);
|
||||
const SQChar *src=nullptr,*name="unnamedbuffer";
|
||||
std::string_view src, name="unnamedbuffer";
|
||||
SQInteger size;
|
||||
sq_getstring(v,2,&src);
|
||||
sq_getstring(v,2,src);
|
||||
size=sq_getsize(v,2);
|
||||
if(nargs>2){
|
||||
sq_getstring(v,3,&name);
|
||||
sq_getstring(v,3,name);
|
||||
}
|
||||
if(SQ_SUCCEEDED(sq_compilebuffer(v,src,size,name,SQFalse)))
|
||||
return 1;
|
||||
|
@ -649,13 +649,13 @@ static SQInteger string_slice(HSQUIRRELVM v)
|
|||
static SQInteger string_find(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger top,start_idx=0;
|
||||
const SQChar *str,*substr,*ret;
|
||||
if(((top=sq_gettop(v))>1) && SQ_SUCCEEDED(sq_getstring(v,1,&str)) && SQ_SUCCEEDED(sq_getstring(v,2,&substr))){
|
||||
std::string_view str,substr;
|
||||
if(((top=sq_gettop(v))>1) && SQ_SUCCEEDED(sq_getstring(v,1,str)) && SQ_SUCCEEDED(sq_getstring(v,2,substr))){
|
||||
if(top>2)sq_getinteger(v,3,&start_idx);
|
||||
if((sq_getsize(v,1)>start_idx) && (start_idx>=0)){
|
||||
ret=strstr(&str[start_idx],substr);
|
||||
if(ret){
|
||||
sq_pushinteger(v,(SQInteger)(ret-str));
|
||||
auto ret = str.find(substr, start_idx);
|
||||
if(ret != std::string_view::npos){
|
||||
sq_pushinteger(v,static_cast<SQInteger>(ret));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,10 +45,10 @@ bool ScriptAdminMakeJSON(nlohmann::json &json, HSQUIRRELVM vm, SQInteger index,
|
|||
}
|
||||
|
||||
case OT_STRING: {
|
||||
const SQChar *buf;
|
||||
sq_getstring(vm, index, &buf);
|
||||
std::string_view view;
|
||||
sq_getstring(vm, index, view);
|
||||
|
||||
json = std::string(buf);
|
||||
json = view;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -78,9 +78,9 @@ bool ScriptAdminMakeJSON(nlohmann::json &json, HSQUIRRELVM vm, SQInteger index,
|
|||
sq_pushnull(vm);
|
||||
while (SQ_SUCCEEDED(sq_next(vm, index - 1))) {
|
||||
sq_tostring(vm, -2);
|
||||
const SQChar *buf;
|
||||
sq_getstring(vm, -1, &buf);
|
||||
std::string key = std::string(buf);
|
||||
std::string_view view;
|
||||
sq_getstring(vm, -1, view);
|
||||
std::string key{view};
|
||||
sq_pop(vm, 1);
|
||||
|
||||
nlohmann::json value;
|
||||
|
|
|
@ -60,10 +60,10 @@ SQInteger ScriptText::_SetParam(int parameter, HSQUIRRELVM vm)
|
|||
|
||||
switch (sq_gettype(vm, -1)) {
|
||||
case OT_STRING: {
|
||||
const SQChar *value;
|
||||
sq_getstring(vm, -1, &value);
|
||||
std::string_view view;
|
||||
sq_getstring(vm, -1, view);
|
||||
|
||||
this->param[parameter] = StrMakeValid(value);
|
||||
this->param[parameter] = StrMakeValid(view);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -135,10 +135,10 @@ SQInteger ScriptText::_set(HSQUIRRELVM vm)
|
|||
int32_t k;
|
||||
|
||||
if (sq_gettype(vm, 2) == OT_STRING) {
|
||||
const SQChar *key_string;
|
||||
sq_getstring(vm, 2, &key_string);
|
||||
std::string_view view;
|
||||
sq_getstring(vm, 2, view);
|
||||
|
||||
std::string str = StrMakeValid(key_string);
|
||||
std::string str = StrMakeValid(view);
|
||||
if (!str.starts_with("param_") || str.size() > 8) return SQ_ERROR;
|
||||
|
||||
k = stoi(str.substr(6));
|
||||
|
|
|
@ -105,13 +105,13 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm)
|
|||
/* Read the table, and find all properties we care about */
|
||||
sq_pushnull(vm);
|
||||
while (SQ_SUCCEEDED(sq_next(vm, -2))) {
|
||||
const SQChar *key_string;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, &key_string))) return SQ_ERROR;
|
||||
std::string_view key_string;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, key_string))) return SQ_ERROR;
|
||||
std::string key = StrMakeValid(key_string);
|
||||
|
||||
if (key == "name") {
|
||||
const SQChar *sqvalue;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, &sqvalue))) return SQ_ERROR;
|
||||
std::string_view sqvalue;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, sqvalue))) return SQ_ERROR;
|
||||
|
||||
/* Don't allow '=' and ',' in configure setting names, as we need those
|
||||
* 2 chars to nicely store the settings as a string. */
|
||||
|
@ -120,8 +120,8 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm)
|
|||
std::replace_if(config.name.begin(), config.name.end(), replace_with_underscore, '_');
|
||||
present.Set(ScriptConfigItemKey::Name);
|
||||
} else if (key == "description") {
|
||||
const SQChar *sqdescription;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, &sqdescription))) return SQ_ERROR;
|
||||
std::string_view sqdescription;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, sqdescription))) return SQ_ERROR;
|
||||
config.description = StrMakeValid(sqdescription);
|
||||
present.Set(ScriptConfigItemKey::Description);
|
||||
} else if (key == "min_value") {
|
||||
|
@ -199,9 +199,9 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm)
|
|||
|
||||
SQInteger ScriptInfo::AddLabels(HSQUIRRELVM vm)
|
||||
{
|
||||
const SQChar *setting_name_str;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, &setting_name_str))) return SQ_ERROR;
|
||||
std::string setting_name = StrMakeValid(setting_name_str);
|
||||
std::string_view setting_name_view;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, setting_name_view))) return SQ_ERROR;
|
||||
std::string setting_name = StrMakeValid(setting_name_view);
|
||||
|
||||
ScriptConfigItem *config = nullptr;
|
||||
for (auto &item : this->config_list) {
|
||||
|
@ -217,18 +217,18 @@ SQInteger ScriptInfo::AddLabels(HSQUIRRELVM vm)
|
|||
/* Read the table and find all labels */
|
||||
sq_pushnull(vm);
|
||||
while (SQ_SUCCEEDED(sq_next(vm, -2))) {
|
||||
const SQChar *key_string;
|
||||
const SQChar *label;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, &key_string))) return SQ_ERROR;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, &label))) return SQ_ERROR;
|
||||
std::string_view key_string;
|
||||
std::string_view label;
|
||||
if (SQ_FAILED(sq_getstring(vm, -2, key_string))) return SQ_ERROR;
|
||||
if (SQ_FAILED(sq_getstring(vm, -1, label))) return SQ_ERROR;
|
||||
/* Because squirrel doesn't support identifiers starting with a digit,
|
||||
* we skip the first character. */
|
||||
key_string++;
|
||||
key_string.remove_prefix(1);
|
||||
int sign = 1;
|
||||
if (*key_string == '_') {
|
||||
if (key_string.starts_with('_')) {
|
||||
/* When the second character is '_', it indicates the value is negative. */
|
||||
sign = -1;
|
||||
key_string++;
|
||||
key_string.remove_prefix(1);
|
||||
}
|
||||
auto key = ParseInteger<int>(key_string);
|
||||
if (!key.has_value()) return SQ_ERROR;
|
||||
|
|
|
@ -40,10 +40,10 @@ ScriptStorage::~ScriptStorage() = default;
|
|||
* @param error_msg Is this an error message?
|
||||
* @param message The actual message text.
|
||||
*/
|
||||
static void PrintFunc(bool error_msg, const std::string &message)
|
||||
static void PrintFunc(bool error_msg, std::string_view message)
|
||||
{
|
||||
/* Convert to OpenTTD internal capable string */
|
||||
ScriptController::Print(error_msg, message);
|
||||
ScriptController::Print(error_msg, std::string{message});
|
||||
}
|
||||
|
||||
ScriptInstance::ScriptInstance(std::string_view api_name)
|
||||
|
@ -383,9 +383,9 @@ static const SaveLoad _script_byte[] = {
|
|||
_script_sl_byte = SQSL_STRING;
|
||||
SlObject(nullptr, _script_byte);
|
||||
}
|
||||
const SQChar *buf;
|
||||
sq_getstring(vm, index, &buf);
|
||||
size_t len = strlen(buf) + 1;
|
||||
std::string_view view;
|
||||
sq_getstring(vm, index, view);
|
||||
size_t len = view.size() + 1;
|
||||
if (len >= 255) {
|
||||
ScriptLog::Error("Maximum string length is 254 chars. No data saved.");
|
||||
return false;
|
||||
|
@ -393,7 +393,7 @@ static const SaveLoad _script_byte[] = {
|
|||
if (!test) {
|
||||
_script_sl_byte = (uint8_t)len;
|
||||
SlObject(nullptr, _script_byte);
|
||||
SlCopy(const_cast<char *>(buf), len, SLE_CHAR);
|
||||
SlCopy(const_cast<char *>(view.data()), len, SLE_CHAR);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -678,10 +678,10 @@ bool ScriptInstance::IsPaused()
|
|||
case SQSL_INSTANCE: {
|
||||
SQInteger top = sq_gettop(this->vm);
|
||||
LoadObjects(this->vm, this->data);
|
||||
const SQChar *buf;
|
||||
sq_getstring(this->vm, -1, &buf);
|
||||
std::string_view view;
|
||||
sq_getstring(this->vm, -1, view);
|
||||
Squirrel *engine = static_cast<Squirrel *>(sq_getforeignptr(this->vm));
|
||||
std::string class_name = fmt::format("{}{}", engine->GetAPIName(), buf);
|
||||
std::string class_name = fmt::format("{}{}", engine->GetAPIName(), view);
|
||||
sq_pushroottable(this->vm);
|
||||
sq_pushstring(this->vm, class_name);
|
||||
if (SQ_FAILED(sq_get(this->vm, -2))) throw Script_FatalError(fmt::format("'{}' doesn't exist", class_name));
|
||||
|
|
|
@ -194,7 +194,7 @@ void Squirrel::CompileError(HSQUIRRELVM vm, const SQChar *desc, const SQChar *so
|
|||
}
|
||||
}
|
||||
|
||||
void Squirrel::ErrorPrintFunc(HSQUIRRELVM vm, const std::string &s)
|
||||
void Squirrel::ErrorPrintFunc(HSQUIRRELVM vm, std::string_view s)
|
||||
{
|
||||
/* Check if we have a custom print function */
|
||||
SQPrintFunc *func = ((Squirrel *)sq_getforeignptr(vm))->print_func;
|
||||
|
@ -205,7 +205,7 @@ void Squirrel::ErrorPrintFunc(HSQUIRRELVM vm, const std::string &s)
|
|||
}
|
||||
}
|
||||
|
||||
void Squirrel::RunError(HSQUIRRELVM vm, const SQChar *error)
|
||||
void Squirrel::RunError(HSQUIRRELVM vm, std::string_view error)
|
||||
{
|
||||
/* Set the print function to something that prints to stderr */
|
||||
SQPRINTFUNCTION pf = sq_getprintfunc(vm);
|
||||
|
@ -229,11 +229,11 @@ void Squirrel::RunError(HSQUIRRELVM vm, const SQChar *error)
|
|||
|
||||
SQInteger Squirrel::_RunError(HSQUIRRELVM vm)
|
||||
{
|
||||
const SQChar *sErr = nullptr;
|
||||
std::string_view view;
|
||||
|
||||
if (sq_gettop(vm) >= 1) {
|
||||
if (SQ_SUCCEEDED(sq_getstring(vm, -1, &sErr))) {
|
||||
Squirrel::RunError(vm, sErr);
|
||||
if (SQ_SUCCEEDED(sq_getstring(vm, -1, view))) {
|
||||
Squirrel::RunError(vm, view);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -242,7 +242,7 @@ SQInteger Squirrel::_RunError(HSQUIRRELVM vm)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void Squirrel::PrintFunc(HSQUIRRELVM vm, const std::string &s)
|
||||
void Squirrel::PrintFunc(HSQUIRRELVM vm, std::string_view s)
|
||||
{
|
||||
/* Check if we have a custom print function */
|
||||
SQPrintFunc *func = ((Squirrel *)sq_getforeignptr(vm))->print_func;
|
||||
|
|
|
@ -26,7 +26,7 @@ class Squirrel {
|
|||
friend class ScriptInstance;
|
||||
|
||||
private:
|
||||
typedef void (SQPrintFunc)(bool error_msg, const std::string &message);
|
||||
using SQPrintFunc = void (bool error_msg, std::string_view message);
|
||||
|
||||
HSQUIRRELVM vm; ///< The VirtualMachine instance for squirrel
|
||||
void *global_pointer; ///< Can be set by who ever initializes Squirrel
|
||||
|
@ -60,17 +60,17 @@ protected:
|
|||
/**
|
||||
* The RunError handler.
|
||||
*/
|
||||
static void RunError(HSQUIRRELVM vm, const SQChar *error);
|
||||
static void RunError(HSQUIRRELVM vm, std::string_view error);
|
||||
|
||||
/**
|
||||
* If a user runs 'print' inside a script, this function gets the params.
|
||||
*/
|
||||
static void PrintFunc(HSQUIRRELVM vm, const std::string &s);
|
||||
static void PrintFunc(HSQUIRRELVM vm, std::string_view s);
|
||||
|
||||
/**
|
||||
* If an error has to be print, this function is called.
|
||||
*/
|
||||
static void ErrorPrintFunc(HSQUIRRELVM vm, const std::string &s);
|
||||
static void ErrorPrintFunc(HSQUIRRELVM vm, std::string_view s);
|
||||
|
||||
public:
|
||||
Squirrel(std::string_view api_name);
|
||||
|
|
|
@ -110,9 +110,9 @@ namespace SQConvert {
|
|||
/* Convert what-ever there is as parameter to a string */
|
||||
sq_tostring(vm, index);
|
||||
|
||||
const SQChar *tmp;
|
||||
sq_getstring(vm, -1, &tmp);
|
||||
std::string result = StrMakeValid(tmp);
|
||||
std::string_view view;
|
||||
sq_getstring(vm, -1, view);
|
||||
std::string result = StrMakeValid(view);
|
||||
sq_poptop(vm);
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -41,9 +41,9 @@ SQInteger SquirrelStd::max(HSQUIRRELVM vm)
|
|||
SQInteger SquirrelStd::require(HSQUIRRELVM vm)
|
||||
{
|
||||
SQInteger top = sq_gettop(vm);
|
||||
const SQChar *filename;
|
||||
std::string_view filename;
|
||||
|
||||
sq_getstring(vm, 2, &filename);
|
||||
sq_getstring(vm, 2, filename);
|
||||
|
||||
/* Get the script-name of the current file, so we can work relative from it */
|
||||
SQStackInfos si;
|
||||
|
|
Loading…
Reference in New Issue