Compare commits

..

102 Commits

Author SHA1 Message Date
cpunch 7f5e3ae8dc lol oops 2023-11-03 22:59:31 -05:00
cpunch 7a54230cb9 hated the styling of this
consistency is nice to have
2023-11-03 22:36:59 -05:00
CPunch 1a7d6caec6 fix __proto object getter 2023-09-11 22:17:35 -05:00
CPunch 1678194941 minor refactoring 2023-09-06 20:23:18 -05:00
CPunch 3ea653b26d added file:write() & an optional `mode` param to os.open() 2023-09-06 17:29:38 -05:00
CPunch d3de4c0e66 removed more debug prints 2023-09-05 14:45:03 -05:00
CPunch d66d4807b3 removed debug prints, oops 2023-09-05 14:43:50 -05:00
CPunch 1fcb35168f fix makefile 2023-09-05 14:42:29 -05:00
CPunch 611162b3be documented the new os.open and file objects 2023-09-05 14:41:59 -05:00
CPunch b3587f48a2 added os.open(); new file object
eg.
```lua
local err, file = os.open("LICENSE.md")
if err then
    // do error handling stuff
end

// passing "a" to read() will read the whole file
print(file:read("a"))
```
2023-09-05 14:38:24 -05:00
CPunch bf36412699 removed 'roots', replaced with a registry table
- removed cosmoM_addRoot
- removed cosmoM_removeRoot
- renamed cosmoV_register to cosmoV_addGlobals
- added cosmoV_addRegistry
- added cosmoV_getRegistry
- added cosmoV_setProto
- added cosmoV_isValueUserType
2023-09-05 14:35:29 -05:00
CPunch 6701a63a63 capture freezeGC in CPanic 2023-09-05 02:23:31 -05:00
CPunch ffff01e9d1 build a release build for linux as well 2023-09-04 20:15:15 -05:00
CPunch 89be01aaf6 even more error handling refactoring
removing all of these useless checks has actually made cosmoV_execute just a
lil bit faster :)
2023-09-04 20:14:53 -05:00
CPunch cc9eb4a5ec lol oops 2023-09-01 17:16:10 -05:00
CPunch 789c5210b4 switched to a better linenoise fork
https://github.com/msteveb/linenoise

this version has several benefits, namely win32 support :D
2023-09-01 17:12:39 -05:00
CPunch dfdd97e739 fix artifacts path 2023-09-01 14:43:20 -05:00
CPunch 096d80d8df better repl input, using linenoise 2023-08-31 23:17:13 -05:00
CPunch f7bc8e0471 include util path 2023-08-31 23:16:28 -05:00
CPunch fce568addc whoops, wrong path to the workflow file 2023-08-30 21:30:20 -05:00
CPunch f5e75f09b9 ig that runner doesn't work lol 2023-08-30 21:28:50 -05:00
CPunch fe136f84b5 removed CERROR 2023-08-30 20:14:03 -05:00
CPunch de8cd481c3 allow manual runs 2023-08-30 20:12:06 -05:00
CPunch 6654c3b91c wrong output path for windows build 2023-08-30 20:09:06 -05:00
CPunch 21f7ea5c14 oops 2023-08-30 20:03:30 -05:00
CPunch e1591ae3fd switched from appveyor to github workflow 2023-08-30 20:02:04 -05:00
CPunch bfdd33e01d fix vm.collect()
we don't freeze the vm on entry to C functions now
2023-08-26 15:03:56 -05:00
CPunch c0893b8a14 more refactoring; things seem to work fine
all example scripts run fine with GC_STRESS enabled
2023-08-30 12:00:52 -05:00
CPunch d30bcace9a don't freezeGC during GC cycle 2023-08-29 23:32:25 -05:00
CPunch 6a47c82179 fix more GC bugs 2023-08-29 23:21:52 -05:00
CPunch d41126e75f fix cparse.c gc bug 2023-08-29 23:01:47 -05:00
CPunch 9f19fd4f31 fix this test script 2023-08-29 16:51:04 -05:00
CPunch 6126b50941 cosmoV_throw() now resets the vm stack as well
also a minor GC bug in cosmoO_newError was fixed.

