9 Commits

Author SHA1 Message Date
Ed_
5efd14322e Updated zpl to latest, update refactor scripts based on convention used in gencpp 2023-04-19 15:53:01 -04:00
Ed_
c4efd1890d Misc changes 2023-04-03 03:53:59 -04:00
Ed_
063a3a972c Workflow script update (attempt to use env vars) 2023-03-31 17:32:47 -04:00
Ed_
e301b400ba More readme additions and another debug line out fix. 2023-03-31 17:27:59 -04:00
Ed_
6bc4346652 Update readme, fix an issue with stb_image.refactor script (needed newline at eof), some script changes. 2023-03-31 16:17:02 -04:00
Ed_
6e91555a20 Script additions and improvements, fix IO bug. 2023-03-31 01:04:56 -04:00
Ed_
1b0c5d176c Addeed stb_image header
Going to use as another test case.
2023-03-30 23:19:40 -04:00
Ed_
ea09b27b3b ok 2023-03-30 22:52:58 -04:00
Ed_
d344043c44 ok 2023-03-30 22:50:01 -04:00
16 changed files with 26270 additions and 17845 deletions

View File

@ -16,11 +16,13 @@ on:
inputs: inputs:
type: type:
description: 'Meson buildtype (release, debug, etc.)' description: 'Meson buildtype (release, debug, etc.)'
default: release
required: false required: false
test: test:
description: 'Run tests (test)' description: 'Run tests (test)'
required: false default: test
required: true
jobs: jobs:
build: build:
@ -81,7 +83,7 @@ jobs:
if (-not [string]::IsNullOrEmpty($type)) { $args += $type } if (-not [string]::IsNullOrEmpty($type)) { $args += $type }
if (-not [string]::IsNullOrEmpty($test)) { $args += $test } if (-not [string]::IsNullOrEmpty($test)) { $args += $test }
& .\scripts\build.ci.ps1 debug test Invoke-Expression "& .\scripts\build.ci.ps1 $args"
- name: Get Short Commit SHA - name: Get Short Commit SHA
shell: pwsh shell: pwsh
@ -96,13 +98,13 @@ jobs:
New-Item -ItemType Directory -Path "./artifact" New-Item -ItemType Directory -Path "./artifact"
Copy-Item "./build/refactor.exe" -Destination "./artifact/refactor.exe" Copy-Item "./build/refactor.exe" -Destination "./artifact/refactor.exe"
Compress-Archive -Path "./artifact/*" -DestinationPath "./artifact/refactor-${env:SHORT_SHA}.zip" Compress-Archive -Path "./artifact/*" -DestinationPath "./artifact/refactor-$($env:SHORT_SHA).zip"
- name: Upload Release - name: Upload Release
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1
with: with:
tag: Release tag: Release
artifacts: ./artifact/refactor-${env:SHORT_SHA}.zip artifacts: ./artifact/refactor-${{ env.SHORT_SHA }}.zip
omitBody: true omitBody: true
# bodyFile: "body.md" # bodyFile: "body.md"
allowUpdates: true allowUpdates: true

View File

