feat: expose the allocator and array header files for external scanners
This commit is contained in:
parent
52d69790f3
commit
f1eecf9786
12 changed files with 326 additions and 82 deletions
|
|
@ -122,6 +122,8 @@ pub fn generate_parser_in_directory(
|
|||
|
||||
write_file(&src_path.join("parser.c"), c_code)?;
|
||||
write_file(&src_path.join("node-types.json"), node_types_json)?;
|
||||
write_file(&header_path.join("alloc.h"), tree_sitter::ALLOC_HEADER)?;
|
||||
write_file(&header_path.join("array.h"), tree_sitter::ARRAY_HEADER)?;
|
||||
write_file(&header_path.join("parser.h"), tree_sitter::PARSER_HEADER)?;
|
||||
|
||||
if !path_in_ignore(&repo_path) {
|
||||
|
|
|
|||
60
cli/src/generate/templates/alloc.h
Normal file
60
cli/src/generate/templates/alloc.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#ifndef TREE_SITTER_ALLOC_H_
|
||||
#define TREE_SITTER_ALLOC_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#define TS_PUBLIC __declspec(dllexport)
|
||||
#else
|
||||
#define TS_PUBLIC __attribute__((visibility("default")))
|
||||
#endif
|
||||
|
||||
TS_PUBLIC extern void *(*ts_current_malloc)(size_t);
|
||||
TS_PUBLIC extern void *(*ts_current_calloc)(size_t, size_t);
|
||||
TS_PUBLIC extern void *(*ts_current_realloc)(void *, size_t);
|
||||
TS_PUBLIC extern void (*ts_current_free)(void *);
|
||||
|
||||
// Allow clients to override allocation functions
|
||||
#ifdef TS_REUSE_ALLOCATOR
|
||||
|
||||
#ifndef ts_malloc
|
||||
#define ts_malloc ts_current_malloc
|
||||
#endif
|
||||
#ifndef ts_calloc
|
||||
#define ts_calloc ts_current_calloc
|
||||
#endif
|
||||
#ifndef ts_realloc
|
||||
#define ts_realloc ts_current_realloc
|
||||
#endif
|
||||
#ifndef ts_free
|
||||
#define ts_free ts_current_free
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifndef ts_malloc
|
||||
#define ts_malloc malloc
|
||||
#endif
|
||||
#ifndef ts_calloc
|
||||
#define ts_calloc calloc
|
||||
#endif
|
||||
#ifndef ts_realloc
|
||||
#define ts_realloc realloc
|
||||
#endif
|
||||
#ifndef ts_free
|
||||
#define ts_free free
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // TREE_SITTER_ALLOC_H_
|
||||
|
|
@ -107,6 +107,25 @@ pub fn get_test_language(name: &str, parser_code: &str, path: Option<&Path>) ->
|
|||
|
||||
let header_path = src_dir.join("tree_sitter");
|
||||
fs::create_dir_all(&header_path).unwrap();
|
||||
|
||||
fs::write(header_path.join("alloc.h"), tree_sitter::PARSER_HEADER)
|
||||
.with_context(|| {
|
||||
format!(
|
||||
"Failed to write {:?}",
|
||||
header_path.join("alloc.h").file_name().unwrap()
|
||||
)
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
fs::write(header_path.join("array.h"), tree_sitter::PARSER_HEADER)
|
||||
.with_context(|| {
|
||||
format!(
|
||||
"Failed to write {:?}",
|
||||
header_path.join("array.h").file_name().unwrap()
|
||||
)
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
fs::write(header_path.join("parser.h"), tree_sitter::PARSER_HEADER)
|
||||
.with_context(|| {
|
||||
format!(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue