reference clarifications on immutable literals; JIT tweak
svn: r8491
This commit is contained in:
parent
5652f64f3e
commit
10ce5150d4
|
@ -553,7 +553,8 @@ is used for all slots.
|
||||||
|
|
||||||
In @scheme[read-syntax] mode, each recursive read for the vector
|
In @scheme[read-syntax] mode, each recursive read for the vector
|
||||||
elements is also in @scheme[read-syntax] mode, so that the wrapped
|
elements is also in @scheme[read-syntax] mode, so that the wrapped
|
||||||
vector's elements are also wraped as syntax objects.
|
vector's elements are also wraped as syntax objects, and the vector is
|
||||||
|
immutable.
|
||||||
|
|
||||||
@reader-examples[
|
@reader-examples[
|
||||||
"#(1 apple 3)"
|
"#(1 apple 3)"
|
||||||
|
@ -598,7 +599,7 @@ datum.
|
||||||
|
|
||||||
In @scheme[read-syntax] mode, the recursive read for the box content
|
In @scheme[read-syntax] mode, the recursive read for the box content
|
||||||
is also in @scheme[read-syntax] mode, so that the wrapped box's
|
is also in @scheme[read-syntax] mode, so that the wrapped box's
|
||||||
content is also wraped as a syntax object.
|
content is also wraped as a syntax object, and the box is immutable.
|
||||||
|
|
||||||
@reader-examples[
|
@reader-examples[
|
||||||
"#&17"
|
"#&17"
|
||||||
|
|
|
@ -54,30 +54,39 @@ Within such specifications,
|
||||||
@;------------------------------------------------------------------------
|
@;------------------------------------------------------------------------
|
||||||
@section[#:tag "quote"]{Literals: @scheme[quote] and @scheme[#%datum]}
|
@section[#:tag "quote"]{Literals: @scheme[quote] and @scheme[#%datum]}
|
||||||
|
|
||||||
|
Many forms are implicitly quoted (via @scheme[#%datum]) as literals. See
|
||||||
|
@secref["expand-steps"] for more information.
|
||||||
|
|
||||||
@guideintro["quote"]{@scheme[quote]}
|
@guideintro["quote"]{@scheme[quote]}
|
||||||
|
|
||||||
@defform[(quote datum)]{
|
@defform[(quote datum)]{
|
||||||
|
|
||||||
Produces a constant value corresponding to @scheme[datum] (i.e., the
|
Produces a constant value corresponding to @scheme[datum] (i.e., the
|
||||||
actual representation of the program fragment) without its
|
representation of the program fragment) without its @tech{lexical
|
||||||
@tech{lexical information} or source location.
|
information}, source location, etc. Quoted pairs, vectors, and boxes
|
||||||
|
are immutable.
|
||||||
|
|
||||||
@examples[
|
@examples[
|
||||||
(eval:alts (#,(schemekeywordfont "quote") x) 'x)
|
(eval:alts (#,(schemekeywordfont "quote") x) 'x)
|
||||||
(eval:alts (#,(schemekeywordfont "quote") (+ 1 2)) '(+ 1 2))
|
(eval:alts (#,(schemekeywordfont "quote") (+ 1 2)) '(+ 1 2))
|
||||||
|
(+ 1 2)
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@defform[(#%datum . datum)]{
|
@defform[(#%datum . datum)]{
|
||||||
|
|
||||||
Expands to @scheme[(#,(schemekeywordfont "quote") datum)]. See also @secref["expand-steps"]
|
Expands to @scheme[(#,(schemekeywordfont "quote") datum)], as long as
|
||||||
for information on how the expander introduces @schemeidfont{#%datum}
|
@scheme[datum] is not a keyword. If @scheme[datum] is a keyword, and
|
||||||
identifiers.
|
syntax error is reported.
|
||||||
|
|
||||||
|
See also @secref["expand-steps"] for information on how the expander
|
||||||
|
introduces @schemeidfont{#%datum} identifiers.
|
||||||
|
|
||||||
@examples[
|
@examples[
|
||||||
(#%datum . 10)
|
(#%datum . 10)
|
||||||
(#%datum . x)
|
(#%datum . x)
|
||||||
|
(#%datum . #:x)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
;; Written by Dima Dorfman, 2004
|
;; Written by Dima Dorfman, 2004
|
||||||
;; Converted to MzScheme by Brent Fulgham
|
;; Converted to MzScheme by Brent Fulgham
|
||||||
|
|
||||||
(module nseive mzscheme
|
(module nsieve mzscheme
|
||||||
(require (only (lib "13.ss" "srfi") string-index string-pad))
|
(require (only (lib "13.ss" "srfi") string-index string-pad))
|
||||||
|
|
||||||
(define (nsieve m)
|
(define (nsieve m)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
("ackermann.ss" "11")
|
("ackermann.ss" "11")
|
||||||
("ary.ss" "9000")
|
("ary.ss" "9000")
|
||||||
("binarytrees.ss" "16")
|
("binarytrees.ss" "16")
|
||||||
("chameneos.ss")
|
("chameneos.ss" "1000000")
|
||||||
("cheapconcurrency.ss" "15000")
|
("cheapconcurrency.ss" "15000")
|
||||||
("echo.ss" "150000")
|
("echo.ss" "150000")
|
||||||
("except.ss" "2500000")
|
("except.ss" "2500000")
|
||||||
|
@ -20,15 +20,15 @@
|
||||||
("moments.ss") ; 200 somethings...
|
("moments.ss") ; 200 somethings...
|
||||||
("nbody.ss" "20000000")
|
("nbody.ss" "20000000")
|
||||||
("nestedloop.ss" "18")
|
("nestedloop.ss" "18")
|
||||||
("nsieve.ss")
|
("nsieve.ss" "9")
|
||||||
("nsievebits.ss")
|
("nsievebits.ss" "11")
|
||||||
("partialsums.ss" "2500000")
|
("partialsums.ss" "2500000")
|
||||||
("pidigits.ss")
|
("pidigits.ss" "2500")
|
||||||
("pidigits1.ss")
|
("pidigits1.ss")
|
||||||
("random.ss" "900000")
|
("random.ss" "900000")
|
||||||
("recursive.ss" "11")
|
("recursive.ss" "11")
|
||||||
("regexmatch.ss")
|
("regexmatch.ss")
|
||||||
("regexpdna.ss")
|
("regexpdna.ss" #f ,(lambda () (mk-regexpdna-input)))
|
||||||
("reversecomplement.ss" #f ,(lambda () (mk-revcomp-input)))
|
("reversecomplement.ss" #f ,(lambda () (mk-revcomp-input)))
|
||||||
("k-nucleotide.ss" #f ,(lambda () (mk-knuc-input)))
|
("k-nucleotide.ss" #f ,(lambda () (mk-knuc-input)))
|
||||||
("reversefile.ss")
|
("reversefile.ss")
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(define (dynreq f)
|
(define (dynreq f)
|
||||||
(dynamic-require `(lib ,f "tests" "mzscheme" "benchmarks" "shootout") #f))
|
(dynamic-require f #f))
|
||||||
|
|
||||||
(define (mk-fasta n suffix)
|
(define (mk-fasta n suffix)
|
||||||
(let ([f (build-path (find-system-path 'temp-dir) (string-append "fasta-" suffix))])
|
(let ([f (build-path (find-system-path 'temp-dir) (string-append "fasta-" suffix))])
|
||||||
|
@ -60,6 +60,9 @@
|
||||||
(define (mk-knuc-input)
|
(define (mk-knuc-input)
|
||||||
(mk-fasta "1000000" "1m"))
|
(mk-fasta "1000000" "1m"))
|
||||||
|
|
||||||
|
(define (mk-regexpdna-input)
|
||||||
|
(mk-fasta "5000000" "5m"))
|
||||||
|
|
||||||
(define (mk-sumcol-input)
|
(define (mk-sumcol-input)
|
||||||
(let ([f (build-path (find-system-path 'temp-dir) "sumcol-21k")])
|
(let ([f (build-path (find-system-path 'temp-dir) "sumcol-21k")])
|
||||||
(unless (file-exists? f)
|
(unless (file-exists? f)
|
||||||
|
|
|
@ -156,8 +156,15 @@ typedef struct {
|
||||||
void *self_restart_code;
|
void *self_restart_code;
|
||||||
Scheme_Native_Closure *nc; /* for extract_globals, only */
|
Scheme_Native_Closure *nc; /* for extract_globals, only */
|
||||||
Scheme_Closure_Data *self_data;
|
Scheme_Closure_Data *self_data;
|
||||||
|
void *status_at_ptr;
|
||||||
|
int reg_status;
|
||||||
} mz_jit_state;
|
} mz_jit_state;
|
||||||
|
|
||||||
|
#define mz_RECORD_STATUS(s) (jitter->status_at_ptr = _jit.x.pc, jitter->reg_status = (s))
|
||||||
|
#define mz_CURRENT_STATUS() ((jitter->status_at_ptr == _jit.x.pc) ? jitter->reg_status : 0)
|
||||||
|
|
||||||
|
#define mz_RS_R0_HAS_RUNSTACK0 0x1
|
||||||
|
|
||||||
typedef int (*Native_Check_Arity_Proc)(Scheme_Object *o, int argc, int dummy);
|
typedef int (*Native_Check_Arity_Proc)(Scheme_Object *o, int argc, int dummy);
|
||||||
typedef Scheme_Object *(*Native_Get_Arity_Proc)(Scheme_Object *o, int dumm1, int dummy2);
|
typedef Scheme_Object *(*Native_Get_Arity_Proc)(Scheme_Object *o, int dumm1, int dummy2);
|
||||||
static Native_Check_Arity_Proc check_arity_code;
|
static Native_Check_Arity_Proc check_arity_code;
|
||||||
|
@ -434,6 +441,7 @@ static void *generate_one(mz_jit_state *old_jitter,
|
||||||
jitter->max_extra_pushed = max_extra_pushed;
|
jitter->max_extra_pushed = max_extra_pushed;
|
||||||
jitter->self_pos = 1; /* beyond end of stack */
|
jitter->self_pos = 1; /* beyond end of stack */
|
||||||
jitter->self_toplevel_pos = -1;
|
jitter->self_toplevel_pos = -1;
|
||||||
|
jitter->status_at_ptr = NULL;
|
||||||
|
|
||||||
ok = generate(jitter, data);
|
ok = generate(jitter, data);
|
||||||
|
|
||||||
|
@ -4562,8 +4570,10 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
|
||||||
START_JIT_DATA();
|
START_JIT_DATA();
|
||||||
LOG_IT(("local\n"));
|
LOG_IT(("local\n"));
|
||||||
pos = mz_remap(SCHEME_LOCAL_POS(obj));
|
pos = mz_remap(SCHEME_LOCAL_POS(obj));
|
||||||
jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
if (pos || (mz_CURRENT_STATUS() != mz_RS_R0_HAS_RUNSTACK0)) {
|
||||||
VALIDATE_RESULT(JIT_R0);
|
jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
||||||
|
VALIDATE_RESULT(JIT_R0);
|
||||||
|
}
|
||||||
END_JIT_DATA(2);
|
END_JIT_DATA(2);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -5305,6 +5315,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
|
||||||
|
|
||||||
LOG_IT(("...in\n"));
|
LOG_IT(("...in\n"));
|
||||||
|
|
||||||
|
mz_RECORD_STATUS(mz_RS_R0_HAS_RUNSTACK0);
|
||||||
|
|
||||||
return generate(lv->body, jitter, is_tail, multi_ok);
|
return generate(lv->body, jitter, is_tail, multi_ok);
|
||||||
}
|
}
|
||||||
case scheme_with_cont_mark_type:
|
case scheme_with_cont_mark_type:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user