@ -2,18 +2,18 @@
Refactor c/c++ files (and problably others) with ease. Refactor c/c++ files (and problably others) with ease.
## Parameters : ## Parameters
* `-num` : Used if more than one source file is provided (if used, number of destination files provided MUST MATCH). * `-num` : Used if more than one source file is provided (if used, number of destination files provided MUST MATCH).
* `-src` : Source file to refactor * `-src` : Source file to refactor
* `-dst` : Destination file after the refactor (omit to use the same as source) * `-dst` : Destination file after the refactor (omit to use the same as source)
* `-spec` : Specification containing rules to use for the refactor. * `-spec` : Specification containing rules to use for the refactor.
* `-debug` : Use only if on debug build and desire to attach to process. * `-debug` : Use if on debug build and desire to attach to process, or to get a more verbose log.
## Syntax : ## Syntax
* `not` Omit word or namespace. * `not` Omit an a signature. (Modifies include, word, namespace, etc)
* `include` Preprocessor include <file> related identifiers. * `include` Preprocessor include `<file path>` related identifiers.
* `word` Fixed sized identifier. * `word` Fixed sized identifier.
* `namespace` Variable sized identifiers, mainly intended to redefine c-namespace of an identifier. * `namespace` Variable sized identifiers, mainly intended to redefine c-namespace of an identifier.
* `,` is used to delimit arguments (if doing a find and replace). * `,` is used to delimit arguments (if doing a find and replace).
@ -30,20 +30,62 @@ The main benefit for using this over alts is its problably more ergonomic and pe
There are other programs more robust for doing that sort of thing but I was not able to find something this simple. There are other programs more robust for doing that sort of thing but I was not able to find something this simple.
### Note ### Example scripts
See `scripts/template_reafactor.ps1` and the `test/*.refactor` related scripts on intended usage.
This app is not very nice to use directly from CLI. Instead run from a script after gathering the arguments.
There is a desire also to get this setup as a single-header library and also alternative with a minimalist GUI for simple refactors.
### Notes
* Building for debug provides some nice output with context on a per-line basis. * Building for debug provides some nice output with context on a per-line basis.
* Release will only show errors for asserts (that will kill the refactor early). * Release will only show errors for asserts (that will kill the refactor early).
* If the refactor crashes, the files previously written to will retain their changes. * If the refactor crashes, the files previously written to will retain their changes.
Make sure to have the code backed up on a VCS or in some other way. * Make sure to have the code backed up on a VCS or in some other way.
* This was compiled using meson with ninja and clang on windows 11. The ZPL library used however should work fine on the other major os platforms and compiler venders.
* The scripts used for building and otherwise are in the scripts directory and are all in powershell (with exception to the meson.build). Techncially there should be a powershell package available on other platorms but worst case it should be pretty easy to port these scripts to w/e shell script you'd perfer. * The scripts used for building and otherwise are in the scripts directory and are all in powershell (with exception to the meson.build). Techncially there should be a powershell package available on other platorms but worst case it should be pretty easy to port these scripts to w/e shell script you'd perfer.
TODO: ## Building
The project has all build configuration in the `scripts` directory.
* `build.ci.ps1` is intended for a continuous intergration setup (GH-worfklow for now).
* `build.ps1` is just a wrap of build.ci that just calls cls.
* `clean.ps1` will clean the workspace of all generated files.
* `get_sources.ps1` is used to gather sources since meson devs refuse to add dynamic retrival of sources for a build.
The project uses [meson](https://github.com/mesonbuild/meson) as the build tool.
Compiler : clang
OS: Windows 11 (windows-latest for github actions)
There should theoretically not be anything stopping it from building on other plaforms.
The library's main dependency is [zpl](https://github.com/zpl-c) which seems to support all major platforms.
## Testing
If the `test` parameter is provided to the build scripts, the project and thirdparty code will be refactored based on the specificiation files `*.refactor` residing in `test`.
With the refactors applied a meson configuraiton is setup (`meson.build` in test) and run to build. So long as it compiles, the feature set of the current version should work fine.
* There is an extra file `stb_image` that is parsed but unused during compilation.
* Planned for use in the namespace addition todo.
## TODO:
* Possibly come up with a better name.
* Test to see how much needs to be ported for other platforms (if at all)
* Provide binaries in the release page for github. (debug and release builds) * Provide binaries in the release page for github. (debug and release builds)
* Directive to ignore comments (with a way to specify the comment signature). Right now comments that meet the signature of words or namespaces are refactored. * Ability to run and not emit any changes to files unless all files sucessfully are refactored.
* Would fix issue where a refactor overwrites files but failed to complete
* Can have a heavy memory cost, so most likely do not want on by default.
* Make comments ignored by default, and just have ability to specify custom comments.
* Would need a directive to add refactors to comments.
* Directive to add cpp namespaces on specific lines of a file, or near specific signatures.
* This can honestly be done also with placing words on specific lines..
* Provide a GUI build. * Provide a GUI build.
* Provide as a single-header library. * Provide as a single-header library.
* Could add a test case where this library is refactored into pure C (most likely c99 or c11).
* Better tests:
* Automatically pull the zpl repo, refactor and format the library, and package the single header before using it in testing.
* Use gencpp editor/scanner functionality to give it more rich context refactors.
* Port to other platforms.
* Ability to change the naming convention of a signature (snake_case to PascalCase, etc)

View File

@ -21,21 +21,168 @@ include IO.cpp, IO.refactored.cpp
include Spec.hpp, Spec.refactored.hpp include Spec.hpp, Spec.refactored.hpp
include Spec.cpp, Spec.refactored.cpp include Spec.cpp, Spec.refactored.cpp
// Remove the zpl namespace. // Removes the namespace.
namespace zpl_ namespace zpl_
namespace zpl_re_, regex_
// Don't expose zpl internals namespace zpl_random_, rng_
not namespace zpl__ namespace zpl_pr, process_
namespace zpl__, __
namespace ZPL_ADT_, EADT
namespace ZPL_ALLOCATION_, EAllocation
namespace ZPL_CSV_ERROR, ECSV_Error
namespace ZPL_FILE_MODE_, EFileMode_
namespace ZPL_FILE_ERROR_, EFileError_
namespace ZPL_SEEK_WHENCE_, ESeekWhence_
namespace ZPL_FILE_STANDARD_, EFileStandard_
namespace ZPL_FILE_STREAM_, EFileStream_
namespace ZPL_JSON_ERROR_, EJSON_Error_
namespace ZPL_RE_ERROR_, ERegexError_
namespace ZPL_OPTS_, EOpts_
namespace ZPL_OPTS_ERR, EOptsError_
namespace ZPL_PR_OPTS_, EProcessOpts_
// Macro exposure // Macro exposure
//namespace ZPL_ //namespace ZPL_
//not word ZPL_IMPLEMENTATION //not word ZPL_IMPLEMENTATION
// Name conflicts // Type Renames
word opts, options word zpl_aabb2, AABB2
word zpl_aabb3, AABB3
word zpl_adt_assign_style, ADT_AssignStyle
word zpl_adt_delim_style, ADT_DelimStyle
word zpl_adt_error, ADT_Error
word zpl_adt_naming_style, ADT_NamingStyle
word zpl_adt_node, ADT_Node
word zpl_adt_props, ADT_Props
word zpl_adt_type, ADT_Type
word zpl_affinity, Affinity
word zpl_allocation_header_event, AllocationHeaderEvent
word zpl_allocator, AllocatorInfo
word zpl_allocator_proc, AllocatorProc
word zpl_alloc_flags, AllocFlags
word zpl_alloc_type, AllocType
word zpl_arena, Arena
word zpl_arena_snapshot, ArenaSnapshot
word zpl_array, Array
word zpl_array_header, ArrayHeader
word zpl_buffer, Buffer
word zpl_buffer_header, BufferHeader
word zpl_compare_proc, CompareProc
word zpl_csv_error, CSV_Error
word zpl_csv_object, CSV_Object
word zpl_dll_handle, DLLHandle
word zpl_dll_proc, DLLProc
word zpl_dir_type, DirType
word zpl_dir_entry, DirEntry
word zpl_dir_info, DirInfo
word zpl_file_contents, FileContents
word zpl_file_descriptor, FileDescriptor
word zpl_file_error, FileError
word zpl_file, FileInfo
word zpl_file_mode, FileMode
word zpl_file_mode_flag, FileModeFlag
word zpl_file_operations, FileOperations
word zpl_file_close_proc, FileCloseProc
word zpl_file_read_proc, FileReadProc
word zpl_file_seek_proc, FileSeekProc
word zpl_file_write_proc, FileWriteProc
word zpl_file_standard_type, FileStandardType
word zpl_file_stream_flags, FileStreamFlags
word zpl_float2, Float2
word zpl_float3, Float3
word zpl_float4, Float4
word zpl_frustum, Frustum
word zpl_half, Half
word zpl_jobs_priority, JobsPriority
word zpl_jobs_status, JobsStatus
word zpl_jobs_system, JobsSystem
word zpl_json_error, JSON_Error
word zpl_json_object, JSON_Object
word zpl_list, List
word zpl_mat2, Mat2
word zpl_mat3, Mat3
word zpl_mat4, Mat4
word zpl_mutex, Mutex
word zpl_plane, Plane
word zpl_pool, Pool
word zpl_pr, Process
word zpl_pr_si, ProcessStartupInfo
word zpl_quat, Quat
word zpl_rect2, Rect2
word zpl_rect3, Rect3
word zpl_re, Regex
word zpl_re_capture, RegexCapture
word zpl_regex_error, RegexError
wrod zpl_random, RNG
word zpl_rune, Rune
word zpl_scratch_memory, ScratchMemory
word zpl_seek_whence_type, SeekWhenceType
word zpl_semaphore, Semaphore
word zpl_string, String
word zpl_string_header, StringHeader
word zpl_sync, Sync
word zpl_opts, Opts
word zpl_opts_entry, OptsEntry
word zpl_opts_err, OptsError
word zpl_opts_err_type, OptsErrorType
word zpl_opts_types, OptsTypes
word zpl_tar_errors, TarErrors
word zpl_tar_file_type, TarFileType
word zpl_tar_record, TarRecord
word zpl_tar_unpack_proc, TarUnpackProc
word zpl_thread, Thread
word zpl_thread_job, ThreadJob
word zpl_thread_proc, ThreadProc
word zpl_thread_queue, ThreadQueue
word zpl_thread_worker, ThreadWorker
word zpl_vec2, Vec2
word zpl_vec3, Vec3
word zpl_vec4, Vec4
word zpl_virtual_memory, VirtualMemory
word zpl_strncmp, str_compare // Function Renames
word zpl_lfence, fence_load
word zpl_mfence, fence_memory
word zpl_sfence, fence_store
word zpl_memchr, mem_find
word zpl_memcopy, mem_copy
word zpl_memmove, mem_move
word zpl_memset, mem_set
word zpl_memswap, mem_swap
word zpl_exit, process_exit
word zpl_rdtsc, read_cpu_time_stamp_counter
word zpl_strcmp, str_compare word zpl_strcmp, str_compare
word zpl_strncmp, str_compare
word zpl_strcat, str_concat
word zpl_strcpy, str_copy
word zpl_strncpy, str_copy
word zpl_strlcpy, str_copy_nulpad
word zpl_strdup, str_dup
word zpl_strchr, str_find
word zpl_strrchr, str_find_last
word zpl_strstr, str_find_substr
word zpl_snprintf, str_fmt
word zpl_snprintf_va, str_fmt_va
word zpl_asprintf, str_fmt_alloc
word zpl_asprintf_va, str_fmt_alloc_va
word zpl_bprintf, str_fmt_buf
word zpl_bprintf_va, str_fmt_buf_va
word zpl_printf, str_fmt_out
word zpl_printf_va, str_fmt_out_va
word zpl_printf_err, str_fmt_out_err
word zpl_printf_err_va, str_fmt_out_err_va
word zpl_fprintf, str_fmt_file
word zpl_fprintf_va, str_fmt_file_va
word zpl_strlen, str_len
word zpl_strnlen, str_len
word zpl_strrev, str_reverse
word zpl_strtok, str_tok
word zpl_strtok_r, str_tok_reentrant
word zpl_sleep, thread_sleep
word zpl_sleep_ms, thread_sleep_ms
word zpl_yield_thread, thread_yield
word zpl_utf8_strlen, utf8_len
word zpl_utf8_strnlen, utf8_len
// Undesired typedefs // Undesired typedefs
word zpl_i8, s8 word zpl_i8, s8
@ -51,21 +198,7 @@ word zpl_uintptr, uptr
word zpl_usize, uw word zpl_usize, uw
word zpl_isize, sw word zpl_isize, sw
// Conflicts with std. (Uncomment if using c externs) // Undesired exposures.
not word zpl_memchr word cast, zpl_cast
not word zpl_memmove
not word zpl_memset not word zpl_thread_local
not word zpl_memswap
not word zpl_memcopy
not word zpl_printf
not word zpl_printf_va
not word zpl_printf_err
not word zpl_printf_err_va
not word zpl_fprintf
not word zpl_fprintf_va
not word zpl_snprintf
not word zpl_snprintf_va
not word zpl_strchr
not word zpl_strlen
not word zpl_strnlen
not word zpl_exit

6
Test/stb_image.refactor Normal file
View File

@ -0,0 +1,6 @@
__VERSION 1
not comments
namespace stbi_
not namepsace stbi__

View File

@ -9,6 +9,9 @@ __VERSION 1
// Precedence (highest to lowest): // Precedence (highest to lowest):
// word, namespace, regex // word, namespace, regex
// This is a cpp refactor specification for zpl.h
// Its intended that the content will be within a cpp namesapce
// Comments // Comments
not comments not comments
@ -20,22 +23,172 @@ not include header/essentials/collections/array.h
not include header/essentials/collections/list.h not include header/essentials/collections/list.h
not include header/core/file.h not include header/core/file.h
not include header/opts.h not include header/opts.h
not include header/regex.h
not include source/core/file.c not include source/core/file.c
not include source/opts.c not include source/opts.c
// Removes the namespace. // Removes the namespace.
namespace zpl_ namespace zpl_
namespace zpl_re_, regex_
// Don't expose internals namespace zpl_random_, rng_
not namespace zpl__ namespace zpl_pr, process_
namespace zpl__, __
namespace ZPL_ADT_, EADT
namespace ZPL_ALLOCATION_, EAllocation
namespace ZPL_CSV_ERROR, ECSV_Error
namespace ZPL_FILE_MODE_, EFileMode_
namespace ZPL_FILE_ERROR_, EFileError_
namespace ZPL_SEEK_WHENCE_, ESeekWhence_
namespace ZPL_FILE_STANDARD_, EFileStandard_
namespace ZPL_FILE_STREAM_, EFileStream_
namespace ZPL_JSON_ERROR_, EJSON_Error_
namespace ZPL_RE_ERROR_, ERegexError_
namespace ZPL_OPTS_, EOpts_
namespace ZPL_OPTS_ERR, EOptsError_
namespace ZPL_PR_OPTS_, EProcessOpts_
// Macro exposure // Macro exposure
//namespace ZPL_ //namespace ZPL_
//not word ZPL_IMPLEMENTATION //not word ZPL_IMPLEMENTATION
word cast, zpl_cast // Type Renames
word zpl_strncmp, str_compare word zpl_aabb2, AABB2
word zpl_aabb3, AABB3
word zpl_adt_assign_style, ADT_AssignStyle
word zpl_adt_delim_style, ADT_DelimStyle
word zpl_adt_error, ADT_Error
word zpl_adt_naming_style, ADT_NamingStyle
word zpl_adt_node, ADT_Node
word zpl_adt_props, ADT_Props
word zpl_adt_type, ADT_Type
word zpl_affinity, Affinity
word zpl_allocation_header_event, AllocationHeaderEvent
word zpl_allocator, AllocatorInfo
word zpl_allocator_proc, AllocatorProc
word zpl_alloc_flags, AllocFlags
word zpl_alloc_type, AllocType
word zpl_arena, Arena
word zpl_arena_snapshot, ArenaSnapshot
word zpl_array, Array
word zpl_array_header, ArrayHeader
word zpl_buffer, Buffer
word zpl_buffer_header, BufferHeader
word zpl_compare_proc, CompareProc
word zpl_csv_error, CSV_Error
word zpl_csv_object, CSV_Object
word zpl_dll_handle, DLLHandle
word zpl_dll_proc, DLLProc
word zpl_dir_type, DirType
word zpl_dir_entry, DirEntry
word zpl_dir_info, DirInfo
word zpl_file_contents, FileContents
word zpl_file_descriptor, FileDescriptor
word zpl_file_error, FileError
word zpl_file, FileInfo
word zpl_file_mode, FileMode
word zpl_file_mode_flag, FileModeFlag
word zpl_file_operations, FileOperations
word zpl_file_close_proc, FileCloseProc
word zpl_file_read_proc, FileReadProc
word zpl_file_seek_proc, FileSeekProc
word zpl_file_write_proc, FileWriteProc
word zpl_file_standard_type, FileStandardType
word zpl_file_stream_flags, FileStreamFlags
word zpl_float2, Float2
word zpl_float3, Float3
word zpl_float4, Float4
word zpl_frustum, Frustum
word zpl_half, Half
word zpl_jobs_priority, JobsPriority
word zpl_jobs_status, JobsStatus
word zpl_jobs_system, JobsSystem
word zpl_json_error, JSON_Error
word zpl_json_object, JSON_Object
word zpl_list, List
word zpl_mat2, Mat2
word zpl_mat3, Mat3
word zpl_mat4, Mat4
word zpl_mutex, Mutex
word zpl_plane, Plane
word zpl_pool, Pool
word zpl_pr, Process
word zpl_pr_si, ProcessStartupInfo
word zpl_quat, Quat
word zpl_rect2, Rect2
word zpl_rect3, Rect3
word zpl_re, Regex
word zpl_re_capture, RegexCapture
word zpl_regex_error, RegexError
wrod zpl_random, RNG
word zpl_rune, Rune
word zpl_scratch_memory, ScratchMemory
word zpl_seek_whence_type, SeekWhenceType
word zpl_semaphore, Semaphore
word zpl_string, String
word zpl_string_header, StringHeader
word zpl_sync, Sync
word zpl_opts, Opts
word zpl_opts_entry, OptsEntry
word zpl_opts_err, OptsError
word zpl_opts_err_type, OptsErrorType
word zpl_opts_types, OptsTypes
word zpl_tar_errors, TarErrors
word zpl_tar_file_type, TarFileType
word zpl_tar_record, TarRecord
word zpl_tar_unpack_proc, TarUnpackProc
word zpl_thread, Thread
word zpl_thread_job, ThreadJob
word zpl_thread_proc, ThreadProc
word zpl_thread_queue, ThreadQueue
word zpl_thread_worker, ThreadWorker
word zpl_vec2, Vec2
word zpl_vec3, Vec3
word zpl_vec4, Vec4
word zpl_virtual_memory, VirtualMemory
// Function Renames
word zpl_lfence, fence_load
word zpl_mfence, fence_memory
word zpl_sfence, fence_store
word zpl_memchr, mem_find
word zpl_memcopy, mem_copy
word zpl_memmove, mem_move
word zpl_memset, mem_set
word zpl_memswap, mem_swap
word zpl_exit, process_exit
word zpl_rdtsc, read_cpu_time_stamp_counter
word zpl_strcmp, str_compare word zpl_strcmp, str_compare
word zpl_strncmp, str_compare
word zpl_strcat, str_concat
word zpl_strcpy, str_copy
word zpl_strncpy, str_copy
word zpl_strlcpy, str_copy_nulpad
word zpl_strdup, str_dup
word zpl_strchr, str_find
word zpl_strrchr, str_find_last
word zpl_strstr, str_find_substr
word zpl_snprintf, str_fmt
word zpl_snprintf_va, str_fmt_va
word zpl_asprintf, str_fmt_alloc
word zpl_asprintf_va, str_fmt_alloc_va
word zpl_bprintf, str_fmt_buf
word zpl_bprintf_va, str_fmt_buf_va
word zpl_printf, str_fmt_out
word zpl_printf_va, str_fmt_out_va
word zpl_printf_err, str_fmt_out_err
word zpl_printf_err_va, str_fmt_out_err_va
word zpl_fprintf, str_fmt_file
word zpl_fprintf_va, str_fmt_file_va
word zpl_strlen, str_len
word zpl_strnlen, str_len
word zpl_strrev, str_reverse
word zpl_strtok, str_tok
word zpl_strtok_r, str_tok_reentrant
word zpl_sleep, thread_sleep
word zpl_sleep_ms, thread_sleep_ms
word zpl_yield_thread, thread_yield
word zpl_utf8_strlen, utf8_len
word zpl_utf8_strnlen, utf8_len
// Undesired typedefs // Undesired typedefs
word zpl_i8, s8 word zpl_i8, s8
@ -52,39 +205,10 @@ word zpl_usize, uw
word zpl_isize, sw word zpl_isize, sw
// Undesired exposures. // Undesired exposures.
//not word zpl_allocator word cast, zpl_cast
//not word zpl_arena
//not word zpl_array
//not word zpl_file
//not word zpl_list
//not word zpl_pool
//not word zpl_opts
// Conflicts with refactor not word zpl_thread_local
word arena, a_arena
word array, a_array // Name Conflicts
word alloc, a_allocator
word file, a_file
word file_size, fsize word file_size, fsize
word list, a_list word alloc, allocator
word opts, a_opts
word pool, a_pool
// Conflicts with std. (Uncomment if using c externs)
not word zpl_memchr
not word zpl_memmove
not word zpl_memset
not word zpl_memswap
not word zpl_memcopy
not word zpl_printf
not word zpl_printf_va
not word zpl_printf_err
not word zpl_printf_err_va
not word zpl_fprintf
not word zpl_fprintf_va
not word zpl_snprintf
not word zpl_snprintf_va
not word zpl_strchr
not word zpl_strlen
not word zpl_strnlen
not word zpl_exit

View File

@ -50,7 +50,7 @@ namespace IO
zpl_file_close( & src ); zpl_file_close( & src );
} }
while ( path++, left--, left > 1 ); while ( path++, left--, left > 0 );
uw persist_size = Largest_Src_Size * 2 + 8; uw persist_size = Largest_Src_Size * 2 + 8;

