mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Merge branch 'master' of github.com:janet-lang/janet
This commit is contained in:
		| @@ -1,6 +1,12 @@ | |||||||
| # 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. | ||||||
|  |  | ||||||
|  | ## Unreleased | ||||||
|  | - Change default fiber stack limit to the maximum value of a 32 bit signed integer. | ||||||
|  | - Some bug fixes with `jpm` | ||||||
|  | - Add `os/arch` to get ISA that janet was compiled for | ||||||
|  | - Add color to stacktraces via `(dyn :err-color)` | ||||||
|  |  | ||||||
| ## 1.2.0 - 2019-08-08 | ## 1.2.0 - 2019-08-08 | ||||||
| - Add `take` and `drop` functions that are easier to use compared to the | - Add `take` and `drop` functions that are easier to use compared to the | ||||||
|   existing slice functions. |   existing slice functions. | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -15,9 +15,10 @@ matrix: | |||||||
|  |  | ||||||
| # skip unsupported combinations | # skip unsupported combinations | ||||||
| init: | init: | ||||||
| - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" |     - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" | ||||||
|  |  | ||||||
| install: | install: | ||||||
|  |     - set JANET_BUILD=%appveyor_repo_commit:~0,7% | ||||||
|     - choco install nsis -y -pre |     - choco install nsis -y -pre | ||||||
|     # Replace makensis.exe and files with special long string build. This should |     # Replace makensis.exe and files with special long string build. This should | ||||||
|     # prevent issues when setting PATH during installation. |     # prevent issues when setting PATH during installation. | ||||||
| @@ -27,6 +28,8 @@ install: | |||||||
|     # We need to reload vcvars after refreshing |     # We need to reload vcvars after refreshing | ||||||
|     - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" |     - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" | ||||||
|     - build_win test-install |     - build_win test-install | ||||||
|  |     - set janet_outname=%appveyor_repo_tag_name% | ||||||
|  |     - if "%janet_outname%"=="" set janet_outname=v1.2.0 | ||||||
| build: off | build: off | ||||||
|  |  | ||||||
| only_commits: | only_commits: | ||||||
| @@ -35,8 +38,20 @@ only_commits: | |||||||
|     - src/ |     - src/ | ||||||
|  |  | ||||||
| artifacts: | artifacts: | ||||||
|     - path: janet-v1.2.0-windows-installer.exe |     - name: janet.c | ||||||
|       name: janet-v1.2.0-windows-installer.exe |       path: dist\janet.c | ||||||
|  |       type: File | ||||||
|  |     - name: janet.h | ||||||
|  |       path: dist\janet.h | ||||||
|  |       type: File | ||||||
|  |     - name: janetconf.h | ||||||
|  |       path: dist\janetconf.h | ||||||
|  |       type: File | ||||||
|  |     - name: "janet-$(janet_outname)-windows" | ||||||
|  |       path: dist | ||||||
|  |       type: Zip | ||||||
|  |     - path: "janet-$(janet_outname)-windows-installer.exe" | ||||||
|  |       name: "janet-$(janet_outname)-windows-installer.exe" | ||||||
|       type: File |       type: File | ||||||
|  |  | ||||||
| deploy: | deploy: | ||||||
| @@ -44,7 +59,7 @@ deploy: | |||||||
|   provider: GitHub |   provider: GitHub | ||||||
|   auth_token: |   auth_token: | ||||||
|     secure: lwEXy09qhj2jSH9s1C/KvCkAUqJSma8phFR+0kbsfUc3rVxpNK5uD3z9Md0SjYRx |     secure: lwEXy09qhj2jSH9s1C/KvCkAUqJSma8phFR+0kbsfUc3rVxpNK5uD3z9Md0SjYRx | ||||||
|   artifact: janet-windows |   artifact: /janet.*/ | ||||||
|   draft: true |   draft: true | ||||||
|   on: |   on: | ||||||
|       APPVEYOR_REPO_TAG: true |       APPVEYOR_REPO_TAG: true | ||||||
|   | |||||||
| @@ -23,36 +23,41 @@ | |||||||
| @set JANET_LINK=link /nologo | @set JANET_LINK=link /nologo | ||||||
| @set JANET_LINK_STATIC=lib /nologo | @set JANET_LINK_STATIC=lib /nologo | ||||||
|  |  | ||||||
|  | @rem Add janet build tag | ||||||
|  | if not "%JANET_BUILD%" == "" ( | ||||||
|  |     @set JANET_COMPILE=%JANET_COMPILE% /DJANET_BUILD="\"%JANET_BUILD%\"" | ||||||
|  | ) | ||||||
|  |  | ||||||
| mkdir build | mkdir build | ||||||
| mkdir build\core | mkdir build\core | ||||||
| mkdir build\mainclient | mkdir build\mainclient | ||||||
| mkdir build\boot | mkdir build\boot | ||||||
|  |  | ||||||
| @rem Build the xxd tool for generating sources | @rem Build the xxd tool for generating sources | ||||||
| @cl /nologo /c tools/xxd.c /Fobuild\xxd.obj | cl /nologo /c tools/xxd.c /Fobuild\xxd.obj | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| @link /nologo /out:build\xxd.exe build\xxd.obj | link /nologo /out:build\xxd.exe build\xxd.obj | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
|  |  | ||||||
| @rem Generate the embedded sources | @rem Generate the embedded sources | ||||||
| @build\xxd.exe src\mainclient\init.janet build\init.gen.c janet_gen_init | build\xxd.exe src\mainclient\init.janet build\init.gen.c janet_gen_init | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| @build\xxd.exe src\boot\boot.janet build\boot.gen.c janet_gen_boot | build\xxd.exe src\boot\boot.janet build\boot.gen.c janet_gen_boot | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
|  |  | ||||||
| @rem Build the generated sources | @rem Build the generated sources | ||||||
| @%JANET_COMPILE% /Fobuild\mainclient\init.gen.obj build\init.gen.c | %JANET_COMPILE% /Fobuild\mainclient\init.gen.obj build\init.gen.c | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
| @%JANET_COMPILE% /Fobuild\boot\boot.gen.obj build\boot.gen.c | %JANET_COMPILE% /Fobuild\boot\boot.gen.obj build\boot.gen.c | ||||||
| @if errorlevel 1 goto :BUILDFAIL | @if errorlevel 1 goto :BUILDFAIL | ||||||
|  |  | ||||||
| @rem Build the bootstrap interpreter | @rem Build the bootstrap interpreter | ||||||
| for %%f in (src\core\*.c) do ( | for %%f in (src\core\*.c) do ( | ||||||
|     @%JANET_COMPILE% /DJANET_BOOTSTRAP /Fobuild\boot\%%~nf.obj %%f |     %JANET_COMPILE% /DJANET_BOOTSTRAP /Fobuild\boot\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
| for %%f in (src\boot\*.c) do ( | for %%f in (src\boot\*.c) do ( | ||||||
|     @%JANET_COMPILE% /DJANET_BOOTSTRAP /Fobuild\boot\%%~nf.obj %%f |     %JANET_COMPILE% /DJANET_BOOTSTRAP /Fobuild\boot\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
| %JANET_LINK% /out:build\janet_boot.exe build\boot\*.obj | %JANET_LINK% /out:build\janet_boot.exe build\boot\*.obj | ||||||
| @@ -60,12 +65,12 @@ for %%f in (src\boot\*.c) do ( | |||||||
| build\janet_boot build\core_image.c | build\janet_boot build\core_image.c | ||||||
|  |  | ||||||
| @rem Build the core image | @rem Build the core image | ||||||
| @%JANET_COMPILE% /Fobuild\core_image.obj build\core_image.c | %JANET_COMPILE% /Fobuild\core_image.obj build\core_image.c | ||||||
| @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 ( | ||||||
|     @%JANET_COMPILE% /Fobuild\core\%%~nf.obj %%f |     %JANET_COMPILE% /Fobuild\core\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -74,7 +79,7 @@ rc /nologo /fobuild\janet_win.res janet_win.rc | |||||||
|  |  | ||||||
| @rem Build the main client | @rem Build the main client | ||||||
| for %%f in (src\mainclient\*.c) do ( | for %%f in (src\mainclient\*.c) do ( | ||||||
|     @%JANET_COMPILE% /Fobuild\mainclient\%%~nf.obj %%f |     %JANET_COMPILE% /Fobuild\mainclient\%%~nf.obj %%f | ||||||
|     @if errorlevel 1 goto :BUILDFAIL |     @if errorlevel 1 goto :BUILDFAIL | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,7 +25,19 @@ VIFileVersion "${PRODUCT_VERSION}" | |||||||
|  |  | ||||||
| # Basics | # Basics | ||||||
| Name "Janet" | Name "Janet" | ||||||
| OutFile "janet-v${VERSION}-windows-installer.exe" |  | ||||||
|  | # Do some NSIS-fu to figure out at compile time if we are in appveyor | ||||||
|  | !define OUTNAME $%APPVEYOR_REPO_TAG_NAME% | ||||||
|  | !define "CHECK_${OUTNAME}" | ||||||
|  | !define DOLLAR "$" | ||||||
|  | !ifdef CHECK_${DOLLAR}%APPVEYOR_REPO_TAG_NAME% | ||||||
|  |     # We are not in the appveyor environment, use version name | ||||||
|  |     !define OUTNAME_PART v${VERSION} | ||||||
|  | !else | ||||||
|  |     # We are in appveyor, use git tag name for installer | ||||||
|  |     !define OUTNAME_PART ${OUTNAME} | ||||||
|  | !endif | ||||||
|  | OutFile "janet-${OUTNAME_PART}-windows-installer.exe" | ||||||
|  |  | ||||||
| # Some Configuration | # Some Configuration | ||||||
| !define APPNAME "Janet" | !define APPNAME "Janet" | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ option('int_types', 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) | ||||||
| option('max_macro_expand', type : 'integer', min : 1, max : 8000, value : 200) | option('max_macro_expand', type : 'integer', min : 1, max : 8000, value : 200) | ||||||
| option('stack_max', type : 'integer', min : 8096, max : 1000000000, value : 16384) | option('stack_max', type : 'integer', min : 8096, max : 0x7fffffff, value : 0x7fffffff) | ||||||
|  |  | ||||||
| option('arch_name', type : 'string', value: '') | option('arch_name', type : 'string', value: '') | ||||||
| option('os_name', type : 'string', value: '') | option('os_name', type : 'string', value: '') | ||||||
|   | |||||||
| @@ -64,7 +64,9 @@ void janet_array_ensure(JanetArray *array, int32_t capacity, int32_t growth) { | |||||||
|     Janet *newData; |     Janet *newData; | ||||||
|     Janet *old = array->data; |     Janet *old = array->data; | ||||||
|     if (capacity <= array->capacity) return; |     if (capacity <= array->capacity) return; | ||||||
|     capacity *= growth; |     int64_t new_capacity = capacity * growth; | ||||||
|  |     if (new_capacity > INT32_MAX) new_capacity = INT32_MAX; | ||||||
|  |     capacity = (int32_t) new_capacity; | ||||||
|     newData = realloc(old, capacity * sizeof(Janet)); |     newData = realloc(old, capacity * sizeof(Janet)); | ||||||
|     if (NULL == newData) { |     if (NULL == newData) { | ||||||
|         JANET_OUT_OF_MEMORY; |         JANET_OUT_OF_MEMORY; | ||||||
|   | |||||||
| @@ -87,19 +87,27 @@ void janet_fiber_setcapacity(JanetFiber *fiber, int32_t n) { | |||||||
|     fiber->capacity = n; |     fiber->capacity = n; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* Grow fiber if needed */ | ||||||
|  | static void janet_fiber_grow(JanetFiber *fiber, int32_t needed) { | ||||||
|  |     int32_t cap = needed > (INT32_MAX / 2) ? INT32_MAX : 2 * needed; | ||||||
|  |     janet_fiber_setcapacity(fiber, cap); | ||||||
|  | } | ||||||
|  |  | ||||||
| /* Push a value on the next stack frame */ | /* Push a value on the next stack frame */ | ||||||
| void janet_fiber_push(JanetFiber *fiber, Janet x) { | void janet_fiber_push(JanetFiber *fiber, Janet x) { | ||||||
|  |     if (fiber->stacktop == INT32_MAX) janet_panic("stack overflow"); | ||||||
|     if (fiber->stacktop >= fiber->capacity) { |     if (fiber->stacktop >= fiber->capacity) { | ||||||
|         janet_fiber_setcapacity(fiber, 2 * fiber->stacktop); |         janet_fiber_grow(fiber, fiber->stacktop); | ||||||
|     } |     } | ||||||
|     fiber->data[fiber->stacktop++] = x; |     fiber->data[fiber->stacktop++] = x; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Push 2 values on the next stack frame */ | /* Push 2 values on the next stack frame */ | ||||||
| void janet_fiber_push2(JanetFiber *fiber, Janet x, Janet y) { | void janet_fiber_push2(JanetFiber *fiber, Janet x, Janet y) { | ||||||
|  |     if (fiber->stacktop >= INT32_MAX - 1) janet_panic("stack overflow"); | ||||||
|     int32_t newtop = fiber->stacktop + 2; |     int32_t newtop = fiber->stacktop + 2; | ||||||
|     if (newtop > fiber->capacity) { |     if (newtop > fiber->capacity) { | ||||||
|         janet_fiber_setcapacity(fiber, 2 * newtop); |         janet_fiber_grow(fiber, newtop); | ||||||
|     } |     } | ||||||
|     fiber->data[fiber->stacktop] = x; |     fiber->data[fiber->stacktop] = x; | ||||||
|     fiber->data[fiber->stacktop + 1] = y; |     fiber->data[fiber->stacktop + 1] = y; | ||||||
| @@ -108,9 +116,10 @@ void janet_fiber_push2(JanetFiber *fiber, Janet x, Janet y) { | |||||||
|  |  | ||||||
| /* Push 3 values on the next stack frame */ | /* Push 3 values on the next stack frame */ | ||||||
| void janet_fiber_push3(JanetFiber *fiber, Janet x, Janet y, Janet z) { | void janet_fiber_push3(JanetFiber *fiber, Janet x, Janet y, Janet z) { | ||||||
|  |     if (fiber->stacktop >= INT32_MAX - 2) janet_panic("stack overflow"); | ||||||
|     int32_t newtop = fiber->stacktop + 3; |     int32_t newtop = fiber->stacktop + 3; | ||||||
|     if (newtop > fiber->capacity) { |     if (newtop > fiber->capacity) { | ||||||
|         janet_fiber_setcapacity(fiber, 2 * newtop); |         janet_fiber_grow(fiber, newtop); | ||||||
|     } |     } | ||||||
|     fiber->data[fiber->stacktop] = x; |     fiber->data[fiber->stacktop] = x; | ||||||
|     fiber->data[fiber->stacktop + 1] = y; |     fiber->data[fiber->stacktop + 1] = y; | ||||||
| @@ -120,9 +129,10 @@ void janet_fiber_push3(JanetFiber *fiber, Janet x, Janet y, Janet z) { | |||||||
|  |  | ||||||
| /* Push an array on the next stack frame */ | /* Push an array on the next stack frame */ | ||||||
| void janet_fiber_pushn(JanetFiber *fiber, const Janet *arr, int32_t n) { | void janet_fiber_pushn(JanetFiber *fiber, const Janet *arr, int32_t n) { | ||||||
|  |     if (fiber->stacktop > INT32_MAX - n) janet_panic("stack overflow"); | ||||||
|     int32_t newtop = fiber->stacktop + n; |     int32_t newtop = fiber->stacktop + n; | ||||||
|     if (newtop > fiber->capacity) { |     if (newtop > fiber->capacity) { | ||||||
|         janet_fiber_setcapacity(fiber, 2 * newtop); |         janet_fiber_grow(fiber, newtop); | ||||||
|     } |     } | ||||||
|     memcpy(fiber->data + fiber->stacktop, arr, n * sizeof(Janet)); |     memcpy(fiber->data + fiber->stacktop, arr, n * sizeof(Janet)); | ||||||
|     fiber->stacktop = newtop; |     fiber->stacktop = newtop; | ||||||
|   | |||||||
| @@ -628,6 +628,9 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in, JanetFiberStatus status) | |||||||
|  |  | ||||||
|     VM_OP(JOP_TAILCALL) { |     VM_OP(JOP_TAILCALL) { | ||||||
|         Janet callee = stack[D]; |         Janet callee = stack[D]; | ||||||
|  |         if (fiber->stacktop > fiber->maxstack) { | ||||||
|  |             vm_throw("stack overflow"); | ||||||
|  |         } | ||||||
|         if (janet_checktype(callee, JANET_KEYWORD)) { |         if (janet_checktype(callee, JANET_KEYWORD)) { | ||||||
|             vm_commit(); |             vm_commit(); | ||||||
|             callee = resolve_method(callee, fiber); |             callee = resolve_method(callee, fiber); | ||||||
|   | |||||||
| @@ -171,11 +171,10 @@ extern "C" { | |||||||
| /* Maximum depth to follow table prototypes before giving up and returning nil. */ | /* Maximum depth to follow table prototypes before giving up and returning nil. */ | ||||||
| #define JANET_MAX_MACRO_EXPAND 200 | #define JANET_MAX_MACRO_EXPAND 200 | ||||||
|  |  | ||||||
| /* Define max stack size for stacks before raising a stack overflow error. | /* Define default max stack size for stacks before raising a stack overflow error. | ||||||
|  * If this is not defined, fiber stacks can grow without limit (until memory |  * This can also be set on a per fiber basis. */ | ||||||
|  * runs out) */ |  | ||||||
| #ifndef JANET_STACK_MAX | #ifndef JANET_STACK_MAX | ||||||
| #define JANET_STACK_MAX 16384 | #define JANET_STACK_MAX 0x7fffffff | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* Use nanboxed values - uses 8 bytes per value instead of 12 or 16. | /* Use nanboxed values - uses 8 bytes per value instead of 12 or 16. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose