int use_inline = FALSE;
int use_code = FALSE;
+int use_lazy_init = FALSE;
const char *init_function = NULL;
printf(" --inline Generate inline functions in header\n");
printf(" --no-inline Do not generate inline functions in header\n");
printf(" --init-function FUNCTION Generate initialization function\n");
+ printf(" --lazy-init Do Orc compile at function execution\n");
printf("\n");
exit (0);
} else {
help();
}
+ } else if (strcmp(argv[i], "--lazy-init") == 0) {
+ use_lazy_init = TRUE;
} else if (strncmp(argv[i], "-", 1) == 0) {
printf("Unknown option: %s\n", argv[i]);
exit (1);
init_function = orc_parse_get_init_function (programs[0]);
}
+ if (init_function == NULL) {
+ use_lazy_init = TRUE;
+ }
+
output = fopen (output_file, "w");
if (!output) {
printf("Could not write output file: %s\n", output_file);
OrcVariable *var;
int i;
- if (init_function) {
+ if (!use_lazy_init) {
const char *storage;
if (is_inline) {
storage = "extern ";
fprintf(output, "\n");
fprintf(output, "{\n");
fprintf(output, " OrcExecutor _ex, *ex = &_ex;\n");
- if (init_function) {
+ if (!use_lazy_init) {
if (use_code) {
fprintf(output, " OrcCode *c = _orc_code_%s;\n", p->name);
} else {
}
fprintf(output, " void (*func) (OrcExecutor *);\n");
fprintf(output, "\n");
- if (init_function == NULL) {
+ if (use_lazy_init) {
fprintf(output, " if (!p_inited) {\n");
fprintf(output, " orc_once_mutex_lock ();\n");
fprintf(output, " if (!p_inited) {\n");
fprintf(output, "void\n");
fprintf(output, "%s (void)\n", init_function);
fprintf(output, "{\n");
- fprintf(output, "#ifndef DISABLE_ORC\n");
- for(i=0;i<n_programs;i++){
- fprintf(output, " {\n");
- fprintf(output, " /* %s */\n", programs[i]->name);
- fprintf(output, " OrcProgram *p;\n");
- fprintf(output, " OrcCompileResult result;\n");
- fprintf(output, " \n");
- output_program_generation (programs[i], output, FALSE);
- fprintf(output, "\n");
- fprintf(output, " result = orc_program_compile (p);\n");
- fprintf(output, "\n");
- if (use_code) {
- fprintf(output, " _orc_code_%s = orc_program_take_code (p);\n",
- programs[i]->name);
- fprintf(output, " orc_program_free (p);\n");
- } else {
- fprintf(output, " _orc_program_%s = p;\n", programs[i]->name);
+ if (!use_lazy_init) {
+ fprintf(output, "#ifndef DISABLE_ORC\n");
+ for(i=0;i<n_programs;i++){
+ fprintf(output, " {\n");
+ fprintf(output, " /* %s */\n", programs[i]->name);
+ fprintf(output, " OrcProgram *p;\n");
+ fprintf(output, " OrcCompileResult result;\n");
+ fprintf(output, " \n");
+ output_program_generation (programs[i], output, FALSE);
+ fprintf(output, "\n");
+ fprintf(output, " result = orc_program_compile (p);\n");
+ fprintf(output, "\n");
+ if (use_code) {
+ fprintf(output, " _orc_code_%s = orc_program_take_code (p);\n",
+ programs[i]->name);
+ fprintf(output, " orc_program_free (p);\n");
+ } else {
+ fprintf(output, " _orc_program_%s = p;\n", programs[i]->name);
+ }
+ fprintf(output, " }\n");
}
- fprintf(output, " }\n");
+ fprintf(output, "#endif\n");
}
- fprintf(output, "#endif\n");
fprintf(output, "}\n");
fprintf(output, "\n");
}