Commit Graph

216 Commits

Author SHA1 Message Date
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 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 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 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 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 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 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 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
cpunch 1539a7e676 Added power operator '^', added OP_POW
- added TOKEN_CARROT to clex.[ch]
2021-02-10 17:26:20 -06:00
cpunch 24bbc22cd4 Minor os.read() fixes 2021-02-10 17:11:52 -06:00
cpunch cfb4df66f9 Added optional os.* library, fixed cosmoB_loadLibrary
- os.time() returns the UNIX Epoch time in seconds
- os.read() reads file and returns the data as a <string> object
2021-02-10 17:10:03 -06:00
cpunch 7db0782991 Added support for multiline comments using '/*' and '*/' 2021-02-10 15:39:36 -06:00
CPunch 78e21a0f28 refactored cosmoV_set & cosmoV_get, renamed COSMO_TOBJ->COSMO_TREF
also changed print() to print raw primitives instead of generating a <string> needlessly. helped performance immensely in scripts like `examples/increment.cosmo`
2021-02-07 14:32:39 -06:00
CPunch 0d344f65df renamed cosmoV_pushObj->cosmoV_pushRef & cosmoV_newObj->cosmoV_newRef 2021-02-07 14:05:53 -06:00
CPunch 8d37f1f243 Renamed cosmoV_readObj to cosmoV_readRef to reduce ambiguity
also fixed several typos
2021-02-07 14:00:00 -06:00
CPunch 5faa40bdef Minor CObj* refactor, added cosmoO_lock and cosmoO_unlock
- cosmoO_getUser* and cosmoO_setUser* no longer take the `CState*` argument
- if a set is performed on a locked object an error is thrown
2021-02-06 18:51:47 -06:00
CPunch 8151cde6f3 Refactored cosmo_pushFString
- remove %t support
- added length specifier to %s
2021-02-06 16:01:59 -06:00
CPunch 2f9ff08cd3 Added object.* library; added cosmoO_isDescendant to cobj.[ch]
The object library includes:
- __proto getter and setter tables (might make an option to lock __proto in the future)
- ischild()

cosmoB_loadDebug was renamed to cosmoB_loadVM and now only loads the VM library
2021-02-03 13:43:26 -06:00
CPunch 88d41d7db8 Fixed minor GC freeze bug in pcall() 2021-02-03 13:03:24 -06:00
CPunch ff1804ca36 Removed .charAt(), added .char() & .byte()
- also minor comment fixes in cobj.[ch]
2021-02-01 21:07:43 -06:00
CPunch 3a28de6b2a Added 'local' support for 'proto', fixed DOS bug in proto parser 2021-01-31 12:06:20 -06:00
CPunch 300ffb89e9 Added basic math.* library, fixed number lexer edgecase
- also added vm.collect() to the vm library
2021-01-29 15:45:24 -06:00
CPunch cff26574bb Fixed table iteration bug, added vm.globals to debug lib 2021-01-25 16:14:51 -06:00
CPunch cd6744ab65 Minor refactor, added vm.* library
- cosmoV_pushObj() has been added
- cbaselib.h has been cleaned up a bit
2021-01-25 15:04:16 -06:00
CPunch 0be6e7dff1 Minor OP_NEWARRAY fix 2021-01-24 20:33:37 -06:00
CPunch c82a01c968 Minor refactoring, fixed 'or' and 'and' logical operators 2021-01-24 12:17:46 -06:00
CPunch fd1481fa43 Minor VM refactor + GC bug fix
The VM now respects metamethods from proto objects connected to tables. Also the CState is frozen while being instantiated.
2021-01-23 17:16:45 -06:00
CPunch 0ad0df5fba Added '__tonumber' metamethod 2021-01-23 15:30:30 -06:00
CPunch 7c92749e0d Added '__count' metamethod to objects 2021-01-22 15:22:30 -06:00
CPunch 185e6027e7 whoops 2021-01-19 22:56:52 -06:00
CPunch 71e9331551 Minor baselib.c refactor; added string.charAt() 2021-01-19 22:54:06 -06:00
CPunch d690c3040d Added hex and binary character encoding to strings
Use '\b' and '\x' to encode characters in strings!
2021-01-19 12:22:20 -06:00
CPunch c7116ab752 fix for one digit numbers 2021-01-18 21:54:31 -06:00
CPunch f8884c494c Added Hexadecimal encoding and binary encoding to numbers using '0x' and '0b' 2021-01-18 19:42:15 -06:00
CPunch 3c19079262 Added string.split() & string.find() 2021-01-17 14:07:30 -06:00
CPunch 2864c7be53 Minor refactoring, added OP_GETMETHOD
You can use ':' without invoking. So you can grab a method binding to an object and later call it. Also some GC bugs were fixed.