View File

@ -30,11 +30,11 @@ The program execution is pretty much outlined quite clearly in `int main()`.
There are constraints for specific variables; There are constraints for specific variables;
* `Path_Size_Largest` : Longest path size is set to 1 KB of characters. * `Path_Size_Largest` : Longest path size is set to 1 KB of characters.
* `Token_Max_Length` : Set to 1 KB characters as well. * `Token_Max_Length` : Set to 128 KB.
* `Array_Reserve_Num` : Is set to 4 KB. * `Array_Reserve_Num` : Is set to 4 KB.
* Initial Global arena size : Set to 2 megabytes. * Initial Global arena size : Set to 2 megabytes.
The `Path_Size_Largest` and `Token_Max_Length` are compile-time constraints that the runtime will not have a fallback for, if 1 KB is not enough it will need to be changed for your use case. The `Path_Size_Largest` and `Token_Max_Length` are compile-time constraints that the runtime will not have a fallback for, if current size is not enough it will need to be changed for your use case.
`Array_Reserve_Num` is used to dictate the assumed amount of tokens will be held in total for any of spec's arrays holding ignores and refactor entries. If any of the array's exceed 4 KB they will grow triggering a resize which will bog down the speed of the refactor. Adjust if you think you can increase or lower for use case. `Array_Reserve_Num` is used to dictate the assumed amount of tokens will be held in total for any of spec's arrays holding ignores and refactor entries. If any of the array's exceed 4 KB they will grow triggering a resize which will bog down the speed of the refactor. Adjust if you think you can increase or lower for use case.

