mirror of
https://github.com/CPunch/Cosmo.git
synced 2024-11-22 15:30:06 +00:00
Added error, string.len, and cosmoV_readCString
Commit authored by https://github.com/NeoInversion
This commit is contained in:
commit
43a278e12d
@ -110,6 +110,22 @@ int cosmoB_loadstring(CState *state, int nargs, CValue *args) {
|
|||||||
return 2; // <boolean>, <closure> or <error>
|
return 2; // <boolean>, <closure> or <error>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cosmoB_error(CState *state, int nargs, CValue *args) {
|
||||||
|
if (nargs < 1) {
|
||||||
|
cosmoV_error(state, "error() expected 1 argument, got %d!", nargs);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_STRING(args[0])) {
|
||||||
|
cosmoV_typeError(state, "error()", "<string>", "%s", cosmoV_typeStr(args[0]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cosmoV_error(state, "%s", cosmoV_readCString(args[0]));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void cosmoB_loadLibrary(CState *state) {
|
void cosmoB_loadLibrary(CState *state) {
|
||||||
const char *identifiers[] = {
|
const char *identifiers[] = {
|
||||||
"print",
|
"print",
|
||||||
@ -118,7 +134,8 @@ void cosmoB_loadLibrary(CState *state) {
|
|||||||
"pcall",
|
"pcall",
|
||||||
"tonumber",
|
"tonumber",
|
||||||
"tostring",
|
"tostring",
|
||||||
"loadstring"
|
"loadstring",
|
||||||
|
"error"
|
||||||
};
|
};
|
||||||
|
|
||||||
CosmoCFunction baseLib[] = {
|
CosmoCFunction baseLib[] = {
|
||||||
@ -128,7 +145,8 @@ void cosmoB_loadLibrary(CState *state) {
|
|||||||
cosmoB_pcall,
|
cosmoB_pcall,
|
||||||
cosmoB_tonumber,
|
cosmoB_tonumber,
|
||||||
cosmoB_tostring,
|
cosmoB_tostring,
|
||||||
cosmoB_loadstring
|
cosmoB_loadstring,
|
||||||
|
cosmoB_error
|
||||||
};
|
};
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
@ -492,13 +510,30 @@ int cosmoB_sChar(CState *state, int nargs, CValue *args) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cosmoB_sLen(CState *state, int nargs, CValue *args) {
|
||||||
|
if (nargs < 1) {
|
||||||
|
cosmoV_error(state, "string.len() expected 1 argument, got %d", nargs);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_STRING(args[0])) {
|
||||||
|
cosmoV_typeError(state, "string.len", "<string>", "%s", cosmoV_typeStr(args[0]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cosmoV_pushNumber(state, strlen(cosmoV_readCString(args[0])));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void cosmoB_loadStrLib(CState *state) {
|
void cosmoB_loadStrLib(CState *state) {
|
||||||
const char *identifiers[] = {
|
const char *identifiers[] = {
|
||||||
"sub",
|
"sub",
|
||||||
"find",
|
"find",
|
||||||
"split",
|
"split",
|
||||||
"byte",
|
"byte",
|
||||||
"char"
|
"char",
|
||||||
|
"len"
|
||||||
};
|
};
|
||||||
|
|
||||||
CosmoCFunction strLib[] = {
|
CosmoCFunction strLib[] = {
|
||||||
@ -506,7 +541,8 @@ void cosmoB_loadStrLib(CState *state) {
|
|||||||
cosmoB_sFind,
|
cosmoB_sFind,
|
||||||
cosmoB_sSplit,
|
cosmoB_sSplit,
|
||||||
cosmoB_sByte,
|
cosmoB_sByte,
|
||||||
cosmoB_sChar
|
cosmoB_sChar,
|
||||||
|
cosmoB_sLen
|
||||||
};
|
};
|
||||||
|
|
||||||
// make string library object
|
// make string library object
|
||||||
|
@ -120,6 +120,7 @@ typedef struct CObjUpval {
|
|||||||
#define IS_CLOSURE(x) isObjType(x, COBJ_CLOSURE)
|
#define IS_CLOSURE(x) isObjType(x, COBJ_CLOSURE)
|
||||||
|
|
||||||
#define cosmoV_readString(x) ((CObjString*)cosmoV_readRef(x))
|
#define cosmoV_readString(x) ((CObjString*)cosmoV_readRef(x))
|
||||||
|
#define cosmoV_readCString(x) (((CObjString*)cosmoV_readRef(x))->str)
|
||||||
#define cosmoV_readObject(x) ((CObjObject*)cosmoV_readRef(x))
|
#define cosmoV_readObject(x) ((CObjObject*)cosmoV_readRef(x))
|
||||||
#define cosmoV_readTable(x) ((CObjTable*)cosmoV_readRef(x))
|
#define cosmoV_readTable(x) ((CObjTable*)cosmoV_readRef(x))
|
||||||
#define cosmoV_readFunction(x) ((CObjFunction*)cosmoV_readRef(x))
|
#define cosmoV_readFunction(x) ((CObjFunction*)cosmoV_readRef(x))
|
||||||
|
Loading…
Reference in New Issue
Block a user