mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Local changes.
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -32,7 +32,7 @@ BINDIR=$(PREFIX)/bin | |||||||
| # TODO - when api is finalized, only export public symbols instead of using rdynamic | # TODO - when api is finalized, only export public symbols instead of using rdynamic | ||||||
| # which exports all symbols. Saves a few KB in binary. | # which exports all symbols. Saves a few KB in binary. | ||||||
|  |  | ||||||
| CFLAGS=-std=c99 -Wall -Wextra -Isrc/include -fpic -O2 | CFLAGS=-std=c99 -Wall -Wextra -Isrc/include -fpic -O2 -fvisibility=hidden | ||||||
| CLIBS=-lm -ldl | CLIBS=-lm -ldl | ||||||
| PREFIX=/usr/local | PREFIX=/usr/local | ||||||
| DST_TARGET=dst | DST_TARGET=dst | ||||||
|   | |||||||
| @@ -23,8 +23,8 @@ init: | |||||||
| - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" | ||||||
|  |  | ||||||
| install: | install: | ||||||
|     - build |     - build_win | ||||||
|     - build test |     - build_win test | ||||||
|      |      | ||||||
| build: off | build: off | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| @rem Build dst on windows | @rem Build dst on windows | ||||||
| @rem | @rem | ||||||
| @rem Open a "Windows SDK Command Shell" in the dst directory | @rem Open a "Windows SDK Command Shell" and cd to the dst directory | ||||||
| @rem and run this script | @rem Then run this script with no arguments to build the executable | ||||||
| 
 | 
 | ||||||
| @echo off | @echo off | ||||||
| 
 | 
 | ||||||
| @@ -15,40 +15,44 @@ | |||||||
| 
 | 
 | ||||||
| @rem Set compile and link options here | @rem Set compile and link options here | ||||||
| @setlocal | @setlocal | ||||||
| @set DST_COMPILE=cl /nologo /Isrc\include /c /O2 /W3 /D_CRT_SECURE_NO_WARNINGS | @set DST_COMPILE=cl /nologo /Isrc\include /c /O2 /W3 /LD /D_CRT_SECURE_NO_WARNINGS | ||||||
| @set DST_LINK=link /nologo | @set DST_LINK=link /nologo | ||||||
| 
 | 
 | ||||||
|  | mkdir build | ||||||
|  | mkdir build\core | ||||||
|  | mkdir build\mainclient | ||||||
|  | 
 | ||||||
| @rem Build the xxd tool for generating sources | @rem Build the xxd tool for generating sources | ||||||
| @cl /nologo /c src/tools/xxd.c /Foxxd.o | @cl /nologo /c src/tools/xxd.c /Fobuild\xxd.obj | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| @link /nologo /out:xxd.exe xxd.o | @link /nologo /out:build\xxd.exe build\xxd.obj | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| 
 | 
 | ||||||
| @rem Generate the headers | @rem Generate the headers | ||||||
| @xxd.exe src/core/core.dst src/include/generated/core.h dst_gen_core | @build\xxd.exe src\core\core.dst src\include\generated\core.h dst_gen_core | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| @xxd.exe src/mainclient/init.dst src/include/generated/init.h dst_gen_init | @build\xxd.exe src\mainclient\init.dst src\include\generated\init.h dst_gen_init | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| 
 | 
 | ||||||