View File

@ -7,7 +7,7 @@
namespace Spec namespace Spec
{ {
ct uw Array_Reserve_Num = zpl_kilobytes(4); ct uw Array_Reserve_Num = zpl_kilobytes(4);
ct uw Token_Max_Length = zpl_kilobytes(1); ct uw Token_Max_Length = 128;
namespace StaticData namespace StaticData
{ {

View File

@ -162,6 +162,11 @@ void parse_options( int num, char** arguments )
} }
/*
Refactor will problably have the execution and arg parsing (main and opts)
moved to a separate file.
*/
zpl_arena Refactor_Buffer; zpl_arena Refactor_Buffer;
void refactor() void refactor()
@ -211,21 +216,37 @@ void refactor()
#define pos (IO::Current_Size - left) #define pos (IO::Current_Size - left)
struct Snapshot
{
char const* Src;
sw Left;
uw Col;
uw Line;
};
#define move_forward( Amount_ ) \ #define move_forward( Amount_ ) \
do { \
if ( left - Amount_ <= 0 ) \ if ( left - Amount_ <= 0 ) \
goto End_Search; \ goto End_Search; \
\ \
const sw end = Amount_ - 1; \
\
line += src[end] == '\n'; \
left -= Amount_; \ left -= Amount_; \
col += Amount_; \ col = (col + Amount_) * src[end] != '\n'; \
src += Amount_ \ src += Amount_; \
} \
while (0) \
#define move_back( Amount_ ) \ #define restore( Snapshot_ ) \
left += Amount_; \ src = Snapshot_.Src; \
col -= Amount_; \ left = Snapshot_.Left; \
src -= Amount_ \ col = Snapshot_.Col; \
line = Snapshot_.Line \
do do
{ {
// Check for comments if ignoring.
if ( Spec::Ignore_Comments && src[0] == '/' && left - 2 > 0 ) if ( Spec::Ignore_Comments && src[0] == '/' && left - 2 > 0 )
{ {
if ( src[1] == '/' ) if ( src[1] == '/' )
@ -259,37 +280,33 @@ void refactor()
{ {
Spec::Entry* ignore = Spec::Ignore_Includes; Spec::Entry* ignore = Spec::Ignore_Includes;
sw ignores_left = zpl_array_count( Spec::Ignore_Includes); sw ignores_left = zpl_array_count( Spec::Ignore_Includes);
sw rewind = 0; Snapshot backup = { src, left, col, line };
if ( '#' != src[0] ) if ( '#' != src[0] )
break; break;
move_forward( 1 ); move_forward( 1 );
rewind++;
// Ignore whitespace // Ignore whitespace
while ( zpl_char_is_space( src[0] ) ) while ( zpl_char_is_space( src[0] ) )
{ {
move_forward( 1 ); move_forward( 1 );
rewind++;
} }
if ( zpl_strncmp( include_sig, src, sizeof(include_sig) - 1 ) != 0 ) if ( zpl_strncmp( include_sig, src, sizeof(include_sig) - 1 ) != 0 )
{ {
move_back( rewind ); restore( backup );
break; break;
} }
const u32 sig_size = sizeof(include_sig) - 1; const u32 sig_size = sizeof(include_sig) - 1;
move_forward( sig_size ); move_forward( sig_size );
rewind += sig_size;
// Ignore whitespace // Ignore whitespace
while ( zpl_char_is_space( src[0] ) || src[0] == '\"' || src[0] == '<' ) while ( zpl_char_is_space( src[0] ) || src[0] == '\"' || src[0] == '<' )
{ {
move_forward(1); move_forward(1);
rewind++;
} }
for ( ; ignores_left; ignores_left--, ignore++ ) for ( ; ignores_left; ignores_left--, ignore++ )
@ -318,7 +335,7 @@ void refactor()
} }
} }
move_back( rewind ); restore( backup );
} }
while (false); while (false);
@ -402,37 +419,33 @@ void refactor()
{ {
Spec::Entry* include = Spec::Includes; Spec::Entry* include = Spec::Includes;
sw includes_left = zpl_array_count ( Spec::Includes); sw includes_left = zpl_array_count ( Spec::Includes);
sw rewind = 0; Snapshot backup = { src, left, col, line };
if ( '#' != src[0] ) if ( '#' != src[0] )
break; break;
move_forward( 1 ); move_forward( 1 );
rewind++;
// Ignore whitespace // Ignore whitespace
while ( zpl_char_is_space( src[0] ) ) while ( zpl_char_is_space( src[0] ) )
{ {
move_forward( 1 ); move_forward( 1 );
rewind++;
} }
if ( zpl_strncmp( include_sig, src, sizeof(include_sig) - 1 ) != 0 ) if ( zpl_strncmp( include_sig, src, sizeof(include_sig) - 1 ) != 0 )
{ {
move_back( rewind ); restore( backup );
break; break;
} }
const u32 sig_size = sizeof(include_sig) - 1; const u32 sig_size = sizeof(include_sig) - 1;
move_forward( sig_size ); move_forward( sig_size );
rewind += sig_size;
// Ignore whitespace // Ignore whitespace
while ( zpl_char_is_space( src[0] ) || src[0] == '\"' || src[0] == '<' ) while ( zpl_char_is_space( src[0] ) || src[0] == '\"' || src[0] == '<' )
{ {
move_forward( 1 ); move_forward( 1 );
rewind++;
} }
for ( ; includes_left; includes_left--, include++ ) for ( ; includes_left; includes_left--, include++ )
@ -473,7 +486,7 @@ void refactor()
} }
} }
move_back( rewind ); restore( backup );
} }
while (false); while (false);
@ -581,12 +594,6 @@ void refactor()
} }
Skip: Skip:
if ( src[0] == '\n' )
{
line++;
col = 0;
}
move_forward( 1 ); move_forward( 1 );
} }
while ( left ); while ( left );

