mix-language 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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, []);
|