minor refactoring and typos

This commit is contained in:
CPunch 2023-05-25 19:40:15 -05:00
parent 2836de090b
commit 3efee51224
6 changed files with 8 additions and 12 deletions

View File

@ -705,7 +705,7 @@ void printObject(CObj *o)
switch (o->type) { switch (o->type) {
case COBJ_STRING: { case COBJ_STRING: {
CObjString *objStr = (CObjString *)o; CObjString *objStr = (CObjString *)o;
printf("%.*s", objStr->length, objStr->str); printf("<string> \"%.*s\"", objStr->length, objStr->str);
break; break;
} }
case COBJ_OBJECT: { case COBJ_OBJECT: {

View File

@ -41,7 +41,7 @@ struct CObj
struct CObjString struct CObjString
{ {
CommonHeader; // "is a" CObj CommonHeader; // "is a" CObj
char *str; // NULL termincated string char *str; // NULL terminated string
uint32_t hash; // for hashtable lookup uint32_t hash; // for hashtable lookup
int length; int length;
bool isIString; bool isIString;
@ -138,6 +138,7 @@ struct CObjUpval
#define cosmoV_readClosure(x) ((CObjClosure *)cosmoV_readRef(x)) #define cosmoV_readClosure(x) ((CObjClosure *)cosmoV_readRef(x))
#define cosmoO_readCString(x) ((CObjString *)x)->str #define cosmoO_readCString(x) ((CObjString *)x)->str
#define cosmoO_readType(x) ((CObj *)x)->type
static inline bool isObjType(CValue val, CObjType type) static inline bool isObjType(CValue val, CObjType type)
{ {

View File

@ -59,10 +59,10 @@ typedef struct CCompilerState
typedef struct typedef struct
{ {
CState *state;
CLexState *lex; CLexState *lex;
CCompilerState *compiler; CCompilerState *compiler;
CObjString *module; // name of the module CObjString *module; // name of the module
CState *state;
CToken current; CToken current;
CToken previous; // token right after the current token CToken previous; // token right after the current token
bool hadError; bool hadError;

View File

@ -59,9 +59,9 @@ struct CState
CValue *top; // top of the stack CValue *top; // top of the stack
CObjObject *protoObjects[COBJ_MAX]; // proto object for each COBJ type [NULL = no default proto] CObjObject *protoObjects[COBJ_MAX]; // proto object for each COBJ type [NULL = no default proto]
CObjString *iStrings[ISTRING_MAX]; // strings used internally by the VM, eg. __init, __index CObjString *iStrings[ISTRING_MAX]; // strings used internally by the VM, eg. __init, __index
CCallFrame callFrame[FRAME_MAX]; // call frames CCallFrame callFrame[FRAME_MAX]; // call frames
CValue stack[STACK_MAX]; // stack CValue stack[STACK_MAX]; // stack
}; };
COSMO_API CState *cosmoV_newState(); COSMO_API CState *cosmoV_newState();

View File

@ -123,7 +123,6 @@ void printValue(CValue val);
COSMO_API bool cosmoV_equal(CState *state, CValue valA, CValue valB); COSMO_API bool cosmoV_equal(CState *state, CValue valA, CValue valB);
COSMO_API CObjString *cosmoV_toString(CState *state, CValue val); COSMO_API CObjString *cosmoV_toString(CState *state, CValue val);
COSMO_API cosmo_Number cosmoV_toNumber(CState *state, CValue val); COSMO_API cosmo_Number cosmoV_toNumber(CState *state, CValue val);
COSMO_API const char * COSMO_API const char *cosmoV_typeStr(CValue val);
cosmoV_typeStr(CValue val); // return constant char array for corresponding type
#endif #endif

View File

@ -229,11 +229,7 @@ static bool callCFunction(CState *state, CosmoCFunction cfunc, int args, int nre
{ {
StkPtr savedBase = cosmoV_getTop(state, args); StkPtr savedBase = cosmoV_getTop(state, args);
// we don't want a GC event during c api because we don't actually trust the user to know how to
// evade the GC
cosmoM_freezeGC(state);
int nres = cfunc(state, args, savedBase + 1); int nres = cfunc(state, args, savedBase + 1);
cosmoM_unfreezeGC(state);
// caller function wasn't expecting this many return values, cap it // caller function wasn't expecting this many return values, cap it
if (nres > nresults) if (nres > nresults)