M lib/tukan/tcc.sc +40 -3
@@ 1,6 1,3 @@
-import .core
-using import .globals
-
if (operating-system == 'windows)
#load-library "SDL2.dll" # todo
else
@@ 16,10 13,50 @@ do
using TCC.const
using TCC.typedef
using TCC.extern
+ unlet TCC
TCC_RELOCATE_AUTO := (1:u64 as (mutable voidstar))
TCC_INCLUDE_PATH := module-dir .. "/../../include/libtcc/include"
TCC_LIB_PATH := module-dir .. "/../../lib"
+ inline tcc_verify (f ...)
+ let res = (f ...)
+ assert (res == 0)
+ res
+
+ type TCC :: (mutable @TCCState)
+ inline __typecall (cls)
+ bitcast (tcc_new) cls
+
+ inline __drop (self)
+ tcc_delete self
+
+ let
+ INCLUDE_PATH = TCC_INCLUDE_PATH
+ LIB_PATH = TCC_LIB_PATH
+ set_lib_path = tcc_set_lib_path
+ set_error_func = tcc_set_error_func
+ set_options = tcc_set_options
+ add_include_path = tcc_add_include_path
+ add_sysinclude_path = tcc_add_sysinclude_path
+ define_symbol = tcc_define_symbol
+ undefine_symbol = tcc_undefine_symbol
+ add_file = tcc_add_file
+ compile_string = tcc_compile_string
+ set_output_type = tcc_set_output_type
+ OUTPUT_MEMORY = TCC_OUTPUT_MEMORY
+ OUTPUT_EXE = TCC_OUTPUT_EXE
+ OUTPUT_DLL = TCC_OUTPUT_DLL
+ OUTPUT_OBJ = TCC_OUTPUT_OBJ
+ OUTPUT_PREPROCESS = TCC_OUTPUT_PREPROCESS
+ add_library_path = tcc_add_library_path
+ add_library = tcc_add_library
+ add_symbol = tcc_add_symbol
+ output_file = tcc_output_file
+ run = tcc_run
+ relocate = tcc_relocate
+ RELOCATE_AUTO = TCC_RELOCATE_AUTO
+ get_symbol = tcc_get_symbol
+
locals;
M testing/test_tcc.sc +12 -15
@@ 2,11 2,6 @@
using import tukan.tcc
-inline tcc_verify (f ...)
- let res = (f ...)
- assert (res == 0)
- res
-
vvv bind testcode
""""#include <tcclib.h>
@@ 14,12 9,14 @@ vvv bind testcode
printf("Hello, World!\n");
}
-cc := (tcc_new)
-defer tcc_delete cc
-tcc_set_lib_path cc TCC_LIB_PATH
+cc := (TCC)
+from (methodsof cc) let set_lib_path add_include_path add_library_path
+ \ set_output_type compile_string relocate get_symbol run
+
+set_lib_path TCC_LIB_PATH
va-map
inline (path)
- tcc_add_include_path cc path
+ add_include_path path
TCC_INCLUDE_PATH
#"/usr/local/include/x86_64-linux-gnu"
#"/usr/local/include"
@@ 27,7 24,7 @@ va-map
#"/usr/include"
va-map
inline (path)
- tcc_add_library_path cc path
+ add_library_path path
#"/usr/lib/x86_64-linux-gnu"
#"/usr/lib"
#"/lib/x86_64-linux-gnu"
@@ 35,12 32,12 @@ va-map
#"/usr/local/lib/x86_64-linux-gnu"
#"/usr/local/lib"
-tcc_set_output_type cc TCC_OUTPUT_MEMORY
-tcc_verify tcc_compile_string cc testcode
-#tcc_run cc 0 null
-tcc_verify tcc_relocate cc TCC_RELOCATE_AUTO
+set_output_type TCC.OUTPUT_MEMORY
+tcc_verify compile_string testcode
+#'run cc 0 null
+tcc_verify relocate TCC.RELOCATE_AUTO
-func := (tcc_get_symbol cc "main")
+func := (get_symbol "main")
assert (func != null)
call
func as (@ (function void))