A new preprocessor macro (VM_DEBUG) has been added. Defining this macro will print each instruction thats being executed in the VM, as
well as print each call.
2021-01-16 15:40:58 -06:00
CPunch e995bb75fb added tonumber() and tostring() to base lib 2021-01-13 14:13:55 -06:00
CPunch 8cd0112c48 fixed __getter and __setter tables 2021-01-12 18:27:29 -06:00
CPunch ab86e19cfe Added ':' invoke operator
You're now forced to use ':' when calling a method on an object. Some of Lua's ideas really are just better in practice /shrug
2021-01-12 17:46:22 -06:00
CPunch c510c9aebf Minor table refactor, added cosmoV_compileString and loadstring() to baselib
cosmoV_compileString is recommended since it'll push the result (<error> or <closure>) onto the stack.

also, fixed some GC-related bugs, so yay!
2021-01-10 14:38:53 -06:00
CPunch f0b666f623 better README 2021-01-08 23:53:02 -06:00
CPunch 75b571c09a Added table support to the parser
a new instruction, OP_NEWARRAY has been added. this instruction will create a table out of the uint16_t values on the stack, with incremental keys [0-(u16-1)]
2021-01-08 22:47:36 -06:00
CPunch 824c0e89b9 Dictionaries -> Tables
Tables are going to become a more generic form of data storage. While objects will be "stateful", tables will remain static.