i'm going to try to phase out cosmoM_freezeGC & friends
since that would cause hell with this new
error handling solution. the only thing still using it is the GC.
2023-08-29 16:48:38 -05:00
CPunch 7fa7eb8d94 fixed minor memory leak in cparse
we keep track of internal values used by the parser by pushing them onto the stack
and popping them off once complete.
2023-08-29 15:27:22 -05:00
CPunch 0633e87aa6 WIP: removed stale error handling
currently, scripts seem to run fine. however I'm a bit worried about stack related issues. maybe i'll need to reset state->top as well? but not entirely sure
2023-08-29 14:07:45 -05:00
CPunch 75d27afe2c WIP: major error handling refactoring
switching to setjmp instead of the really bad global 'panic' flag
2023-08-28 21:13:00 -05:00
CPunch 3f39211081 minor refactoring 2023-08-25 23:34:21 -05:00
CPunch c5e4305ef8 refactored cobj.c:printObject()
uses obj type strings from cosmoO_typeStr
2023-08-25 21:28:41 -05:00
CPunch 1a78a9ab5f finally fixed this memory bug
we were accidentally tracking frees of stuff that was never
allocated lol
2023-08-25 21:22:10 -05:00
CPunch 2f0f675159 more debug related refactoring 2023-08-25 20:44:24 -05:00
CPunch 7c5d2f6b65 minor CTable refactoring 2023-08-25 19:57:16 -05:00
CPunch f76f2ffa92 refactoring and cleanup
cosmoB_loadOSLib -> cosmoB_loadOS
2023-08-24 23:36:32 -05:00
CPunch 155e0829fb minor refactoring 2023-06-03 01:39:35 -05:00
CPunch 2b3825d258 implemented jump table dispatch
- currently only enabled on supported platforms (GNU C Compiler + Clang)
- when enabled, sped up examples/fibtest.cosmo by about 20% (avg of 11.179s prior and 8.799 after)

NOTE: malicious dumps can trivially cause crashes now by having junk function chunks
2023-06-03 01:17:28 -05:00
CPunch 7bca6927a9 fixed formatting 2023-06-01 22:28:07 -05:00
CPunch d3647c161b added vm.disassemble() 2023-06-01 19:04:12 -05:00
unknown d27d94975e fixed MSVC support 2023-06-01 22:22:44 -05:00
CPunch 2d0e63f706 forgot to update this a while back 2023-05-28 21:16:30 -05:00
CPunch dfcf0c92b5 whoops, need to update the command to run the testsuite 2023-05-28 21:13:51 -05:00
CPunch 447f874eff update README.md 2023-05-28 21:11:52 -05:00
CPunch 7b1bd1c9fc minor usage fix 2023-05-28 20:57:53 -05:00
CPunch 9537a2c7b8 major main.c refactoring
- now takes command line arguments:
Usage: ./bin/cosmo [-clsr] [args]

available options are:
-c <in> <out>   compile <in> and dump to <out>
-l <in>         load dump from <in>
-s <in...>              compile and run <in...> script(s)
-r                      start the repl
2023-05-28 20:52:12 -05:00
CPunch c44dc88972 minor stack fixes 2023-05-28 12:19:52 -05:00
CPunch d581e68166 proper error handling for dump edgecases 2023-05-28 12:16:00 -05:00
CPunch 2271681cec undef macros 2023-05-28 12:03:49 -05:00
CPunch cf18bbbe54 fixed GC bug in cundump.c 2023-05-28 11:55:48 -05:00
CPunch 3a872fb83f these values can be defined at the top of the function 2023-05-28 00:08:28 -05:00
CPunch 4ed1c79b50 formatting changes 2023-05-28 00:03:50 -05:00
CPunch bc6eb9b6dc added cdump.[ch] and cundump.[ch] to makefile 2023-05-27 23:17:17 -05:00
CPunch 635f31863f cvm.c: added cosmoV_undump 2023-05-27 23:16:47 -05:00
CPunch 49a7f68239 cdump.c: major refactoring; various fixes 2023-05-27 23:15:58 -05:00
CPunch 8efecf71a4 cdump.c: fix instruction and line info dumping 2023-05-27 23:15:12 -05:00
CPunch 395f352c6e started cundump.c:cosmoD_undump(); minor fixes 2023-05-25 21:12:21 -05:00
CPunch 65d37838cd started cdump.c:cosmoD_dump() 2023-05-25 19:41:13 -05:00
CPunch 3b13ae1624 minor refactoring and typos 2023-05-25 19:40:15 -05:00
CPunch d1a16d990c removed stale COBJ_STREAM usage 2023-05-25 18:34:39 -05:00
CPunch 0a4d36f2f4 update Docs to reflect keyword changes 2023-02-10 20:46:05 -06:00
CPunch 8ac8085d20 syntax: 'var'->'let' 'function'->'func'
- 'var' has some weird scoping connotations with users of JS. better to change it to 'let', which will decide whether to make the variable a local or a global
- 'func' looks visually appealing lol
- some minor refactoring done in cparse.c
2023-02-09 15:58:25 -06:00
CPunch e335fd95d6 minor formatting fixes 2023-02-09 12:52:36 -06:00
CPunch b902ac90de removed CObjStream 2023-02-09 12:42:09 -06:00
CPunch 6056f8eb5b added clang-format 2023-02-09 12:32:48 -06:00
CPunch 88284a0b6e Removed '-Werror' to the Makefile 2021-06-11 15:01:53 -05:00
Inversion 7998c2ab41 Add documentation for the OS library 2023-11-03 22:55:24 -05:00
CPunch 7b5825668d Added boilerplate for CObjStream 2021-03-20 01:44:03 -05:00
CPunch d13cc398c8 Added os.system() to the os.* library 2021-03-20 01:02:13 -05:00
CPunch 012d3702bf Updated Appveyor to test testsuite 2021-03-19 22:25:23 -05:00
CPunch d761970f17 Added minimal testsuite for IC
- main.c will now report errors for passed scripts
2021-03-19 22:23:04 -05:00
CPunch 0e730b9c51 Added svg to README, whitelisted commits only effecting the binary 2021-03-16 15:05:20 -05:00
CPunch bff2799bb6 Added AppVeyor CI 2021-03-16 14:54:44 -05:00
cpunch 07ca82f968 Added '__equal' metamethod docs 2021-02-24 12:52:31 -06:00
cpunch b545e8e5e3 Added another example script 'compare.comso'
- This stresses the table implementation as well as cosmoV_equals
2021-02-23 11:50:41 -06:00
cpunch 55e6453589 Improved cosmoO_equals performance for strings 2021-02-23 11:49:57 -06:00
cpunch c83dca2ab2 Added '__equal' metamethod, slightly refactored cosmoO_equal
- ISTRING_EQUAL has been added
2021-02-20 12:42:13 -06:00
cpunch 3890c9dd1e Refactored cosmoO_equals
This sets up room for the '__equal' metamethod to be added

