Skip to content

Commit bd673d3

Browse files
committed
Perlito5 - add "Javascript3" backend (containers are objects)
1 parent f9a20c8 commit bd673d3

File tree

10 files changed

+1771
-1415
lines changed

10 files changed

+1771
-1415
lines changed

html/perlito5.js

Lines changed: 335 additions & 383 deletions
Large diffs are not rendered by default.

perlito5.pl

Lines changed: 603 additions & 557 deletions
Large diffs are not rendered by default.

src5/lib/Perlito5/Javascript/CORE.pm renamed to src5/lib/Perlito5/Javascript3/CORE.pm

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use v5;
22

3-
package Perlito5::Javascript::CORE;
3+
package Perlito5::Javascript3::CORE;
44

5-
sub emit_javascript {
5+
sub emit_javascript3 {
66

77
return <<'EOT'
88
//
99
//
10-
// lib/Perlito5/Javascript/CORE.js
10+
// lib/Perlito5/Javascript3/CORE.js
1111
//
12-
// CORE functions for "Perlito" Perl5-in-Javascript
12+
// CORE functions for "Perlito" Perl5-in-Javascript3
1313
//
1414
// AUTHORS
1515
//
@@ -72,6 +72,12 @@ CORE.warn = function(List__) {
7272
CORE.bless = function(List__) {
7373
var o = List__[0];
7474
var pkg_name = List__[1];
75+
if (o instanceof p5Scalar) {
76+
o = o._v_;
77+
}
78+
if (pkg_name instanceof p5Scalar) {
79+
pkg_name = pkg_name._v_;
80+
}
7581
if (typeof pkg_name === "object") {
7682
// bless {}, Class
7783
o._class_ = pkg_name;
@@ -164,12 +170,16 @@ CORE.substr = function(List__) {
164170
return p5str(expr).substr(offset, length);
165171
};
166172
173+
CORE.defined = function(List__) {
174+
return (List__[0] instanceof p5Scalar) ? ( List__[0]._v_ != null ) : ( List__[0] != null )
175+
};
176+
167177
CORE.values = function(List__, p5want) {
168-
var o = List__[0];
178+
var o = List__[0]._hash_;
169179
delete o["_each_"];
170180
if (p5want) {
171181
if (o == null) {
172-
return [];
182+
return new p5Array([]);
173183
};
174184
if (typeof o.values === "function") {
175185
return o.values();
@@ -178,17 +188,17 @@ CORE.values = function(List__, p5want) {
178188
for (var i in o) {
179189
out.push(o[i]);
180190
}
181-
return out;
191+
return new p5Array(out);
182192
}
183193
return CORE.keys(List__, p5want);
184194
};
185195
186196
CORE.keys = function(List__, p5want) {
187-
var o = List__[0];
197+
var o = List__[0]._hash_;
188198
delete o["_each_"];
189199
if (p5want) {
190200
if (o == null) {
191-
return [];
201+
return new p5Array([]);
192202
}
193203
if (typeof o.keys === "function") {
194204
return o.keys();
@@ -197,7 +207,7 @@ CORE.keys = function(List__, p5want) {
197207
for (var i in o) {
198208
out.push(i);
199209
}
200-
return out;
210+
return new p5Array(out);
201211
}
202212
else {
203213
if (o == null) {
@@ -248,7 +258,7 @@ CORE.reverse = function(List__) {
248258
};
249259
250260
CORE.splice = function(List__, p5want) {
251-
var array = List__.shift();
261+
var array = List__.shift()._array_;
252262
// CORE.say([ array ]);
253263
var offset = p5num(List__.shift());
254264
var limit = List__.length ? p5num(List__.shift()) : (array.length + 1);
@@ -269,49 +279,47 @@ CORE.splice = function(List__, p5want) {
269279
270280
CORE.pop = function(List__) {
271281
var o = List__[0];
272-
if (o.length == null) {
282+
if (o._array_.length == null) {
273283
return null;
274284
}
275-
return o.pop();
285+
return o._array_.pop();
276286
};
277287
278288
CORE.shift = function(List__) {
279289
var o = List__[0];
280-
if (o.length == null) {
290+
if (o._array_.length == null) {
281291
return null;
282292
}
283-
return o.shift();
293+
return o._array_.shift();
284294
};
285295
286296
CORE.push = function(List__) {
287297
var o = List__[0];
288298
var v = List__[1];
289-
for(var i = 0; i < v.length; i++) {
290-
o.push(v[i]);
299+
for(var i = 0; i < v._array_.length; i++) {
300+
o._array_.push(v._array_[i]);
291301
}
292-
return o.length;
302+
return o._array_.length;
293303
};
294304
295305
CORE.unshift = function(List__) {
296306
var o = List__[0];
297307
var v = List__[1];
298-
for(var i = v.length-1; i >= 0; i--) {
299-
o.unshift(v[i]);
308+
for(var i = v._array_.length-1; i >= 0; i--) {
309+
o._array_.unshift(v._array_[i]);
300310
}
301-
return o.length;
311+
return o._array_.length;
302312
};
303313
304314
CORE.join = function(List__) {
305315
var s = List__[0];
306316
var o = List__[1];
307-
return o.join(s);
317+
return o._array_.join(s);
308318
};
309319
310320
CORE.index = function(List__) {
311-
var o = List__[0];
312-
var s = List__[1];
313321
try {
314-
return o.indexOf(s, p5num(List__[2]));
322+
return p5str(List__[0]).indexOf(p5str(List__[1]), p5num(List__[2]));
315323
}
316324
catch(err) {
317325
return -1;
@@ -339,10 +347,7 @@ CORE.rindex = function(List__) {
339347
};
340348
341349
CORE.length = function(List__) {
342-
var o = List__[0];
343-
if (typeof o.string === "function") {
344-
return o.string().length;
345-
}
350+
var o = p5str(List__[0]);
346351
return o.length;
347352
};
348353
@@ -351,6 +356,9 @@ CORE.unpack = function(List__) { CORE.warn([ "CORE::unpack not implemented" ])
351356
352357
CORE.ref = function(List__) {
353358
var o = List__[0];
359+
if (o instanceof p5Scalar) {
360+
o = o._v_;
361+
}
354362
if (o == null) {
355363
return "";
356364
}
@@ -395,7 +403,7 @@ CORE.prototype = function(List__, data) {
395403
};
396404
397405
EOT
398-
} # end of emit_javascript()
406+
} # end of emit_javascript3()
399407

400408
1;
401409

0 commit comments

Comments
 (0)