43cb5ebf4d1d — Leonard Ritter 8 days ago
* exporting API to globals is now generated by compiler.retcon.genglobals
3 files changed, 539 insertions(+), 400 deletions(-)

A => lib/scopes/compiler/retcon/genglobals.sc
A => src/global_defs.inc
M src/globals.cpp
A => lib/scopes/compiler/retcon/genglobals.sc +200 -0
@@ 0,0 1,200 @@ 
+
+#
+    The Scopes Compiler Infrastructure
+    This file is distributed under the MIT License.
+    See LICENSE.md for details.
+
+using import print include Map String itertools
+    compiler.header
+
+scope := do
+    struct := do
+        sc_type_ := type
+        sc_string_ := string
+        sc_value_ := Value
+        sc_symbol_ := Symbol
+        sc_anchor_ := Anchor
+        sc_closure_ := Closure
+        sc_list_ := list
+        sc_scope_ := Scope
+        sc_error_ := Error
+        locals;
+    locals;
+
+run-stage;
+
+lib := include
+    """"#include "scopes/scopes.h"
+    using scope
+
+inline field? (T name)
+    try
+        sc_type_field_index T name
+        true
+    else
+        false
+
+global typemap : Map type String
+inline alias (T name)
+    'set typemap T name
+
+alias type "TYPE_Type"
+alias string "TYPE_String"
+alias Value "TYPE_Value"
+alias Symbol "TYPE_Symbol"
+alias Anchor "TYPE_Anchor"
+alias Closure "TYPE_Closure"
+alias Error "TYPE_Error"
+alias list "TYPE_List"
+alias Scope "TYPE_Scope"
+alias void "TYPE_Void"
+alias bool "TYPE_Bool"
+alias rawstring "TYPE_Rawstring"
+alias i32 "TYPE_I32"
+alias u32 "TYPE_U32"
+alias i64 "TYPE_I64"
+alias u64 "TYPE_U64"
+alias voidstar "TYPE_Voidstar"
+alias f64 "TYPE_F64"
+alias i8 "TYPE_I8"
+
+fn print-field (T print)
+    returning void
+    print-field := this-function
+    T := 'unqualified T
+    if (T in typemap)
+        print (try! 'get typemap T)
+        return;
+    ST := 'storageof T
+    switch ('kind ST)
+    case 'PointerType
+        ET := sc_type_element_at ST 0
+        if ('writable? ST)
+            print "native_pointer_type"
+        else
+            print "native_ro_pointer_type"
+        print /..
+            /p
+                /do
+                    print-field ET print
+        return;
+    case 'TupleType
+        if (field? ST '_0)
+            print "arguments_type" /..
+                /p
+                    /pc
+                        /C:args
+                            imap (range (sc_type_countof ST))
+                                inline (i)
+                                    /do
+                                        print-field
+                                            sc_type_element_at ST i
+                                            print
+            return;
+    case 'FunctionType
+        rtype raisetype := sc_function_type_return_type T
+        assert (raisetype == noreturn)
+        ST := 'storageof rtype
+        # reconstruct raising type
+        raising? := if (rtype in typemap)
+            false
+        else
+            if (('kind ST) == 'TupleType)
+                if (field? ST 'except) true
+                else false
+            else false
+        if raising?
+            print "raising_function_type"
+        else
+            print "function_type"
+        argcount := sc_type_countof T
+        print /..
+            /p
+                /C:va-args
+                    /do
+                        if raising?
+                            valueT := if ((sc_type_countof ST) == 3)
+                                sc_type_element_at ST 2
+                            else
+                                void
+                            print-field valueT print
+                        else
+                            print-field rtype print
+                    /pc
+                        /C:args
+                            imap (range argcount)
+                                inline (i)
+                                    /do
+                                        argT := sc_type_element_at T i
+                                        print-field argT print
+        return;
+    default;
+    error
+        .. "unrecognized type: " ((repr T) as string)
+
+@@ printer
+fn /print-module (print)
+    print "// generated by compiler.retcon.genglobals, do not edit"
+        /n
+    for name g in lib.extern
+        if (('kind g) != 'Global)
+            continue;
+        name := sc_global_name g
+        T := 'typeof g
+        switch ('kind T)
+        case 'FunctionType
+            rtype raisetype := sc_function_type_return_type T
+            assert (raisetype == noreturn)
+            ST := 'storageof rtype
+            # reconstruct raising type
+            raising? := if (rtype in typemap)
+                false
+            else
+                if (('kind ST) == 'TupleType)
+                    if (field? ST 'except) true
+                    else false
+                else false
+            if raising?
+                print "DEFINE_RAISING_EXTERN_C_FUNCTION"
+            else
+                print "DEFINE_EXTERN_C_FUNCTION"
+            argcount := sc_type_countof T
+            print /..
+                /p
+                    /C:va-args
+                        name as string
+                        /do
+                            if raising?
+                                valueT := if ((sc_type_countof ST) == 3)
+                                    sc_type_element_at ST 2
+                                else
+                                    void
+                                print-field valueT print
+                            else
+                                print-field rtype print
+                    /do
+                        for i in (range argcount)
+                            print /.. ","
+                            argT := sc_type_element_at T i
+                            print-field argT print
+
+        #case 'PointerType
+        #case 'IntegerType
+        default;
+
+fn generate-bindings ()
+    using import compiler.File
+    f := try
+        File.open (.. compiler-dir "/src/global_defs.inc") "w"
+    else
+        error "error opening file for writing"
+    write := StyledFilePrinter f
+    write
+        /print-module
+    ;
+
+@if main-module?
+
+generate-bindings;
+
+@endif
  No newline at end of file

          
A => src/global_defs.inc +335 -0
@@ 0,0 1,335 @@ 
+// generated by compiler.retcon.genglobals, do not edit
+DEFINE_EXTERN_C_FUNCTION(scopes_strtod, TYPE_Void, native_pointer_type(TYPE_F64), TYPE_Rawstring, native_pointer_type(native_pointer_type(TYPE_I8)), TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(scopes_strtoll, TYPE_Void, native_pointer_type(TYPE_I64), TYPE_Rawstring, native_pointer_type(native_pointer_type(TYPE_I8)))
+DEFINE_EXTERN_C_FUNCTION(scopes_strtoull, TYPE_Void, native_pointer_type(TYPE_U64), TYPE_Rawstring, native_pointer_type(native_pointer_type(TYPE_I8)))
+DEFINE_EXTERN_C_FUNCTION(scopes_is_debug, TYPE_Bool)
+DEFINE_EXTERN_C_FUNCTION(scopes_compile_time_date, TYPE_Rawstring)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_load_from_executable, TYPE_Value, TYPE_Rawstring)
+DEFINE_EXTERN_C_FUNCTION(sc_init, TYPE_Void, TYPE_Voidstar, TYPE_I32, native_pointer_type(native_pointer_type(TYPE_I8)))
+DEFINE_EXTERN_C_FUNCTION(sc_main, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_compiler_version, arguments_type({TYPE_I32, TYPE_I32, TYPE_I32}))
+DEFINE_EXTERN_C_FUNCTION(sc_cache_misses, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_expand, arguments_type({TYPE_Value, TYPE_List, TYPE_Scope}), TYPE_Value, TYPE_List, TYPE_Scope)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval, TYPE_Value, TYPE_List, TYPE_Scope)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval_stage, TYPE_Value, TYPE_List, TYPE_Scope)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_prove, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typify, TYPE_Value, TYPE_Closure, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typify_template, TYPE_Value, TYPE_Value, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_compile, TYPE_Value, TYPE_Value, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_default_target_triple, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_compile_object, TYPE_Void, TYPE_String, TYPE_I32, TYPE_String, TYPE_Scope, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_enter_solver_cli, TYPE_Void)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval_inline, TYPE_Value, TYPE_List, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_launch_args, arguments_type({TYPE_I32, native_pointer_type(native_pointer_type(TYPE_I8))}))
+DEFINE_EXTERN_C_FUNCTION(sc_set_compile_handler, TYPE_Void, native_ro_pointer_type(raising_function_type(TYPE_Value, {TYPE_Value, TYPE_U64})))
+DEFINE_EXTERN_C_FUNCTION(sc_set_capture_variable_handler, TYPE_Void, native_ro_pointer_type(raising_function_type(TYPE_Value, {native_pointer_type(TYPE_Value)})))
+DEFINE_EXTERN_C_FUNCTION(sc_get_capture_variable_handler, native_ro_pointer_type(raising_function_type(TYPE_Value, {native_pointer_type(TYPE_Value)})))
+DEFINE_EXTERN_C_FUNCTION(sc_set_typecast_handler, TYPE_Void, native_ro_pointer_type(raising_function_type(TYPE_Value, {TYPE_Value, TYPE_Type})))
+DEFINE_EXTERN_C_FUNCTION(sc_set_typemerge_handler, TYPE_Void, native_ro_pointer_type(raising_function_type(TYPE_Type, {TYPE_Type, TYPE_Type})))
+DEFINE_EXTERN_C_FUNCTION(sc_value_repr, TYPE_String, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_content_repr, TYPE_String, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_ast_repr, TYPE_String, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_tostring, TYPE_String, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_type, TYPE_Type, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_qualified_type, TYPE_Type, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_anchor, TYPE_Anchor, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_is_constant, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_is_pure, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_compare, TYPE_Bool, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_kind, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_block_depth, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_identity, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_wrap, TYPE_Value, TYPE_Type, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_unwrap, TYPE_Value, TYPE_Type, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_value_kind_string, TYPE_String, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_value_pack, TYPE_String, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_value_unpack, TYPE_Value, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_keyed_new, TYPE_Value, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_keyed_key, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_keyed_value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_empty_argument_list, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_argument_list_new, TYPE_Value, TYPE_I32, native_ro_pointer_type(TYPE_Value))
+DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_new, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_list_new, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_index, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_is_variadic, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_argcount, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_getarg, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_getarglist, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_map_argument_keys, TYPE_Value, TYPE_Value, TYPE_List, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_new, TYPE_Value, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_lazy_expression_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_set_name, TYPE_Void, TYPE_Value, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_template_get_name, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_append_parameter, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_set_body, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_get_body, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_set_docstring, TYPE_Void, TYPE_Value, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_template_set_inline, TYPE_Void, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_set_anchor, TYPE_Void, TYPE_Value, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_template_is_inline, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_is_hidden, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_is_typeof, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_is_forward_decl, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_parameter_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_template_parameter, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_new, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_append, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_complete, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_set_scoped, TYPE_Void, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_get, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_expression_value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_global_new, TYPE_Value, TYPE_Symbol, TYPE_Type, TYPE_U32, TYPE_Symbol)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_initializer, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_constructor, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_location, TYPE_Void, TYPE_Value, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_binding, TYPE_Void, TYPE_Value, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_descriptor_set, TYPE_Void, TYPE_Value, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_location, TYPE_I32, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_binding, TYPE_I32, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_descriptor_set, TYPE_I32, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_storage_class, TYPE_Symbol, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_name, TYPE_Symbol, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_flags, TYPE_U32, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_initializer, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_constructor, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_module, TYPE_Void, TYPE_Value, TYPE_Symbol)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_module, TYPE_Symbol, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_needs_capability, TYPE_Void, TYPE_Value, TYPE_Symbol)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_capability_count, TYPE_I32, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_capability, TYPE_Symbol, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_get_address, TYPE_U64, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_pure_cast_new, TYPE_Value, TYPE_Type, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_cond_new, TYPE_Value, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_case_new, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_pass_case_new, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_do_case_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_default_case_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_append, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_append_case, TYPE_Void, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_append_pass, TYPE_Void, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_append_do, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_switch_append_default, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_parameter_new, TYPE_Value, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_parameter_is_variadic, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_parameter_name, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_append_argument, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_is_rawcall, TYPE_Bool, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_set_rawcall, TYPE_Void, TYPE_Value, TYPE_Bool)
+DEFINE_EXTERN_C_FUNCTION(sc_call_callee, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_argument_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_call_argument, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_loop_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_loop_arguments, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_loop_set_body, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_new, TYPE_Value, TYPE_Type, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_extract, TYPE_U64, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_words_new, TYPE_Value, TYPE_Type, TYPE_I32, native_pointer_type(TYPE_U64))
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_word_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_extract_word, TYPE_U64, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_const_int_word_ptr, native_pointer_type(TYPE_U64), TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_real_new, TYPE_Value, TYPE_Type, TYPE_F64)
+DEFINE_EXTERN_C_FUNCTION(sc_const_real_extract, TYPE_F64, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_aggregate_new, TYPE_Value, TYPE_Type, TYPE_I32, native_pointer_type(TYPE_Value))
+DEFINE_EXTERN_C_FUNCTION(sc_const_extract_at, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_const_string_new, TYPE_Value, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_const_string_extract, TYPE_String, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_pointer_new, TYPE_Value, TYPE_Type, TYPE_Voidstar)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_null_new, TYPE_Value, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_pointer_to_global, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_const_pointer_extract, TYPE_Voidstar, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_quote_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_unquote_new, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_label_new, TYPE_Value, TYPE_I32, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_label_set_body, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_label_get_body, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_merge_new, TYPE_Value, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_compile_stage_new, TYPE_Value, TYPE_List, TYPE_Scope)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_parse_from_path, TYPE_Value, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_parse_from_string, TYPE_Value, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_default_styler, TYPE_String, TYPE_Symbol, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_prompt, arguments_type({TYPE_Bool, TYPE_String}), TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_prompt_save_history, TYPE_Void, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_prompt_load_history, TYPE_Void, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_prompt_set_autocomplete_handler, TYPE_Void, native_ro_pointer_type(function_type(TYPE_Void, {TYPE_Rawstring, TYPE_Voidstar})))
+DEFINE_EXTERN_C_FUNCTION(sc_prompt_add_completion, TYPE_Void, TYPE_Voidstar, TYPE_Rawstring)
+DEFINE_EXTERN_C_FUNCTION(sc_prompt_add_completion_from_scope, TYPE_Void, TYPE_Voidstar, TYPE_Rawstring, TYPE_I32, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_format_message, TYPE_String, TYPE_Anchor, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_realpath, TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_dirname, TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_basename, TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_is_file, TYPE_Bool, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_is_directory, TYPE_Bool, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_get_globals, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_get_original_globals, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_set_globals, TYPE_Void, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_format_error, TYPE_String, TYPE_Error)
+DEFINE_EXTERN_C_FUNCTION(sc_dump_error, TYPE_Void, TYPE_Error)
+DEFINE_EXTERN_C_FUNCTION(sc_error_new, TYPE_Error, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_set_signal_abort, TYPE_Void, TYPE_Bool)
+DEFINE_EXTERN_C_FUNCTION(sc_abort, TYPE_Void)
+DEFINE_EXTERN_C_FUNCTION(sc_exit, TYPE_Void, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_map_get, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_map_set, TYPE_Void, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_load_library, TYPE_Void, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_load_object, TYPE_Void, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_dlfcn_dlopen, TYPE_Voidstar, native_pointer_type(TYPE_I8), TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_dlfcn_dlerror, native_pointer_type(TYPE_I8))
+DEFINE_EXTERN_C_FUNCTION(sc_scope_bind, TYPE_Scope, TYPE_Scope, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_bind_with_docstring, TYPE_Scope, TYPE_Scope, TYPE_Value, TYPE_Value, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_scope_at, TYPE_Value, TYPE_Scope, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_scope_local_at, TYPE_Value, TYPE_Scope, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_module_docstring, TYPE_String, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_docstring, TYPE_String, TYPE_Scope, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_set_docstring, TYPE_Void, TYPE_Scope, TYPE_Value, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_new, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_new_with_docstring, TYPE_Scope, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_reparent, TYPE_Scope, TYPE_Scope, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_unparent, TYPE_Scope, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_new_subscope, TYPE_Scope, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_new_subscope_with_docstring, TYPE_Scope, TYPE_Scope, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_get_parent, TYPE_Scope, TYPE_Scope)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_unbind, TYPE_Scope, TYPE_Scope, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_next, arguments_type({TYPE_Value, TYPE_Value, TYPE_I32}), TYPE_Scope, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_any_next, arguments_type({TYPE_Scope, TYPE_Value, TYPE_Value, TYPE_I32}), TYPE_Scope, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_scope_next_deleted, arguments_type({TYPE_Value, TYPE_I32}), TYPE_Scope, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_new, TYPE_Symbol, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_new_unique, TYPE_Symbol, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_to_string, TYPE_String, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_is_variadic, TYPE_Bool, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_count, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_symbol_style, TYPE_Symbol, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_string_new, TYPE_String, TYPE_Rawstring, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_string_new_from_cstr, TYPE_String, TYPE_Rawstring)
+DEFINE_EXTERN_C_FUNCTION(sc_string_join, TYPE_String, TYPE_String, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_string_match, arguments_type({TYPE_Bool, TYPE_I32, TYPE_I32}), TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_string_count, TYPE_U64, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_string_buffer, arguments_type({TYPE_Rawstring, TYPE_U64}), TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_string_lslice, TYPE_String, TYPE_String, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_string_rslice, TYPE_String, TYPE_String, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_string_compare, TYPE_I32, TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_string_unescape, TYPE_String, TYPE_String)
+DEFINE_EXTERN_C_FUNCTION(sc_list_cons, TYPE_List, TYPE_Value, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_join, TYPE_List, TYPE_List, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_dump, TYPE_List, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_repr, TYPE_String, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_serialize, TYPE_String, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_decons, arguments_type({TYPE_Value, TYPE_List}), TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_count, TYPE_I32, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_at, TYPE_Value, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_next, TYPE_List, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_reverse, TYPE_List, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_list_compare, TYPE_Bool, TYPE_List, TYPE_List)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_new, TYPE_Anchor, TYPE_Symbol, TYPE_I32, TYPE_I32, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_path, TYPE_Symbol, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_lineno, TYPE_I32, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_column, TYPE_I32, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_get_offset, TYPE_I32, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_offset, TYPE_Anchor, TYPE_Anchor, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_range_new, TYPE_Anchor, TYPE_Symbol, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_anchor_last_offset, TYPE_I32, TYPE_Anchor)
+DEFINE_EXTERN_C_FUNCTION(sc_closure_get_docstring, TYPE_String, TYPE_Closure)
+DEFINE_EXTERN_C_FUNCTION(sc_closure_get_template, TYPE_Value, TYPE_Closure)
+DEFINE_EXTERN_C_FUNCTION(sc_closure_get_context, TYPE_Value, TYPE_Closure)
+DEFINE_EXTERN_C_FUNCTION(sc_closure_transplant, TYPE_Void, TYPE_Closure, TYPE_Closure)
+DEFINE_EXTERN_C_FUNCTION(sc_closure_new, TYPE_Closure, TYPE_Value, TYPE_Value)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_at, TYPE_Value, TYPE_Type, TYPE_Symbol)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_local_at, TYPE_Value, TYPE_Type, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_type_get_docstring, TYPE_String, TYPE_Type, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_type_set_docstring, TYPE_Void, TYPE_Type, TYPE_Symbol, TYPE_String)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_sizeof, TYPE_U64, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_alignof, TYPE_U64, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_offsetof, TYPE_U64, TYPE_Type, TYPE_U64)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_countof, TYPE_I32, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_is_unsized, TYPE_Bool, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_element_at, TYPE_Type, TYPE_Type, TYPE_I32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_field_index, TYPE_I32, TYPE_Type, TYPE_Symbol)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_field_name, TYPE_Symbol, TYPE_Type, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_type_kind, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_debug_abi, TYPE_Void, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_storage, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_opaque, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_plain, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_superof, TYPE_Bool, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_compatible, TYPE_Bool, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_default_suffix, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_string, TYPE_String, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_next, arguments_type({TYPE_Symbol, TYPE_Value}), TYPE_Type, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_type_set_symbol, TYPE_Void, TYPE_Type, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_type_del_symbol, TYPE_Void, TYPE_Type, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type, TYPE_Type, TYPE_Type, TYPE_U64, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_get_flags, TYPE_U64, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_flags, TYPE_Type, TYPE_Type, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_get_storage_class, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_storage_class, TYPE_Type, TYPE_Type, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_element_type, TYPE_Type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_bitcountof, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_integer_type, TYPE_Type, TYPE_I32, TYPE_Bool)
+DEFINE_EXTERN_C_FUNCTION(sc_integer_type_is_signed, TYPE_Bool, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type, TYPE_Type, TYPE_String, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_name, TYPE_String, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_original_name, TYPE_String, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_super, TYPE_Type, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type_set_storage, TYPE_Void, TYPE_Type, TYPE_Type, TYPE_U32)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type_set_opaque, TYPE_Void, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_typename_type_is_complete, TYPE_Bool, TYPE_Type)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_array_type, TYPE_Type, TYPE_Type, TYPE_U64)
+DEFINE_EXTERN_C_FUNCTION(sc_array_type_set_zterm, TYPE_Type, TYPE_Type, TYPE_Bool)
+DEFINE_EXTERN_C_FUNCTION(sc_array_type_is_zterm, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_array_type_set_count, TYPE_Type, TYPE_Type, TYPE_U64)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_vector_type, TYPE_Type, TYPE_Type, TYPE_U64)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_matrix_type, TYPE_Type, TYPE_Type, TYPE_U64)
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_tuple_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_packed_tuple_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_RAISING_EXTERN_C_FUNCTION(sc_union_storage_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_EXTERN_C_FUNCTION(sc_tuple_type_is_packed, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_arguments_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_join, TYPE_Type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_argcount, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_getarg, TYPE_Type, TYPE_Type, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_to_tuple_type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_key_type, TYPE_Type, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_key, arguments_type({TYPE_Symbol, TYPE_Type}), TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_refer, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_view, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_type_is_unique, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_view_type, TYPE_Type, TYPE_Type, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_unique_type, TYPE_Type, TYPE_Type, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_mutate_type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_refer_type, TYPE_Type, TYPE_Type, TYPE_U64, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_view_id_count, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_view_id_at, TYPE_I32, TYPE_Type, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_refer_flags, TYPE_U64, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_refer_storage_class, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_strip_qualifiers, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_canonical_type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_function_type_is_variadic, TYPE_Bool, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_function_type, TYPE_Type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type))
+DEFINE_EXTERN_C_FUNCTION(sc_function_type_raising, TYPE_Type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_function_type_return_type, arguments_type({TYPE_Type, TYPE_Type}), TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type, TYPE_Type, TYPE_Type, TYPE_Symbol, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_Symbol, TYPE_Symbol)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_dim, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_depth, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_arrayed, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_multisampled, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_sampled, TYPE_I32, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_format, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_image_type_access, TYPE_Symbol, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_sampled_image_type, TYPE_Type, TYPE_Type)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_body_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_body, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_name, TYPE_Symbol, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_group_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_count, TYPE_I32, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_at, TYPE_Value, TYPE_Value, TYPE_I32, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_op_kind, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_index_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_typed_value_index, TYPE_I32, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_block_instruction_count, TYPE_I32, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_block_get_instruction, TYPE_Value, TYPE_Value, TYPE_I32)
+DEFINE_EXTERN_C_FUNCTION(sc_block_terminator, TYPE_Value, TYPE_Value)
+DEFINE_EXTERN_C_FUNCTION(sc_block_is_terminated, TYPE_Bool, TYPE_Value)
  No newline at end of file

          
M src/globals.cpp +4 -400
@@ 3285,6 3285,7 @@ void init_globals(int argc, char *argv[]
     (void)FUNC; /* ensure that the symbol is there */ \
     bind_extern(Symbol(#FUNC), raising_function_type(RETTYPE, { __VA_ARGS__ }));
 
+#if 0
     const Type *rawstring = native_ro_pointer_type(TYPE_Char);
     const Type *TYPE_ValuePP = native_ro_pointer_type(TYPE_ValueRef);
     const Type *TYPE_U64PP = native_ro_pointer_type(TYPE_U64);

          
@@ 3303,406 3304,9 @@ void init_globals(int argc, char *argv[]
 
     const Type *TYPE_compile_func = native_ro_pointer_type(
         raising_function_type(TYPE_ValueRef, { TYPE_ValueRef, TYPE_U64 }));
-
-    DEFINE_EXTERN_C_FUNCTION(sc_compiler_version, arguments_type({TYPE_I32, TYPE_I32, TYPE_I32}));
-    DEFINE_EXTERN_C_FUNCTION(sc_cache_misses, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_expand, arguments_type({TYPE_ValueRef, TYPE_List, TYPE_Scope}), TYPE_ValueRef, TYPE_List, TYPE_Scope);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval, TYPE_ValueRef, TYPE_List, TYPE_Scope);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval_stage, TYPE_ValueRef, TYPE_List, TYPE_Scope);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_prove, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_resolve, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_bind, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_eval_inline, TYPE_ValueRef, TYPE_List, TYPE_Scope);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typify_template, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typify, TYPE_ValueRef, TYPE_Closure, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_compile, TYPE_ValueRef, TYPE_ValueRef, TYPE_U64);
-    DEFINE_EXTERN_C_FUNCTION(sc_set_compile_handler, _void, TYPE_compile_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_default_target_triple, TYPE_String);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_compile_object, _void, TYPE_String, TYPE_I32, TYPE_String, TYPE_Scope, TYPE_U64);
-    DEFINE_EXTERN_C_FUNCTION(sc_enter_solver_cli, _void);
-    DEFINE_EXTERN_C_FUNCTION(sc_launch_args, arguments_type({TYPE_I32,native_ro_pointer_type(rawstring)}));
-    DEFINE_EXTERN_C_FUNCTION(sc_set_typecast_handler, _void, TYPE_typecast_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_set_typemerge_handler, _void, TYPE_typemerge_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_set_capture_variable_handler, _void, TYPE_capture_variable_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_get_capture_variable_handler, TYPE_capture_variable_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt_set_autocomplete_handler, _void, TYPE_autocomplete_func);
-    DEFINE_EXTERN_C_FUNCTION(sc_get_address, TYPE_U64, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt, arguments_type({TYPE_Bool, TYPE_String}), TYPE_String, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt_save_history, _void, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt_load_history, _void, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt_add_completion, _void, voidstar, rawstring);
-    DEFINE_EXTERN_C_FUNCTION(sc_prompt_add_completion_from_scope, _void, voidstar, rawstring, TYPE_I32, TYPE_Scope);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_default_styler, TYPE_String, TYPE_Symbol, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_format_message, TYPE_String, TYPE_Anchor, TYPE_String);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_value_repr, TYPE_String, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_content_repr, TYPE_String, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_ast_repr, TYPE_String, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_tostring, TYPE_String, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_type, TYPE_Type, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_qualified_type, TYPE_Type, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_anchor, TYPE_Anchor, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_trace, TYPE_Trace, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_set_trace, TYPE_ValueRef, TYPE_Trace, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_is_constant, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_is_pure, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_compare, TYPE_Bool, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_kind, TYPE_ValueKind, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_block_depth, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_identity, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_wrap, TYPE_ValueRef, TYPE_Type, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_unwrap, TYPE_ValueRef, TYPE_Type, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_value_kind_string, TYPE_String, TYPE_ValueKind);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_value_pack, TYPE_String, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_value_unpack, TYPE_ValueRef, TYPE_String);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_keyed_new, TYPE_ValueRef, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_keyed_key, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_keyed_value, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_empty_argument_list, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_argument_list_new, TYPE_ValueRef, TYPE_I32, TYPE_ValuePP);
-    DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_list_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_index, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_value, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_extract_argument_is_variadic, TYPE_Bool, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_argcount, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_getarg, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_getarglist, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_map_argument_keys, TYPE_ValueRef, TYPE_ValueRef, TYPE_List, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_template_new, TYPE_ValueRef, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_lazy_expression_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_set_name, _void, TYPE_ValueRef, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_get_name, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_append_parameter, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_set_body, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_get_body, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_set_docstring, _void, TYPE_ValueRef, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_set_inline, _void, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_set_anchor, _void, TYPE_ValueRef, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_is_inline, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_is_hidden, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_is_typeof, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_is_forward_decl, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_parameter_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_template_parameter, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_new, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_set_scoped, _void, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_append, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_complete, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_get, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_expression_value, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_global_new, TYPE_ValueRef, TYPE_Symbol, TYPE_Type, TYPE_U32, TYPE_Symbol);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_initializer, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_constructor, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_location, _void, TYPE_ValueRef, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_binding, _void, TYPE_ValueRef, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_descriptor_set, _void, TYPE_ValueRef, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_location, TYPE_I32, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_binding, TYPE_I32, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_descriptor_set, TYPE_I32, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_storage_class, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_name, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_flags, TYPE_U32, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_initializer, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_constructor, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_set_module, _void, TYPE_ValueRef, TYPE_Symbol);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_module, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_needs_capability, _void, TYPE_ValueRef, TYPE_Symbol);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_capability_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_global_capability, TYPE_Symbol, TYPE_ValueRef, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_pure_cast_new, TYPE_ValueRef, TYPE_Type, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_cond_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_case_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_pass_case_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_do_case_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_default_case_new, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_append, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_append_case, _void, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_append_pass, _void, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_append_do, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_switch_append_default, _void, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_parameter_new, TYPE_ValueRef, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_parameter_is_variadic, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_parameter_name, TYPE_Symbol, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_call_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_append_argument, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_is_rawcall, TYPE_Bool, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_set_rawcall, _void, TYPE_ValueRef, TYPE_Bool);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_callee, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_argument_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_call_argument, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_loop_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_loop_arguments, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_loop_set_body, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_new, TYPE_ValueRef, TYPE_Type, TYPE_U64);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_words_new, TYPE_ValueRef, TYPE_Type, TYPE_I32, TYPE_U64PP);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_real_new, TYPE_ValueRef, TYPE_Type, TYPE_F64);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_aggregate_new, TYPE_ValueRef, TYPE_Type, TYPE_I32, TYPE_ValuePP);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_pointer_new, TYPE_ValueRef, TYPE_Type, voidstar);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_null_new, TYPE_ValueRef, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_extract, TYPE_U64, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_extract_word, TYPE_U64, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_word_ptr, TYPE_U64PP, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_int_word_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_real_extract, TYPE_F64, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_extract_at, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_pointer_extract, voidstar, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_const_pointer_to_global, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_string_new, TYPE_ValueRef, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_const_string_extract, TYPE_String, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_quote_new, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_unquote_new, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_label_new, TYPE_ValueRef, TYPE_I32, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_label_set_body, _void, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_label_get_body, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_merge_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_merge_new, TYPE_ValueRef, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_compile_stage_new, TYPE_ValueRef, TYPE_List, TYPE_Scope);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_is_file, TYPE_Bool, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_is_directory, TYPE_Bool, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_realpath, TYPE_String, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_dirname, TYPE_String, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_basename, TYPE_String, TYPE_String);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_get_globals, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_get_original_globals, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_set_globals, _void, TYPE_Scope);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_error_new, TYPE_Error, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_format_error, TYPE_String, TYPE_Error);
-    DEFINE_EXTERN_C_FUNCTION(sc_dump_error, _void, TYPE_Error);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_abort, TYPE_NoReturn);
-    DEFINE_EXTERN_C_FUNCTION(sc_exit, TYPE_NoReturn, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_set_signal_abort,
-        _void, TYPE_Bool);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_map_get, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_map_set, _void, TYPE_ValueRef, TYPE_ValueRef);
-
-    //DEFINE_RAISING_EXTERN_C_FUNCTION(sc_import_c, TYPE_Scope, TYPE_String, TYPE_String, TYPE_List, TYPE_Scope);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_load_library, _void, TYPE_String);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_load_object, _void, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_dlfcn_dlopen, voidstar, rawstring, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_dlfcn_dlerror, rawstring);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_scope_at, TYPE_ValueRef, TYPE_Scope, TYPE_ValueRef);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_scope_local_at, TYPE_ValueRef, TYPE_Scope, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_module_docstring, TYPE_String, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_docstring, TYPE_String, TYPE_Scope, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_bind, TYPE_Scope, TYPE_Scope, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_bind_with_docstring, TYPE_Scope, TYPE_Scope, TYPE_ValueRef, TYPE_ValueRef, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_new, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_new_with_docstring, TYPE_Scope, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_reparent, TYPE_Scope, TYPE_Scope, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_unparent, TYPE_Scope, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_new_subscope, TYPE_Scope, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_new_subscope_with_docstring, TYPE_Scope, TYPE_Scope, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_get_parent, TYPE_Scope, TYPE_Scope);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_unbind, TYPE_Scope, TYPE_Scope, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_next, arguments_type({TYPE_ValueRef, TYPE_ValueRef, TYPE_I32}), TYPE_Scope, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_any_next, arguments_type({TYPE_Scope, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32}), TYPE_Scope, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_scope_next_deleted, arguments_type({TYPE_ValueRef, TYPE_I32}), TYPE_Scope, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_new, TYPE_Symbol, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_new_unique, TYPE_Symbol, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_to_string, TYPE_String, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_is_variadic, TYPE_Bool, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_count, TYPE_USize);
-    DEFINE_EXTERN_C_FUNCTION(sc_symbol_style, TYPE_Symbol, TYPE_Symbol);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_string_new, TYPE_String, rawstring, TYPE_USize);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_new_from_cstr, TYPE_String, rawstring);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_join, TYPE_String, TYPE_String, TYPE_String);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_string_match, arguments_type({TYPE_Bool, TYPE_I32, TYPE_I32}), TYPE_String, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_count, TYPE_USize, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_compare, TYPE_I32, TYPE_String, TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_buffer, arguments_type({rawstring, TYPE_USize}), TYPE_String);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_lslice, TYPE_String, TYPE_String, TYPE_USize);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_rslice, TYPE_String, TYPE_String, TYPE_USize);
-    DEFINE_EXTERN_C_FUNCTION(sc_string_unescape, TYPE_String, TYPE_String);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_at, TYPE_ValueRef, TYPE_Type, TYPE_Symbol);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_local_at, TYPE_ValueRef, TYPE_Type, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_get_docstring, TYPE_String, TYPE_Type, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_set_docstring, _void, TYPE_Type, TYPE_Symbol, TYPE_String);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_element_at, TYPE_Type, TYPE_Type, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_field_index, TYPE_I32, TYPE_Type, TYPE_Symbol);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_field_name, TYPE_Symbol, TYPE_Type, TYPE_I32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_sizeof, TYPE_USize, TYPE_Type);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_alignof, TYPE_USize, TYPE_Type);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_offsetof, TYPE_USize, TYPE_Type, TYPE_USize);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_countof, TYPE_I32, TYPE_Type);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_is_unsized, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_kind, TYPE_TypeKind, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_debug_abi, _void, TYPE_Type);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_type_storage, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_opaque, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_plain, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_superof, TYPE_Bool, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_compatible, TYPE_Bool, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_default_suffix, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_string, TYPE_String, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_next, arguments_type({TYPE_Symbol, TYPE_ValueRef}), TYPE_Type, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_set_symbol, _void, TYPE_Type, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_del_symbol, _void, TYPE_Type, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_refer, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_view, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_type_is_unique, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_view_id_count, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_view_id_at, TYPE_I32, TYPE_Type, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_type_key, arguments_type({TYPE_Symbol, TYPE_Type}), TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_key_type, TYPE_Type, TYPE_Symbol, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type, TYPE_Type, TYPE_Type, TYPE_U64, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_get_flags, TYPE_U64, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_flags, TYPE_Type, TYPE_Type, TYPE_U64);
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_get_storage_class, TYPE_Symbol, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_storage_class, TYPE_Type, TYPE_Type, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_pointer_type_set_element_type, TYPE_Type, TYPE_Type, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_type_bitcountof, TYPE_I32, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_integer_type, TYPE_Type, TYPE_I32, TYPE_Bool);
-    DEFINE_EXTERN_C_FUNCTION(sc_integer_type_is_signed, TYPE_Bool, TYPE_Type);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type, TYPE_Type, TYPE_String, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_name, TYPE_String, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_original_name, TYPE_String, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_typename_type_get_super, TYPE_Type, TYPE_Type);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type_set_storage, _void, TYPE_Type, TYPE_Type, TYPE_U32);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_typename_type_set_opaque, _void, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_typename_type_is_complete, TYPE_Bool, TYPE_Type);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_array_type, TYPE_Type, TYPE_Type, TYPE_USize);
-    DEFINE_EXTERN_C_FUNCTION(sc_array_type_set_zterm, TYPE_Type, TYPE_Type, TYPE_Bool);
-    DEFINE_EXTERN_C_FUNCTION(sc_array_type_is_zterm, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_array_type_set_count, TYPE_Type, TYPE_Type, TYPE_USize);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_vector_type, TYPE_Type, TYPE_Type, TYPE_USize);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_matrix_type, TYPE_Type, TYPE_Type, TYPE_USize);
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_tuple_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_packed_tuple_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_union_storage_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_EXTERN_C_FUNCTION(sc_tuple_type_is_packed, TYPE_Bool, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_arguments_type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_join, TYPE_Type, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_argcount, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_getarg, TYPE_Type, TYPE_Type, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_arguments_type_to_tuple_type, TYPE_Type, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_view_type, TYPE_Type, TYPE_Type, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_unique_type, TYPE_Type, TYPE_Type, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_mutate_type, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_refer_type, TYPE_Type, TYPE_Type, TYPE_U64, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_refer_flags, TYPE_U64, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_refer_storage_class, TYPE_Symbol, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_strip_qualifiers, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_canonical_type, TYPE_Type, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type, TYPE_Type,
-        TYPE_Type, TYPE_Symbol, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_Symbol, TYPE_Symbol);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_dim, TYPE_Symbol, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_depth, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_arrayed, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_multisampled, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_sampled, TYPE_I32, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_format, TYPE_Symbol, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_image_type_access, TYPE_Symbol, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_sampled_image_type, TYPE_Type, TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_function_type_is_variadic, TYPE_Bool, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_function_type, TYPE_Type, TYPE_Type, TYPE_I32, native_ro_pointer_type(TYPE_Type));
-    DEFINE_EXTERN_C_FUNCTION(sc_function_type_raising, TYPE_Type, TYPE_Type, TYPE_Type);
-    DEFINE_EXTERN_C_FUNCTION(sc_function_type_return_type, arguments_type({TYPE_Type, TYPE_Type}), TYPE_Type);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_list_cons, TYPE_List, TYPE_ValueRef, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_dump, TYPE_List, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_repr, TYPE_String, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_serialize, TYPE_String, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_join, TYPE_List, TYPE_List, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_decons, arguments_type({TYPE_ValueRef, TYPE_List}), TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_count, TYPE_I32, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_at, TYPE_ValueRef, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_next, TYPE_List, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_reverse, TYPE_List, TYPE_List);
-    DEFINE_EXTERN_C_FUNCTION(sc_list_compare, TYPE_Bool, TYPE_List, TYPE_List);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_traceback_push, TYPE_I32, TYPE_Anchor, TYPE_TraceKind, TYPE_Trace);
-    DEFINE_EXTERN_C_FUNCTION(sc_traceback_pop, _void, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_traceback_count, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_enable, _void, TYPE_Bool);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_enabled, TYPE_Bool);
-    DEFINE_EXTERN_C_FUNCTION(sc_extend_trace, TYPE_Trace, TYPE_Trace);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_anchor, TYPE_Anchor, TYPE_Trace);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_lhs, TYPE_Trace, TYPE_Trace);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_rhs, TYPE_Trace, TYPE_Trace);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_kind, TYPE_TraceKind, TYPE_Trace);
-    DEFINE_EXTERN_C_FUNCTION(sc_trace_dump, _void, TYPE_Trace);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_new, TYPE_Anchor, TYPE_Symbol, TYPE_I32, TYPE_I32, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_path, TYPE_Symbol, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_lineno, TYPE_I32, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_column, TYPE_I32, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_get_offset, TYPE_I32, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_offset, TYPE_Anchor, TYPE_Anchor, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_range_new, TYPE_Anchor, TYPE_Symbol,
-        TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_last_lineno, TYPE_I32, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_last_column, TYPE_I32, TYPE_Anchor);
-    DEFINE_EXTERN_C_FUNCTION(sc_anchor_last_offset, TYPE_I32, TYPE_Anchor);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_closure_get_docstring, TYPE_String, TYPE_Closure);
-    DEFINE_EXTERN_C_FUNCTION(sc_closure_get_template, TYPE_ValueRef, TYPE_Closure);
-    DEFINE_EXTERN_C_FUNCTION(sc_closure_get_context, TYPE_ValueRef, TYPE_Closure);
-    DEFINE_EXTERN_C_FUNCTION(sc_closure_transplant, _void, TYPE_Closure, TYPE_Closure);
-    DEFINE_EXTERN_C_FUNCTION(sc_closure_new, TYPE_Closure, TYPE_ValueRef, TYPE_ValueRef);
-
-
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_parse_from_path, TYPE_ValueRef, TYPE_String);
-    DEFINE_RAISING_EXTERN_C_FUNCTION(sc_parse_from_string, TYPE_ValueRef, TYPE_String);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_body_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_body, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_name, TYPE_Symbol, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_group_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_count, TYPE_I32, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_attribute_at, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_op_kind, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_index_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_typed_value_index, TYPE_I32, TYPE_ValueRef, TYPE_I32);
-
-    DEFINE_EXTERN_C_FUNCTION(sc_block_instruction_count, TYPE_I32, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_block_get_instruction, TYPE_ValueRef, TYPE_ValueRef, TYPE_I32);
-    DEFINE_EXTERN_C_FUNCTION(sc_block_terminator, TYPE_ValueRef, TYPE_ValueRef);
-    DEFINE_EXTERN_C_FUNCTION(sc_block_is_terminated, TYPE_Bool, TYPE_ValueRef);
+#endif
+
+    #include "global_defs.inc"
 
 #undef DEFINE_EXTERN_C_FUNCTION