- cosmoO_equals now requires the state to be passed
- cosmoV_equals now requires the state to be passed
- cosmoT_get now requires the state to be passed
2021-02-19 17:04:23 -06:00
cpunch 40739e9bea cparse.c now throws an error on illegal statements 2021-02-19 12:47:12 -06:00
Inversion 1eec23035f Temporary fix for possible bug 2023-11-03 22:55:19 -05:00
Inversion c0274d1d77 Update standard library documentation 2023-11-03 22:55:14 -05:00
Inversion fec26ac380 Add optional custom error message to assert 2023-11-03 22:55:09 -05:00
cpunch 35466f691f Added C99 support, refactored headers 2021-02-15 16:20:04 -06:00
cpunch 71c8dc7e34 Added basic standard library docs 2021-02-15 14:25:08 -06:00
cpunch 7a6e00be41 Added math.rad() and math.deg() 2021-02-15 14:06:43 -06:00
cpunch 14b091b691 Added trig. functions to the math library 2021-02-15 14:00:26 -06:00
cpunch 5c71efbe40 Added OP_POW to cdebug.c; refactored cosmoV_registerProtoObject
- cosmoV_registerProtoObject now walks the object list and updates the proto's for objects of the objType which have a NULL proto.
- misc. comment changes in cvm.h as well.
2021-02-13 20:08:35 -06:00
cpunch 1fff6c7fe9 Added string.rep() to the string library 2021-02-13 19:07:47 -06:00
cpunch 1a96e411f2 Minor Makefile fix 2021-02-11 20:35:42 -06:00
cpunch fdd0d19308 Added CMake support
should make integration into visual studio easier for people
2021-02-11 20:34:04 -06:00
cpunch 33da88a18a Minor cbaselib.c cleanup 2021-02-11 00:58:12 -06:00
Inversion 50b19e9f4f Added argument type check to string.len 2023-11-03 22:55:03 -05:00
Inversion 472a0ea4c1 Updated baselib in accordance with cosmoV_readCString 2023-11-03 22:54:56 -05:00
Inversion 76574c7860 Added cosmoV_readCString for convenience 2023-11-03 22:54:51 -05:00
Inversion 8b931fa4a7 Add string.len to base library 2023-11-03 22:54:45 -05:00
Inversion ce844dc110 Added error to the base library 2023-11-03 22:53:59 -05:00
7 changed files with 35 additions and 19 deletions

View File

@ -699,8 +699,9 @@ int cosmoB_sRep(CState *state, int nargs, CValue *args)
char *newStr = cosmoM_xmalloc(state, length + 1); // + 1 for the NULL terminator
// copy the string over the new buffer
for (int i = 0; i < times; i++)
for (int i = 0; i < times; i++) {
memcpy(&newStr[i * str->length], str->str, str->length);
}
// write the NULL terminator
newStr[length] = '\0';

View File

@ -5,8 +5,9 @@
void printIndent(int indent)
{
for (int i = 0; i < indent; i++)
for (int i = 0; i < indent; i++) {
printf("\t");
}
}
static int simpleInstruction(const char *name, int offset)

View File

@ -165,8 +165,9 @@ static void blackenObject(CState *state, CObj *obj)
markValue(state, err->err);
// mark callframes
for (int i = 0; i < err->frameCount; i++)
for (int i = 0; i < err->frameCount; i++) {
markObject(state, (CObj *)err->frames[i].closure);
}
break;
}
@ -284,13 +285,15 @@ static void markRoots(CState *state)
markObject(state, (CObj *)state->globals);
// mark all internal strings
for (int i = 0; i < ISTRING_MAX; i++)
for (int i = 0; i < ISTRING_MAX; i++) {
markObject(state, (CObj *)state->iStrings[i]);
}
markTable(state, &state->registry);
for (int i = 0; i < COBJ_MAX; i++)
for (int i = 0; i < COBJ_MAX; i++) {
markObject(state, (CObj *)state->protoObjects[i]);
}
traceGrays(state);
}

View File

@ -15,8 +15,9 @@ uint32_t hashString(const char *str, size_t sz)
uint32_t hash = sz;
size_t step = (sz >> 5) + 1;
for (size_t i = sz; i >= step; i -= step)
for (size_t i = sz; i >= step; i -= step) {
hash = ((hash << 5) + (hash >> 2)) + str[i - 1];
}
return hash;
}
@ -236,8 +237,9 @@ CObjError *cosmoO_newError(CState *state, CValue err)
cerror->parserError = false;
// clone the call frame
for (int i = 0; i < state->frameCount; i++)
for (int i = 0; i < state->frameCount; i++) {
cerror->frames[i] = state->callFrame[i];
}
return cerror;
}

