Commit Graph

191 Commits

Author SHA1 Message Date
1fff6c7fe9 Added string.rep() to the string library 2021-02-13 19:07:47 -06:00
fdd0d19308 Added CMake support
should make integration into visual studio easier for people
2021-02-11 20:34:04 -06:00
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
1539a7e676 Added power operator '^', added OP_POW
- added TOKEN_CARROT to clex.[ch]
2021-02-10 17:26:20 -06:00
24bbc22cd4 Minor os.read() fixes 2021-02-10 17:11:52 -06:00
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
7db0782991 Added support for multiline comments using '/*' and '*/' 2021-02-10 15:39:36 -06:00
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
0d344f65df renamed cosmoV_pushObj->cosmoV_pushRef & cosmoV_newObj->cosmoV_newRef 2021-02-07 14:05:53 -06:00
8d37f1f243 Renamed cosmoV_readObj to cosmoV_readRef to reduce ambiguity
also fixed several typos
2021-02-07 14:00:00 -06:00
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
8151cde6f3 Refactored cosmo_pushFString
- remove %t support
- added length specifier to %s
2021-02-06 16:01:59 -06:00
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
88d41d7db8 Fixed minor GC freeze bug in pcall() 2021-02-03 13:03:24 -06:00
ff1804ca36 Removed .charAt(), added .char() & .byte()
- also minor comment fixes in cobj.[ch]
2021-02-01 21:07:43 -06:00
3a28de6b2a Added 'local' support for 'proto', fixed DOS bug in proto parser 2021-01-31 12:06:20 -06:00
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
cff26574bb Fixed table iteration bug, added vm.globals to debug lib 2021-01-25 16:14:51 -06:00
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
0be6e7dff1 Minor OP_NEWARRAY fix 2021-01-24 20:33:37 -06:00
c82a01c968 Minor refactoring, fixed 'or' and 'and' logical operators 2021-01-24 12:17:46 -06:00
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
0ad0df5fba Added '__tonumber' metamethod 2021-01-23 15:30:30 -06:00
7c92749e0d Added '__count' metamethod to objects 2021-01-22 15:22:30 -06:00
185e6027e7 whoops 2021-01-19 22:56:52 -06:00
71e9331551 Minor baselib.c refactor; added string.charAt() 2021-01-19 22:54:06 -06:00
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
c7116ab752 fix for one digit numbers 2021-01-18 21:54:31 -06:00
f8884c494c Added Hexadecimal encoding and binary encoding to numbers using '0x' and '0b' 2021-01-18 19:42:15 -06:00
3c19079262 Added string.split() & string.find() 2021-01-17 14:07:30 -06:00
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
e995bb75fb added tonumber() and tostring() to base lib 2021-01-13 14:13:55 -06:00
8cd0112c48 fixed __getter and __setter tables 2021-01-12 18:27:29 -06:00
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
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
f0b666f623 better README 2021-01-08 23:53:02 -06:00
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
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
e57c194837 minor fix for OP_INVOKE 2021-01-07 20:04:42 -06:00
c5ee704317 optimized OP_INVOKE, embedded the identifier in the instruction 2021-01-07 20:02:19 -06:00
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
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