'{}' now refers to an object declaration, '[]' will be reserved for tables.
2021-01-08 14:37:36 -06:00
CPunch e57c194837 minor fix for OP_INVOKE 2021-01-07 20:04:42 -06:00
CPunch c5ee704317 optimized OP_INVOKE, embedded the identifier in the instruction 2021-01-07 20:02:19 -06:00
CPunch 1351ff63b1 Added CObj->proto support, state->protoObjects defines default protos for each COBJ type
a lot of refactoring in the VM
2021-01-07 19:50:36 -06:00
CPunch c5bd0c2478 More performant OP_GETOBJECT & OP_SETOBJECT
constant indexes are now embedded in the instruction
2021-01-07 17:19:17 -06:00
CPunch ea4654cb6e fixed multiple assignments from function calls() 2021-01-06 01:26:42 -06:00
CPunch 860f30f201 removed printStack() from cosmoB_pcall() 2021-01-05 22:46:04 -06:00
CPunch eb2f50e456 Added CObjError, cosmoV_throw(), pcall(), and cosmoV_printError()
Errors are now handled very differently, parser errors and VM errors are now treated the same.
When cosmoV_error is called, cosmoV_throw is also called, which formats the error object and sets the panic state.
state->error now points to the latest CObjError when state->panic is true. To get a nice formatted Objection message, use
cosmoV_printError() and pass the state->error. pcall() was added to the standard base library. When called, the first argument
passed is called with the subsequent arguments given. If the call completed successfully, `true`,`nil` is returned. However
when an error occurs during the call, `false`,`<error>` is returned. Simply print the `<error>` to retrieve the error string.
2021-01-05 22:27:59 -06:00
CPunch 417a1f15f1 fixed multiple assignment 2021-01-05 17:05:49 -06:00
CPunch ec3552a155 organized flags 2021-01-04 16:20:05 -06:00
CPunch 752bd533e9 Minor VM refactor, added cosmoV_pcall() 2021-01-04 16:04:38 -06:00
CPunch adb2381b4f added __tostring IString, added expressionPrecedence() to cparse.c
additional minor refactoring
2021-01-03 17:33:10 -06:00
CPunch cb1d287c93 added type() to baselib 2021-01-02 14:33:11 -06:00
CPunch 0b415ad49d addUpvalue() now checks for UInt overflows 2021-01-01 23:14:47 -06:00
CPunch 7e9b61e018 minor refactor, fixed many warnings 2021-01-01 23:06:24 -06:00
CPunch bccabdebd7 Fixed OP_INCOBJECT to properly handle dicts
minor refactoring in OP_INCINDEX
2021-01-01 22:52:54 -06:00
CPunch c96b155412 better unary increment support for indexes & fields 2021-01-01 22:09:42 -06:00
CPunch be7a291ff2 added SAFE_STACK flag 2021-01-01 20:02:36 -06:00
CPunch 509823e1bc detect stack overflows 2021-01-01 19:20:24 -06:00
CPunch 84f7895684 Added modulo operator '%'
- added OP_MOD, which performs a modulo operation on the 2 <number> values on the stack. Pops the 2 values and pushes the result.
- also added TOKEN_PERCENT to the lexer, and extended binary() in cparse.c to support it.
2021-01-01 00:47:15 -06:00
CPunch e253129e50 added string.sub() 2020-12-31 02:26:06 -06:00
CPunch e993cdd9fa Added `.` get/set support for dictionaries.
cosmoO_getObject and cosmoO_setObject were renamed to cosmoV_getRawObject and cosmoV_setRawObject respectively
`__init` is now required to be defined for a proto object to be instantiated.
other minor refactoring work done in src/cvm.c
2020-12-30 17:51:59 -06:00
CPunch 9012f9231b Added assert() to base library
also fixed regression in call()
2020-12-27 13:36:17 -06:00
CPunch 090cc62cce Added variadic functions
TOKEN_DOT_DOT_DOT was added to the lexer
variadic.cosmo was added to the examples directory
2020-12-26 22:01:22 -06:00
CPunch db8ed21746 fixed typo in 'break' and 'continue' err. msg 2020-12-24 13:55:27 -06:00
CPunch a408353c25 added "break" and "continue" statements
a LoopState was added to the CCompilerState struct which keeps track of breaks, start chunk index, and the start scope of the active loop.
Also, break.cosmo was added to the examples directory, 'continue' and 'break' work as expected.
2020-12-24 00:41:00 -06:00
CPunch 31a852a127 Added cosmoV_pushFString(), and cosmoO_pushVFString().
cosmoV_error now pushes the error string onto the stack, as well as uses cosmoO_VFString to format strings.
cosmoV_concat is now entirely self contained, and is now stack based. Push the CValues you want to concat into strings onto the stack and call cosmoV_concat with the # of values you pushed.
2020-12-22 15:13:11 -06:00
CPunch de3a89ad4f cosmoV_register now uses the stack to pass params 2020-12-19 21:15:12 -06:00
CPunch f6aaeb3417 fixed typos 2020-12-19 13:32:43 -06:00
CPunch 0beeee0fdf Added dictionary support to OP_ITER
ISTRING_RESERVED was added to iStrings
call & callCFunction now use memmove instead of memcpy
Additionally, added cosmoO_setUserP, cosmoO_getUserP, cosmoO_setUserI and cosmoO_getUserI to the C API.
2020-12-17 19:44:04 -06:00
CPunch b2c1f73e01 moved the results cap check in callCFunction 2020-12-16 03:58:56 -06:00
CPunch eede892eb0 made OP_ITER and OP_NEXT use CObjMethods 2020-12-16 03:51:50 -06:00
CPunch e5eca7bed6 Added iterable objects
__iter and __next are now reserved IStrings, OP_NEXT and OP_ITER have also been added. A new token (TOKEN_IN) has been added to the lexer. The parser now supports the for each loop (for i, ... in <object> do ... end).
savedPushed has been removed from the CCompilerState struct.
2020-12-15 21:21:51 -06:00