Commit Graph

247 Commits

Author SHA1 Message Date
752bd533e9 Minor VM refactor, added cosmoV_pcall() 2021-01-04 16:04:38 -06:00
4e968529dc __tostring example added 2021-01-03 17:35:52 -06:00
adb2381b4f added __tostring IString, added expressionPrecedence() to cparse.c
additional minor refactoring
2021-01-03 17:33:10 -06:00
cb1d287c93 added type() to baselib 2021-01-02 14:33:11 -06:00
0b415ad49d addUpvalue() now checks for UInt overflows 2021-01-01 23:14:47 -06:00
7e9b61e018 minor refactor, fixed many warnings 2021-01-01 23:06:24 -06:00
bccabdebd7 Fixed OP_INCOBJECT to properly handle dicts
minor refactoring in OP_INCINDEX
2021-01-01 22:52:54 -06:00
c96b155412 better unary increment support for indexes & fields 2021-01-01 22:09:42 -06:00
be7a291ff2 added SAFE_STACK flag 2021-01-01 20:02:36 -06:00
509823e1bc detect stack overflows 2021-01-01 19:20:24 -06:00
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
58485d9375 better iterator example 2020-12-31 13:57:02 -06:00
e253129e50 added string.sub() 2020-12-31 02:26:06 -06:00
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
9012f9231b Added assert() to base library
also fixed regression in call()
2020-12-27 13:36:17 -06:00
e7212b939d Makefile now specifies C11 2020-12-26 22:03:14 -06:00
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
db8ed21746 fixed typo in 'break' and 'continue' err. msg 2020-12-24 13:55:27 -06:00
42eec149f6 added comments to break.cosmo 2020-12-24 00:47:21 -06:00
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
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
de3a89ad4f cosmoV_register now uses the stack to pass params 2020-12-19 21:15:12 -06:00
f6aaeb3417 fixed typos 2020-12-19 13:32:43 -06:00
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
b2c1f73e01 moved the results cap check in callCFunction 2020-12-16 03:58:56 -06:00
eede892eb0 made OP_ITER and OP_NEXT use CObjMethods 2020-12-16 03:51:50 -06:00
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
4f3f594b82 added multiple return value support to the parser 2020-12-14 14:38:46 -06:00
48ceca1834 multiple return value support added to VM 2020-12-12 21:53:12 -06:00
bf59f70598 added IS_METHOD to IS_CALLABLE 2020-12-12 21:17:31 -06:00
ec8f5e7e4f added foreach() 2020-12-12 18:16:31 -06:00
219a87c79c added IS_DICT() 2020-12-12 17:36:55 -06:00
d03175c9c5 OP_COUNT expects a dictionary 2020-12-12 17:34:54 -06:00
b1facfc92f smarter caching 2020-12-09 20:46:20 -06:00
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
6445dae04c added module names for functions 2020-12-09 12:23:16 -06:00
9aa7fa1381 replaced facttest.lua with fibtest.lua
Optimized the NaN box to be byte aligned, performance under the fibtest.lua script improved by ~2.5 seconds (~31 before ~28.5 after on cpunch's machine)
also cleaned up some misc. comments
2020-12-07 23:26:55 -06:00
f8a062919f added cosmoM_addRoot & cosmoM_removeRoot 2020-12-07 15:53:23 -06:00
aff011a8d1 minor refactoring 2020-12-07 14:35:14 -06:00
d00b803e6f added __setter and __getter 2020-12-06 14:11:33 -06:00
005e2acd1e added cosmoO_setUserData and cosmoO_getUserData 2020-12-06 13:38:05 -06:00
9ca67c8408 changed class -> proto 2020-12-05 17:58:56 -06:00
e0d51c191f renamed cosmoV_makeObject 2020-12-05 17:55:09 -06:00
3a18d14a80 removed stale comments 2020-12-04 12:30:01 -06:00
d154d71163 improved nan box performance 2020-12-04 12:19:07 -06:00
b936827cc6 added support for NaN boxing (8 byte CValues!) 2020-12-04 00:04:14 -06:00
495f1d7272 more minor refactoring 2020-11-30 12:50:55 -06:00
0f138abedd minor refactoring 2020-11-30 12:40:36 -06:00
08c640cd58 added # operator, improved error messages 2020-11-30 12:32:04 -06:00
9dcd1c909a fixed needless pop in _main chunk 2020-11-27 19:42:00 -06:00