1
0
mirror of https://github.com/janet-lang/janet synced 2025-11-17 15:57:12 +00:00

Compare commits

..

12 Commits

Author SHA1 Message Date
Calvin Rose
4ae372262b 1.9.1 release. 2020-05-12 09:19:09 -05:00
Calvin Rose
02167a15d1 Add new Makefile options to meson. 2020-05-12 09:04:38 -05:00
Calvin Rose
b50a4669d2 Update README and CHANGELOG. 2020-05-12 08:56:58 -05:00
Calvin Rose
c947bda604 Remove .breakall and .clearall conditionally.
If disasm not available, these functions cannot be implemented.
2020-05-12 08:52:36 -05:00
Calvin Rose
00451777fe Add meson builds to sourcehut CI. 2020-05-12 08:46:26 -05:00
Calvin Rose
a65386e925 Merge branch 'master' of github.com:janet-lang/janet 2020-05-11 01:10:58 -05:00
Calvin Rose
2d7d154ffc Merge pull request #392 from t6/patch-meson
Unbreak Meson build
2020-05-11 00:08:25 -04:00
Calvin Rose
3100080a50 Add NO_UMASK and NO_REALPATH config options. 2020-05-10 23:07:54 -05:00
Tobias Kortkamp
7275370ae5 Unbreak Meson build
The Meson build system
Version: 0.54.0
Source dir: /wrkdirs/usr/ports/lang/janet/work/janet-1.9.0
Build dir: /wrkdirs/usr/ports/lang/janet/work/janet-1.9.0/_build
Build type: native build

meson.build:225:2: ERROR: Expecting rbracket got string.
  'test/suite9.janet'
  ^
