Skip to content

Commit daea592

Browse files
committed
Perlito5 - add more "use strict"
1 parent e107c18 commit daea592

File tree

13 files changed

+153
-36
lines changed

13 files changed

+153
-36
lines changed

TODO-perlito5

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ TODO list for Perlito5
8888
$ perl -e ' use strict; my $x = X; print $x '
8989
Bareword "X" not allowed while "strict subs" in use
9090

91+
$ perl perlito5.pl -MO=Deparse -e ' ::X::x::y '
92+
join("", ::{'main::X::'} x main::y);
93+
9194
-- clean up:
9295
the several "end_tables" in Expression.pm are duplicating the function of
9396
$Precedence in Precedence.pm - Expression.pm should use $Precedence directly.

html/perlito5.js

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2115,6 +2115,7 @@ var p5100 = p5pkg['main'];
21152115
p5make_sub("Perlito5::AST::Use", "code", function (List__, p5want) {
21162116
return (List__.p5aget_hash(0)._hash_.p5hget('code'));
21172117
});
2118+
1;
21182119
})()
21192120
;
21202121
(function () {
@@ -2172,6 +2173,8 @@ var p5100 = p5pkg['main'];
21722173
// use Perlito5::AST
21732174
;
21742175
// use Perlito5::Dumper
2176+
;
2177+
// use strict
21752178
;
21762179
var p5127 = p5make_package("Perlito5::Javascript2");
21772180
p5for_lex(function () {
@@ -3384,6 +3387,8 @@ var p5100 = p5pkg['main'];
33843387
}, [0], false, "");
33853388
var p5140 = p5make_package("Perlito5::AST::Apply");
33863389
p5for_lex(function () {
3390+
// no strict
3391+
;
33873392
p5make_sub("Perlito5::AST::Apply", "emit_regex_javascript2", function (List__, p5want) {
33883393
try {
33893394
var v_op;
@@ -3536,13 +3541,17 @@ var p5100 = p5pkg['main'];
35363541
}, 'require', function (List__, p5want) {
35373542
var v_self;
35383543
(v_self = (List__.p5aget(0)));
3544+
var v_level;
3545+
(v_level = (List__.p5aget(1)));
35393546
return (p5context([('p5pkg["Perlito5::Grammar::Use"]["require"]([' + p5str(p5pkg["Perlito5::Javascript2"].to_str(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget(0)), 0)) + ', ' + p5str(( p5bool((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget_hash(0)._hash_.p5hget('bareword')) ? 1 : 0)) + '])')], p5want));
35403547
}, 'prefix:<$>', function (List__, p5want) {
35413548
var v_self;
35423549
(v_self = (List__.p5aget(0)));
3550+
var v_level;
3551+
(v_level = (List__.p5aget(1)));
35433552
var v_arg;
35443553
(v_arg = ((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget(0)));
3545-
return (p5context([(p5str(p5pkg["Perlito5::Javascript2"].emit_javascript2_autovivify([v_arg, p5pkg["Perlito5::AST::Apply"]["v_level"], 'scalar'], 0)) + '._scalar_')], p5want));
3554+
return (p5context([(p5str(p5pkg["Perlito5::Javascript2"].emit_javascript2_autovivify([v_arg, v_level, 'scalar'], 0)) + '._scalar_')], p5want));
35463555
}, 'prefix:<@>', function (List__, p5want) {
35473556
var v_self;
35483557
(v_self = (List__.p5aget(0)));
@@ -3578,11 +3587,15 @@ var p5100 = p5pkg['main'];
35783587
}, 'circumfix:<[ ]>', function (List__, p5want) {
35793588
var v_self;
35803589
(v_self = (List__.p5aget(0)));
3590+
var v_level;
3591+
(v_level = (List__.p5aget(1)));
35813592
return (p5context([('(new p5ArrayRef(' + p5str(p5pkg["Perlito5::Javascript2"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('arguments')), 0)) + '))')], p5want));
35823593
}, 'circumfix:<{ }>', function (List__, p5want) {
35833594
var v_self;
35843595
(v_self = (List__.p5aget(0)));
3585-
return (p5context([('(new p5HashRef(' + p5str(p5pkg["Perlito5::Javascript2"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('arguments'), p5pkg["Perlito5::AST::Apply"]["v_level"], 'hash'), 0)) + '))')], p5want));
3596+
var v_level;
3597+
(v_level = (List__.p5aget(1)));
3598+
return (p5context([('(new p5HashRef(' + p5str(p5pkg["Perlito5::Javascript2"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('arguments'), v_level, 'hash'), 0)) + '))')], p5want));
35863599
}, 'prefix:<' + String.fromCharCode(92) + '>', function (List__, p5want) {
35873600
try {
35883601
var v_self;
@@ -3731,15 +3744,21 @@ var p5100 = p5pkg['main'];
37313744
}, 'infix:<..>', function (List__, p5want) {
37323745
var v_self;
37333746
(v_self = (List__.p5aget(0)));
3747+
var v_level;
3748+
(v_level = (List__.p5aget(1)));
37343749
return (p5context([('(function (a) { ' + 'for (var i=' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget(0), "emit_javascript2", [], 0)) + ', l=' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget(1), "emit_javascript2", [], 0)) + '; ' + 'i<=l; ++i)' + '{ ' + 'a.push(i) ' + '}; ' + 'return a ' + '})([])')], p5want));
37353750
}, 'delete', function (List__, p5want) {
37363751
var v_self;
37373752
(v_self = (List__.p5aget(0)));
3753+
var v_level;
3754+
(v_level = (List__.p5aget(1)));
37383755
return (p5context([('(delete ' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget_array('arguments')._array_.p5aget(0), "emit_javascript2", [], 0)) + ')')], p5want));
37393756
}, 'scalar', function (List__, p5want) {
37403757
var v_self;
37413758
(v_self = (List__.p5aget(0)));
3742-
return (p5pkg["Perlito5::Javascript2"].to_scalar(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('arguments'), (p5num(p5pkg["Perlito5::AST::Apply"]["v_level"]) + 1)), p5want));
3759+
var v_level;
3760+
(v_level = (List__.p5aget(1)));
3761+
return (p5pkg["Perlito5::Javascript2"].to_scalar(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('arguments'), (p5num(v_level) + 1)), p5want));
37433762
}, 'ternary:<? :>', function (List__, p5want) {
37443763
var v_self;
37453764
(v_self = (List__.shift()));
@@ -4395,8 +4414,10 @@ var p5100 = p5pkg['main'];
43954414
(v_body = (p5call(p5pkg["Perlito5::Javascript2::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('body'), "stmts", [], 1), 'needs_return', 0, 'create_context', 1), 0)));
43964415
var v_expr;
43974416
(v_expr = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'infix:<==>', 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', '$', 'namespace', '', 'name', '_'], 1), v_cond)))), 0)));
4417+
var v_label;
4418+
(v_label = (''));
43984419
var v_s;
4399-
(v_s = (('if ( ' + p5str(p5pkg["Perlito5::Javascript2"].to_bool([v_expr, (p5num(v_level) + 1)], 0)) + ' ) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript2", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript2"].tab([(p5num(v_level) + 1)], 0)) + 'throw(new p5_error("next", "' + p5str(p5pkg["Perlito5::AST::When"]["v_label"]) + '"))' + p5str(p5pkg["Perlito5::Javascript2"].tab([v_level], 0)) + '}')));
4420+
(v_s = (('if ( ' + p5str(p5pkg["Perlito5::Javascript2"].to_bool([v_expr, (p5num(v_level) + 1)], 0)) + ' ) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript2", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript2"].tab([(p5num(v_level) + 1)], 0)) + 'throw(new p5_error("next", "' + p5str(v_label) + '"))' + p5str(p5pkg["Perlito5::Javascript2"].tab([v_level], 0)) + '}')));
44004421
return (p5context([v_s], p5want));
44014422
});
44024423
}, [0], false, "");
@@ -4511,6 +4532,8 @@ var p5100 = p5pkg['main'];
45114532
;
45124533
(function () {
45134534
var p5148 = p5make_package("Perlito5::Precedence");
4535+
// use feature
4536+
;
45144537
p5make_sub("Perlito5::Precedence", "new", function (List__, p5want) {
45154538
var v_class;
45164539
(v_class = (List__.shift()));
@@ -4881,7 +4904,7 @@ var p5100 = p5pkg['main'];
48814904
(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_.p5unshift([v_token]);
48824905
}
48834906
else {
4884-
if ( (p5bool((p5context([(v_Operator || (v_Operator = new p5HashRef({})))._hash_.p5hget('postfix')], 0) || (p5context([(v_Operator || (v_Operator = new p5HashRef({})))._hash_.p5hget('postfix')], 0) = new p5HashRef({})))._hash_.p5hget(p5str((v_token || (v_token = new p5ArrayRef([])))._array_.p5aget(1)))) && p5bool(v_last_is_term)) ) {
4907+
if ( (p5bool((v_Operator || (v_Operator = new p5HashRef({})))._hash_.p5hget_hash('postfix')._hash_.p5hget(p5str((v_token || (v_token = new p5ArrayRef([])))._array_.p5aget(1)))) && p5bool(v_last_is_term)) ) {
48854908
(function () {
48864909
var v_pr;
48874910
(v_pr = ((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_.p5hget(p5str((v_token || (v_token = new p5ArrayRef([])))._array_.p5aget(1)))));
@@ -4957,6 +4980,8 @@ var p5100 = p5pkg['main'];
49574980
;
49584981
(function () {
49594982
var p5149 = p5make_package("Perlito5::Grammar::Bareword");
4983+
// use strict
4984+
;
49604985
p5make_sub("Perlito5::Grammar::Bareword", "term_bareword", function (List__, p5want) {
49614986
try {
49624987
var v_self;
@@ -4981,9 +5006,14 @@ var p5100 = p5pkg['main'];
49815006
};
49825007
throw(p5context([], p5want));
49835008
};
4984-
(v_p = ((v_m_name || (v_m_name = new p5HashRef({})))._hash_.p5hget('to')));
49855009
var v_name;
49865010
(v_name = (p5pkg["Perlito5::Match"].flat([v_m_name], 0)));
5011+
(v_p = ((v_m_name || (v_m_name = new p5HashRef({})))._hash_.p5hget('to')));
5012+
if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 2], 0) == '::') ) {
5013+
(v_m_name || (v_m_name = new p5HashRef({})))._hash_.p5hset('to', ((p5num(v_p) + 2)));
5014+
(v_m_name || (v_m_name = new p5HashRef({})))._hash_.p5hset('capture', ((new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', '::', 'name', '', 'namespace', (p5str(v_namespace) + '::' + p5str(v_name))], 1))))));
5015+
throw(p5context([v_m_name], p5want));
5016+
};
49875017
var v_full_name;
49885018
(v_full_name = (v_name));
49895019
if ( p5bool(v_namespace) ) {
@@ -9939,6 +9969,8 @@ var p5100 = p5pkg['main'];
99399969
// use Perlito5::Precedence
99409970
;
99419971
// use Perlito5::Grammar
9972+
;
9973+
// use strict
99429974
;
99439975
p5pkg["Perlito5::Precedence"].add_term(['no', function (List__, p5want) {
99449976
return (p5call(p5pkg["Perlito5::Grammar::Use"], "term_use", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
@@ -10345,11 +10377,12 @@ return r;
1034510377
if ( (p5str(p5pkg["Perlito5::Grammar::Use"].filename_lookup([v_filename], 0)) == 'done') ) {
1034610378
throw(p5context([], p5want));
1034710379
};
10348-
(p5pkg["Perlito5::Grammar::Use"]["v_result"] = ((function (p5want) {
10380+
var v_result;
10381+
(v_result = ((function (p5want) {
1034910382
var r;
1035010383
p5pkg["main"]["v_@"] = "";
1035110384
try {
10352-
r = eval(perl5_to_js(p5str(p5pkg["Perlito5::IO"].slurp(p5list_to_a(p5pkg["main"]["Hash_INC"].p5hget(p5str(v_filename))), 0)), "Perlito5::Grammar::Use", (new p5ArrayRef(p5list_to_a((new p5HashRef(p5a_to_h(p5list_to_a('$filename', (new p5HashRef({'decl' : 'my'})), '$is_bareword', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '%Perlito_internal_module', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$@', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$^O', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$|', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '%ENV', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '%INC', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@#', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@ARGV', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@INC', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@_', (new p5HashRef({'decl' : 'my'}))))))))), ""))
10385+
r = eval(perl5_to_js(p5str(p5pkg["Perlito5::IO"].slurp(p5list_to_a(p5pkg["main"]["Hash_INC"].p5hget(p5str(v_filename))), 0)), "Perlito5::Grammar::Use", (new p5ArrayRef(p5list_to_a((new p5HashRef(p5a_to_h(p5list_to_a('$filename', (new p5HashRef({'decl' : 'my'})), '$is_bareword', (new p5HashRef({'decl' : 'my'})), '$result', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Use'})), '%Perlito_internal_module', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$@', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$^O', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$|', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '%ENV', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '%INC', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@#', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@ARGV', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@INC', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '@_', (new p5HashRef({'decl' : 'my'}))))))))), ""))
1035310386
}
1035410387
catch(err) {
1035510388
if ( err instanceof p5_error || err instanceof Error ) {
@@ -10371,7 +10404,7 @@ return r;
1037110404
}
1037210405

1037310406
else {
10374-
if ( !( p5bool(p5pkg["Perlito5::Grammar::Use"]["v_result"])) ) {
10407+
if ( !( p5bool(v_result)) ) {
1037510408
(delete p5pkg["main"]["Hash_INC"].p5hget(p5str(v_filename)));
1037610409
if ( p5bool(p5pkg["main"]["v_@"]) ) {
1037710410
p5pkg["Perlito5::Grammar::Use"].warn([[p5pkg["main"]["v_@"]]], null);
@@ -10380,7 +10413,7 @@ return r;
1038010413
}
1038110414

1038210415
else {
10383-
throw(p5context([p5pkg["Perlito5::Grammar::Use"]["v_result"]], p5want))
10416+
throw(p5context([v_result], p5want))
1038410417
}
1038510418
}
1038610419
}
@@ -10399,6 +10432,8 @@ return r;
1039910432
(function () {
1040010433
var p5155 = p5make_package("Perlito5::Grammar::Block");
1040110434
// use Perlito5::Expression
10435+
;
10436+
// use strict
1040210437
;
1040310438
// our p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"]
1040410439
(p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"] = {'BEGIN' : 1, 'UNITCHECK' : 1, 'CHECK' : 1, 'INIT' : 1, 'END' : 1});
@@ -10687,9 +10722,10 @@ return r;
1068710722
else {
1068810723
throw(p5context([], p5want));
1068910724
};
10690-
(p5pkg["Perlito5::Grammar::Block"]["v_p"] = ((v_ws || (v_ws = new p5HashRef({})))._hash_.p5hget('to')));
10725+
var v_p;
10726+
(v_p = ((v_ws || (v_ws = new p5HashRef({})))._hash_.p5hget('to')));
1069110727
var v_m_name;
10692-
(v_m_name = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], 0)));
10728+
(v_m_name = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
1069310729
if ( p5bool(v_m_name) ) {
1069410730
null;
1069510731
}
@@ -10699,9 +10735,9 @@ return r;
1069910735
var v_block_name;
1070010736
(v_block_name = (p5pkg["Perlito5::Match"].flat([v_m_name], 0)));
1070110737
if ( (p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"]).hasOwnProperty(v_block_name) ) {
10702-
throw(p5call(p5pkg["Perlito5::Grammar::Block"], "term_block", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], p5want));
10738+
throw(p5call(p5pkg["Perlito5::Grammar::Block"], "term_block", [v_str, v_p], p5want));
1070310739
};
10704-
return (p5call(p5pkg["Perlito5::Grammar::Block"], "named_sub_def", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], p5want));
10740+
return (p5call(p5pkg["Perlito5::Grammar::Block"], "named_sub_def", [v_str, v_p], p5want));
1070510741
}
1070610742
catch(err) {
1070710743
if ( err instanceof Error ) {

0 commit comments

Comments
 (0)