Commit Graph

30 Commits

Author SHA1 Message Date
CPunch c0893b8a14 more refactoring; things seem to work fine
all example scripts run fine with GC_STRESS enabled
2023-08-30 12:00:52 -05:00
CPunch 6a47c82179 fix more GC bugs 2023-08-29 23:21:52 -05:00
CPunch 75d27afe2c WIP: major error handling refactoring
switching to setjmp instead of the really bad global 'panic' flag
2023-08-28 21:13:00 -05:00
CPunch 155e0829fb minor refactoring 2023-06-03 01:39:35 -05:00
CPunch 8ac8085d20 syntax: 'var'->'let' 'function'->'func'
- 'var' has some weird scoping connotations with users of JS. better to change it to 'let', which will decide whether to make the variable a local or a global
- 'func' looks visually appealing lol
- some minor refactoring done in cparse.c
2023-02-09 15:58:25 -06:00
CPunch 6056f8eb5b added clang-format 2023-02-09 12:32:48 -06:00
cpunch 1539a7e676 Added power operator '^', added OP_POW
- added TOKEN_CARROT to clex.[ch]
2021-02-10 17:26:20 -06:00
cpunch 7db0782991 Added support for multiline comments using '/*' and '*/' 2021-02-10 15:39:36 -06:00
CPunch 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
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 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 7e9b61e018 minor refactor, fixed many warnings 2021-01-01 23:06: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 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 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 f6aaeb3417 fixed typos 2020-12-19 13:32:43 -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 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 9ca67c8408 changed class -> proto 2020-12-05 17:58:56 -06:00
CPunch 08c640cd58 added # operator, improved error messages 2020-11-30 12:32:04 -06:00
CPunch fe2bcf8ae6 fixed GC bug, extended strings 2020-11-27 19:34:54 -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 46b99ab390 minor refactoring, added inc and dec operators 2020-11-19 14:41:21 -06:00
CPunch 329d34aa43 fixed clang warnings 2020-11-17 13:17:23 -06:00
CPunch c42a72dfad Major refactoring, added classes, many bug fixes 2020-11-09 19:44:12 -06:00
CPunch 4cd5c89d28 extended lexer to support 'this' 2020-11-05 18:43:21 -06:00
CPunch 2e1b745624 Initial commit 2020-10-28 00:16:30 -05:00