View File

@ -29,7 +29,10 @@ if ( -not( Test-Path $path_build ) )
$args_meson += "setup" $args_meson += "setup"
$args_meson += $path_build $args_meson += $path_build
Start-Process meson $args_meson -NoNewWindow -Wait -WorkingDirectory $path_scripts # Start-Process meson $args_meson -NoNewWindow -Wait -WorkingDirectory $path_scripts
Push-Location $path_scripts
Invoke-Expression "& meson $args_meson"
Pop-Location
} }
if ( $type ) if ( $type )
@ -39,14 +42,19 @@ if ( $type )
$args_meson += $path_build $args_meson += $path_build
$args_meson += "--buildtype $($type)" $args_meson += "--buildtype $($type)"
Start-Process meson $args_meson -NoNewWindow -Wait -WorkingDirectory $path_scripts # Start-Process meson $args_meson -NoNewWindow -Wait -WorkingDirectory $path_scripts
Push-Location $path_scripts
Invoke-Expression "& meson $args_meson"
Pop-Location
} }
$args_ninja = @() $args_ninja = @()
$args_ninja += "-C" $args_ninja += "-C"
$args_ninja += $path_build $args_ninja += $path_build
Start-Process ninja $args_ninja -Wait -NoNewWindow -WorkingDirectory $path_root Push-Location $path_root
ninja $args_ninja
Pop-Location
#endregion Regular Build #endregion Regular Build
@ -56,7 +64,8 @@ if ( $test -eq $true )
write-host "`n`nBuilding Test`n" write-host "`n`nBuilding Test`n"
# Refactor thirdparty libraries # Refactor thirdparty libraries
& (Join-Path $PSScriptRoot 'refactor_and_format.ps1') Invoke-Expression "& $(Join-Path $PSScriptRoot 'refactor_and_format.ps1') $args"
$path_test = Join-Path $path_root test $path_test = Join-Path $path_root test
$path_test_build = Join-Path $path_test build $path_test_build = Join-Path $path_test build
@ -67,15 +76,17 @@ if ( $test -eq $true )
$args_meson += "setup" $args_meson += "setup"
$args_meson += $path_test_build $args_meson += $path_test_build
Start-Process meson $args_meson -NoNewWindow -Wait -WorkingDirectory $path_test Push-Location $path_test
& meson $args_meson
Pop-Location
} }
$args_ninja = @() $args_ninja = @()
$args_ninja += "-C" $args_ninja += "-C"
$args_ninja += $path_test_build $args_ninja += $path_test_build
write-host $args_ninja Push-Location $path_root
ninja $args_ninja
Start-Process ninja $args_ninja -Wait -NoNewWindow -WorkingDirectory $path_root Pop-Location
#endregion Test Build #endregion Test Build
} }

