Merge: doc: fixed some typos and other misc. corrections
[nit.git] / c_src / nitc__nith.main.1.c
1 #include "nitc__nith.main.0.h"
2 struct nitni_global_ref_list_t *nitni_global_ref_list;
3 void initialize_nitni_global_refs() {
4 nitni_global_ref_list = (struct nitni_global_ref_list_t*)nit_alloc(sizeof(struct nitni_global_ref_list_t));
5 nitni_global_ref_list->head = NULL;
6 nitni_global_ref_list->tail = NULL;
7 }
8
9 void nitni_global_ref_add( struct nitni_ref *ref ) {
10 if ( nitni_global_ref_list->head == NULL ) {
11 nitni_global_ref_list->head = ref;
12 ref->prev = NULL;
13 } else {
14 nitni_global_ref_list->tail->next = ref;
15 ref->prev = nitni_global_ref_list->tail;
16 }
17 nitni_global_ref_list->tail = ref;
18
19 ref->next = NULL;
20 }
21
22 void nitni_global_ref_remove( struct nitni_ref *ref ) {
23 if ( ref->prev == NULL ) {
24 nitni_global_ref_list->head = ref->next;
25 } else {
26 ref->prev->next = ref->next;
27 }
28
29 if ( ref->next == NULL ) {
30 nitni_global_ref_list->tail = ref->prev;
31 } else {
32 ref->next->prev = ref->prev;
33 }
34 }
35
36 extern void nitni_global_ref_incr( struct nitni_ref *ref ) {
37 if ( ref->count == 0 ) /* not registered */
38 {
39 /* add to list */
40 nitni_global_ref_add( ref );
41 }
42
43 ref->count ++;
44 }
45
46 extern void nitni_global_ref_decr( struct nitni_ref *ref ) {
47 if ( ref->count == 1 ) /* was last reference */
48 {
49 /* remove from list */
50 nitni_global_ref_remove( ref );
51 }
52
53 ref->count --;
54 }
55
56 #include <signal.h>
57 #ifndef NO_STACKTRACE
58 #define UNW_LOCAL_ONLY
59 #include <libunwind.h>
60 #include "c_functions_hash.h"
61 #endif
62 int glob_argc;
63 char **glob_argv;
64 val *glob_sys;
65 struct catch_stack_t catchStack;
66 static void show_backtrace(void) {
67 #ifndef NO_STACKTRACE
68 char* opt = getenv("NIT_NO_STACK");
69 unw_cursor_t cursor;
70 if(opt==NULL){
71 unw_context_t uc;
72 unw_word_t ip;
73 char* procname = malloc(sizeof(char) * 100);
74 unw_getcontext(&uc);
75 unw_init_local(&cursor, &uc);
76 PRINT_ERROR("-------------------------------------------------\n");
77 PRINT_ERROR("-- Stack Trace ------------------------------\n");
78 PRINT_ERROR("-------------------------------------------------\n");
79 while (unw_step(&cursor) > 0) {
80 unw_get_proc_name(&cursor, procname, 100, &ip);
81 const char* recv = get_nit_name(procname, strlen(procname));
82 if (recv != NULL){
83 PRINT_ERROR("` %s\n", recv);
84 }else{
85 PRINT_ERROR("` %s\n", procname);
86 }
87 }
88 PRINT_ERROR("-------------------------------------------------\n");
89 free(procname);
90 }
91 #endif /* NO_STACKTRACE */
92 }
93 void sig_handler(int signo){
94 #ifdef _WIN32
95 PRINT_ERROR("Caught signal : %s\n", signo);
96 #else
97 PRINT_ERROR("Caught signal : %s\n", strsignal(signo));
98 #endif
99 show_backtrace();
100 signal(signo, SIG_DFL);
101 #ifndef _WIN32
102 kill(getpid(), signo);
103 #endif
104 }
105 void fatal_exit(int status) {
106 show_backtrace();
107 exit(status);
108 }
109 int main(int argc, char** argv) {
110 val* var /* : Sys */;
111 #if !defined(__ANDROID__) && !defined(TARGET_OS_IPHONE)
112 signal(SIGABRT, sig_handler);
113 signal(SIGFPE, sig_handler);
114 signal(SIGILL, sig_handler);
115 signal(SIGINT, sig_handler);
116 signal(SIGTERM, sig_handler);
117 signal(SIGSEGV, sig_handler);
118 #endif
119 #ifndef _WIN32
120 signal(SIGPIPE, SIG_IGN);
121 #endif
122 glob_argc = argc; glob_argv = argv;
123 catchStack.cursor = -1;
124 initialize_gc_option();
125 initialize_nitni_global_refs();
126 var = NEW_core__Sys(&type_core__Sys);
127 glob_sys = var;
128 {
129 ((void(*)(val* self))(var->class->vft[COLOR_core__kernel__Object__init]))(var); /* init on <var:Sys>*/
130 }
131 {
132 ((void(*)(val* self))(var->class->vft[COLOR_core__kernel__Sys__run]))(var); /* run on <var:Sys>*/
133 }
134 return 0;
135 }
136 const char FILE_nitc__nith[] = "nith.nit";
137 const char FILE_nitc__modelize[] = "./modelize/modelize.nit";
138 const char FILE_nitc__modelize_property[] = "./modelize/modelize_property.nit";
139 const char FILE_nitc__modelize_class[] = "./modelize/modelize_class.nit";
140 const char FILE_nitc__modelbuilder[] = "./modelbuilder.nit";
141 const char FILE_nitc__loader[] = "./loader.nit";
142 const char FILE_nitc__modelbuilder_base[] = "./modelbuilder_base.nit";
143 const char FILE_nitc__model[] = "./model/model.nit";
144 const char FILE_nitc__mmodule[] = "./model/mmodule.nit";
145 const char FILE_nitc__mpackage[] = "./model/mpackage.nit";
146 const char FILE_nitc__model_base[] = "./model/model_base.nit";
147 const char FILE_nitc__location[] = "./location.nit";
148 const char FILE_core[] = "../lib/core/core.nit";
149 const char FILE_core__posix[] = "../lib/core/posix.nit";
150 const char FILE_core__text[] = "../lib/core/text/text.nit";
151 const char FILE_core__ropes[] = "../lib/core/text/ropes.nit";
152 const char FILE_core__flat[] = "../lib/core/text/flat.nit";
153 const char FILE_core__abstract_text[] = "../lib/core/text/abstract_text.nit";
154 const char FILE_core__native[] = "../lib/core/text/native.nit";
155 const char FILE_core__kernel[] = "../lib/core/kernel.nit";
156 const char FILE_core__math[] = "../lib/core/math.nit";
157 const char FILE_core__collection[] = "../lib/core/collection/collection.nit";
158 const char FILE_core__range[] = "../lib/core/collection/range.nit";
159 const char FILE_core__abstract_collection[] = "../lib/core/collection/abstract_collection.nit";
160 const char FILE_core__list[] = "../lib/core/collection/list.nit";
161 const char FILE_core__array[] = "../lib/core/collection/array.nit";
162 const char FILE_core__circular_array[] = "../lib/core/collection/circular_array.nit";
163 const char FILE_core__sorter[] = "../lib/core/collection/sorter.nit";
164 const char FILE_core__hash_collection[] = "../lib/core/collection/hash_collection.nit";
165 const char FILE_core__union_find[] = "../lib/core/collection/union_find.nit";
166 const char FILE_core__fixed_ints[] = "../lib/core/fixed_ints.nit";
167 const char FILE_core__string_search[] = "../lib/core/text/string_search.nit";
168 const char FILE_core__fixed_ints_text[] = "../lib/core/text/fixed_ints_text.nit";
169 const char FILE_core__environ[] = "../lib/core/environ.nit";
170 const char FILE_core__file[] = "../lib/core/file.nit";
171 const char FILE_core__stream[] = "../lib/core/stream.nit";
172 const char FILE_core__error[] = "../lib/core/error.nit";
173 const char FILE_core__bytes[] = "../lib/core/bytes.nit";
174 const char FILE_core__codecs[] = "../lib/core/codecs/codecs.nit";
175 const char FILE_core__codec_base[] = "../lib/core/codecs/codec_base.nit";
176 const char FILE_core__utf8[] = "../lib/core/codecs/utf8.nit";
177 const char FILE_core__iso8859_95d1[] = "../lib/core/codecs/iso8859_1.nit";
178 const char FILE_core__time[] = "../lib/core/time.nit";
179 const char FILE_core__gc[] = "../lib/core/gc.nit";
180 const char FILE_core__exec[] = "../lib/core/exec.nit";
181 const char FILE_core__bitset[] = "../lib/core/bitset.nit";
182 const char FILE_core__queue[] = "../lib/core/queue.nit";
183 const char FILE_core__numeric[] = "../lib/core/numeric.nit";
184 const char FILE_core__re[] = "../lib/core/re.nit";
185 const char FILE_more_collections[] = "../lib/more_collections.nit";
186 const char FILE_serialization[] = "../lib/serialization/serialization.nit";
187 const char FILE_poset[] = "../lib/poset.nit";
188 const char FILE_nitc__mdoc[] = "./model/mdoc.nit";
189 const char FILE_ordered_tree[] = "../lib/ordered_tree.nit";
190 const char FILE_nitc__toolcontext[] = "./toolcontext.nit";
191 const char FILE_opts[] = "../lib/opts.nit";
192 const char FILE_nitc__version[] = "./version.nit";
193 const char FILE_template[] = "../lib/template/template.nit";
194 const char FILE_nitc__parser[] = "./parser/parser.nit";
195 const char FILE_nitc__parser_prod[] = "./parser/parser_prod.nit";
196 const char FILE_nitc__lexer[] = "./parser/lexer.nit";
197 const char FILE_nitc__parser_nodes[] = "./parser/parser_nodes.nit";
198 const char FILE_console[] = "../lib/console.nit";
199 const char FILE_nitc__lexer_work[] = "./parser/lexer_work.nit";
200 const char FILE_nitc__tables[] = "./parser/tables.nit";
201 const char FILE_nitc__parser_work[] = "./parser/parser_work.nit";
202 const char FILE_ini[] = "../lib/ini.nit";
203 const char FILE_nitc__phase[] = "./phase.nit";
204 const char FILE_nitc__annotation[] = "./annotation.nit";
205 const char FILE_nitc__literal[] = "./literal.nit";
206 const char FILE_nitc__mmodule_data[] = "./model/mmodule_data.nit";
207 const char FILE_nitc__transform[] = "./transform.nit";
208 const char FILE_nitc__astbuilder[] = "./astbuilder.nit";
209 const char FILE_nitc__typing[] = "./semantize/typing.nit";
210 const char FILE_nitc__local_var_init[] = "./semantize/local_var_init.nit";
211 const char FILE_nitc__flow[] = "./semantize/flow.nit";
212 const char FILE_nitc__scope[] = "./semantize/scope.nit";
213 const char FILE_nitc__astvalidation[] = "./astvalidation.nit";
214 const char FILE_nitc__semantize[] = "./semantize/semantize.nit";
215 const char FILE_nitc__auto_super_init[] = "./semantize/auto_super_init.nit";
216 const char FILE_nitc__rapid_type_analysis[] = "./rapid_type_analysis.nit";
217 const char FILE_csv[] = "../lib/csv/csv.nit";
218 const char FILE_nitc__separate_erasure_compiler[] = "./compiler/separate_erasure_compiler.nit";
219 const char FILE_nitc__separate_compiler[] = "./compiler/separate_compiler.nit";
220 const char FILE_nitc__abstract_compiler[] = "./compiler/abstract_compiler.nit";
221 const char FILE_nitc__platform[] = "./platform/platform.nit";
222 const char FILE_nitc__parser_util[] = "./parser_util.nit";
223 const char FILE_nitc__c_tools[] = "./c_tools.nit";
224 const char FILE_nitc__mixin[] = "./mixin.nit";
225 const char FILE_counter[] = "../lib/counter.nit";
226 const char FILE_nitc__coloring[] = "./compiler/coloring.nit";
227 const char FILE_nitc__light_only[] = "./compiler/compiler_ffi/light_only.nit";
228 const char FILE_nitc__light[] = "./compiler/compiler_ffi/light.nit";
229 const char FILE_nitc__light_ffi[] = "./ffi/light_ffi.nit";
230 const char FILE_nitc__nitni_utilities[] = "./nitni/nitni_utilities.nit";
231 const char FILE_nitc__nitni_base[] = "./nitni/nitni_base.nit";
232 const char FILE_nitc__light_ffi_base[] = "./ffi/light_ffi_base.nit";
233 const char FILE_nitc__extern_classes[] = "./ffi/extern_classes.nit";
234 const char FILE_nitc__light_c[] = "./ffi/light_c.nit";
235 void gc_finalize (void *obj, void *client_data) {
236 val* var /* : Finalizable */;
237 var = obj;
238 {
239 ((void(*)(val* self))(var->class->vft[COLOR_core__gc__Finalizable__finalize]))(var); /* finalize on <var:Finalizable>*/
240 }
241 }