Skip to content

Commit

Permalink
* ext/tk/lib/tk.rb (TkCore::chooseDirectory): back up wrongly
Browse files Browse the repository at this point in the history
  removed method.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
matz committed Jul 26, 2003
1 parent 472efdf commit f0b77b0
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 87 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Expand Up @@ -7,6 +7,11 @@ Sat Jul 26 21:25:21 2003 NAKAMURA Usaku <usa@ruby-lang.org>

* win32/win32.c: remove some old comments.

Sat Jul 26 14:26:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>

* ext/tk/lib/tk.rb (TkCore::chooseDirectory): back up wrongly
removed method.

Sat Jul 26 14:14:12 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>

* ext/stringio/stringio.c: includes Enumerable as well as IO.
Expand Down
2 changes: 1 addition & 1 deletion configure.in
Expand Up @@ -750,7 +750,7 @@ if test "$with_dln_a_out" != yes; then
esac
else
case "$target_os" in
hpux*) CCDLFLAGS='+z';;
hpux*) CCDLFLAGS='+Z';;
solaris*|irix*) CCDLFLAGS='-KPIC' ;;
sunos*) CCDLFLAGS='-PIC' ;;
esix*|uxpds*) CCDLFLAGS='-KPIC' ;;
Expand Down
2 changes: 1 addition & 1 deletion ext/digest/sha2/sha2.c
Expand Up @@ -67,7 +67,7 @@ typedef uint8_t sha2_byte; /* Exactly 1 byte */
typedef uint32_t sha2_word32; /* Exactly 4 bytes */
typedef uint64_t sha2_word64; /* Exactly 8 bytes */

#if defined(__GNUC__)
#if defined(__GNUC__) || defined(_HPUX_SOURCE)
#define ULL(number) number##ULL
#else
#define ULL(number) (uint64_t)(number)
Expand Down
7 changes: 4 additions & 3 deletions ext/readline/readline.c
Expand Up @@ -3,15 +3,16 @@

#include <errno.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <readline/readline.h>
#include <readline/history.h>

#include "ruby.h"
#include "rubysig.h"

#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

static VALUE mReadline;

#define TOLOWER(c) (isupper(c) ? tolower(c) : c)
Expand Down
194 changes: 112 additions & 82 deletions lib/complex.rb
Expand Up @@ -21,7 +21,8 @@
#
# The following +Math+ module methods are redefined to handle Complex arguments.
# They will work as normal with non-Complex arguments.
# sqrt exp cos sin tan log log10 atan2
# sqrt exp cos sin tan log log10
# cosh sinh tanh acos asin atan atan2 acosh asinh atanh
#


Expand Down Expand Up @@ -66,7 +67,6 @@ def Complex.polar(r, theta)
Complex(r*Math.cos(theta), r*Math.sin(theta))
end

private_class_method :new
#
# Creates a +Complex+ number <tt>a</tt>+<tt>b</tt><i>i</i>.
#
Expand All @@ -76,7 +76,9 @@ def Complex.new!(a, b=0)

def initialize(a, b)
raise "non numeric 1st arg `#{a.inspect}'" if !a.kind_of? Numeric
raise "`#{a.inspect}' for 1st arg" if a.kind_of? Complex
raise "non numeric 2nd arg `#{b.inspect}'" if !b.kind_of? Numeric
raise "`#{b.inspect}' for 2nd arg" if b.kind_of? Complex
@real = a
@image = b
end
Expand Down Expand Up @@ -181,7 +183,7 @@ def ** (other)
end
elsif Complex.generic?(other)
r, theta = polar
Complex.polar(r.power!(other), theta * other)
Complex.polar(r**other, theta*other)
else
x, y = other.coerce(self)
x**y
Expand Down Expand Up @@ -236,8 +238,9 @@ def abs2
# Argument (angle from (1,0) on the complex plane).
#
def arg
Math.atan2(@image.to_f, @real.to_f)
Math.atan2!(@image, @real)
end
alias angle arg

#
# Returns the absolute value _and_ the argument.
Expand All @@ -252,6 +255,7 @@ def polar
def conjugate
Complex(@real, -@image)
end
alias conj conjugate

#
# Compares the absolute values of the two numbers.
Expand Down Expand Up @@ -395,6 +399,7 @@ def arg
return Math::PI
end
end
alias angle arg

#
# See Complex#polar.
Expand All @@ -409,46 +414,28 @@ def polar
def conjugate
self
end
alias conj conjugate
end


class Fixnum
unless defined? 1.power!
alias power! **
end

# Redefined to handle a Complex argument.
def ** (other)
if self < 0
Complex.new!(self, 0) ** other
else
if defined? self.rpower
self.rpower(other)
else
self.power!(other)
end
end
end
end

class Bignum
alias power! **
end

class Float
alias power! **
end