View File

@ -1,2 +1,2 @@
cls cls
& (Join-Path $PSScriptRoot 'build.ci.ps1') Invoke-Expression "& $(Join-Path $PSScriptRoot 'build.ci.ps1') $args"

View File

@ -8,7 +8,6 @@ $path_project = Join-Path $path_root project
$path_test = Join-Path $path_root test $path_test = Join-Path $path_root test
$path_thirdparty = Join-Path $path_root thirdparty $path_thirdparty = Join-Path $path_root thirdparty
$file_spec = Join-Path $path_test zpl.refactor
$refactor = Join-Path $path_build refactor.exe $refactor = Join-Path $path_build refactor.exe
# Gather the files to be formatted. # Gather the files to be formatted.
@ -25,48 +24,44 @@ foreach ( $file in $targetFiles )
} }
write-host "Beginning thirdpary refactor...`n" write-host "Beginning thirdpary refactor..."
$refactors = @(@()) $file_spec = Join-Path $path_test zpl.refactor
if ( $false ){
foreach ( $file in $targetFiles )
{
$destination = Join-Path $path_test (Split-Path $file -leaf)
$destination = $destination.Replace( '.h', '.refactored.h' )
$refactorParams = @( $refactorParams = @(
"-src=$($file)", "-src=$(Join-Path $path_thirdparty "zpl.h")",
"-dst=$($destination)" "-dst=$(Join-Path $path_test "zpl.refactored.h")",
"-spec=$($file_spec)" "-spec=$($file_spec)"
) )
$refactors += (Start-Process $refactor $refactorParams -NoNewWindow -PassThru) if ( $args.Contains( "debug" ) )
{
$refactorParams += "-debug"
} }
}
else { write-host "`zpl refactor: " $refactorParams
& $refactor $refactorParams
$file_spec = Join-Path $path_test "stb_image.refactor"
$refactorParams = @( $refactorParams = @(
# "-debug", "-src=$(Join-Path $path_thirdparty "stb_image.h")",
"-num=$($targetFiles.Count)" "-dst=$(Join-Path $path_test "stb_image.refactored.h")",
"-src=$($targetFiles)",
"-dst=$($refactoredFiles)",
"-spec=$($file_spec)" "-spec=$($file_spec)"
) )
Start-Process $refactor $refactorParams -NoNewWindow -PassThru -Wait if ( $args.Contains( "debug" ) )
}
foreach ( $process in $refactors )
{ {
if ( $process ) $refactorParams += "-debug"
{
$process.WaitForExit()
}
} }
Write-Host "`nRefactoring complete`n`n" write-host "`n`nstb_image refactor: " $refactorParams
& $refactor $refactorParams
write-host "Beginning project refactor...`n" Write-Host "`nRefactoring complete`n"
write-host "Beginning project refactor..."
# Gather the files to be formatted. # Gather the files to be formatted.
$targetFiles = @(Get-ChildItem -Recurse -Path $path_project -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName) $targetFiles = @(Get-ChildItem -Recurse -Path $path_project -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName)
@ -74,8 +69,6 @@ $refactoredFiles = @()
$file_spec = Join-Path $path_test project.refactor $file_spec = Join-Path $path_test project.refactor
write-host "FILE SPEC:" $file_spec
foreach ( $file in $targetFiles ) foreach ( $file in $targetFiles )
{ {
$destination = Join-Path $path_test (Split-Path $file -leaf) $destination = Join-Path $path_test (Split-Path $file -leaf)
@ -86,16 +79,20 @@ foreach ( $file in $targetFiles )
} }
$refactorParams = @( $refactorParams = @(
# "-debug",
"-num=$($targetFiles.Count)" "-num=$($targetFiles.Count)"
"-src=$($targetFiles)", "-src=$($targetFiles)",
"-dst=$($refactoredFiles)", "-dst=$($refactoredFiles)",
"-spec=$($file_spec)" "-spec=$($file_spec)"
) )
Start-Process $refactor $refactorParams -NoNewWindow -PassThru -Wait if ( $args.Contains( "debug" ) )
{
$refactorParams += "-debug"
}
write-host "`nRefactoring complete`n`n" & $refactor $refactorParams
write-host "`nRefactoring complete`n"
# Can't format zpl library... (It hangs clang format) # Can't format zpl library... (It hangs clang format)
@ -115,3 +112,4 @@ clang-format $formatParams $targetFiles
Write-Host "`nFormatting complete" Write-Host "`nFormatting complete"
} }

