[#3907] Obtaining mode information on an IO object — Jos Backus <jos@...>

The attached patch implements IO#mode. This method returns the mode the IO

17 messages 2004/12/06
[#3909] Re: [patch] Obtaining mode information on an IO object — nobu.nokada@... 2004/12/07

Hi,

[#3910] Re: [patch] Obtaining mode information on an IO object — Jos Backus <jos@...> 2004/12/07

On Tue, Dec 07, 2004 at 09:25:13AM +0900, nobu.nokada@softhome.net wrote:

[#3925] Re: [patch] Obtaining mode information on an IO object — James Britt <ruby@...> 2004/12/09

Jos Backus wrote:

[#4009] cgi.rb -- more GET/POST stuff — mde@...26.com

First of all, I think it would be great, as Eustaquio suggests, to

17 messages 2004/12/23
[#4016] Re: [PATCH] cgi.rb -- more GET/POST stuff — Francis Hwang <sera@...> 2004/12/24

GETs and POSTs are defined to be fairly different actions. I'd read

[#4027] Allowing custom number literal suffixes? — Florian Gro<florgro@...>

Moin!

35 messages 2004/12/27
[#4070] Re: Allowing custom number literal suffixes? — nobu.nokada@... 2005/01/02

Hi,

[#4072] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/02

[#4079] Re: Allowing custom number literal suffixes? — Florian Gro<florgro@...> 2005/01/03

Mathieu Bouchard wrote:

[#4081] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/03

[#4082] Re: Allowing custom number literal suffixes? — Florian Gro<florgro@...> 2005/01/03

Mathieu Bouchard wrote:

[#4084] Re: Allowing custom number literal suffixes? — Brent Roman <brent@...> 2005/01/04

I'm not sure I would advocate making Ruby's grammar even more

[#4086] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/04

[#4033] Garbage collection trouble — Christian Neukirchen <chneukirchen@...>

Hello,

13 messages 2004/12/27

Re: Allowing custom number literal suffixes?

From: Peter <Peter.Vanbroekhoven@...>
Date: 2004-12-27 15:42:26 UTC
List: ruby-core #4030
A version that works for 1.9 is attached. (With the one attached by 
Florian, two chunks fail because the context changed slightly btween 1.8.2 
and 1.9.)

Peter

On Mon, 27 Dec 2004, Florian Growrote:

> Moin!
>
> On the ruby-muse mailing list which is a place for discussion of new ideas 
> for Ruby there recently was a sub-thread concerning the introduction of 
> user-defined number literal suffixes. These suffixes are already used in 
> other languages and look like 1.5f or 0.6r. I think having these would be 
> nice for user-defined numeric Classes like Rational (currently these overload 
> 1/2 under mathn and other operations which can be a problem) and imaginary 
> numbers (via the Complex class). I think being able to write 0.5r instead of 
> the much longer Rational.reduce(1, 2), 2i instead of Complex.new(2, 1) or 
> 5.1b instead of BigDecimal.new("5.1") would be a nice thing that would not 
> have many downsides.
>
> Peter Vanbroekhoven was able to come up with a fairly simple and efficient 
> patch which I have reattached to this mail. With it applied you can write 
> 1.5x and it will call number_literal_x("1.5") and return the result.
>
> However I might be overlooking issues that are associated with this 
> enhancement and I know that having useless features leads to language bloat. 
> So what do the community and matz think about this? Would this be useful to 
> you?
>
> Thank you all in advance for feedback.
>
> Regards,
> Florian Gross
>
>

Attachments (1)

number-literal-patch2 (2.36 KB, text/plain)
--- eval.c	27 Dec 2004 14:56:58 -0000	1.1.1.1
+++ eval.c	27 Dec 2004 15:32:11 -0000	1.1.1.1.2.1
@@ -7545,6 +7545,13 @@
     ruby_safe_level = safe;
 }
 
+static VALUE
+rb_number_literal_f(obj, s)
+     VALUE obj, s;
+{
+    return rb_float_new(rb_str_to_dbl(s, Qfalse));
+}
+
 void
 Init_eval()
 {
@@ -7642,6 +7649,8 @@
     rb_global_variable(&trace_func);
 
     rb_define_virtual_variable("$SAFE", safe_getter, safe_setter);
+
+    rb_define_method(rb_mKernel, "number_literal_f", rb_number_literal_f, 1);
 }
 
 /*
--- parse.y	27 Dec 2004 14:57:53 -0000	1.1.1.1
+++ parse.y	27 Dec 2004 15:32:11 -0000	1.1.1.1.2.1
@@ -471,7 +471,7 @@
 	k__FILE__
 
 %token <id>   tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL
-%token <node> tINTEGER tFLOAT tSTRING_CONTENT
+%token <node> tINTEGER tFLOAT tSTRING_CONTENT tNUMBER_LITERAL
 %token <node> tNTH_REF tBACK_REF
 %token <num>  tREGEXP_END
 
@@ -3684,6 +3684,7 @@
 		;
 
 numeric         : tINTEGER
+                | tNUMBER_LITERAL
 		| tFLOAT
 		| tUMINUS_NUM tINTEGER	       %prec tLOWEST
 		    {
@@ -5908,6 +5909,19 @@
 
 	  decode_num:
 	    pushback(c);
+	    if (nondigit && ISALPHA(nondigit)) {
+	        c = nondigit;
+	    }
+	    if (ISALPHA(c)) {
+	        char name[17] = "number_literal_*";
+		name[15] = c;
+		NODE *str;
+	        tokfix();
+		str = NEW_LIST(NEW_STR(rb_str_new(tok(), toklen())));
+		nextc();
+		yylval.node = NEW_FCALL(rb_intern(name), str);
+		return tNUMBER_LITERAL;
+	    }
 	    tokfix();
 	    if (nondigit) {
 		char tmp[30];
--- ext/bigdecimal/bigdecimal.c	27 Dec 2004 15:01:59 -0000	1.1.1.1
+++ ext/bigdecimal/bigdecimal.c	27 Dec 2004 15:32:11 -0000	1.1.1.1.2.1
@@ -1217,6 +1217,19 @@
 }
 
 static VALUE
+rb_number_literal_b(obj, s)
+     VALUE obj, s;
+{
+    ENTER(5);
+    Real *pv;
+
+    SafeStringValue(s);
+    GUARD_OBJ(pv, VpCreateRbObject(0, RSTRING(s)->ptr));
+    
+    return ToValue(pv);
+}
+
+static VALUE
 BigDecimal_limit(int argc, VALUE *argv, VALUE self)
 {
     VALUE  nFig;
@@ -1346,6 +1359,8 @@
     rb_define_method(rb_cBigDecimal, "finite?",   BigDecimal_IsFinite, 0);
     rb_define_method(rb_cBigDecimal, "truncate",  BigDecimal_truncate, -1);
     rb_define_method(rb_cBigDecimal, "_dump", BigDecimal_dump, -1);
+
+    rb_define_method(rb_mKernel, "number_literal_b", rb_number_literal_b, 1);
 }
 
 /*

In This Thread