avoid generating unnecessary struct-accessor and -mutator names
svn: r14566
This commit is contained in:
parent
da4742700b
commit
f51f8c8b7f
|
@ -1327,9 +1327,9 @@
|
||||||
rename-super-temp ... rename-super-extra-temp ...
|
rename-super-temp ... rename-super-extra-temp ...
|
||||||
rename-inner-temp ... rename-inner-extra-temp ...
|
rename-inner-temp ... rename-inner-extra-temp ...
|
||||||
method-accessor ...) ; for a local call that needs a dynamic lookup
|
method-accessor ...) ; for a local call that needs a dynamic lookup
|
||||||
(let ([local-field-accessor (make-struct-field-accessor local-accessor local-field-pos)]
|
(let ([local-field-accessor (make-struct-field-accessor local-accessor local-field-pos #f)]
|
||||||
...
|
...
|
||||||
[local-field-mutator (make-struct-field-mutator local-mutator local-field-pos)]
|
[local-field-mutator (make-struct-field-mutator local-mutator local-field-pos #f)]
|
||||||
...)
|
...)
|
||||||
(syntax-parameterize
|
(syntax-parameterize
|
||||||
([this-param (make-this-map (quote-syntax this-id)
|
([this-param (make-this-map (quote-syntax this-id)
|
||||||
|
@ -2102,9 +2102,9 @@
|
||||||
;; Use public field names to name the accessors and mutators
|
;; Use public field names to name the accessors and mutators
|
||||||
(let-values ([(inh-accessors inh-mutators)
|
(let-values ([(inh-accessors inh-mutators)
|
||||||
(values
|
(values
|
||||||
(map (lambda (id) (make-class-field-accessor super id))
|
(map (lambda (id) (make-class-field-accessor super id #f))
|
||||||
inherit-field-names)
|
inherit-field-names)
|
||||||
(map (lambda (id) (make-class-field-mutator super id))
|
(map (lambda (id) (make-class-field-mutator super id #f))
|
||||||
inherit-field-names))])
|
inherit-field-names))])
|
||||||
;; -- Reset field table to register accessor and mutator info --
|
;; -- Reset field table to register accessor and mutator info --
|
||||||
;; There are more accessors and mutators than public fields...
|
;; There are more accessors and mutators than public fields...
|
||||||
|
@ -2959,7 +2959,7 @@
|
||||||
(loop (wrapper-object-wrapped loop-object)))))))
|
(loop (wrapper-object-wrapped loop-object)))))))
|
||||||
|
|
||||||
|
|
||||||
(define (class-field-X who which cwhich class name)
|
(define (class-field-X who which cwhich class name proc-field-name)
|
||||||
(unless (class? class)
|
(unless (class? class)
|
||||||
(raise-type-error who "class" class))
|
(raise-type-error who "class" class))
|
||||||
(unless (symbol? name)
|
(unless (symbol? name)
|
||||||
|
@ -2969,17 +2969,17 @@
|
||||||
(obj-error who "no such field: ~a~a"
|
(obj-error who "no such field: ~a~a"
|
||||||
name
|
name
|
||||||
(for-class (class-name class)))))])
|
(for-class (class-name class)))))])
|
||||||
(which (cwhich (car p)) (cdr p) name)))
|
(which (cwhich (car p)) (cdr p) proc-field-name)))
|
||||||
|
|
||||||
(define (make-class-field-accessor class name)
|
(define (make-class-field-accessor class name keep-name?)
|
||||||
(class-field-X 'class-field-accessor
|
(class-field-X 'class-field-accessor
|
||||||
make-struct-field-accessor class-field-ref
|
make-struct-field-accessor class-field-ref
|
||||||
class name))
|
class name (and keep-name? name)))
|
||||||
|
|
||||||
(define (make-class-field-mutator class name)
|
(define (make-class-field-mutator class name keep-name?)
|
||||||
(class-field-X 'class-field-mutator
|
(class-field-X 'class-field-mutator
|
||||||
make-struct-field-mutator class-field-set!
|
make-struct-field-mutator class-field-set!
|
||||||
class name))
|
class name (and keep-name? name)))
|
||||||
|
|
||||||
(define-struct generic (name applicable))
|
(define-struct generic (name applicable))
|
||||||
|
|
||||||
|
@ -3060,7 +3060,7 @@
|
||||||
|
|
||||||
(define-syntaxes (class-field-accessor class-field-mutator generic/form)
|
(define-syntaxes (class-field-accessor class-field-mutator generic/form)
|
||||||
(let ([mk
|
(let ([mk
|
||||||
(lambda (make targets)
|
(lambda (make targets extra-args)
|
||||||
(lambda (stx)
|
(lambda (stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ class-expr name)
|
[(_ class-expr name)
|
||||||
|
@ -3072,8 +3072,9 @@
|
||||||
stx
|
stx
|
||||||
name))
|
name))
|
||||||
(with-syntax ([name (localize name)]
|
(with-syntax ([name (localize name)]
|
||||||
[make make])
|
[make make]
|
||||||
(syntax/loc stx (make class-expr `name))))]
|
[extra-args extra-args])
|
||||||
|
(syntax/loc stx (make class-expr `name . extra-args))))]
|
||||||
[(_ class-expr)
|
[(_ class-expr)
|
||||||
(raise-syntax-error
|
(raise-syntax-error
|
||||||
#f
|
#f
|
||||||
|
@ -3081,9 +3082,9 @@
|
||||||
targets)
|
targets)
|
||||||
stx)])))])
|
stx)])))])
|
||||||
(values
|
(values
|
||||||
(mk (quote-syntax make-class-field-accessor) "class")
|
(mk (quote-syntax make-class-field-accessor) "class" (list #'#t))
|
||||||
(mk (quote-syntax make-class-field-mutator) "class")
|
(mk (quote-syntax make-class-field-mutator) "class" (list #'#t))
|
||||||
(mk (quote-syntax make-generic/proc) "class or interface"))))
|
(mk (quote-syntax make-generic/proc) "class or interface" null))))
|
||||||
|
|
||||||
(define-syntax (class-field-accessor-traced stx)
|
(define-syntax (class-field-accessor-traced stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
|
|
|
@ -237,7 +237,8 @@ The result of @scheme[make-struct-type] is five values:
|
||||||
|
|
||||||
@defproc[(make-struct-field-accessor [accessor-proc struct-accessot-procedure?]
|
@defproc[(make-struct-field-accessor [accessor-proc struct-accessot-procedure?]
|
||||||
[field-pos exact-nonnegative-integer?]
|
[field-pos exact-nonnegative-integer?]
|
||||||
[field-name symbol?])
|
[field-name (or/c symbol? #f)
|
||||||
|
(symbol->string (format "field~a" field-pos))])
|
||||||
procedure?]{
|
procedure?]{
|
||||||
|
|
||||||
Returns a field accessor that is equivalent to @scheme[(lambda (s)
|
Returns a field accessor that is equivalent to @scheme[(lambda (s)
|
||||||
|
@ -245,13 +246,14 @@ Returns a field accessor that is equivalent to @scheme[(lambda (s)
|
||||||
an @tech{accessor} returned by @scheme[make-struct-type]. The name of the
|
an @tech{accessor} returned by @scheme[make-struct-type]. The name of the
|
||||||
resulting procedure for debugging purposes is derived from
|
resulting procedure for debugging purposes is derived from
|
||||||
@scheme[field-name] and the name of @scheme[accessor-proc]'s
|
@scheme[field-name] and the name of @scheme[accessor-proc]'s
|
||||||
structure type.
|
structure type if @scheme[field-name] is a symbol.
|
||||||
|
|
||||||
For examples, see @scheme[make-struct-type].}
|
For examples, see @scheme[make-struct-type].}
|
||||||
|
|
||||||
@defproc[(make-struct-field-mutator [mutator-proc struct-mutator-procedure?]
|
@defproc[(make-struct-field-mutator [mutator-proc struct-mutator-procedure?]
|
||||||
[field-pos exact-nonnegative-integer?]
|
[field-pos exact-nonnegative-integer?]
|
||||||
[field-name symbol?])
|
[field-name (or/c symbol? #f)
|
||||||
|
(symbol->string (format "field~a" field-pos))])
|
||||||
procedure?]{
|
procedure?]{
|
||||||
|
|
||||||
Returns a field mutator that is equivalent to @scheme[(lambda (s v)
|
Returns a field mutator that is equivalent to @scheme[(lambda (s v)
|
||||||
|
@ -259,7 +261,7 @@ Returns a field mutator that is equivalent to @scheme[(lambda (s v)
|
||||||
a @tech{mutator} returned by @scheme[make-struct-type]. The name of the
|
a @tech{mutator} returned by @scheme[make-struct-type]. The name of the
|
||||||
resulting procedure for debugging purposes is derived from
|
resulting procedure for debugging purposes is derived from
|
||||||
@scheme[field-name] and the name of @scheme[mutator-proc]'s
|
@scheme[field-name] and the name of @scheme[mutator-proc]'s
|
||||||
structure type.
|
structure type if @scheme[field-name] is a symbol.
|
||||||
|
|
||||||
For examples, see @scheme[make-struct-type].}
|
For examples, see @scheme[make-struct-type].}
|
||||||
|
|
||||||
|
|
|
@ -2863,12 +2863,13 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
|
||||||
|
|
||||||
if (reorder_ok) {
|
if (reorder_ok) {
|
||||||
if (no_call < 2) {
|
if (no_call < 2) {
|
||||||
generate(rator, jitter, 0, 0, JIT_V1); /* sync'd below */
|
generate(rator, jitter, 0, 0, JIT_V1); /* sync'd below, or not */
|
||||||
}
|
}
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
}
|
}
|
||||||
|
|
||||||
mz_rs_sync();
|
if (!no_call)
|
||||||
|
mz_rs_sync();
|
||||||
|
|
||||||
END_JIT_DATA(20);
|
END_JIT_DATA(20);
|
||||||
|
|
||||||
|
|
|
@ -2164,19 +2164,29 @@ static Scheme_Object *make_struct_field_xxor(const char *who, int getter,
|
||||||
pos = parse_pos(who, i, argv, argc);
|
pos = parse_pos(who, i, argv, argc);
|
||||||
|
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
if (!SCHEME_SYMBOLP(argv[2])) {
|
if (SCHEME_FALSEP(argv[2])) {
|
||||||
scheme_wrong_type(who, "symbol", 2, argc, argv);
|
fieldstr = NULL;
|
||||||
return NULL;
|
fieldstrlen = 0;
|
||||||
|
} else {
|
||||||
|
if (!SCHEME_SYMBOLP(argv[2])) {
|
||||||
|
scheme_wrong_type(who, "symbol or #f", 2, argc, argv);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
fieldstr = scheme_symbol_val(argv[2]);
|
||||||
|
fieldstrlen = SCHEME_SYM_LEN(argv[2]);
|
||||||
}
|
}
|
||||||
fieldstr = scheme_symbol_val(argv[2]);
|
|
||||||
fieldstrlen = SCHEME_SYM_LEN(argv[2]);
|
|
||||||
} else {
|
} else {
|
||||||
sprintf(digitbuf, "field%d", (int)SCHEME_INT_VAL(argv[1]));
|
sprintf(digitbuf, "field%d", (int)SCHEME_INT_VAL(argv[1]));
|
||||||
fieldstr = digitbuf;
|
fieldstr = digitbuf;
|
||||||
fieldstrlen = strlen(fieldstr);
|
fieldstrlen = strlen(fieldstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getter) {
|
if (!fieldstr) {
|
||||||
|
if (getter)
|
||||||
|
name = "accessor";
|
||||||
|
else
|
||||||
|
name = "mutator";
|
||||||
|
} else if (getter) {
|
||||||
name = (char *)GET_NAME((char *)i->struct_type->name, -1,
|
name = (char *)GET_NAME((char *)i->struct_type->name, -1,
|
||||||
fieldstr, fieldstrlen, 0);
|
fieldstr, fieldstrlen, 0);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user