View File

@ -54,11 +54,13 @@ CState *cosmoV_newState()
state->openUpvalues = NULL;
// set default proto objects
for (int i = 0; i < COBJ_MAX; i++)
for (int i = 0; i < COBJ_MAX; i++) {
state->protoObjects[i] = NULL;
}
for (int i = 0; i < ISTRING_MAX; i++)
for (int i = 0; i < ISTRING_MAX; i++) {
state->iStrings[i] = NULL;
}
cosmoT_initTable(state, &state->strings, 16); // init string table
cosmoT_initTable(state, &state->registry, 16);
@ -87,8 +89,9 @@ CState *cosmoV_newState()
state->iStrings[ISTRING_RESERVED] = cosmoO_copyString(state, "__reserved", 10);
// set the IString flags
for (int i = 0; i < ISTRING_MAX; i++)
for (int i = 0; i < ISTRING_MAX; i++) {
state->iStrings[i]->isIString = true;
}
state->freezeGC = 0; // unfreeze the state
return state;
@ -115,8 +118,9 @@ void cosmoV_freeState(CState *state)
}
// mark our internal VM strings NULL
for (int i = 0; i < ISTRING_MAX; i++)
for (int i = 0; i < ISTRING_MAX; i++) {
state->iStrings[i] = NULL;
}
// free our string table (the string table includes the internal VM strings)
cosmoT_clearTable(state, &state->strings);

View File

@ -87,8 +87,9 @@ static uint32_t getValueHash(CValue *val)
return 0;
memcpy(buf, &num, sizeof(buf));
for (size_t i = 0; i < sizeof(cosmo_Number) / sizeof(uint32_t); i++)
for (size_t i = 0; i < sizeof(cosmo_Number) / sizeof(uint32_t); i++) {
buf[0] += buf[i];
}
return buf[0];
}
// TODO: add support for other types

View File

@ -26,8 +26,9 @@ void cosmoV_insert(CState *state, int indx, CValue val)
StkPtr tmp = cosmoV_getTop(state, indx);
// moves everything up
for (StkPtr i = state->top; i > tmp; i--)
for (StkPtr i = state->top; i > tmp; i--) {
*i = *(i - 1);
}
*tmp = val;
state->top++;
@ -268,8 +269,9 @@ static void callCFunction(CState *state, CosmoCFunction cfunc, int args, int nre
state->top += nres; // and make sure to move state->top to match
// now, if the caller function expected more return values, push nils onto the stack
for (int i = nres; i < nresults; i++)
for (int i = nres; i < nresults; i++) {
cosmoV_pushValue(state, cosmoV_newNil());
}
}
/*
@ -327,8 +329,9 @@ static void rawCall(CState *state, CObjClosure *closure, int args, int nresults,
state->top += nres; // and make sure to move state->top to match
// now, if the caller function expected more return values, push nils onto the stack
for (int i = nres; i < nresults; i++)
for (int i = nres; i < nresults; i++) {
cosmoV_pushValue(state, cosmoV_newNil());
}
}
// returns true if successful, false if error
@ -377,9 +380,9 @@ void callCValue(CState *state, CValue func, int args, int nresults, int offset)
if (nresults > 0) {
cosmoV_pushRef(state, (CObj *)newObj);
// push the nils to fill up the expected return values
for (int i = 0; i < nresults - 1;
i++) { // -1 since the we already pushed the important value
// push the nils to fill up the expected return values.
// -1 since the we already pushed the important value
for (int i = 0; i < nresults - 1;i++) {
cosmoV_pushValue(state, cosmoV_newNil());
}
}
@ -415,8 +418,9 @@ bool cosmoV_pcall(CState *state, int args, int nresults)
if (nresults > 0) {
// push other expected results onto the stack
for (int i = 0; i < nresults - 1; i++)
for (int i = 0; i < nresults - 1; i++) {
cosmoV_pushValue(state, cosmoV_newNil());
}
}
cosmoV_freePanic(state);