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
This commit is contained in:
parent
d0f9e4ba81
commit
a6b7af9733
|
@ -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]
|
||||
|
|
|
@ -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].}
|
||||
|
||||
]
|
||||
|
|
|
@ -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)]}]
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#lang racket
|
||||
#lang racket/base
|
||||
(when (collection-file-path "main.rkt" "xrepl"
|
||||
#:fail (lambda _ #f))
|
||||
(dynamic-require 'xrepl #f))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user