| @rem Build the sources | @rem Build the sources | ||||||
| for %%f in (src/core/*.c) do ( | for %%f in (src\core\*.c) do ( | ||||||
| 	@%DST_COMPILE% src/core/%%f | 	@%DST_COMPILE% /Fobuild\core\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @rem Build the main client | @rem Build the main client | ||||||
| for %%f in (src/mainclient/*.c) do ( | for %%f in (src\mainclient\*.c) do ( | ||||||
| 	@%DST_COMPILE% src/mainclient/%%f | 	@%DST_COMPILE% /Fobuild\mainclient\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @rem Link everything to main client | @rem Link everything to main client | ||||||
| %DST_LINK% /out:dst.exe *.obj | %DST_LINK% /out:dst.exe build\core\*.obj build\mainclient\*.obj | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| 
 | 
 | ||||||
| echo === Successfully built dst.exe for Windows === | echo === Successfully built dst.exe for Windows === | ||||||
| echo === Run 'build test' to run tests. == | echo === Run 'build_win test' to run tests. == | ||||||
| echo === Run 'build clean' to delete build artifacts. === | echo === Run 'build_win clean' to delete build artifacts. === | ||||||
| exit /b 0 | exit /b 0 | ||||||
| 
 | 
 | ||||||
| @rem Not using correct command line | @rem Not using correct command line | ||||||
| @@ -67,11 +71,8 @@ exit /b 0 | |||||||
| 
 | 
 | ||||||
| @rem Clean build artifacts  | @rem Clean build artifacts  | ||||||
| :CLEAN | :CLEAN | ||||||
| del *.obj | del dst.exe dst.exp dst.lib | ||||||
| del xxd.o | rd /s /q build | ||||||
| del xxd.exe |  | ||||||
| del dst.exe |  | ||||||
| del src\include\generated\*.h |  | ||||||
| exit /b 0 | exit /b 0 | ||||||
| 
 | 
 | ||||||
| @rem Run tests | @rem Run tests | ||||||
| @@ -44,7 +44,7 @@ | |||||||
|     "\n\n") |     "\n\n") | ||||||
|   (emit-rule out "all" "${TARGET}") |   (emit-rule out "all" "${TARGET}") | ||||||
|   (emit-rule out "%.o" @["%.c" "${HEADERS}"] "${CC} ${CFLAGS} -o $@ $< ${LDFLAGS}") |   (emit-rule out "%.o" @["%.c" "${HEADERS}"] "${CC} ${CFLAGS} -o $@ $< ${LDFLAGS}") | ||||||
|   (emit-rule out "${TARGET}" "${SOURCES}" "${CC} ${CFLAGS} -o $@ $^ ${LDFLAGS}") |   (emit-rule out "${TARGET}" "${OBJECTS}" "${CC} ${CFLAGS} -o $@ $^ ${LDFLAGS}") | ||||||
|   (emit-rule out "clean" "" "rm ${OBJECTS}") |   (emit-rule out "clean" "" "rm ${OBJECTS}") | ||||||
|   # Phony targets |   # Phony targets | ||||||
|   (emit-rule out ".PHONY" @["all" "clean"]) |   (emit-rule out ".PHONY" @["all" "clean"]) | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| # Copyright (c) 2017 Calvin Rose |  | ||||||
| #  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to |  | ||||||
| # deal in the Software without restriction, including without limitation the |  | ||||||
| # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |  | ||||||
| # sell copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
| #  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
| #  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |  | ||||||
| # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |  | ||||||
| # IN THE SOFTWARE. |  | ||||||
|  |  | ||||||
| cmake_minimum_required(VERSION 3.7) |  | ||||||
| project(hello) |  | ||||||
|  |  | ||||||
| # Set Some Variables |  | ||||||
| set(TARGET_NAME "hello") |  | ||||||
| set(CMAKE_C_STANDARD 99) |  | ||||||
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") |  | ||||||
|  |  | ||||||
| set(SOURCES main.c) |  | ||||||
|  |  | ||||||
| include_directories(../../src/include) |  | ||||||
|  |  | ||||||
| # Build the module |  | ||||||
| add_library(${TARGET_NAME} SHARED ${SOURCES}) |  | ||||||
							
								
								
									
										49
									
								
								natives/hello/build.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								natives/hello/build.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | @rem Build dst on windows | ||||||
|  | @rem | ||||||
|  | @rem Open a "Windows SDK Command Shell" and cd to the dst directory | ||||||
|  | @rem Then run this script with no arguments to build the executable | ||||||
|  |  | ||||||
|  | @echo off | ||||||
|  |  | ||||||
|  | @rem Ensure correct command prompt | ||||||
|  | @if not defined INCLUDE goto :BADCMD | ||||||
|  |  | ||||||
|  | @rem Subcommands | ||||||
|  | @if "%1"=="clean" goto CLEAN | ||||||
|  |  | ||||||
|  | @rem Set compile and link options here | ||||||
|  | @setlocal | ||||||
|  | @set DST_COMPILE=cl /nologo /I..\..\src\include /c /O2 /W3 | ||||||
|  | @set DST_LINK=link /nologo /dll ..\..\dst.lib | ||||||
|  |  | ||||||
|  | @rem Build the sources | ||||||
|  | for %%f in (*.c) do ( | ||||||
|  | 	@%DST_COMPILE% %%f | ||||||
|  |     @if errorlevel 1 goto :BUILDFAIL | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | %DST_LINK% /out:hello.dll *.obj | ||||||
|  | @if errorlevel 1 goto :BUILDFAIL | ||||||
|  |  | ||||||
|  | echo === Successfully built hello.dll for Windows === | ||||||
|  | echo === Run 'build clean' to delete build artifacts. === | ||||||
|  | exit /b 0 | ||||||
|  |  | ||||||
|  | @rem Not using correct command line | ||||||
|  | :BADCMD | ||||||
|  | @echo Use a Visual Studio Developer Command Prompt to run this script | ||||||
|  | exit /b 1 | ||||||
|  |  | ||||||
|  | @rem Clean build artifacts  | ||||||
|  | :CLEAN | ||||||
|  | del *.obj | ||||||
|  | del hello.* | ||||||
|  | exit /b 0 | ||||||
|  |  | ||||||
|  | @rem Build failed | ||||||
|  | :BUILDFAIL | ||||||
|  | @echo. | ||||||
|  | @echo ******************************************************* | ||||||
|  | @echo *** Build FAILED -- Please check the error messages *** | ||||||
|  | @echo ******************************************************* | ||||||
|  | exit /b 1 | ||||||
| @@ -35,7 +35,7 @@ static const DstReg cfuns[] = { | |||||||
|     {NULL, NULL} |     {NULL, NULL} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| int _dst_init(DstArgs args) { | DST_MODULE_ENTRY (DstArgs args) { | ||||||
|     DstTable *env = dst_env_arg(args); |     DstTable *env = dst_env_arg(args); | ||||||
|     dst_env_cfuns(env, cfuns); |     dst_env_cfuns(env, cfuns); | ||||||
|     return 0; |     return 0; | ||||||
|   | |||||||
| @@ -1138,8 +1138,8 @@ | |||||||
|       "./?/init.dst" |       "./?/init.dst" | ||||||
|       "./dst_modules/?.dst" |       "./dst_modules/?.dst" | ||||||
|       "./dst_modules/?/init.dst" |       "./dst_modules/?/init.dst" | ||||||
|       (string syspath VERSION "/?.dst") |       (string syspath dst.version "/?.dst") | ||||||
|       (string syspath VERSION "/?/init.dst") |       (string syspath dst.version "/?/init.dst") | ||||||
|       (string syspath "/?.dst") |       (string syspath "/?.dst") | ||||||
|       (string syspath "/?/init.dst")]) |       (string syspath "/?/init.dst")]) | ||||||
|   (defglobal 'module.native-paths |   (defglobal 'module.native-paths | ||||||
| @@ -1147,10 +1147,18 @@ | |||||||
|       "./?/??.so" |       "./?/??.so" | ||||||
|       "./dst_modules/?.so" |       "./dst_modules/?.so" | ||||||
|       "./dst_modules/?/??.so" |       "./dst_modules/?/??.so" | ||||||
|       (string syspath VERSION "/?.so") |       (string syspath dst.version "/?.so") | ||||||
|       (string syspath VERSION "/?/??.so") |       (string syspath dst.version "/?/??.so") | ||||||
|       (string syspath "/?.so") |       (string syspath "/?.so") | ||||||
|       (string syspath "/?/??.so")])) |       (string syspath "/?/??.so")])) | ||||||
|  |        | ||||||
|  | (if (= :windows (os.which)) | ||||||
|  |    (loop [i :range [0 (length module.native-paths)]] | ||||||
|  |      (def x (get module.native-paths i)) | ||||||
|  |      (put | ||||||
|  |        module.native-paths | ||||||
|  |        i | ||||||
|  |        (string.replace ".so" ".dll" x)))) | ||||||
|  |  | ||||||
| (defn module.find | (defn module.find | ||||||
|   [path paths] |   [path paths] | ||||||
|   | |||||||
| @@ -540,7 +540,8 @@ DstTable *dst_core_env(void) { | |||||||
|     templatize_comparator(env, DST_FUN_EQ, "==", 0, DOP_NUMERIC_EQUAL); |     templatize_comparator(env, DST_FUN_EQ, "==", 0, DOP_NUMERIC_EQUAL); | ||||||
|     templatize_comparator(env, DST_FUN_NEQ, "not==", 1, DOP_NUMERIC_EQUAL); |     templatize_comparator(env, DST_FUN_NEQ, "not==", 1, DOP_NUMERIC_EQUAL); | ||||||
|  |  | ||||||
|     dst_env_def(env, "VERSION", dst_cstringv(DST_VERSION)); |     /* Platform detection */ | ||||||
|  |     dst_env_def(env, "dst.version", dst_cstringv(DST_VERSION)); | ||||||
|  |  | ||||||
|     /* Set as gc root */ |     /* Set as gc root */ | ||||||
|     dst_gcroot(dst_wrap_table(env)); |     dst_gcroot(dst_wrap_table(env)); | ||||||
|   | |||||||
| @@ -34,6 +34,16 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | static int os_which(DstArgs args) { | ||||||
|  |     #ifdef DST_WINDOWS | ||||||
|  |         DST_RETURN_CSYMBOL(args, ":windows"); | ||||||
|  |     #elif __APPLE__ | ||||||
|  |         DST_RETURN_CSYMBOL(args, ":macos"); | ||||||
|  |     #else | ||||||
|  |         DST_RETURN_CSYMBOL(args, ":posix"); | ||||||
|  |     #endif | ||||||
|  | } | ||||||
|  |  | ||||||
| #ifdef DST_WINDOWS | #ifdef DST_WINDOWS | ||||||
| static int os_execute(DstArgs args) { | static int os_execute(DstArgs args) { | ||||||
|     DST_MINARITY(args, 1); |     DST_MINARITY(args, 1); | ||||||
| @@ -259,6 +269,7 @@ static int os_cwd(DstArgs args) { | |||||||
| } | } | ||||||
|  |  | ||||||
| static const DstReg cfuns[] = { | static const DstReg cfuns[] = { | ||||||
|  |     {"os.which", os_which}, | ||||||
|     {"os.execute", os_execute}, |     {"os.execute", os_execute}, | ||||||
|     {"os.shell", os_shell}, |     {"os.shell", os_shell}, | ||||||
|     {"os.exit", os_exit}, |     {"os.exit", os_exit}, | ||||||
|   | |||||||
| @@ -109,6 +109,15 @@ extern "C" { | |||||||
| #define DST_DYNAMIC_MODULES | #define DST_DYNAMIC_MODULES | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* How to export symbols */ | ||||||
|  | #ifndef DST_API | ||||||
|  | #ifdef DST_WINDOWS | ||||||
|  | #define DST_API __declspec(dllexport) | ||||||
|  | #else | ||||||
|  | #define DST_API __attribute__((visibility ("default"))) | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /* Handle runtime errors */ | /* Handle runtime errors */ | ||||||
| #ifndef dst_exit | #ifndef dst_exit | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -387,13 +396,13 @@ union Dst { | |||||||
|         ? dst_nanbox_isreal(x) \ |         ? dst_nanbox_isreal(x) \ | ||||||
|         : dst_nanbox_checkauxtype((x), (t))) |         : dst_nanbox_checkauxtype((x), (t))) | ||||||
|  |  | ||||||
| void *dst_nanbox_to_pointer(Dst x); | DST_API void *dst_nanbox_to_pointer(Dst x); | ||||||
| void dst_nanbox_memempty(DstKV *mem, int32_t count); | DST_API void dst_nanbox_memempty(DstKV *mem, int32_t count); | ||||||
| void *dst_nanbox_memalloc_empty(int32_t count); | DST_API void *dst_nanbox_memalloc_empty(int32_t count); | ||||||
| Dst dst_nanbox_from_pointer(void *p, uint64_t tagmask); | DST_API Dst dst_nanbox_from_pointer(void *p, uint64_t tagmask); | ||||||
| Dst dst_nanbox_from_cpointer(const void *p, uint64_t tagmask); | DST_API Dst dst_nanbox_from_cpointer(const void *p, uint64_t tagmask); | ||||||
| Dst dst_nanbox_from_double(double d); | DST_API Dst dst_nanbox_from_double(double d); | ||||||
| Dst dst_nanbox_from_bits(uint64_t bits); | DST_API Dst dst_nanbox_from_bits(uint64_t bits); | ||||||
|  |  | ||||||
| #define dst_memempty(mem, len) dst_nanbox_memempty((mem), (len)) | #define dst_memempty(mem, len) dst_nanbox_memempty((mem), (len)) | ||||||
| #define dst_memalloc_empty(count) dst_nanbox_memalloc_empty(count) | #define dst_memalloc_empty(count) dst_nanbox_memalloc_empty(count) | ||||||
| @@ -492,23 +501,23 @@ struct Dst { | |||||||
| #define dst_unwrap_integer(x) ((x).as.integer) | #define dst_unwrap_integer(x) ((x).as.integer) | ||||||
| #define dst_unwrap_real(x) ((x).as.real) | #define dst_unwrap_real(x) ((x).as.real) | ||||||
|  |  | ||||||
| Dst dst_wrap_nil(void); | DST_API Dst dst_wrap_nil(void); | ||||||
| Dst dst_wrap_real(double x); | DST_API Dst dst_wrap_real(double x); | ||||||
| Dst dst_wrap_integer(int32_t x); | DST_API Dst dst_wrap_integer(int32_t x); | ||||||
| Dst dst_wrap_true(void); | DST_API Dst dst_wrap_true(void); | ||||||
| Dst dst_wrap_false(void); | DST_API Dst dst_wrap_false(void); | ||||||
| Dst dst_wrap_boolean(int x); | DST_API Dst dst_wrap_boolean(int x); | ||||||
| Dst dst_wrap_string(const uint8_t *x); | DST_API Dst dst_wrap_string(const uint8_t *x); | ||||||
| Dst dst_wrap_symbol(const uint8_t *x); | DST_API Dst dst_wrap_symbol(const uint8_t *x); | ||||||
| Dst dst_wrap_array(DstArray *x); | DST_API Dst dst_wrap_array(DstArray *x); | ||||||
| Dst dst_wrap_tuple(const Dst *x); | DST_API Dst dst_wrap_tuple(const Dst *x); | ||||||
| Dst dst_wrap_struct(const DstKV *x); | DST_API Dst dst_wrap_struct(const DstKV *x); | ||||||
| Dst dst_wrap_fiber(DstFiber *x); | DST_API Dst dst_wrap_fiber(DstFiber *x); | ||||||
| Dst dst_wrap_buffer(DstBuffer *x); | DST_API Dst dst_wrap_buffer(DstBuffer *x); | ||||||
| Dst dst_wrap_function(DstFunction *x); | DST_API Dst dst_wrap_function(DstFunction *x); | ||||||
| Dst dst_wrap_cfunction(DstCFunction x); | DST_API Dst dst_wrap_cfunction(DstCFunction x); | ||||||
| Dst dst_wrap_table(DstTable *x); | DST_API Dst dst_wrap_table(DstTable *x); | ||||||
| Dst dst_wrap_abstract(void *x); | DST_API Dst dst_wrap_abstract(void *x); | ||||||
|  |  | ||||||
| /* End of tagged union implementation */ | /* End of tagged union implementation */ | ||||||
| #endif | #endif | ||||||
| @@ -827,14 +836,14 @@ extern enum DstInstructionType dst_instructions[DOP_INSTRUCTION_COUNT]; | |||||||
| /***** START SECTION MAIN *****/ | /***** START SECTION MAIN *****/ | ||||||
|  |  | ||||||
| /* Parsing */ | /* Parsing */ | ||||||
| void dst_parser_init(DstParser *parser); | DST_API void dst_parser_init(DstParser *parser); | ||||||
| void dst_parser_deinit(DstParser *parser); | DST_API void dst_parser_deinit(DstParser *parser); | ||||||
| int dst_parser_consume(DstParser *parser, uint8_t c); | DST_API int dst_parser_consume(DstParser *parser, uint8_t c); | ||||||
| enum DstParserStatus dst_parser_status(DstParser *parser); | DST_API enum DstParserStatus dst_parser_status(DstParser *parser); | ||||||
| Dst dst_parser_produce(DstParser *parser); | DST_API Dst dst_parser_produce(DstParser *parser); | ||||||
| const char *dst_parser_error(DstParser *parser); | DST_API const char *dst_parser_error(DstParser *parser); | ||||||
| void dst_parser_flush(DstParser *parser); | DST_API void dst_parser_flush(DstParser *parser); | ||||||
| DstParser *dst_check_parser(Dst x); | DST_API DstParser *dst_check_parser(Dst x); | ||||||
|  |  | ||||||
| /* Assembly */ | /* Assembly */ | ||||||
| typedef struct DstAssembleResult DstAssembleResult; | typedef struct DstAssembleResult DstAssembleResult; | ||||||
| @@ -848,9 +857,9 @@ struct DstAssembleResult { | |||||||
|     const uint8_t *error; |     const uint8_t *error; | ||||||
|     enum DstAssembleStatus status; |     enum DstAssembleStatus status; | ||||||
| }; | }; | ||||||
| DstAssembleResult dst_asm(Dst source, int flags); | DST_API DstAssembleResult dst_asm(Dst source, int flags); | ||||||
| Dst dst_disasm(DstFuncDef *def); | DST_API Dst dst_disasm(DstFuncDef *def); | ||||||
| Dst dst_asm_decode_instruction(uint32_t instr); | DST_API Dst dst_asm_decode_instruction(uint32_t instr); | ||||||
|  |  | ||||||
| /* Compilation */ | /* Compilation */ | ||||||
| typedef struct DstCompileOptions DstCompileOptions; | typedef struct DstCompileOptions DstCompileOptions; | ||||||
| @@ -866,44 +875,44 @@ struct DstCompileResult { | |||||||
|     DstSourceMapping error_mapping; |     DstSourceMapping error_mapping; | ||||||
|     enum DstCompileStatus status; |     enum DstCompileStatus status; | ||||||
| }; | }; | ||||||
| DstCompileResult dst_compile(Dst source, DstTable *env, const uint8_t *where); | DST_API DstCompileResult dst_compile(Dst source, DstTable *env, const uint8_t *where); | ||||||
|  |  | ||||||
| /* Get the default environment for dst */ | /* Get the default environment for dst */ | ||||||
| DstTable *dst_core_env(void); | DST_API DstTable *dst_core_env(void); | ||||||
|  |  | ||||||
| int dst_dobytes(DstTable *env, const uint8_t *bytes, int32_t len, const char *sourcePath); | DST_API int dst_dobytes(DstTable *env, const uint8_t *bytes, int32_t len, const char *sourcePath); | ||||||
| int dst_dostring(DstTable *env, const char *str, const char *sourcePath); | DST_API int dst_dostring(DstTable *env, const char *str, const char *sourcePath); | ||||||
|  |  | ||||||
| /* Number scanning */ | /* Number scanning */ | ||||||
| Dst dst_scan_number(const uint8_t *src, int32_t len); | DST_API Dst dst_scan_number(const uint8_t *src, int32_t len); | ||||||
| int32_t dst_scan_integer(const uint8_t *str, int32_t len, int *err); | DST_API int32_t dst_scan_integer(const uint8_t *str, int32_t len, int *err); | ||||||
| double dst_scan_real(const uint8_t *str, int32_t len, int *err); | DST_API double dst_scan_real(const uint8_t *str, int32_t len, int *err); | ||||||
|  |  | ||||||
| /* Array functions */ | /* Array functions */ | ||||||
| DstArray *dst_array(int32_t capacity); | DST_API DstArray *dst_array(int32_t capacity); | ||||||
| DstArray *dst_array_n(const Dst *elements, int32_t n); | DST_API DstArray *dst_array_n(const Dst *elements, int32_t n); | ||||||
| DstArray *dst_array_init(DstArray *array, int32_t capacity); | DST_API DstArray *dst_array_init(DstArray *array, int32_t capacity); | ||||||
| void dst_array_deinit(DstArray *array); | DST_API void dst_array_deinit(DstArray *array); | ||||||
| void dst_array_ensure(DstArray *array, int32_t capacity); | DST_API void dst_array_ensure(DstArray *array, int32_t capacity); | ||||||
| void dst_array_setcount(DstArray *array, int32_t count); | DST_API void dst_array_setcount(DstArray *array, int32_t count); | ||||||
| void dst_array_push(DstArray *array, Dst x); | DST_API void dst_array_push(DstArray *array, Dst x); | ||||||
| Dst dst_array_pop(DstArray *array); | DST_API Dst dst_array_pop(DstArray *array); | ||||||
| Dst dst_array_peek(DstArray *array); | DST_API Dst dst_array_peek(DstArray *array); | ||||||
|  |  | ||||||
| /* Buffer functions */ | /* Buffer functions */ | ||||||
| DstBuffer *dst_buffer(int32_t capacity); | DST_API DstBuffer *dst_buffer(int32_t capacity); | ||||||
| DstBuffer *dst_buffer_init(DstBuffer *buffer, int32_t capacity); | DST_API DstBuffer *dst_buffer_init(DstBuffer *buffer, int32_t capacity); | ||||||
| void dst_buffer_deinit(DstBuffer *buffer); | DST_API void dst_buffer_deinit(DstBuffer *buffer); | ||||||
| void dst_buffer_ensure(DstBuffer *buffer, int32_t capacity); | DST_API void dst_buffer_ensure(DstBuffer *buffer, int32_t capacity); | ||||||
| void dst_buffer_setcount(DstBuffer *buffer, int32_t count); | DST_API void dst_buffer_setcount(DstBuffer *buffer, int32_t count); | ||||||
| int dst_buffer_extra(DstBuffer *buffer, int32_t n); | DST_API int dst_buffer_extra(DstBuffer *buffer, int32_t n); | ||||||
| int dst_buffer_push_bytes(DstBuffer *buffer, const uint8_t *string, int32_t len); | DST_API int dst_buffer_push_bytes(DstBuffer *buffer, const uint8_t *string, int32_t len); | ||||||
| int dst_buffer_push_string(DstBuffer *buffer, const uint8_t *string); | DST_API int dst_buffer_push_string(DstBuffer *buffer, const uint8_t *string); | ||||||
| int dst_buffer_push_cstring(DstBuffer *buffer, const char *cstring); | DST_API int dst_buffer_push_cstring(DstBuffer *buffer, const char *cstring); | ||||||
| int dst_buffer_push_u8(DstBuffer *buffer, uint8_t x); | DST_API int dst_buffer_push_u8(DstBuffer *buffer, uint8_t x); | ||||||
| int dst_buffer_push_u16(DstBuffer *buffer, uint16_t x); | DST_API int dst_buffer_push_u16(DstBuffer *buffer, uint16_t x); | ||||||
| int dst_buffer_push_u32(DstBuffer *buffer, uint32_t x); | DST_API int dst_buffer_push_u32(DstBuffer *buffer, uint32_t x); | ||||||
| int dst_buffer_push_u64(DstBuffer *buffer, uint64_t x); | DST_API int dst_buffer_push_u64(DstBuffer *buffer, uint64_t x); | ||||||
|  |  | ||||||
| /* Tuple */ | /* Tuple */ | ||||||
| #define dst_tuple_raw(t) ((int32_t *)(t) - 4) | #define dst_tuple_raw(t) ((int32_t *)(t) - 4) | ||||||
| @@ -911,40 +920,40 @@ int dst_buffer_push_u64(DstBuffer *buffer, uint64_t x); | |||||||
| #define dst_tuple_hash(t) ((dst_tuple_raw(t)[1])) | #define dst_tuple_hash(t) ((dst_tuple_raw(t)[1])) | ||||||
| #define dst_tuple_sm_line(t) ((dst_tuple_raw(t)[2])) | #define dst_tuple_sm_line(t) ((dst_tuple_raw(t)[2])) | ||||||
| #define dst_tuple_sm_col(t) ((dst_tuple_raw(t)[3])) | #define dst_tuple_sm_col(t) ((dst_tuple_raw(t)[3])) | ||||||
| Dst *dst_tuple_begin(int32_t length); | DST_API Dst *dst_tuple_begin(int32_t length); | ||||||
| const Dst *dst_tuple_end(Dst *tuple); | DST_API const Dst *dst_tuple_end(Dst *tuple); | ||||||
| const Dst *dst_tuple_n(const Dst *values, int32_t n); | DST_API const Dst *dst_tuple_n(const Dst *values, int32_t n); | ||||||
| int dst_tuple_equal(const Dst *lhs, const Dst *rhs); | DST_API int dst_tuple_equal(const Dst *lhs, const Dst *rhs); | ||||||
| int dst_tuple_compare(const Dst *lhs, const Dst *rhs); | DST_API int dst_tuple_compare(const Dst *lhs, const Dst *rhs); | ||||||
|  |  | ||||||
| /* String/Symbol functions */ | /* String/Symbol functions */ | ||||||
| #define dst_string_raw(s) ((int32_t *)(s) - 2) | #define dst_string_raw(s) ((int32_t *)(s) - 2) | ||||||
| #define dst_string_length(s) (dst_string_raw(s)[0]) | #define dst_string_length(s) (dst_string_raw(s)[0]) | ||||||
| #define dst_string_hash(s) ((dst_string_raw(s)[1])) | #define dst_string_hash(s) ((dst_string_raw(s)[1])) | ||||||
| uint8_t *dst_string_begin(int32_t length); | DST_API uint8_t *dst_string_begin(int32_t length); | ||||||
| const uint8_t *dst_string_end(uint8_t *str); | DST_API const uint8_t *dst_string_end(uint8_t *str); | ||||||
| const uint8_t *dst_string(const uint8_t *buf, int32_t len); | DST_API const uint8_t *dst_string(const uint8_t *buf, int32_t len); | ||||||
| const uint8_t *dst_cstring(const char *cstring); | DST_API const uint8_t *dst_cstring(const char *cstring); | ||||||
| int dst_string_compare(const uint8_t *lhs, const uint8_t *rhs); | DST_API int dst_string_compare(const uint8_t *lhs, const uint8_t *rhs); | ||||||
| int dst_string_equal(const uint8_t *lhs, const uint8_t *rhs); | DST_API int dst_string_equal(const uint8_t *lhs, const uint8_t *rhs); | ||||||
| int dst_string_equalconst(const uint8_t *lhs, const uint8_t *rhs, int32_t rlen, int32_t rhash); | DST_API int dst_string_equalconst(const uint8_t *lhs, const uint8_t *rhs, int32_t rlen, int32_t rhash); | ||||||
| const uint8_t *dst_string_unique(const uint8_t *buf, int32_t len); | DST_API const uint8_t *dst_string_unique(const uint8_t *buf, int32_t len); | ||||||
| const uint8_t *dst_cstring_unique(const char *s); | DST_API const uint8_t *dst_cstring_unique(const char *s); | ||||||
| const uint8_t *dst_description(Dst x); | DST_API const uint8_t *dst_description(Dst x); | ||||||
| const uint8_t *dst_to_string(Dst x); | DST_API const uint8_t *dst_to_string(Dst x); | ||||||
| void dst_to_string_b(DstBuffer *buffer, Dst x); | DST_API void dst_to_string_b(DstBuffer *buffer, Dst x); | ||||||
| void dst_to_description_b(DstBuffer *buffer, Dst x); | DST_API void dst_to_description_b(DstBuffer *buffer, Dst x); | ||||||
| const char *dst_to_zerostring(Dst x); | DST_API const char *dst_to_zerostring(Dst x); | ||||||
| #define dst_cstringv(cstr) dst_wrap_string(dst_cstring(cstr)) | #define dst_cstringv(cstr) dst_wrap_string(dst_cstring(cstr)) | ||||||
| #define dst_stringv(str, len) dst_wrap_string(dst_string((str), (len))) | #define dst_stringv(str, len) dst_wrap_string(dst_string((str), (len))) | ||||||
| const uint8_t *dst_formatc(const char *format, ...); | DST_API const uint8_t *dst_formatc(const char *format, ...); | ||||||
| void dst_puts(const uint8_t *str); | DST_API void dst_puts(const uint8_t *str); | ||||||
|  |  | ||||||
| /* Symbol functions */ | /* Symbol functions */ | ||||||
| const uint8_t *dst_symbol(const uint8_t *str, int32_t len); | DST_API const uint8_t *dst_symbol(const uint8_t *str, int32_t len); | ||||||
| const uint8_t *dst_symbol_from_string(const uint8_t *str); | DST_API const uint8_t *dst_symbol_from_string(const uint8_t *str); | ||||||
| const uint8_t *dst_csymbol(const char *str); | DST_API const uint8_t *dst_csymbol(const char *str); | ||||||
| const uint8_t *dst_symbol_gen(void); | DST_API const uint8_t *dst_symbol_gen(void); | ||||||
| #define dst_symbolv(str, len) dst_wrap_symbol(dst_symbol((str), (len))) | #define dst_symbolv(str, len) dst_wrap_symbol(dst_symbol((str), (len))) | ||||||
| #define dst_csymbolv(cstr) dst_wrap_symbol(dst_csymbol(cstr)) | #define dst_csymbolv(cstr) dst_wrap_symbol(dst_csymbol(cstr)) | ||||||
|  |  | ||||||
| @@ -954,76 +963,76 @@ const uint8_t *dst_symbol_gen(void); | |||||||
| #define dst_struct_capacity(t) (dst_struct_raw(t)[1]) | #define dst_struct_capacity(t) (dst_struct_raw(t)[1]) | ||||||
| #define dst_struct_hash(t) (dst_struct_raw(t)[2]) | #define dst_struct_hash(t) (dst_struct_raw(t)[2]) | ||||||
| /* Do something with the 4th header slot - flags? */ | /* Do something with the 4th header slot - flags? */ | ||||||
| DstKV *dst_struct_begin(int32_t count); | DST_API DstKV *dst_struct_begin(int32_t count); | ||||||
| void dst_struct_put(DstKV *st, Dst key, Dst value); | DST_API void dst_struct_put(DstKV *st, Dst key, Dst value); | ||||||
| const DstKV *dst_struct_end(DstKV *st); | DST_API const DstKV *dst_struct_end(DstKV *st); | ||||||
| Dst dst_struct_get(const DstKV *st, Dst key); | DST_API Dst dst_struct_get(const DstKV *st, Dst key); | ||||||
| const DstKV *dst_struct_next(const DstKV *st, const DstKV *kv); | DST_API const DstKV *dst_struct_next(const DstKV *st, const DstKV *kv); | ||||||
| DstTable *dst_struct_to_table(const DstKV *st); | DST_API DstTable *dst_struct_to_table(const DstKV *st); | ||||||
| int dst_struct_equal(const DstKV *lhs, const DstKV *rhs); | DST_API int dst_struct_equal(const DstKV *lhs, const DstKV *rhs); | ||||||
| int dst_struct_compare(const DstKV *lhs, const DstKV *rhs); | DST_API int dst_struct_compare(const DstKV *lhs, const DstKV *rhs); | ||||||
| const DstKV *dst_struct_find(const DstKV *st, Dst key); | DST_API const DstKV *dst_struct_find(const DstKV *st, Dst key); | ||||||
|  |  | ||||||
| /* Table functions */ | /* Table functions */ | ||||||
| DstTable *dst_table(int32_t capacity); | DST_API DstTable *dst_table(int32_t capacity); | ||||||
| DstTable *dst_table_init(DstTable *table, int32_t capacity); | DST_API DstTable *dst_table_init(DstTable *table, int32_t capacity); | ||||||
| void dst_table_deinit(DstTable *table); | DST_API void dst_table_deinit(DstTable *table); | ||||||
| Dst dst_table_get(DstTable *t, Dst key); | DST_API Dst dst_table_get(DstTable *t, Dst key); | ||||||
| Dst dst_table_rawget(DstTable *t, Dst key); | DST_API Dst dst_table_rawget(DstTable *t, Dst key); | ||||||
| Dst dst_table_remove(DstTable *t, Dst key); | DST_API Dst dst_table_remove(DstTable *t, Dst key); | ||||||
| void dst_table_put(DstTable *t, Dst key, Dst value); | DST_API void dst_table_put(DstTable *t, Dst key, Dst value); | ||||||
| const DstKV *dst_table_next(DstTable *t, const DstKV *kv); | DST_API const DstKV *dst_table_next(DstTable *t, const DstKV *kv); | ||||||
| const DstKV *dst_table_to_struct(DstTable *t); | DST_API const DstKV *dst_table_to_struct(DstTable *t); | ||||||
| void dst_table_merge_table(DstTable *table, DstTable *other); | DST_API void dst_table_merge_table(DstTable *table, DstTable *other); | ||||||
| void dst_table_merge_struct(DstTable *table, const DstKV *other); | DST_API void dst_table_merge_struct(DstTable *table, const DstKV *other); | ||||||
| DstKV *dst_table_find(DstTable *t, Dst key); | DST_API DstKV *dst_table_find(DstTable *t, Dst key); | ||||||
|  |  | ||||||
| /* Fiber */ | /* Fiber */ | ||||||
| DstFiber *dst_fiber(DstFunction *callee, int32_t capacity); | DST_API DstFiber *dst_fiber(DstFunction *callee, int32_t capacity); | ||||||
| #define dst_fiber_status(f) (((f)->flags & DST_FIBER_STATUS_MASK) >> DST_FIBER_STATUS_OFFSET) | #define dst_fiber_status(f) (((f)->flags & DST_FIBER_STATUS_MASK) >> DST_FIBER_STATUS_OFFSET) | ||||||
|  |  | ||||||
| /* Treat similar types through uniform interfaces for iteration */ | /* Treat similar types through uniform interfaces for iteration */ | ||||||
| int dst_indexed_view(Dst seq, const Dst **data, int32_t *len); | DST_API int dst_indexed_view(Dst seq, const Dst **data, int32_t *len); | ||||||
| int dst_bytes_view(Dst str, const uint8_t **data, int32_t *len); | DST_API int dst_bytes_view(Dst str, const uint8_t **data, int32_t *len); | ||||||
| int dst_dictionary_view(Dst tab, const DstKV **data, int32_t *len, int32_t *cap); | DST_API int dst_dictionary_view(Dst tab, const DstKV **data, int32_t *len, int32_t *cap); | ||||||
|  |  | ||||||
| /* Abstract */ | /* Abstract */ | ||||||
| #define dst_abstract_header(u) ((DstAbstractHeader *)(u) - 1) | #define dst_abstract_header(u) ((DstAbstractHeader *)(u) - 1) | ||||||
| #define dst_abstract_type(u) (dst_abstract_header(u)->type) | #define dst_abstract_type(u) (dst_abstract_header(u)->type) | ||||||
| #define dst_abstract_size(u) (dst_abstract_header(u)->size) | #define dst_abstract_size(u) (dst_abstract_header(u)->size) | ||||||
| void *dst_abstract(const DstAbstractType *type, size_t size); | DST_API void *dst_abstract(const DstAbstractType *type, size_t size); | ||||||
|  |  | ||||||
| /* Native */ | /* Native */ | ||||||
| DstCFunction dst_native(const char *name, const uint8_t **error); | DST_API DstCFunction dst_native(const char *name, const uint8_t **error); | ||||||
|  |  | ||||||
| /* GC */ | /* GC */ | ||||||
| void dst_mark(Dst x); | DST_API void dst_mark(Dst x); | ||||||
| void dst_sweep(void); | DST_API void dst_sweep(void); | ||||||
| void dst_collect(void); | DST_API void dst_collect(void); | ||||||
| void dst_clear_memory(void); | DST_API void dst_clear_memory(void); | ||||||
| void dst_gcroot(Dst root); | DST_API void dst_gcroot(Dst root); | ||||||
| int dst_gcunroot(Dst root); | DST_API int dst_gcunroot(Dst root); | ||||||
| int dst_gcunrootall(Dst root); | DST_API int dst_gcunrootall(Dst root); | ||||||
| int dst_gclock(void); | DST_API int dst_gclock(void); | ||||||
| void dst_gcunlock(int handle); | DST_API void dst_gcunlock(int handle); | ||||||
|  |  | ||||||
| /* Functions */ | /* Functions */ | ||||||
| DstFuncDef *dst_funcdef_alloc(void); | DST_API DstFuncDef *dst_funcdef_alloc(void); | ||||||
| DstFunction *dst_thunk(DstFuncDef *def); | DST_API DstFunction *dst_thunk(DstFuncDef *def); | ||||||
| int dst_verify(DstFuncDef *def); | DST_API int dst_verify(DstFuncDef *def); | ||||||
|  |  | ||||||
| /* Misc */ | /* Misc */ | ||||||
| int dst_equals(Dst x, Dst y); | DST_API int dst_equals(Dst x, Dst y); | ||||||
| int32_t dst_hash(Dst x); | DST_API int32_t dst_hash(Dst x); | ||||||
| int dst_compare(Dst x, Dst y); | DST_API int dst_compare(Dst x, Dst y); | ||||||
| int dst_cstrcmp(const uint8_t *str, const char *other); | DST_API int dst_cstrcmp(const uint8_t *str, const char *other); | ||||||
|  |  | ||||||
| /* VM functions */ | /* VM functions */ | ||||||
| int dst_init(void); | DST_API int dst_init(void); | ||||||
| void dst_deinit(void); | DST_API void dst_deinit(void); | ||||||
| DstSignal dst_continue(DstFiber *fiber, Dst in, Dst *out); | DST_API DstSignal dst_continue(DstFiber *fiber, Dst in, Dst *out); | ||||||
| #define dst_run(F,O) dst_continue(F, dst_wrap_nil(), O) | #define dst_run(F,O) dst_continue(F, dst_wrap_nil(), O) | ||||||
| DstSignal dst_call(DstFunction *fun, int32_t argn, const Dst *argv, Dst *out, DstFiber **f); | DST_API DstSignal dst_call(DstFunction *fun, int32_t argn, const Dst *argv, Dst *out, DstFiber **f); | ||||||
|  |  | ||||||
| /* Env helpers */ | /* Env helpers */ | ||||||
| typedef enum { | typedef enum { | ||||||
| @@ -1032,35 +1041,35 @@ typedef enum { | |||||||
|     DST_BINDING_VAR, |     DST_BINDING_VAR, | ||||||
|     DST_BINDING_MACRO |     DST_BINDING_MACRO | ||||||
| } DstBindingType; | } DstBindingType; | ||||||
| void dst_env_def(DstTable *env, const char *name, Dst val); | DST_API void dst_env_def(DstTable *env, const char *name, Dst val); | ||||||
| void dst_env_var(DstTable *env, const char *name, Dst val); | DST_API void dst_env_var(DstTable *env, const char *name, Dst val); | ||||||
| void dst_env_cfuns(DstTable *env, const DstReg *cfuns); | DST_API void dst_env_cfuns(DstTable *env, const DstReg *cfuns); | ||||||
| DstBindingType dst_env_resolve(DstTable *env, const uint8_t *sym, Dst *out); | DST_API DstBindingType dst_env_resolve(DstTable *env, const uint8_t *sym, Dst *out); | ||||||
| DstTable *dst_env_arg(DstArgs args); | DST_API DstTable *dst_env_arg(DstArgs args); | ||||||
|  |  | ||||||
| /* C Function helpers */ | /* C Function helpers */ | ||||||
| int dst_arity_err(DstArgs args, int32_t n, const char *prefix); | DST_API int dst_arity_err(DstArgs args, int32_t n, const char *prefix); | ||||||
| int dst_type_err(DstArgs args, int32_t n, DstType expected); | DST_API int dst_type_err(DstArgs args, int32_t n, DstType expected); | ||||||
| int dst_typemany_err(DstArgs args, int32_t n, int expected); | DST_API int dst_typemany_err(DstArgs args, int32_t n, int expected); | ||||||
| int dst_typeabstract_err(DstArgs args, int32_t n, const DstAbstractType *at); | DST_API int dst_typeabstract_err(DstArgs args, int32_t n, const DstAbstractType *at); | ||||||
|  |  | ||||||
| /* Initialize builtin libraries */ | /* Initialize builtin libraries */ | ||||||
| int dst_lib_io(DstArgs args); | DST_API int dst_lib_io(DstArgs args); | ||||||
| int dst_lib_math(DstArgs args); | DST_API int dst_lib_math(DstArgs args); | ||||||
| int dst_lib_array(DstArgs args); | DST_API int dst_lib_array(DstArgs args); | ||||||
| int dst_lib_tuple(DstArgs args); | DST_API int dst_lib_tuple(DstArgs args); | ||||||
| int dst_lib_buffer(DstArgs args); | DST_API int dst_lib_buffer(DstArgs args); | ||||||
| int dst_lib_table(DstArgs args); | DST_API int dst_lib_table(DstArgs args); | ||||||
| int dst_lib_fiber(DstArgs args); | DST_API int dst_lib_fiber(DstArgs args); | ||||||
| int dst_lib_os(DstArgs args); | DST_API int dst_lib_os(DstArgs args); | ||||||
| int dst_lib_string(DstArgs args); | DST_API int dst_lib_string(DstArgs args); | ||||||
| int dst_lib_marsh(DstArgs args); | DST_API int dst_lib_marsh(DstArgs args); | ||||||
| int dst_lib_parse(DstArgs args); | DST_API int dst_lib_parse(DstArgs args); | ||||||
| int dst_lib_asm(DstArgs args); | DST_API int dst_lib_asm(DstArgs args); | ||||||
| int dst_lib_compile(DstArgs args); | DST_API int dst_lib_compile(DstArgs args); | ||||||
|  |  | ||||||
| /* Helpers for writing modules */ | /* Helpers for writing modules */ | ||||||
| #define DST_MODULE_ENTRY int _dst_init | #define DST_MODULE_ENTRY DST_API int _dst_init | ||||||
|  |  | ||||||
| /***** END SECTION MAIN *****/ | /***** END SECTION MAIN *****/ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ | |||||||
|   -- Stop handling options`) |   -- Stop handling options`) | ||||||
|            (os.exit 0) |            (os.exit 0) | ||||||
|            1) |            1) | ||||||
|      "v" (fn @[] (print VERSION) (os.exit 0) 1) |      "v" (fn @[] (print dst.version) (os.exit 0) 1) | ||||||
|      "s" (fn @[] (:= *raw-stdin* true) (:= *should-repl* true) 1) |      "s" (fn @[] (:= *raw-stdin* true) (:= *should-repl* true) 1) | ||||||
|      "r" (fn @[] (:= *should-repl* true) 1) |      "r" (fn @[] (:= *should-repl* true) 1) | ||||||
|      "p" (fn @[] (:= *exit-on-error* false) 1) |      "p" (fn @[] (:= *exit-on-error* false) 1) | ||||||
| @@ -53,7 +53,7 @@ | |||||||
|     (if *raw-stdin* |     (if *raw-stdin* | ||||||
|       (repl nil identity) |       (repl nil identity) | ||||||
|       (do |       (do | ||||||
|         (print (string "Dst " VERSION "  Copyright (C) 2017-2018 Calvin Rose")) |         (print (string "Dst " dst.version "  Copyright (C) 2017-2018 Calvin Rose")) | ||||||
|         (repl (fn [buf p] |         (repl (fn [buf p] | ||||||
|                 (def [line] (parser.where p)) |                 (def [line] (parser.where p)) | ||||||
|                 (def prompt (string "dst:" line ":" (parser.state p) "> ")) |                 (def prompt (string "dst:" line ":" (parser.state p) "> ")) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose