diff --git a/sources/dylan/integer.dylan b/sources/dylan/integer.dylan index 87f8c6abea..df06afb038 100644 --- a/sources/dylan/integer.dylan +++ b/sources/dylan/integer.dylan @@ -241,23 +241,23 @@ define method \^ end if end method \^; -define function logior (#rest integers) => (logior :: ) +define sealed method logior (#rest integers) => (logior :: ) reduce(binary-logior, 0, integers) -end function logior; +end method logior; -define function logxor (#rest integers) => (logxor :: ) +define sealed method logxor (#rest integers) => (logxor :: ) reduce(binary-logxor, 0, integers) -end function logxor; +end method logxor; -define function logand (#rest integers) => (logand :: ) +define sealed method logand (#rest integers) => (logand :: ) 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 :: , y :: ) => (result :: ) 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 :: ) => (result :: ) +define sealed inline method lognot (x :: ) => (result :: ) 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 :: ) +define sealed inline method logbit? (index :: , integer :: ) => (set? :: ) 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 :: , index :: , integer :: ) => (res :: ) @@ -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 :: , shift :: ) => (result :: ) +define sealed may-inline method ash (x :: , shift :: ) => (result :: ) 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 :: , shift :: ) => (result :: ) @@ -353,13 +353,13 @@ define inline function ash-left (x :: , shift :: ) interpret-machine-word-as-integer(tagged-result) end function ash-left; -define may-inline function lsh (x :: , shift :: ) => (result :: ) +define sealed may-inline method lsh (x :: , shift :: ) => (result :: ) 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 :: , shift :: ) => (result :: ) diff --git a/sources/dylan/number.dylan b/sources/dylan/number.dylan index e5958cb377..3cb33a5e97 100644 --- a/sources/dylan/number.dylan +++ b/sources/dylan/number.dylan @@ -27,9 +27,9 @@ define macro numeric-properties-predicate-definer { define numeric-properties-predicate ?:name (?domain:name) } => { define open generic ?name (x :: ) => (result :: ); define sealed domain ?name (?domain) } - // Default sealed domain to + // Default sealed domain to { define numeric-properties-predicate ?:name } - => { define numeric-properties-predicate ?name () } + => { define numeric-properties-predicate ?name () } end macro numeric-properties-predicate-definer; define numeric-properties-predicate zero?; @@ -47,56 +47,91 @@ define macro binary-arithmetic-function-definer => { define open generic ?name (x :: , y :: ) => (#rest values :: ); define sealed domain ?name (?domain1, ?domain2) } - // Default sealed domain to (, ) + // Default sealed domain to (, ) { define binary-arithmetic-function ?:name } - => { define binary-arithmetic-function ?name (, ) } + => { define binary-arithmetic-function ?name (, ) } end macro binary-arithmetic-function-definer; define binary-arithmetic-function \+; define binary-arithmetic-function \-; define binary-arithmetic-function \*; define binary-arithmetic-function \/; -define binary-arithmetic-function \^ (, ); +define binary-arithmetic-function \^ (, ); define macro unary-arithmetic-function-definer { define unary-arithmetic-function ?:name (?domain:name) } => { define open generic ?name (x :: ) => (#rest values :: ); define sealed domain ?name (?domain) } - // Default sealed domain to + // Default sealed domain to { define unary-arithmetic-function ?:name } - => { define unary-arithmetic-function ?name () } + => { define unary-arithmetic-function ?name () } end macro unary-arithmetic-function-definer; define unary-arithmetic-function negative; define unary-arithmetic-function abs; -define generic floor - (real :: ) => (result :: , remainder :: ); -define generic ceiling - (real :: ) => (result :: , remainder :: ); -define generic round - (real :: ) => (result :: , remainder :: ); -define generic truncate - (real :: ) => (result :: , remainder :: ); - -define generic floor/ - (real1 :: , real2 :: ) - => (result :: , remainder :: ); -define generic ceiling/ - (real1 :: , real2 :: ) - => (result :: , remainder :: ); -define generic round/ - (real1 :: , real2 :: ) - => (result :: , remainder :: ); -define generic truncate/ - (real1 :: , real2 :: ) - => (result :: , remainder :: ); - -define generic modulo - (real1 :: , real2 :: ) => (result :: ); -define generic remainder - (real1 :: , real2 :: ) => (result :: ); +define macro unary-division-function-definer + { define unary-division-function ?:name (?domain:name) } + => { define open generic ?name (real :: ) + => (result :: , remainder :: ); + define sealed domain ?name (?domain) } + // Default sealed domain to + { define unary-division-function ?:name } + => { define unary-division-function ?name () } +end macro unary-division-function-definer; + +define unary-division-function floor; +define unary-division-function ceiling; +define unary-division-function round; +define unary-division-function truncate; + +define macro binary-division-function-definer + { define binary-division-function ?:name (?domain1:name, ?domain2:name) } + => { define open generic ?name (real1 :: , real2 :: ) + => (#rest values :: ); + define sealed domain ?name (?domain1, ?domain2) } + // Default sealed domain to (, ) + { define binary-division-function ?:name } + => { define binary-division-function ?name (, ) } +end macro binary-division-function-definer; + +define binary-division-function floor/; +define binary-division-function ceiling/; +define binary-division-function round/; +define binary-division-function truncate/; +define binary-division-function modulo; +define binary-division-function remainder; + +define open generic ash (integer1 :: , count :: ) + => (#rest values :: ); +define sealed domain ash (); + +define open generic lsh (integer1 :: , count :: ) + => (#rest values :: ); +define sealed domain lsh (); + +define macro n-ary-logical-function-definer + { define n-ary-logical-function ?:name (?domain:name) } + => { define open generic ?name (#rest integers :: ) + => (#rest values :: ); + define sealed domain ?name (?domain) } + // Default sealed domain to () + { define n-ary-logical-function ?:name } + => { define n-ary-logical-function ?name () } +end macro n-ary-logical-function-definer; + +define n-ary-logical-function logior; +define n-ary-logical-function logxor; +define n-ary-logical-function logand; + +define open generic lognot (integer1 :: ) + => (#rest values :: ); +define sealed domain lognot (); + +define open generic logbit? (index :: , integer :: ) + => (#rest values :: ); +define sealed domain logbit? (, ); //// CONDITIONS