module Math
alias sqrt! sqrt
alias exp! exp
alias log! log
alias log10! log10
alias cos! cos
alias sin! sin
alias tan! tan
alias log! log
alias atan! atan
alias log10! log10
alias cosh! cosh
alias sinh! sinh
alias tanh! tanh
alias acos! acos
alias asin! asin
alias atan! atan
alias atan2! atan2
alias acosh! acosh
alias asinh! asinh
alias atanh! atanh

# Redefined to handle a Complex argument.
def sqrt(z)
Expand Down Expand Up @@ -478,20 +465,6 @@ def exp(z)
end
end

#
# Hyperbolic cosine.
#
def cosh!(x)
(exp!(x) + exp!(-x))/2.0
end

#
# Hyperbolic sine.
#
def sinh!(x)
(exp!(x) - exp!(-x))/2.0
end

# Redefined to handle a Complex argument.
def cos(z)
if Complex.generic?(z)
Expand Down Expand Up @@ -520,6 +493,30 @@ def tan(z)
sin(z)/cos(z)
end
end

def sinh(z)
if Complex.generic?(z)
sinh!(z)
else
Complex( sinh!(z.real)*cos!(z.image), cosh!(z.real)*sin!(z.image) )
end
end

def cosh(z)
if Complex.generic?(z)
cosh!(z)
else
Complex( cosh!(z.real)*cos!(z.image), sinh!(z.real)*sin!(z.image) )
end
end

def tanh(z)
if Complex.generic?(z)
tanh!(z)
else
sinh(z)/cosh(z)
end
end

# Redefined to handle a Complex argument.
def log(z)
Expand All @@ -539,69 +536,102 @@ def log10(z)
log(z)/log!(10)
end
end

# FIXME: I don't know what the point of this is. If you give it Complex
# arguments, it will fail.
def atan2(x, y)
if Complex.generic?(x) and Complex.generic?(y)
atan2!(x, y)

def acos(z)
if Complex.generic?(z)
acos!(z)
else
fail "Not yet implemented."
-1.0.im * log( z + 1.0.im * sqrt(1.0-z*z) )
end
end

#
# Hyperbolic arctangent.
#
def atanh!(x)
log((1.0 + x.to_f) / ( 1.0 - x.to_f)) / 2.0

def asin(z)
if Complex.generic?(z)
asin!(z)
else
-1.0.im * log( 1.0.im * z + sqrt(1.0-z*z) )
end
end

# Redefined to handle a Complex argument.

def atan(z)
if Complex.generic?(z)
atan2!(z, 1)
elsif z.image == 0
atan2(z.real,1)
atan!(z)
else
a = z.real
b = z.image

c = (a*a + b*b - 1.0)
d = (a*a + b*b + 1.0)
1.0.im * log( (1.0.im+z) / (1.0.im-z) ) / 2.0
end
end

Complex(atan2!((c + sqrt(c*c + 4.0*a*a)), 2.0*a),
atanh!((-d + sqrt(d*d - 4.0*b*b))/(2.0*b)))
def atan2(y,x)
if Complex.generic?(y) and Complex.generic?(x)
atan2!(y,x)
else
-1.0.im * log( (x+1.0.im*y) / sqrt(x*x+y*y) )
end
end

module_function :sqrt

def acosh(z)
if Complex.generic?(z)
acosh!(z)
else
log( z + sqrt(z*z-1.0) )
end
end

def asinh(z)
if Complex.generic?(z)
asinh!(z)
else
log( z + sqrt(1.0+z*z) )
end
end

def atanh(z)
if Complex.generic?(z)
atanh!(z)
else
log( (1.0+z) / (1.0-z) ) / 2.0
end
end

module_function :sqrt!
module_function :sqrt
module_function :exp!
module_function :exp
module_function :log!
module_function :log
module_function :log10!
module_function :log10
module_function :cosh!
module_function :cosh
module_function :cos!
module_function :cos
module_function :sinh!
module_function :sinh
module_function :sin!
module_function :sin
module_function :tan!
module_function :tan
module_function :log!
module_function :log
module_function :log10!
module_function :log
module_function :tanh!
module_function :tanh
module_function :acos!
module_function :acos
module_function :asin!
module_function :asin
module_function :atan!
module_function :atan
module_function :atan2!
module_function :atan2
# module_function :atan!
module_function :atan
module_function :acosh!
module_function :acosh
module_function :asinh!
module_function :asinh
module_function :atanh!
module_function :atanh

end

# Documentation comments:
# - source: original (researched from pickaxe)
# - a couple of fixme's
# - Math module methods sinh! etc. a bit fuzzy. What exactly is the intention?
# - RDoc output for Bignum etc. is a bit short, with nothing but an
# (undocumented) alias. No big deal.

0 comments on commit f0b77b0

Please sign in to comment.