void SDR(Node* regexTree) { if (regexTree != NULL) { SDR(regexTree->left); SDR(regexTree->right); regexTree->bNullable = Nullable(regexTree); CalculateFirstPos(regexTree); CalculateLastPos(regexTree); CalculateFollowPos(regexTree); } }
void rb_vm_bugreport(void) { if (GET_THREAD()->vm) { int i = 0; SDR(); if (rb_backtrace_each(bugreport_backtrace, &i)) { fputs("\n", stderr); } } #if HAVE_BACKTRACE #define MAX_NATIVE_TRACE 1024 { static void *trace[MAX_NATIVE_TRACE]; int n = backtrace(trace, MAX_NATIVE_TRACE); char **syms = backtrace_symbols(trace, n); int i; fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); if (syms) { for (i=0; i<n; i++) { fprintf(stderr, "%s\n", syms[i]); } free(syms); } fprintf(stderr, "\n"); } #endif }
static inline void vm_pop_frame(rb_thread_t *th) { #if COLLECT_PROFILE rb_control_frame_t *cfp = th->cfp; if (RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { VALUE current_time = clock(); rb_control_frame_t *cfp = th->cfp; cfp->prof_time_self = current_time - cfp->prof_time_self; (cfp+1)->prof_time_chld += cfp->prof_time_self; cfp->iseq->profile.count++; cfp->iseq->profile.time_cumu = cfp->prof_time_self; cfp->iseq->profile.time_self = cfp->prof_time_self - cfp->prof_time_chld; } else if (0 /* c method? */) { } #endif th->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp); if (VMDEBUG == 2) { SDR(); } }
void rb_vm_bugreport(void) { VALUE bt; if (GET_THREAD()->vm) { int i; SDR(); bt = rb_make_backtrace(); if (TYPE(bt) == T_ARRAY) for (i = 0; i < RARRAY_LEN(bt); i++) { dp(RARRAY_AT(bt, i)); } } #if HAVE_BACKTRACE #include <execinfo.h> #define MAX_NATIVE_TRACE 1024 { static void *trace[MAX_NATIVE_TRACE]; int n = backtrace(trace, MAX_NATIVE_TRACE); int i; fprintf(stderr, "-- backtrace of native function call (Use addr2line) --\n"); for (i=0; i<n; i++) { fprintf(stderr, "%p\n", trace[i]); } fprintf(stderr, "-------------------------------------------------------\n"); } #endif }
int main() { std::string strAlphabet; std::string strRegex; std::string strPostfixRegex; std::vector<std::string> vecAlphabet; regexTree = NULL; // read the alphabet getline(inFile, strAlphabet); TokenizeAlphabetString(strAlphabet, vecAlphabet); // read the Regex getline(inFile, strRegex); TransformToPostfixForm(strRegex, strPostfixRegex); vecAlphabet.push_back("#"); CreateRegexTree(strPostfixRegex); nrGlobal = 0; setLeafNodesOrderNumber(regexTree); SDR(regexTree); PrintFollowPosMatrix(); CreateDFA(vecAlphabet); PrintDFA(); system("pause"); }
static inline rb_control_frame_t * vm_push_frame(rb_thread_t * th, const rb_iseq_t * iseq, VALUE type, VALUE self, VALUE specval, const VALUE *pc, VALUE *sp, VALUE *lfp, int local_size) { rb_control_frame_t * const cfp = th->cfp - 1; int i; if ((void *)(sp + local_size) >= (void *)cfp) { rb_exc_raise(sysstack_error); } th->cfp = cfp; /* setup vm value stack */ /* nil initialize */ for (i=0; i < local_size; i++) { *sp = Qnil; sp++; } /* set special val */ *sp = GC_GUARDED_PTR(specval); if (lfp == 0) { lfp = sp; } /* setup vm control frame stack */ cfp->pc = (VALUE *)pc; cfp->sp = sp + 1; cfp->bp = sp + 1; cfp->iseq = (rb_iseq_t *) iseq; cfp->flag = type; cfp->self = self; cfp->lfp = lfp; cfp->dfp = sp; cfp->block_iseq = 0; cfp->proc = 0; cfp->me = 0; #define COLLECT_PROFILE 0 #if COLLECT_PROFILE cfp->prof_time_self = clock(); cfp->prof_time_chld = 0; #endif if (VMDEBUG == 2) { SDR(); } return cfp; }
int main(){ arb *a; a = creare(); printf("\nRSD:");RSD(a); printf("\nSRD:");SRD(a); printf("\nSDR:");SDR(a); printf("\nSuma:%d",suma(a)); printf("\nMaxim:%d",maxim(a)); printf("\nNr frunze:%d",frunze(a)); printf("\nInaltimea:%d",inaltime(a)); return 0; }
void rb_vm_bugreport(void) { VALUE bt; if (GET_THREAD()->vm) { int i; SDR(); bt = rb_make_backtrace(); if (bt) { fprintf(stderr, "-- Ruby level backtrace information" "-----------------------------------------\n"); for (i = 0; i < RARRAY_LEN(bt); i++) { VALUE str = RARRAY_PTR(bt)[i]; fprintf(stderr, "%s\n", RSTRING_PTR(str)); } fprintf(stderr, "\n"); } } #if HAVE_BACKTRACE #include <execinfo.h> #define MAX_NATIVE_TRACE 1024 { static void *trace[MAX_NATIVE_TRACE]; int n = backtrace(trace, MAX_NATIVE_TRACE); char **syms = backtrace_symbols(trace, n); int i; fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); for (i=0; i<n; i++) { const char *info = syms ? syms[i] : ""; fprintf(stderr, "%p %s\n", trace[i], info); } fprintf(stderr, "\n"); if (syms) { free(syms); } } #endif }
void rb_vm_bugreport(void) { #ifdef __linux__ # define PROC_MAPS_NAME "/proc/self/maps" #endif #ifdef PROC_MAPS_NAME enum {other_runtime_info = 1}; #else enum {other_runtime_info = 0}; #endif const rb_vm_t *const vm = GET_VM(); if (vm) { SDR(); rb_backtrace_print_as_bugreport(); fputs("\n", stderr); } #if HAVE_BACKTRACE || defined(_WIN32) fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); { #if defined __APPLE__ fprintf(stderr, "\n"); fprintf(stderr, " See Crash Report log file under the one of following:\n" " * ~/Library/Logs/CrashReporter\n" " * /Library/Logs/CrashReporter\n" " * ~/Library/Logs/DiagnosticReports\n" " * /Library/Logs/DiagnosticReports\n" " the more detail of.\n"); #elif HAVE_BACKTRACE #define MAX_NATIVE_TRACE 1024 static void *trace[MAX_NATIVE_TRACE]; int n = backtrace(trace, MAX_NATIVE_TRACE); char **syms = backtrace_symbols(trace, n); if (syms) { #ifdef USE_ELF rb_dump_backtrace_with_lines(n, trace, syms); #else int i; for (i=0; i<n; i++) { fprintf(stderr, "%s\n", syms[i]); } #endif free(syms); } #elif defined(_WIN32) DWORD tid = GetCurrentThreadId(); HANDLE th = (HANDLE)_beginthread(dump_thread, 0, &tid); if (th != (HANDLE)-1) WaitForSingleObject(th, INFINITE); #endif } fprintf(stderr, "\n"); #endif /* HAVE_BACKTRACE */ if (other_runtime_info || vm) { fprintf(stderr, "-- Other runtime information " "-----------------------------------------------\n\n"); } if (vm) { int i; VALUE name; long len; const int max_name_length = 1024; # define LIMITED_NAME_LENGTH(s) \ (((len = RSTRING_LEN(s)) > max_name_length) ? max_name_length : (int)len) name = vm->progname; fprintf(stderr, "* Loaded script: %.*s\n", LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); fprintf(stderr, "\n"); fprintf(stderr, "* Loaded features:\n\n"); for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { name = RARRAY_PTR(vm->loaded_features)[i]; if (RB_TYPE_P(name, T_STRING)) { fprintf(stderr, " %4d %.*s\n", i, LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); } else { fprintf(stderr, " %4d #<%s:%p>\n", i, rb_class2name(CLASS_OF(name)), (void *)name); } } fprintf(stderr, "\n"); } { #ifdef PROC_MAPS_NAME { FILE *fp = fopen(PROC_MAPS_NAME, "r"); if (fp) { fprintf(stderr, "* Process memory map:\n\n"); while (!feof(fp)) { char buff[0x100]; size_t rn = fread(buff, 1, 0x100, fp); if (fwrite(buff, 1, rn, stderr) != rn) break; } fclose(fp); fprintf(stderr, "\n\n"); } } #endif /* __linux__ */ } }
void rb_vm_bugreport(const void *ctx) { #ifdef __linux__ # define PROC_MAPS_NAME "/proc/self/maps" #endif #ifdef PROC_MAPS_NAME enum {other_runtime_info = 1}; #else enum {other_runtime_info = 0}; #endif const rb_vm_t *const vm = GET_VM(); preface_dump(); if (vm) { SDR(); rb_backtrace_print_as_bugreport(); fputs("\n", stderr); } rb_dump_machine_register(ctx); #if HAVE_BACKTRACE || defined(_WIN32) fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); rb_print_backtrace(); fprintf(stderr, "\n"); #endif /* HAVE_BACKTRACE */ if (other_runtime_info || vm) { fprintf(stderr, "-- Other runtime information " "-----------------------------------------------\n\n"); } if (vm) { int i; VALUE name; long len; const int max_name_length = 1024; # define LIMITED_NAME_LENGTH(s) \ (((len = RSTRING_LEN(s)) > max_name_length) ? max_name_length : (int)len) name = vm->progname; fprintf(stderr, "* Loaded script: %.*s\n", LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); fprintf(stderr, "\n"); fprintf(stderr, "* Loaded features:\n\n"); for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { name = RARRAY_AREF(vm->loaded_features, i); if (RB_TYPE_P(name, T_STRING)) { fprintf(stderr, " %4d %.*s\n", i, LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); } else if (RB_TYPE_P(name, T_CLASS) || RB_TYPE_P(name, T_MODULE)) { const char *const type = RB_TYPE_P(name, T_CLASS) ? "class" : "module"; name = rb_search_class_path(rb_class_real(name)); if (!RB_TYPE_P(name, T_STRING)) { fprintf(stderr, " %4d %s:<unnamed>\n", i, type); continue; } fprintf(stderr, " %4d %s:%.*s\n", i, type, LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); } else { VALUE klass = rb_search_class_path(rb_obj_class(name)); if (!RB_TYPE_P(klass, T_STRING)) { fprintf(stderr, " %4d #<%p:%p>\n", i, (void *)CLASS_OF(name), (void *)name); continue; } fprintf(stderr, " %4d #<%.*s:%p>\n", i, LIMITED_NAME_LENGTH(klass), RSTRING_PTR(klass), (void *)name); } } fprintf(stderr, "\n"); } { #ifdef PROC_MAPS_NAME { FILE *fp = fopen(PROC_MAPS_NAME, "r"); if (fp) { fprintf(stderr, "* Process memory map:\n\n"); while (!feof(fp)) { char buff[0x100]; size_t rn = fread(buff, 1, 0x100, fp); if (fwrite(buff, 1, rn, stderr) != rn) break; } fclose(fp); fprintf(stderr, "\n\n"); } } #endif /* __linux__ */ #ifdef HAVE_LIBPROCSTAT # define MIB_KERN_PROC_PID_LEN 4 int mib[MIB_KERN_PROC_PID_LEN]; struct kinfo_proc kp; size_t len = sizeof(struct kinfo_proc); mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PID; mib[3] = getpid(); if (sysctl(mib, MIB_KERN_PROC_PID_LEN, &kp, &len, NULL, 0) == -1) { perror("sysctl"); } else { struct procstat *prstat = procstat_open_sysctl(); fprintf(stderr, "* Process memory map:\n\n"); procstat_vm(prstat, &kp); procstat_close(prstat); fprintf(stderr, "\n"); } #endif /* __FreeBSD__ */ } }
static VALUE vm_make_env_each(rb_thread_t * const th, rb_control_frame_t * const cfp, VALUE *envptr, VALUE * const endptr) { VALUE envval, penvval = 0; rb_env_t *env; VALUE *nenvptr; int i, local_size; if (ENV_IN_HEAP_P(th, envptr)) { return ENV_VAL(envptr); } if (envptr != endptr) { VALUE *penvptr = GC_GUARDED_PTR_REF(*envptr); rb_control_frame_t *pcfp = cfp; if (ENV_IN_HEAP_P(th, penvptr)) { penvval = ENV_VAL(penvptr); } else { while (pcfp->dfp != penvptr) { pcfp++; if (pcfp->dfp == 0) { SDR(); rb_bug("invalid dfp"); } } penvval = vm_make_env_each(th, pcfp, penvptr, endptr); cfp->lfp = pcfp->lfp; *envptr = GC_GUARDED_PTR(pcfp->dfp); } } /* allocate env */ envval = env_alloc(); GetEnvPtr(envval, env); if (!RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { local_size = 2; } else { local_size = cfp->iseq->local_size; } env->env_size = local_size + 1 + 2; env->local_size = local_size; env->env = ALLOC_N(VALUE, env->env_size); env->prev_envval = penvval; for (i = 0; i <= local_size; i++) { env->env[i] = envptr[-local_size + i]; #if 0 fprintf(stderr, "%2d ", &envptr[-local_size + i] - th->stack); dp(env->env[i]); if (RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { /* clear value stack for GC */ envptr[-local_size + i] = 0; } #endif } *envptr = envval; /* GC mark */ nenvptr = &env->env[i - 1]; nenvptr[1] = envval; /* frame self */ nenvptr[2] = penvval; /* frame prev env object */ /* reset lfp/dfp in cfp */ cfp->dfp = nenvptr; if (envptr == endptr) { cfp->lfp = nenvptr; } /* as Binding */ env->block.self = cfp->self; env->block.lfp = cfp->lfp; env->block.dfp = cfp->dfp; env->block.iseq = cfp->iseq; if (!RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { /* TODO */ env->block.iseq = 0; } return envval; }
void rb_vm_bugreport(void) { rb_vm_t *vm = GET_VM(); if (vm) { int i = 0; SDR(); if (rb_backtrace_each(bugreport_backtrace, &i)) { fputs("\n", stderr); } } #if HAVE_BACKTRACE || defined(_WIN32) fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); { #if defined __MACH__ && defined __APPLE__ fprintf(stderr, "\n"); fprintf(stderr, " See Crash Report log file under " "~/Library/Logs/CrashReporter or\n"); fprintf(stderr, " /Library/Logs/CrashReporter, for " "the more detail of.\n"); #elif HAVE_BACKTRACE #define MAX_NATIVE_TRACE 1024 static void *trace[MAX_NATIVE_TRACE]; int n = backtrace(trace, MAX_NATIVE_TRACE); char **syms = backtrace_symbols(trace, n); if (syms) { #ifdef USE_ELF rb_dump_backtrace_with_lines(n, trace, syms); #else int i; for (i=0; i<n; i++) { fprintf(stderr, "%s\n", syms[i]); } #endif free(syms); } #elif defined(_WIN32) DWORD tid = GetCurrentThreadId(); HANDLE th = (HANDLE)_beginthread(dump_thread, 0, &tid); if (th != (HANDLE)-1) WaitForSingleObject(th, INFINITE); #endif } fprintf(stderr, "\n"); #endif /* HAVE_BACKTRACE */ fprintf(stderr, "-- Other runtime information " "-----------------------------------------------\n\n"); { int i; fprintf(stderr, "* Loaded script: %s\n", StringValueCStr(vm->progname)); fprintf(stderr, "\n"); fprintf(stderr, "* Loaded features:\n\n"); for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { fprintf(stderr, " %4d %s\n", i, StringValueCStr(RARRAY_PTR(vm->loaded_features)[i])); } fprintf(stderr, "\n"); #if __linux__ { FILE *fp = fopen("/proc/self/maps", "r"); if (fp) { fprintf(stderr, "* Process memory map:\n\n"); while (!feof(fp)) { char buff[0x100]; size_t rn = fread(buff, 1, 0x100, fp); fwrite(buff, 1, rn, stderr); } fclose(fp); fprintf(stderr, "\n\n"); } } #endif /* __linux__ */ } }
void rb_vm_bugreport(void) { #ifdef __linux__ # define PROC_MAPS_NAME "/proc/self/maps" #endif #ifdef PROC_MAPS_NAME enum {other_runtime_info = 1}; #else enum {other_runtime_info = 0}; #endif const rb_vm_t *const vm = GET_VM(); #if defined __APPLE__ fputs("-- Crash Report log information " "--------------------------------------------\n" " See Crash Report log file under the one of following:\n" " * ~/Library/Logs/CrashReporter\n" " * /Library/Logs/CrashReporter\n" " * ~/Library/Logs/DiagnosticReports\n" " * /Library/Logs/DiagnosticReports\n" " for more details.\n" "\n", stderr); #endif if (vm) { SDR(); rb_backtrace_print_as_bugreport(); fputs("\n", stderr); } #if HAVE_BACKTRACE || defined(_WIN32) fprintf(stderr, "-- C level backtrace information " "-------------------------------------------\n"); rb_print_backtrace(); fprintf(stderr, "\n"); #endif /* HAVE_BACKTRACE */ if (other_runtime_info || vm) { fprintf(stderr, "-- Other runtime information " "-----------------------------------------------\n\n"); } if (vm) { int i; VALUE name; long len; const int max_name_length = 1024; # define LIMITED_NAME_LENGTH(s) \ (((len = RSTRING_LEN(s)) > max_name_length) ? max_name_length : (int)len) name = vm->progname; fprintf(stderr, "* Loaded script: %.*s\n", LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); fprintf(stderr, "\n"); fprintf(stderr, "* Loaded features:\n\n"); for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { name = RARRAY_AREF(vm->loaded_features, i); if (RB_TYPE_P(name, T_STRING)) { fprintf(stderr, " %4d %.*s\n", i, LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); } else if (RB_TYPE_P(name, T_CLASS) || RB_TYPE_P(name, T_MODULE)) { const char *const type = RB_TYPE_P(name, T_CLASS) ? "class" : "module"; name = rb_class_name(name); fprintf(stderr, " %4d %s:%.*s\n", i, type, LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); } else { VALUE klass = rb_class_name(CLASS_OF(name)); fprintf(stderr, " %4d #<%.*s:%p>\n", i, LIMITED_NAME_LENGTH(klass), RSTRING_PTR(klass), (void *)name); } } fprintf(stderr, "\n"); } { #ifdef PROC_MAPS_NAME { FILE *fp = fopen(PROC_MAPS_NAME, "r"); if (fp) { fprintf(stderr, "* Process memory map:\n\n"); while (!feof(fp)) { char buff[0x100]; size_t rn = fread(buff, 1, 0x100, fp); if (fwrite(buff, 1, rn, stderr) != rn) break; } fclose(fp); fprintf(stderr, "\n\n"); } } #endif /* __linux__ */ } }