-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Numbers redesign #1006
base: master
Are you sure you want to change the base?
Numbers redesign #1006
Changes from all commits
59c72b5
afc4e4a
2b15182
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -241,23 +241,23 @@ define method \^ | |
end if | ||
end method \^; | ||
|
||
define function logior (#rest integers) => (logior :: <integer>) | ||
define sealed method logior (#rest integers) => (logior :: <integer>) | ||
reduce(binary-logior, 0, integers) | ||
end function logior; | ||
end method logior; | ||
|
||
define function logxor (#rest integers) => (logxor :: <integer>) | ||
define sealed method logxor (#rest integers) => (logxor :: <integer>) | ||
reduce(binary-logxor, 0, integers) | ||
end function logxor; | ||
end method logxor; | ||
|
||
define function logand (#rest integers) => (logand :: <integer>) | ||
define sealed method logand (#rest integers) => (logand :: <integer>) | ||
reduce(binary-logand, -1, integers) | ||
end function logand; | ||
end method logand; | ||
|
||
// TODO: These can't be inline-only until reduce is inlined. | ||
|
||
define macro integer-binary-logical-definer | ||
{ define integer-binary-logical ?:name ?lowlevel:name ?tagger:name } | ||
=> { define inline /* -only */ function ?name | ||
=> { define sealed inline /* -only */ method ?name | ||
(x :: <integer>, y :: <integer>) | ||
=> (result :: <integer>) | ||
let mx = interpret-integer-as-machine-word(x); | ||
|
@@ -272,16 +272,16 @@ define integer-binary-logical binary-logior machine-word-logior identity; | |
define integer-binary-logical binary-logand machine-word-logand identity; | ||
define integer-binary-logical binary-logxor machine-word-logxor force-integer-tag; | ||
|
||
define inline function lognot (x :: <integer>) => (result :: <integer>) | ||
define sealed inline method lognot (x :: <integer>) => (result :: <integer>) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since this is a method now and not a function, should we explicitly specify a generic for it? (This also goes for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok |
||
let mw = interpret-integer-as-machine-word(x); | ||
interpret-machine-word-as-integer(force-integer-tag(machine-word-lognot(mw))) | ||
end function lognot; | ||
end method lognot; | ||
|
||
define inline function logbit? (index :: <integer>, integer :: <integer>) | ||
define sealed inline method logbit? (index :: <integer>, integer :: <integer>) | ||
=> (set? :: <boolean>) | ||
machine-word-logbit? | ||
(as-offset-for-tagged-integer(index), interpret-integer-as-machine-word(integer)) | ||
end function logbit?; | ||
end method logbit?; | ||
|
||
define inline function logbit-deposit | ||
(z :: <boolean>, index :: <integer>, integer :: <integer>) => (res :: <integer>) | ||
|
@@ -315,13 +315,13 @@ define inline function bit-field-deposit | |
interpret-integer-as-machine-word(x))) | ||
end function bit-field-deposit; | ||
|
||
define may-inline function ash (x :: <integer>, shift :: <integer>) => (result :: <integer>) | ||
define sealed may-inline method ash (x :: <integer>, shift :: <integer>) => (result :: <integer>) | ||
if (negative?(shift)) | ||
ash-right(x, -shift) | ||
else | ||
ash-left(x, shift) | ||
end | ||
end function ash; | ||
end method ash; | ||
|
||
define inline function ash-right (x :: <integer>, shift :: <integer>) | ||
=> (result :: <integer>) | ||
|
@@ -353,13 +353,13 @@ define inline function ash-left (x :: <integer>, shift :: <integer>) | |
interpret-machine-word-as-integer(tagged-result) | ||
end function ash-left; | ||
|
||
define may-inline function lsh (x :: <integer>, shift :: <integer>) => (result :: <integer>) | ||
define sealed may-inline method lsh (x :: <integer>, shift :: <integer>) => (result :: <integer>) | ||
if (negative?(shift)) | ||
lsh-right(x, -shift) | ||
else | ||
lsh-left(x, shift) | ||
end | ||
end function lsh; | ||
end method lsh; | ||
|
||
define inline function lsh-right (x :: <integer>, shift :: <integer>) | ||
=> (result :: <integer>) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Converting
logior
(andlogxor
andlogand
) tosealed method
won't change anything, since they have no required arguments, so there is no dispatch happening.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good