Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
tcc_bind <- Rtinycc::tcc_bind
tcc_compile <- Rtinycc::tcc_compile
tcc_ffi <- Rtinycc::tcc_ffi
tcc_generate_bindings <- Rtinycc::tcc_generate_bindings
tcc_map_c_type_to_ffi <- Rtinycc::tcc_map_c_type_to_ffi
tcc_source <- Rtinycc::tcc_source
tcc_struct <- Rtinycc::tcc_struct
tcc_treesitter_bindings <- Rtinycc::tcc_treesitter_bindings
tcc_treesitter_functions <- Rtinycc::tcc_treesitter_functions
tcc_treesitter_struct_accessors <- Rtinycc::tcc_treesitter_struct_accessors
has_treesitter <- requireNamespace("treesitter.c", quietly = TRUE) &&
packageVersion("treesitter.c") >= "0.0.4"
## -----------------------------------------------------------------------------
has_treesitter
## -----------------------------------------------------------------------------
header <- paste(
"double sqrt(double x);",
"int add(int a, int b);",
"struct point { double x; double y; };",
"enum status { OK = 0, ERR = 1 };",
sep = "\n"
)
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
tcc_treesitter_functions(header)
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
tcc_treesitter_bindings(header)
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
ffi <- tcc_ffi() |>
tcc_source(
"
double sqrt(double x) { return x < 0 ? 0 : x; }
int add(int a, int b) { return a + b; }
struct point { double x; double y; };
enum status { OK = 0, ERR = 1 };
"
)
ffi <- tcc_generate_bindings(
ffi,
header,
functions = TRUE,
structs = TRUE,
enums = TRUE,
unions = FALSE,
globals = FALSE
)
compiled <- tcc_compile(ffi)
compiled$add(2L, 3L)
compiled$enum_status_OK()
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
tcc_treesitter_struct_accessors("struct point { double x; double y; };")
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
tcc_treesitter_struct_accessors(
"struct flags { unsigned int flag : 1; unsigned int code : 6; };"
)
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
tcc_treesitter_struct_accessors(
"struct child { int x; }; struct outer { struct child child; int y; };"
)
## -----------------------------------------------------------------------------
tcc_map_c_type_to_ffi("int")
tcc_map_c_type_to_ffi("double")
tcc_map_c_type_to_ffi("const char *")
## ----eval = requireNamespace("treesitter.c", quietly = TRUE) && packageVersion("treesitter.c") >= "0.0.4"----
string_mapper <- function(type) {
if (trimws(type) == "const char *") {
return("cstring")
}
tcc_map_c_type_to_ffi(type)
}
tcc_treesitter_bindings(
"int puts(const char *s);",
mapper = string_mapper
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.