For a block that started at 215,13
test_files = [
             ^
2020-05-11 06:02:26 +02:00
Calvin Rose
e013381e72 Conditionally ignore pclose as well as popen. 2020-05-10 21:06:52 -05:00
Calvin Rose
d05bb1c125 Fix nanboxing issue. 2020-05-10 20:14:47 -05:00
Calvin Rose
273d1ff2d0 Fix external grammar to disallow | and \ in symbols. 2020-05-10 16:57:42 -05:00
14 changed files with 129 additions and 54 deletions

12
.builds/meson.yml Normal file
View File

@@ -0,0 +1,12 @@
image: openbsd/latest
sources:
- https://git.sr.ht/~bakpakin/janet
packages:
- meson
tasks:
- build: |
cd janet
meson setup build --buildtype=release
cd build
ninja
ninja test

23
.builds/meson_min.yml Normal file
View File

@@ -0,0 +1,23 @@
image: openbsd/latest
sources:
- https://git.sr.ht/~bakpakin/janet
packages:
- meson
tasks:
- build: |
cd janet
meson setup build --buildtype=release
cd build
meson configure -Dsingle_threaded=true
meson configure -Dnanbox=false
meson configure -Ddynamic_modules=false
meson configure -Ddocstrings=false
meson configure -Dnet=false
meson configure -Dsourcemaps=false
meson configure -Dpeg=false
meson configure -Dassembler=false
meson configure -Dint_types=false
meson configure -Dtyped_arrays=false
meson configure -Dreduced_os=true
meson configure -Dprf=false
ninja # will not pass tests but should build

View File

@@ -1,6 +1,13 @@
# 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.9.1 - 2020-05-12
- Add :prefix option to declare-source
- Re-enable minimal builds with the debugger.
- Add several flags for configuring Janet on different platforms.
- Fix broken meson build from 1.9.0 and add meson to CI.
- Fix compilation issue when nanboxing is disabled.
## 1.9.0 - 2020-05-10 ## 1.9.0 - 2020-05-10
- Add `:ldflags` option to many jpm declare functions. - Add `:ldflags` option to many jpm declare functions.
- Add `errorf` to core. - Add `errorf` to core.

View File

@@ -4,6 +4,8 @@
[![Build Status](https://travis-ci.org/janet-lang/janet.svg?branch=master)](https://travis-ci.org/janet-lang/janet) [![Build Status](https://travis-ci.org/janet-lang/janet.svg?branch=master)](https://travis-ci.org/janet-lang/janet)
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/freebsd.yml?) [![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/freebsd.yml?)
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/openbsd.yml?) [![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/openbsd.yml?)
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/meson.yml.svg)](https://builds.sr.ht/~bakpakin/janet/meson.yml?)
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/meson_min.yml.svg)](https://builds.sr.ht/~bakpakin/janet/meson_min.yml?)
<img src="https://raw.githubusercontent.com/janet-lang/janet/master/assets/janet-w200.png" alt="Janet logo" width=200 align="left"> <img src="https://raw.githubusercontent.com/janet-lang/janet/master/assets/janet-w200.png" alt="Janet logo" width=200 align="left">

11
jpm
View File

@@ -833,10 +833,13 @@ int main(int argc, const char **argv) {
(install-rule sname path))) (install-rule sname path)))
(defn declare-source (defn declare-source
"Create a Janet modules. This does not actually build the module(s), "Create Janet modules. This does not actually build the module(s),
but registers it for packaging and installation." but registers them for packaging and installation. :source should be an
[&keys {:source sources}] array of files and directores to copy into JANET_MODPATH or JANET_PATH.
(def path (dyn :modpath JANET_MODPATH)) :prefix can optionally be given to modify the destination path to be
(string JANET_PATH prefix source)."
[&keys {:source sources :prefix prefix}]
(def path (string (dyn :modpath JANET_MODPATH) (or prefix "")))
(if (bytes? sources) (if (bytes? sources)
(install-rule sources path) (install-rule sources path)
(each s sources (each s sources

View File

@@ -20,7 +20,7 @@
project('janet', 'c', project('janet', 'c',
default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'], default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'],
version : '1.9.0') version : '1.9.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')
@@ -68,6 +68,9 @@ conf.set('JANET_RECURSION_GUARD', get_option('recursion_guard'))
conf.set('JANET_MAX_PROTO_DEPTH', get_option('max_proto_depth')) conf.set('JANET_MAX_PROTO_DEPTH', get_option('max_proto_depth'))
conf.set('JANET_MAX_MACRO_EXPAND', get_option('max_macro_expand')) conf.set('JANET_MAX_MACRO_EXPAND', get_option('max_macro_expand'))
conf.set('JANET_STACK_MAX', get_option('stack_max')) conf.set('JANET_STACK_MAX', get_option('stack_max'))
conf.set('JANET_NO_UMASK', not get_option('umask'))
conf.set('JANET_NO_REALPATH', not get_option('realpath'))
conf.set('JANET_NO_PROCESSES', not get_option('processes'))
if get_option('os_name') != '' if get_option('os_name') != ''
conf.set('JANET_OS_NAME', get_option('os_name')) conf.set('JANET_OS_NAME', get_option('os_name'))
endif endif
@@ -221,7 +224,7 @@ test_files = [
'test/suite5.janet', 'test/suite5.janet',
'test/suite6.janet', 'test/suite6.janet',
'test/suite7.janet', 'test/suite7.janet',
'test/suite8.janet' 'test/suite8.janet',
'test/suite9.janet' 'test/suite9.janet'
] ]
foreach t : test_files foreach t : test_files

View File

@@ -12,6 +12,9 @@ option('typed_array', type : 'boolean', value : true)
option('int_types', type : 'boolean', value : true) option('int_types', type : 'boolean', value : true)
option('prf', type : 'boolean', value : true) option('prf', type : 'boolean', value : true)
option('net', type : 'boolean', value : true) option('net', type : 'boolean', value : true)
option('processes', type : 'boolean', value : true)
option('umask', type : 'boolean', value : true)
option('realpath', type : 'boolean', value : true)
option('recursion_guard', type : 'integer', min : 10, max : 8000, value : 1024) option('recursion_guard', type : 'integer', min : 10, max : 8000, value : 1024)
option('max_proto_depth', type : 'integer', min : 10, max : 8000, value : 200) option('max_proto_depth', type : 'integer', min : 10, max : 8000, value : 200)

View File

@@ -2131,11 +2131,12 @@
(defn- find-prefix (defn- find-prefix
[pre] [pre]
(or (find-index |(and (string? ($ 0)) (string/has-prefix? pre ($ 0))) module/paths) 0)) (or (find-index |(and (string? ($ 0)) (string/has-prefix? pre ($ 0))) module/paths) 0))
(array/insert module/paths 0 [(string ":cur:/:all:" ext) loader check-.])
(def all-index (find-prefix ":all:")) (def all-index (find-prefix ":all:"))
(array/insert module/paths all-index [(string ":all:" ext) loader not-check-.]) (array/insert module/paths all-index [(string ":all:" ext) loader not-check-.])
(def sys-index (find-prefix ":sys:")) (def sys-index (find-prefix ":sys:"))
(array/insert module/paths sys-index [(string ":sys:/:all:" ext) loader not-check-.]) (array/insert module/paths sys-index [(string ":sys:/:all:" ext) loader not-check-.])
(def curall-index (find-prefix ":cur:/:all:"))
(array/insert module/paths curall-index [(string ":cur:/:all:" ext) loader check-.])
module/paths) module/paths)
(module/add-paths ":native:" :native) (module/add-paths ":native:" :native)
@@ -2404,20 +2405,6 @@
(print)) (print))
(print)) (print))
(unless (get _env 'disasm)
(put _env '.disasm nil)
(put _env '.bytecode nil)
(put _env '.ppasm nil))
(put _env 'disasm-alias nil)
(defn .source
"Show the source code for the function being debugged."
[&opt n]
(def frame (.frame n))
(def s (frame :source))
(def all-source (slurp s))
(print "\n" all-source "\n"))
(defn .breakall (defn .breakall
"Set breakpoints on all instructions in the current function." "Set breakpoints on all instructions in the current function."
[&opt n] [&opt n]
@@ -2436,6 +2423,22 @@
(debug/unfbreak fun i)) (debug/unfbreak fun i))
(print "Cleared " (length bytecode) " breakpoints in " fun)) (print "Cleared " (length bytecode) " breakpoints in " fun))
(unless (get _env 'disasm)
(put _env '.disasm nil)
(put _env '.bytecode nil)
(put _env '.breakall nil)
(put _env '.clearall nil)
(put _env '.ppasm nil))
(put _env 'disasm-alias nil)
(defn .source
"Show the source code for the function being debugged."
[&opt n]
(def frame (.frame n))
(def s (frame :source))
(def all-source (slurp s))
(print "\n" all-source "\n"))
(defn .break (defn .break
"Set breakpoint at the current pc." "Set breakpoint at the current pc."
[] []

View File

@@ -28,9 +28,9 @@
#define JANET_VERSION_MAJOR 1 #define JANET_VERSION_MAJOR 1
#define JANET_VERSION_MINOR 9 #define JANET_VERSION_MINOR 9
#define JANET_VERSION_PATCH 0 #define JANET_VERSION_PATCH 1
#define JANET_VERSION_EXTRA "" #define JANET_VERSION_EXTRA ""
#define JANET_VERSION "1.9.0" #define JANET_VERSION "1.9.1"
/* #define JANET_BUILD "local" */ /* #define JANET_BUILD "local" */
@@ -55,7 +55,9 @@
/* Other settings */ /* Other settings */
/* #define JANET_NO_PRF */ /* #define JANET_NO_PRF */
/* #define JANET_NO_UTC_MKTIME */ /* #define JANET_NO_UTC_MKTIME */
/* #define JANET_NO_REALPATH */
/* #define JANET_NO_SYMLINKS */ /* #define JANET_NO_SYMLINKS */
/* #define JANET_NO_UMASK */
/* #define JANET_OUT_OF_MEMORY do { printf("janet out of memory\n"); exit(1); } while (0) */ /* #define JANET_OUT_OF_MEMORY do { printf("janet out of memory\n"); exit(1); } while (0) */
/* #define JANET_EXIT(msg) do { printf("C assert failed executing janet: %s\n", msg); exit(1); } while (0) */ /* #define JANET_EXIT(msg) do { printf("C assert failed executing janet: %s\n", msg); exit(1); } while (0) */
/* #define JANET_TOP_LEVEL_SIGNAL(msg) call_my_function((msg), stderr) */ /* #define JANET_TOP_LEVEL_SIGNAL(msg) call_my_function((msg), stderr) */

View File

@@ -687,7 +687,7 @@ static const JanetReg corelib_cfuns[] = {
"\t:dir:\tthe directory containing the current file\n" "\t:dir:\tthe directory containing the current file\n"
"\t:name:\tthe name component of path, with extension if given\n" "\t:name:\tthe name component of path, with extension if given\n"
"\t:native:\tthe extension used to load natives, .so or .dll\n" "\t:native:\tthe extension used to load natives, .so or .dll\n"
"\t:sys:\tthe system path, or (syn :syspath)") "\t:sys:\tthe system path, or (dyn :syspath)")
}, },
{ {
"int?", janet_core_check_int, "int?", janet_core_check_int,

View File

@@ -253,7 +253,9 @@ static int cfun_io_gc(void *p, size_t len) {
if (!(iof->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) { if (!(iof->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) {
/* We can't panic inside a gc, so just ignore bad statuses here */ /* We can't panic inside a gc, so just ignore bad statuses here */
if (iof->flags & JANET_FILE_PIPED) { if (iof->flags & JANET_FILE_PIPED) {
#ifndef JANET_NO_PROCESSES
pclose(iof->file); pclose(iof->file);
#endif
} else { } else {
fclose(iof->file); fclose(iof->file);
} }
@@ -270,10 +272,12 @@ static Janet cfun_io_fclose(int32_t argc, Janet *argv) {
if (iof->flags & (JANET_FILE_NOT_CLOSEABLE)) if (iof->flags & (JANET_FILE_NOT_CLOSEABLE))
janet_panic("file not closable"); janet_panic("file not closable");
if (iof->flags & JANET_FILE_PIPED) { if (iof->flags & JANET_FILE_PIPED) {
#ifndef JANET_NO_PROCESSES
int status = pclose(iof->file); int status = pclose(iof->file);
iof->flags |= JANET_FILE_CLOSED; iof->flags |= JANET_FILE_CLOSED;
if (status == -1) janet_panic("could not close file"); if (status == -1) janet_panic("could not close file");
return janet_wrap_integer(WEXITSTATUS(status)); return janet_wrap_integer(WEXITSTATUS(status));
#endif
} else { } else {
if (fclose(iof->file)) janet_panic("could not close file"); if (fclose(iof->file)) janet_panic("could not close file");
iof->flags |= JANET_FILE_CLOSED; iof->flags |= JANET_FILE_CLOSED;

View File

@@ -877,6 +877,7 @@ static Janet os_remove(int32_t argc, Janet *argv) {
return janet_wrap_nil(); return janet_wrap_nil();
} }
#ifndef JANET_NO_SYMLINKS
static Janet os_readlink(int32_t argc, Janet *argv) { static Janet os_readlink(int32_t argc, Janet *argv) {
janet_fixarity(argc, 1); janet_fixarity(argc, 1);
#ifdef JANET_WINDOWS #ifdef JANET_WINDOWS
@@ -893,6 +894,7 @@ static Janet os_readlink(int32_t argc, Janet *argv) {
return janet_stringv((const uint8_t *)buffer, len); return janet_stringv((const uint8_t *)buffer, len);
#endif #endif
} }
#endif
#ifdef JANET_WINDOWS #ifdef JANET_WINDOWS
@@ -1161,6 +1163,7 @@ static Janet os_chmod(int32_t argc, Janet *argv) {
return janet_wrap_nil(); return janet_wrap_nil();
} }
#ifndef JANET_NO_UMASK
static Janet os_umask(int32_t argc, Janet *argv) { static Janet os_umask(int32_t argc, Janet *argv) {
janet_fixarity(argc, 1); janet_fixarity(argc, 1);
int mask = (int) os_getmode(argv, 0); int mask = (int) os_getmode(argv, 0);
@@ -1171,6 +1174,7 @@ static Janet os_umask(int32_t argc, Janet *argv) {
#endif #endif
return janet_wrap_integer(janet_perm_to_unix(res)); return janet_wrap_integer(janet_perm_to_unix(res));
} }
#endif
static Janet os_dir(int32_t argc, Janet *argv) { static Janet os_dir(int32_t argc, Janet *argv) {
janet_arity(argc, 1, 2); janet_arity(argc, 1, 2);
@@ -1220,9 +1224,9 @@ static Janet os_rename(int32_t argc, Janet *argv) {
static Janet os_realpath(int32_t argc, Janet *argv) { static Janet os_realpath(int32_t argc, Janet *argv) {
janet_fixarity(argc, 1); janet_fixarity(argc, 1);
#ifdef JANET_WINDOWS #ifdef JANET_NO_REALPATH
(void) argv; (void) argv;
janet_panic("os/realpath not supported on Windows"); janet_panic("os/realpath not supported on this platform");
#else #else
const char *src = janet_getcstring(argv, 0); const char *src = janet_getcstring(argv, 0);
char *dest = realpath(src, NULL); char *dest = realpath(src, NULL);
@@ -1339,11 +1343,13 @@ static const JanetReg os_cfuns[] = {
JDOC("(os/cd path)\n\n" JDOC("(os/cd path)\n\n"
"Change current directory to path. Returns nil on success, errors on failure.") "Change current directory to path. Returns nil on success, errors on failure.")
}, },
#ifndef JANET_NO_UMASK
{ {
"os/umask", os_umask, "os/umask", os_umask,
JDOC("(os/umask mask)\n\n" JDOC("(os/umask mask)\n\n"
"Set a new umask, returns the old umask.") "Set a new umask, returns the old umask.")
}, },
#endif
{ {
"os/mkdir", os_mkdir, "os/mkdir", os_mkdir,
JDOC("(os/mkdir path)\n\n" JDOC("(os/mkdir path)\n\n"
@@ -1369,6 +1375,7 @@ static const JanetReg os_cfuns[] = {
"Iff symlink is falsey or not provided, " "Iff symlink is falsey or not provided, "
"creates a hard link. Does not work on Windows.") "creates a hard link. Does not work on Windows.")
}, },
#ifndef JANET_NO_SYMLINKS
{ {
"os/symlink", os_symlink, "os/symlink", os_symlink,
JDOC("(os/symlink oldpath newpath)\n\n" JDOC("(os/symlink oldpath newpath)\n\n"
@@ -1379,6 +1386,7 @@ static const JanetReg os_cfuns[] = {
JDOC("(os/readlink path)\n\n" JDOC("(os/readlink path)\n\n"
"Read the contents of a symbolic link. Does not work on Windows.\n") "Read the contents of a symbolic link. Does not work on Windows.\n")
}, },
#endif
#ifndef JANET_NO_PROCESSES #ifndef JANET_NO_PROCESSES
{ {
"os/execute", os_execute, "os/execute", os_execute,

View File

@@ -138,6 +138,11 @@ extern "C" {
#define JANET_NO_UTC_MKTIME #define JANET_NO_UTC_MKTIME
#endif #endif
/* Add some windows flags */
#ifdef JANET_WINDOWS
#define JANET_NO_REALPATH
#endif
/* Define how global janet state is declared */ /* Define how global janet state is declared */
#ifdef JANET_SINGLE_THREADED #ifdef JANET_SINGLE_THREADED
#define JANET_THREAD_LOCAL #define JANET_THREAD_LOCAL
@@ -359,6 +364,26 @@ typedef struct JanetDictView JanetDictView;
typedef struct JanetRange JanetRange; typedef struct JanetRange JanetRange;
typedef struct JanetRNG JanetRNG; typedef struct JanetRNG JanetRNG;
/* Basic types for all Janet Values */
typedef enum JanetType {
JANET_NUMBER,
JANET_NIL,
JANET_BOOLEAN,
JANET_FIBER,
JANET_STRING,
JANET_SYMBOL,
JANET_KEYWORD,
JANET_ARRAY,
JANET_TUPLE,
JANET_TABLE,
JANET_STRUCT,
JANET_BUFFER,
JANET_FUNCTION,
JANET_CFUNCTION,
JANET_ABSTRACT,
JANET_POINTER
} JanetType;
/* Recursive type (Janet) */ /* Recursive type (Janet) */
#ifdef JANET_NANBOX_64 #ifdef JANET_NANBOX_64
typedef union Janet Janet; typedef union Janet Janet;
@@ -414,26 +439,6 @@ typedef const Janet *JanetTuple;
typedef const JanetKV *JanetStruct; typedef const JanetKV *JanetStruct;
typedef void *JanetAbstract; typedef void *JanetAbstract;
/* Basic types for all Janet Values */
typedef enum JanetType {
JANET_NUMBER,
JANET_NIL,
JANET_BOOLEAN,
JANET_FIBER,
JANET_STRING,
JANET_SYMBOL,
JANET_KEYWORD,
JANET_ARRAY,
JANET_TUPLE,
JANET_TABLE,
JANET_STRUCT,
JANET_BUFFER,
JANET_FUNCTION,
JANET_CFUNCTION,
JANET_ABSTRACT,
JANET_POINTER
} JanetType;
#define JANET_COUNT_TYPES (JANET_POINTER + 1) #define JANET_COUNT_TYPES (JANET_POINTER + 1)
/* Type flags */ /* Type flags */

View File

@@ -230,53 +230,53 @@
<key>name</key> <key>name</key>
<string>punctuation.other.janet</string> <string>punctuation.other.janet</string>
</dict> </dict>
<!-- string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*]) token match here (?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string --> <!-- string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*]) token match here (?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string -->
<key>literal</key> <key>literal</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])(true|false|nil)(?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])(true|false|nil)(?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string>
<key>name</key> <key>name</key>
<string>constant.language.janet</string> <string>constant.language.janet</string>
</dict> </dict>
<key>corelib</key> <key>corelib</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])(%ALLSYMBOLS%)(?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])(%ALLSYMBOLS%)(?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string>
<key>name</key> <key>name</key>
<string>keyword.control.janet</string> <string>keyword.control.janet</string>
</dict> </dict>
<key>keysym</key> <key>keysym</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*]):[\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*]*</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*]):[\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*]*</string>
<key>name</key> <key>name</key>
<string>constant.keyword.janet</string> <string>constant.keyword.janet</string>
</dict> </dict>
<key>symbol</key> <key>symbol</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])[\.a-zA-Z_\-=!@\$%^&amp;?|\\/&lt;&gt;*][\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*]*</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])[\.a-zA-Z_\-=!@\$%^&amp;?/&lt;&gt;*][\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*]*</string>
<key>name</key> <key>name</key>
<string>variable.other.janet</string> <string>variable.other.janet</string>
</dict> </dict>
<key>hex-number</key> <key>hex-number</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])[-+]?0x([_\da-fA-F]+|[_\da-fA-F]+\.[_\da-fA-F]*|\.[_\da-fA-F]+)(&amp;[+-]?[\da-fA-F]+)?(?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])[-+]?0x([_\da-fA-F]+|[_\da-fA-F]+\.[_\da-fA-F]*|\.[_\da-fA-F]+)(&amp;[+-]?[\da-fA-F]+)?(?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string>
<key>name</key> <key>name</key>
<string>constant.numeric.hex.janet</string> <string>constant.numeric.hex.janet</string>
</dict> </dict>
<key>dec-number</key> <key>dec-number</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])[-+]?([_\d]+|[_\d]+\.[_\d]*|\.[_\d]+)([eE&amp;][+-]?[\d]+)?(?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])[-+]?([_\d]+|[_\d]+\.[_\d]*|\.[_\d]+)([eE&amp;][+-]?[\d]+)?(?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string>
<key>name</key> <key>name</key>
<string>constant.numeric.decimal.janet</string> <string>constant.numeric.decimal.janet</string>
</dict> </dict>
<key>r-number</key> <key>r-number</key>
<dict> <dict>
<key>match</key> <key>match</key>
<string>(?&lt;![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])[-+]?\d\d?r([_\w]+|[_\w]+\.[_\w]*|\.[_\w]+)(&amp;[+-]?[\w]+)?(?![\.:\w_\-=!@\$%^&amp;?|\\/&lt;&gt;*])</string> <string>(?&lt;![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])[-+]?\d\d?r([_\w]+|[_\w]+\.[_\w]*|\.[_\w]+)(&amp;[+-]?[\w]+)?(?![\.:\w_\-=!@\$%^&amp;?/&lt;&gt;*])</string>
<key>name</key> <key>name</key>
<string>constant.numeric.decimal.janet</string> <string>constant.numeric.decimal.janet</string>
</dict> </dict>