From a6b7af9733d6d71f697ca90638959ab81b243d7a Mon Sep 17 00:00:00 2001 From: Leif Andersen Date: Mon, 25 Jul 2016 22:33:09 -0400 Subject: [PATCH] Made changes based on Matthew's comments. 1. Changed the API documentation for scheme_make_hash_tree, adding primitives for: * SCHEME_hashtr_eq * SCHEME_hashtr_equal * SCHEME_hashtr_eqv 2. Changed direct uses of scheme_make_hash_tree to use these enumed values. 3. Fixed bugs in documentation 4. Defaults to racket/interactive (and racket/gui/interactive) if there is nothing in the config file --- pkgs/racket-doc/scribblings/inside/misc.scrbl | 5 ++--- pkgs/racket-doc/scribblings/raco/config.scrbl | 7 +++++++ pkgs/racket-doc/scribblings/reference/startup.scrbl | 3 ++- racket/collects/racket/interactive.rkt | 2 +- racket/src/gracket/grmain.c | 1 + racket/src/racket/cmdline.inc | 2 +- racket/src/racket/include/scheme.h | 6 ++++++ racket/src/racket/main.c | 11 +++++++++-- racket/src/racket/src/compenv.c | 2 +- racket/src/racket/src/compile.c | 2 +- racket/src/racket/src/file.c | 2 +- racket/src/racket/src/hash.c | 6 +++--- racket/src/racket/src/module.c | 10 +++++----- racket/src/racket/src/optimize.c | 6 +++--- racket/src/racket/src/resolve.c | 6 +++--- racket/src/racket/src/string.c | 4 ++-- racket/src/racket/src/struct.c | 8 ++++---- racket/src/racket/src/syntax.c | 4 ++-- racket/src/racket/src/thread.c | 6 +++--- racket/src/racket/src/validate.c | 2 +- 20 files changed, 58 insertions(+), 37 deletions(-) diff --git a/pkgs/racket-doc/scribblings/inside/misc.scrbl b/pkgs/racket-doc/scribblings/inside/misc.scrbl index e3743b848a..634a5dc4e1 100644 --- a/pkgs/racket-doc/scribblings/inside/misc.scrbl +++ b/pkgs/racket-doc/scribblings/inside/misc.scrbl @@ -314,9 +314,8 @@ and the weak pointer's value can be @cpp{NULL}.} Similar to @cpp{scheme_make_hash_table}, but creates a hash tree. A hash tree is equivalent to an immutable hash table created by @racket[hash]. The @var{type} argument must be - either either @cpp{SCHEME_hash_ptr} or - @cpp{SCHEME_hash_string}, which determines how keys are - compared.} + either @cpp{SCHEME_hashtr_eq}, @cpp{SCHEME_hashtr_equal}, or @cpp{SCHEME_hashtr_eqv}, + which determines how keys are compared.} @function[(void scheme_hash_tree_set [Scheme_Hash_Tree* table] diff --git a/pkgs/racket-doc/scribblings/raco/config.scrbl b/pkgs/racket-doc/scribblings/raco/config.scrbl index 1184e4f1f4..fef2e22ea0 100644 --- a/pkgs/racket-doc/scribblings/raco/config.scrbl +++ b/pkgs/racket-doc/scribblings/raco/config.scrbl @@ -178,4 +178,11 @@ directory}: @racket[find-config-tethered-console-bin-dir] and @racket[find-config-tethered-gui-bin-dir].} + @item{@indexed-racket['interactive-file] and + @indexed-racket['gui-interactive-file] --- a path to the interactive module + that runs when the REPL runs on startup, unless the + @Flag{q}/@DFlag{no-init-file} is provided. Defaults to + @racketmodname[racket/interactive] and + @racketmodname[racket/gui/interactive].} + ] diff --git a/pkgs/racket-doc/scribblings/reference/startup.scrbl b/pkgs/racket-doc/scribblings/reference/startup.scrbl index 32d613a380..bc129df689 100644 --- a/pkgs/racket-doc/scribblings/reference/startup.scrbl +++ b/pkgs/racket-doc/scribblings/reference/startup.scrbl @@ -102,7 +102,8 @@ thread, unless the @Flag{V}/@DFlag{no-yield} command-line flag is specified. Requiring @racketmodname[racket/gui/base] sets this parameter call @racket[(racket 'yield)]. -@history[#:changed "6.7" "Run racket/interactive file rather than directly running .racketrc"] +@history[#:changed "6.7" @elem{Run @racketmodname[racket/interactive] file + rather than directly running @racket[(find-system-path 'init-file)]}] @; ---------------------------------------------------------------------- diff --git a/racket/collects/racket/interactive.rkt b/racket/collects/racket/interactive.rkt index 9a06b39f0f..bc4a675444 100644 --- a/racket/collects/racket/interactive.rkt +++ b/racket/collects/racket/interactive.rkt @@ -1,4 +1,4 @@ -#lang racket +#lang racket/base (when (collection-file-path "main.rkt" "xrepl" #:fail (lambda _ #f)) (dynamic-require 'xrepl #f)) diff --git a/racket/src/gracket/grmain.c b/racket/src/gracket/grmain.c index bff7c3e8a0..156506f8e2 100644 --- a/racket/src/gracket/grmain.c +++ b/racket/src/gracket/grmain.c @@ -35,6 +35,7 @@ static void pre_filter_cmdline_arguments(int *argc, char ***argv); #define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\gracketrc.rktl" #define MACOS9_INIT_FILENAME "PREFERENCES:gracketrc.rktl" #define INIT_FILENAME_CONF_SYM "gui-interactive-file" +#define DEFAULT_INIT_MODULE "racket/gui/interactive" #if WIN32 # define NEED_CONSOLE_PRINTF # define DEFER_EXPLICIT_EXIT diff --git a/racket/src/racket/cmdline.inc b/racket/src/racket/cmdline.inc index 6e95808d9d..c52517e4a3 100644 --- a/racket/src/racket/cmdline.inc +++ b/racket/src/racket/cmdline.inc @@ -670,7 +670,7 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) #ifndef DONT_LOAD_INIT_FILE if (fa->a->use_repl && !fa->a->no_init_file) { Scheme_Object *a[2]; - a[0] = get_init_filename(fa->global_env, INIT_FILENAME_CONF_SYM); + a[0] = get_init_filename(fa->global_env, INIT_FILENAME_CONF_SYM, DEFAULT_INIT_MODULE); if (a[0]) { a[1] = scheme_false; scheme_dynamic_require(2, a); diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index 0a26975682..dba27c8b33 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -956,6 +956,12 @@ enum { SCHEME_hash_late_weak_ptr }; +enum { + SCHEME_hashtr_eq, + SCHEME_hashtr_equal, + SCHEME_hashtr_eqv +}; + typedef struct Scheme_Env Scheme_Env; #define SCHEME_VAR_BUCKET(obj) ((Scheme_Bucket *)(obj)) diff --git a/racket/src/racket/main.c b/racket/src/racket/main.c index b2c1a6421d..4f1db74af1 100644 --- a/racket/src/racket/main.c +++ b/racket/src/racket/main.c @@ -103,7 +103,8 @@ extern BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved); * * Otherwise check config file for location */ static Scheme_Object *get_init_filename(Scheme_Env *env, - char *init_filename_sym) + char *init_filename_sym, + char *default_init_module) { Scheme_Object *f, *a[2], *build_path; Scheme_Thread * volatile p; @@ -143,13 +144,18 @@ static Scheme_Object *get_init_filename(Scheme_Env *env, f = scheme_read(port); scheme_close_input_port(port); if(SCHEME_HASHTRP(f)) { - f = scheme_hash_tree_get(f, scheme_intern_symbol(init_filename_sym)); + f = scheme_hash_tree_get((Scheme_Hash_Tree *)f, scheme_intern_symbol(init_filename_sym)); if(f) { p->error_buf = save; return f; } } } + + /* Failed to load custom init file, load racket/interactive */ + f = scheme_intern_symbol(default_init_module); + p->error_buf = save; + return f; } p->error_buf = save; @@ -167,6 +173,7 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env); # define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\racketrc.rktl" # define MACOS9_INIT_FILENAME "PREFERENCES:racketrc.rktl" # define INIT_FILENAME_CONF_SYM "interactive-file" +# define DEFAULT_INIT_MODULE "racket/interactive" # define PRINTF printf # define PROGRAM "Racket" # define PROGRAM_LC "racket" diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index 38cd07921b..4c732e69eb 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -1100,7 +1100,7 @@ void create_skip_table(Scheme_Comp_Env *start_frame) } if (!table) { - table = scheme_make_hash_tree(0); + table = scheme_make_hash_tree(SCHEME_hashtr_eq); table = scheme_hash_tree_set(table, scheme_make_integer(0), (Scheme_Object *)end_frame); } diff --git a/racket/src/racket/src/compile.c b/racket/src/racket/src/compile.c index 9b063494dd..3a8487a092 100644 --- a/racket/src/racket/src/compile.c +++ b/racket/src/racket/src/compile.c @@ -862,7 +862,7 @@ static Scheme_Object *global_binding(Scheme_Object *id, Scheme_Comp_Env *env) Scheme_Hash_Tree *binds; binds = (Scheme_Hash_Tree *)scheme_hash_get(env->binding_namess, scheme_env_phase(env->genv)); if (!binds) - binds = scheme_make_hash_tree(0); + binds = scheme_make_hash_tree(SCHEME_hashtr_eq); binds = scheme_hash_tree_set(binds, sym, id); scheme_hash_set(env->binding_namess, scheme_env_phase(env->genv), (Scheme_Object *)binds); } diff --git a/racket/src/racket/src/file.c b/racket/src/racket/src/file.c index d00d199b66..ca017bf7c4 100644 --- a/racket/src/racket/src/file.c +++ b/racket/src/racket/src/file.c @@ -6479,7 +6479,7 @@ static Scheme_Object *collpaths_gen_p(int argc, Scheme_Object **argv, int rel_ok Scheme_Hash_Tree *new_ht; Scheme_Object *key, *val, *idx, *a[2]; - new_ht = scheme_make_hash_tree(0); + new_ht = scheme_make_hash_tree(SCHEME_hashtr_eq); a[0] = s; idx = scheme_hash_table_iterate_start(1, a); diff --git a/racket/src/racket/src/hash.c b/racket/src/racket/src/hash.c index 36bff1e04b..d2300e82dc 100644 --- a/racket/src/racket/src/hash.c +++ b/racket/src/racket/src/hash.c @@ -3145,11 +3145,11 @@ Scheme_Hash_Tree *scheme_make_hash_tree(int eql_kind) Scheme_Hash_Tree *scheme_make_hash_tree_of_type(Scheme_Type stype) { if (stype == scheme_eq_hash_tree_type) - return scheme_make_hash_tree(0); + return scheme_make_hash_tree(SCHEME_hashtr_eq); else if (stype == scheme_hash_tree_type) - return scheme_make_hash_tree(1); + return scheme_make_hash_tree(SCHEME_hashtr_equal); else - return scheme_make_hash_tree(2); + return scheme_make_hash_tree(SCHEME_hashtr_eqv); } Scheme_Hash_Tree *scheme_make_hash_tree_placeholder(int eql_kind) diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index ccc06a4bca..2b5118dbc3 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -1012,7 +1012,7 @@ static Scheme_Object *primitive_table(int argc, Scheme_Object *argv[]) Scheme_Bucket **bs, *b; intptr_t i; - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); bs = menv->toplevel->buckets; for (i = menv->toplevel->size; i--; ) { @@ -5197,7 +5197,7 @@ static Scheme_Object *add_start(Scheme_Object *v, int base_phase, int eval_exp, Scheme_Bucket *b; if (!ht) - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); key = make_key(base_phase, eval_exp, eval_run); @@ -7820,7 +7820,7 @@ Scheme_Object *scheme_prune_bindings_table(Scheme_Object *binding_names, Scheme_ Scheme_Object *k, *val, *base_stx; Scheme_Hash_Tree *ht; - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); base_stx = scheme_stx_add_module_context(scheme_datum_to_syntax(scheme_false, scheme_false, scheme_false, 0, 0), scheme_module_context_at_phase(scheme_stx_to_module_context(rn_stx), @@ -8480,7 +8480,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env all_provided = scheme_make_hash_table_eqv(); all_reprovided = scheme_make_hash_table_eqv(); - all_defs = scheme_make_hash_tree(2); + all_defs = scheme_make_hash_tree(SCHEME_hashtr_eqv); all_defs_out = scheme_make_hash_table_eqv(); rn_set = env->genv->stx_context; @@ -12291,7 +12291,7 @@ void add_single_require(Scheme_Module_Exports *me, /* from module */ if (exns) { Scheme_Object *l, *a; - excepts = scheme_make_hash_tree(0); + excepts = scheme_make_hash_tree(SCHEME_hashtr_eq); for (l = exns; SCHEME_STX_PAIRP(l); l = SCHEME_STX_CDR(l)) { a = SCHEME_STX_CAR(l); if (SCHEME_STXP(a)) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 7eca8e510c..fa3f3327d1 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -200,7 +200,7 @@ static void register_traversers(void); void scheme_init_optimize() { REGISTER_SO(empty_eq_hash_tree); - empty_eq_hash_tree = scheme_make_hash_tree(0); + empty_eq_hash_tree = scheme_make_hash_tree(SCHEME_hashtr_eq); #ifdef MZ_PRECISE_GC register_traversers(); @@ -4769,7 +4769,7 @@ static void add_type(Optimize_Info *info, Scheme_Object *var, Scheme_Object *pre } if (!new_types) - new_types = scheme_make_hash_tree(0); + new_types = scheme_make_hash_tree(SCHEME_hashtr_eq); new_types = scheme_hash_tree_set(new_types, var, pred); info->types = new_types; } @@ -6685,7 +6685,7 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in body_info = optimize_info_add_frame(info, head->count, head->count, 0); rhs_info = body_info; - merge_skip_vars = scheme_make_hash_tree(0); + merge_skip_vars = scheme_make_hash_tree(SCHEME_hashtr_eq); body = head->body; for (i = head->num_clauses; i--; ) { pre_body = (Scheme_IR_Let_Value *)body; diff --git a/racket/src/racket/src/resolve.c b/racket/src/racket/src/resolve.c index b92ace27b1..947a3b79b5 100644 --- a/racket/src/racket/src/resolve.c +++ b/racket/src/racket/src/resolve.c @@ -1334,7 +1334,7 @@ Scheme_Object *scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) /* Find body and make a set of local bindings: */ body = head->body; pre_body = NULL; - binding_vars = scheme_make_hash_tree(0); + binding_vars = scheme_make_hash_tree(SCHEME_hashtr_eq); for (i = head->num_clauses; i--; ) { pre_body = (Scheme_IR_Let_Value *)body; for (j = 0; j < pre_body->count; j++) { @@ -2150,7 +2150,7 @@ module_expr_resolve(Scheme_Object *data, Resolve_Info *old_rslv) Scheme_Object *k, *val; Scheme_Hash_Tree *ht; - ht = scheme_make_hash_tree(1); + ht = scheme_make_hash_tree(SCHEME_hashtr_equal); if (SCHEME_HASHTRP(m->other_binding_names)) { Scheme_Hash_Tree *t = (Scheme_Hash_Tree *)m->other_binding_names; @@ -2706,7 +2706,7 @@ static void resolve_info_add_mapping(Resolve_Info *info, Scheme_IR_Local *var, S Scheme_Hash_Tree *ht; if (!info->redirects) { - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); info->redirects = ht; } diff --git a/racket/src/racket/src/string.c b/racket/src/racket/src/string.c index 0a65ec4119..4ef69034e5 100644 --- a/racket/src/racket/src/string.c +++ b/racket/src/racket/src/string.c @@ -2540,7 +2540,7 @@ static Scheme_Object *env_copy(int argc, Scheme_Object *argv[]) return scheme_make_environment_variables(ht); /* copy system environment variables into a hash table: */ - ht = scheme_make_hash_tree(1); + ht = scheme_make_hash_tree(SCHEME_hashtr_equal); #ifdef DOS_FILE_SYSTEM { @@ -2598,7 +2598,7 @@ static Scheme_Object *env_make(int argc, Scheme_Object *argv[]) Scheme_Object *varbs, *valbs; int i; - ht = scheme_make_hash_tree(1); + ht = scheme_make_hash_tree(SCHEME_hashtr_equal); for (i = 0; i < argc; i += 2) { varbs = argv[i]; diff --git a/racket/src/racket/src/struct.c b/racket/src/racket/src/struct.c index 00dae6de55..8346157716 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -6170,7 +6170,7 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator, } else { if (!scheme_inspector_sees_part(argv[0], inspector, field_pos)) { if (!setter_positions) - setter_positions = scheme_make_hash_tree(0); + setter_positions = scheme_make_hash_tree(SCHEME_hashtr_eq); setter_positions = scheme_hash_tree_set(setter_positions, scheme_make_integer(field_pos), scheme_true); } } @@ -6234,12 +6234,12 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator, if (prop) { if (SCHEME_TRUEP(proc)) { if (!red_props) - red_props = scheme_make_hash_tree(0); + red_props = scheme_make_hash_tree(SCHEME_hashtr_eq); red_props = scheme_hash_tree_set(red_props, prop, proc); has_redirect = 1; } else { if (!empty_red_props) - empty_red_props = scheme_make_hash_tree(0); + empty_red_props = scheme_make_hash_tree(SCHEME_hashtr_eq); empty_red_props = scheme_hash_tree_set(empty_red_props, prop, proc); } } else if (st) { @@ -6438,7 +6438,7 @@ Scheme_Hash_Tree *scheme_parse_chaperone_props(const char *who, int start_at, in NULL); if (!ht) - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); ht = scheme_hash_tree_set(ht, v, argv[start_at + 1]); start_at += 2; diff --git a/racket/src/racket/src/syntax.c b/racket/src/racket/src/syntax.c index 2f71ee3ec8..effc067233 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -311,8 +311,8 @@ void scheme_init_stx(Scheme_Env *env) REGISTER_SO(empty_scope_table); REGISTER_SO(empty_propagate_table); REGISTER_SO(empty_scope_set); - empty_hash_tree = scheme_make_hash_tree(0); - empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree(0); + empty_hash_tree = scheme_make_hash_tree(SCHEME_hashtr_eq); + empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree(SCHEME_hashtr_eq); empty_scope_table = MALLOC_ONE_TAGGED(Scheme_Scope_Table); empty_scope_table->so.type = scheme_scope_table_type; empty_scope_table->simple_scopes = empty_scope_set; diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index ce696456a7..0af0c00851 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -6875,7 +6875,7 @@ static Scheme_Object *get_members(Scheme_Object *skip_nacks) return scheme_null; else if (scheme_list_length(skip_nacks) > 5) { Scheme_Hash_Tree *ht; - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); for (; SCHEME_PAIRP(skip_nacks); skip_nacks = SCHEME_CDR(skip_nacks)) { ht = scheme_hash_tree_set(ht, SCHEME_CAR(skip_nacks), scheme_true); } @@ -7666,7 +7666,7 @@ static Scheme_Object *reparameterize(int argc, Scheme_Object **argv) naya = MALLOC_ONE_TAGGED(Scheme_Config); naya->so.type = scheme_config_type; - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); naya->ht = ht; naya->root = npz; @@ -7891,7 +7891,7 @@ static void make_initial_config(Scheme_Thread *p) config->root = paramz; { Scheme_Hash_Tree *ht; - ht = scheme_make_hash_tree(0); + ht = scheme_make_hash_tree(SCHEME_hashtr_eq); config->ht = ht; } diff --git a/racket/src/racket/src/validate.c b/racket/src/racket/src/validate.c index 692b238ea2..e63b4b611f 100644 --- a/racket/src/racket/src/validate.c +++ b/racket/src/racket/src/validate.c @@ -982,7 +982,7 @@ void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr, static Scheme_Hash_Tree *as_nonempty_procs(Scheme_Hash_Tree *procs) { if (!procs) - procs = scheme_make_hash_tree(0); + procs = scheme_make_hash_tree(SCHEME_hashtr_eq); return procs; }