Commit Graph

203 Commits

Author SHA1 Message Date
Thakee Nathees
4d46930d1b instance and class type cleaned
this is a part of the class implementation. In this commit classes
and instances type were completely cleaned and prepared for a new
implementation. Native class registering mechanism were fully refactored
and made it much simpler.
2022-04-20 14:40:08 +05:30
Thakee Nathees
29be68fc86 classes were removed temproarly
to implement classes properly and support methods I had to remove
the older class syntax temproarly.
2022-04-20 13:54:45 +05:30
Thakee Nathees
1f8a71fe0a dlfcn removed and minor code cleanups 2022-04-20 13:08:14 +05:30
Thakee Nathees
88c45cccac function and else if keywords are changed.
- `func` keyword has change to `function`.
- `elsif` changed to `else if`
2022-04-17 07:33:40 +05:30
Thakee Nathees
c67572d552
names buffer merged with constant pool (#202)
a buffer of classes for primitive types added to PKVM, but they'll
not be initialized in this commit.

names buffer and constant pool of a module are now merged (just like
java's constant pool).

VM's core libraries and scirpt modules are merged into a single
map name modules.

creating a new module doesn't register it automatically anymore,
you need to call pkRegisterModule(...) each time.

newModule() function refactored with a simpler interface, we're not
setting path or registering globals anymore, the caller is
responsible for that.
2022-04-17 06:47:27 +05:30
Thakee Nathees
d8d229b0fb tcc build supported.
inorder to support tcc, I need to remove some math functions that
tcc on windows doesn't support (v language is using openlibm).
This is temproarly and the math functions should be moved to it's
own math script module once the import system is refactored.

TCC build tested with the binary downloaded from --
https://download.savannah.gnu.org/releases/tinycc/tcc-0.9.27-win64-bin.zip
(download link from the https://bellard.org/tcc/ website), and this
should be added to the CI workflow.
2022-04-16 09:37:38 +05:30
Thakee Nathees
5aee9616c1 modules were moved to cli/modules
now it's easier to re-use cli modules into another hosting
application and a little python script have added to generate
native api to support native extension library.
2022-04-15 19:30:26 +05:30
Thakee Nathees
ddc8bd8197 yet another refactor.
This commit doesn't change any behavior, just moving the code
around cleaning things.
2022-04-15 09:58:02 +05:30
Thakee Nathees
b285336895 fiber stored as register variable
and the benchmark script refactored, and now it will generate an
html report
2022-04-14 08:01:16 +05:30
Thakee Nathees
8d062e38b8 closures were completely added. 2022-04-13 14:31:57 +05:30
Thakee Nathees
2e1d8d89dd lexical scoping support using upvalues 2022-04-13 09:20:56 +05:30
Thakee Nathees
e0852139b9 exprName re-defined
The exprName function re-defined into a cleanner way, and now it's
possible to override builtin functions, this will come in handy
to introduce upvalues.
2022-04-13 08:40:37 +05:30
Thakee Nathees
227be9aab5 local variable miss-calculation bug fix
for nested functions the count of locals and the required stack size
are miss-calculated, ie. No new count wasn't started for inner functions
it makes the required stack size greater than or equal to it's enclosing
functions stack size.
2022-04-12 16:29:20 +05:30
Thakee Nathees
3feb9ac723 functions are replaced with clsoures
Every occurrence of function as first classes citizen is replaced
with closures yet upvalues are still to do.
2022-04-12 07:28:33 +05:30
Thakee Nathees
20b99c60b3 script renamed to modules
The name script is missleading as it only refering to the scripts
(the files that contain the statements) where as it could also
be the native module objects containing collection of native
functions.

After this commit, native functions can also have set owner module
and it won't be as confusing as before.
2022-04-11 14:08:00 +05:30
Thakee Nathees
8c039b5d77 fn, cls moved to constants buffer
functions and classes are moved to constant buffer, and forward
names are resolved for globals.
2022-04-11 00:02:21 +05:30
Thakee Nathees
05a516d47d literals renamed to constants
Since the functions and classes will be moved to the constants buffer
rather than having their own (function buffer and class buffer) the
rename is essential, and to make the refactoring process easier all the
intermediate steps are done with its own pr.
2022-04-10 06:11:50 +05:30
Thakee Nathees
9dade8313f closure, upvalue type were added.
It's just the types that were added and only object creation
and garbage collection of that types are implemented, the
reset of the implementation is not part of this commit.
2022-04-09 00:40:50 +05:30
Thakee Nathees
c1d36c666c debug dump are now directly prints to stdout 2022-04-07 23:09:30 +05:30
Thakee Nathees
c89db94256 parsing context are moved to struct Parser 2022-04-07 08:58:51 +05:30
Thakee Nathees
9b7ad74a7c pk_var changed to pk_value and some minor changes 2022-04-07 06:13:29 +05:30
Thakee Nathees
dfd1c5a612 false positive assertion crash -- fixed 2022-04-06 19:08:07 +05:30
Thakee Nathees
2bc09f41e5 Stack miss calculation bug fix & minor changes 2022-04-06 08:56:51 +05:30
Thakee Nathees
967cf3a0ed name interpolation implemented
The below is a valid syntax:
  name = "World"
  print("Hello $name!")
2022-04-05 10:22:23 +05:30
Thakee Nathees
0d87403f6b string interpolation implemented (1/2)
expression interpolation have implemented (ie. "a${b}c")
name interpolation yet to do (ie. "a $b c")
2022-04-05 08:27:46 +05:30
Thakee Nathees
168edb5e4c
tco last call check were changed to a cleaner method (#177) 2022-04-04 20:37:29 +05:30
Thakee Nathees
cda9cc75ca
un used functions were removed (#174)
In addition tail call is not enabled for functions that
doesn't return the last call (caused a bug).
2022-04-03 21:03:12 +05:30
Thakee Nathees
5e67403a9d
Compile time stack size wrong calculation fixed. (#173)
* and / or logic refactored

* and / or opcodes added and stack size bug fixed

- and / or keywords were added.
- class construction function not poping the class instance
  from the stack (fixed).
2022-04-03 16:59:03 +05:30
Thakee Nathees
42883eb783
copyright notice updated for 2022 (#172) 2022-04-03 00:09:57 +05:30
Thakee Nathees
f3b220106c
Function type validation was always passed - fixed (#170) 2022-03-31 22:57:53 +05:30
Thakee Nathees
6e02e021bc
some comments were added (#169) 2022-03-30 23:43:18 +05:30
Tim Gates
bcfa4de706
docs: Fix a few typos (#167)
There are small typos in:
- README.md
- cli/modules.c
- src/pk_compiler.c
- src/pk_core.c
- src/pk_opcodes.h
- src/pk_vm.h
- tests/benchmarks/benchmarks.py

Fixes:
- Should read `temporary` rather than `temproary`.
- Should read `stdout` rather than `stdour`.
- Should read `sprintf` rather than `spritnf`.
- Should read `splitted` rather than `splited`.
- Should read `script` rather than `scirpt`.
- Should read `reported` rather than `repored`.
- Should read `reduce` rather than `recude`.
- Should read `performance` rather than `preformance`.
- Should read `instead` rather than `insted`.
- Should read `default` rather than `defalt`.
2022-03-30 23:20:44 +05:30
Victor Akpan
9635c223b1
Added new Math functions (#160)
* Added log and round functions to math module

* Added log and round functions to math module

* Added a few math functions

* Static checks

* Maybe this will fix linux

* Fixed errors with styles and tests
2022-03-30 23:14:01 +05:30
Thakee Nathees
025ede86a4
Fix: Main function of native modules were NULL (#161)
This is handled and the crash were fixed
2021-07-03 21:54:36 +05:30
Thakee Nathees
c9ec704c13 repl crash after core-module refactor fixed 2021-07-03 20:46:01 +05:30
Thakee Nathees
89f8b77bb6
imported scripts were initialized (#158) 2021-07-02 21:32:30 +05:30
Thakee Nathees
3ef213b170 native api refactored (#157) 2021-07-01 14:55:53 +05:30
Thakee Nathees
6ad5dfe9f7
native api function improvements (#153) 2021-06-30 12:09:17 +05:30
Victor Akpan
b35b7a48cc
Log and Round Functions (#154)
* Added log and round functions to math module

* Added log and round functions to math module
2021-06-30 11:55:25 +05:30
Derick Alangi
f1bbafaa28
Introduce support for substring function - str_sub() (#152)
This function takes in 3 arguments: the string, the position and the
length (of the substring). As a quick example, a call to the function

`str_sub('c programming', 3, 11)`

will return the string 'programming' as the substring to the string
that is provisioned to the function call.
2021-06-29 18:18:41 +05:30
Thakee Nathees
273a31e588 native types initialization & attribute getters. (#147)
getters/setters native api functions added to the
vm's configurations and native types were initialized.
2021-06-29 00:30:41 +05:30
Jordan Ellis Coppard
794c789fca
add exit() function (#138)
* add exit() function

* add integer range function

* add pr request

squash

* add pr changes
2021-06-26 21:42:54 +05:30
Derick Alangi
e74e209b7c
Add support for hyperbolic & arc trigonometric functions (#126)
Functions added are: `sinh(x)`, `cosh(x)`, `tanh(x)`, `asin(x)`,
`acos(x)`, and `atan(x)`.

In addition, basic tests added in core.pk for these functions.
2021-06-26 18:13:29 +05:30
Derick Alangi
c1cde4c69b
Yet another fix of typos (#128) 2021-06-24 16:47:54 +05:30
Derick Alangi
273fbafa09
Add IS_NUM_BYTE validator to check if number is a byte (#127)
In conjunction with the ASCII char set, a byte should be any valid
character mapping to an integer between -128 to 127 (that is signed
integers as well).

Anything beyond can't fit into a byte hence this can't be a character
but 2 characters.
2021-06-24 16:47:30 +05:30
Thakee Nathees
beaff939bb benchmarks script refactored (#134) 2021-06-24 11:16:51 +05:30
Jordan Ellis Coppard
39c5fba9d9
add elem in map (#121) 2021-06-23 21:03:26 +05:30
Tiago Cavalcante Trindade
6d434db0cb
Add <<= and >>= operators (#119)
* Add <<= and >>=
2021-06-23 19:54:20 +05:30
Thakee Nathees
64bf27674a
in test (ie. elem in container) implemented. (#117)
in keyword will invoke varContains(), the for now the list contains
implemented.
2021-06-23 15:51:59 +05:30
Thakee Nathees
000f4c4fe4
yet another docs update (#115) 2021-06-23 10:51:18 +05:30
Dmitry Guzeev
dbdb43b8ed
Number literal parsing (#106)
* Implement proper number literal parsing

- Scientific notation support
- Correct error handling in cases of invalid digits present in binary or
  hex literals (0b123, 0x013FK).

* Fix style linter issues

* Support +/- in number literal exponent, add tests

- Add tests for scientific notation number literal parsing
- Add support for +/- in scientific notation exponents
2021-06-23 10:30:06 +05:30
Tiago Cavalcante Trindade
792d08eae7
Move fiber functions to module Fiber (#113) 2021-06-23 09:48:15 +05:30
Tiago Cavalcante Trindade
fe45ba3485
Numeric literal starts with decimal point implementation (Fix: #97) 2021-06-23 00:51:19 +05:30
Takashi Idobe
c0f00f6cae
add modeq implementation (#108)
* add modeq implementation

* code review feedback
2021-06-22 17:49:52 +05:30
Thakee Nathees
600f972927 Native types & File object implementations. 2021-06-22 13:31:21 +05:30
Thakee Nathees
41ed7dd991 class implemented 2021-06-21 12:13:37 +05:30
Thakee Nathees
258b64948e yet another minor refactor 2021-06-20 15:53:21 +05:30
Thakee Nathees
4ba3ee2e28 __file__ added and some todos were completed 2021-06-20 09:29:26 +05:30
Thakee Nathees
733f006b03
Merge pull request #95 from ThakeeNathees/pk_doc
[WIP] Docstring extracted and `help()` function added
2021-06-18 15:45:19 +05:30
Thakee Nathees
e1628f1a73 docstring for pocket functions implemented 2021-06-18 14:52:24 +05:30
Derick Alangi
fbcf6fc1a1 use PEEK() so we don't loose reference 2021-06-17 13:43:09 +01:00
Derick Alangi
ac1d825f13 Add support for bitwise NOT (~) operator to pocketlang
Like other bitwise operators like: &, ^, >>, << etc, add support
for the bitwise NOT (~) operator.
2021-06-17 13:40:56 +01:00
Thakee Nathees
d0229a9744 minor refactors for internal documenting. 2021-06-17 01:05:37 +05:30
Thakee Nathees
d8f1ee8fe3
Merge pull request #75 from ekinbarut/master
Changed the elif notation to else if
2021-06-16 14:04:34 +05:30
Alexander Patel
59333177cd pk_core: implement list addition
This commit implements list addition. A new list is allocated, and
the contents of l1 and l2 are concatenated onto the list.

This is done by extending the buffer template macro to support a
`concat` operation, which given an `other` buffer, appends all
elements of the `other` buffer to the end of the `self` buffer.
Allocations are done as needed.

We implement this additional operation, since the alternative would
be to call `reserve()` for each `write()` operation, which doesn't
seem ideal.

Issue: #55
2021-06-15 20:44:10 -07:00
Thakee Nathees
e2d8533e27 Merge pull request #76 from ThakeeNathees/ci-workflow
CI-workflow implemented [1/2]
2021-06-16 03:28:30 +05:30
Thakee Nathees
7ab4e55d6e
bin hex literals implemented (#72) 2021-06-16 00:24:30 +05:30
Ekin
8c51133cf1 Changed the else if notation to elsif, and the keyword count 2021-06-15 12:04:27 +03:00
Ekin
1f91d1ee81 changed the elif notation to else if 2021-06-15 11:27:19 +03:00
Alexander Patel
c58159b63d
Fix typos + rename variables (#73)
* fixed typos in src/

* fixed typos in docs/

* fixed typos in README and tests/

* rename INITALIZE to INITIALIZE

* rename PRIMITE to PRIMITIVE

* rename moudle to module

Co-authored-by: Alexander Patel <acpatel@andrew.cmu.edu>
2021-06-15 13:07:49 +05:30
Alexander Patel
ae4d2971c1 operator oreq and xoreq implemented 2021-06-14 21:36:10 -07:00
Thakee Nathees
72e7522c12 operator andeq implemented 2021-06-14 21:50:07 +05:30
Thakee Nathees
1ea9e4c5c7
Merge pull request #67 from ThakeeNathees/import-name-bug
import name bind bug fix
2021-06-14 10:16:17 +05:30
Thakee Nathees
558241a77b import name bind bug fix
stack curreption (due to stack missing parameters)
fixed, and some assertion macros added.
2021-06-14 09:55:18 +05:30
Derick Alangi
f1ac31953a Cleanup some typos from the include/pocketlang.h header file 2021-06-13 19:22:57 +01:00
Thakee Nathees
e90763c878 Merge pull request #65 from xSavitar/attr-range-start-end
Add support for `.start` and `.end` attributes on Range objects
2021-06-13 22:30:16 +05:30
Derick Alangi
ece87384ab Add support for .start and .end attributes on Range objects
This is an attempt to implement `.start` and `.end` on range objects
to fix issue #60.
2021-06-13 17:30:22 +01:00
Thakee Nathees
d7f7c21081
Merge pull request #62 from ThakeeNathees/tco
Tail call optimization implemented
2021-06-13 21:58:36 +05:30
Thakee Nathees
6992f54ef3 Tail call optimization implemented 2021-06-13 21:57:54 +05:30
Derick Alangi
22be6af376 Add support for bitwise XOR, LSHIFT and RSHIFT operators (#63)
This commit addresses issue #54 in an attempt to add more bitwise
operators to pocketlang. Tests have also been written to verify that
the operators indeed works as expected.

To add, I also introduced a macro PK_RIGHT_OP that just aliases the
string "Right operand" which was already getting too hardcoded and
appearing too much in the pk_core.c file.
2021-06-13 20:27:48 +05:30
Derick Alangi
2707c1eec3
Fix #54: Add bitwise OR operator and make it available in PKVM (#59)
* Fix #54: Add bitwise OR operator and make it available in PKVM

Like the bitwise AND, this is an implementation for pocketlang to
support the bitwise OR operation. In addition, updated "value" ->
"result" in other operation to correctly reflect the container's
purpose. It's indeed the result after the operation, which is a value
too.

In addition, add tests for bitwise AND (&) and bitwise OR (|). Add a
print statement in test file with message that all tests passed with
no errors.

* Fix typo in comment

* Cleanup fixes
2021-06-13 09:43:05 +05:30
Thakee Nathees
17df5eb1e4 disassemble implemented 2021-06-12 16:34:10 +05:30
Derick Alangi
15716de9ce Fix #56: Implement the cos() and tan() math functions
I've also written tests in the corresponding test files, please have
a look. But on the command line (after compiling the source), do:

>>> from math import *
>>> print(cos(1))
[ results will be displayed here ]
>>> print(tan(1))
[ results will be displayed here ]
2021-06-11 18:14:20 +01:00
Thakee Nathees
749456e215 some (minor) code cleanups 2021-06-11 13:16:55 +05:30
Thakee Nathees
9fdab23a94 core attributes refactored and added tests 2021-06-10 23:12:04 +05:30
Derick Alangi
04c333a15e
Set pointer to first byte of mem block when realloc()'d (#48)
* While reading various files in the repo, just going ahead to
clean up some typos (for clarity of text).

* When calling `realloc()`, let the pointer be returned to the
first byte of the memory block after resize. Compiler warns against
not doing this too.

* In addition, rename the file uitls.c to "utils.c" which seems to
be the correct name in this case.

NOTE: I recompiled and tested the `./pocket` intepreter and it still
works as expected.
2021-06-10 04:10:24 +05:30
Thakee Nathees
49c1fec85f
REPL implementation. (#47) 2021-06-09 16:12:26 +05:30
Derick Alangi
1a60646e38
Fix minor typos, while reading codebase (#46)
* Fix minor typos, while reading codebase

* Fix typo in common.h comment

* Fix typo in src/common.h
2021-06-08 22:19:58 +05:30
Thakee Nathees
9901d4d441 REPL refactor [3/3] 2021-06-08 19:32:43 +05:30
Thakee Nathees
fdf685731d refactor for repl support [2/3] 2021-06-07 20:00:35 +05:30
Thakee Nathees
3092118008 Merge pull request #42 from ThakeeNathees/fiber-docs
fiber documentations
2021-06-07 07:20:06 +05:30
Thakee Nathees
3558a1994a fiber documentation written 2021-06-06 19:48:47 +05:30
Thakee Nathees
8800c1baf0 Merge pull request #41 from ThakeeNathees/fiber-vm
Fiber implemented.
2021-06-06 07:46:43 +05:30
Thakee Nathees
e1711b1c9d fiber implemented. 2021-06-06 03:10:58 +05:30
Thakee Nathees
284232c8c6 minor parser refactor for repl 2021-06-05 18:50:53 +05:30
Thakee Nathees
0bebeaafdf some style guides were enforcde.
- according to https://github.com/mcinglis/c-style
2021-06-04 13:26:50 +05:30
Thakee Nathees
f9bf0c1b9c more comments written throught out the source 2021-06-03 07:40:07 +05:30
Thakee Nathees
2c1468f0e8 Merge pull request #37 from ThakeeNathees/bug-fixes
controlflow bugs fixed
2021-06-02 19:53:04 +05:30
Thakee Nathees
db0f4ebb5e controlflow bugs fixed 2021-06-02 17:32:13 +05:30
Thakee Nathees
3b36e9002e documentations updated 2021-06-02 09:13:56 +05:30