mix-language 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/mix-compile +26 -0
- data/lib/javascript/base/array.js +496 -0
- data/lib/javascript/base/env.js +83 -0
- data/lib/javascript/base/eval.js +419 -0
- data/lib/javascript/base/false.js +23 -0
- data/lib/javascript/base/function.js +95 -0
- data/lib/javascript/base/null.js +23 -0
- data/lib/javascript/base/number.js +251 -0
- data/lib/javascript/base/object.js +299 -0
- data/lib/javascript/base/string.js +75 -0
- data/lib/javascript/base/true.js +23 -0
- data/lib/javascript/dom/div.js +11 -0
- data/lib/javascript/dom/drag.js +211 -0
- data/lib/javascript/dom/element.js +307 -0
- data/lib/javascript/dom/event.js +113 -0
- data/lib/javascript/dom/mouse.js +16 -0
- data/lib/javascript/dom/table.js +11 -0
- data/lib/javascript/dom/td.js +18 -0
- data/lib/javascript/dom/text.js +73 -0
- data/lib/javascript/dom/tr.js +11 -0
- data/lib/ruby/compiler.rb +528 -0
- data/lib/ruby/mix.grammar +238 -0
- data/lib/ruby/mix.tab.rb +1396 -0
- metadata +78 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright © 2011 Jesse Sielaff
|
3
|
+
*/
|
4
|
+
|
5
|
+
var NUMBER =
|
6
|
+
{
|
7
|
+
functions: {}
|
8
|
+
};
|
9
|
+
|
10
|
+
copy_functions(NUMBER, OBJECT);
|
11
|
+
|
12
|
+
function new_number (value)
|
13
|
+
{
|
14
|
+
var number =
|
15
|
+
{
|
16
|
+
object_type: NUMBER_TYPE,
|
17
|
+
functions: {},
|
18
|
+
data: {},
|
19
|
+
keys: [],
|
20
|
+
unknown: Object_bad_key,
|
21
|
+
value: value
|
22
|
+
};
|
23
|
+
|
24
|
+
copy_functions(number, NUMBER);
|
25
|
+
|
26
|
+
return number;
|
27
|
+
}
|
28
|
+
|
29
|
+
function cmp_number (a, b)
|
30
|
+
{
|
31
|
+
return (a === b) ? 0 : (a > b) ? 1 : -1;
|
32
|
+
}
|
33
|
+
|
34
|
+
function Number_div (self, args)
|
35
|
+
{
|
36
|
+
var num = args[0];
|
37
|
+
|
38
|
+
if (xself(self, NUMBER_TYPE, "#div") || xarg(num, NUMBER_TYPE, "Number#div", "number"))
|
39
|
+
{
|
40
|
+
return NULL;
|
41
|
+
}
|
42
|
+
|
43
|
+
return new_number(self.value / num.value);
|
44
|
+
}
|
45
|
+
|
46
|
+
function Number_gt (self, args)
|
47
|
+
{
|
48
|
+
var num = args[0];
|
49
|
+
|
50
|
+
if (xself(self, NUMBER_TYPE, "#gt") || xarg(num, NUMBER_TYPE, "Number#gt", "number"))
|
51
|
+
{
|
52
|
+
return NULL;
|
53
|
+
}
|
54
|
+
|
55
|
+
var a = self.value;
|
56
|
+
var b = num.value;
|
57
|
+
|
58
|
+
return (cmp_number(a, b) === 1) ? TRUE : FALSE;
|
59
|
+
}
|
60
|
+
|
61
|
+
function Number_gteq (self, args)
|
62
|
+
{
|
63
|
+
var num = args[0];
|
64
|
+
|
65
|
+
if (xself(self, NUMBER_TYPE, "#gteq") || xarg(num, NUMBER_TYPE, "Number#gteq", "number"))
|
66
|
+
{
|
67
|
+
return NULL;
|
68
|
+
}
|
69
|
+
|
70
|
+
var a = self.value;
|
71
|
+
var b = num.value;
|
72
|
+
|
73
|
+
return (cmp_number(a, b) !== -1) ? TRUE : FALSE;
|
74
|
+
}
|
75
|
+
|
76
|
+
function Number_lt (self, args)
|
77
|
+
{
|
78
|
+
var num = args[0];
|
79
|
+
|
80
|
+
if (xself(self, NUMBER_TYPE, "#lt") || xarg(num, NUMBER_TYPE, "Number#lt", "number"))
|
81
|
+
{
|
82
|
+
return NULL;
|
83
|
+
}
|
84
|
+
|
85
|
+
var a = self.value;
|
86
|
+
var b = num.value;
|
87
|
+
|
88
|
+
return (cmp_number(a, b) === -1) ? TRUE : FALSE;
|
89
|
+
}
|
90
|
+
|
91
|
+
function Number_lteq (self, args)
|
92
|
+
{
|
93
|
+
var num = args[0];
|
94
|
+
|
95
|
+
if (xself(self, NUMBER_TYPE, "#lteq") || xarg(num, NUMBER_TYPE, "Number#lteq", "number"))
|
96
|
+
{
|
97
|
+
return NULL;
|
98
|
+
}
|
99
|
+
|
100
|
+
var a = self.value;
|
101
|
+
var b = num.value;
|
102
|
+
|
103
|
+
return (cmp_number(a, b) !== 1) ? TRUE : FALSE;
|
104
|
+
}
|
105
|
+
|
106
|
+
function Number_minus (self, args)
|
107
|
+
{
|
108
|
+
var num = args[0];
|
109
|
+
|
110
|
+
if (xself(self, NUMBER_TYPE, "#minus") || xarg(num, NUMBER_TYPE, "Number#minus", "number"))
|
111
|
+
{
|
112
|
+
return NULL;
|
113
|
+
}
|
114
|
+
|
115
|
+
return new_number(self.value - num.value);
|
116
|
+
}
|
117
|
+
|
118
|
+
function Number_mod (self, args)
|
119
|
+
{
|
120
|
+
var num = args[0];
|
121
|
+
|
122
|
+
if (xself(self, NUMBER_TYPE, "#mod") || xarg(num, NUMBER_TYPE, "Number#mod", "number"))
|
123
|
+
{
|
124
|
+
return NULL;
|
125
|
+
}
|
126
|
+
|
127
|
+
return new_number(self.value % num.value);
|
128
|
+
}
|
129
|
+
|
130
|
+
function Number_plus (self, args)
|
131
|
+
{
|
132
|
+
var num = args[0];
|
133
|
+
|
134
|
+
if (xself(self, NUMBER_TYPE, "#plus") || xarg(num, NUMBER_TYPE, "Number#plus", "number"))
|
135
|
+
{
|
136
|
+
return NULL;
|
137
|
+
}
|
138
|
+
|
139
|
+
return new_number(self.value + num.value);
|
140
|
+
}
|
141
|
+
|
142
|
+
function Number_mul (self, args)
|
143
|
+
{
|
144
|
+
var num = args[0];
|
145
|
+
|
146
|
+
if (xself(self, NUMBER_TYPE, "#mul") || xarg(num, NUMBER_TYPE, "Number#mul", "number"))
|
147
|
+
{
|
148
|
+
return NULL;
|
149
|
+
}
|
150
|
+
|
151
|
+
return new_number(self.value * num.value);
|
152
|
+
}
|
153
|
+
|
154
|
+
function Number_stringify (self, args)
|
155
|
+
{
|
156
|
+
if (xself(self, NUMBER_TYPE, "#stringify"))
|
157
|
+
{
|
158
|
+
return NULL;
|
159
|
+
}
|
160
|
+
|
161
|
+
return new_string('' + self.value);
|
162
|
+
}
|
163
|
+
|
164
|
+
function Number_times (self, args)
|
165
|
+
{
|
166
|
+
var func = args[0];
|
167
|
+
|
168
|
+
if (xself(self, NUMBER_TYPE, "#times") || xarg(func, FUNCTION_TYPE, "Number#times", "function"))
|
169
|
+
{
|
170
|
+
return self;
|
171
|
+
}
|
172
|
+
|
173
|
+
var n = self.value;
|
174
|
+
var body = func.value;
|
175
|
+
var bound = func.bound;
|
176
|
+
|
177
|
+
for (var i = 0; i < n; ++i)
|
178
|
+
{
|
179
|
+
ITERATING += 1;
|
180
|
+
body(bound, [new_number(i)]);
|
181
|
+
ITERATING -= 1;
|
182
|
+
|
183
|
+
if (BREAK_VALUE)
|
184
|
+
{
|
185
|
+
var result = BREAK_VALUE;
|
186
|
+
|
187
|
+
BREAK_VALUE = null;
|
188
|
+
return result;
|
189
|
+
}
|
190
|
+
else if (RETURN_VALUE)
|
191
|
+
{
|
192
|
+
RETURN_VALUE = null;
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
return self;
|
197
|
+
}
|
198
|
+
|
199
|
+
function Number_upto (self, args)
|
200
|
+
{
|
201
|
+
var num = args[0];
|
202
|
+
var func = args[1];
|
203
|
+
|
204
|
+
if (xself(self, NUMBER_TYPE, "#upto") || xarg(num, NUMBER_TYPE, "Number#upto", "number") || xarg(func, FUNCTION_TYPE, "Number#upto", "function"))
|
205
|
+
{
|
206
|
+
return self;
|
207
|
+
}
|
208
|
+
|
209
|
+
var start = self.value;
|
210
|
+
var end = num.value;
|
211
|
+
var body = func.value;
|
212
|
+
var bound = func.bound;
|
213
|
+
|
214
|
+
for (var i = start; i <= end; ++i)
|
215
|
+
{
|
216
|
+
ITERATING += 1;
|
217
|
+
body(bound, [new_number(i)]);
|
218
|
+
ITERATING -= 1;
|
219
|
+
|
220
|
+
if (BREAK_VALUE)
|
221
|
+
{
|
222
|
+
var result = BREAK_VALUE;
|
223
|
+
|
224
|
+
BREAK_VALUE = null;
|
225
|
+
return result;
|
226
|
+
}
|
227
|
+
else if (RETURN_VALUE)
|
228
|
+
{
|
229
|
+
RETURN_VALUE = null;
|
230
|
+
}
|
231
|
+
}
|
232
|
+
|
233
|
+
return self;
|
234
|
+
}
|
235
|
+
|
236
|
+
add_function(NUMBER, 'div', Number_div, ['number']);
|
237
|
+
add_function(NUMBER, 'inspect', Number_stringify, []);
|
238
|
+
add_function(NUMBER, 'gt', Number_gt, ['number']);
|
239
|
+
add_function(NUMBER, 'gteq', Number_gteq, ['number']);
|
240
|
+
add_function(NUMBER, 'lt', Number_lt, ['number']);
|
241
|
+
add_function(NUMBER, 'lteq', Number_lteq, ['number']);
|
242
|
+
add_function(NUMBER, 'minus', Number_minus, ['number']);
|
243
|
+
add_function(NUMBER, 'mod', Number_mod, ['number']);
|
244
|
+
add_function(NUMBER, 'mul', Number_mul, ['number']);
|
245
|
+
add_function(NUMBER, 'percent', Number_mod, ['number']);
|
246
|
+
add_function(NUMBER, 'plus', Number_plus, ['number']);
|
247
|
+
add_function(NUMBER, 'slash', Number_div, ['number']);
|
248
|
+
add_function(NUMBER, 'star', Number_mul, ['number']);
|
249
|
+
add_function(NUMBER, 'stringify', Number_stringify, []);
|
250
|
+
add_function(NUMBER, 'times', Number_times, ['function']);
|
251
|
+
add_function(NUMBER, 'upto', Number_upto, ['number','function']);
|
@@ -0,0 +1,299 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright © 2011 Jesse Sielaff
|
3
|
+
*/
|
4
|
+
|
5
|
+
var OBJECT =
|
6
|
+
{
|
7
|
+
functions: {}
|
8
|
+
};
|
9
|
+
|
10
|
+
function new_object (fields, keys)
|
11
|
+
{
|
12
|
+
var obj =
|
13
|
+
{
|
14
|
+
object_type: OBJECT_TYPE,
|
15
|
+
functions: {},
|
16
|
+
data: fields,
|
17
|
+
keys: keys,
|
18
|
+
unknown: Object_bad_key,
|
19
|
+
value: {}
|
20
|
+
};
|
21
|
+
|
22
|
+
copy_functions(obj, OBJECT);
|
23
|
+
|
24
|
+
return obj;
|
25
|
+
}
|
26
|
+
|
27
|
+
function Object_alert (self, args)
|
28
|
+
{
|
29
|
+
var str = call_function(self, 'stringify', []);
|
30
|
+
|
31
|
+
alert(str.value);
|
32
|
+
|
33
|
+
return self;
|
34
|
+
}
|
35
|
+
|
36
|
+
function Object_bad_key (self, args)
|
37
|
+
{
|
38
|
+
var str = args[0];
|
39
|
+
|
40
|
+
xarg(str, STRING_TYPE, "#get", "string");
|
41
|
+
return NULL;
|
42
|
+
}
|
43
|
+
|
44
|
+
function Object_cancel (self, args)
|
45
|
+
{
|
46
|
+
var ids = self.timeout_ids;
|
47
|
+
|
48
|
+
if (ids)
|
49
|
+
{
|
50
|
+
for (var i = 0, l = ids.length; i < l; ++i)
|
51
|
+
{
|
52
|
+
clearTimeout(ids[i]);
|
53
|
+
}
|
54
|
+
|
55
|
+
delete self.timeout_ids;
|
56
|
+
}
|
57
|
+
|
58
|
+
return self;
|
59
|
+
}
|
60
|
+
|
61
|
+
function Object_eq (self, args)
|
62
|
+
{
|
63
|
+
var obj = args[0];
|
64
|
+
|
65
|
+
if (xarg(obj, null, "#eq", "an"))
|
66
|
+
{
|
67
|
+
return NULL;
|
68
|
+
}
|
69
|
+
|
70
|
+
if (obj.object_type !== self.object_type)
|
71
|
+
{
|
72
|
+
return FALSE;
|
73
|
+
}
|
74
|
+
|
75
|
+
return (self.value === obj.value) ? TRUE : FALSE;
|
76
|
+
}
|
77
|
+
|
78
|
+
function Object_every (self, args)
|
79
|
+
{
|
80
|
+
var num = args[0];
|
81
|
+
var func = args[1];
|
82
|
+
|
83
|
+
if (xarg(num, NUMBER_TYPE, "#every", "number") || xarg(func, FUNCTION_TYPE, "#every", "function"))
|
84
|
+
{
|
85
|
+
return self;
|
86
|
+
}
|
87
|
+
|
88
|
+
var body = func.value;
|
89
|
+
var bound = func.bound;
|
90
|
+
var t = num.value;
|
91
|
+
|
92
|
+
if (!self.interval_ids)
|
93
|
+
{
|
94
|
+
self.interval_ids = [];
|
95
|
+
}
|
96
|
+
|
97
|
+
self.interval_ids.push(setInterval(function () { body(bound, [self]) }, t));
|
98
|
+
|
99
|
+
return self;
|
100
|
+
}
|
101
|
+
|
102
|
+
function Object_fnames (self, args)
|
103
|
+
{
|
104
|
+
var fnames = [];
|
105
|
+
|
106
|
+
for (var fname in self.functions)
|
107
|
+
{
|
108
|
+
fnames.push(new_string(fname));
|
109
|
+
}
|
110
|
+
|
111
|
+
return new_array(fnames.sort());
|
112
|
+
}
|
113
|
+
|
114
|
+
function Object_get (self, args)
|
115
|
+
{
|
116
|
+
var str = args[0];
|
117
|
+
|
118
|
+
if (xarg(str, STRING_TYPE, "#get", "string"))
|
119
|
+
{
|
120
|
+
return NULL;
|
121
|
+
}
|
122
|
+
|
123
|
+
var key = str.value;
|
124
|
+
var fields = self.data;
|
125
|
+
|
126
|
+
return fields[key] || self.unknown(self, [key]);
|
127
|
+
}
|
128
|
+
|
129
|
+
function Object_inspect (self, args)
|
130
|
+
{
|
131
|
+
return new_string('{...}');
|
132
|
+
}
|
133
|
+
|
134
|
+
function Object_log (self, args)
|
135
|
+
{
|
136
|
+
output(self);
|
137
|
+
return self;
|
138
|
+
}
|
139
|
+
|
140
|
+
function Object_neq (self, args)
|
141
|
+
{
|
142
|
+
var obj = args[0];
|
143
|
+
|
144
|
+
if (xarg(obj, null, "#neq", "an"))
|
145
|
+
{
|
146
|
+
return NULL;
|
147
|
+
}
|
148
|
+
|
149
|
+
if (obj.object_type !== self.object_type)
|
150
|
+
{
|
151
|
+
return TRUE;
|
152
|
+
}
|
153
|
+
|
154
|
+
return (self.value === obj.value) ? FALSE : TRUE;
|
155
|
+
}
|
156
|
+
|
157
|
+
function Object_print (self, args)
|
158
|
+
{
|
159
|
+
var str = call_function(self, 'stringify', []);
|
160
|
+
|
161
|
+
output(str.value);
|
162
|
+
|
163
|
+
return self;
|
164
|
+
}
|
165
|
+
|
166
|
+
function Object_scope (self, args)
|
167
|
+
{
|
168
|
+
var func = args[0];
|
169
|
+
|
170
|
+
if (xarg(func, FUNCTION_TYPE, "#scope", "function"))
|
171
|
+
{
|
172
|
+
return self;
|
173
|
+
}
|
174
|
+
|
175
|
+
func.value(self, []);
|
176
|
+
|
177
|
+
return self;
|
178
|
+
}
|
179
|
+
|
180
|
+
function Object_set (self, args)
|
181
|
+
{
|
182
|
+
var str = args[0];
|
183
|
+
var obj = args[1];
|
184
|
+
|
185
|
+
if (xarg(obj, null, "#set", "right hand"))
|
186
|
+
{
|
187
|
+
return NULL;
|
188
|
+
}
|
189
|
+
|
190
|
+
if (xarg(str, STRING_TYPE, "#set", "string key"))
|
191
|
+
{
|
192
|
+
return obj;
|
193
|
+
}
|
194
|
+
|
195
|
+
var key = str.value;
|
196
|
+
|
197
|
+
if (!self.data[key])
|
198
|
+
{
|
199
|
+
self.keys.push(key);
|
200
|
+
}
|
201
|
+
|
202
|
+
return self.data[key] = value;
|
203
|
+
}
|
204
|
+
|
205
|
+
function Object_stop (self, args)
|
206
|
+
{
|
207
|
+
var ids = self.interval_ids;
|
208
|
+
|
209
|
+
if (ids)
|
210
|
+
{
|
211
|
+
for (var i = 0, l = ids.length; i < l; ++i)
|
212
|
+
{
|
213
|
+
clearInterval(ids[i]);
|
214
|
+
}
|
215
|
+
|
216
|
+
delete self.interval_ids;
|
217
|
+
}
|
218
|
+
|
219
|
+
return self;
|
220
|
+
}
|
221
|
+
|
222
|
+
function Object_stringify (self, args)
|
223
|
+
{
|
224
|
+
var string = '';
|
225
|
+
var fields = self.data;
|
226
|
+
var keys = self.keys;
|
227
|
+
|
228
|
+
for (var k, i = 0, l = keys.length; i < l; ++i)
|
229
|
+
{
|
230
|
+
k = keys[i];
|
231
|
+
|
232
|
+
string += k + ':';
|
233
|
+
string += ' ' + call_function(fields[k], 'inspect', []).value;
|
234
|
+
|
235
|
+
if (i < l - 1)
|
236
|
+
{
|
237
|
+
string += ',' + ' ';
|
238
|
+
}
|
239
|
+
}
|
240
|
+
|
241
|
+
return new_string('{' + string + '}');
|
242
|
+
}
|
243
|
+
|
244
|
+
function Object_use (self, args)
|
245
|
+
{
|
246
|
+
var func = args[0];
|
247
|
+
|
248
|
+
if (xarg(func, FUNCTION_TYPE, "#use", "function"))
|
249
|
+
{
|
250
|
+
return self;
|
251
|
+
}
|
252
|
+
|
253
|
+
func.value(func.bound, [self]);
|
254
|
+
|
255
|
+
return self;
|
256
|
+
}
|
257
|
+
|
258
|
+
function Object_wait (self, args)
|
259
|
+
{
|
260
|
+
var num = args[0];
|
261
|
+
var func = args[1];
|
262
|
+
|
263
|
+
if (xarg(num, NUMBER_TYPE, "#wait", "number") || xarg(func, FUNCTION_TYPE, "#wait", "function"))
|
264
|
+
{
|
265
|
+
return self;
|
266
|
+
}
|
267
|
+
|
268
|
+
var body = func.value;
|
269
|
+
var bound = func.bound;
|
270
|
+
var t = num.value;
|
271
|
+
|
272
|
+
if (!self.timeout_ids)
|
273
|
+
{
|
274
|
+
self.timeout_ids = [];
|
275
|
+
}
|
276
|
+
|
277
|
+
self.timeout_ids.push(setTimeout(function () { body(bound, [self]); }, t));
|
278
|
+
|
279
|
+
return self;
|
280
|
+
}
|
281
|
+
|
282
|
+
add_function(OBJECT, 'alert', Object_alert, []);
|
283
|
+
add_function(OBJECT, 'brackets', Object_get, ['key']);
|
284
|
+
add_function(OBJECT, 'brackets_eq', Object_set, ['key','value']);
|
285
|
+
add_function(OBJECT, 'cancel', Object_cancel, []);
|
286
|
+
add_function(OBJECT, 'eq', Object_eq, ['object']);
|
287
|
+
add_function(OBJECT, 'every', Object_every, ['milliseconds','function']);
|
288
|
+
add_function(OBJECT, 'fnames', Object_fnames, []);
|
289
|
+
add_function(OBJECT, 'get', Object_get, ['key']);
|
290
|
+
add_function(OBJECT, 'inspect', Object_inspect, []);
|
291
|
+
add_function(OBJECT, 'log', Object_log, []);
|
292
|
+
add_function(OBJECT, 'neq', Object_neq, ['object']);
|
293
|
+
add_function(OBJECT, 'print', Object_print, []);
|
294
|
+
add_function(OBJECT, 'scope', Object_scope, ['function']);
|
295
|
+
add_function(OBJECT, 'set', Object_set, ['key','value']);
|
296
|
+
add_function(OBJECT, 'stop', Object_stop, []);
|
297
|
+
add_function(OBJECT, 'stringify', Object_stringify, []);
|
298
|
+
add_function(OBJECT, 'use', Object_use, ['function']);
|
299
|
+
add_function(OBJECT, 'wait', Object_wait, ['milliseconds','function']);
|
@@ -0,0 +1,75 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright © 2011 Jesse Sielaff
|
3
|
+
*/
|
4
|
+
|
5
|
+
var STRING =
|
6
|
+
{
|
7
|
+
functions: {}
|
8
|
+
};
|
9
|
+
|
10
|
+
copy_functions(STRING, OBJECT);
|
11
|
+
|
12
|
+
function new_string (value)
|
13
|
+
{
|
14
|
+
var str =
|
15
|
+
{
|
16
|
+
object_type: STRING_TYPE,
|
17
|
+
functions: {},
|
18
|
+
data: {},
|
19
|
+
keys: [],
|
20
|
+
unknown: Object_bad_key,
|
21
|
+
value: value
|
22
|
+
};
|
23
|
+
|
24
|
+
copy_functions(str, STRING);
|
25
|
+
|
26
|
+
return str;
|
27
|
+
}
|
28
|
+
|
29
|
+
function String_inspect (self, args)
|
30
|
+
{
|
31
|
+
if (xself(self, STRING_TYPE, "#inspect"))
|
32
|
+
{
|
33
|
+
return NULL;
|
34
|
+
}
|
35
|
+
|
36
|
+
return new_string("'" + self.value + "'");
|
37
|
+
}
|
38
|
+
|
39
|
+
function String_plus (self, args)
|
40
|
+
{
|
41
|
+
var str = args[0];
|
42
|
+
|
43
|
+
if (xself(self, STRING_TYPE, "#plus") || xarg(str, STRING_TYPE, "String#plus", "string"))
|
44
|
+
{
|
45
|
+
return NULL;
|
46
|
+
}
|
47
|
+
|
48
|
+
return new_string(self.value + str.value);
|
49
|
+
}
|
50
|
+
|
51
|
+
function String_stringify (self, args)
|
52
|
+
{
|
53
|
+
if (xself(self, STRING_TYPE, "#stringify"))
|
54
|
+
{
|
55
|
+
return NULL;
|
56
|
+
}
|
57
|
+
|
58
|
+
return new_string(self.value);
|
59
|
+
}
|
60
|
+
|
61
|
+
function String_warn (self, args)
|
62
|
+
{
|
63
|
+
if (xself(self, STRING_TYPE, "#warn"))
|
64
|
+
{
|
65
|
+
return self;
|
66
|
+
}
|
67
|
+
|
68
|
+
warn(self.value);
|
69
|
+
return self;
|
70
|
+
}
|
71
|
+
|
72
|
+
add_function(STRING, 'inspect', String_inspect, []);
|
73
|
+
add_function(STRING, 'plus', String_plus, []);
|
74
|
+
add_function(STRING, 'inspect', String_stringify, []);
|
75
|
+
add_function(STRING, 'warn', String_warn, []);
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright © 2011 Jesse Sielaff
|
3
|
+
*/
|
4
|
+
|
5
|
+
var TRUE =
|
6
|
+
{
|
7
|
+
object_type: TRUE_TYPE,
|
8
|
+
functions: {},
|
9
|
+
data: {},
|
10
|
+
keys: [],
|
11
|
+
unknown: Object_bad_key,
|
12
|
+
value: true
|
13
|
+
}
|
14
|
+
|
15
|
+
copy_functions(TRUE, OBJECT);
|
16
|
+
|
17
|
+
function True_stringify (self, args)
|
18
|
+
{
|
19
|
+
return new_string('true');
|
20
|
+
}
|
21
|
+
|
22
|
+
add_function(TRUE, 'inspect', True_stringify, []);
|
23
|
+
add_function(TRUE, 'stringify', True_stringify, []);
|