Commit Graph

216 Commits

Author SHA1 Message Date
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
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 bf59f70598 added IS_METHOD to IS_CALLABLE 2020-12-12 21:17:31 -06:00
CPunch ec8f5e7e4f added foreach() 2020-12-12 18:16:31 -06:00
CPunch 219a87c79c added IS_DICT() 2020-12-12 17:36:55 -06:00
CPunch d03175c9c5 OP_COUNT expects a dictionary 2020-12-12 17:34:54 -06:00
CPunch b1facfc92f smarter caching 2020-12-09 20:46:20 -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 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
CPunch f8a062919f added cosmoM_addRoot & cosmoM_removeRoot 2020-12-07 15:53:23 -06:00
CPunch aff011a8d1 minor refactoring 2020-12-07 14:35:14 -06:00
CPunch d00b803e6f added __setter and __getter 2020-12-06 14:11:33 -06:00
CPunch 005e2acd1e added cosmoO_setUserData and cosmoO_getUserData 2020-12-06 13:38:05 -06:00
CPunch 9ca67c8408 changed class -> proto 2020-12-05 17:58:56 -06:00
CPunch e0d51c191f renamed cosmoV_makeObject 2020-12-05 17:55:09 -06:00
CPunch 3a18d14a80 removed stale comments 2020-12-04 12:30:01 -06:00
CPunch d154d71163 improved nan box performance 2020-12-04 12:19:07 -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
CPunch 9dcd1c909a fixed needless pop in _main chunk 2020-11-27 19:42:00 -06:00
CPunch fe2bcf8ae6 fixed GC bug, extended strings 2020-11-27 19:34:54 -06:00
CPunch e784933517 fixed lexer errors 2020-11-26 12:54:45 -06:00
CPunch 9ccb258a93 added special character support to strings 2020-11-26 12:48:36 -06:00
CPunch 0745fd10a9 extended lexer, fixed table shrinking 2020-11-25 23:34:02 -06:00
CPunch bb11b3b309 added support for __newindex 2020-11-24 15:16:37 -06:00
CPunch 6d45c0a676 fixed __index 2020-11-20 15:10:49 -06:00
CPunch 85e7deae7b better support for OP_INCOBJECT 2020-11-20 14:50:43 -06:00
CPunch 46b99ab390 minor refactoring, added inc and dec operators 2020-11-19 14:41:21 -06:00
CPunch 3727d6bb7c OP_NEWOBJECT uses long operand 2020-11-18 14:35:58 -06:00
CPunch 4c4b5eae8d refactored stress test 2020-11-17 15:13:51 -06:00
CPunch aaed92424f CObjMethod refactor 2020-11-17 15:07:56 -06:00
CPunch e6a377dfd0 added comments 2020-11-17 14:39:02 -06:00
CPunch c1854bdcf1 shrink based on count 2020-11-17 14:34:30 -06:00
CPunch 7182f5ccd1 do GC before table array is allocated 2020-11-17 14:32:20 -06:00
CPunch 329d34aa43 fixed clang warnings 2020-11-17 13:17:23 -06:00
CPunch ef8218996c fix clang warning 2020-11-17 03:38:00 -06:00
CPunch 1189dc4b78 correctly mark tombstones 2020-11-17 03:36:56 -06:00
CPunch 1329b72fcd fixed GC bug 2020-11-17 03:10:55 -06:00
CPunch 204bec3d0a added IStrings, added __index functionality 2020-11-16 19:58:16 -06:00
CPunch c7be39a5d4 renamed metaobjects to protoobjects 2020-11-15 12:22:11 -06:00
CPunch 928b01f52c added some comments 2020-11-13 17:45:14 -06:00
CPunch 9ebae876f6 minor refactoring, OP_INVOKE performance boost 2020-11-13 17:39:47 -06:00
CPunch 71d3a8e1c4 added cosmoV_error 2020-11-13 12:54:06 -06:00
CPunch 08b6dcbf4c CObjMethod refactor 2020-11-12 23:04:09 -06:00
CPunch 40ae495aaf added input() to repl 2020-11-12 20:06:38 -06:00
CPunch 279714f3e0 added push wrappers 2020-11-12 17:17:41 -06:00
CPunch ffe4fc6930 disabled debug features by default 2020-11-12 17:02:12 -06:00
CPunch 01b796460a refactored internal strings 2020-11-12 16:52:56 -06:00
CPunch 0e92ddea2b fixed invalid objection string 2020-11-12 16:27:50 -06:00
CPunch 93130ede65 fixed another stack error 2020-11-12 16:23:56 -06:00
CPunch 65662e94f2 fixed stack error 2020-11-11 23:10:53 -06:00
CPunch c42a72dfad Major refactoring, added classes, many bug fixes 2020-11-09 19:44:12 -06:00
CPunch aa975b7330 minor refactoring + non-zero int fixed 2020-11-05 19:53:55 -06:00
CPunch 4cd5c89d28 extended lexer to support 'this' 2020-11-05 18:43:21 -06:00
CPunch ffa6ca22e3 +NUM to getValueHash() 2020-11-04 21:37:45 -06:00
CPunch 64c6914748 marked objects in GC 2020-11-04 21:37:34 -06:00
CPunch 185380b2c0 removed unused code 2020-11-03 22:19:48 -06:00
CPunch 293bab307b files ran from cli now have baselib again 2020-11-03 22:18:55 -06:00
CPunch e1d33855c3 added basic objects 2020-11-03 22:10:51 -06:00
CPunch fe93a0b715 better GC debugging, added base object for tables 2020-11-02 22:32:39 -06:00
CPunch a15c8d67a1 repl now shares state 2020-10-28 18:38:50 -05:00
CPunch 8e71cab642 fixed segfault on parser objection 2020-10-28 18:29:50 -05:00
CPunch 2e1b745624 Initial commit 2020-10-28 00:16:30 -05:00