Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 158 lines (149 sloc) 3.663 kb
2a7794d @sj26 Ruby 1.9.3 p0
authored
1 /* -*-c-*-
2 THIS FILE WAS AUTOGENERATED BY tool/compile_prelude.rb. DO NOT EDIT.
3
4 sources: golf_prelude
5 */
6 #include "ruby/ruby.h"
7 #include "internal.h"
8 #include "vm_core.h"
9
10
11 static const char prelude_name0[] = "<internal:golf_prelude>";
12 static const char prelude_code0[] =
13 "class Object\n"
14 " @@golf_hash = {}\n"
15 " def method_missing m, *a, &b\n"
16 " t = @@golf_hash[ [m,self.class] ] ||= matching_methods(m)[0]\n"
17 " if t && b\n"
18 " __send__(t, *a) {|*args|\n"
19 " b.binding.eval(\"proc{|golf_matchdata| $~ = golf_matchdata }\").call($~) if $~\n"
20 " b.call(*args)\n"
21 " }\n"
22 " else\n"
23 " t ? __send__(t, *a, &b) : super\n"
24 " end\n"
25 " end\n"
26 "\n"
27 " def matching_methods(s='', m=callable_methods)\n"
28 " r=/^#{s.to_s.gsub(/./){\"(.*?)\"+Regexp.escape($&)}}/\n"
29 " m.grep(r).sort_by do |i|\n"
30 " i.to_s.match(r).captures.map(&:size) << i\n"
31 " end\n"
32 " end\n"
33 "\n"
34 " def self.const_missing c\n"
35 " t = @@golf_hash[ [c,self.class] ] ||= matching_methods(c,constants)[0]\n"
36 " t and return const_get(t)\n"
37 " raise NameError, \"uninitialized constant #{c}\", caller(1)\n"
38 " end\n"
39 "\n"
40 " def shortest_abbreviation(s='', m=callable_methods)\n"
41 " s=s.to_s\n"
42 " our_case = (?A..?Z)===s[0]\n"
43 " if m.index(s.to_sym)\n"
44 " 1.upto(s.size){|z|s.scan(/./).combination(z).map{|trial|\n"
45 " next unless ((?A..?Z)===trial[0]) == our_case\n"
46 " trial*=''\n"
47 " return trial if matching_methods(trial,m)[0].to_s==s\n"
48 " }}\n"
49 " else\n"
50 " nil\n"
51 " end\n"
52 " end\n"
53 "\n"
54 " def callable_methods\n"
55 " self.class == Object ? methods + private_methods : methods\n"
56 " end\n"
57 "\n"
58 " private\n"
59 "\n"
60 " def h(a='H', b='w', c='!')\n"
61 " puts \"#{a}ello, #{b}orld#{c}\"\n"
62 " end\n"
63 "\n"
64 " alias say puts\n"
65 "\n"
66 " def do_while\n"
67 " 0 while yield\n"
68 " end\n"
69 "\n"
70 " def do_until\n"
71 " 0 until yield\n"
72 " end\n"
73 "end\n"
74 "\n"
75 "class Array\n"
76 " alias old_to_s to_s\n"
77 " alias to_s join\n"
78 "end\n"
79 "\n"
80 "class FalseClass\n"
81 " alias old_to_s to_s\n"
82 " def to_s\n"
83 " \"\"\n"
84 " end\n"
85 "end\n"
86 "\n"
87 "class Integer\n"
88 " alias each times\n"
89 " include Enumerable\n"
90 "end\n"
91 "\n"
92 "class String\n"
93 " alias / split\n"
94 "\n"
95 " def to_a\n"
96 " split('')\n"
97 " end\n"
98 "\n"
99 " (Array.instance_methods-instance_methods-[:to_ary,:transpose,:flatten,:flatten!,:compact,:compact!,:assoc,:rassoc]).each{|meth|\n"
100 " eval\"\n"
101 " def #{meth}(*args, &block)\n"
102 " a=to_a\n"
103 " result = a.#{meth}(*args, &block)\n"
104 " replace(a.join)\n"
105 " if result.class == Array\n"
106 " Integer===result[0] ? result.pack('c*') : result.join\n"
107 " elsif result.class == Enumerator\n"
108 " result.map(&:join).to_enum\n"
109 " else\n"
110 " result\n"
111 " end\n"
112 " end\"\n"
113 " }\n"
114 "end\n"
115 "\n"
116 "class Enumerator\n"
117 " alias old_to_s to_s\n"
118 " (Array.instance_methods-instance_methods-[:replace]+[:to_s]).each{|meth|\n"
119 " eval\"\n"
120 " def #{meth}(*args, &block)\n"
121 " to_a.#{meth}(*args, &block)\n"
122 " end\"\n"
123 " }\n"
124 " alias old_inspect inspect\n"
125 " alias inspect old_to_s\n"
126 "end\n"
127 "\n"
128 "class Symbol\n"
129 " def call(*args, &block)\n"
130 " proc do |recv|\n"
131 " recv.__send__(self, *args, &block)\n"
132 " end\n"
133 " end\n"
134 "end\n"
135 ;
136
137 #define PRELUDE_COUNT 0
138
139
140 static void
141 prelude_eval(VALUE code, VALUE name, VALUE line)
142 {
143 rb_iseq_eval(rb_iseq_compile_with_option(code, name, Qnil, line, Qtrue));
144 }
145
146 void
147 Init_golf(void)
148 {
149 prelude_eval(
150 rb_usascii_str_new(prelude_code0, sizeof(prelude_code0) - 1),
151 rb_usascii_str_new(prelude_name0, sizeof(prelude_name0) - 1),
152 INT2FIX(1));
153
154 #if 0
155 puts(prelude_code0);
156 #endif
157 }
Something went wrong with that request. Please try again.