View File

@ -0,0 +1,38 @@
[string[]] $include = '*.h', '*.hh', '*.hpp', '*.c', '*.cc', '*.cpp'
[string[]] $exclude = '*.g.*', '*.refactor'
# Change this to your root directory if needed.
$path_root = $PSScriptRoot
# Change this to your desired destination
$path_dest = $path_root
# Gather the files to be formatted.
$targetFiles = @(Get-ChildItem -Recurse -Path $path_root -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName)
$refactoredFiles = @()
foreach ( $file in $targetFiles )
{
$destination = Join-Path $path_dest (Split-Path $file -leaf)
$destination = $destination.Replace( '.h', '.refactored.h' )
$destination = $destination.Replace( '.c', '.refactored.c' )
$refactoredFiles += $destination
}
write-host "Beginning refactor...`n"
$refactors = @(@())
$refactorParams = @(
# "-debug",
"-num=$($targetFiles.Count)"
"-src=$($targetFiles)",
"-dst=$($refactoredFiles)",
"-spec=$($file_spec)"
)
& $refactor $refactorParams
Write-Host "`nRefactoring complete`n`n"

7987
thirdparty/stb_image.h vendored Normal file

File diff suppressed because it is too large Load Diff

321
thirdparty/zpl.h vendored

File diff suppressed because it is too large Load Diff