Calvin Rose
1bb9a9368b
Make sure winsock2.h is included before windows.h
...
This should be true in the normal build, and especially in the
amalgamated build.
2020-05-16 12:41:26 -05:00
Calvin Rose
7a84fc4742
Fix infinite loop in some cases.
...
Problem - reusing a tainted variable without reinitializing.
2020-05-16 08:28:50 -05:00
Calvin Rose
00451777fe
Add meson builds to sourcehut CI.
2020-05-12 08:46:26 -05:00
Calvin Rose
3100080a50
Add NO_UMASK and NO_REALPATH config options.
2020-05-10 23:07:54 -05:00
Calvin Rose
e013381e72
Conditionally ignore pclose as well as popen.
2020-05-10 21:06:52 -05:00
Calvin Rose
235605bfa4
1.9.0 Release.
...
Fix up some documentation as well.
2020-05-10 16:45:33 -05:00
Calvin Rose
e8b3587946
Silence clang warnings about missing initializers.
2020-05-10 16:00:55 -05:00
Calvin Rose
9040ac6a0c
Silence some warnings about pointer signedness.
2020-05-09 23:58:45 -05:00
Calvin Rose
b1f76139a7
Add several configurable options - #379
2020-05-09 12:00:01 -05:00
Calvin Rose
7125b3430c
Merge pull request #383 from andrewchambers/rngdoc
...
Improve rng doc string accuracy.
2020-05-09 11:35:01 -04:00
Andrew Chambers
057486cf56
Avoid setting O_CLOEXEC on stdin/stdout/stderr.
2020-05-09 22:26:50 +12:00
Andrew Chambers
f94e726271
Improve rng doc string accuracy.
2020-05-09 12:11:08 +12:00
Calvin Rose
95660002e1
fix include sys/fcntl.h to fcntl.h
2020-05-07 14:54:03 -05:00
Calvin Rose
95c669389b
Merge pull request #378 from andrewchambers/tweak
...
Tweak comment, remove extra include.
2020-05-07 10:33:19 -04:00
Calvin Rose
084fc9776d
Use SOCK_CLOEXEC correctly.
2020-05-07 07:55:08 -05:00
Andrew Chambers
1498fdb7b0
Tweak comment, remove extra include.
2020-05-07 20:44:04 +12:00
Calvin Rose
79c3139748
Check for SOCK_CLOEXEC.
...
Not available on all platforms.
2020-05-06 23:44:01 -05:00
Calvin Rose
bdd64f5656
Merge branch 'master' of github.com:janet-lang/janet
2020-05-06 18:52:57 -05:00
Calvin Rose
dc3e9fb77c
Add CLOEXECs when getting file descriptors ( #374 )
...
This should help address leaking file descriptors in multithreaded
programs. There are a few cases where a race can occur though, as
some apis (fopen and mktemp).
2020-05-06 18:33:25 -05:00
Andrew Chambers
06c28f3a4d
Set the CLOEXEC flag on file/temp files.
2020-05-06 11:16:08 +12:00
Calvin Rose
688fe6db5e
Merge pull request #370 from andrewchambers/spawnrace
...
Fix (mostly nonsensible) race condition in multi threaded processes
2020-05-05 10:33:41 -04:00
Calvin Rose
125cd222bb
Pretty print tab characters as \t.
2020-05-05 00:03:12 -05:00
Andrew Chambers
a0f351c9fa
Fix (mostly nonsensible) race condition in multi threaded processes using os/execute with os/setenv.
2020-05-05 16:03:13 +12:00
Calvin Rose
8b5663e385
Merge pull request #363 from uasi/fix-typo-in-doc
...
Fix typo in doc
2020-05-02 12:11:18 -04:00
Calvin Rose
8b5bcaee3c
Add lenprefix combinator to pegs.
...
This lets peg match n repeitions of a pattern, where
n is supplied from other parsed input and is not a constant.
2020-05-02 10:39:35 -05:00
Tomoki Aonuma
ca845aa256
Fix typo in doc
2020-05-02 02:36:55 +09:00
Calvin Rose
761ea65d81
Add fiber/roor and allow net/server to take
...
a numeric port.
2020-04-30 23:21:26 -05:00
Calvin Rose
1c0a015cc8
s/WSALastError/WSAGetLastError()/g
2020-04-30 13:26:14 -05:00
Calvin Rose
73989f5cc7
Consolidate windows and posix socket code.
...
Also remove code that ignored sigpipe and instead try
our best to ignore through various platform specific mechanisms.
2020-04-29 21:07:21 -05:00
Calvin Rose
63e9790123
Fix flag check in pretty print.
2020-04-28 10:00:24 -05:00
Calvin Rose
c98e1f3cae
Update documentation for net/read and net/chunk.
2020-04-27 19:26:05 -05:00
Calvin Rose
41894eb285
Add docstrings to net.c
2020-04-26 14:11:47 -05:00
Calvin Rose
3535efd977
Remove %u format specifiers.
2020-04-26 13:47:36 -05:00
Calvin Rose
f6bd41ada7
Add %M, %m, %N, and %n formatters.
...
These will not truncate long values.
2020-04-26 13:17:28 -05:00
Calvin Rose
d2ebf4b52d
Merge branch 'net'
2020-04-26 12:27:37 -05:00
Calvin Rose
da438a93e0
Restore lexicographic comparison of tuples.
2020-04-24 16:51:04 -05:00
Calvin Rose
a87015598c
Make janet_equals and janet_compare non recursive
...
This makes these operatios use constant stack space rather
than linear stackspace given the size of the inputs. This is important
to prevent certain parser input from causing a stack overflow - in
general, we try to avoid unbounded recursion.
2020-04-24 16:18:31 -05:00
Calvin Rose
c876e63010
Fix overflow in exponent estimation in strtod.c.
...
Found by OSS-Fuzz.
2020-04-21 18:32:59 -05:00
sogaiu
5c162ce588
Add flags to fiber/new error message
2020-04-21 13:47:56 +01:00
Calvin Rose
42c257d0fc
Merge branch 'master' into net
2020-04-19 13:38:51 -05:00
Calvin Rose
5054eb4276
Add JANET_MARSH_UNSAFE flag.
...
This allows unmarshal to optional marshal raw
pointers and cfunctions and send them across threads.
This flag is only exposed in the C API as it is very easy
to misuse and cause segfaults.
2020-04-19 10:56:39 -05:00
Calvin Rose
0d3c6abee8
POLLER -> POLLERR
2020-04-18 19:15:59 -04:00
Calvin Rose
4a693222b4
Port net code to windows.
...
Use winsock2 and WSAPoll. Not the most high performance
solution but should work well.
2020-04-18 19:14:38 -04:00
Calvin Rose
2904c19ed9
Switch to poll from select.
...
Simpler and more flexible interface, and also lets
us use epoll more easily on linux, which is the most important
plantform to optimize for network performance.
2020-04-18 15:22:20 -05:00
sogaiu
aebb8010d4
Tweak unknown signal handling
2020-04-18 08:26:16 +01:00
Calvin Rose
4ac382e553
Add alias JANET_SIGNAL_EVENT.
2020-04-17 16:27:02 -05:00
Calvin Rose
596111c988
Merge branch 'master' into net
2020-04-17 15:08:26 -05:00
Calvin Rose
fbe903b277
Add janet_cfuns_prefix to janet.h
...
Makes adding functions to the current environment easier.
2020-04-17 13:37:52 -05:00
Calvin Rose
8a89e50c13
:octal-permissions -> :int-permissions ( #347 )
2020-04-16 19:05:00 -05:00
Calvin Rose
a147ea3e80
Use JANET_PRETTY_DICT_LIMIT.
2020-04-16 19:01:49 -05:00
Calvin Rose
67fb2c212f
Address #348
...
Remove extreneous data from lockfile.
2020-04-16 18:44:21 -05:00
Calvin Rose
bea76e8e08
Merge pull request #345 from sogaiu/checks-after-allocs
...
Check some *alloc return values
2020-04-15 19:45:39 -05:00
Calvin Rose
f5433dcaa4
Fix core getline that doesn't use replacement.
2020-04-15 19:45:17 -05:00
Calvin Rose
ef3b953a42
Fix docstrings.
2020-04-14 21:32:50 -05:00
Calvin Rose
605a205008
Range errors for slice
-likes include negatives.
...
Makes for less confusing errors when calling something
like `(slice [] 0 -10)`.
2020-04-14 21:27:48 -05:00
Calvin Rose
71882475d6
janet_formatb -> janet_formatbv, new janet_formatb
...
The old function was not very useable. In the likely
case that there is no external code using this
(not well documented/janet_formatc is more convenient), we
can change this.
2020-04-14 07:38:41 -05:00
sogaiu
a3d29a15df
Check some *alloc return values
2020-04-14 10:22:45 +01:00
Calvin Rose
a09112404d
Add better error message on unexpected eos.
...
Show innermost open delimiter
2020-04-13 23:18:27 -05:00
Calvin Rose
93fc11ea21
Add edefer.
...
Also improve error messages from vm internal errors.
(Show bad value, not its type).
2020-04-13 20:24:11 -05:00
Calvin Rose
6c4ed0409d
Add emscripten check to features.h.
2020-04-12 14:13:55 -05:00
Calvin Rose
8bc2987a71
(struct ...) with duped keys will use last value.
2020-04-11 13:42:25 -05:00
Calvin Rose
5ed76f197a
Differentiate error from resume and error from resumed fiber.
2020-04-10 18:29:10 -05:00
Calvin Rose
b75a22b753
Make JANET_FRAME_SIZE consistent across architectures.
...
This means unmarshalling fibers should work across arches.
2020-04-06 12:41:56 -05:00
Calvin Rose
72beeeeaaa
Move funcenv verification to runtime.
...
Lazy verification makes it easier to not leave funcenvs
in an invalid state, as well as be more precise with the validation.
We needed to verify the FuncEnvs actually pointed to a stack frame if
they were of the "on-stack" variant. There was some minor checking
before, but it was not enough to prevent func envs from pointing to
memory that was off of the fiber stack, overlapping stack frames, etc.
2020-04-06 10:58:47 -05:00
Calvin Rose
c3c42ef56f
Fix case for #336 .
...
Also consider ascii 127 (delete) non-printable for string escapes.
2020-04-06 00:11:22 -05:00
Calvin Rose
a3c55681b2
Address #336 case 6
2020-04-05 21:39:39 -05:00
Calvin Rose
fcc610f539
Address #336 case 4
...
Set funcenv fields to NULL before any possible panics.
2020-04-05 19:18:59 -05:00
Calvin Rose
5bbd507858
Address #336 case 3
...
Fix error condition for bad abstract types - don't return NULL, panic.
2020-04-05 17:38:14 -05:00
Calvin Rose
c4ca0490ee
Prevent unmarsal DOS in arrays,buffers,tables,and structs.
2020-04-05 08:16:40 -05:00
Calvin Rose
b145d47863
Address cases 1 and 2 of #336 .
...
Mainly related to not checking ints < 0.
2020-04-05 08:01:18 -05:00
Calvin Rose
87ecdb8112
Change \UXXXXXXXX -> \UXXXXXX and check codepoint max.
...
No need to add two extra leading zeros, as the max unicode
codepoint is 0x10FFFF.
2020-04-05 07:09:53 -05:00
Calvin Rose
ae70a03383
Address #306 - Add unicode escapes.
...
Unicode escapes have the same syntax as go - \uXXXX or \UXXXXXXXX.
2020-04-04 21:46:08 -05:00
Calvin Rose
5b82b9e101
Address compiler warning on macos.
2020-04-04 13:34:16 -05:00
Calvin Rose
f089b2001f
Add several math functions to the math module.
2020-04-04 12:52:34 -05:00
Calvin Rose
8275da63fb
Address #331 - Add :octal-permissions
2020-04-03 18:29:45 -05:00
Calvin Rose
1aeb317863
Revise, revise, revise, and proofread.
2020-04-03 17:04:05 -05:00
Calvin Rose
b49b510732
Update os/link docstring.
2020-04-03 16:58:45 -05:00
Calvin Rose
a0d61e45d5
Change os/perm-str to os/perm-string.
2020-04-03 15:23:29 -05:00
Calvin Rose
95f1ef7561
Add umask support for windows, and allow parsing mode strings.
2020-04-03 15:14:11 -05:00
Calvin Rose
edb2fab64c
Merge branch 'master' of github.com:janet-lang/janet
2020-04-03 15:04:39 -05:00
Calvin Rose
464fb73d83
Add os/perm-int and os/perm-str.
...
This helps address #331 . While we could also
make os/stat return an integer, we don't do that yet
for api breakage reasons.
This also lets us use this logic on other functions
that take permission strings.
2020-04-03 15:02:12 -05:00
Andrew Chambers
3c2b1baff2
Add os/umask.
2020-04-02 23:33:50 +13:00
Calvin Rose
789ef3608b
Make format.
2020-04-01 08:54:01 -05:00
Calvin Rose
e4ea8bc867
Fix features for bsd.
...
Don't define XOPEN_SOURCE unless we actually need it.
2020-03-30 15:38:03 -05:00
q66
1e28876494
Fix typo in big endian unmarshalling code
...
This was subtly breaking everything.
2020-03-30 13:38:49 -05:00
Calvin Rose
655633ef34
Tweak docstring.
2020-03-25 18:00:15 -05:00
Calvin Rose
3d1de237f6
Several changes to the os module.
...
- Add os/symlink
- Add os/realpath
2020-03-24 19:47:21 -05:00
Calvin Rose
6a63b13d69
Fix os/link docstring - Address #323
2020-03-21 16:18:58 -05:00
Calvin Rose
3aca5502dc
Allow :dst to be nil to set tm_isdst to be -1.
2020-03-18 22:23:27 -05:00
Calvin Rose
665f4bf248
Remove windows MSVC warnings about _stat.
2020-03-18 21:37:55 -05:00
Calvin Rose
b76ff3bdfc
Fix omission of daylight savings time in mktime
...
Since with daylight savings times, certain times
are ambiguous (the hours before and after the switch), mktime
needs to allow reading a dst flag.
2020-03-18 21:23:35 -05:00
Calvin Rose
00450cd9db
try and remove warnings on windows, format os.c.
2020-03-18 21:15:50 -05:00
Calvin Rose
c344a543b0
Merge pull request #318 from leahneukirchen/mktime
...
os/date fixes and os/mktime
2020-03-18 20:59:08 -05:00
Calvin Rose
eee8338064
Merge pull request #319 from leahneukirchen/lstat
...
os/lstat and os/readlink
2020-03-18 17:58:32 -05:00
Calvin Rose
3b5183a74e
Fixes #316 : os/execute should return non-zero on signals
...
Behave more like shells, and catch segfaults.
2020-03-18 17:49:20 -05:00
Leah Neukirchen
3ee43c3abb
add os/mktime, an inverse to os/date.
2020-03-18 23:45:02 +01:00
Leah Neukirchen
efdb13f0c7
os/date: allow negative timestamps.
...
Why not? Even on 32-bit time_t systems this lasts until late 1901.
2020-03-18 23:45:02 +01:00
Leah Neukirchen
f013c6e48d
os/date: check the second argument truthy, not the third.
2020-03-18 23:45:02 +01:00
Leah Neukirchen
6e67899401
Add os/readlink.
2020-03-18 20:05:48 +01:00
Leah Neukirchen
381dd1ce98
Add os/lstat.
2020-03-18 20:05:48 +01:00
Calvin Rose
b0d8369534
Increase reference accuracy of on-stack close envs.
...
Using a bitset to indicate which stack values are upvalues, we
can more accurately track when a reference to a stack value
persists after the stack frame exits.
2020-03-18 09:30:10 -05:00
Calvin Rose
de4f8f9aaf
Marshal alive fibers in func envs as detached.
...
This will help with marshaling fibers.
2020-03-17 20:53:11 -05:00
Calvin Rose
fac47e8ecb
When marshalling a closure, try to detach funcenvs
...
If possible, this will reduce the need to marshal fibers
in many cases. Also add this logic to the GC so holding a closure
that originally came from a fiber that crashed does not cause that fiber
to hang around forever.
2020-03-17 18:55:32 -05:00
Calvin Rose
4a05b4556e
Fix MSVC build warning.
2020-03-14 12:02:31 -05:00
Calvin Rose
c074615550
Revert to 9 char permission strings on windows.
2020-03-14 12:00:11 -05:00
Calvin Rose
bac2b74b3d
Add os/chmod.
2020-03-14 11:57:04 -05:00
Calvin Rose
a3aaa6634d
Use separate registry table for abstract types.
...
This avoids overloading the registry table, which is intended
for names of c functions.
2020-03-14 10:25:39 -05:00
Calvin Rose
6a3a983f43
Expose abstract type definitions in janet.h
...
This makes certain operations easier, and allows
more access to built in APIs.
2020-03-14 10:12:47 -05:00
Calvin Rose
0600b32908
Fix docstring for os/cd - Fixes #307
2020-03-13 15:01:48 -05:00
Calvin Rose
a3d4ecddba
Address #301
...
Incorrect bounds checking and offset calculation in buffer/blit.
2020-03-08 20:44:03 -05:00
Calvin Rose
65403ec9fe
Merge branch 'master' into net
2020-03-07 14:06:51 -06:00
Calvin Rose
3d3d314fb7
Remove warning about math.h on aarch64 ubuntu gcc.
2020-03-07 14:05:28 -06:00
Calvin Rose
90b3730a0a
Merge branch 'master' into net
2020-03-07 13:34:13 -06:00
Calvin Rose
714bd61d56
Address #300
...
Check for empty capture stack in replace rule.
2020-03-06 10:05:20 -06:00
Calvin Rose
16202216b2
Address #291
...
When resuming a fiber with a child, the root fiber was set incorrectly.
2020-03-05 19:18:45 -06:00
Calvin Rose
8f1527712e
Merge branch 'master' into net
2020-03-05 18:08:35 -06:00
Calvin Rose
6bc67b70a6
Address #294
...
Correct invalid format string, which masked a panic
with another, less useful panic.
2020-03-03 22:26:26 -06:00
Calvin Rose
2349ea9405
Update docs for buffer/push-word
...
Should be little endian, not big endian.
2020-03-01 12:05:24 -06:00
Calvin Rose
b17bf259f7
Fix typo: destory -> destroy
2020-02-28 09:04:28 -06:00
Calvin Rose
6b093bdcca
Address #288 and partially #287
...
The %q formatter for janet_formatc now expects a Janet, not a JanetString or
JanetSymbol or JanetKeyword.
Also fix some reference counting issues with threads when destroying
threads, which should fix #287 's
SIGSEGV. Still fails to send messages sometimes, though.
2020-02-27 17:58:17 -06:00
Calvin Rose
8262290bff
Improve C string format (janet_formatc, janet_panicf)
...
The supported formatters here now match up more with
the string/format, buffer/format, printf, eprintf, etc.
2020-02-25 20:05:45 -06:00
Calvin Rose
738490e674
Allow function that takes 1 argument to fiber/new.
...
This allows reuse of closures when creating many fibers.
2020-02-23 14:47:29 -06:00
Calvin Rose
6a13703e32
Add signal
and fiber/can-resume?
.
...
These additions, along with the change that user signals 0-4 cannot
be resumed, allow delimited continuation semantics, while repsecting
existing forms like `defer`, `with`, `with-vars`, etc.
2020-02-23 13:31:27 -06:00
Calvin Rose
aaabca6fc7
Make flychecker handle more kinds of defs.
...
This should help when redefining certain forms. Will also
not do functional arity checking against nil forms, as that
is the default value when a def doesn't evaluate.
2020-02-21 21:20:40 -06:00
Calvin Rose
4b440618d6
Correct docs for type form.
2020-02-21 20:22:43 -06:00
Calvin Rose
01a79dc965
Remove extra functionality.
2020-02-20 20:10:03 -06:00
Calvin Rose
0df220780a
Fix issues with #282
...
Bad handling of write errors, as well as janet_root_fiber().
2020-02-20 19:54:31 -06:00
Calvin Rose
a360cb7922
Update marshal to take 3 arguments.
2020-02-15 10:04:44 -06:00
Calvin Rose
f4a46ba6ea
Add methods to streams.
...
This makes streams polymorphic with files in many cases.
printf family functions still need porting.
2020-02-12 09:32:41 -06:00
Calvin Rose
79bb9e54d5
Remove direct references to file descriptors.
...
If a descriptor is freed by the Janet code, other
uses of that descriptor, say in the event loop, need
to know that it has been closed.
2020-02-11 08:57:44 -06:00
Calvin Rose
8ae6ae65a1
Merge branch 'master' into net
2020-02-09 20:00:58 -06:00
Calvin Rose
f4d7fd97f6
Working TCP echo server and client.
...
Required a few changes to APIs, namely janet_root_fiber()
to get topmost fiber that is active in the current scheduler.
This is distinct from janet_current_fiber(), which gets the bottom
most fiber in the fiber stack - it might have a parent, and so cannot
be reliably resumed.
This is the kind of situation that makes symmetric coroutines more
attractive.
2020-02-09 20:00:50 -06:00
Calvin Rose
031a9894b0
Update inlining options for next
and resume
.
2020-02-08 13:03:03 -06:00
Calvin Rose
7f1f684b21
Merge branch 'master' into net
2020-02-03 20:46:32 -06:00
Calvin Rose
d8d482e433
Merge branch 'master' of github.com:janet-lang/janet
2020-02-03 18:18:29 -06:00
Calvin Rose
3fdc053d6c
Add flush and eflush ( #278 )
...
These functions interact with Janet's dynamically scoped
IO functions in a manner that is more useful the file/flush.
We can still redirect to a buffer without changing our code.
2020-02-03 18:14:32 -06:00
Calvin Rose
eda61455d3
Work on tcp server code.
2020-02-03 09:29:51 -06:00
Josef Pospíšil
00107c092c
Fix next function arity
2020-02-03 15:36:42 +01:00
Calvin Rose
c0d2140d14
Begin net/ module in core.
...
Humble beginnings.
2020-02-01 20:39:54 -06:00
Calvin Rose
333ae7c4f8
Make amalgamtion the default when building.
...
This way we can support fewer build configurations. Also, remove
all undefined behavior due to use of memcpy with NULL pointers. GCC
was exploiting this to remove NULL checks in some builds.
2020-01-28 23:38:52 -06:00
Calvin Rose
163e2a5b22
Add string support to %j format.
2020-01-24 08:52:27 -06:00
Calvin Rose
e36334e14b
Revert issue with removing buffer self print check.
2020-01-23 23:39:49 -06:00
Calvin Rose
28d41039b8
Add mod function to core.
...
The `mod` function is a pair function with `%`, or te remainder
function and is distinct from it. This is taken from common lisp.
2020-01-23 18:54:30 -06:00
Calvin Rose
b8d530da36
Remove file/fileno and file/fdopen.
...
Also fully add call function pointer to
abstract types, including in methods, etc.
2020-01-23 09:01:33 -06:00
Calvin Rose
4fad0714e7
Add janet_gcpressure. Address #269 .
2020-01-22 20:52:35 -06:00
Calvin Rose
ca17eb4a2b
Address #273
2020-01-22 19:01:49 -06:00
Calvin Rose
4fe005e3c3
Add righthand operator overloading.
...
This is like python. Now, we just need to readd fuzzy
comparisons to have what python needs. Overloading
math functions would be neat, too.
2020-01-22 18:59:41 -06:00
Calvin Rose
e179f26d50
Add call function pointer to abstract types.
...
This will allow better JITs, FFIs, DSLs, etc.
2020-01-21 18:22:24 -06:00
Calvin Rose
8db68c04c4
Merge branch 'master' of github.com:janet-lang/janet
2020-01-21 17:48:54 -06:00
Calvin Rose
7c92c64730
Remove mutable operators on inttypes.
...
Mutations break hash table invariants, are a rather
silly performance optimization for a language like Janet.
2020-01-21 17:47:34 -06:00
Andrew Chambers
46f57f5c38
Make file/close idempotent.
...
It is easier to use constructs like defer
with complex control flow if it is safe to close
a file twice.
2020-01-21 22:03:57 +13:00
Calvin Rose
2dd852da54
Use ATEND macros to add fields to abstract types.
...
This means we can add new properties to abstract types without
breaking old code. We can also make simple abstract types without
needing to add many NULL fields to the type.
2020-01-20 13:06:50 -06:00
Calvin Rose
f4ad627b54
Fix regression in while loops inside each macros.
...
There was a specialization for `(while (not= nil _) ...)` that
was incorrect when the while loop regresses to a thunk.
2020-01-19 16:25:10 -06:00
Calvin Rose
f4077b678a
Allow calling next on abstracts.
...
This will allow the creation of infinte
streams, low cost generators, etc.
2020-01-18 18:09:20 -06:00
Calvin Rose
51678c1aba
Extend power of the each form
...
This changes the implementation of the `next` function which
is now used to implement each. This let's us iterate over
more types, not just tables and structs.
2020-01-18 17:55:07 -06:00
Calvin Rose
bbd7355313
Merge pull request #259 from andrewchambers/futureproofhash
...
Make hash api more future proof.
2020-01-18 09:45:47 -06:00
Calvin Rose
9d8af7355f
Improve getline.
2020-01-18 00:30:46 -06:00
Calvin Rose
a8e4c4bed0
Add special forms and sort completions.
...
Also fix case when no completion is needed.
2020-01-18 00:17:08 -06:00
Andrew Chambers
344f0b743d
Make hash api more future proof.
2020-01-17 17:25:40 +13:00
Calvin Rose
23c7c3bf1c
Allow disabling keyed hash function (prf) in conf
...
In some cases, one might want to disable what is currently
SipHash for speed / better security mechansims. For example, using
red black trees for caches rather than hash tables.
2020-01-16 21:06:03 -06:00
Calvin Rose
3d117804dd
Merge branch 'master' into HEAD
2020-01-16 20:08:34 -06:00
Calvin Rose
77bb0ebe3f
Add limits to format to discourage huge prints.
...
This should make system crashing prints happen less often in repl.
Instead, display a ...
2020-01-16 18:57:01 -06:00
Calvin Rose
174ff87946
Change printing of abstracts with tostring in pp
...
This change makes pretty printing not hide "abstractness".
2020-01-16 18:10:17 -06:00
Andrew Chambers
ea02b2fde9
Use siphash for string hashing.
...
The hash key still needs to randomly initialized
for the security advantage, but this patch is a
step closer to avoiding hash based DOS.
Further work may including exposing the raw hash
function for use by abstract types who also choose to
implement hash.
2020-01-17 12:06:55 +13:00
Calvin Rose
bc2bac8cd3
Fix memory issue in allocating decode buffer.
...
Since the decode table is currently a single table
per thread, we just make it a thread local to avoid
issues.
2020-01-15 19:58:14 -06:00
Calvin Rose
b567ece401
Address #252
...
Add repeat form (instead of exactly).
2020-01-14 19:58:03 -06:00
Calvin Rose
04579664fd
update parse.c
2020-01-12 22:43:39 -06:00
Calvin Rose
2df8660f8b
Avoid buffer overrun
...
On very long binding names > 256 characters, a buffer overrun would be
trigger in janet_cfuns. Not a huge issue, since this is not really code
that would ever be user facing, but we can fix this.
2020-01-12 11:31:41 -06:00
Calvin Rose
a68ee7aac6
Update Copyright 2020.
2020-01-12 10:50:37 -06:00
Calvin Rose
0e7cf51890
Fix MSVC warnings.
2020-01-12 10:19:51 -06:00
Calvin Rose
b54d9725d8
Fix MSVC errors.
2020-01-12 10:18:03 -06:00
Calvin Rose
3d40c95e80
Add ability to Janet signal from C functions.
...
While C functions are not re-entrant, signaling from a C function
can be used to implement async returns. When resuming a fiber that
signalled from within a C function, the fiber is started after the
instruction that emitted the signal. The resume argument is used
as the return result from the c function.
2020-01-10 20:44:16 -06:00
Calvin Rose
ed5027db5d
Address #242
...
Synchronize critical sections in setenv/getenv/environ.
2020-01-06 22:41:18 -06:00
Andrew Chambers
ec1a06cfaf
Optional default value for os/getenv.
2020-01-07 11:21:05 +13:00
Calvin Rose
212aceedc6
Fix useless type conversion.
2020-01-02 22:12:07 -06:00
Calvin Rose
e6f897f4ef
Merge branch 'master' of github.com:janet-lang/janet
2020-01-02 22:10:13 -06:00
Calvin Rose
6c7f376410
Try to remove potential overflow bugs.
...
Also make integer to size_t casts explicit rather than relying on
int32_t * sizeof(x) = size_t. This is kind of a personal preference for
this problem.
2020-01-02 22:08:17 -06:00
Calvin Rose
e93e237c67
Merge pull request #236 from andrewchambers/scratch_calloc
...
Add scratch calloc.
2020-01-02 20:29:10 -06:00
Calvin Rose
a2c45a697b
Address #234 in array.c
2020-01-02 20:27:38 -06:00
Andrew Chambers
acdbf8911c
Add scratch calloc.
2020-01-03 12:10:17 +13:00
Calvin Rose
a15d841b5b
Address #232
...
Fix segfault on macro arity mismatch in compile.c by adding missing return statements.
2019-12-31 11:33:03 -05:00
Calvin Rose
75bb8fbcd1
Amalg script included janet.h before test macros.
2019-12-30 22:08:12 -05:00
Calvin Rose
9cb25ad7b1
Remove some feature test macros.
...
_BSD_SOURCE is deprecated and not needed.
2019-12-30 21:30:13 -05:00
Calvin Rose
f361830cb2
Update feature test macro in line.c
2019-12-30 20:24:40 -05:00
Calvin Rose
9dd152dc28
Add features.h for feature test macros.
...
Because we use an amalgated build, feature
test macros should be set in a single file that
is included before any other headers, and is placed
at the top of the amalgamated build.
2019-12-30 19:06:15 -05:00
Calvin Rose
2ba4337e6f
Remove all feature test macros from janet.h
...
This should help improve compatibility with other C code.
2019-12-30 15:12:17 -05:00
Calvin Rose
48fcd927ab
Merge branch 'master' of github.com:janet-lang/janet
2019-12-30 14:26:38 -05:00
Calvin Rose
407d8af026
Address #233
...
Move _POSIX_C_SOURCE to internal header.
2019-12-30 12:31:26 -05:00
Calvin Rose
d0570b55b1
Merge pull request #231 from andrewchambers/tempfile
...
Add file/temp.
2019-12-29 20:00:17 -05:00
Calvin Rose
a964a95c1e
Fix warnings on BSDs.
2019-12-29 19:53:35 -05:00
Andrew Chambers
c2f8441572
Add file/temp.
2019-12-30 12:00:35 +13:00
Andrew Chambers
2bebace8eb
Extend file api to allow creating and checking.
2019-12-30 04:02:46 +13:00
Calvin Rose
022be217a2
Remove ==, not==, and order[<,<=,>,>=].
...
This unifies equality and comparison checking. Before, we had
separate functions and vm opcodes for comparing general values vs.
for comparing numbers, where the numberic functions were polymorphic and
had special cases for handling NaNs. By unfiying them, abstract types
can now better integrate with other number types and behave as keys.
For now, the old functions are aliased but will eventually be removed.
2019-12-28 16:04:15 -05:00
Andrew Chambers
ddc4274314
Expand docs to explain pclose semantics.
2019-12-28 15:24:10 +13:00
Calvin Rose
3492ed6d88
Windows installer pulls version from interpreter.
...
This should make version updates simpler. Also
try an make installer write to ProgramFiles instead
of ProgramFiles (x86) for 64 bit build.
2019-12-19 13:18:46 -05:00
Calvin Rose
e28262f5ab
Add array/fill
...
This function has similar semantics to buffer/fill.
2019-12-19 12:58:11 -05:00
Calvin Rose
94246f7574
Use infinite timeout to indicate non-blocking.
...
Makes more sense than negative numbers.
2019-12-18 16:07:06 -05:00
Calvin Rose
07b0ef1648
Throw error on bad thread creation.
2019-12-18 15:49:57 -05:00
Calvin Rose
6a39c4b91d
Pass thread body explicitly in thread/new.
...
Doing it via thread/send make sense, but is a bit
strange. Passing the body explicitly will make more
sense to API users.
2019-12-18 15:07:46 -05:00
Calvin Rose
b9f0f14e31
Add array/new-filled
...
Similar function signature to buffer/new-filled.
2019-12-18 13:02:50 -05:00
Calvin Rose
4238379552
Use _setjmp/_longjmp on BSDs.
...
This doesn't save the signal mask so should be a bit faster.
2019-12-18 12:18:31 -05:00
Calvin Rose
2b2c1ff917
Get rid of warning on BSDs.
2019-12-15 16:04:43 -06:00
Calvin Rose
c7912249b2
Typo in #ifdef.
2019-12-15 15:56:26 -06:00
Calvin Rose
b8004555ea
Start cleaning up defines in janet.h
2019-12-15 15:41:58 -06:00
Calvin Rose
58ff7f0788
BSD os.c fix with arc4random.
2019-12-15 12:47:12 -06:00
Calvin Rose
f1afc5b0b4
Address #214
...
This adds several common patterns, which are defined in
boot.janet. This essentially gives more primitive patterns
to work with out of the box.
Fix build when JANET_REDUCED_OS is defined.
2019-12-14 20:39:14 -06:00
Calvin Rose
bc8ee207d5
Address #219 .
...
Adds several shorthands to the C API.
2019-12-14 11:31:46 -06:00
Calvin Rose
76342540dc
Add buffer/fill. Address #221
2019-12-14 10:54:29 -06:00
Calvin Rose
56784a34a1
Address #224 - Exposed file flags in janet.h
...
A caller can check if a file is closed with
if (flags & JANET_FILE_CLOSED) ...
2019-12-14 09:03:56 -06:00
Calvin Rose
c3f1b54171
Update jpm path settings.
...
This will make it easier to use jpm as a per-project
management tool, as well as easier to set up individual
module trees.
2019-12-12 19:35:40 -06:00
Calvin Rose
9b7d642c38
Window x86 needs isnan.
2019-12-12 19:04:13 -06:00
Calvin Rose
7c2ae45809
Fix some merge issues.
...
Make everything compile, and test-install pass.
2019-12-12 17:14:36 -06:00
Calvin Rose
36b2f27873
Merge branch 'master' into threads-3
2019-12-12 17:07:03 -06:00
Calvin Rose
b8e02afd1a
Improve error messages in os.c and jpm
...
In os/* functions, show failed path name. In jpm, indicate
a permission issue if we can't stat the file.
2019-12-12 03:20:20 -06:00
Calvin Rose
0fc36aa5d0
Signal to pending threads more often.
2019-12-12 02:19:56 -06:00
Calvin Rose
38f7e256d0
Port threads code to Windows API
...
Can run demo in examples/threads.janet
2019-12-10 20:32:41 -05:00
Calvin Rose
4187c972a3
Switch to multiple buffers per mailbox.
...
Needs less copying.
2019-12-10 13:26:00 -06:00
Calvin Rose
8700a407ce
Update janet_getmethod to better match new get api.
2019-12-09 18:45:05 -06:00
Andrew Chambers
57ccfb692c
Abstract type getters can indicate key absence.
...
This change to the c api allows abstract types to indicate
to the runtime if a key was absent, or if it meant to return nil.
2019-12-09 16:50:33 +13:00
Calvin Rose
eb1c21b0da
Fix some example issue and warnings under -Os.
2019-12-08 12:40:05 -06:00
Calvin Rose
66d82c4513
Add mailbox capacity for back pressure.
...
(thread/send thread msg &opt timeout) can now timeout. Also
changed thread/self to thread/current for better consistency with
fibers, and all blocking operations will by default timeout after 1
second. I think its bad to make things block forerver by default.
2019-12-08 12:30:30 -06:00
Calvin Rose
c9c4424261
Add thread/self.
2019-12-07 17:54:08 -06:00
Calvin Rose
131733549d
Get mailbox API working.
2019-12-07 16:51:00 -06:00
Calvin Rose
ee646dadf2
Merge branch 'master' into threads-3
2019-12-07 12:14:44 -06:00
Calvin Rose
73f5314141
Work on moving to mailbox abstraction.
...
Should be more efficient in the common case.
2019-12-07 12:14:16 -06:00
Calvin Rose
546669082f
New unmarshal proposal.
...
Gives more control over unmarshalling
abstract types. This should also
make it possible/easy to write abstract types that cannot
cause unmarshal to segfault.
2019-12-06 22:12:18 -06:00
Calvin Rose
4a0ee5df7d
Address #215
...
Also update docs for module/expand-path.
2019-12-06 19:54:11 -06:00
Calvin Rose
0e690b4fa0
Add timeout to thread/receive.
...
If provided, throws an error if no message is received before
timeout. Perhaps should return nil?.
2019-12-06 09:21:36 -06:00
Calvin Rose
c804ae9f7c
Update threads.c to avoid a deadlock.
2019-12-06 01:46:23 -06:00
Calvin Rose
dbcceefc20
Fix bad merge.
2019-12-04 22:41:30 -06:00
Calvin Rose
1a4035b02c
Merge branch 'master' into threads-3
2019-12-04 22:39:30 -06:00
Calvin Rose
e908029392
Work on thread/receive doubling as select.
2019-12-04 22:31:01 -06:00
Calvin Rose
fd4220f254
Keep single global pthread_cond_t per thread.
...
This will allow thread/select to be implemented.
Also add thread/close and close method to threads.
2019-12-04 21:44:53 -06:00
Calvin Rose
de6c3d6d70
Simplify structure JanetThread and JanetChannel.
...
Remove JanetThreadShared.
2019-12-04 21:04:43 -06:00
Calvin Rose
49954c7a30
Remove top-level unquote for comptime macro
...
True top level unquote currently requires basically double compilation
as it currently stands. Also, implementing such double compilation
looses all source mapping information. This is a compromise
implementation that makes it clear that this works differently than
a true top-level unquote.
2019-12-04 19:53:13 -06:00
Calvin Rose
2487162ccf
Add top level unquote and macro envs.
...
This improves macros that eval their arguments and
makes them easier to write.
2019-12-04 18:39:13 -06:00
Calvin Rose
4199c42fe2
Add support for nested quasiquotation.
...
This brings Janet more in line with Scheme,
Common Lisp, and Clojure.
2019-12-04 16:40:53 -06:00
Calvin Rose
70328437f1
Add math/rng-buffer.
...
Allow math/seedrandom to use buffer as seed.
2019-12-03 20:33:21 -06:00
Calvin Rose
600bed9f6d
Merge pull request #209 from andrewchambers/cryptorand2
...
Add os/cryptorand.
2019-12-03 19:12:32 -06:00
Andrew Chambers
0ac5b243c7
Add os/cryptorand.
2019-12-04 14:02:37 +13:00
Andrew Chambers
9911c90b1d
Handle missing get case.
2019-12-04 13:58:21 +13:00
Calvin Rose
a1f35e21c7
Merge branch 'master' into threads-3
2019-12-03 18:11:32 -06:00
Calvin Rose
9ccdab0bc7
Merge pull request #208 from andrewchambers/explain_why
...
Explain the logic behind negative slice indices.
2019-12-03 10:42:46 -05:00
Andrew Chambers
a20e956f6d
Explain the logic behind negative slice indices.
2019-12-03 22:05:43 +13:00
Calvin Rose
59668133a2
Merge pull request #206 from andrewchambers/unkown
...
Fix typo.
2019-12-03 03:34:46 -05:00
Andrew Chambers
73db8584e0
Fix typo.
2019-12-03 21:14:00 +13:00
Calvin Rose
cecc7e6b9d
Rename 'get' opcode to 'in', add new 'get' opcode.
...
This makes the names of the opcodes match their implied functionality.
We also rename the C functions to match the opcodes and source level
functionality.
2019-12-02 21:26:28 -06:00
Calvin Rose
8368e55151
Merge branch 'master' into threads-3
2019-12-02 17:49:39 -06:00
Calvin Rose
ac85fca8a1
Fix warnings for appveyor.
2019-12-02 09:07:49 -06:00
Calvin Rose
e5fbe5c557
Change printf to add trailing newlines.
...
Also add prinf and eprinf for old behavior. This
is consistent with the naming of print and prin.
2019-12-02 04:45:03 -06:00
Calvin Rose
474bcd50a1
Add methods to threads.
2019-12-02 04:39:13 -06:00
Calvin Rose
70c8b6838d
Use make-image-dict and load-image-dict in thread/new
...
Rather than messing with janet_core_dictionary, we
instead cache the core enevironment, and pull out the
needed tables from there. This is more flexible, more correct, and
also exposes janet_resolve_core, which can be easily used from the C
API.
2019-12-02 04:15:22 -06:00
Calvin Rose
212479188a
Have separate encode and decode dicts for threads
...
This is more correct and mirrors the way marshal -> unmarshal works.
2019-12-01 21:53:39 -06:00
Calvin Rose
5b1e59b535
Merge branch 'master' of github.com:janet-lang/janet into threads-3
2019-12-01 21:26:22 -06:00
Calvin Rose
779d788efa
Merge pull request #204 from andrewchambers/get_permissive
...
New capi janet_get_permissive
2019-12-01 22:06:44 -05:00
Andrew Chambers
6233d804c8
New capi janet_get_permissive
...
The janet_get_permissive function implements the core semantics
of the 'get' function. The original janet_get implements the semantics of
the 'in' function and also the OP_GET opcode. This slight oddity is
to avoid a backwards incompatible change.
2019-12-02 15:49:51 +13:00
Calvin Rose
8f31a53276
Add thread example.
...
Also remove reference to pthread_t in the JanetThread structure.
2019-12-01 20:47:22 -06:00
Calvin Rose
6a763aac95
Work on threads.
...
Add send and receive.
2019-12-01 20:28:12 -06:00
Calvin Rose
5cd6580c2d
Merge branch 'threads-3' of github.com:janet-lang/janet into threads-3
2019-12-01 20:25:57 -06:00
Andrew Chambers
8a58be81ba
Update documentation for in and get builtins.
...
Try to clarify documentation and teach users the correct
way to read the 'in' so it is less likely to be confused
with python's usage of the keyword.
2019-12-02 12:35:54 +13:00
Calvin Rose
fc53445d08
Merge pull request #198 from andrewchambers/intprint
...
Integers convert to plain number strings.
2019-12-01 13:00:09 -05:00
Calvin Rose
db261aabf4
Fix bad integer printing range.
2019-12-01 09:46:20 -05:00
Calvin Rose
36ef1c4749
Print proper integers as integers.
2019-12-01 09:40:34 -05:00
Andrew Chambers
5ae520a2c9
Integers convert to plain number strings.
...
A user can use (type n) to find the true type, the old behavior did not
seem useful for most uses of the string function.
2019-12-01 23:10:52 +13:00
Calvin Rose
570f04ca05
Fix typo.
2019-11-30 21:27:36 -05:00
Calvin Rose
bf609445c1
Merge pull request #186 from quexxon/fix-array-ensure-documentation
...
Add missing documentation for array/ensure's growth parameter
2019-11-29 22:39:04 -05:00
Calvin Rose
4e4cdb6356
Run formatter.
2019-11-28 23:26:11 -05:00
Calvin Rose
688d297a18
Address Issue #184 .
...
Fix strtod.c with better range checking to prevent DOS.
2019-11-28 23:23:37 -05:00
Will Clardy
9e1c3e0f41
Add missing documentation for array/ensure's growth parameter
2019-11-28 23:16:32 -05:00
Calvin Rose
967a8b5a70
Merge pull request #183 from andrewchambers/environ
...
Add os/environ.
2019-11-28 21:33:43 -05:00
Calvin Rose
92b7d91697
Merge pull request #182 from andrewchambers/scratch_finalizer
...
Add an optional finalizer to scratch resources.
2019-11-28 21:07:42 -05:00
Andrew Chambers
07db4c530e
Add os/environ.
2019-11-28 19:00:52 +13:00
Andrew Chambers
a3fb2d6e0a
Add an optional finalizer to scratch resources.
...
A finalizer can be attached to scratch allocations efficiently at any point in
it's lifecycle via janet_sfinalizer. Care was taken to keep allocations aligned
with platform alignment requirements.
A big drawbacks to this approach is the waste of up to 16 bytes per scratch
allocation in the case the scratch memory does not require a finalizer.
2019-11-28 17:32:12 +13:00
Andrew Chambers
88f28773da
Add missing fileno method to file, sort method list.
2019-11-28 14:47:16 +13:00
Calvin Rose
e542ba7e4d
Fix amalg build.
2019-11-27 12:43:45 -06:00
Calvin Rose
bca0392738
First work on threading.
...
Posix only, needs to be disabled on windows. Also
the Makefile needs to be configurable, and meson.build
needs to take pthreads into account.
2019-11-26 23:13:53 -06:00
Calvin Rose
74d51ab08b
Address issue #180 - string/check-set
...
Fix the function and add test to further clarify that
implementation is correct. Also fix empty string case.
2019-11-25 20:33:16 -06:00
Calvin Rose
7df0ec6aed
Fix up debug/step and janet_step.
...
Also allow debugging on all signals, including errors.
This is gated behind (setdyn :debug true) in the repl.
2019-11-25 20:00:13 -06:00
Calvin Rose
6988fd3cab
Add debug/step to single step a fiber.
...
Very useful for implementing debuggers.
2019-11-25 18:14:34 -06:00
Calvin Rose
c3273e8751
Merge branch 'master' of github.com:janet-lang/janet
2019-11-24 17:54:14 -06:00
Calvin Rose
d37c43716a
Lots of work on improving debugging.
...
doc macro can take no arguments and print out
all bindings. Fix an issues with the vm skipping
over a breakpoint in some situations.
Add examples/debugger.janet for proof of concept
debugger.
2019-11-24 17:45:53 -06:00
Andrew Chambers
976dfc7195
Minor fixes for parser
...
Check length before dereferencing buffer in tokenchar.
Check keywords are valid utf-8.
Fix minor typos.
2019-11-24 08:19:04 +13:00
Calvin Rose
8372d1e499
uint32_t -> uint8_t
2019-11-21 23:31:35 -06:00
Calvin Rose
e65716f6ee
Add janet_rng_longseed to janet.h
2019-11-21 23:26:31 -06:00
Calvin Rose
4b24d77b2c
Switch back to well tested RNG.
2019-11-21 23:22:21 -06:00
Calvin Rose
02fc4ae27b
Allow seeding RNG with a byte sequence.
2019-11-21 22:53:39 -06:00
Calvin Rose
624f5f428e
Add a number of math functions.
...
Most of these functions are wrappers around math.h.
2019-11-17 10:54:44 -06:00
Calvin Rose
c9521e093e
Fix windows issue with (file/read file :all)
...
When file was created with file/popen, the current optimization
of using fseek on windows fails due to windows not properly returning
and error code and just returning 0. Windows :(.
2019-11-11 20:05:00 -05:00
Calvin Rose
16f6261b44
Improve randomness of numbers from new rng.
...
First few numbers are very biased.
2019-11-10 17:44:59 -06:00
Calvin Rose
6b76ac3d18
Fix bug when appending buffer to self.
...
janet_to_string_b had a bug when printing buffers.
2019-11-10 14:57:09 -06:00
Calvin Rose
719f7ba0c4
Default to UTC for date.
2019-11-09 16:57:21 -06:00
Calvin Rose
dca247f01d
Fix MSVC build warnings.
2019-11-09 10:12:40 -06:00
Calvin Rose
63e7ca4623
Fix warning on travis CI with Clang.
2019-11-09 10:10:07 -06:00
Calvin Rose
1f55d40a10
Fix janet_opt* api.
...
Inverted conditional made behavior incorrect. These
were not used in the core library, so were not tested.
2019-11-09 09:39:14 -06:00
Calvin Rose
aee1687215
Add RNG functionality to the math/ module.
...
The new RNG wraps up state for random number generation, so
one can have many rngs and even marshal and unmarshal them.
Adds math/rng, math/rng-uniform, and math/rng-int.
Also introduce `in` and change semantics for
indexing out of range. This commit enforces stricter
invariants on keys when indexing via a function call
on the data structure, or the new `in` function.
The `get` function is now more lax about keys, and will
not throw an error when a bad key is used for a data structure, instead
returning the default value.
2019-11-08 17:40:04 -06:00
Calvin Rose
9b605b27bd
Address #174 - fix string/trim
2019-11-08 08:47:37 -06:00
Calvin Rose
026f26f05f
Improve error message in slice functions.
...
Check the first argument before trying to do range
checks.
2019-11-05 09:41:30 -06:00
Calvin Rose
cf2d3861d6
Make slice a c function.
...
This will allow future integration into the compiler
for more general destructuring.
2019-11-05 09:29:32 -06:00
Calvin Rose
45c2819068
Improve flychecking.
...
Flychecking will now work correctly with arity checking, and
will better handle imports. Well structured modules should interact
cleanly with the flychecker in a mostly safe manner, but maliciously
crafted modules can execute arbitrary code. As such, the flychecker is
not a good way to validate completely untrusted modules.
We also extend run-context with an :evaluator option to replace
:compile-only. This is more flexible and allows users to create their
own flychecker like functionality.
2019-10-27 16:15:41 -05:00
Calvin Rose
d28925fdab
Relax type checking when fuction position is nil
...
This lets the flychecker work as expected.
2019-10-24 15:17:19 -05:00
Calvin Rose
9097e36ea0
[] should evaluate to ()
...
This is consistent with most bracket tuples.
2019-10-20 14:06:28 -05:00
Calvin Rose
423b6db855
Fix memory leak with some string/ functions.
...
kmp_init leaked memory when called with an empty string.
2019-10-19 15:14:19 -05:00
Calvin Rose
bb54b940c0
Don't call fwrite with size = 0
2019-10-19 10:51:11 -05:00
Calvin Rose
8dd8af742a
Add eprintf and make printf a C function.
...
This allows some more optimizations when printing to
buffers or when output is disabled. It also makes printf
more consistent with print and prin (Same with eprintf).
2019-10-19 10:30:29 -05:00
Calvin Rose
d47804d222
Add prin, eprint, and eprin functions.
...
The print family of functions now writes output
to an optional buffer instead of a file bound to :out.
This means output can be more easily captured an redirected.
2019-10-19 09:44:27 -05:00
Calvin Rose
5f51476526
Remove a git attribute for linguist.
2019-10-12 22:03:34 -05:00
Calvin Rose
a18a251d16
Address some issues found in lgtm
...
Caught a few potentially issues with overflows, as well as use of
unsafe function localtime.
2019-10-10 22:59:43 -05:00
Calvin Rose
54b66a4199
Add shorthand package name support in jpm.
...
Package installation checks in the package listing if
the package name is not a url. The package listsing can be specified
via switch or env variable.
2019-10-10 18:11:45 -05:00
Calvin Rose
f9d57103f4
Improve peg error on unknown rule.
...
This helps a lot when debugging large, failing grammars.
2019-10-09 17:59:48 -05:00
Calvin Rose
fede40f279
Relax requirement minimum arity of fn
...
A valid `fn` special could have only a parameter list, as
recommended by R. DuPlain.
2019-10-05 11:53:30 -05:00
Calvin Rose
944347e828
Fix formatting.
...
Run make format.
2019-09-30 20:00:29 -05:00
Calvin Rose
7910a5feef
Add compile time arity checking.
...
This should help catch a number of errors, but it
is a very shallow implementation of type checking. It will
catch some common misuses of functions at compile time
rather than runtime.
2019-09-30 19:50:42 -05:00
Calvin Rose
339dea9390
Add optional argument functions to c api.
...
These are just helpers to make parameters than can be nil with a
default value easier to handle in a consitent way.
2019-09-24 19:40:49 -05:00
Calvin Rose
b26a7bb22a
Disallow the empty string for some string fns.
...
This will prevent these functions from being run
with empty strings, which usually produces useless
output, as the internal string search algorithm will
never "find" empty strings. This is by design, as it is
not always obvious which empty strings should be found in
the search text.
2019-09-24 13:23:18 -05:00
Calvin Rose
45dfc7cc96
Fix debug/break search algorithm.
2019-09-22 18:08:38 -05:00
Calvin Rose
8cda06b995
GCC seemed to not fill array of computed gotos.
...
This is expected as per the C standard, but segfaulted
unless all 255 labels were added.
2019-09-22 17:56:33 -05:00
Calvin Rose
a8afc5b81f
Sourcemapping uses line, column instead of offsets.
...
This should be friendlier to most users. It does, however, mean
we lose range information. However, range information could be
recovered by re-parsing, as janet's grammar is simple enough to do this.
2019-09-22 17:18:28 -05:00
Calvin Rose
228d045a06
Fix formatting.
2019-09-22 15:17:06 -05:00
Calvin Rose
803c3fc235
Add line, col to error messages when available.
2019-09-22 15:13:21 -05:00
Calvin Rose
7bee204390
Fix installer.
2019-09-22 13:29:34 -04:00
Calvin Rose
16127fc55c
Remove printf in regalloc.c
...
This should never be hit unless there is a
bug in the compiler, but should be removed.
2019-09-15 18:17:43 -05:00
Calvin Rose
97d874f16b
Fix small compiler bug (not freeing temp register).
2019-09-15 13:27:49 -05:00
Calvin Rose
39f1d81fd4
Use :length method for (length abstract)
...
Also adds the janet_lengthv API call. This is
needed because janet_length returns a 32 bit integer, where
as lengthv lets us return larger values (useful for typed arrays).
janet_mcall is an api function that should make it easier to call
a janet method from C code. It shares a similar signature with
janet_call.
2019-09-08 19:26:16 -05:00
Calvin Rose
98eaadf2d1
Simplify peg caching further.
...
Remove the multiple caching tables we were using
and use the grammar table for caching. This works
well because we can use raw_get for checking the local cache, and normal
get fro checking the global cache.
2019-08-30 08:57:45 -05:00
Calvin Rose
54a04b5894
Fix some more recursion issues with pegs.
...
A keyword reference only counts as visited if we have
it as cached in the memoized->table, and we know it was
originally referenced from the same grammar table. If these
two conditions are true, then compilation must work correctly.
Also add janet_table_get_ex.
2019-08-29 19:56:04 -05:00
Calvin Rose
8bc8709d0e
Try to address memoization problem in pegs.
2019-08-29 19:09:43 -05:00
Calvin Rose
060d11e4c2
Add Q and q formatters to buffer/format.
...
These are similar to P and p, but print values
on a single line for a much more compact version.
2019-08-24 22:53:45 -04:00
Calvin Rose
711fe64a51
Add backmatch operator to pegs.
...
(backmatch [tag?]) is similar to a back reference in regular expressions
(NOT to backwards capture in a peg). It only matches a pattern if
it exactly matches the text of the last capture. It does not consume
or push any captures to the capture stack.
2019-08-24 18:57:01 -04:00
Calvin Rose
292be33b9d
Fix some stack overflow bugs.
2019-08-19 01:19:51 -04:00
Calvin Rose
81789a6930
Add wasm to architectures returned by os/arch.
2019-08-18 10:08:52 -05:00
Calvin Rose
28fb2403d9
Add os/arch to core.
...
Also allow setting custom keywords for compiled
os name and architecture name.
2019-08-18 10:00:04 -05:00
Calvin Rose
54170d92db
Add some color to stacktraces in repl.
2019-08-12 19:20:01 -05:00
Calvin Rose
ab782d8896
Add optional default value to get.
...
Also update CHANGELOG.md
2019-08-06 18:12:00 -05:00
Calvin Rose
19c6714f06
Fix MSVC warnings and errors.
2019-08-05 20:19:46 -05:00
Calvin Rose
2193193b12
Improve error message on bad method calls.
2019-08-05 19:06:58 -05:00
Calvin Rose
850a2d7f79
Allow method calls on typed arrays.
2019-08-05 18:51:53 -05:00
Calvin Rose
ca5dce5d9f
Address #155 .
...
Fix bug in janet_table_clone that leaked memory.
2019-08-05 17:52:05 -05:00
Calvin Rose
44e752d737
Add shorthand function literals to janet.
...
These are similar to the function literals from Clojure
(also Fennel), and should make short functions for maps, filters, etc.
easier to write.
2019-08-04 12:25:52 -05:00
Calvin Rose
b18f1e8127
Keep count fo allocated memory via malloc.
...
We normally only track memory allocated with janet_gcalloc, but
if only a few very large normal memory blocks are allocated, the GC
will never run. Se simply need to increment a count when we allocate
memory so that the next time we enter the VM, we will be able to
run a collection if needed.
2019-07-31 00:24:13 -05:00
Calvin Rose
3e67916971
Fix MSVC warning.
2019-07-28 18:44:00 -05:00
Calvin Rose
8bbe518696
Executables linking to natives working on linux.
...
This involves a bunch of machinery in cook.janet
and even a little bit in the janet C API.
2019-07-28 13:27:20 -05:00
curist
c2ef58d880
Update math/log docstring
2019-07-28 22:18:36 +08:00
Calvin Rose
7e97687c9e
Update windows installation and automation.
2019-07-27 21:44:44 -04:00
Calvin Rose
d6a1faa380
Typos.
2019-07-27 11:36:48 -05:00
Calvin Rose
3c133bd677
Add more values for (os/which)
...
Some bsd flavors.
2019-07-27 11:29:40 -05:00
Calvin Rose
dfe00fee94
Building standalone binaries on linux working.
...
Mostly changes to cook and jpm. Also some
code for file associations in the windows installer, and
adding the :linux value from os/which (instead of just :posix).
2019-07-26 22:43:54 -05:00
Calvin Rose
e0fe8476aa
Address issue #143
...
Fix some logic in module/expand-path.
2019-07-15 17:39:50 -05:00
Calvin Rose
0ca0180f27
More "correct" emscripten support.
2019-07-14 16:11:00 -05:00
Calvin Rose
21a355c89f
Small changes to help with latest emscripten.
2019-07-14 09:58:11 -05:00
Calvin Rose
e528b86a2a
Ensure no carriage returns end up in doc strings.
2019-07-12 09:14:37 -04:00
Calvin Rose
2e6ee39506
Fix windows build issues.
2019-07-12 08:47:11 -04:00
Calvin Rose
894877a0e3
Address issue #142
...
Also add janet_wrap_number_safe to API.
2019-07-12 07:23:24 -05:00
Calvin Rose
3928136670
Begin update to 1.1.0.
2019-07-08 18:16:17 -05:00
Calvin Rose
affcb5b459
Address #137
...
Fix compiler bug when compiling desturctured bindings in a top-level
def or var. Also introduce janet_table_clone API call to make this
easier.
2019-07-07 23:18:39 -05:00
Calvin Rose
1588359ebc
Fix memory leak caused by casting error.
...
janet_abstract_end improperly modified a gc tag.
2019-06-30 10:32:52 -05:00
Calvin Rose
b8032ec61d
Add propagate function and opcode
...
This allows better stacktraces when manually intercepting
signals to clean up resources. Also allows functionality
from Common Lisp's unwind-protect, such as calling cleanup code
while unwindinding the stack, restarting on certain signals, and
just in general having more control over signal and signal propagation.
Also fix a bug encountered while implementing with-resource in the
compiler. Desturcturing arguments that were not the last argument
would often result in bad code generation, as slots used to destructure
the earlier arguments would invalidate the later parameters. This is
fixed by allocating all named parameters before doing any destructuring.
2019-06-24 12:44:13 -04:00
Calvin Rose
522545287e
Add janet_abstract_begin and janet_abstract_end
...
This will allow some one constructing an abstract to
only make it visible to the garbage collector after it
is in a valid state. If code in the constructing cfunction
panics before janet_abstract_end is called, the GC will not try
to mark the incomplete abstract type. This is often not needed through
careful programming, but should work well.
2019-06-20 12:37:57 -04:00
Calvin Rose
4b4fe80404
Be more complete with JANET_NO_SOURCEMAPS
...
This actually removed sourcemaps, not just
the top level annotation in bindings.
2019-06-20 11:55:52 -04:00
Calvin Rose
cf05ff610f
Add some fixes for serializing complex grammars.
2019-06-19 23:23:27 -04:00
Calvin Rose
1a7691dade
Flatten environment binding tables.
...
For some reason, these tables used prototypes. There
seems to be no need for this.
2019-06-19 20:07:40 -04:00
Calvin Rose
19a0444f41
Appease MSVC
2019-06-19 09:45:56 -04:00
Calvin Rose
9ba8728176
Update module system.
...
Add relative imports and path normalization. This should
help towards a more composable build/dependency system.
2019-06-18 22:10:13 -04:00
Calvin Rose
e88a9af2f6
Add bytecode verification for peg unmarshaling.
2019-06-18 13:01:49 -04:00
Calvin Rose
7c35acca75
One more MSVC warning.
2019-06-17 23:53:38 -04:00
Calvin Rose
4bb57550c8
Silence some windows build warnings.
2019-06-17 23:50:39 -04:00
Calvin Rose
446ab037b0
Allow marshaling pegs.
2019-06-17 23:40:02 -04:00
Calvin Rose
9c89d1c658
Inline yield when called with no arguments.
...
It was already inline when called with one argument.
2019-06-15 12:21:08 -04:00
Calvin Rose
3598f056bb
Reformat capi.c
2019-06-15 11:04:24 -04:00
Calvin Rose
779fcf2d54
Merge pull request #124 from ALSchwalm/parse-state
...
Add support for getting more detailed parser state
2019-06-15 11:00:06 -04:00
Adam Schwalm
3bbc121c6a
Add support for getting more detailed parser state
2019-06-15 07:37:01 -05:00
Calvin Rose
82edc19137
Update cook to take headers for natives.
...
This should help incremental building.
2019-06-13 00:41:20 -04:00
Calvin Rose
5689ef1af1
Add keyword flag utility for modules.
2019-06-12 12:05:48 -04:00
Calvin Rose
647139cdf9
Fix string/check-set.
...
Also change external unification identifier in match macro
to @. This means we can more easily match symbol literals.
2019-06-10 14:00:51 -04:00
Calvin Rose
43520ac67d
Add parser/clone. ( #120 )
2019-06-08 17:16:36 -04:00
Calvin Rose
802a2d6b71
Add more dynamic bindings for printing.
2019-06-08 15:27:13 -04:00
Calvin Rose
d9a4ef05ac
Update docstring format.
...
Also add :p flag to fiber/new, change implemntation of with-dyns, and
make meson build install static library by default.
2019-06-08 10:30:43 -04:00
Andrew Chambers
2b7428ed2b
Add file/{fdopen,fileno} functions.
2019-06-08 10:33:29 +12:00
Calvin Rose
64a80c57e3
Tables created via table_init cannot leak memory.
...
Before, if Janet paniced without calling table_deinit
on a table created via table_init, Janet leaked memory.
This changes tables so that tables created via table_init
us scratch memory for auto cleanup instead of normal
malloc/free.
2019-06-05 17:08:49 -04:00
Calvin Rose
efb2ab06cb
Remove array_init and array_deinit
...
These functions made it very easy to create memory
leaks, and are better replaced with functions in vector.h or
simply using non-stack allocated arrays.
2019-06-05 16:19:51 -04:00
Calvin Rose
6e8beff0a0
Add optional argument to parser/where to set index.
...
DSLs that use the parser API can use this to more accurately
report source location.
2019-06-03 10:48:16 -04:00
Calvin Rose
c82aac1365
Refer to @ as atsign not ampersand.
2019-06-01 23:40:59 -04:00
Calvin Rose
e697cc3811
Make os/execute not leak memory on panics.
...
Since many calls can panic, it's best
to only use scratch memory for temporary values.
2019-06-01 23:38:10 -04:00
Calvin Rose
c150f2f2c1
Add scratch memory API.
...
This should make it easier to write
code that does not leak memory on panics.
2019-06-01 23:31:39 -04:00
Calvin Rose
e1bd24c2ab
Make os/execute on windows closer to posix version
2019-05-31 15:02:44 -04:00
Calvin Rose
1f30ea66e9
Windows quick fix.
2019-05-31 13:45:39 -04:00
Calvin Rose
c43aaf8986
More work to os/execute.
...
Use environ when eflag not given. Also try to escape windows
command line strings correctly.
2019-05-31 13:44:14 -04:00
Calvin Rose
2acc81d1c5
Add noreturn attribute to panic functions.
2019-05-31 10:10:20 -04:00
Calvin Rose
d005ac6888
Appease MSVC.
2019-05-30 19:21:11 -04:00
Calvin Rose
7fdb098a20
Add process.h.
2019-05-30 19:14:54 -04:00
Calvin Rose
a4a200e037
Spawn.h not found in windows.
2019-05-30 19:13:13 -04:00
Calvin Rose
15d95d8803
Windows include issue.
2019-05-30 18:50:52 -04:00
Calvin Rose
46950a8cb3
Convert os/execute to use posix_spawn.
2019-05-30 18:40:10 -04:00
Calvin Rose
c8cf7c2445
Appease MSVC.
2019-05-29 22:12:24 -04:00
Calvin Rose
1b63215aad
Remove extra functions.
2019-05-29 22:00:47 -04:00
Calvin Rose
bcbe42ab23
Add API version checking for modules.
...
Checking now actively implemented for dynamic modules
in a fully backwards compatible way.
2019-05-29 21:58:20 -04:00
Calvin Rose
31f502b508
Add more to util.h to help with amalg build.
2019-05-29 12:07:53 -04:00
Calvin Rose
4d47d92a4a
Windows WEXITSTATUS fix?
2019-05-29 11:53:57 -04:00
Calvin Rose
b39ad97a87
Fix up close to return proper exit code.
2019-05-29 11:50:46 -04:00
Calvin Rose
af23040d9c
file/close returns an integer.
...
If opened with popen, returns the exit code. Otherwise
returns nil.
2019-05-29 11:40:58 -04:00
Calvin Rose
fd2d706e33
Add os/remove.
2019-05-29 11:31:19 -04:00
Andrew Chambers
3c304ddc35
Add api for checking build compatibilty.
2019-05-28 13:51:40 +12:00
Calvin Rose
010e2e4652
Add keyword arguments via &keys.
...
This makes it easier to document functions that
take keyword arguments and also prevents some allocations
with these functions. Before, this was possible via normal
variadic functions but created an intermediate tuple, and
the generated docstrings did not document the keys.
2019-05-24 17:03:22 -04:00
Calvin Rose
ddedae6831
Reenable computed gotos - they were disabled.
2019-05-24 13:54:23 -04:00
Calvin Rose
a303704a7d
Add some tests for the amalgamated source/
...
Adds tests to Makefile and CI on Poisx platforms.
2019-05-23 10:34:01 -04:00
Calvin Rose
411fc77ecf
Make env optional for compile.
2019-05-20 11:34:07 -04:00
Calvin Rose
55d8e8b56b
Fix issue with compilation with source name.
...
Also add tuple/sourcemap and tuple/setmap.
2019-05-20 04:02:38 -04:00
Andrew Chambers
ec43afb426
Minor documentation fixes.
2019-05-17 20:58:06 +12:00
Calvin Rose
56d903d75b
Remove extra closing paren.
2019-05-16 12:12:55 -04:00
Calvin Rose
dde5351d11
Small changes to some doc strings.
2019-05-16 11:43:21 -04:00
Calvin Rose
f2313b9959
file/read on eof will return nil.
...
Also add documentation for :exit in import.
Address issue #91
Partially adress issue #93
2019-05-14 11:05:19 -04:00
Calvin Rose
805b3bbb88
Numbers require at least 1 significant digit.
...
Address issue #96
2019-05-14 08:44:38 -04:00
Calvin Rose
232ea22dc5
Add string/triml, string/trimr, and string/trim.
2019-05-10 16:09:49 -04:00
Calvin Rose
7a313f6038
Update CHANGELOG, string/has-suffix?|prefix?
...
string/has-suffix? and string/has-prefix? can now accept
all byte data types for both arguments.
2019-05-09 13:42:14 -04:00
Calvin Rose
bbcfaf1289
Fix use after free bug in buffer/format when printing self.
2019-05-08 15:25:25 -04:00
Calvin Rose
bfb0cb331e
No temporary buffer in PR #87
2019-05-08 10:53:23 -04:00
Andrew Chambers
1759252071
Fix use after free in buffer/push-string.
2019-05-08 10:49:25 -04:00
Calvin Rose
fff60b053b
Use memmove in buffer/blit when needed.
2019-05-08 09:29:21 -04:00
Calvin Rose
65ac17986a
Address similar issue to #86
...
buffer/blit could trigger a use after free if a buffer is
blitted with itself and modifies its length.
2019-05-08 08:55:43 -04:00
Calvin Rose
ff720f1320
Expose current fiber via janet_current_fiber().
2019-05-04 19:07:04 -04:00
Calvin Rose
88b8418253
Add simple tracing functionality to VM.
...
Also disable debugger for normal errors.
2019-05-04 15:05:00 -04:00
Calvin Rose
4fa1b28cad
Update changelog (string module)
...
Also run `make format` on code.
2019-05-04 10:11:52 -04:00
Andrew Chambers
c70d59edee
Add string/has-prefix? and string/has-suffix?.
2019-05-04 10:05:58 -04:00
Calvin Rose
1cfc7b3b0d
Add preliminary debugger to default repl.
...
Also upddate colors, and fix formatting.
2019-05-02 17:11:30 -04:00
Calvin Rose
bfb354b469
Fix 32 bit platforms.
2019-04-28 16:22:24 -04:00
Calvin Rose
0bad523913
Fix wrap functions.
2019-04-27 19:47:32 -04:00
Calvin Rose
5b36199aea
Fix MSVC warning.
2019-04-27 16:50:40 -04:00
Calvin Rose
f10028d41a
Add function versions of macro API bindings.
...
This should help address #81 . Also hide janet_exit
and janet_assert, as they are really meant for internal usage.
I have not verified that this yet actually works with Rust's
bindgen.
2019-04-27 15:47:12 -04:00
Calvin Rose
73b81e0253
Fix os/date doc typo.
2019-04-23 22:43:51 -04:00
Calvin Rose
9100794cea
Drop leading and trailing newlines in longstrings.
...
Long, heredoc style strings can now have
a non semantic leading newline character. This makes it
easier to define large columns of text.
2019-04-21 13:34:41 -04:00
Calvin Rose
4ddf90e301
Make nanboxing on 64 bit platforms not the default.
...
64 bit nanboxing is kind of sketchy on non x86 architectures.
32 bit architectures seem to work better as the 32 implementation
doesn't rely on the format of the address space and layout of
double's in memory.
2019-04-18 12:52:28 -04:00
Calvin Rose
d1eca1cf52
Add all-dynamics to list current dynamic bindings.
2019-04-17 09:47:33 -04:00
Calvin Rose
7918add47d
Allow dynamically setting output for printers
...
Some functions like print and debug/stacktrace print
to a file, usually stdout. This file can now be optionally set
via a dynamic variable.
2019-04-16 21:44:19 -04:00
Calvin Rose
513d551df6
Move print in source code to io module.
...
print now reads the dynamic binding for :out
when choosing where to write to.
2019-04-16 19:10:01 -04:00
Calvin Rose
2d7df6b78e
Many changes for adding dynamic (fiber-level) scope.
...
- Allow passing a table to fibers, which make fiber level scope easier.
- Add fiber/getenv, fiber/setenv, dyn, and setdyn
- Remove meta, *env*, and *doc-width*
- Some functions changed dignatures, and no longer take an env
2019-04-16 15:41:45 -04:00
Calvin Rose
7527142549
Prepare for 0.4.1 release
2019-04-14 11:42:41 -04:00
Calvin Rose
4e6193b67e
Fix parse insert bug.
2019-04-13 14:38:30 -04:00
Calvin Rose
1596511175
Fix undefined behavior bug with errors.
...
janet_vm_return_reg should only be set when janet_continue
is called. Otherwise, a panic may dump it's error message in
the wrong place, resulting in undefined behavior (often showing
the last return value or worse, segfaulting).
2019-04-10 23:29:40 -04:00
Calvin Rose
675c1030fd
Fix error message on an arity mismatch.
...
janet_call had a bad janet_printf.
2019-04-07 23:53:50 -04:00
Calvin Rose
ed65d04b81
Fix peg bug with arguments.
...
By holding on a reference to argv for a long time, we
may trigger a use after free bug if the stack is resized. In
janet c function, argv is only vvalid up until the next stack operation
on the fiber. We could say that this is the dynamic lifetime of
argv.
To fix this, we copy extra arguments into a tuple, which is properly
garbage collected.
2019-04-07 15:14:54 -04:00
Calvin Rose
fa1c5c85b5
Remove no-capture mode in pegs.
...
Some peg grammars could not capture values based on their position in a
larger grammar. This is a design limitation inheritted from LPeg, but no
longer needed as the replace mode is superseded by the accumulator mode,
which is more general if slightly harder to use.
2019-04-06 11:38:00 -04:00
Calvin Rose
ee35786c8f
semicolon
2019-04-05 14:45:45 -04:00
Calvin Rose
ec6e2cfd62
os/stat returns nil if file does not exist.
2019-04-05 14:45:04 -04:00
Calvin Rose
cd6c009c03
Reformat and use new os/stat capabilities.
2019-04-01 11:21:45 -04:00
Calvin Rose
b15cf193a0
Update os/stat
...
os/stat can now take a keyword as the second argument
to avoid creating a table if one only wants on value
from stat.
2019-04-01 11:11:15 -04:00
Calvin Rose
e239980da7
Quasiquoting bracketed tuples.
2019-03-31 14:15:26 -04:00
Calvin Rose
1709bce77e
Add os/rm and os/rmdir
2019-03-30 15:39:24 -04:00
Calvin Rose
d6ba2de888
Fix os/dir on windows.
2019-03-30 13:46:52 -04:00
Calvin Rose
61c0a4bc87
Windows has different defines for file modes.
2019-03-30 13:09:35 -04:00
Calvin Rose
8af28d3fa5
Windows bump.
2019-03-30 13:06:24 -04:00
Calvin Rose
970923d0e5
Update os/dir for windows.
2019-03-30 13:01:57 -04:00