Commit Graph

54 Commits

Author SHA1 Message Date
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
3a28de6b2a Added 'local' support for 'proto', fixed DOS bug in proto parser 2021-01-31 12:06:20 -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
c82a01c968 Minor refactoring, fixed 'or' and 'and' logical operators 2021-01-24 12:17:46 -06:00
f8884c494c Added Hexadecimal encoding and binary encoding to numbers using '0x' and '0b' 2021-01-18 19:42:15 -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
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
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
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
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
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
c96b155412 better unary increment support for indexes & fields 2021-01-01 22:09:42 -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
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
f6aaeb3417 fixed typos 2020-12-19 13:32:43 -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
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
9ca67c8408 changed class -> proto 2020-12-05 17:58:56 -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
e784933517 fixed lexer errors 2020-11-26 12:54:45 -06:00
0745fd10a9 extended lexer, fixed table shrinking 2020-11-25 23:34:02 -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
9ebae876f6 minor refactoring, OP_INVOKE performance boost 2020-11-13 17:39:47 -06:00
08b6dcbf4c CObjMethod refactor 2020-11-12 23:04:09 -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