Commit Graph

69 Commits

Author SHA1 Message Date
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 3a28de6b2a Added 'local' support for 'proto', fixed DOS bug in proto parser 2021-01-31 12:06:20 -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 7c92749e0d Added '__count' metamethod to objects 2021-01-22 15:22:30 -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 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 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 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 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 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 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 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
CPunch 4f3f594b82 added multiple return value support to the parser 2020-12-14 14:38:46 -06:00
CPunch 48ceca1834 multiple return value support added to VM 2020-12-12 21:53:12 -06:00
CPunch d03175c9c5 OP_COUNT expects a dictionary 2020-12-12 17:34:54 -06:00
CPunch 181ef8a18c Added dictionaries {}
Objects are now separate from {} dictionaries

the . operator now only indexes fields on objects, the [] operator can only be used on objects if the __index or __newindex functions are defined

Additionally 4 new instructions have been added to the VM: OP_NEWDICT, OP_INDEX, OP_INCINDEX, and OP_NEWINDEX.

The syntax to create a dictionary is as follows { <key> : <value>, <otherkey> : <othervalue> } eg. { "hello" : "world", "foo" : 1337 }

The Lexer & Parser was extended to add the TOKEN_COLON ':' token.
2020-12-09 20:32:42 -06:00
CPunch 6445dae04c added module names for functions 2020-12-09 12:23:16 -06:00
CPunch e0d51c191f renamed cosmoV_makeObject 2020-12-05 17:55:09 -06:00
CPunch b936827cc6 added support for NaN boxing (8 byte CValues!) 2020-12-04 00:04:14 -06:00
CPunch 495f1d7272 more minor refactoring 2020-11-30 12:50:55 -06:00
CPunch 0f138abedd minor refactoring 2020-11-30 12:40:36 -06:00
CPunch 08c640cd58 added # operator, improved error messages 2020-11-30 12:32:04 -06:00