# TODO
- Add a LSP
- Fix warnings (remove or ignore)
## v0.5 Memory and JS support
- ~~JS support via quickjs-ng. *JS*~~ **DONE**
- ~~Reference counting for PixelScript object.~~ **DONE**
- Decrease number of functions created in pocketpy. *python*
- ~~Return pxs_Exception for errors in pixelscript.~~ **DONE**
- ~~pxs_* library functions that return pxs_VarT need to always return a pxs_Var. nullptr will no longer be allowed.~~ **DONE**
- ~~Reimp pxs_DirHandle to be a pxs_VarList~~ **DONE**
- ~~add pxs_compile which will return a `pxs_Code` object.~~ **DONE**
- ~~Add Map~~ **DONE**
- Review memory management:
- ~~All functions return pxs_Var~~
- ~~All functions need to be explicit in their docs on ownership~~
- ~~Check Factories... why are we not owning the args?~~ (We are)
- ~~Mark functions as expected return type.~~
- ~~Add properties to PixelObjects~~ **DONE**
- Add anonyamous functions.
- Add `pxs_HostWrapper` which wraps host objects with a integer for a type.
- This would be super useful for literally everything UserData related.
- We can make use of the current HostObject system to build this. No new var types needde
- Also need to add new methods: `pxs_new_hostwrapper`, `pxs_wrapper_gethost`
- ~~Check that function calls that fail dont crash.~~
- Add `_pxs_delete` method to free internal memory at language level.
- Add `arenas`
## v0.6 STD and Tests
- Remove lua hacks (io, os, what else?)
- pxs_time (Time functions)
- pxs_os (OS functions like name, version)
- pxs_io (IO functions like write, read, etc) | This will require that `file_loader` `file_reader` and `dir_reader` are setup.
- Tests
- test_vars (Test all types to and from scripting)
- test_all (remove this)
- test_exec
- test_eval
- test_raise (a new test of raising from one langauge to another.)
- test_ft (a test that builds pixel ai dashs fast terrain system. If this runs, then it most likely works fine.)
## v0.7 Wren support, WASM, C support (libtcc)
- Add Wren support
- WASM support + Wasm web page similar to pocketpy live playground.
- Add C support via libtcc
- Add `unlock` feature which allows for running thread code unlocked.
## v0.8
- Cross language support. Calling JS from Python,
- New feature for on language support called |lang-on-demand| or something
- Requires setting LANGUAGES static variable via `pxs_setlanguages`
## LSP
- Remove ModuleCallbacks just use Function
- Remove ModuleVariables just use PixelVariable {name, var}
## Modules
## Objects
- Drop pxs_Object created from factory when it's no longer needed.
## Vars
## STD
- Add std library via pixelscript runtime. These are optional and handled via features
- pxs_io (reading/writing files/directories)
- pxs_os (some OS level stuff (delete, move, idk))
- pxs_time (similar to pythons time module. Just universal for all languages)
## Lua
- Remove io, os, and hackable modules.
## Python (PocketPy)
- Make callback global. i.e. one per thread
- Make object callbacks global. i.e. one per object
- When dirreader, filereader, filewriter are set, allow with open().
- Add a test for HostObject that holds another HostObject as reference. (FastTerrain)
## JS
- add_variable
- add_callback
- add_module
- execute_javascript
- module_add_variable
- module_add_callback
- module_add_module
## Maybes
- Enums?
- Removing Strings for internal use. I.e. object ids in Python. Try using i32 instead.
- Never return a null pointer? Only use pxs_Var(null)