Commit Graph

195 Commits

Author SHA1 Message Date
c5bd0c2478 More performant OP_GETOBJECT & OP_SETOBJECT
constant indexes are now embedded in the instruction
2021-01-07 17:19:17 -06:00
ea4654cb6e fixed multiple assignments from function calls() 2021-01-06 01:26:42 -06:00
860f30f201 removed printStack() from cosmoB_pcall() 2021-01-05 22:46:04 -06:00
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
417a1f15f1 fixed multiple assignment 2021-01-05 17:05:49 -06:00
ec3552a155 organized flags 2021-01-04 16:20:05 -06:00
752bd533e9 Minor VM refactor, added cosmoV_pcall() 2021-01-04 16:04:38 -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
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
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
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
fe2bcf8ae6 fixed GC bug, extended strings 2020-11-27 19:34:54 -06:00
e784933517 fixed lexer errors 2020-11-26 12:54:45 -06:00
9ccb258a93 added special character support to strings 2020-11-26 12:48:36 -06:00
0745fd10a9 extended lexer, fixed table shrinking 2020-11-25 23:34:02 -06:00
bb11b3b309 added support for __newindex 2020-11-24 15:16:37 -06:00
6d45c0a676 fixed __index 2020-11-20 15:10:49 -06:00
85e7deae7b better support for OP_INCOBJECT 2020-11-20 14:50:43 -06:00
46b99ab390 minor refactoring, added inc and dec operators 2020-11-19 14:41:21 -06:00
3727d6bb7c OP_NEWOBJECT uses long operand 2020-11-18 14:35:58 -06:00
4c4b5eae8d refactored stress test 2020-11-17 15:13:51 -06:00
aaed92424f CObjMethod refactor 2020-11-17 15:07:56 -06:00
e6a377dfd0 added comments 2020-11-17 14:39:02 -06:00
c1854bdcf1 shrink based on count 2020-11-17 14:34:30 -06:00
7182f5ccd1 do GC before table array is allocated 2020-11-17 14:32:20 -06:00
329d34aa43 fixed clang warnings 2020-11-17 13:17:23 -06:00
ef8218996c fix clang warning 2020-11-17 03:38:00 -06:00
1189dc4b78 correctly mark tombstones 2020-11-17 03:36:56 -06:00
1329b72fcd fixed GC bug 2020-11-17 03:10:55 -06:00
204bec3d0a added IStrings, added __index functionality 2020-11-16 19:58:16 -06:00
c7be39a5d4 renamed metaobjects to protoobjects 2020-11-15 12:22:11 -06:00
928b01f52c added some comments 2020-11-13 17:45:14 -06:00
9ebae876f6 minor refactoring, OP_INVOKE performance boost 2020-11-13 17:39:47 -06:00
71d3a8e1c4 added cosmoV_error 2020-11-13 12:54:06 -06:00
08b6dcbf4c CObjMethod refactor 2020-11-12 23:04:09 -06:00
40ae495aaf added input() to repl 2020-11-12 20:06:38 -06:00
279714f3e0 added push wrappers 2020-11-12 17:17:41 -06:00
ffe4fc6930 disabled debug features by default 2020-11-12 17:02:12 -06:00
01b796460a refactored internal strings 2020-11-12 16:52:56 -06:00
0e92ddea2b fixed invalid objection string 2020-11-12 16:27:50 -06:00
93130ede65 fixed another stack error 2020-11-12 16:23:56 -06:00
65662e94f2 fixed stack error 2020-11-11 23:10:53 -06:00
c42a72dfad Major refactoring, added classes, many bug fixes 2020-11-09 19:44:12 -06:00
aa975b7330 minor refactoring + non-zero int fixed 2020-11-05 19:53:55 -06:00
4cd5c89d28 extended lexer to support 'this' 2020-11-05 18:43:21 -06:00
ffa6ca22e3 +NUM to getValueHash() 2020-11-04 21:37:45 -06:00
64c6914748 marked objects in GC 2020-11-04 21:37:34 -06:00
185380b2c0 removed unused code 2020-11-03 22:19:48 -06:00
293bab307b files ran from cli now have baselib again 2020-11-03 22:18:55 -06:00
e1d33855c3 added basic objects 2020-11-03 22:10:51 -06:00
fe93a0b715 better GC debugging, added base object for tables 2020-11-02 22:32:39 -06:00
a15c8d67a1 repl now shares state 2020-10-28 18:38:50 -05:00
8e71cab642 fixed segfault on parser objection 2020-10-28 18:29:50 -05:00
2e1b745624 Initial commit 2020-10-28 00:16:30 -05:00