Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - js - more support for typeglob assignment
  • Loading branch information
fglock committed Sep 4, 2013
1 parent 21af3dc commit a8106a1
Show file tree
Hide file tree
Showing 7 changed files with 348 additions and 306 deletions.
589 changes: 304 additions & 285 deletions html/perlito5.js

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions perlito5.pl

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions src5/lib/Perlito5/Javascript2/Emitter.pm
Expand Up @@ -1187,7 +1187,11 @@ package Perlito5::AST::Var;
return '(' . $self->emit_javascript2() . ' = ' . Perlito5::Javascript2::to_list([$arguments], $level+1, 'hash') . ')'
}
if ( $self->sigil eq '*' ) {
return '(' . $self->emit_javascript2() . ' = ' . Perlito5::Javascript2::to_scalar([$arguments], $level+1) . ')'
return 'p5typeglob_set('
. '"' . ($self->{namespace} || $Perlito5::PKG_NAME) . '", '
. '"' . $self->{name} . '", '
. Perlito5::Javascript2::to_scalar([$arguments], $level+1)
. ')'
}

die "don't know how to assign to variable ", $self->sigil, $self->name;
Expand Down Expand Up @@ -2725,7 +2729,7 @@ package Perlito5::AST::Sub;
. Perlito5::Javascript2::tab($level) . '}';

if ( $self->{name} ) {
return 'p5make_sub("' . $self->{namespace} . '", "' . $self->{name} . '", ' . $s . ')'
return 'p5typeglob_set("' . $self->{namespace} . '", "' . $self->{name} . '", ' . $s . ')'
}
else {
return $s;
Expand Down
8 changes: 4 additions & 4 deletions src5/lib/Perlito5/Javascript2/IO.pm
Expand Up @@ -29,7 +29,7 @@ if (isNode) {
var fs = require("fs");
p5make_sub("Perlito5::IO", "print", function (List__, p5want) {
p5typeglob_set("Perlito5::IO", "print", function (List__, p5want) {
var i;
List__.shift(); // TODO - use IO::FILE
for (i = 0; i < List__.length; i++) {
Expand Down Expand Up @@ -141,21 +141,21 @@ if (isNode) {
}
};
p5make_sub("Perlito5::IO", "slurp", function(List__) {
p5typeglob_set("Perlito5::IO", "slurp", function(List__) {
return fs.readFileSync(List__[0],"utf8");
});
} else {
// not running in node.js
p5make_sub("Perlito5::IO", "print", function (List__, p5want) {
p5typeglob_set("Perlito5::IO", "print", function (List__, p5want) {
var i;
List__.shift(); // TODO - use IO::FILE
for (i = 0; i < List__.length; i++) {
write(p5str(List__[i]));
}
return 1;
});
p5make_sub("Perlito5::IO", "slurp", function(List__) {
p5typeglob_set("Perlito5::IO", "slurp", function(List__) {
var filename = List__[0];
if (typeof readFile == "function") {
return readFile(filename);
Expand Down
29 changes: 24 additions & 5 deletions src5/lib/Perlito5/Javascript2/Runtime.pm
Expand Up @@ -313,13 +313,32 @@ p5make_package("Perlito5::IO");
p5make_package("Perlito5::Runtime");
p5make_package("Perlito5::Grammar");
function p5make_sub(pkg_name, sub_name, func) {
p5make_package(pkg_name);
p5pkg[pkg_name][sub_name] = func;
}
var sigils = { '@' : 'List_', '%' : 'Hash_', '$' : 'v_' };
function p5typeglob_set(namespace, name, obj) {
p5make_package(namespace);
if ( obj.hasOwnProperty("_ref_") ) {
if ( obj._ref_ == "HASH" ) {
p5pkg[namespace][sigils['%'] + name] = obj._hash_;
}
else if ( obj._ref_ == "ARRAY" ) {
p5pkg[namespace][sigils['@'] + name] = obj._array_;
}
else if ( obj._ref_ == "SCALAR" ) {
p5pkg[namespace][sigils['$'] + name] = obj._scalar_;
}
else if ( obj._ref_ == "GLOB" ) {
// TODO
p5pkg[namespace][name] = obj;
}
}
else {
p5pkg[namespace][name] = obj; // CODE
// TODO - non-reference
}
return p5pkg[namespace][name]; // TODO - return GLOB
}
function p5set_local(namespace, name, sigil) {
var vname = sigils[sigil] + name;
p5LOCAL.push([namespace, vname, namespace[vname]]);
Expand Down
2 changes: 1 addition & 1 deletion src5/lib/Perlito5/Javascript3/Emitter.pm
Expand Up @@ -2251,7 +2251,7 @@ package Perlito5::AST::Sub;
. Perlito5::Javascript3::tab($level) . '}';

if ( $self->{name} ) {
return 'p5make_sub("' . $self->{namespace} . '", "' . $self->{name} . '", ' . $s . ')'
return 'p5typeglob_set("' . $self->{namespace} . '", "' . $self->{name} . '", ' . $s . ')'
}
else {
return $s;
Expand Down
6 changes: 3 additions & 3 deletions src5/lib/Perlito5/Javascript3/Runtime.pm
Expand Up @@ -271,7 +271,7 @@ p5make_package("Perlito5::IO");
p5make_package("Perlito5::Runtime");
p5make_package("Perlito5::Grammar");
function p5make_sub(pkg_name, sub_name, func) {
function p5typeglob_set(pkg_name, sub_name, func) {
p5make_package(pkg_name);
p5pkg[pkg_name][sub_name] = func;
}
Expand Down Expand Up @@ -811,12 +811,12 @@ p5a_to_h = function(a) {
if (isNode) {
var fs = require("fs");
p5make_sub("Perlito5::IO", "slurp", function(List__) {
p5typeglob_set("Perlito5::IO", "slurp", function(List__) {
var filename = p5str(List__[0]);
return fs.readFileSync(filename, "utf8");
});
} else {
p5make_sub("Perlito5::IO", "slurp", function(List__) {
p5typeglob_set("Perlito5::IO", "slurp", function(List__) {
var filename = p5str(List__[0]);
if (typeof readFile == "function") {
return readFile(filename);
Expand Down

0 comments on commit a8106a1

Please sign in to comment.