From 1d61d9b7520a940f2f97a2a39489b5d5420835a3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 3 Mar 2017 06:20:53 -0700 Subject: [PATCH] add 'vm mode to `system-type` --- .../scribblings/reference/runtime.scrbl | 12 ++++++-- racket/src/racket/src/string.c | 30 ++++++++++++------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pkgs/racket-doc/scribblings/reference/runtime.scrbl b/pkgs/racket-doc/scribblings/reference/runtime.scrbl index aad2a15f38..87bb09e5b7 100644 --- a/pkgs/racket-doc/scribblings/reference/runtime.scrbl +++ b/pkgs/racket-doc/scribblings/reference/runtime.scrbl @@ -4,7 +4,7 @@ @title[#:tag "runtime"]{Environment and Runtime Information} -@defproc[(system-type [mode (or/c 'os 'word 'gc 'link 'machine +@defproc[(system-type [mode (or/c 'os 'word 'vm 'gc 'link 'machine 'so-suffix 'so-mode 'fs-change) 'os]) (or/c symbol? string? bytes? exact-positive-integer? vector?)]{ @@ -26,6 +26,13 @@ In @indexed-racket['word] mode, the result is either @racket[32] or @racket[64] to indicate whether Racket is running as a 32-bit program or 64-bit program. +In @indexed-racket['vm] mode, +the only possible symbol result is: + +@itemize[ +@item{@indexed-racket['racket]} +] + In @indexed-racket['gc] mode, the possible symbol results are: @@ -82,7 +89,8 @@ are: event} can track changes at the level of a file, as opposed to the file's directory; this property is @racket[#f] on Windows} ] -} + +@history[#:changed "6.8.0.2" @elem{Added @racket['vm] mode.}]} @defproc[(system-language+country) string?]{ diff --git a/racket/src/racket/src/string.c b/racket/src/racket/src/string.c index d93f17f867..37217afdb3 100644 --- a/racket/src/racket/src/string.c +++ b/racket/src/racket/src/string.c @@ -375,9 +375,10 @@ static char *string_to_from_locale(int to_bytes, #define portable_isspace(x) (((x) < 128) && isspace(x)) ROSYM static Scheme_Object *sys_symbol; -ROSYM static Scheme_Object *link_symbol, *machine_symbol, *gc_symbol; +ROSYM static Scheme_Object *link_symbol, *machine_symbol, *vm_symbol, *gc_symbol; ROSYM static Scheme_Object *so_suffix_symbol, *so_mode_symbol, *word_symbol; ROSYM static Scheme_Object *os_symbol, *fs_change_symbol; +ROSYM static Scheme_Object *racket_symbol, *cgc_symbol, *_3m_symbol; ROSYM static Scheme_Object *platform_3m_path, *platform_cgc_path; READ_ONLY static Scheme_Object *zero_length_char_string; READ_ONLY static Scheme_Object *zero_length_byte_string; @@ -406,6 +407,7 @@ scheme_init_string (Scheme_Env *env) REGISTER_SO(link_symbol); REGISTER_SO(machine_symbol); REGISTER_SO(gc_symbol); + REGISTER_SO(vm_symbol); REGISTER_SO(so_suffix_symbol); REGISTER_SO(so_mode_symbol); REGISTER_SO(word_symbol); @@ -413,6 +415,7 @@ scheme_init_string (Scheme_Env *env) REGISTER_SO(fs_change_symbol); link_symbol = scheme_intern_symbol("link"); machine_symbol = scheme_intern_symbol("machine"); + vm_symbol = scheme_intern_symbol("vm"); gc_symbol = scheme_intern_symbol("gc"); so_suffix_symbol = scheme_intern_symbol("so-suffix"); so_mode_symbol = scheme_intern_symbol("so-mode"); @@ -420,6 +423,13 @@ scheme_init_string (Scheme_Env *env) os_symbol = scheme_intern_symbol("os"); fs_change_symbol = scheme_intern_symbol("fs-change"); + REGISTER_SO(racket_symbol); + REGISTER_SO(cgc_symbol); + REGISTER_SO(_3m_symbol); + racket_symbol = scheme_intern_symbol("racket"); + cgc_symbol = scheme_intern_symbol("cgc"); + _3m_symbol = scheme_intern_symbol("3m"); + REGISTER_SO(zero_length_char_string); REGISTER_SO(zero_length_byte_string); zero_length_char_string = scheme_alloc_char_string(0, 0); @@ -2774,12 +2784,16 @@ static Scheme_Object *system_type(int argc, Scheme_Object *argv[]) if (SAME_OBJ(argv[0], gc_symbol)) { #ifdef MZ_PRECISE_GC - return scheme_intern_symbol("3m"); + return _3m_symbol; #else - return scheme_intern_symbol("cgc"); + return cgc_symbol; #endif } + if (SAME_OBJ(argv[0], vm_symbol)) { + return racket_symbol; + } + if (SAME_OBJ(argv[0], so_suffix_symbol)) { return scheme_make_byte_string(MZ_SYSTEM_TYPE_SO_SUFFIX); } @@ -2798,7 +2812,7 @@ static Scheme_Object *system_type(int argc, Scheme_Object *argv[]) } if (!SAME_OBJ(argv[0], os_symbol)) { - scheme_wrong_contract("system-type", "(or/c 'os 'word 'link 'machine 'gc 'so-suffix 'so-mode 'word 'fs-change)", 0, argc, argv); + scheme_wrong_contract("system-type", "(or/c 'os 'word 'link 'machine 'vm 'gc 'so-suffix 'so-mode 'word 'fs-change)", 0, argc, argv); return NULL; } } @@ -2809,17 +2823,13 @@ static Scheme_Object *system_type(int argc, Scheme_Object *argv[]) static Scheme_Object *system_library_subpath(int argc, Scheme_Object *argv[]) { if (argc > 0) { - Scheme_Object *sym; - if (SCHEME_FALSEP(argv[0])) return platform_cgc_path; - sym = scheme_intern_symbol("cgc"); - if (SAME_OBJ(sym, argv[0])) + if (SAME_OBJ(cgc_symbol, argv[0])) return platform_cgc_path; - sym = scheme_intern_symbol("3m"); - if (SAME_OBJ(sym, argv[0])) + if (SAME_OBJ(_3m_symbol, argv[0])) return platform_3m_path; scheme_wrong_contract("system-library-subpath", "(or/c 'cgc '3m #f)", 0, argc, argv);