mirror of
https://github.com/janet-lang/janet
synced 2025-11-13 05:47:14 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0817e627ee | ||
|
|
14d90239a7 | ||
|
|
f5d11dc656 | ||
|
|
6dcf5bf077 | ||
|
|
ac2082e9b3 | ||
|
|
dbac495bee | ||
|
|
fe5ccb163e | ||
|
|
1aea5ee007 | ||
|
|
13cd9f8067 |
@@ -1,15 +1,20 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## 1.24.1 - 2022-08-24
|
||||||
|
- Fix FFI bug on Linux/Posix
|
||||||
|
- Improve parse error messages for bad delimiters.
|
||||||
|
- Add optional `name` parameter to the `short-fn` macro.
|
||||||
|
|
||||||
## 1.24.0 - 2022-08-14
|
## 1.24.0 - 2022-08-14
|
||||||
- Add FFI support to 64-bit windows compiled with MSVC
|
- Add FFI support to 64-bit windows compiled with MSVC
|
||||||
- Don't process shared object names passed to dlopen.
|
- Don't process shared object names passed to dlopen.
|
||||||
- Add better support for windows console in the default shell.c for autocompletion and
|
- Add better support for windows console in the default shell.c for auto-completion and
|
||||||
other shell-like input features.
|
other shell-like input features.
|
||||||
- Improve default error message from `assert`.
|
- Improve default error message from `assert`.
|
||||||
- Add the `tabseq` macro for simpler table comprehensions.
|
- Add the `tabseq` macro for simpler table comprehensions.
|
||||||
- Allow setting `(dyn :task-id)` in fibers to improve context in supervisor messages. Prior to
|
- Allow setting `(dyn :task-id)` in fibers to improve context in supervisor messages. Prior to
|
||||||
this change, supverisor messages over threaded channels would be from ambiguous threads/fibers.
|
this change, supervisor messages over threaded channels would be from ambiguous threads/fibers.
|
||||||
|
|
||||||
## 1.23.0 - 2022-06-20
|
## 1.23.0 - 2022-06-20
|
||||||
- Add experimental `ffi/` module for interfacing with dynamic libraries and raw function pointers. Only available
|
- Add experimental `ffi/` module for interfacing with dynamic libraries and raw function pointers. Only available
|
||||||
|
|||||||
@@ -57,15 +57,15 @@ double double_lots_2(
|
|||||||
double i,
|
double i,
|
||||||
double j) {
|
double j) {
|
||||||
return a +
|
return a +
|
||||||
10.0 * b +
|
10.0 * b +
|
||||||
100.0 * c +
|
100.0 * c +
|
||||||
1000.0 * d +
|
1000.0 * d +
|
||||||
10000.0 * e +
|
10000.0 * e +
|
||||||
100000.0 * f +
|
100000.0 * f +
|
||||||
1000000.0 * g +
|
1000000.0 * g +
|
||||||
10000000.0 * h +
|
10000000.0 * h +
|
||||||
100000000.0 * i +
|
100000000.0 * i +
|
||||||
1000000000.0 * j;
|
1000000000.0 * j;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORTER
|
EXPORTER
|
||||||
|
|||||||
7
janet.1
7
janet.1
@@ -164,10 +164,15 @@ Execute a string of Janet source. Source code is executed in the order it is enc
|
|||||||
arguments are executed before later ones.
|
arguments are executed before later ones.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BR \-E\ code arguments
|
.BR \-E\ code\ arguments...
|
||||||
Execute a single Janet expression as a Janet short-fn, passing the remaining command line arguments to the expression. This allows
|
Execute a single Janet expression as a Janet short-fn, passing the remaining command line arguments to the expression. This allows
|
||||||
more concise one-liners with command line arguments.
|
more concise one-liners with command line arguments.
|
||||||
|
|
||||||
|
Example: janet -E '(print $0)' 12 is equivalent to '((short-fn (print $0)) 12)', which is in turn equivalent to
|
||||||
|
`((fn [k] (print k)) 12)`
|
||||||
|
|
||||||
|
See docs for the `short-fn` function for more details.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BR \-d
|
.BR \-d
|
||||||
Enable debug mode. On all terminating signals as well the debug signal, this will
|
Enable debug mode. On all terminating signals as well the debug signal, this will
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
project('janet', 'c',
|
project('janet', 'c',
|
||||||
default_options : ['c_std=c99', 'build.c_std=c99', 'b_lundef=false', 'default_library=both'],
|
default_options : ['c_std=c99', 'build.c_std=c99', 'b_lundef=false', 'default_library=both'],
|
||||||
version : '1.24.0')
|
version : '1.24.1')
|
||||||
|
|
||||||
# Global settings
|
# Global settings
|
||||||
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
||||||
|
|||||||
@@ -2177,7 +2177,7 @@
|
|||||||
|(+ $ $) # use pipe reader macro for terse function literals.
|
|(+ $ $) # use pipe reader macro for terse function literals.
|
||||||
|(+ $&) # variadic functions
|
|(+ $&) # variadic functions
|
||||||
```
|
```
|
||||||
[arg]
|
[arg &opt name]
|
||||||
(var max-param-seen -1)
|
(var max-param-seen -1)
|
||||||
(var vararg false)
|
(var vararg false)
|
||||||
(defn saw-special-arg
|
(defn saw-special-arg
|
||||||
@@ -2203,8 +2203,9 @@
|
|||||||
x))
|
x))
|
||||||
x))
|
x))
|
||||||
(def expanded (macex arg on-binding))
|
(def expanded (macex arg on-binding))
|
||||||
|
(def name-splice (if name [name] []))
|
||||||
(def fn-args (seq [i :range [0 (+ 1 max-param-seen)]] (symbol '$ i)))
|
(def fn-args (seq [i :range [0 (+ 1 max-param-seen)]] (symbol '$ i)))
|
||||||
~(fn [,;fn-args ,;(if vararg ['& '$&] [])] ,expanded))
|
~(fn ,;name-splice [,;fn-args ,;(if vararg ['& '$&] [])] ,expanded))
|
||||||
|
|
||||||
###
|
###
|
||||||
###
|
###
|
||||||
@@ -3886,7 +3887,7 @@
|
|||||||
"E" (fn E-switch [i &]
|
"E" (fn E-switch [i &]
|
||||||
(set no-file false)
|
(set no-file false)
|
||||||
(def subargs (array/slice args (+ i 2)))
|
(def subargs (array/slice args (+ i 2)))
|
||||||
(def src ~|,(parse (in args (+ i 1))))
|
(def src ~(short-fn ,(parse (in args (+ i 1))) E-expression))
|
||||||
(def thunk (compile src))
|
(def thunk (compile src))
|
||||||
(if (function? thunk)
|
(if (function? thunk)
|
||||||
((thunk) ;subargs)
|
((thunk) ;subargs)
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
#define JANET_VERSION_MAJOR 1
|
#define JANET_VERSION_MAJOR 1
|
||||||
#define JANET_VERSION_MINOR 24
|
#define JANET_VERSION_MINOR 24
|
||||||
#define JANET_VERSION_PATCH 0
|
#define JANET_VERSION_PATCH 1
|
||||||
#define JANET_VERSION_EXTRA ""
|
#define JANET_VERSION_EXTRA ""
|
||||||
#define JANET_VERSION "1.24.0"
|
#define JANET_VERSION "1.24.1"
|
||||||
|
|
||||||
/* #define JANET_BUILD "local" */
|
/* #define JANET_BUILD "local" */
|
||||||
|
|
||||||
|
|||||||
@@ -996,7 +996,7 @@ JanetCompileResult janet_compile(Janet source, JanetTable *env, const uint8_t *w
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* C Function for compiling */
|
/* C Function for compiling */
|
||||||
JANET_CORE_FN(cfun,
|
JANET_CORE_FN(cfun_compile,
|
||||||
"(compile ast &opt env source lints)",
|
"(compile ast &opt env source lints)",
|
||||||
"Compiles an Abstract Syntax Tree (ast) into a function. "
|
"Compiles an Abstract Syntax Tree (ast) into a function. "
|
||||||
"Pair the compile function with parsing functionality to implement "
|
"Pair the compile function with parsing functionality to implement "
|
||||||
@@ -1043,7 +1043,7 @@ JANET_CORE_FN(cfun,
|
|||||||
|
|
||||||
void janet_lib_compile(JanetTable *env) {
|
void janet_lib_compile(JanetTable *env) {
|
||||||
JanetRegExt cfuns[] = {
|
JanetRegExt cfuns[] = {
|
||||||
JANET_CORE_REG("compile", cfun),
|
JANET_CORE_REG("compile", cfun_compile),
|
||||||
JANET_REG_END
|
JANET_REG_END
|
||||||
};
|
};
|
||||||
janet_core_cfuns_ext(env, NULL, cfuns);
|
janet_core_cfuns_ext(env, NULL, cfuns);
|
||||||
|
|||||||
@@ -799,15 +799,6 @@ JANET_CORE_FN(cfun_ffi_signature,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Invert stack */
|
|
||||||
for (uint32_t i = 0; i < arg_count; i++) {
|
|
||||||
if (mappings[i].spec == JANET_SYSV64_MEMORY) {
|
|
||||||
uint32_t old_offset = mappings[i].offset;
|
|
||||||
size_t el_size = type_size(mappings[i].type);
|
|
||||||
mappings[i].offset = stack_count - ((el_size + 7) / 8) - old_offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -206,6 +206,37 @@ static void popstate(JanetParser *p, Janet val) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void delim_error(JanetParser *parser, size_t stack_index, char c, const char *msg) {
|
||||||
|
JanetParseState *s = parser->states + stack_index;
|
||||||
|
JanetBuffer *buffer = janet_buffer(40);
|
||||||
|
if (msg) {
|
||||||
|
janet_buffer_push_cstring(buffer, msg);
|
||||||
|
}
|
||||||
|
if (c) {
|
||||||
|
janet_buffer_push_u8(buffer, c);
|
||||||
|
}
|
||||||
|
if (stack_index > 0) {
|
||||||
|
janet_buffer_push_cstring(buffer, ", ");
|
||||||
|
if (s->flags & PFLAG_PARENS) {
|
||||||
|
janet_buffer_push_u8(buffer, '(');
|
||||||
|
} else if (s->flags & PFLAG_SQRBRACKETS) {
|
||||||
|
janet_buffer_push_u8(buffer, '[');
|
||||||
|
} else if (s->flags & PFLAG_CURLYBRACKETS) {
|
||||||
|
janet_buffer_push_u8(buffer, '{');
|
||||||
|
} else if (s->flags & PFLAG_STRING) {
|
||||||
|
janet_buffer_push_u8(buffer, '"');
|
||||||
|
} else if (s->flags & PFLAG_LONGSTRING) {
|
||||||
|
int32_t i;
|
||||||
|
for (i = 0; i < s->argn; i++) {
|
||||||
|
janet_buffer_push_u8(buffer, '`');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
janet_formatb(buffer, " opened at line %d, column %d", s->line, s->column);
|
||||||
|
}
|
||||||
|
parser->error = (const char *) janet_string(buffer->data, buffer->count);
|
||||||
|
parser->flag |= JANET_PARSER_GENERATED_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
static int checkescape(uint8_t c) {
|
static int checkescape(uint8_t c) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
default:
|
default:
|
||||||
@@ -612,7 +643,7 @@ static int root(JanetParser *p, JanetParseState *state, uint8_t c) {
|
|||||||
case '}': {
|
case '}': {
|
||||||
Janet ds;
|
Janet ds;
|
||||||
if (p->statecount == 1) {
|
if (p->statecount == 1) {
|
||||||
p->error = "unexpected delimiter";
|
delim_error(p, 0, c, "unexpected closing delimiter ");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if ((c == ')' && (state->flags & PFLAG_PARENS)) ||
|
if ((c == ')' && (state->flags & PFLAG_PARENS)) ||
|
||||||
@@ -633,7 +664,7 @@ static int root(JanetParser *p, JanetParseState *state, uint8_t c) {
|
|||||||
ds = close_struct(p, state);
|
ds = close_struct(p, state);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p->error = "mismatched delimiter";
|
delim_error(p, p->statecount - 1, c, "mismatched delimiter ");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
popstate(p, ds);
|
popstate(p, ds);
|
||||||
@@ -684,26 +715,7 @@ void janet_parser_eof(JanetParser *parser) {
|
|||||||
size_t oldline = parser->line;
|
size_t oldline = parser->line;
|
||||||
janet_parser_consume(parser, '\n');
|
janet_parser_consume(parser, '\n');
|
||||||
if (parser->statecount > 1) {
|
if (parser->statecount > 1) {
|
||||||
JanetParseState *s = parser->states + (parser->statecount - 1);
|
delim_error(parser, parser->statecount - 1, 0, "unexpected end of source");
|
||||||
JanetBuffer *buffer = janet_buffer(40);
|
|
||||||
janet_buffer_push_cstring(buffer, "unexpected end of source, ");
|
|
||||||
if (s->flags & PFLAG_PARENS) {
|
|
||||||
janet_buffer_push_u8(buffer, '(');
|
|
||||||
} else if (s->flags & PFLAG_SQRBRACKETS) {
|
|
||||||
janet_buffer_push_u8(buffer, '[');
|
|
||||||
} else if (s->flags & PFLAG_CURLYBRACKETS) {
|
|
||||||
janet_buffer_push_u8(buffer, '{');
|
|
||||||
} else if (s->flags & PFLAG_STRING) {
|
|
||||||
janet_buffer_push_u8(buffer, '"');
|
|
||||||
} else if (s->flags & PFLAG_LONGSTRING) {
|
|
||||||
int32_t i;
|
|
||||||
for (i = 0; i < s->argn; i++) {
|
|
||||||
janet_buffer_push_u8(buffer, '`');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
janet_formatb(buffer, " opened at line %d, column %d", s->line, s->column);
|
|
||||||
parser->error = (const char *) janet_string(buffer->data, buffer->count);
|
|
||||||
parser->flag |= JANET_PARSER_GENERATED_ERROR;
|
|
||||||
}
|
}
|
||||||
parser->line = oldline;
|
parser->line = oldline;
|
||||||
parser->column = oldcolumn;
|
parser->column = oldcolumn;
|
||||||
|
|||||||
0
tools/format.sh
Normal file → Executable file
0
tools/format.sh
Normal file → Executable file
Reference in New Issue
Block a user