static void QLYR_ERROR(qlfr_err_t my_err) { // __android_log_print(ANDROID_LOG_INFO, "YAP ", "error %s in saved state %s",GLOBAL_RestoreFile, qlyr_error[my_err]); Yap_Error(SAVED_STATE_ERROR,TermNil,"error %s in saved state %s",GLOBAL_RestoreFile, qlyr_error[my_err]); Yap_exit(1); }
void Yap_InitError(yap_error_number e, Term t, const char *msg) { if (LOCAL_ActiveError->status) { Yap_exit(1); } LOCAL_ActiveError->errorNo = e; LOCAL_ActiveError->errorFile = NULL; LOCAL_ActiveError->errorFunction = NULL; LOCAL_ActiveError->errorLine = 0; if (msg) { LOCAL_Error_Size = strlen(msg); LOCAL_ActiveError->errorMsg = malloc(LOCAL_Error_Size + 1); strcpy(LOCAL_ActiveError->errorMsg, msg); } else { LOCAL_Error_Size = 0; } }
X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap) { char *p; size_t *ssize; Yap_InitDefaults(iap, NULL, argc, argv); while (--argc > 0) { p = *++argv; if (*p == '-') switch (*++p) { case 'b': iap->boot_file_type = YAP_PL; if (p[1]) iap->YapPrologBootFile = p + 1; else if (argv[1] && *argv[1] != '-') { iap->YapPrologBootFile = *++argv; argc--; } else { iap->YapPrologBootFile = "boot.yap"; } break; case 'B': iap->boot_file_type = YAP_BOOT_PL; if (p[1]) iap->YapPrologBootFile = p + 1; else if (argv[1] && *argv[1] != '-') { iap->YapPrologBootFile = *++argv; argc--; } else { iap->YapPrologBootFile = "boot.yap"; } break; case '?': print_usage(); exit(EXIT_SUCCESS); case 'q': iap->QuietMode = TRUE; break; #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || \ defined(YAPOR_THREADS) case 'w': ssize = &(iap->NumberWorkers); goto GetSize; case 'd': if (!strcmp("dump-runtime-variables", p)) return dump_runtime_variables(); ssize = &(iap->DelayedReleaseLoad); goto GetSize; #else case 'd': if (!strcmp("dump-runtime-variables", p)) return dump_runtime_variables(); #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ case 'F': /* just ignore for now */ argc--; argv++; break; case 'f': iap->FastBoot = TRUE; if (argc > 1 && argv[1][0] != '-') { argc--; argv++; if (strcmp(*argv, "none")) { iap->YapPrologRCFile = *argv; } break; } break; // execution mode case 'J': switch (p[1]) { case '0': iap->ExecutionMode = YAPC_INTERPRETED; break; case '1': iap->ExecutionMode = YAPC_MIXED_MODE_USER; break; case '2': iap->ExecutionMode = YAPC_MIXED_MODE_ALL; break; case '3': iap->ExecutionMode = YAPC_COMPILE_USER; break; case '4': iap->ExecutionMode = YAPC_COMPILE_ALL; break; default: fprintf(stderr, "[ YAP unrecoverable error: unknown switch -%c%c ]\n", *p, p[1]); exit(EXIT_FAILURE); } p++; break; case 'G': ssize = &(iap->MaxGlobalSize); goto GetSize; break; case 's': case 'S': ssize = &(iap->StackSize); #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || \ defined(YAPOR_THREADS) if (p[1] == 'l') { p++; ssize = &(iap->SchedulerLoop); } #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ goto GetSize; case 'a': case 'A': ssize = &(iap->AttsSize); goto GetSize; case 'T': ssize = &(iap->MaxTrailSize); goto get_trail_size; case 't': ssize = &(iap->TrailSize); #ifdef TABLING if (p[1] == 's') { p++; ssize = &(iap->MaxTableSpaceSize); } #endif /* TABLING */ get_trail_size: if (*++p == '\0') { if (argc > 1) --argc, p = *++argv; else { fprintf(stderr, "[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); print_usage(); exit(EXIT_FAILURE); } } { unsigned long int i = 0, ch; while ((ch = *p++) >= '0' && ch <= '9') i = i * 10 + ch - '0'; switch (ch) { case 'M': case 'm': i *= 1024; ch = *p++; break; case 'g': i *= 1024 * 1024; ch = *p++; break; case 'k': case 'K': ch = *p++; break; } if (ch) { iap->YapPrologTopLevelGoal = add_end_dot(*argv); } else { *ssize = i; } } break; case 'h': case 'H': ssize = &(iap->HeapSize); GetSize: if (*++p == '\0') { if (argc > 1) --argc, p = *++argv; else { fprintf(stderr, "[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); print_usage(); exit(EXIT_FAILURE); } } { unsigned long int i = 0, ch; while ((ch = *p++) >= '0' && ch <= '9') i = i * 10 + ch - '0'; switch (ch) { case 'M': case 'm': i *= 1024; ch = *p++; break; case 'g': case 'G': i *= 1024 * 1024; ch = *p++; break; case 'k': case 'K': ch = *p++; break; } if (ch) { fprintf( stderr, "[ YAP unrecoverable error: illegal size specification %s ]", argv[-1]); Yap_exit(1); } *ssize = i; } break; #ifdef DEBUG case 'P': if (p[1] != '\0') { while (p[1] != '\0') { int ch = p[1]; if (ch >= 'A' && ch <= 'Z') ch += ('a' - 'A'); if (ch >= 'a' && ch <= 'z') GLOBAL_Option[ch - 96] = 1; p++; } } else { YAP_SetOutputMessage(); } break; #endif case 'L': if (p[1] && p[1] >= '0' && p[1] <= '9') /* hack to emulate SWI's L local option */ { ssize = &(iap->MaxStackSize); goto GetSize; } iap->QuietMode = TRUE; iap->HaltAfterConsult = TRUE; case 'l': p++; if (!*++argv) { fprintf(stderr, "%% YAP unrecoverable error: missing load file name\n"); exit(1); } else if (!strcmp("--", *argv)) { /* shell script, the next entry should be the file itself */ iap->YapPrologRCFile = argv[1]; argc = 1; break; } else { iap->YapPrologRCFile = *argv; argc--; } if (*p) { /* we have something, usually, of the form: -L -- FileName ExtraArgs */ /* being called from a script */ while (*p && (*p == ' ' || *p == '\t')) p++; if (p[0] == '-' && p[1] == '-') { /* ignore what is next */ argc = 1; } } break; /* run goal before top-level */ case 'g': if ((*argv)[0] == '\0') iap->YapPrologGoal = *argv; else { argc--; if (argc == 0) { fprintf(stderr, " [ YAP unrecoverable error: missing " "initialization goal for option 'g' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologGoal = *argv; } break; /* run goal as top-level */ case 'z': if ((*argv)[0] == '\0') iap->YapPrologTopLevelGoal = *argv; else { argc--; if (argc == 0) { fprintf( stderr, " [ YAP unrecoverable error: missing goal for option 'z' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologTopLevelGoal = add_end_dot(*argv); } break; case 'n': if (!strcmp("nosignals", p)) { iap->PrologCannotHandleInterrupts = true; break; } break; case '-': if (!strcmp("-nosignals", p)) { iap->PrologCannotHandleInterrupts = true; break; } else if (!strncmp("-home=", p, strlen("-home="))) { GLOBAL_Home = p + strlen("-home="); } else if (!strncmp("-cwd=", p, strlen("-cwd="))) { #if __WINDOWS__ if (_chdir(p + strlen("-cwd=")) < 0) { #else if (chdir(p + strlen("-cwd=")) < 0) { #endif fprintf(stderr, " [ YAP unrecoverable error in setting cwd: %s ]\n", strerror(errno)); } } else if (!strncmp("-stack=", p, strlen("-stack="))) { ssize = &(iap->StackSize); p += strlen("-stack="); goto GetSize; } else if (!strncmp("-trail=", p, strlen("-trail="))) { ssize = &(iap->TrailSize); p += strlen("-trail="); goto GetSize; } else if (!strncmp("-heap=", p, strlen("-heap="))) { ssize = &(iap->HeapSize); p += strlen("-heap="); goto GetSize; } else if (!strncmp("-goal=", p, strlen("-goal="))) { iap->YapPrologGoal = p + strlen("-goal="); } else if (!strncmp("-top-level=", p, strlen("-top-level="))) { iap->YapPrologTopLevelGoal = p + strlen("-top-level="); } else if (!strncmp("-table=", p, strlen("-table="))) { ssize = &(iap->MaxTableSpaceSize); p += strlen("-table="); goto GetSize; } else if (!strncmp("-", p, strlen("-="))) { ssize = &(iap->MaxTableSpaceSize); p += strlen("-table="); /* skip remaining arguments */ argc = 1; } break; case 'p': if ((*argv)[0] == '\0') iap->YapPrologAddPath = *argv; else { argc--; if (argc == 0) { fprintf( stderr, " [ YAP unrecoverable error: missing paths for option 'p' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologAddPath = *argv; } break; /* nf: Begin preprocessor code */ case 'D': { char *var, *value; ++p; var = p; if (var == NULL || *var == '\0') break; while (*p != '=' && *p != '\0') ++p; if (*p == '\0') break; *p = '\0'; ++p; value = p; if (*value == '\0') break; if (iap->def_c == YAP_MAX_YPP_DEFS) break; iap->def_var[iap->def_c] = var; iap->def_value[iap->def_c] = value; ++(iap->def_c); break; } /* End preprocessor code */ default: { fprintf(stderr, "[ YAP unrecoverable error: unknown switch -%c ]\n", *p); print_usage(); exit(EXIT_FAILURE); } } else { iap->SavedState = p; } } return iap->boot_file_type; }
int YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap) { char *p; #ifdef USE_SYSTEM_MALLOC int BootMode = YAP_FULL_BOOT_FROM_PROLOG; #else int BootMode = YAP_BOOT_FROM_SAVED_CODE; #endif unsigned long int *ssize; iap->SavedState = NULL; iap->HeapSize = 0; iap->StackSize = 0; iap->TrailSize = 0; iap->AttsSize = 0; iap->MaxAttsSize = 0; iap->MaxHeapSize = 0; iap->MaxStackSize = 0; iap->MaxGlobalSize = 0; iap->MaxTrailSize = 0; iap->YapLibDir = NULL; iap->YapPrologBootFile = NULL; iap->YapPrologInitFile = NULL; iap->YapPrologRCFile = NULL; iap->YapPrologGoal = NULL; iap->YapPrologTopLevelGoal = NULL; iap->YapPrologAddPath = NULL; iap->HaltAfterConsult = FALSE; iap->FastBoot = FALSE; iap->MaxTableSpaceSize = 0; iap->NumberWorkers = DEFAULT_NUMBERWORKERS; iap->SchedulerLoop = DEFAULT_SCHEDULERLOOP; iap->DelayedReleaseLoad = DEFAULT_DELAYEDRELEASELOAD; iap->PrologShouldHandleInterrupts = TRUE; iap->ExecutionMode = YAPC_INTERPRETED; iap->Argc = argc; iap->Argv = argv; iap->def_c = 0; iap->ErrorNo = 0; iap->ErrorCause = NULL; iap->QuietMode = FALSE; GD->cmdline.os_argc = argc; GD->cmdline.os_argv = argv; while (--argc > 0) { p = *++argv; if (*p == '-') switch (*++p) { case 'b': BootMode = YAP_BOOT_FROM_PROLOG; iap->YapPrologBootFile = *++argv; argc--; break; case '?': print_usage(); exit(EXIT_SUCCESS); case 'q': iap->QuietMode = TRUE; break; #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS) case 'w': ssize = &(iap->NumberWorkers); goto GetSize; case 'd': if (!strcmp("dump-runtime-variables",p)) return dump_runtime_variables(); ssize = &(iap->DelayedReleaseLoad); goto GetSize; #else case 'd': if (!strcmp("dump-runtime-variables",p)) return dump_runtime_variables(); #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ case 'F': /* just ignore for now */ argc--; argv++; break; case 'f': iap->FastBoot = TRUE; if (argc > 1 && argv[1][0] != '-') { argc--; argv++; if (strcmp(*argv,"none")) { iap->YapPrologRCFile = *argv; } break; } break; // execution mode case 'J': switch (p[1]) { case '0': iap->ExecutionMode = YAPC_INTERPRETED; break; case '1': iap->ExecutionMode = YAPC_MIXED_MODE_USER; break; case '2': iap->ExecutionMode = YAPC_MIXED_MODE_ALL; break; case '3': iap->ExecutionMode = YAPC_COMPILE_USER; break; case '4': iap->ExecutionMode = YAPC_COMPILE_ALL; break; default: fprintf(stderr,"[ YAP unrecoverable error: unknown switch -%c%c ]\n", *p, p[1]); exit(EXIT_FAILURE); } p++; break; case 'G': ssize = &(iap->MaxGlobalSize); goto GetSize; break; case 's': case 'S': ssize = &(iap->StackSize); #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS) if (p[1] == 'l') { p++; ssize = &(iap->SchedulerLoop); } #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ goto GetSize; case 'a': case 'A': ssize = &(iap->AttsSize); goto GetSize; case 'T': ssize = &(iap->MaxTrailSize); goto get_trail_size; case 't': ssize = &(iap->TrailSize); #ifdef TABLING if (p[1] == 's') { p++; ssize = &(iap->MaxTableSpaceSize); } #endif /* TABLING */ get_trail_size: if (*++p == '\0') { if (argc > 1) --argc, p = *++argv; else { fprintf(stderr,"[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); print_usage(); exit(EXIT_FAILURE); } } { unsigned long int i = 0, ch; while ((ch = *p++) >= '0' && ch <= '9') i = i * 10 + ch - '0'; switch(ch) { case 'M': case 'm': i *= 1024; ch = *p++; break; case 'g': i *= 1024*1024; ch = *p++; break; case 'k': case 'K': ch = *p++; break; } if (ch) { iap->YapPrologTopLevelGoal = add_end_dot(*argv); } else { *ssize = i; } } break; case 'h': case 'H': ssize = &(iap->HeapSize); GetSize: if (*++p == '\0') { if (argc > 1) --argc, p = *++argv; else { fprintf(stderr,"[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); print_usage(); exit(EXIT_FAILURE); } } { unsigned long int i = 0, ch; while ((ch = *p++) >= '0' && ch <= '9') i = i * 10 + ch - '0'; switch(ch) { case 'M': case 'm': i *= 1024; ch = *p++; break; case 'g': case 'G': i *= 1024*1024; ch = *p++; break; case 'k': case 'K': ch = *p++; break; } if (ch) { fprintf(stderr,"[ YAP unrecoverable error: illegal size specification %s ]", argv[-1]); Yap_exit(1); } *ssize = i; } break; #ifdef DEBUG case 'P': YAP_SetOutputMessage(); break; #endif case 'L': if (p[1] && p[1] >= '0' && p[1] <= '9') /* hack to emulate SWI's L local option */ { ssize = &(iap->MaxStackSize); goto GetSize; } iap->QuietMode = TRUE; iap->HaltAfterConsult = TRUE; case 'l': p++; if (!*++argv) { fprintf(stderr,"%% YAP unrecoverable error: missing load file name\n"); exit(1); } else if (!strcmp("--",*argv)) { /* shell script, the next entry should be the file itself */ iap->YapPrologRCFile = argv[1]; argc = 1; break; } else { iap->YapPrologRCFile = *argv; argc--; } if (*p) { /* we have something, usually, of the form: -L -- FileName ExtraArgs */ /* being called from a script */ while (*p && (*p == ' ' || *p == '\t')) p++; if (p[0] == '-' && p[1] == '-') { /* ignore what is next */ argc = 1; } } break; /* run goal before top-level */ case 'g': if ((*argv)[0] == '\0') iap->YapPrologGoal = *argv; else { argc--; if (argc == 0) { fprintf(stderr," [ YAP unrecoverable error: missing initialization goal for option 'g' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologGoal = *argv; } break; /* run goal as top-level */ case 'z': if ((*argv)[0] == '\0') iap->YapPrologTopLevelGoal = *argv; else { argc--; if (argc == 0) { fprintf(stderr," [ YAP unrecoverable error: missing goal for option 'z' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologTopLevelGoal = add_end_dot(*argv); } break; case 'n': if (!strcmp("nosignals", p)) { iap->PrologShouldHandleInterrupts = FALSE; break; } break; case 'p': if ((*argv)[0] == '\0') iap->YapPrologAddPath = *argv; else { argc--; if (argc == 0) { fprintf(stderr," [ YAP unrecoverable error: missing paths for option 'p' ]\n"); exit(EXIT_FAILURE); } argv++; iap->YapPrologAddPath = *argv; } break; /* nf: Begin preprocessor code */ case 'D': { char *var, *value; ++p; var = p; if (var == NULL || *var=='\0') break; while(*p!='=' && *p!='\0') ++p; if ( *p=='\0' ) break; *p='\0'; ++p; value=p; if ( *value == '\0' ) break; if (iap->def_c == YAP_MAX_YPP_DEFS) break; iap->def_var[iap->def_c]=var; iap->def_value[iap->def_c]=value; ++(iap->def_c); break; } /* End preprocessor code */ case '-': /* skip remaining arguments */ argc = 1; break; default: { fprintf(stderr,"[ YAP unrecoverable error: unknown switch -%c ]\n", *p); print_usage(); exit(EXIT_FAILURE); } } else { iap->SavedState = p; } } GD->cmdline.appl_argc = argc; GD->cmdline.appl_argv = argv; return BootMode; }