// Do not edit this file - Generated by Perlito5 9.0
//
// lib/Perlito5/Javascript/Runtime.js
//
// Runtime for "Perlito" Perl5-in-Javascript
//
// AUTHORS
//
// Flavio Soibelmann Glock  fglock@gmail.com
//
// COPYRIGHT
//
// Copyright 2009, 2010, 2011, 2012 by Flavio Soibelmann Glock and others.
//
// This program is free software; you can redistribute it and/or modify it
// under the same terms as Perl itself.
//
// See http://www.perl.com/perl/misc/Artistic.html

var isNode = typeof require != "undefined";

if (typeof p5pkg !== "object") {
    p5pkg = {};
    p5LOCAL = [];

    var universal = function () {};
    p5pkg.UNIVERSAL = new universal();
    p5pkg.UNIVERSAL._ref_ = "UNIVERSAL";
    p5pkg.UNIVERSAL.isa = function (List__) {
        // TODO - use @ISA
        return List__[0]._class_._ref_ == List__[1]
    };
    p5pkg.UNIVERSAL.can = function (List__) {
        var o = List__[0];
        var s = List__[1];
        if ( s.indexOf("::") == -1 ) {
            return p5method_lookup(s, o._class_._ref__, {})
        }
        var c = s.split("::");
        s = c.pop(); 
        return p5method_lookup(s, c.join("::"), {});
    };
    p5pkg.UNIVERSAL.DOES = p5pkg.UNIVERSAL.can;

    var core = function () {};
    p5pkg["CORE"] = new core();
    p5pkg["CORE"]._ref_ = "CORE";

    var core_global = function () {};
    core_global.prototype = p5pkg.CORE;
    p5pkg["CORE::GLOBAL"] = new core_global();
    p5pkg["CORE::GLOBAL"]._ref_ = "CORE::GLOBAL";

    p5_error = function (type, v) {
        this.type = type;
        this.v = v;
        this.toString = function(){
            if (this.type == 'break') {
                return 'Can\'t "break" outside a given block'
            }
            if (this.type == 'next' || this.type == 'last' || this.type == 'redo') {
                if (this.v == "") { return 'Can\'t "' + this.type + '" outside a loop block' }
                return 'Label not found for "' + this.type + ' ' + this.v + '"';
            }
            return this.v;
        };
    };
    p5_error.prototype = Error.prototype;
}

function p5make_package(pkg_name) {
    if (!p5pkg.hasOwnProperty(pkg_name)) {
        var tmp = function () {};
        tmp.prototype = p5pkg["CORE::GLOBAL"];
        p5pkg[pkg_name] = new tmp();
        p5pkg[pkg_name]._ref_ = pkg_name;
        p5pkg[pkg_name]._class_ = p5pkg[pkg_name];  // XXX memory leak

        // TODO - add the other package global variables
        p5pkg[pkg_name]["List_ISA"] = [];
        p5pkg[pkg_name]["v_a"] = null;
        p5pkg[pkg_name]["v_b"] = null;
        p5pkg[pkg_name]["v__"] = null;
        p5pkg[pkg_name]["v_AUTOLOAD"] = null;
    }
    return p5pkg[pkg_name];
}

function p5code_lookup_by_name(package_name, sub_name) {
    // sub_name can have an optional namespace
    var parts = sub_name.split(/::/);
    if (parts.length > 1) {
        sub_name = parts.pop();
        package_name = parts.join("::");
    }
    if (p5pkg.hasOwnProperty(package_name)) {
        var c = p5pkg[package_name];
        if ( c.hasOwnProperty(sub_name) ) {
            return c[sub_name]
        }
    }
    return null;
}

function p5get_class_for_method(method, class_name, seen) {
    // default mro
    // TODO - cache the methods that were already looked up
    if ( p5pkg[class_name].hasOwnProperty(method) ) {
        return class_name
    }
    var isa = p5pkg[class_name].List_ISA;
    for (var i = 0; i < isa.length; i++) {
        if (!seen[isa[i]]) {
            var m = p5get_class_for_method(method, isa[i]);
            if (m) {
                return m 
            }
            seen[isa[i]]++;
        }
    }
}

function p5method_lookup(method, class_name, seen) {
    var c = p5get_class_for_method(method, class_name, seen);
    if (c) {
        return p5pkg[c][method]
    }
    if ( p5pkg.UNIVERSAL.hasOwnProperty(method) ) {
        return p5pkg.UNIVERSAL[method]
    }
}

function p5call(invocant, method, list) {
    list.unshift(invocant);

    if ( invocant.hasOwnProperty("_class_") ) {

        if ( invocant._class_.hasOwnProperty(method) ) {
            return invocant._class_[method](list)
        }
        var m = p5method_lookup(method, invocant._class_._ref_, {});
        if (m) {
            return m(list)
        }

        // method can have an optional namespace
        var pkg_name = method.split(/::/);
        if (pkg_name.length > 1) {
            var name = pkg_name.pop();
            pkg_name = pkg_name.join("::");
            m = p5method_lookup(name, pkg_name, {});
            if (m) {
                return m(list)
            }
            p5pkg.CORE.die(["method not found: ", name, " in class ", pkg_name]);
        }

        pkg_name = p5get_class_for_method('AUTOLOAD', invocant._class_._ref_, {}) || p5get_class_for_method('AUTOLOAD', "UNIVERSAL", {});
        if (pkg_name) {
            p5pkg[pkg_name]["v_AUTOLOAD"] = invocant._class_._ref_ + "::" + method;
            return p5pkg[pkg_name]["AUTOLOAD"](list);
        }

        p5pkg.CORE.die(["method not found: ", method, " in class ", invocant._class_._ref_]);

    }

    // the invocant doesn't have a class

    if (typeof invocant === "string") {
        var aclass = p5make_package(invocant);
        return p5call(aclass, method, list);
    }

    p5pkg.CORE.die(["Can't call method ", method, " on unblessed reference"]);

}

p5make_package("main");
p5pkg["main"]["v_@"] = [];      // $@
p5pkg["main"]["List_#"] = [];   // @#
p5pkg["main"]["v_^O"] = isNode ? "node.js" : "javascript";
p5pkg["main"]["List_INC"] = [];
p5pkg["main"]["Hash_INC"] = {};
p5pkg["main"]["List_ARGV"] = [];
p5pkg["main"]["Hash_ENV"] = {};
if (isNode) {
    p5pkg["main"]["List_ARGV"] = process.argv.splice(2);
    p5pkg["main"]["Hash_ENV"]  = process.env;
    p5pkg["main"]["v_$"]       = process.pid;
} else if (typeof arguments === "object") {
    p5pkg["main"]["List_ARGV"] = arguments;
}

p5make_package("Perlito5");
p5make_package("Perlito5::IO");
p5make_package("Perlito5::Runtime");
p5make_package("Perlito5::Grammar");

function p5make_sub(pkg_name, sub_name, func) {
    p5pkg[pkg_name][sub_name] = func;
}

function p5set_local(namespace, name, sigil) {
    var v = name;
    if (sigil == "$") {
        v = "v_"+name;
    }
    p5LOCAL.push([namespace, v, namespace[v]]);
}

function p5cleanup_local(idx, value) {
    while (p5LOCAL.length > idx) {
        l = p5LOCAL.pop();
        l[0][l[1]] = l[2];
    }
    return value;
}

function p5HashRef(o) {
    this._hash_ = o;
    this._ref_ = "HASH";
    this.bool = function() { return 1 };
}

function p5ArrayRef(o) {
    this._array_ = o;
    this._ref_ = "ARRAY";
    this.bool = function() { return 1 };
}

function p5ScalarRef(o) {
    this._scalar_ = o;
    this._ref_ = "SCALAR";
    this.bool = function() { return 1 };
}

function p5GlobRef(o) {
    this._scalar_ = o;
    this._ref_ = "GLOB";
    this.bool = function() { return 1 };
}

if (isNode) {
    var fs = require("fs");
    p5make_sub("Perlito5::IO", "slurp", function(List__) {
        return fs.readFileSync(List__[0],"utf8");
    });
} else {
    p5make_sub("Perlito5::IO", "slurp", function(List__) {
        var filename = List__[0];
        if (typeof readFile == "function") {
            return readFile(filename);
        }
        if (typeof read == "function") {
            // v8
            return read(filename);
        }
        p5pkg.CORE.die(["Perlito5::IO::slurp() not implemented"]);
    });
}

p5context = function(List__, p5want) {
    if (p5want) {
        return p5list_to_a.apply(null, List__);
    }
    // scalar: return the last value
    var o = List__;
    while (o instanceof Array) {
        o =   o.length
            ? o[o.length-1]
            : null;
    }
    return o;
}

p5list_to_a = function() {
    var res = [];
    for (i = 0; i < arguments.length; i++) {
        var o = arguments[i];
        if  (  o == null
            || o._class_    // perl5 blessed reference
            || o._ref_      // perl5 un-blessed reference
            )
        {
            res.push(o);
        }
        else if (o instanceof Array) {
            // perl5 array
            for (j = 0; j < o.length; j++) {
                res.push(o[j]);
            }
        }
        else if (typeof o === "object") {
            // perl5 hash
            for(var j in o) {
                if (o.hasOwnProperty(j)) {
                    res.push(j);
                    res.push(o[j]);
                }
            }
        }
        else {
            // non-ref
            res.push(o);
        }
    }
    return res;
};

p5a_to_h = function(a) {
    var res = {};
    for (i = 0; i < a.length; i+=2) {
        res[p5str(a[i])] = a[i+1];
    }
    return res;
};

p5idx = function(a, i) {
    return i >= 0 ? i : a.length + i
};

p5str = function(o) {
    if (o == null) {
        return "";
    }
    if (typeof o === "object" && (o instanceof Array)) {
        return CORE.join(["", o]);
    }
    // if (typeof o.string === "function") {
    //     return o.string();
    // }
    if (typeof o == "number" && Math.abs(o) < 0.0001 && o != 0) {
        return o.toExponential().replace(/e-(\d)$/,"e-0$1");
    }
    if (typeof o === "boolean") {
        return o ? "1" : "";
    }
    if (typeof o !== "string") {
        return "" + o;
    }
    return o;
};

p5num = function(o) {
    if (o == null) {
        return 0;
    }
    if (typeof o === "object" && (o instanceof Array)) {
        return o.length;
    }
    // if (typeof o.num === "function") {
    //     return o.num();
    // }
    if (typeof o !== "number") {
        return parseFloat(p5str(o));
    }
    return o;
};

p5bool = function(o) {
    if (o) {
        if (typeof o === "boolean") {
            return o;
        }
        if (typeof o === "number") {
            return o;
        }
        if (typeof o === "string") {
            return o != "" && o != "0";
        }
        // if (typeof o.bool === "function") {
        //     return o.bool();
        // }
        if (typeof o.length === "number") {
            return o.length;
        }
        if (o instanceof Error) {
            return true;
        }
        for (var i in o) {
            return true;
        }
    }
    return false;
};

p5and = function(a, fb) {
    if (p5bool(a)) {
        return fb();
    }
    return a;
};

p5or = function(a, fb) {
    if (p5bool(a)) {
        return a;
    }
    return fb();
};

p5defined_or = function(a, fb) {
    if (a == null) {
        return fb();
    }
    return a;
};

p5cmp = function(a, b) {
    return a > b ? 1 : a < b ? -1 : 0 
};

p5complement = function(a) {
    return a < 0 ? ~a : 4294967295 - a
    // return a < 0 ? ~a : 18446744073709551615 - a
};

p5str_replicate = function(o, n) {
    n = p5num(n);
    return n ? Array(n + 1).join(o) : "";
};

p5str_inc = function(s) {
    s = p5str(s);
    if (s.length < 2) {
        if (s.match(/[012345678ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxy]/)) {
            return String.fromCharCode(s.charCodeAt(0) + 1);
        }
        if (s == "9") {
            return "10";
        }
        if (s == "Z") {
            return "AA";
        }
        if (s == "z") {
            return "aa";
        }
        return "1";
    }
    var c = p5str_inc(s.substr(s.length-1, 1));
    if (c.length == 1) {
        return s.substr(0, s.length-1) + c;
    }
    return p5str_inc(s.substr(0, s.length-1)) + c.substr(c.length-1, 1);
};

p5for = function(namespace, func, args, cont, label) {
    var _redo = false;
    var v_old = namespace["v__"];
    for(var i = 0; i < args.length; i++) {
        namespace["v__"] = args[i];
        try {
            func()
        }
        catch(err) {
            if (err instanceof p5_error && err.v == label) {
                if (err.type == 'last') { return }
                else if (err.type == 'redo') { i--; _redo = true }
                else if (err.type != 'next') { throw(err) }
            }
            else {
                throw(err)
            }
        }
        if (cont) {
            try {
                if (!_redo) { cont() }
            }
            catch(err) {
                if (err instanceof p5_error && err.v == label) {
                    if (err.type == 'last') { return }
                    else if (err.type == 'redo') { _redo = true }
                    else if (err.type != 'next') { throw(err) }
                }            
                else {
                    throw(err)
                }
            }
       }
   }
    namespace["v__"] = v_old;
};

p5for_lex = function(func, args, cont, label) {
    var _redo = false;
    for(var i = 0; i < args.length; i++) {
        try {
            func(args[i])
        }
        catch(err) {
            if (err instanceof p5_error && err.v == label) {
                if (err.type == 'last') { return }
                else if (err.type == 'redo') { i--; _redo = true }
                else if (err.type != 'next') { throw(err) }
            }            
            else {
                throw(err)
            }
        }
        if (cont) {
            try {
                if (!_redo) { cont() }
            }
            catch(err) {
                if (err instanceof p5_error && err.v == label) {
                    if (err.type == 'last') { return }
                    else if (err.type == 'redo') { _redo = true }
                    else if (err.type != 'next') { throw(err) }
                }            
                else {
                    throw(err)
                }
            }
        }
    }
};

p5while = function(func, cond, cont, label) {
    var _redo = false;
    while (_redo || p5bool(cond())) {
        _redo = false;
        try {
            func()
        }
        catch(err) {
            if (err instanceof p5_error && err.v == label) {
                if (err.type == 'last') { return }
                else if (err.type == 'redo') { _redo = true }
                else if (err.type != 'next') { throw(err) }
            }            
            else {
                throw(err)
            }
        }
        if (cont) {
            try {
                if (!_redo) { cont() }
            }
            catch(err) {
                if (err instanceof p5_error && err.v == label) {
                    if (err.type == 'last') { return }
                    else if (err.type == 'redo') { _redo = true }
                    else if (err.type != 'next') { throw(err) }
                }            
                else {
                    throw(err)
                }
            }
        }
    }
};

p5map = function(namespace, func, args) {
    var v_old = namespace["v__"];
    var out = [];
    for(var i = 0; i < args.length; i++) {
        namespace["v__"] = args[i];
        var o = p5list_to_a(func(1));
        for(var j = 0; j < o.length; j++) {
            out.push(o[j]);
        }
    }
    namespace["v__"] = v_old;
    return out;
};

p5grep = function(namespace, func, args) {
    var v_old = namespace["v__"];
    var out = [];
    for(var i = 0; i < args.length; i++) {
        namespace["v__"] = args[i];
        if (p5bool(func(0))) {
            out.push(args[i])
        }
    }
    namespace["v__"] = v_old;
    return out;
};

p5sort = function(namespace, func, args) {
    var a_old = namespace["v_a"];
    var b_old = namespace["v_b"];
    var out = 
        func == null
        ? args.sort()
        : args.sort(
            function(a, b) {
                namespace["v_a"] = a;
                namespace["v_b"] = b;
                return func(0);
            }
        );
    namespace["v_a"] = a_old;
    namespace["v_b"] = b_old;
    return out;
};

perl5_to_js = function( source, namespace, var_env_js ) {
    // CORE.say(["source: [" + source + "]"]);

    var strict_old = p5pkg["Perlito5"].v_STRICT;
    var var_env_js_old = p5pkg["Perlito5"].v_VAR;
    p5pkg["Perlito5"].v_VAR = var_env_js;

    var namespace_old = p5pkg["Perlito5"].v_PKG_NAME;
    p5pkg["Perlito5"].v_PKG_NAME = namespace;

    match = p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", [source, 0]);

    if ( !match || match._hash_.to != source.length ) {
        CORE.die(["Syntax error in eval near pos ", match._hash_.to]);
    }

    ast = p5pkg.CORE.bless([
        new p5HashRef({
            block:  p5pkg.CORE.bless([
                        new p5HashRef({
                            stmts:   p5pkg["Perlito5::Match"].flat([match])
                        }),
                        p5pkg["Perlito5::AST::Lit::Block"]
                    ])
        }),
        p5pkg["Perlito5::AST::Do"]
    ]);

    // CORE.say(["ast: [" + ast + "]"]);
    js_code = p5call(ast, "emit_javascript", []);
    // CORE.say(["js-source: [" + js_code + "]"]);

    p5pkg["Perlito5"].v_PKG_NAME = namespace_old;
    p5pkg["Perlito5"].v_VAR      = var_env_js_old;
    p5pkg["Perlito5"].v_STRICT = strict_old;
    return js_code;
}

//
//
// lib/Perlito5/Javascript/CORE.js
//
// CORE functions for "Perlito" Perl5-in-Javascript
//
// AUTHORS
//
// Flavio Soibelmann Glock  fglock@gmail.com
//
// COPYRIGHT
//
// Copyright 2009, 2010, 2011, 2012 by Flavio Soibelmann Glock and others.
//
// This program is free software; you can redistribute it and/or modify it
// under the same terms as Perl itself.
//
// See http://www.perl.com/perl/misc/Artistic.html

var CORE = p5pkg.CORE;

var isNode = typeof require != "undefined";
if (isNode) {
    CORE.print = function(List__) {
        var i;
        for (i = 0; i < List__.length; i++) {
            process.stdout.write(p5str(List__[i]));
        }
        return 1;
    }
} else {
    CORE.print = function(List__) {
        var i;
        for (i = 0; i < List__.length; i++) {
            write(p5str(List__[i]));
        }
        return 1;
    };
}

CORE.say = function(List__) {
    CORE.print(List__);
    return CORE.print(["\n"]);
};

CORE.die = function(List__) {
    var i;
    var s = "";
    for (i = 0; i < List__.length; i++) {
        s = s + p5str(List__[i]);
    }
    p5pkg["main"]["v_@"] = "Died: " + s;
    throw(new p5_error("die", "Died: " + s));
};

CORE.warn = function(List__) {
    var i;
    var s = "";
    for (i = 0; i < List__.length; i++) {
        s = s + p5str(List__[i]);
    }
    CORE.print(["Warning: " + s + "\n"]);
};

CORE.bless = function(List__) {
    var o        = List__[0];
    var pkg_name = List__[1];
    if (typeof pkg_name === "object") {
        // bless {}, Class
        o._class_ = pkg_name;
        return o;
    }
    if (!p5pkg.hasOwnProperty(pkg_name)) {
        p5make_package(pkg_name);
    }
    o._class_ = p5pkg[pkg_name];
    return o;
};

CORE.chr = function(List__) {
    var v = p5num(List__[0]);
    return String.fromCharCode(v >= 0 ? v : 65533);
};

CORE.ord = function(List__) {
    return p5str(List__[0]).charCodeAt(0);
};

CORE.oct = function(List__) {
    var v = List__[0];
    var b = v.substr(0,2);
    v = v.replace("_", "");
    if (b == "0b" || b == "0B") { return parseInt(v.substr(2), 2)  }
    if (b == "0x" || b == "0X") { return parseInt(v.substr(2), 16) }
    return parseInt(v, 8);
};

CORE.abs   = function(List__) { return Math.abs(List__[0]) };
CORE.exp   = function(List__) { return Math.exp(List__[0]) };
CORE.log   = function(List__) { return Math.log(List__[0]) };
CORE.cos   = function(List__) { return Math.cos(List__[0]) };
CORE.sin   = function(List__) { return Math.sin(List__[0]) };
CORE.sqrt  = function(List__) { return Math.sqrt(List__[0]) };
CORE.atan2 = function(List__) { return Math.atan2(List__[0], List__[1]) };
CORE.int   = function(List__) { return List__[0] > 0 ? Math.floor(List__[0]) : Math.ceil(List__[0]) };

CORE.rand = function(List__) {
    var v = p5num(List__[0]) || 1;
    return Math.random() * v;
};

CORE.lc      = function(List__) { return p5str(List__[0]).toLowerCase() };
CORE.uc      = function(List__) { return p5str(List__[0]).toUpperCase() };

CORE.lcfirst = function(List__) {
    var s = p5str(List__[0]);
    var c = s.length > 0 ? s.slice(0,1).toLowerCase() : "";
    s = s.length > 1 ? s.substr(1) : "";
    return c + s
};

CORE.ucfirst = function(List__) {
    var s = p5str(List__[0]);
    var c = s.length > 0 ? s.slice(0,1).toUpperCase() : "";
    s = s.length > 1 ? s.substr(1) : "";
    return c + s
};

CORE.quotemeta = function(List__) {
    var s = p5str(List__[0]);
    var out = [];
    for(var i = 0; i < s.length; i++) {
        if (s.substr(i, 1).match(/[^0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz]/)) {
            out.push(String.fromCharCode(92));
        }
        out.push(s.substr(i, 1));
    }
    return out.join("");       
};

CORE.substr = function(List__) {
    var expr        = List__[0];
    var offset      = List__[1];
    var length      = List__[2];
    var replacement = List__[3];
    if (length < 0) {
        var s = p5str(expr);
        length = s.length - offset + length;
    } 
    return p5str(expr).substr(offset, length);
};

CORE.values = function(List__, p5want) {
    var o = List__[0];
    delete o["_each_"];
    if (p5want) {
        if (o == null) {
            return [];
        };
        if (typeof o.values === "function") {
            return o.values();
        }
        var out = [];
        for (var i in o) {
            out.push(o[i]);
        }
        return out;
    }
    return CORE.keys(List__, p5want);
};

CORE.keys = function(List__, p5want) {
    var o = List__[0];
    delete o["_each_"];
    if (p5want) {
        if (o == null) {
            return [];
        }
        if (typeof o.keys === "function") {
            return o.keys();
        }
        var out = [];
        for (var i in o) {
            out.push(i);
        }
        return out;
    }
    else {
        if (o == null) {
            return 0;
        }
        if (typeof o.keys === "function") {
            return CORE.scalar([o.keys()]);
        }
        var out = 0;
        for (var i in o) {
            out++;
        }
        return out;
    }
};

CORE.each = function(List__, p5want) {
    var o = List__[0];
    if (o.hasOwnProperty("_each_")) {
        return o._each_(p5want)
    }
    var keys = CORE.keys([o], 1);
    var i = 0;
    o._each_ = function () {
        if (i < keys.length) {
            i++;
            return p5want ? [keys[i-1], o[keys[i-1]]] : keys[i-1];
        }
        i = 0;
        return p5want ? [] : null;
    };
    return o._each_(p5want);
};

CORE.reverse = function(List__) {
    var o = List__[0];
    if (o == null) {
        return "";
    }
    if (typeof o === "string") {
        return o.split("").reverse().join("")
    }
    var out = [];
    for(var i = 0; i < o.length; i++) {
        out.unshift(o[i]);
    }
    return out;
};

CORE.splice = function(List__, p5want) {
    var array  = List__.shift();
    // CORE.say([ array ]);
    var offset = p5num(List__.shift());
    var limit  = List__.length ? p5num(List__.shift()) : (array.length + 1);

    if (limit < 0) {
        limit = array.length + limit - 1;
    }

    var list = [offset, limit];
    for(var i = 0; i < List__.length; i++) {
        list = p5list_to_a( list, List__[i]);
    }

    out = array.splice.apply(array, list);
    // CORE.say([ CORE.join([":",array]), " ofs=", offset, " lim=", limit, " list=", list, " out=", CORE.join([":",out])  ]);
    return p5want ? out : out.pop();
};

CORE.pop = function(List__) {
    var o = List__[0];
    if (o.length == null) {
        return null;
    }
    return o.pop();
};

CORE.shift = function(List__) {
    var o = List__[0];
    if (o.length == null) {
        return null;
    }
    return o.shift();
};

CORE.push = function(List__) {
    var o = List__[0];
    var v = List__[1];
    for(var i = 0; i < v.length; i++) {
        o.push(v[i]);
    }
    return o.length;
};

CORE.unshift = function(List__) {
    var o = List__[0];
    var v = List__[1];
    for(var i = v.length-1; i >= 0; i--) {
        o.unshift(v[i]);
    }
    return o.length;
};

CORE.join = function(List__) {
    var s = List__[0];
    var o = List__[1];
    return o.join(s);
};

CORE.index = function(List__) {
    var o = List__[0];
    var s = List__[1];
    try {
        return o.indexOf(s, p5num(List__[2]));
    }
    catch(err) {
        return -1;
    }
};
CORE.rindex = function(List__) {
    var o = List__[0];
    var s = List__[1];
    try {
        if (List__.length > 2) {
            var i = p5num(List__[2]);
            if (i < 0) {
                if (s.length == 0) {
                    return 0;
                }
                return -1;
            }
            return o.lastIndexOf(s, i);
        }
        return o.lastIndexOf(s);
    }
    catch(err) {
        return -1;
    }
};

CORE.length = function(List__) {
    var o = List__[0];
    if (typeof o.string === "function") {
        return o.string().length;
    }
    return o.length;
};

CORE.pack    = function(List__) { CORE.warn([ "CORE::pack not implemented" ]) };
CORE.unpack  = function(List__) { CORE.warn([ "CORE::unpack not implemented" ]) };

CORE.ref = function(List__) {
    var o = List__[0];
    if (o == null) {
        return "";
    }
    if (o._class_ && typeof o._class_._ref_ === "string") {
        // blessed reference
        return o._class_._ref_;
    }
    if (typeof o._ref_ === "string") {
        // un-blessed reference
        return o._ref_;
    }
    if (typeof o === "function") {
        return "CODE";
    }
    return "";
};

CORE.split = function(List__) {
    var pattern = List__[0];
    var s       = List__[1];
    var limit   = List__[2];
    if (typeof pattern === "string") {
        if (pattern == " ") {
            var res = [];
            for (var i_ = 0, a_ = s.split(/(?: |\n)+/); i_ < a_.length ; i_++) {
                if (a_[i_] != "") {
                    res.push(a_[i_])
                }
            }
            return res;
        }
        return s.split(pattern);
    }
    CORE.die(["not implemented"]);
};

CORE.prototype = function(List__, data) {
    var name = List__[0];
    // TODO - fully qualify "name" using information from "data"
    // XXX - lookup in CORE::GLOBAL?
    p5pkg["Perlito5"].v_PROTO._hash_[name] || p5pkg["Perlito5"].v_CORE_PROTO._hash_[name]
};

//
//
// lib/Perlito5/Javascript/IO.js
//
// I/O functions for "Perlito" Perl5-in-Javascript
//
// AUTHORS
//
// Flavio Soibelmann Glock  fglock@gmail.com
//
// COPYRIGHT
//
// Copyright 2009, 2010, 2011, 2012 by Flavio Soibelmann Glock and others.
//
// This program is free software; you can redistribute it and/or modify it
// under the same terms as Perl itself.
//
// See http://www.perl.com/perl/misc/Artistic.html

var isNode = typeof require != "undefined";
if (isNode) {

    var fs = require("fs");

    p5atime = function(s) {
        try {
            var stat = fs.statSync(s); return stat["atime"];
        }
        catch(err) {
            return '';
        }
    };
    p5mtime = function(s) {
        try {
            var stat = fs.statSync(s); return stat["mtime"];
        }
        catch(err) {
            return '';
        }
    };
    p5ctime = function(s) {
        try {
            var stat = fs.statSync(s); return stat["ctime"];
        }
        catch(err) {
            return '';
        }
    };
    p5size = function(s) {
        try {
            var stat = fs.statSync(s); return stat["size"];
        }
        catch(err) {
            return '';
        }
    };
    p5is_file = function(s) {
        try {
            var stat = fs.statSync(s); return stat.isFile() ? 1 : 0;
        }
        catch(err) {
            return '';
        }
    };
    p5is_directory = function(s) {
        try {
            var stat = fs.statSync(s); return stat.isDirectory() ? 1 : 0;
        }
        catch(err) {
            return '';
        }
    };
    p5file_exists = function(s) {
        return p5is_file(s) || p5is_directory(s);
    };

    CORE.chdir = function(List__) {
        try {
            process.chdir(p5str(List__[0]));
            return 1;
        }
        catch(err) {
            return '';
        }
    };

    CORE.close = function(List__) {
        try {
            fs.closeSync(p5str(List__[0]));
            return 1;
        }
        catch(err) {
            p5pkg["main"]["v_!"] = err;
            return '';
        }
    };

    CORE.exit = function(List__) {
        process.exit(List__[0]);
    };

    CORE.rename = function(List__) {
        try {
            fs.renameSync(p5str(List__[0]), p5str(List__[1]));
            return 1;
        }
        catch(err) {
            p5pkg["main"]["v_!"] = err;
            return '';
        }
    };

    CORE.unlink = function(List__) {
        var count = 0;
        try {
            for(var i = 0; i < List__.length; i++) {
                fs.unlinkSync(p5str(List__[i]));
                count++;
            }
            return count;
        }
        catch(err) {
            p5pkg["main"]["v_!"] = err;
            return count;
        }
    };

}

/**
 * Copyright (c) 2010 Jakob Westhoff
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

CORE.sprintf = function(List__) {
    var format = List__[0];
    var list = List__[1];

    // Check for format definition
    if ( typeof format != 'string' ) {
        CORE.die(["sprintf: The first arguments need to be a valid format string."]);
    }
    
    /**
     * Define the regex to match a formating string
     * The regex consists of the following parts:
     * percent sign to indicate the start
     * (optional) sign specifier
     * (optional) padding specifier
     * (optional) alignment specifier
     * (optional) width specifier
     * (optional) precision specifier
     * type specifier:
     *  % - literal percent sign
     *  b - binary number
     *  c - ASCII character represented by the given value
     *  d - signed decimal number
     *  f - floating point value
     *  o - octal number
     *  s - string
     *  x - hexadecimal number (lowercase characters)
     *  X - hexadecimal number (uppercase characters)
     */
    var r = new RegExp( /%(\+)?([0 ]|'(.))?(-)?([0-9]+)?(\.([0-9]+))?([%bcdfosxX])/g );

    /**
     * Each format string is splitted into the following parts:
     * 0: Full format string
     * 1: sign specifier (+)
     * 2: padding specifier (0/<space>/'<any char>)
     * 3: if the padding character starts with a ' this will be the real 
     *    padding character
     * 4: alignment specifier
     * 5: width specifier
     * 6: precision specifier including the dot
     * 7: precision specifier without the dot
     * 8: type specifier
     */
    var parts      = [];
    var paramIndex = 0;
    while ( part = r.exec( format ) ) {
        // Check if an input value has been provided, for the current
        // format string
        if ( paramIndex >= list.length ) {
            CORE.die(["sprintf: At least one argument was missing."]);
        }

        parts[parts.length] = {
            /* beginning of the part in the string */
            begin: part.index,
            /* end of the part in the string */
            end: part.index + part[0].length,
            /* force sign */
            sign: ( part[1] == '+' ),
            /* is the given data negative */
            negative: ( parseInt( list[paramIndex] ) < 0 ) ? true : false,
            /* padding character (default: <space>) */
            padding: ( part[2] == undefined )
                     ? ( ' ' ) /* default */
                     : ( ( part[2].substring( 0, 1 ) == "'" ) 
                         ? ( part[3] ) /* use special char */
                         : ( part[2] ) /* use normal <space> or zero */
                       ),
            /* should the output be aligned left?*/
            alignLeft: ( part[4] == '-' ),
            /* width specifier (number or false) */
            width: ( part[5] != undefined ) ? part[5] : false,
            /* precision specifier (number or false) */
            precision: ( part[7] != undefined ) ? part[7] : false,
            /* type specifier */
            type: part[8],
            /* the given data associated with this part converted to a string */
            data: ( part[8] != '%' ) ? String ( list[paramIndex++] ) : false
        };
    }

    var newString = "";
    var start = 0;
    // Generate our new formated string
    for( var i=0; i<parts.length; ++i ) {
        // Add first unformated string part
        newString += format.substring( start, parts[i].begin );
        
        // Mark the new string start
        start = parts[i].end;

        // Create the appropriate preformat substitution
        // This substitution is only the correct type conversion. All the
        // different options and flags haven't been applied to it at this
        // point
        var preSubstitution = "";
        switch ( parts[i].type ) {
            case '%':
                preSubstitution = "%";
            break;
            case 'b':
                preSubstitution = Math.abs( parseInt( parts[i].data ) ).toString( 2 );
            break;
            case 'c':
                preSubstitution = String.fromCharCode( Math.abs( parseInt( parts[i].data ) ) );
            break;
            case 'd':
                preSubstitution = String( Math.abs( parseInt( parts[i].data ) ) );
            break;
            case 'f':
                preSubstitution = ( parts[i].precision == false )
                                  ? ( String( ( Math.abs( parseFloat( parts[i].data ) ) ) ) )
                                  : ( Math.abs( parseFloat( parts[i].data ) ).toFixed( parts[i].precision ) );
            break;
            case 'o':
                preSubstitution = Math.abs( parseInt( parts[i].data ) ).toString( 8 );
            break;
            case 's':
                preSubstitution = parts[i].data.substring( 0, parts[i].precision ? parts[i].precision : parts[i].data.length ); /* Cut if precision is defined */
            break;
            case 'x':
                preSubstitution = Math.abs( parseInt( parts[i].data ) ).toString( 16 ).toLowerCase();
            break;
            case 'X':
                preSubstitution = Math.abs( parseInt( parts[i].data ) ).toString( 16 ).toUpperCase();
            break;
            default:
                throw 'sprintf: Unknown type "' + parts[i].type + '" detected. This should never happen. Maybe the regex is wrong.';
        }

        // The % character is a special type and does not need further processing
        if ( parts[i].type ==  "%" ) {
            newString += preSubstitution;
            continue;
        }

        // Modify the preSubstitution by taking sign, padding and width
        // into account

        // Pad the string based on the given width
        if ( parts[i].width != false ) {
            // Padding needed?
            if ( parts[i].width > preSubstitution.length ) 
            {
                var origLength = preSubstitution.length;
                for( var j = 0; j < parts[i].width - origLength; ++j ) 
                {
                    preSubstitution = ( parts[i].alignLeft == true ) 
                                      ? ( preSubstitution + parts[i].padding )
                                      : ( parts[i].padding + preSubstitution );
                }
            }
        }

        // Add a sign symbol if neccessary or enforced, but only if we are
        // not handling a string
        if ( parts[i].type == 'b' 
          || parts[i].type == 'd' 
          || parts[i].type == 'o' 
          || parts[i].type == 'f' 
          || parts[i].type == 'x' 
          || parts[i].type == 'X' ) {
            if ( parts[i].negative == true ) {
                preSubstitution = "-" + preSubstitution;
            }
            else if ( parts[i].sign == true ) {
                preSubstitution = "+" + preSubstitution;
            }
        }

        // Add the substitution to the new string
        newString += preSubstitution;
    }

    // Add the last part of the given format string, which may still be there
    newString += format.substring( start, format.length );

    return newString;
};

CORE.printf = function(List__) {
    return CORE.print([ CORE.sprintf(List__) ]);
};

var p5want = null;
var p5100 = p5pkg['main'];
(function () {
	var p5101 = p5make_package("Perlito5");
	(function () {
		var p5102 = p5make_package("Perlito5::strict");
		p5make_sub("Perlito5::strict", "import", function (List__, p5want) {
				return ((p5pkg["Perlito5"]["v_STRICT"] = (1)));
		});
		p5make_sub("Perlito5::strict", "unimport", function (List__, p5want) {
				return ((p5pkg["Perlito5"]["v_STRICT"] = (0)));
		});
		1;
	})()
;
	// use Perlito5::strict
;
	(function () {
		var p5103 = p5make_package("Perlito5::warnings");
		p5make_sub("Perlito5::warnings", "import", function (List__, p5want) {
				return ((p5pkg["Perlito5"]["v_WARNINGS"] = (1)));
		});
		p5make_sub("Perlito5::warnings", "unimport", function (List__, p5want) {
				return ((p5pkg["Perlito5"]["v_WARNINGS"] = (0)));
		});
		1;
	})()
;
	// use Perlito5::warnings
;
	(function () {
		null;
		var p5104 = p5make_package("Perlito5::Match");
		p5make_sub("Perlito5::Match", "flat", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				return (( ((v_self || (v_self = new p5HashRef({})))._hash_['capture'] != null) ? (v_self || (v_self = new p5HashRef({})))._hash_['capture'] : p5pkg["Perlito5::Match"].substr([(v_self || (v_self = new p5HashRef({})))._hash_['str'], (v_self || (v_self = new p5HashRef({})))._hash_['from'], p5context([(p5num((v_self || (v_self = new p5HashRef({})))._hash_['to']) - p5num((v_self || (v_self = new p5HashRef({})))._hash_['from']))], 0)], p5want)));
		});
		1;
	})()
;
	// use Perlito5::Match
;
	(function () {
		null;
		var p5105 = p5make_package("Perlito5::AST::CompUnit");
		p5make_sub("Perlito5::AST::CompUnit", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::CompUnit"].shift([List__])));
				return (p5pkg["Perlito5::AST::CompUnit"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::CompUnit", "name", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['name']);
		});
		p5make_sub("Perlito5::AST::CompUnit", "body", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['body']);
		});
		var p5106 = p5make_package("Perlito5::AST::Val::Int");
		p5make_sub("Perlito5::AST::Val::Int", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Val::Int"].shift([List__])));
				return (p5pkg["Perlito5::AST::Val::Int"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Val::Int", "int", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['int']);
		});
		var p5107 = p5make_package("Perlito5::AST::Val::Num");
		p5make_sub("Perlito5::AST::Val::Num", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Val::Num"].shift([List__])));
				return (p5pkg["Perlito5::AST::Val::Num"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Val::Num", "num", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['num']);
		});
		var p5108 = p5make_package("Perlito5::AST::Val::Buf");
		p5make_sub("Perlito5::AST::Val::Buf", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Val::Buf"].shift([List__])));
				return (p5pkg["Perlito5::AST::Val::Buf"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Val::Buf", "buf", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['buf']);
		});
		var p5109 = p5make_package("Perlito5::AST::Lit::Block");
		p5make_sub("Perlito5::AST::Lit::Block", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Lit::Block"].shift([List__])));
				return (p5pkg["Perlito5::AST::Lit::Block"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Lit::Block", "sig", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['sig']);
		});
		p5make_sub("Perlito5::AST::Lit::Block", "stmts", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['stmts']);
		});
		var p5110 = p5make_package("Perlito5::AST::Index");
		p5make_sub("Perlito5::AST::Index", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Index"].shift([List__])));
				return (p5pkg["Perlito5::AST::Index"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Index", "obj", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['obj']);
		});
		p5make_sub("Perlito5::AST::Index", "index_exp", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['index_exp']);
		});
		var p5111 = p5make_package("Perlito5::AST::Lookup");
		p5make_sub("Perlito5::AST::Lookup", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Lookup"].shift([List__])));
				return (p5pkg["Perlito5::AST::Lookup"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Lookup", "obj", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['obj']);
		});
		p5make_sub("Perlito5::AST::Lookup", "index_exp", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['index_exp']);
		});
		p5make_sub("Perlito5::AST::Lookup", "autoquote", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::AST::Lookup"].shift([List__])));
				var v_index = null;
				(v_index = (p5pkg["Perlito5::AST::Lookup"].shift([List__])));
				if ( (p5bool(p5call(v_index, "isa", ['Perlito5::AST::Apply'], 0)) && p5bool((v_index || (v_index = new p5HashRef({})))._hash_['bareword'])) ) {
					throw(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', (p5str(( p5bool((v_index || (v_index = new p5HashRef({})))._hash_['namespace']) ? (p5str((v_index || (v_index = new p5HashRef({})))._hash_['namespace']) + '::') : '')) + p5str((v_index || (v_index = new p5HashRef({})))._hash_['code']))], p5want));
				};
				return (p5context([v_index], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var p5112 = p5make_package("Perlito5::AST::Var");
		p5make_sub("Perlito5::AST::Var", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Var"].shift([List__])));
				return (p5pkg["Perlito5::AST::Var"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Var", "sigil", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['sigil']);
		});
		p5make_sub("Perlito5::AST::Var", "namespace", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['namespace']);
		});
		p5make_sub("Perlito5::AST::Var", "name", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['name']);
		});
		p5make_sub("Perlito5::AST::Var", "plain_name", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::AST::Var"].shift([List__])));
				if ( p5bool(p5call(v_self, "namespace", [], 0)) ) {
					throw(p5context([(p5str(p5call(v_self, "namespace", [], 0)) + '::' + p5str(p5call(v_self, "name", [], 0)))], p5want));
				};
				return (p5call(v_self, "name", [], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var p5113 = p5make_package("Perlito5::AST::Proto");
		p5make_sub("Perlito5::AST::Proto", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Proto"].shift([List__])));
				return (p5pkg["Perlito5::AST::Proto"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Proto", "name", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['name']);
		});
		var p5114 = p5make_package("Perlito5::AST::Call");
		p5make_sub("Perlito5::AST::Call", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Call"].shift([List__])));
				return (p5pkg["Perlito5::AST::Call"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Call", "invocant", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['invocant']);
		});
		p5make_sub("Perlito5::AST::Call", "method", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['method']);
		});
		p5make_sub("Perlito5::AST::Call", "arguments", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['arguments']);
		});
		var p5115 = p5make_package("Perlito5::AST::Apply");
		p5make_sub("Perlito5::AST::Apply", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
				return (p5pkg["Perlito5::AST::Apply"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Apply", "code", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code']);
		});
		p5make_sub("Perlito5::AST::Apply", "arguments", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['arguments']);
		});
		p5make_sub("Perlito5::AST::Apply", "namespace", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['namespace']);
		});
		var p5116 = p5make_package("Perlito5::AST::If");
		p5make_sub("Perlito5::AST::If", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::If"].shift([List__])));
				return (p5pkg["Perlito5::AST::If"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::If", "cond", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['cond']);
		});
		p5make_sub("Perlito5::AST::If", "body", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['body']);
		});
		p5make_sub("Perlito5::AST::If", "otherwise", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['otherwise']);
		});
		var p5117 = p5make_package("Perlito5::AST::When");
		p5make_sub("Perlito5::AST::When", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::When"].shift([List__])));
				return (p5pkg["Perlito5::AST::When"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::When", "cond", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['cond']);
		});
		p5make_sub("Perlito5::AST::When", "body", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['body']);
		});
		var p5118 = p5make_package("Perlito5::AST::While");
		p5make_sub("Perlito5::AST::While", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::While"].shift([List__])));
				return (p5pkg["Perlito5::AST::While"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::While", "init", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['init']);
		});
		p5make_sub("Perlito5::AST::While", "cond", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['cond']);
		});
		p5make_sub("Perlito5::AST::While", "continue", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['continue']);
		});
		p5make_sub("Perlito5::AST::While", "body", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['body']);
		});
		var p5119 = p5make_package("Perlito5::AST::For");
		p5make_sub("Perlito5::AST::For", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::For"].shift([List__])));
				return (p5pkg["Perlito5::AST::For"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::For", "cond", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['cond']);
		});
		p5make_sub("Perlito5::AST::For", "continue", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['continue']);
		});
		p5make_sub("Perlito5::AST::For", "body", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['body']);
		});
		var p5120 = p5make_package("Perlito5::AST::Decl");
		p5make_sub("Perlito5::AST::Decl", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Decl"].shift([List__])));
				return (p5pkg["Perlito5::AST::Decl"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Decl", "decl", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['decl']);
		});
		p5make_sub("Perlito5::AST::Decl", "type", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['type']);
		});
		p5make_sub("Perlito5::AST::Decl", "var", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['var']);
		});
		var p5121 = p5make_package("Perlito5::AST::Sig");
		p5make_sub("Perlito5::AST::Sig", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Sig"].shift([List__])));
				return (p5pkg["Perlito5::AST::Sig"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Sig", "positional", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['positional']);
		});
		var p5122 = p5make_package("Perlito5::AST::Sub");
		p5make_sub("Perlito5::AST::Sub", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Sub"].shift([List__])));
				return (p5pkg["Perlito5::AST::Sub"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Sub", "name", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['name']);
		});
		p5make_sub("Perlito5::AST::Sub", "sig", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['sig']);
		});
		p5make_sub("Perlito5::AST::Sub", "block", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['block']);
		});
		var p5123 = p5make_package("Perlito5::AST::Do");
		p5make_sub("Perlito5::AST::Do", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Do"].shift([List__])));
				return (p5pkg["Perlito5::AST::Do"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Do", "block", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['block']);
		});
		var p5124 = p5make_package("Perlito5::AST::Use");
		p5make_sub("Perlito5::AST::Use", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::AST::Use"].shift([List__])));
				return (p5pkg["Perlito5::AST::Use"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		p5make_sub("Perlito5::AST::Use", "mod", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['mod']);
		});
		p5make_sub("Perlito5::AST::Use", "code", function (List__, p5want) {
				return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code']);
		});
	})()
;
	(function () {
		var p5125 = p5make_package("Perlito5::Dumper");
		p5make_sub("Perlito5::Dumper", "Dumper", function (List__, p5want) {
			try {
				var v_obj = null;
				(v_obj = (List__[p5idx(List__,0)]));
				var v_level = null;
				(v_level = (p5or(List__[p5idx(List__,1)], function () { return 0 })));
				if ( !( (v_obj != null)) ) {
					throw(p5context(['undef'], p5want));
				};
				var v_ref = null;
				(v_ref = (p5pkg["Perlito5::Dumper"].ref([v_obj], 0)));
				var v_tab = null;
				(v_tab = (p5str_replicate('    ', v_level)));
				var v_tab1 = null;
				(v_tab1 = ((p5str(v_tab) + '    ')));
				if ( (p5str(v_ref) == 'ARRAY') ) {
					throw(p5context([('[' + String.fromCharCode(10) + p5pkg["Perlito5::Dumper"].join(['', p5list_to_a(p5map(p5pkg["Perlito5::Dumper"], function (p5want) {
	return (p5context([(p5str(v_tab1) + p5str(p5pkg["Perlito5::Dumper"].Dumper([p5pkg["Perlito5::Dumper"]["v__"], (p5num(v_level) + 1)], 0)) + ',' + String.fromCharCode(10))], p5want));
}, p5list_to_a((v_obj || (v_obj = new p5ArrayRef([])))._array_)))], 0) + p5str(v_tab) + ']')], p5want));
				}
				else {
					if ( (p5str(v_ref) == 'HASH') ) {
						throw(p5context([('{' + String.fromCharCode(10) + p5pkg["Perlito5::Dumper"].join(['', p5list_to_a(p5map(p5pkg["Perlito5::Dumper"], function (p5want) {
	return (p5context([(p5str(v_tab1) + (String.fromCharCode(39) + p5str(p5pkg["Perlito5::Dumper"]["v__"]) + String.fromCharCode(39) + ' => ') + p5str(p5pkg["Perlito5::Dumper"].Dumper(p5list_to_a((v_obj || (v_obj = new p5HashRef({})))._hash_[p5pkg["Perlito5::Dumper"]["v__"]], (p5num(v_level) + 1)), 0)) + ',' + String.fromCharCode(10))], p5want));
}, p5list_to_a(p5sort(p5pkg["Perlito5::Dumper"], null, p5list_to_a(p5pkg["Perlito5::Dumper"].keys([(v_obj || (v_obj = new p5HashRef({})))._hash_], 1))))))], 0) + p5str(v_tab) + '}')], p5want));
					}
					else {
						if ( p5bool(v_ref) ) {
							throw(p5context([('bless({' + String.fromCharCode(10) + p5pkg["Perlito5::Dumper"].join(['', p5list_to_a(p5map(p5pkg["Perlito5::Dumper"], function (p5want) {
	return (p5context([(p5str(v_tab1) + (String.fromCharCode(39) + p5str(p5pkg["Perlito5::Dumper"]["v__"]) + String.fromCharCode(39) + ' => ') + p5str(p5pkg["Perlito5::Dumper"].Dumper(p5list_to_a((v_obj || (v_obj = new p5HashRef({})))._hash_[p5pkg["Perlito5::Dumper"]["v__"]], (p5num(v_level) + 1)), 0)) + ',' + String.fromCharCode(10))], p5want));
}, p5list_to_a(p5sort(p5pkg["Perlito5::Dumper"], null, p5list_to_a(p5pkg["Perlito5::Dumper"].keys([(v_obj || (v_obj = new p5HashRef({})))._hash_], 1))))))], 0) + p5str(v_tab) + ('}, ' + String.fromCharCode(39) + p5str(v_ref) + String.fromCharCode(39) + ')'))], p5want));
						};
					};
				};
				return (p5context([(String.fromCharCode(39) + p5str(v_obj) + String.fromCharCode(39))], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		null;
		// use Perlito5::AST
;
		// use Perlito5::Dumper
;
		var p5126 = p5make_package("Perlito5::Javascript");
		p5for_lex(function () {
				var v_label_count = null;
				(v_label_count = (100));
				var Hash_label = {};
				p5make_sub("Perlito5::Javascript", "pkg", function (List__, p5want) {
						return (p5context([('p5pkg["' + p5str(p5pkg["Perlito5"]["v_PKG_NAME"]) + '"]')], p5want));
				});
				p5make_sub("Perlito5::Javascript", "pkg_new_var", function (List__, p5want) {
						return ((Hash_label[p5pkg["Perlito5"]["v_PKG_NAME"]] = ('p5' + p5str((v_label_count)++))));
				});
				p5make_sub("Perlito5::Javascript", "get_label", function (List__, p5want) {
						return ((v_label_count)++);
				});
				p5make_sub("Perlito5::Javascript", "tab", function (List__, p5want) {
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						return (p5str_replicate(String.fromCharCode(9), v_level));
				});
				// our p5pkg["Perlito5::Javascript"]["Hash_op_prefix_js_str"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_prefix_js_str"] = {'prefix:<-A>' : 'p5atime', 'prefix:<-C>' : 'p5ctime', 'prefix:<-M>' : 'p5mtime', 'prefix:<-d>' : 'p5is_directory', 'prefix:<-e>' : 'p5file_exists', 'prefix:<-f>' : 'p5is_file', 'prefix:<-s>' : 'p5size'});
				// our p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_str"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_str"] = {'infix:<eq>' : ' == ', 'infix:<ne>' : ' != ', 'infix:<le>' : ' <= ', 'infix:<ge>' : ' >= '});
				// our p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_num"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_num"] = {'infix:<==>' : ' == ', 'infix:<!=>' : ' != ', 'infix:<+>' : ' + ', 'infix:<->' : ' - ', 'infix:<*>' : ' * ', 'infix:</>' : ' / ', 'infix:<%>' : ' % ', 'infix:<>>' : ' > ', 'infix:<<>' : ' < ', 'infix:<>=>' : ' >= ', 'infix:<<=>' : ' <= ', 'infix:<&>' : ' & ', 'infix:<|>' : ' | ', 'infix:<^>' : ' ^ ', 'infix:<>>>' : ' >>> ', 'infix:<<<>' : ' << '});
				// our p5pkg["Perlito5::Javascript"]["Hash_op_to_bool"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_to_bool"] = p5a_to_h(p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
						return ((p5context([p5pkg["Perlito5::Javascript"]["v__"], 1], p5want)));
					}, ['prefix:<!>', 'infix:<!=>', 'infix:<==>', 'infix:<<=>', 'infix:<>=>', 'infix:<>>', 'infix:<<>', 'infix:<eq>', 'infix:<ne>', 'infix:<ge>', 'infix:<le>', 'prefix:<not>', 'exists', 'defined']))));
				// our p5pkg["Perlito5::Javascript"]["Hash_op_to_str"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_to_str"] = p5a_to_h(p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
						return ((p5context([p5pkg["Perlito5::Javascript"]["v__"], 1], p5want)));
					}, ['substr', 'join', 'list:<.>', 'chr']))));
				// our p5pkg["Perlito5::Javascript"]["Hash_op_to_num"]
				(p5pkg["Perlito5::Javascript"]["Hash_op_to_num"] = p5a_to_h(p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
						return ((p5context([p5pkg["Perlito5::Javascript"]["v__"], 1], p5want)));
					}, ['length', 'index', 'ord', 'oct', 'infix:<->', 'infix:<+>', 'infix:<*>', 'infix:</>', 'infix:<%>', 'infix:<**>']))));
				var Hash_safe_char = {};
				(Hash_safe_char = p5a_to_h([' ', 1, '!', 1, '"', 1, '#', 1, '$', 1, '%', 1, '&', 1, '(', 1, ')', 1, '*', 1, '+', 1, ',', 1, '-', 1, '.', 1, '/', 1, ':', 1, ';', 1, '<', 1, '=', 1, '>', 1, '?', 1, '@', 1, '[', 1, ']', 1, '^', 1, '_', 1, '`', 1, '{', 1, '|', 1, '}', 1, '~', 1]));
				p5make_sub("Perlito5::Javascript", "escape_string", function (List__, p5want) {
					try {
						var v_s = null;
						(v_s = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var List_out = [];
						var v_tmp = null;
						(v_tmp = (''));
						if ( (p5str(v_s) == '') ) {
							throw(p5context([String.fromCharCode(39) + String.fromCharCode(39)], p5want));
						};
						p5for_lex(function (v_i) {
								var v_c = null;
								(v_c = (p5pkg["Perlito5::Javascript"].substr([v_s, v_i, 1], 0)));
								if ( (((((p5str(v_c) >= 'a') && (p5str(v_c) <= 'z')) || ((p5str(v_c) >= 'A') && (p5str(v_c) <= 'Z'))) || ((p5str(v_c) >= '0') && (p5str(v_c) <= '9'))) || (Hash_safe_char).hasOwnProperty(v_c)) ) {
									(v_tmp = ((p5str(v_tmp) + p5str(v_c))));
								}
								else {
									if ( (p5str(v_tmp) != '') ) {
										p5pkg["Perlito5::Javascript"].push([List_out, [(String.fromCharCode(39) + p5str(v_tmp) + String.fromCharCode(39))]], null);
									};
									p5pkg["Perlito5::Javascript"].push([List_out, [('String.fromCharCode(' + p5str(p5pkg["Perlito5::Javascript"].ord([v_c], 0)) + ')')]], null);
									(v_tmp = (''));
								};
							}, p5list_to_a((function (a) { for (var i=0, l=(p5pkg["Perlito5::Javascript"].length([v_s], 0) - 1); i<=l; ++i){ a.push(i) }; return a })([])), false, "");
						if ( (p5str(v_tmp) != '') ) {
							p5pkg["Perlito5::Javascript"].push([List_out, [(String.fromCharCode(39) + p5str(v_tmp) + String.fromCharCode(39))]], null);
						};
						return (p5context([p5pkg["Perlito5::Javascript"].join([' + ', p5list_to_a(List_out)], p5want)], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "to_str", function (List__, p5want) {
					try {
						var v_cond = null;
						(v_cond = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = ('scalar'));
						if ( (((p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_cond, "code", [], 0)) == 'circumfix:<( )>')) && p5bool((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'])) && p5bool(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)) ) {
							throw(p5pkg["Perlito5::Javascript"].to_str(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), p5want));
						};
						if ( (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Val::Buf'], 0)) || (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && (p5pkg["Perlito5::Javascript"]["Hash_op_to_str"]).hasOwnProperty(p5call(v_cond, "code", [], p5want)))) ) {
							throw(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], p5want))
						}
						
						else {
							throw(p5context([('p5str(' + p5str(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], 0)) + ')')], p5want))
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "to_num", function (List__, p5want) {
					try {
						var v_cond = null;
						(v_cond = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = ('scalar'));
						if ( ((p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Val::Int'], 0)) || p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Val::Num'], 0))) || (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && (p5pkg["Perlito5::Javascript"]["Hash_op_to_num"]).hasOwnProperty(p5call(v_cond, "code", [], p5want)))) ) {
							throw(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], p5want))
						}
						
						else {
							throw(p5context([('p5num(' + p5str(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], 0)) + ')')], p5want))
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "to_bool", function (List__, p5want) {
					try {
						var v_cond = null;
						(v_cond = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = ('scalar'));
						if ( (((p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_cond, "code", [], 0)) == 'circumfix:<( )>')) && p5bool((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'])) && p5bool(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)) ) {
							throw(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), p5want));
						};
						if ( (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && ((p5str(p5call(v_cond, "code", [], 0)) == 'infix:<&&>') || (p5str(p5call(v_cond, "code", [], 0)) == 'infix:<and>'))) ) {
							throw(p5context([('(' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), 0)) + ' && ' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)], v_level), 0)) + ')')], p5want));
						};
						if ( (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && ((p5str(p5call(v_cond, "code", [], 0)) == 'infix:<||>') || (p5str(p5call(v_cond, "code", [], 0)) == 'infix:<or>'))) ) {
							throw(p5context([('(' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), 0)) + ' || ' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] || ((v_cond || (v_cond = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)], v_level), 0)) + ')')], p5want));
						};
						if ( ((p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Val::Int'], 0)) || p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Val::Num'], 0))) || (p5bool(p5call(v_cond, "isa", ['Perlito5::AST::Apply'], 0)) && (p5pkg["Perlito5::Javascript"]["Hash_op_to_bool"]).hasOwnProperty(p5call(v_cond, "code", [], p5want)))) ) {
							throw(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], p5want))
						}
						
						else {
							throw(p5context([('p5bool(' + p5str(p5call(v_cond, "emit_javascript", [v_level, v_wantarray], 0)) + ')')], p5want))
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "is_scalar", function (List__, p5want) {
						return (p5and(p5and(p5and(p5and(p5and(!( p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Val::Int'], 0))), function () { return !( p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Val::Num'], 0))) }), function () { return !( p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Val::Buf'], 0))) }), function () { return !( p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Sub'], 0))) }), function () { return !( (p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Var'], 0)) && (p5str((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['sigil']) == '$'))) }), function () { return !( (p5bool(p5call(List__[p5idx(List__,0)], "isa", ['Perlito5::AST::Apply'], 0)) && ((((p5pkg["Perlito5::Javascript"]["Hash_op_to_str"]).hasOwnProperty((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code']) || (p5pkg["Perlito5::Javascript"]["Hash_op_to_num"]).hasOwnProperty((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code'])) || (p5pkg["Perlito5::Javascript"]["Hash_op_to_bool"]).hasOwnProperty((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code'])) || (p5str((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['code']) == 'prefix:<' + String.fromCharCode(92) + '>')))) }));
				});
				p5make_sub("Perlito5::Javascript", "to_list", function (List__, p5want) {
					try {
						var v_items = null;
						(v_items = (p5pkg["Perlito5::Javascript"].to_list_preprocess(p5list_to_a(List__[p5idx(List__,0)]), 0)));
						var v_level = null;
						(v_level = (List__[p5idx(List__,1)]));
						var v_literal_type = null;
						(v_literal_type = (p5or(List__[p5idx(List__,2)], function () { return 'array' })));
						var v_wantarray = null;
						(v_wantarray = ('list'));
						var v_interpolate = null;
						(v_interpolate = (0));
						p5for(p5pkg["Perlito5::Javascript"], function () {
								if ( p5bool(p5pkg["Perlito5::Javascript"].is_scalar([p5pkg["Perlito5::Javascript"]["v__"]], 0)) ) {
									(v_interpolate = (1));
								};
							}, p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_), false, "");
						if ( (p5str(v_literal_type) == 'hash') ) {
							if ( !( p5bool(v_interpolate)) ) {
								(function () {
									var List_out = [];
									var v_printable = null;
									(v_printable = (1));
									var List_in = [];
									(List_in = p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_));
									p5while(function () {
											var v_k = null;
											(v_k = (p5pkg["Perlito5::Javascript"].shift([List_in])));
											var v_v = null;
											(v_v = (p5pkg["Perlito5::Javascript"].shift([List_in])));
											(v_k = (p5call(v_k, "emit_javascript", [v_level, 0], 0)));
											if ( p5bool((p5str(v_k).match(/[ \[]/) ? 1 : 0)) ) {
												(v_printable = (0));
											};
											(v_v = (( p5bool(v_v) ? p5call(v_v, "emit_javascript", [v_level, 0], 0) : 'null')));
											p5pkg["Perlito5::Javascript"].push([List_out, [(p5str(v_k) + ' : ' + p5str(v_v))]], null);
										}, function () { return List_in }, false, "");
									if ( p5bool(v_printable) ) {
										throw(p5context([('{' + p5pkg["Perlito5::Javascript"].join([', ', p5list_to_a(List_out)], 0) + '}')], p5want));
									};
									})();
							};
							throw(p5context([('p5a_to_h(' + p5str(p5pkg["Perlito5::Javascript"].to_list([v_items, v_level, 'array'], 0)) + ')')], p5want));
						};
						return (( p5bool(v_interpolate) ? p5context([('p5list_to_a(' + p5pkg["Perlito5::Javascript"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
	return (p5call(p5pkg["Perlito5::Javascript"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want) : p5context([('[' + p5pkg["Perlito5::Javascript"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
	return (p5call(p5pkg["Perlito5::Javascript"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_)))], 0) + ']')], p5want)));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "to_list_preprocess", function (List__, p5want) {
						var List_items = [];
						p5for_lex(function (v_item) {
								if ( (p5bool(p5call(v_item, "isa", ['Perlito5::AST::Apply'], 0)) && (((p5str(p5call(v_item, "code", [], 0)) == 'circumfix:<( )>') || (p5str(p5call(v_item, "code", [], 0)) == 'list:<,>')) || (p5str(p5call(v_item, "code", [], 0)) == 'infix:<=>>'))) ) {
									if ( (p5bool(p5call(v_item, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_item, "code", [], 0)) == 'infix:<=>>')) ) {
										(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = p5call(p5pkg["Perlito5::AST::Lookup"], "autoquote", p5list_to_a(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), p5want));
									};
									p5for_lex(function (v_arg) {
											p5pkg["Perlito5::Javascript"].push([List_items, [v_arg]], null);
										}, p5list_to_a((p5pkg["Perlito5::Javascript"].to_list_preprocess(p5list_to_a(p5call(v_item, "arguments", [], 1)), p5want) || (p5pkg["Perlito5::Javascript"].to_list_preprocess(p5list_to_a(p5call(v_item, "arguments", [], 1)), p5want) = new p5ArrayRef([])))._array_), false, "");
								}
								else {
									p5pkg["Perlito5::Javascript"].push([List_items, [v_item]], null);
								};
							}, p5list_to_a((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5ArrayRef([])))._array_), false, "");
						return (p5context([(new p5ArrayRef(List_items))], p5want));
				});
				p5make_sub("Perlito5::Javascript", "to_scalar", function (List__, p5want) {
						var v_items = null;
						(v_items = (p5pkg["Perlito5::Javascript"].to_scalar_preprocess(p5list_to_a(List__[p5idx(List__,0)]), 0)));
						var v_level = null;
						(v_level = (List__[p5idx(List__,1)]));
						var v_wantarray = null;
						(v_wantarray = ('scalar'));
						return (( p5bool((v_items || (v_items = new p5ArrayRef([])))._array_) ? ('(' + p5pkg["Perlito5::Javascript"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
	return (p5call(p5pkg["Perlito5::Javascript"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_)))], 0) + ')') : 'null'));
				});
				p5make_sub("Perlito5::Javascript", "to_scalar_preprocess", function (List__, p5want) {
						var List_items = [];
						p5for_lex(function (v_item) {
								if ( (p5bool(p5call(v_item, "isa", ['Perlito5::AST::Apply'], 0)) && ((p5str(p5call(v_item, "code", [], 0)) == 'list:<,>') || (p5str(p5call(v_item, "code", [], 0)) == 'infix:<=>>'))) ) {
									if ( (p5bool(p5call(v_item, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_item, "code", [], 0)) == 'infix:<=>>')) ) {
										(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = p5call(p5pkg["Perlito5::AST::Lookup"], "autoquote", p5list_to_a(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] || ((v_item || (v_item = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), p5want));
									};
									p5for_lex(function (v_arg) {
											p5pkg["Perlito5::Javascript"].push([List_items, [v_arg]], null);
										}, p5list_to_a((p5pkg["Perlito5::Javascript"].to_scalar_preprocess(p5list_to_a(p5call(v_item, "arguments", [], 1)), p5want) || (p5pkg["Perlito5::Javascript"].to_scalar_preprocess(p5list_to_a(p5call(v_item, "arguments", [], 1)), p5want) = new p5ArrayRef([])))._array_), false, "");
								}
								else {
									p5pkg["Perlito5::Javascript"].push([List_items, [v_item]], null);
								};
							}, p5list_to_a((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5ArrayRef([])))._array_), false, "");
						return (p5context([(new p5ArrayRef(List_items))], p5want));
				});
				p5make_sub("Perlito5::Javascript", "to_runtime_context", function (List__, p5want) {
					try {
						var v_items = null;
						(v_items = (p5pkg["Perlito5::Javascript"].to_scalar_preprocess(p5list_to_a(List__[p5idx(List__,0)]), 0)));
						var v_level = null;
						(v_level = (List__[p5idx(List__,1)]));
						var v_wantarray = null;
						(v_wantarray = ('runtime'));
						if ( ((p5num((v_items || (v_items = new p5ArrayRef([])))._array_) == 1) && p5bool(p5pkg["Perlito5::Javascript"].is_scalar(p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_[p5idx((v_items || (v_items = new p5ArrayRef([])))._array_,0)]), 0))) ) {
							throw(p5call((v_items || (v_items = new p5ArrayRef([])))._array_[p5idx((v_items || (v_items = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, v_wantarray], p5want));
						};
						return (p5context([('p5context(' + '[' + p5pkg["Perlito5::Javascript"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::Javascript"], function (p5want) {
	return (p5call(p5pkg["Perlito5::Javascript"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a((v_items || (v_items = new p5ArrayRef([])))._array_)))], 0) + ']' + ', p5want)')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript", "emit_javascript_autovivify", function (List__, p5want) {
						var v_obj = null;
						(v_obj = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_type = null;
						(v_type = (p5pkg["Perlito5::Javascript"].shift([List__])));
						return (p5context([('(' + p5str(p5call(v_obj, "emit_javascript", [v_level], 0)) + ' || (' + p5str(p5call(v_obj, "emit_javascript", [v_level], 0)) + ' = ' + p5str(( (p5str(v_type) == 'array') ? 'new p5ArrayRef([])' : ( (p5str(v_type) == 'hash') ? 'new p5HashRef({})' : 'new p5ScalarRef(null)'))) + ')' + ')')], p5want));
				});
				p5make_sub("Perlito5::Javascript", "emit_function_javascript", function (List__, p5want) {
					try {
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = (p5pkg["Perlito5::Javascript"].shift([List__])));
						var v_argument = null;
						(v_argument = (p5pkg["Perlito5::Javascript"].shift([List__])));
						if ( (p5bool(p5call(v_argument, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_argument, "code", [], 0)) == 'return')) ) {
							throw(p5context([('function () { ' + p5str(p5call(v_argument, "emit_javascript", [v_level, v_wantarray], 0)) + ' }')], p5want));
						};
						return (p5context([('function () { return ' + p5str(p5call(v_argument, "emit_javascript", [v_level, v_wantarray], 0)) + ' }')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5127 = p5make_package("Perlito5::Javascript::LexicalBlock");
		p5for_lex(function () {
				p5make_sub("Perlito5::Javascript::LexicalBlock", "new", function (List__, p5want) {
						var v_class = null;
						(v_class = (p5pkg["Perlito5::Javascript::LexicalBlock"].shift([List__])));
						return (p5pkg["Perlito5::Javascript::LexicalBlock"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
				});
				p5make_sub("Perlito5::Javascript::LexicalBlock", "block", function (List__, p5want) {
						return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['block']);
				});
				p5make_sub("Perlito5::Javascript::LexicalBlock", "needs_return", function (List__, p5want) {
						return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['needs_return']);
				});
				p5make_sub("Perlito5::Javascript::LexicalBlock", "top_level", function (List__, p5want) {
						return ((List__[p5idx(List__,0)] || (List__[p5idx(List__,0)] = new p5HashRef({})))._hash_['top_level']);
				});
				p5make_sub("Perlito5::Javascript::LexicalBlock", "has_decl", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (List__[p5idx(List__,0)]));
						var v_type = null;
						(v_type = (List__[p5idx(List__,1)]));
						p5for_lex(function (v_decl) {
								if ( (v_decl != null) ) {
									if ( ((p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(v_decl, "decl", [], 0)) == p5str(v_type))) || (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_decl, "code", [], 0)) == p5str(v_type)))) ) {
										throw(p5context([1], p5want));
									};
									if ( (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_decl, "code", [], 0)) == 'infix:<=>')) ) {
										(function () {
											var v_var = null;
											(v_var = ((p5call(v_decl, "arguments", [], p5want) || (p5call(v_decl, "arguments", [], p5want) = new p5ArrayRef([])))._array_[p5idx((p5call(v_decl, "arguments", [], p5want) || (p5call(v_decl, "arguments", [], p5want) = new p5ArrayRef([])))._array_,0)]));
											if ( ((p5bool(p5call(v_var, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(v_var, "decl", [], 0)) == p5str(v_type))) || (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_decl, "code", [], 0)) == p5str(v_type)))) ) {
												throw(p5context([1], p5want));
											};
											})();
									};
								};
							}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['block'] || ((v_self || (v_self = new p5HashRef({})))._hash_['block'] = new p5ArrayRef([])))._array_), false, "");
						return (p5context([0], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::Javascript::LexicalBlock", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::Javascript::LexicalBlock"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::Javascript::LexicalBlock"].shift([List__])));
						var List_block = [];
						p5for(p5pkg["Perlito5::Javascript::LexicalBlock"], function () {
								if ( (p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"] != null) ) {
									p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_block, [p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"]]], null);
								};
							}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['block'] || ((v_self || (v_self = new p5HashRef({})))._hash_['block'] = new p5ArrayRef([])))._array_), false, "");
						if ( !( p5bool(List_block.length)) ) {
							throw(p5context([(p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'null;')], p5want));
						};
						var v_out = null;
						(v_out = (''));
						var List_str = [];
						var v_has_local = null;
						(v_has_local = (p5call(v_self, "has_decl", ['local'], 0)));
						var v_create_context = null;
						(v_create_context = (p5and((v_self || (v_self = new p5HashRef({})))._hash_['create_context'], function () { return p5call(v_self, "has_decl", ['my'], 0) })));
						var v_outer_pkg = null;
						(v_outer_pkg = (p5pkg["Perlito5"]["v_PKG_NAME"]));
						var v_outer_throw = null;
						(v_outer_throw = (p5pkg["Perlito5"]["v_THROW"]));
						p5pkg["Perlito5::Javascript::LexicalBlock"].unshift([(p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_, p5list_to_a((new p5HashRef({})))], null);
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['top_level']) ) {
							(p5pkg["Perlito5"]["v_THROW"] = (0));
						};
						if ( p5bool(v_has_local) ) {
							(v_out = ((p5str(v_out) + (p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'var local_idx = p5LOCAL.length;' + String.fromCharCode(10)))));
						};
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['top_level']) ) {
							(v_level)++;
						};
						if ( p5bool(v_create_context) ) {
							(v_out = ((p5str(v_out) + (p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '(function () {' + String.fromCharCode(10)))));
							(v_level)++;
						};
						var v_tab = null;
						(v_tab = (p5pkg["Perlito5::Javascript"].tab([v_level], 0)));
						var v_last_statement = null;
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['needs_return']) ) {
							(v_last_statement = (p5pkg["Perlito5::Javascript::LexicalBlock"].pop([List_block], 0)));
						};
						p5for_lex(function (v_decl) {
								if ( ((p5str(p5pkg["Perlito5::Javascript::LexicalBlock"].ref([v_decl], 0)) == 'Perlito5::AST::Apply') && (p5str(p5call(v_decl, "code", [], 0)) == 'package')) ) {
									(p5pkg["Perlito5"]["v_PKG_NAME"] = ((v_decl || (v_decl = new p5HashRef({})))._hash_['namespace']));
									(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['$_'] = (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})));
									(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['$a'] = (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})));
									(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['$b'] = (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})));
									(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['$AUTOLOAD'] = (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})));
								};
								if ( p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Decl'], 0)) ) {
									p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_decl, "emit_javascript_init", [], 1))], null);
								};
								if ( (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_decl, "code", [], 0)) == 'my')) ) {
									p5for(p5pkg["Perlito5::Javascript::LexicalBlock"], function () {
											if ( p5bool(p5call(p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"], "isa", ['Perlito5::AST::Var'], 0)) ) {
												(function () {
													var v_d = null;
													(v_d = (p5call(p5pkg["Perlito5::AST::Decl"], "new", p5list_to_a('decl', p5call(v_decl, "code", [], 1), 'var', p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"]), 0)));
													p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_d, "emit_javascript_init", [], 1))], null);
													})();
											};
										}, p5list_to_a(((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] || ((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_), false, "");
								};
								if ( (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_decl, "code", [], 0)) == 'infix:<=>')) ) {
									(function () {
										var v_arg = null;
										(v_arg = (((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] || ((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] || ((v_decl || (v_decl = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
										if ( p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Decl'], 0)) ) {
											p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_arg, "emit_javascript_init", [], 1))], null);
										};
										if ( (p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_arg, "code", [], 0)) == 'my')) ) {
											p5for(p5pkg["Perlito5::Javascript::LexicalBlock"], function () {
													if ( p5bool(p5call(p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"], "isa", ['Perlito5::AST::Var'], 0)) ) {
														(function () {
															var v_d = null;
															(v_d = (p5call(p5pkg["Perlito5::AST::Decl"], "new", p5list_to_a('decl', p5call(v_arg, "code", [], 1), 'var', p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"]), 0)));
															p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_d, "emit_javascript_init", [], 1))], null);
															})();
													};
												}, p5list_to_a(((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] || ((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_), false, "");
										};
										})();
								};
								if ( !( (p5bool(p5call(v_decl, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(v_decl, "decl", [], 0)) == 'my'))) ) {
									p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [(p5str(p5call(v_decl, "emit_javascript", [v_level, 'void'], 0)) + ';')]], null);
								};
							}, p5list_to_a(List_block), false, "");
						if ( (p5bool((v_self || (v_self = new p5HashRef({})))._hash_['needs_return']) && p5bool(v_last_statement)) ) {
							if ( p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Decl'], 0)) ) {
								p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_last_statement, "emit_javascript_init", [], 1))], null);
							};
							if ( (p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_last_statement, "code", [], 0)) == 'infix:<=>')) ) {
								if ( p5bool(p5call(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "isa", ['Perlito5::AST::Decl'], 0)) ) {
									p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript_init", [], 1))], null);
								};
							};
							if ( (((p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_last_statement, "code", [], 0)) == 'return')) && p5bool((v_self || (v_self = new p5HashRef({})))._hash_['top_level'])) && p5bool(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)) ) {
								(v_last_statement = (((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] || ((v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							};
							if ( p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::If'], 0)) ) {
								(function () {
									var v_cond = null;
									(v_cond = (p5call(v_last_statement, "cond", [], 0)));
									var v_body = null;
									(v_body = (p5call(v_last_statement, "body", [], 0)));
									var v_otherwise = null;
									(v_otherwise = (p5call(v_last_statement, "otherwise", [], 0)));
									(v_body = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call(v_body, "stmts", [], 1), 'needs_return', 1), 0)));
									p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [('if ( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool([v_cond, (p5num(v_level) + 1)], 0)) + ' ) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')]], null);
									if ( p5bool(v_otherwise) ) {
										(v_otherwise = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call(v_otherwise, "stmts", [], 1), 'needs_return', 1), 0)));
										p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [(String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'else {' + String.fromCharCode(10) + p5str(p5call(v_otherwise, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')]], null);
									};
									})();
							}
							else {
								if ( p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Lit::Block'], 0)) ) {
									(function () {
										var v_body = null;
										(v_body = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', (v_last_statement || (v_last_statement = new p5HashRef({})))._hash_['stmts'], 'needs_return', 1), 0)));
										p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [('for (var i_ = 0; i_ < 1 ; i_++) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')]], null);
										})();
								}
								else {
									if ( (((p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::For'], 0)) || p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::While'], 0))) || (p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_last_statement, "code", [], 0)) == 'goto'))) || (p5bool(p5call(v_last_statement, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_last_statement, "code", [], 0)) == 'return'))) ) {
										p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, p5list_to_a(p5call(v_last_statement, "emit_javascript", [v_level, 'runtime'], 1))], null);
									}
									else {
										if ( p5bool(v_has_local) ) {
											p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [('return p5cleanup_local(local_idx, (' + p5str(p5pkg["Perlito5::Javascript"].to_runtime_context(p5list_to_a((new p5ArrayRef([v_last_statement])), v_level), 0)) + '));')]], null);
										}
										else {
											p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, [('return (' + p5str(p5pkg["Perlito5::Javascript"].to_runtime_context(p5list_to_a((new p5ArrayRef([v_last_statement])), v_level), 0)) + ');')]], null);
										};
									};
								};
							};
						};
						if ( p5bool(v_has_local) ) {
							p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, ['p5cleanup_local(local_idx, null);']], null);
						};
						if ( p5bool(v_create_context) ) {
							(v_level)--;
							p5pkg["Perlito5::Javascript::LexicalBlock"].push([List_str, ['})();']], null);
						};
						if ( (p5bool((v_self || (v_self = new p5HashRef({})))._hash_['top_level']) && p5bool(p5pkg["Perlito5"]["v_THROW"])) ) {
							(v_level)--;
							(v_out = ((p5str(v_out) + (p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'try {' + String.fromCharCode(10) + p5pkg["Perlito5::Javascript::LexicalBlock"].join([String.fromCharCode(10), p5list_to_a(p5map(p5pkg["Perlito5::Javascript::LexicalBlock"], function (p5want) {
	return (p5context([(p5str(v_tab) + p5str(p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"]))], p5want));
}, p5list_to_a(List_str)))], 0) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'catch(err) {' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + 'if ( err instanceof Error ) {' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 2)], 0)) + 'throw(err);' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + 'else {' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 2)], 0)) + p5str(( p5bool(v_has_local) ? 'return p5cleanup_local(local_idx, err)' : 'return(err)')) + ';' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}' + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}'))));
						}
						else {
							(v_out = ((p5str(v_out) + p5pkg["Perlito5::Javascript::LexicalBlock"].join([String.fromCharCode(10), p5list_to_a(p5map(p5pkg["Perlito5::Javascript::LexicalBlock"], function (p5want) {
	return (p5context([(p5str(v_tab) + p5str(p5pkg["Perlito5::Javascript::LexicalBlock"]["v__"]))], p5want));
}, p5list_to_a(List_str)))], 0))));
						};
						(p5pkg["Perlito5"]["v_PKG_NAME"] = (v_outer_pkg));
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['top_level']) ) {
							(p5pkg["Perlito5"]["v_THROW"] = (v_outer_throw));
						};
						p5pkg["Perlito5::Javascript::LexicalBlock"].shift([(p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_]);
						return (p5context([v_out], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5128 = p5make_package("Perlito5::AST::CompUnit");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::CompUnit", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (List__[p5idx(List__,0)]));
						var v_level = null;
						(v_level = (List__[p5idx(List__,1)]));
						var v_str = null;
						(v_str = (('(function () {' + String.fromCharCode(10) + p5str(p5call(p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', (v_self || (v_self = new p5HashRef({})))._hash_['body'], 'needs_return', 0), p5want), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '})()' + String.fromCharCode(10))));
						return (p5context([v_str], p5want));
				});
				p5make_sub("Perlito5::AST::CompUnit", "emit_javascript_program", function (List__, p5want) {
						var v_comp_units = null;
						(v_comp_units = (p5pkg["Perlito5::AST::CompUnit"].shift([List__])));
						(p5pkg["Perlito5"]["v_PKG_NAME"] = ('main'));
						var v_str = null;
						(v_str = (('' + 'var p5want = null;' + String.fromCharCode(10) + 'var ' + p5str(p5pkg["Perlito5::Javascript"].pkg_new_var([], 0)) + ' = p5pkg[' + String.fromCharCode(39) + p5str(p5pkg["Perlito5"]["v_PKG_NAME"]) + String.fromCharCode(39) + '];' + String.fromCharCode(10))));
						(p5pkg["Perlito5"]["v_VAR"] = ((new p5ArrayRef(p5list_to_a((new p5HashRef(p5a_to_h(p5list_to_a('@_', (new p5HashRef({'decl' : 'my'})), '$@', (new p5HashRef({'decl' : 'our', 'namespace' : 'main'})), '$^O', (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' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})), '$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : p5pkg["Perlito5"]["v_PKG_NAME"]})))))))))));
						p5for_lex(function (v_comp_unit) {
								(v_str = ((p5str(v_str) + p5str(p5call(v_comp_unit, "emit_javascript", [], 0)) + String.fromCharCode(10))));
							}, p5list_to_a((v_comp_units || (v_comp_units = new p5ArrayRef([])))._array_), false, "");
						return (p5context([v_str], p5want));
				});
			}, [0], false, "");
		var p5129 = p5make_package("Perlito5::AST::Val::Int");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Val::Int", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Val::Int"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Val::Int"].shift([List__])));
						return ((v_self || (v_self = new p5HashRef({})))._hash_['int']);
				});
			}, [0], false, "");
		var p5130 = p5make_package("Perlito5::AST::Val::Num");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Val::Num", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Val::Num"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Val::Num"].shift([List__])));
						return ((v_self || (v_self = new p5HashRef({})))._hash_['num']);
				});
			}, [0], false, "");
		var p5131 = p5make_package("Perlito5::AST::Val::Buf");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Val::Buf", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Val::Buf"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Val::Buf"].shift([List__])));
						return (p5pkg["Perlito5::Javascript"].escape_string(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['buf']), p5want));
				});
			}, [0], false, "");
		var p5132 = p5make_package("Perlito5::AST::Lit::Block");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Lit::Block", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Lit::Block"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Lit::Block"].shift([List__])));
						var v_init = null;
						(v_init = (''));
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['name']) == 'INIT') ) {
							(function () {
								var v_tmp = null;
								(v_tmp = (('p5pkg.main._tmp' + p5str(p5pkg["Perlito5::Javascript"].get_label([], 0)))));
								(v_init = ((p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 2)], 0)) + ('if (' + p5str(v_tmp) + ') { return }; ' + p5str(v_tmp) + ' = 1;' + String.fromCharCode(10)))));
								})();
						};
						return (p5context([('p5for_lex(' + 'function () {' + String.fromCharCode(10) + p5str(v_init) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', (v_self || (v_self = new p5HashRef({})))._hash_['stmts'], 'needs_return', 0, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + '[0], ' + p5str(p5call(v_self, "emit_javascript_continue", [v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['label'], function () { return '' })) + '"' + ')')], p5want));
				});
				p5make_sub("Perlito5::AST::Lit::Block", "emit_javascript_continue", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Lit::Block"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Lit::Block"].shift([List__])));
						if ( (!( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['continue'])) || !( p5bool((((v_self || (v_self = new p5HashRef({})))._hash_['continue'] || ((v_self || (v_self = new p5HashRef({})))._hash_['continue'] = new p5HashRef({})))._hash_['stmts'] || (((v_self || (v_self = new p5HashRef({})))._hash_['continue'] || ((v_self || (v_self = new p5HashRef({})))._hash_['continue'] = new p5HashRef({})))._hash_['stmts'] = new p5ArrayRef([])))._array_))) ) {
							throw(p5context(['false'], p5want));
						};
						return (p5context([('function () {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['continue'], "stmts", [], 1), 'needs_return', 0, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5133 = p5make_package("Perlito5::AST::Index");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Index", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Index"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Index"].shift([List__])));
						if ( (p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "sigil", [], 0)) == '$')) ) {
							(function () {
								var v_v = null;
								(v_v = (p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', '@', 'namespace', p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "namespace", [], 1), 'name', p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "name", [], 1)), 0)));
								throw(p5context([(p5str(p5call(v_v, "emit_javascript", [v_level], 0)) + '[' + 'p5idx(' + p5str(p5call(v_v, "emit_javascript", [v_level], 0)) + ',' + p5str(p5pkg["Perlito5::Javascript"].to_num(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['index_exp'], v_level), 0)) + ')' + ']')], p5want));
								})();
						};
						if ( (p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['code']) == 'prefix:<$>')) ) {
							throw(p5call(p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('method', 'postcircumfix:<[ ]>', 'invocant', (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] || (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx((((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] || (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], 'arguments', (v_self || (v_self = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], p5want));
						};
						return (p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['obj'], v_level, 'array'), 0)) + '._array_[' + 'p5idx(' + p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['obj'], v_level, 'array'), 0)) + '._array_,' + p5str(p5pkg["Perlito5::Javascript"].to_num(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['index_exp'], v_level), 0)) + ')' + ']')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5134 = p5make_package("Perlito5::AST::Lookup");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Lookup", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Lookup"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Lookup"].shift([List__])));
						if ( (p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "sigil", [], 0)) == '$')) ) {
							(function () {
								var v_v = null;
								(v_v = (p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', '%', 'namespace', p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "namespace", [], 1), 'name', p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "name", [], 1)), 0)));
								throw(p5context([(p5str(p5call(v_v, "emit_javascript", [v_level], 0)) + '[' + p5str(p5call(p5call(v_self, "autoquote", p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], 0)) + ']')], p5want));
								})();
						};
						if ( (p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['obj'], "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['code']) == 'prefix:<$>')) ) {
							throw(p5call(p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('method', 'postcircumfix:<{ }>', 'invocant', (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] || (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx((((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] || (((v_self || (v_self = new p5HashRef({})))._hash_['obj'] || ((v_self || (v_self = new p5HashRef({})))._hash_['obj'] = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], 'arguments', (v_self || (v_self = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], p5want));
						};
						return (p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['obj'], v_level, 'hash'), 0)) + '._hash_[' + p5str(p5call(p5call(v_self, "autoquote", p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], 0)) + ']')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5135 = p5make_package("Perlito5::AST::Var");
		p5for_lex(function () {
				var v_table = null;
				(v_table = ((new p5HashRef({'$' : 'v_', '@' : 'List_', '%' : 'Hash_', '&' : ''}))));
				p5make_sub("Perlito5::AST::Var", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						var v_str_name = null;
						(v_str_name = ((v_self || (v_self = new p5HashRef({})))._hash_['name']));
						if ( (p5str(v_str_name) == String.fromCharCode(92)) ) {
							(v_str_name = (String.fromCharCode(92) + String.fromCharCode(92)));
						};
						if ( (p5str(v_str_name) == '"') ) {
							(v_str_name = (String.fromCharCode(92) + '"'));
						};
						var v_perl5_name = null;
						(v_perl5_name = (p5call(v_self, "perl5_name", [], 0)));
						var v_decl_type = null;
						var v_decl = null;
						(v_decl = (p5call(v_self, "perl5_get_decl", [v_perl5_name], 0)));
						if ( p5bool(v_decl) ) {
							(v_decl_type = ((v_decl || (v_decl = new p5HashRef({})))._hash_['decl']));
						}
						else {
							if ( (!( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace'])) && (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) != '*')) ) {
								(function () {
									if ( p5bool(p5pkg["Perlito5"]["v_STRICT"]) ) {
										p5pkg["Perlito5::AST::Var"].die([[('Global symbol "' + p5str(v_perl5_name) + '" requires explicit package name')]], null);
									};
									(v_decl_type = ('our'));
									((v_self || (v_self = new p5HashRef({})))._hash_['namespace'] = p5pkg["Perlito5"]["v_PKG_NAME"]);
									var v_sigil = null;
									(v_sigil = (( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ? '@' : (v_self || (v_self = new p5HashRef({})))._hash_['sigil'])));
									var v_s = null;
									(v_s = (('p5pkg["' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '"]["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_[v_sigil]) + p5str(v_str_name) + '"]')));
									if ( (p5str(v_sigil) == '@') ) {
										(v_s = ((p5str(v_s) + ' || (' + p5str(v_s) + ' = [])')));
										(v_s = (('p5pkg[' + p5str(v_s) + ', "' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '"]["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_[v_sigil]) + p5str(v_str_name) + '"]')));
									}
									else {
										if ( (p5str(v_sigil) == '%') ) {
											(v_s = ((p5str(v_s) + ' || (' + p5str(v_s) + ' = {})')));
											(v_s = (('p5pkg[' + p5str(v_s) + ', "' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '"]["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_[v_sigil]) + p5str(v_str_name) + '"]')));
										};
									};
									if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ) {
										throw(p5context([('(' + p5str(v_s) + '.length - 1)')], p5want));
									};
									throw(p5context([v_s], p5want));
									})();
							};
						};
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '@') ) {
							if ( (p5str(v_wantarray) == 'scalar') ) {
								throw(p5context([(p5str(p5call(v_self, "emit_javascript", [v_level, 'list'], 0)) + '.length')], p5want));
							};
							if ( (p5str(v_wantarray) == 'runtime') ) {
								throw(p5context([('(p5want' + ' ? ' + p5str(p5call(v_self, "emit_javascript", [v_level, 'list'], 0)) + ' : ' + p5str(p5call(v_self, "emit_javascript", [v_level, 'list'], 0)) + '.length' + ')')], p5want));
							};
						};
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '&') ) {
							throw(p5context([('p5pkg["' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['namespace'], function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })) + '"]["' + p5str(v_str_name) + '"]')], p5want));
						};
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '*') ) {
							throw(p5context([('p5pkg["' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['namespace'], function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })) + '"]["' + p5str(v_str_name) + '"]')], p5want));
						};
						if ( (p5str(v_decl_type) == 'our') ) {
							(function () {
								var v_sigil = null;
								(v_sigil = (( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ? '@' : (v_self || (v_self = new p5HashRef({})))._hash_['sigil'])));
								var v_s = null;
								(v_s = (('p5pkg["' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['namespace'], function () { return (v_decl || (v_decl = new p5HashRef({})))._hash_['namespace'] })) + '"]["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_[v_sigil]) + p5str(v_str_name) + '"]')));
								if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ) {
									throw(p5context([('(' + p5str(v_s) + '.length - 1)')], p5want));
								};
								throw(p5context([v_s], p5want));
								})();
						};
						var v_ns = null;
						(v_ns = (''));
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) ) {
							(v_ns = (('p5pkg["' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '"]')));
							if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ) {
								throw(p5context([('(' + p5str(v_ns) + '["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_['@']) + p5str(v_str_name) + '"].length - 1)')], p5want));
							};
							throw(p5context([(p5str(v_ns) + '["' + p5str((v_table || (v_table = new p5HashRef({})))._hash_[(v_self || (v_self = new p5HashRef({})))._hash_['sigil']]) + p5str(v_str_name) + '"]')], p5want));
						};
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['sigil']) == '$#') ) {
							throw(p5context([('(' + p5str(v_ns) + p5str((v_table || (v_table = new p5HashRef({})))._hash_['@']) + p5str(v_str_name) + '.length - 1)')], p5want));
						};
						return (p5context([(p5str(v_ns) + p5str((v_table || (v_table = new p5HashRef({})))._hash_[(v_self || (v_self = new p5HashRef({})))._hash_['sigil']]) + p5str(v_str_name))], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				p5make_sub("Perlito5::AST::Var", "perl5_name", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						var v_sigil = null;
						(v_sigil = ((v_self || (v_self = new p5HashRef({})))._hash_['sigil']));
						if ( (p5str(v_sigil) == '$#') ) {
							(v_sigil = ('@'));
						};
						return (p5context([(p5str(v_sigil) + p5str(( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) ? (p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '::') : '')) + p5str((v_self || (v_self = new p5HashRef({})))._hash_['name']))], p5want));
				});
				p5make_sub("Perlito5::AST::Var", "perl5_get_decl", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						var v_perl5_name = null;
						(v_perl5_name = (p5pkg["Perlito5::AST::Var"].shift([List__])));
						p5for(p5pkg["Perlito5::AST::Var"], function () {
								if ( (p5pkg["Perlito5::AST::Var"]["v__"])._hash_.hasOwnProperty(v_perl5_name) ) {
									throw((p5pkg["Perlito5::AST::Var"]["v__"] || (p5pkg["Perlito5::AST::Var"]["v__"] = new p5HashRef({})))._hash_[v_perl5_name]);
								};
							}, p5list_to_a((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_), false, "");
						return (null);
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5136 = p5make_package("Perlito5::AST::Decl");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Decl", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Decl"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Decl"].shift([List__])));
						return (p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "emit_javascript", [v_level], p5want));
				});
				p5make_sub("Perlito5::AST::Decl", "emit_javascript_init", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Decl"].shift([List__])));
						var v_env = null;
						(v_env = ((new p5HashRef(p5a_to_h(p5list_to_a('decl', (v_self || (v_self = new p5HashRef({})))._hash_['decl']))))));
						var v_perl5_name = null;
						(v_perl5_name = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "perl5_name", [], 0)));
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) != 'my') ) {
							if ( ((p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'our') && p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['var'] || ((v_self || (v_self = new p5HashRef({})))._hash_['var'] = new p5HashRef({})))._hash_['namespace'])) ) {
								p5pkg["Perlito5::AST::Decl"].die([[('No package name allowed for variable ' + p5str(v_perl5_name) + ' in "our"')]], null);
							};
							if ( (p5str(((v_self || (v_self = new p5HashRef({})))._hash_['var'] || ((v_self || (v_self = new p5HashRef({})))._hash_['var'] = new p5HashRef({})))._hash_['namespace']) == '') ) {
								(function () {
									var v_decl_namespace = null;
									(v_decl_namespace = (''));
									var v_decl = null;
									(v_decl = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "perl5_get_decl", [v_perl5_name], 0)));
									if ( (((p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'local') && p5bool(v_decl)) && ((p5str((v_decl || (v_decl = new p5HashRef({})))._hash_['decl']) == 'our') || (p5str((v_decl || (v_decl = new p5HashRef({})))._hash_['decl']) == 'local'))) ) {
										(v_decl_namespace = ((v_decl || (v_decl = new p5HashRef({})))._hash_['namespace']));
									};
									((v_env || (v_env = new p5HashRef({})))._hash_['namespace'] = p5or(v_decl_namespace, function () { return p5pkg["Perlito5"]["v_PKG_NAME"] }));
									})();
							};
						};
						(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_[v_perl5_name] = v_env);
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'my') ) {
							var v_str = null;
							(v_str = (''));
							(v_str = ((p5str(v_str) + 'var ' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "emit_javascript", [], 0)) + ' = ')));
							if ( (p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "sigil", [], 0)) == '%') ) {
								(v_str = ((p5str(v_str) + '{};')));
							}
							else {
								if ( (p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "sigil", [], 0)) == '@') ) {
									(v_str = ((p5str(v_str) + '[];')));
								}
								else {
									(v_str = ((p5str(v_str) + 'null;')));
								};
							};
							throw(p5context([v_str], p5want))
						}
						
						else {
							if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'our') ) {
								throw(p5context([('// our ' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "emit_javascript", [], 0)))], p5want))
							}
							
							else {
								if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'local') ) {
									var v_perl5_name = null;
									(v_perl5_name = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "perl5_name", [], 0)));
									var v_decl_namespace = null;
									(v_decl_namespace = (''));
									var v_decl = null;
									(v_decl = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "perl5_get_decl", [v_perl5_name], 0)));
									if ( (p5bool(v_decl) && ((p5str((v_decl || (v_decl = new p5HashRef({})))._hash_['decl']) == 'our') || (p5str((v_decl || (v_decl = new p5HashRef({})))._hash_['decl']) == 'local'))) ) {
										(v_decl_namespace = ((v_decl || (v_decl = new p5HashRef({})))._hash_['namespace']));
									};
									var v_ns = null;
									(v_ns = (('p5pkg["' + p5str(p5or(p5or(((v_self || (v_self = new p5HashRef({})))._hash_['var'] || ((v_self || (v_self = new p5HashRef({})))._hash_['var'] = new p5HashRef({})))._hash_['namespace'], function () { return v_decl_namespace }), function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })) + '"]')));
									throw(p5context([('p5set_local(' + p5str(v_ns) + ',' + p5str(p5pkg["Perlito5::Javascript"].escape_string(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['var'] || ((v_self || (v_self = new p5HashRef({})))._hash_['var'] = new p5HashRef({})))._hash_['name']), 0)) + ',' + p5str(p5pkg["Perlito5::Javascript"].escape_string(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['var'] || ((v_self || (v_self = new p5HashRef({})))._hash_['var'] = new p5HashRef({})))._hash_['sigil']), 0)) + '); ')], p5want))
								}
								
								else {
									if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) == 'state') ) {
										throw(p5context([('// state ' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['var'], "emit_javascript", [], 0)))], p5want))
									}
									
									else {
										return (p5pkg["Perlito5::AST::Decl"].die([[('not implemented: Perlito5::AST::Decl ' + String.fromCharCode(39) + p5str((v_self || (v_self = new p5HashRef({})))._hash_['decl']) + String.fromCharCode(39))]], p5want));
									}
								}
							}
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5137 = p5make_package("Perlito5::AST::Proto");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Proto", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Proto"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Proto"].shift([List__])));
						if ( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['name']) == '__PACKAGE__') ) {
							throw(p5pkg["Perlito5::Javascript"].pkg([], p5want));
						};
						return (p5context([('p5pkg["' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['name']) + '"]')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5138 = p5make_package("Perlito5::AST::Call");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Call", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Call"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Call"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = (p5pkg["Perlito5::AST::Call"].shift([List__])));
						var v_meth = null;
						(v_meth = ((v_self || (v_self = new p5HashRef({})))._hash_['method']));
						if ( (p5str(v_meth) == 'postcircumfix:<[ ]>') ) {
							throw(p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['invocant'], v_level, 'array'), 0)) + '._array_[' + 'p5idx(' + p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['invocant'], v_level, 'array'), 0)) + '._array_,' + p5str(p5pkg["Perlito5::Javascript"].to_num(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 0)) + ')' + ']')], p5want));
						};
						if ( (p5str(v_meth) == 'postcircumfix:<{ }>') ) {
							throw(p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['invocant'], v_level, 'hash'), 0)) + '._hash_[' + p5str(p5call(p5call(p5pkg["Perlito5::AST::Lookup"], "autoquote", p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), p5want), "emit_javascript", [v_level, 'list'], 0)) + ']')], p5want));
						};
						var v_invocant = null;
						(v_invocant = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['invocant'], "emit_javascript", [], 0)));
						if ( (p5str(v_meth) == 'postcircumfix:<( )>') ) {
							throw(p5context([('(' + p5str(v_invocant) + ')(' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 0)) + ')')], p5want));
						};
						if ( (p5str(p5pkg["Perlito5::AST::Call"].ref([v_meth], 0)) == 'Perlito5::AST::Var') ) {
							(v_meth = (p5call(v_meth, "emit_javascript", [], 0)));
						}
						else {
							(v_meth = (('"' + p5str(v_meth) + '"')));
						};
						return (p5context([('p5call(' + p5str(v_invocant) + ', ' + p5str(v_meth) + ', ' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 0)) + ', ' + p5str(( (p5str(v_wantarray) == 'list') ? '1' : ( (p5str(v_wantarray) == 'scalar') ? '0' : ( (p5str(v_wantarray) == 'void') ? 'null' : 'p5want')))) + ')')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5139 = p5make_package("Perlito5::AST::Apply");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Apply", "emit_regex_javascript", function (List__, p5want) {
					try {
						var v_op = null;
						(v_op = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						var v_var = null;
						(v_var = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						var v_regex = null;
						(v_regex = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						if ( p5bool(p5call(v_regex, "isa", ['Perlito5::AST::Var'], 0)) ) {
							(v_regex = ((new p5HashRef(p5a_to_h(p5list_to_a('code', 'p5:m', 'arguments', (new p5ArrayRef([v_regex, '']))))))));
						};
						var v_str = null;
						var v_code = null;
						(v_code = ((v_regex || (v_regex = new p5HashRef({})))._hash_['code']));
						var v_regex_args = null;
						(v_regex_args = ((v_regex || (v_regex = new p5HashRef({})))._hash_['arguments']));
						if ( (p5str(v_code) == 'p5:s') ) {
							(v_str = ((p5str(p5call(v_var, "emit_javascript", [], 0)) + ' = p5str(' + p5str(p5call(v_var, "emit_javascript", [], 0)) + ').replace(/' + p5str(((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,0)] || ((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['buf']) + '/' + p5str((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,2)]) + ', ' + p5str(p5call((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,1)], "emit_javascript", [], 0)) + ')')));
						}
						else {
							if ( (p5str(v_code) == 'p5:m') ) {
								(function () {
									var v_ast = null;
									(v_ast = ((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,0)]));
									if ( p5bool(p5call(v_ast, "isa", ['Perlito5::AST::Val::Buf'], 0)) ) {
										(v_str = (('(' + 'p5str(' + p5str(p5call(v_var, "emit_javascript", [], 0)) + ')' + '.match(/' + p5str((v_ast || (v_ast = new p5HashRef({})))._hash_['buf']) + '/' + p5str((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,1)]) + ')' + ' ? 1 : 0)')));
									}
									else {
										(v_str = (('(new RegExp(' + p5str(p5call(v_ast, "emit_javascript", [], 0)) + ', ' + '"' + p5str((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,1)]) + '"' + '))' + '.exec(' + 'p5str(' + p5str(p5call(v_var, "emit_javascript", [], 0)) + ')' + ')')));
									};
									})();
							}
							else {
								if ( (p5str(v_code) == 'p5:tr') ) {
									(v_str = (('p5tr(' + p5str(p5call(v_var, "emit_javascript", [], 0)) + ', ' + p5str(p5call((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,0)], "emit_javascript", [], 0)) + ', ' + p5str(p5call((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_[p5idx((v_regex_args || (v_regex_args = new p5ArrayRef([])))._array_,1)], "emit_javascript", [], 0)) + ')')));
								}
								else {
									p5pkg["Perlito5::AST::Apply"].die([[('Error: regex emitter - unknown operator ' + p5str(v_code))]], null);
								};
							};
						};
						if ( (p5str(v_op) == '=~') ) {
							throw(p5context([v_str], p5want));
						};
						if ( (p5str(v_op) == '!~') ) {
							throw(p5context([('!(' + p5str(v_str) + ')')], p5want));
						};
						return (p5pkg["Perlito5::AST::Apply"].die([['Error: regex emitter']], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
				var Hash_emit_js = {};
				(Hash_emit_js = p5a_to_h(['infix:<=~>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::AST::Apply"].emit_regex_javascript(p5list_to_a('=~', ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]), p5want));
					}, 'infix:<!~>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::AST::Apply"].emit_regex_javascript(p5list_to_a('!~', ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]), p5want));
					}, 'p5:s', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::AST::Apply"].emit_regex_javascript(p5list_to_a('=~', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', '$', 'namespace', '', 'name', '_'], 1), v_self), p5want));
					}, 'p5:m', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::AST::Apply"].emit_regex_javascript(p5list_to_a('=~', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', '$', 'namespace', '', 'name', '_'], 1), v_self), p5want));
					}, 'p5:tr', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::AST::Apply"].emit_regex_javascript(p5list_to_a('=~', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', '$', 'namespace', '', 'name', '_'], 1), v_self), p5want));
					}, '__PACKAGE__', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('"' + p5str(p5pkg["Perlito5"]["v_PKG_NAME"]) + '"')], p5want));
					}, 'wantarray', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context(['p5want'], p5want));
					}, 'package', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('var ' + p5str(p5pkg["Perlito5::Javascript"].pkg_new_var([], 0)) + ' = p5make_package("' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '")')], p5want));
					}, 'infix:<=>>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([(p5str(p5call(p5call(p5pkg["Perlito5::AST::Lookup"], "autoquote", p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), p5want), "emit_javascript", [v_level], 0)) + ', ' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)], "emit_javascript", [v_level], 0)))], p5want));
					}, 'infix:<cmp>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('p5cmp(' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_str([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'infix:<<=>>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('p5cmp(' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_num([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'infix:<**>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('Math.pow(' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_num([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'prefix:<!>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('!( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), 0)) + ')')], p5want));
					}, 'prefix:<not>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('!( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], v_level), 0)) + ')')], p5want));
					}, 'prefix:<~>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('p5complement( ' + p5str(p5pkg["Perlito5::Javascript"].to_num(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), 0)) + ')')], p5want));
					}, 'prefix:<->', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('-( ' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, 'scalar'], 0)) + ')')], p5want));
					}, 'prefix:<+>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('(' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, v_wantarray], 0)) + ')')], p5want));
					}, 'require', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('p5pkg["Perlito5::Grammar::Use"]["require"]([' + p5str(p5pkg["Perlito5::Javascript"].to_str(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), 0)) + ', ' + p5str(( p5bool((((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['bareword']) ? 1 : 0)) + '])')], p5want));
					}, 'prefix:<$>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							return (p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify([v_arg, p5pkg["Perlito5::AST::Apply"]["v_level"], 'scalar'], 0)) + '._scalar_')], p5want));
					}, 'prefix:<@>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_level = null;
							(v_level = (List__[p5idx(List__,1)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							return (p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify([v_arg, v_level, 'array'], 0)) + '._array_')], p5want));
					}, 'prefix:<$#>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_level = null;
							(v_level = (List__[p5idx(List__,1)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							return (p5context([('(' + p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify([v_arg, v_level, 'array'], 0)) + '._array_.length - 1)')], p5want));
					}, 'prefix:<%>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_level = null;
							(v_level = (List__[p5idx(List__,1)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							return (p5context([(p5str(p5pkg["Perlito5::Javascript"].emit_javascript_autovivify([v_arg, v_level, 'hash'], 0)) + '._hash_')], p5want));
					}, 'prefix:<&>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_level = null;
							(v_level = (List__[p5idx(List__,1)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							return (p5context([('p5code_lookup_by_name("' + p5str(p5pkg["Perlito5"]["v_PKG_NAME"]) + '", ' + p5str(p5call(v_arg, "emit_javascript", [v_level], 0)) + ')')], p5want));
					}, 'circumfix:<[ ]>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(new p5ArrayRef(' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 0)) + '))')], p5want));
					}, 'circumfix:<{ }>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(new p5HashRef(' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments'], p5pkg["Perlito5::AST::Apply"]["v_level"], 'hash'), 0)) + '))')], p5want));
					}, 'prefix:<' + String.fromCharCode(92) + '>', function (List__, p5want) {
						try {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							var v_level = null;
							(v_level = (List__[p5idx(List__,1)]));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							if ( p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Var'], 0)) ) {
								if ( (p5str(p5call(v_arg, "sigil", [], 0)) == '@') ) {
									throw(p5context([('(new p5ArrayRef(' + p5str(p5call(v_arg, "emit_javascript", [v_level], 0)) + '))')], p5want));
								};
								if ( (p5str(p5call(v_arg, "sigil", [], 0)) == '%') ) {
									throw(p5context([('(new p5HashRef(' + p5str(p5call(v_arg, "emit_javascript", [v_level], 0)) + '))')], p5want));
								};
								if ( (p5str(p5call(v_arg, "sigil", [], 0)) == '*') ) {
									throw(p5context([('(new p5GlobRef(' + p5str(p5call(v_arg, "emit_javascript", [v_level], 0)) + '))')], p5want));
								};
								if ( (p5str(p5call(v_arg, "sigil", [], 0)) == '&') ) {
									if ( p5bool((v_arg || (v_arg = new p5HashRef({})))._hash_['namespace']) ) {
										throw(p5context([('p5pkg["' + p5str((v_arg || (v_arg = new p5HashRef({})))._hash_['namespace']) + '"].' + p5str((v_arg || (v_arg = new p5HashRef({})))._hash_['name']))], p5want));
									}
									else {
										throw(p5context([(p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + '.' + p5str((v_arg || (v_arg = new p5HashRef({})))._hash_['name']))], p5want));
									};
								};
							};
							return (p5context([('(new p5ScalarRef(' + p5str(p5call(v_arg, "emit_javascript", [v_level], 0)) + '))')], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}, 'postfix:<++>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([' ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')++')], p5want));
					}, 'postfix:<-->', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([' ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')--')], p5want));
					}, 'prefix:<++>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('++(' + p5pkg["Perlito5::AST::Apply"].join([' ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'prefix:<-->', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('--(' + p5pkg["Perlito5::AST::Apply"].join([' ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'infix:<x>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('p5str_replicate(' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'list:<.>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([' + ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_str([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
					}, 'list:<,>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), p5want));
					}, 'infix:<..>', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(function (a) { ' + 'for (var i=' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [], 0)) + ', l=' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)], "emit_javascript", [], 0)) + '; ' + 'i<=l; ++i)' + '{ ' + 'a.push(i) ' + '}; ' + 'return a ' + '})([])')], p5want));
					}, 'delete', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5context([('(delete ' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [], 0)) + ')')], p5want));
					}, 'scalar', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							return (p5pkg["Perlito5::Javascript"].to_scalar(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments'], (p5num(p5pkg["Perlito5::AST::Apply"]["v_level"]) + 1)), p5want));
					}, 'ternary:<? :>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), 0)) + ' ? ' + p5str(p5call(p5context([((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]], 0), "emit_javascript", [v_level, v_wantarray], 0)) + ' : ' + p5str(p5call(p5context([((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,2)]], 0), "emit_javascript", [v_level, v_wantarray], 0)) + ')')], p5want));
					}, 'my', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('p5context(' + '[' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + '], ' + p5str(( (p5str(v_wantarray) == 'runtime') ? 'p5want' : ( (p5str(v_wantarray) == 'list') ? 1 : 0))) + ')')], p5want));
					}, 'local', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('p5context(' + '[' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + '], ' + p5str(( (p5str(v_wantarray) == 'runtime') ? 'p5want' : ( (p5str(v_wantarray) == 'list') ? 1 : 0))) + ')')], p5want));
					}, 'circumfix:<( )>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('p5context(' + '[' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level, v_wantarray], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + '], ' + p5str(( (p5str(v_wantarray) == 'runtime') ? 'p5want' : ( (p5str(v_wantarray) == 'list') ? 1 : 0))) + ')')], p5want));
					}, 'infix:<=>', function (List__, p5want) {
						try {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_parameters = null;
							(v_parameters = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							var v_arguments = null;
							(v_arguments = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]));
							if ( (p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Apply'], 0)) && (((p5str(p5call(v_parameters, "code", [], 0)) == 'my') || (p5str(p5call(v_parameters, "code", [], 0)) == 'local')) || (p5str(p5call(v_parameters, "code", [], 0)) == 'circumfix:<( )>'))) ) {
								(function () {
									var v_tmp = null;
									(v_tmp = (('tmp' + p5str(p5pkg["Perlito5::Javascript"].get_label([], 0)))));
									var v_tmp2 = null;
									(v_tmp2 = (('tmp' + p5str(p5pkg["Perlito5::Javascript"].get_label([], 0)))));
									throw(p5context([('(function () { ' + 'var ' + p5str(v_tmp) + ' = ' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((new p5ArrayRef([v_arguments])), (p5num(v_level) + 1)), 0)) + '; ' + 'var ' + p5str(v_tmp2) + ' = ' + p5str(v_tmp) + '.slice(0); ' + p5pkg["Perlito5::AST::Apply"].join(['; ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return ((p5context([( (p5bool(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "code", [], 0)) == 'undef')) ? (p5str(v_tmp) + '.shift()') : ( (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "sigil", [], 0)) == '$') ? (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], 0)) + ' = ' + p5str(v_tmp) + '.shift()') : ( (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "sigil", [], 0)) == '@') ? (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], 0)) + ' = ' + p5str(v_tmp) + '; ' + p5str(v_tmp) + ' = []') : ( (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "sigil", [], 0)) == '%') ? (p5str(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], 0)) + ' = p5a_to_h(' + p5str(v_tmp) + '); ' + p5str(v_tmp) + ' = []') : p5pkg["Perlito5::AST::Apply"].die([['not implemented']], p5want)))))], p5want)));
}, p5list_to_a((p5call(v_parameters, "arguments", [], p5want) || (p5call(v_parameters, "arguments", [], p5want) = new p5ArrayRef([])))._array_)), ('return ' + p5str(v_tmp2)))], 0) + ' })()')], p5want));
									})();
							};
							if ( ((p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call(v_parameters, "sigil", [], 0)) == '$')) || (p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(p5call(v_parameters, "var", [], p5want), "sigil", [], 0)) == '$'))) ) {
								throw(p5context([('(' + p5str(p5call(v_parameters, "emit_javascript", [], 0)) + ' = ' + p5str(p5pkg["Perlito5::Javascript"].to_scalar(p5list_to_a((new p5ArrayRef([v_arguments])), (p5num(v_level) + 1)), 0)) + ')')], p5want));
							};
							if ( ((p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call(v_parameters, "sigil", [], 0)) == '@')) || (p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(p5call(v_parameters, "var", [], p5want), "sigil", [], 0)) == '@'))) ) {
								throw(p5context([('(' + p5str(p5call(v_parameters, "emit_javascript", [], 0)) + ' = ' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((new p5ArrayRef([v_arguments])), (p5num(v_level) + 1)), 0)) + ')')], p5want));
							}
							else {
								if ( ((p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call(v_parameters, "sigil", [], 0)) == '%')) || (p5bool(p5call(v_parameters, "isa", ['Perlito5::AST::Decl'], 0)) && (p5str(p5call(p5call(v_parameters, "var", [], p5want), "sigil", [], 0)) == '%'))) ) {
									throw(p5context([('(' + p5str(p5call(v_parameters, "emit_javascript", [], 0)) + ' = ' + p5str(p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((new p5ArrayRef([v_arguments])), (p5num(v_level) + 1), 'hash'), 0)) + ')')], p5want));
								};
							};
							return (p5context([('(' + p5str(p5call(v_parameters, "emit_javascript", [v_level], 0)) + ' = ' + p5str(p5call(v_arguments, "emit_javascript", [(p5num(v_level) + 1)], 0)) + ')')], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}, 'break', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							return (p5context(['throw(new p5_error("break", ""))'], p5want));
					}, 'next', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							var v_label = null;
							(v_label = (p5or((((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['code'], function () { return '' })));
							return (p5context([('throw(new p5_error("next", "' + p5str(v_label) + '"))')], p5want));
					}, 'last', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							var v_label = null;
							(v_label = (p5or((((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['code'], function () { return '' })));
							return (p5context([('throw(new p5_error("last", "' + p5str(v_label) + '"))')], p5want));
					}, 'redo', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							var v_label = null;
							(v_label = (p5or((((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['code'], function () { return '' })));
							return (p5context([('throw(new p5_error("redo", "' + p5str(v_label) + '"))')], p5want));
					}, 'return', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							return (p5context([('throw(' + p5str(p5pkg["Perlito5::Javascript"].to_runtime_context(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments'], v_level), 0)) + ')')], p5want));
					}, 'goto', function (List__, p5want) {
							var v_self = null;
							(v_self = (List__[p5idx(List__,0)]));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							return (p5context([('throw((' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [], 0)) + ')([List__, p5want]))')], p5want));
					}, 'do', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_ast = null;
							(v_ast = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'eval', 'namespace', '', 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'slurp', 'namespace', 'Perlito5::IO', 'arguments', (v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 1))))), 0)));
							return (p5call(v_ast, "emit_javascript", [v_level], p5want));
					}, 'eval', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							(p5pkg["Perlito5"]["v_THROW"] = (1));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							var v_eval = null;
							if ( p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Do'], 0)) ) {
								(v_eval = (p5call(v_arg, "emit_javascript", [(p5num(v_level) + 1), v_wantarray], 0)));
							}
							else {
								(function () {
									var v_var_env_perl5 = null;
									(v_var_env_perl5 = (p5pkg["Perlito5::Dumper"].Dumper([p5pkg["Perlito5"]["v_VAR"]], 0)));
									var v_m = null;
									(v_m = (p5call(p5pkg["Perlito5::Expression"], "term_square", [v_var_env_perl5, 0], 0)));
									(v_m = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5ArrayRef([])))._array_,2)]), 0)));
									var v_var_env_js = null;
									(v_var_env_js = (('(new p5ArrayRef(' + p5str(p5pkg["Perlito5::Javascript"].to_list([v_m], 0)) + '))')));
									(v_eval = (('eval(perl5_to_js(' + p5str(p5pkg["Perlito5::Javascript"].to_str([v_arg], 0)) + ', ' + '"' + p5str(p5pkg["Perlito5"]["v_PKG_NAME"]) + '", ' + p5str(v_var_env_js) + '))')));
									})();
							};
							return (p5context([('(function () {' + String.fromCharCode(10) + 'var r = null;' + String.fromCharCode(10) + 'p5pkg["main"]["v_@"] = "";' + String.fromCharCode(10) + 'try {' + String.fromCharCode(10) + 'r = ' + p5str(v_eval) + String.fromCharCode(10) + '}' + String.fromCharCode(10) + 'catch(err) {' + String.fromCharCode(10) + 'if ( err instanceof p5_error ) {' + String.fromCharCode(10) + 'p5pkg["main"]["v_@"] = err;' + String.fromCharCode(10) + '}' + String.fromCharCode(10) + 'else if ( err instanceof Error ) {' + String.fromCharCode(10) + 'p5pkg["main"]["v_@"] = err;' + String.fromCharCode(10) + '}' + String.fromCharCode(10) + 'else {' + String.fromCharCode(10) + 'throw(err);' + String.fromCharCode(10) + '}' + String.fromCharCode(10) + '}' + String.fromCharCode(10) + 'return r;' + String.fromCharCode(10) + '})()')], p5want));
					}, 'undef', function (List__, p5want) {
						try {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							if ( (p5bool((v_self || (v_self = new p5HashRef({})))._hash_['arguments']) && p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)) ) {
								throw(p5context([('(' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [], 0)) + ' = null)')], p5want));
							};
							return (p5context(['null'], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}, 'defined', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([' ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ' != null)')], p5want));
					}, 'shift', function (List__, p5want) {
						try {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							if ( (p5bool((v_self || (v_self = new p5HashRef({})))._hash_['arguments']) && p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)) ) {
								throw(p5context([(p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + '.shift([' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + '])')], p5want));
							};
							return (p5context([(p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + '.shift([List__])')], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}, 'map', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var List_in = [];
							(List_in = p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_));
							var v_fun = null;
							(v_fun = (p5pkg["Perlito5::AST::Apply"].shift([List_in])));
							var v_list = null;
							(v_list = (p5pkg["Perlito5::Javascript"].to_list([(new p5ArrayRef(List_in))], 0)));
							if ( (p5str(p5pkg["Perlito5::AST::Apply"].ref([v_fun], 0)) == 'Perlito5::AST::Lit::Block') ) {
								(v_fun = ((v_fun || (v_fun = new p5HashRef({})))._hash_['stmts']));
							}
							else {
								(v_fun = ((new p5ArrayRef([v_fun]))));
							};
							return (p5context([('p5map(' + p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + ', ' + 'function (p5want) {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", ['block', v_fun, 'needs_return', 1, 'top_level', 0], p5want)], 0), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}, ' + p5str(v_list) + ')')], p5want));
					}, 'grep', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var List_in = [];
							(List_in = p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_));
							var v_fun = null;
							(v_fun = (p5pkg["Perlito5::AST::Apply"].shift([List_in])));
							var v_list = null;
							(v_list = (p5pkg["Perlito5::Javascript"].to_list([(new p5ArrayRef(List_in))], 0)));
							if ( (p5str(p5pkg["Perlito5::AST::Apply"].ref([v_fun], 0)) == 'Perlito5::AST::Lit::Block') ) {
								(v_fun = ((v_fun || (v_fun = new p5HashRef({})))._hash_['stmts']));
							}
							else {
								(v_fun = ((new p5ArrayRef([v_fun]))));
							};
							return (p5context([('p5grep(' + p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + ', ' + 'function (p5want) {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", ['block', v_fun, 'needs_return', 1, 'top_level', 0], p5want)], 0), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}, ' + p5str(v_list) + ')')], p5want));
					}, 'sort', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var List_in = [];
							(List_in = p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_));
							var v_fun = null;
							var v_list = null;
							if ( (p5str(p5pkg["Perlito5::AST::Apply"].ref([List_in[p5idx(List_in,0)]], 0)) == 'Perlito5::AST::Lit::Block') ) {
								(v_fun = (p5pkg["Perlito5::AST::Apply"].shift([List_in])));
								(v_fun = (('function (p5want) {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', (v_fun || (v_fun = new p5HashRef({})))._hash_['stmts'], 'needs_return', 1, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')));
							}
							else {
								(v_fun = ('null'));
							};
							(v_list = (p5pkg["Perlito5::Javascript"].to_list([(new p5ArrayRef(List_in))], 0)));
							return (p5context([('p5sort(' + p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + ', ' + p5str(v_fun) + ', ' + p5str(v_list) + ')')], p5want));
					}, 'infix:<//>', function (List__, p5want) {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							return (p5context([('p5defined_or' + '(' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, v_wantarray], 0)) + ', ' + p5str(p5pkg["Perlito5::Javascript"].emit_function_javascript(p5list_to_a(v_level, v_wantarray, ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]), 0)) + ')')], p5want));
					}, 'exists', function (List__, p5want) {
						try {
							var v_self = null;
							(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_level = null;
							(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_wantarray = null;
							(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
							var v_arg = null;
							(v_arg = (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]));
							if ( p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Lookup'], 0)) ) {
								(function () {
									var v_v = null;
									(v_v = (p5call(v_arg, "obj", [], 0)));
									if ( (p5bool(p5call(v_v, "isa", ['Perlito5::AST::Var'], 0)) && (p5str(p5call(v_v, "sigil", [], 0)) == '$')) ) {
										(v_v = (p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', '%', 'namespace', p5call(v_v, "namespace", [], 1), 'name', p5call(v_v, "name", [], 1)), 0)));
										throw(p5context([('(' + p5str(p5call(v_v, "emit_javascript", [], 0)) + ').hasOwnProperty(' + p5str(p5call(p5call(v_arg, "autoquote", p5list_to_a((v_arg || (v_arg = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], 0)) + ')')], p5want));
									};
									throw(p5context([('(' + p5str(p5call(v_v, "emit_javascript", [], 0)) + ')._hash_.hasOwnProperty(' + p5str(p5call(p5call(v_arg, "autoquote", p5list_to_a((v_arg || (v_arg = new p5HashRef({})))._hash_['index_exp']), p5want), "emit_javascript", [v_level], 0)) + ')')], p5want));
									})();
							};
							if ( p5bool(p5call(v_arg, "isa", ['Perlito5::AST::Call'], 0)) ) {
								if ( (p5str(p5call(v_arg, "method", [], 0)) == 'postcircumfix:<{ }>') ) {
									throw(p5context([('(' + p5str(p5call(p5call(v_arg, "invocant", [], p5want), "emit_javascript", [], 0)) + ')._hash_.hasOwnProperty(' + p5str(p5call(p5call(p5pkg["Perlito5::AST::Lookup"], "autoquote", p5list_to_a((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments']), p5want), "emit_javascript", [v_level], 0)) + ')')], p5want))
								}
								
								else {
									null;
								}
							}
							
							else {
								null;
							}
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}]));
				p5make_sub("Perlito5::AST::Apply", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						var v_wantarray = null;
						(v_wantarray = (p5pkg["Perlito5::AST::Apply"].shift([List__])));
						var v_apply = null;
						(v_apply = (p5call(v_self, "op_assign", [], 0)));
						if ( p5bool(v_apply) ) {
							throw(p5call(v_apply, "emit_javascript", [v_level], p5want));
						};
						var v_code = null;
						(v_code = ((v_self || (v_self = new p5HashRef({})))._hash_['code']));
						if ( (p5str(p5pkg["Perlito5::AST::Apply"].ref([v_code], 0)) != '') ) {
							(function () {
								var List_args = [];
								(List_args = []);
								p5for(p5pkg["Perlito5::AST::Apply"], function () {
										p5pkg["Perlito5::AST::Apply"].push([List_args, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [], 1))], null);
									}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_), false, "");
								throw(p5context([('(' + p5str(p5call((v_self || (v_self = new p5HashRef({})))._hash_['code'], "emit_javascript", [v_level], 0)) + ')(' + p5pkg["Perlito5::AST::Apply"].join([',', p5list_to_a(List_args)], 0) + ')')], p5want));
								})();
						};
						if ( (Hash_emit_js).hasOwnProperty(v_code) ) {
							throw((Hash_emit_js[v_code])([v_self, v_level, v_wantarray]));
						};
						if ( (p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_str"]).hasOwnProperty(v_code) ) {
							throw(p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_str"][v_code], p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_str([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
						};
						if ( (p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_num"]).hasOwnProperty(v_code) ) {
							throw(p5context([('(' + p5pkg["Perlito5::AST::Apply"].join([p5pkg["Perlito5::Javascript"]["Hash_op_infix_js_num"][v_code], p5list_to_a(p5map(p5pkg["Perlito5::AST::Apply"], function (p5want) {
	return (p5pkg["Perlito5::Javascript"].to_num([p5pkg["Perlito5::AST::Apply"]["v__"]], p5want));
}, p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_)))], 0) + ')')], p5want));
						};
						if ( (p5pkg["Perlito5::Javascript"]["Hash_op_prefix_js_str"]).hasOwnProperty(v_code) ) {
							throw(p5context([(p5str(p5pkg["Perlito5::Javascript"]["Hash_op_prefix_js_str"][v_code]) + '(' + p5str(p5pkg["Perlito5::Javascript"].to_str(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)]), 0)) + ')')], p5want));
						};
						if ( ((p5str(v_code) == 'infix:<&&>') || (p5str(v_code) == 'infix:<and>')) ) {
							throw(p5context([('p5and' + '(' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, v_wantarray], 0)) + ', ' + p5str(p5pkg["Perlito5::Javascript"].emit_function_javascript(p5list_to_a(v_level, v_wantarray, ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]), 0)) + ')')], p5want));
						};
						if ( ((p5str(v_code) == 'infix:<||>') || (p5str(v_code) == 'infix:<or>')) ) {
							throw(p5context([('p5or' + '(' + p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [v_level, v_wantarray], 0)) + ', ' + p5str(p5pkg["Perlito5::Javascript"].emit_function_javascript(p5list_to_a(v_level, v_wantarray, ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,1)]), 0)) + ')')], p5want));
						};
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) ) {
							if ( ((p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) == 'JS') && (p5str(v_code) == 'inline')) ) {
								if ( p5bool(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], "isa", ['Perlito5::AST::Val::Buf'], 0)) ) {
									throw((((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['buf']);
								}
								else {
									p5pkg["Perlito5::AST::Apply"].die([['JS::inline needs a string constant']], null);
								};
							};
							(v_code = (('p5pkg["' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '"].' + p5str(v_code))));
						}
						else {
							(v_code = ((p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + '.' + p5str(v_code))));
						};
						var v_sig = null;
						p5for_lex(function () {
								var v_name = null;
								(v_name = ((v_self || (v_self = new p5HashRef({})))._hash_['code']));
								var v_namespace = null;
								(v_namespace = (p5or((v_self || (v_self = new p5HashRef({})))._hash_['namespace'], function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })));
								var v_effective_name = null;
								(v_effective_name = ((p5str(v_namespace) + '::' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['code']))));
								if ( (p5pkg["Perlito5"]["v_PROTO"])._hash_.hasOwnProperty(v_effective_name) ) {
									(v_sig = ((p5pkg["Perlito5"]["v_PROTO"] || (p5pkg["Perlito5"]["v_PROTO"] = new p5HashRef({})))._hash_[v_effective_name]));
								}
								else {
									if ( ((!( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace'])) || (p5str(v_namespace) == 'CORE')) && (p5pkg["Perlito5"]["v_CORE_PROTO"])._hash_.hasOwnProperty(('CORE::' + p5str(v_name)))) ) {
										(v_effective_name = (('CORE::' + p5str(v_name))));
										(v_sig = ((p5pkg["Perlito5"]["v_CORE_PROTO"] || (p5pkg["Perlito5"]["v_CORE_PROTO"] = new p5HashRef({})))._hash_[v_effective_name]));
									}
									else {
										if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['bareword']) ) {
											if ( p5bool(p5pkg["Perlito5"]["v_STRICT"]) ) {
												p5pkg["Perlito5::AST::Apply"].die([[('Bareword "' + p5str(v_name) + '" not allowed while "strict subs" in use')]], null);
											};
											throw(p5pkg["Perlito5::Javascript"].escape_string([(p5str(( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) ? (p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '::') : '')) + p5str(v_name))], p5want));
										};
									};
								};
							}, [0], false, "");
						if ( p5bool(v_sig) ) {
							(function () {
								var List_out = [];
								(List_out = []);
								var List_in = [];
								(List_in = p5list_to_a((p5or((v_self || (v_self = new p5HashRef({})))._hash_['arguments'], function () { return (new p5ArrayRef([])) }) || (p5or((v_self || (v_self = new p5HashRef({})))._hash_['arguments'], function () { return (new p5ArrayRef([])) }) = new p5ArrayRef([])))._array_));
								var v_optional = null;
								(v_optional = (0));
								p5while(function () {
										var v_c = null;
										(v_c = (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 0, 1], 0)));
										if ( (p5str(v_c) == ';') ) {
											(v_optional = (1));
										}
										else {
											if ( ((p5str(v_c) == '$') || (p5str(v_c) == '_')) ) {
												if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
													p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"].shift([List_in]), "emit_javascript", [v_level, 'scalar'], 1))], null);
												};
											}
											else {
												if ( (p5str(v_c) == '@') ) {
													if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
														p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5pkg["Perlito5::Javascript"].to_list([(new p5ArrayRef(List_in))], 1))], null);
													};
													(List_in = []);
												}
												else {
													if ( (p5str(v_c) == '*') ) {
														if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
															(function () {
																var v_arg = null;
																(v_arg = (p5pkg["Perlito5::AST::Apply"].shift([List_in])));
																if ( p5bool((v_arg || (v_arg = new p5HashRef({})))._hash_['bareword']) ) {
																	p5pkg["Perlito5::AST::Apply"].push([List_out, [('p5pkg["' + p5str(p5or((v_arg || (v_arg = new p5HashRef({})))._hash_['namespace'], function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })) + '"]["f_' + p5str((v_arg || (v_arg = new p5HashRef({})))._hash_['code']) + '"]')]], null);
																}
																else {
																	p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5call(v_arg, "emit_javascript", [v_level, 'scalar'], 1))], null);
																};
																})();
														};
													}
													else {
														if ( (p5str(v_c) == String.fromCharCode(92)) ) {
															if ( (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 0, 2], 0) == String.fromCharCode(92) + '$') ) {
																(v_sig = (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 1], 0)));
																if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
																	p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"].shift([List_in]), "emit_javascript", [v_level, 'scalar'], 1))], null);
																};
															}
															else {
																if ( ((p5pkg["Perlito5::AST::Apply"].substr([v_sig, 0, 2], 0) == String.fromCharCode(92) + '@') || (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 0, 2], 0) == String.fromCharCode(92) + '%')) ) {
																	(v_sig = (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 1], 0)));
																	if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
																		p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"].shift([List_in]), "emit_javascript", [v_level, 'list'], 1))], null);
																	};
																}
																else {
																	if ( (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 0, 5], 0) == String.fromCharCode(92) + '[@%]') ) {
																		(v_sig = (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 4], 0)));
																		if ( (p5bool(List_in.length) || !( p5bool(v_optional))) ) {
																			p5pkg["Perlito5::AST::Apply"].push([List_out, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"].shift([List_in]), "emit_javascript", [v_level, 'list'], 1))], null);
																		};
																	};
																};
															};
														};
													};
												};
											};
										};
										(v_sig = (p5pkg["Perlito5::AST::Apply"].substr([v_sig, 1], 0)));
									}, function () { return p5pkg["Perlito5::AST::Apply"].length([v_sig], p5want) }, false, "");
								throw(p5context([(p5str(v_code) + '([' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(List_out)], 0) + '], ' + p5str(( (p5str(v_wantarray) == 'list') ? '1' : ( (p5str(v_wantarray) == 'scalar') ? '0' : ( (p5str(v_wantarray) == 'void') ? 'null' : 'p5want')))) + ')')], p5want));
								})();
						};
						var List_args = [];
						(List_args = []);
						var v_arg_list = null;
						(v_arg_list = (p5pkg["Perlito5::Javascript"].to_list_preprocess(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 0)));
						p5for(p5pkg["Perlito5::AST::Apply"], function () {
								p5pkg["Perlito5::AST::Apply"].push([List_args, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"]["v__"], "emit_javascript", [v_level], 1))], null);
							}, p5list_to_a((v_arg_list || (v_arg_list = new p5ArrayRef([])))._array_), false, "");
						var v_arg_code = null;
						(v_arg_code = (( (p5str((v_self || (v_self = new p5HashRef({})))._hash_['code']) == 'scalar') ? ('[' + p5pkg["Perlito5::AST::Apply"].join([', ', p5list_to_a(List_args)], 0) + ']') : p5pkg["Perlito5::Javascript"].to_list([v_arg_list], 0))));
						return (p5context([(p5str(v_code) + '(' + p5str(v_arg_code) + ', ' + p5str(( (p5str(v_wantarray) == 'list') ? '1' : ( (p5str(v_wantarray) == 'scalar') ? '0' : ( (p5str(v_wantarray) == 'void') ? 'null' : 'p5want')))) + ')')], p5want));
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5140 = p5make_package("Perlito5::AST::If");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::If", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::If"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::If"].shift([List__])));
						var v_cond = null;
						(v_cond = ((v_self || (v_self = new p5HashRef({})))._hash_['cond']));
						var v_body = null;
						(v_body = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'create_context', 1), 0)));
						var v_s = null;
						(v_s = (('if ( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool([v_cond, (p5num(v_level) + 1)], 0)) + ' ) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')));
						if ( p5bool((p5call((v_self || (v_self = new p5HashRef({})))._hash_['otherwise'], "stmts", [], p5want) || (p5call((v_self || (v_self = new p5HashRef({})))._hash_['otherwise'], "stmts", [], p5want) = new p5ArrayRef([])))._array_) ) {
							(function () {
								var v_otherwise = null;
								(v_otherwise = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['otherwise'], "stmts", [], 1), 'needs_return', 0, 'create_context', 1), 0)));
								(v_s = ((p5str(v_s) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + 'else {' + String.fromCharCode(10) + p5str(p5call(v_otherwise, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')));
								})();
						};
						return (p5context([v_s], p5want));
				});
			}, [0], false, "");
		var p5141 = p5make_package("Perlito5::AST::When");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::When", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::When"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::When"].shift([List__])));
						var v_cond = null;
						(v_cond = ((v_self || (v_self = new p5HashRef({})))._hash_['cond']));
						var v_body = null;
						(v_body = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'create_context', 1), 0)));
						var v_expr = null;
						(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)));
						var v_s = null;
						(v_s = (('if ( ' + p5str(p5pkg["Perlito5::Javascript"].to_bool([v_expr, (p5num(v_level) + 1)], 0)) + ' ) {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + 'throw(new p5_error("next", "' + p5str(p5pkg["Perlito5::AST::When"]["v_label"]) + '"))' + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')));
						return (p5context([v_s], p5want));
				});
			}, [0], false, "");
		var p5142 = p5make_package("Perlito5::AST::While");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::While", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::While"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::While"].shift([List__])));
						var v_cond = null;
						(v_cond = ((v_self || (v_self = new p5HashRef({})))._hash_['cond']));
						return (p5context([('p5while(' + 'function () {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + p5str(p5pkg["Perlito5::Javascript"].emit_function_javascript([v_level, 0, v_cond], 0)) + ', ' + p5str(p5pkg["Perlito5::AST::Lit::Block"].emit_javascript_continue([v_self, v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['label'], function () { return '' })) + '"' + ')')], p5want));
				});
			}, [0], false, "");
		var p5143 = p5make_package("Perlito5::AST::For");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::For", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::For"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::For"].shift([List__])));
						if ( (p5str(p5pkg["Perlito5::AST::For"].ref([(v_self || (v_self = new p5HashRef({})))._hash_['cond']], 0)) == 'ARRAY') ) {
							(function () {
								var v_body = null;
								(v_body = (p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'create_context', 1), 0)));
								throw(p5context([('for ( ' + p5str(( p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,0)]) ? (p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,0)], "emit_javascript", [(p5num(v_level) + 1)], 0)) + '; ') : '; ')) + p5str(( p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,1)]) ? (p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,1)], "emit_javascript", [(p5num(v_level) + 1)], 0)) + '; ') : '; ')) + p5str(( p5bool(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,2)]) ? (p5str(p5call(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['cond'] || ((v_self || (v_self = new p5HashRef({})))._hash_['cond'] = new p5ArrayRef([])))._array_,2)], "emit_javascript", [(p5num(v_level) + 1)], 0)) + ' ') : ' ')) + ') {' + String.fromCharCode(10) + p5str(p5call(v_body, "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')], p5want));
								})();
						};
						var v_cond = null;
						(v_cond = (p5pkg["Perlito5::Javascript"].to_list(p5list_to_a((new p5ArrayRef(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['cond']))), (p5num(v_level) + 1)), 0)));
						if ( p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "sig", [], 0)) ) {
							var v_v = null;
							(v_v = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "sig", [], 0)));
							(((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] || ((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_[p5call(v_v, "perl5_name", [], p5want)] = (new p5HashRef({'decl' : 'my'})));
							var v_sig = null;
							(v_sig = (p5call(v_v, "emit_javascript", [(p5num(v_level) + 1)], 0)));
							throw(p5context([('p5for_lex(' + ('function (' + p5str(v_sig) + ') {' + String.fromCharCode(10)) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + p5str(v_cond) + ', ' + p5str(p5pkg["Perlito5::AST::Lit::Block"].emit_javascript_continue([v_self, v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['label'], function () { return '' })) + '"' + ')')], p5want))
						}
						
						else {
							throw(p5context([('p5for(' + p5str(p5pkg["Perlito5::Javascript"].pkg([], 0)) + ', ' + 'function () {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_['body'], "stmts", [], 1), 'needs_return', 0, 'top_level', 0), p5want)], 0), "emit_javascript", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + p5str(v_cond) + ', ' + p5str(p5pkg["Perlito5::AST::Lit::Block"].emit_javascript_continue([v_self, v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_['label'], function () { return '' })) + '"' + ')')], p5want))
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5144 = p5make_package("Perlito5::AST::Sub");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Sub", "emit_javascript", function (List__, p5want) {
					try {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Sub"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Sub"].shift([List__])));
						var v_s = null;
						(v_s = (('function (List__, p5want) {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", p5list_to_a('block', (v_self || (v_self = new p5HashRef({})))._hash_['block'], 'needs_return', 1, 'top_level', 1), p5want)], 0), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '}')));
						if ( p5bool((v_self || (v_self = new p5HashRef({})))._hash_['name']) ) {
							throw(p5context([('p5make_sub("' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['namespace']) + '", "' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['name']) + '", ' + p5str(v_s) + ')')], p5want))
						}
						
						else {
							throw(p5context([v_s], p5want))
						}
					}
					catch(err) {
						if ( err instanceof Error ) {
							throw(err);
						}
						else {
							return(err);
						}
					}
				});
			}, [0], false, "");
		var p5145 = p5make_package("Perlito5::AST::Do");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Do", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Do"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Do"].shift([List__])));
						var v_block = null;
						(v_block = (p5call(p5call(v_self, "simplify", [], p5want), "block", [], 0)));
						return (p5context([('(function () {' + String.fromCharCode(10) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript::LexicalBlock"], "new", ['block', v_block, 'needs_return', 1], p5want)], 0), "emit_javascript", [(p5num(v_level) + 1)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript"].tab([v_level], 0)) + '})()')], p5want));
				});
			}, [0], false, "");
		var p5146 = p5make_package("Perlito5::AST::Use");
		p5for_lex(function () {
				p5make_sub("Perlito5::AST::Use", "emit_javascript", function (List__, p5want) {
						var v_self = null;
						(v_self = (p5pkg["Perlito5::AST::Use"].shift([List__])));
						var v_level = null;
						(v_level = (p5pkg["Perlito5::AST::Use"].shift([List__])));
						p5pkg["Perlito5::Grammar::Use"].emit_time_eval([v_self], null);
						return (p5context([('// ' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['code']) + ' ' + p5str((v_self || (v_self = new p5HashRef({})))._hash_['mod']) + String.fromCharCode(10))], p5want));
				});
			}, [0], false, "");
	})()
;
	// use Perlito5::Javascript::Emitter
;
	(function () {
		var p5147 = p5make_package("Perlito5::Precedence");
		p5make_sub("Perlito5::Precedence", "new", function (List__, p5want) {
				var v_class = null;
				(v_class = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return (p5pkg["Perlito5::Precedence"].bless([(new p5HashRef(p5a_to_h(p5list_to_a(List__)))), v_class], p5want));
		});
		var v_Operator = null;
		(v_Operator = ((new p5HashRef({}))));
		var v_Precedence = null;
		(v_Precedence = ((new p5HashRef({}))));
		var v_Assoc = null;
		(v_Assoc = ((new p5HashRef({}))));
		p5make_sub("Perlito5::Precedence", "is_assoc_type", function (List__, p5want) {
				var v_assoc_type = null;
				(v_assoc_type = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_op_name = null;
				(v_op_name = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return (((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_[v_assoc_type] || ((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_[v_assoc_type] = new p5HashRef({})))._hash_[v_op_name]);
		});
		p5make_sub("Perlito5::Precedence", "is_fixity_type", function (List__, p5want) {
				var v_fixity_type = null;
				(v_fixity_type = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_op_name = null;
				(v_op_name = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return (((v_Operator || (v_Operator = new p5HashRef({})))._hash_[v_fixity_type] || ((v_Operator || (v_Operator = new p5HashRef({})))._hash_[v_fixity_type] = new p5HashRef({})))._hash_[v_op_name]);
		});
		p5make_sub("Perlito5::Precedence", "is_term", function (List__, p5want) {
				var v_token = null;
				(v_token = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return (p5or(p5or(p5context([(p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) == 'term')], p5want), function () { return p5context([(p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) == 'postfix_or_term')], p5want) }), function () { return p5context([(p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) == 'postfix')], p5want) }));
		});
		p5make_sub("Perlito5::Precedence", "is_ident_middle", function (List__, p5want) {
				var v_c = null;
				(v_c = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return (p5or(p5or(p5context([p5and((p5str(v_c) >= 'a'), function () { return (p5str(v_c) <= 'z') })], p5want), function () { return p5context([p5and((p5str(v_c) >= '0'), function () { return (p5str(v_c) <= '9') })], p5want) }), function () { return p5context([(p5str(v_c) == '_')], p5want) }));
		});
		var List_Parsed_op_chars = [];
		(List_Parsed_op_chars = [2, 1]);
		var Hash_Parsed_op = {};
		(Hash_Parsed_op = p5a_to_h(['?', function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_ternary", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '(', function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_paren", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '[', function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_square", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '{', function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_curly", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '->', function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_arrow", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}]));
		var List_Term_chars = [];
		(List_Term_chars = [7, 6, 5, 4, 3, 2, 1]);
		var Hash_Term = {};
		(Hash_Term = {'.' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '0' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '1' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '2' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '3' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '4' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '5' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '6' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '7' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '8' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, '9' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_digit", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'my' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_declarator", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'do' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_do", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'our' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_declarator", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'sub' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_anon_sub", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'map' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_map_or_sort", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'eval' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_eval", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'sort' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_map_or_sort", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'grep' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_map_or_sort", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'state' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_declarator", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'local' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_declarator", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'return' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_return", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'package' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Expression"], "term_package", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}});
		p5make_sub("Perlito5::Precedence", "add_term", function (List__, p5want) {
				var v_name = null;
				(v_name = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_param = null;
				(v_param = (p5pkg["Perlito5::Precedence"].shift([List__])));
				return ((Hash_Term[v_name] = v_param));
		});
		var v_End_token = null;
		var v_End_token_chars = null;
		var Hash_Op = {};
		var List_Op_chars = [];
		(List_Op_chars = [3, 2, 1]);
		p5make_sub("Perlito5::Precedence", "op_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_str = null;
				(v_str = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_pos = null;
				(v_pos = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_last_is_term = null;
				(v_last_is_term = (p5pkg["Perlito5::Precedence"].shift([List__])));
				p5for_lex(function (v_len) {
						var v_term = null;
						(v_term = (p5pkg["Perlito5::Precedence"].substr([v_str, v_pos, v_len], 0)));
						if ( (v_End_token)._hash_.hasOwnProperty(v_term) ) {
							(function () {
								var v_c1 = null;
								(v_c1 = (p5pkg["Perlito5::Precedence"].substr([v_str, ((p5num(v_pos) + p5pkg["Perlito5::Precedence"].length([v_term], 0)) - 1), 1], 0)));
								var v_c2 = null;
								(v_c2 = (p5pkg["Perlito5::Precedence"].substr([v_str, (p5num(v_pos) + p5pkg["Perlito5::Precedence"].length([v_term], 0)), 1], 0)));
								if ( !( (p5bool(p5pkg["Perlito5::Precedence"].is_ident_middle([v_c1], 0)) && p5bool(p5pkg["Perlito5::Precedence"].is_ident_middle([v_c2], 0)))) ) {
									throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', v_pos, 'capture', (new p5ArrayRef(['end', v_term])))))));
								};
								})();
						};
					}, p5list_to_a((v_End_token_chars || (v_End_token_chars = new p5ArrayRef([])))._array_), false, "");
				if ( !( p5bool(v_last_is_term)) ) {
					p5for_lex(function (v_len) {
							var v_term = null;
							(v_term = (p5pkg["Perlito5::Precedence"].substr([v_str, v_pos, v_len], 0)));
							if ( (Hash_Term).hasOwnProperty(v_term) ) {
								(function () {
									var v_m = null;
									(v_m = ((Hash_Term[v_term])([v_str, v_pos])));
									if ( p5bool(v_m) ) {
										throw(p5context([v_m], p5want));
									};
									})();
							};
						}, p5list_to_a(List_Term_chars), false, "");
				};
				p5for_lex(function (v_len) {
						var v_op = null;
						(v_op = (p5pkg["Perlito5::Precedence"].substr([v_str, v_pos, v_len], 0)));
						if ( (Hash_Parsed_op).hasOwnProperty(v_op) ) {
							(function () {
								var v_m = null;
								(v_m = ((Hash_Parsed_op[v_op])([v_str, v_pos])));
								if ( p5bool(v_m) ) {
									throw(p5context([v_m], p5want));
								};
								})();
						};
					}, p5list_to_a(List_Parsed_op_chars), false, "");
				p5for_lex(function (v_len) {
						var v_op = null;
						(v_op = (p5pkg["Perlito5::Precedence"].substr([v_str, v_pos, v_len], 0)));
						if ( (Hash_Op).hasOwnProperty(v_op) ) {
							(function () {
								var v_c1 = null;
								(v_c1 = (p5pkg["Perlito5::Precedence"].substr([v_str, ((p5num(v_pos) + p5pkg["Perlito5::Precedence"].length([v_op], 0)) - 1), 1], 0)));
								var v_c2 = null;
								(v_c2 = (p5pkg["Perlito5::Precedence"].substr([v_str, (p5num(v_pos) + p5pkg["Perlito5::Precedence"].length([v_op], 0)), 1], 0)));
								if ( (!( (p5bool(p5pkg["Perlito5::Precedence"].is_ident_middle([v_c1], 0)) && p5bool(p5pkg["Perlito5::Precedence"].is_ident_middle([v_c2], 0)))) && !( ((p5str(v_c1) == '&') && (p5str(v_c2) == '&')))) ) {
									if ( ((((v_Operator || (v_Operator = new p5HashRef({})))._hash_['infix'])._hash_.hasOwnProperty(v_op) && !( ((v_Operator || (v_Operator = new p5HashRef({})))._hash_['prefix'])._hash_.hasOwnProperty(v_op))) && !( p5bool(v_last_is_term))) ) {
										null;
									}
									else {
										throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_pos) + p5num(v_len)), 'capture', (new p5ArrayRef(['op', v_op])))))));
									};
								};
								})();
						};
					}, p5list_to_a(List_Op_chars), false, "");
				return (p5call(p5pkg["Perlito5::Grammar::Bareword"], "term_bareword", [v_str, v_pos], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Precedence", "add_op", function (List__, p5want) {
				var v_fixity = null;
				(v_fixity = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_name = null;
				(v_name = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_precedence = null;
				(v_precedence = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_param = null;
				(v_param = (p5pkg["Perlito5::Precedence"].shift([List__])));
				if ( !( (v_param != null)) ) {
					(v_param = ((new p5HashRef({}))));
				};
				var v_assoc = null;
				(v_assoc = (p5or((v_param || (v_param = new p5HashRef({})))._hash_['assoc'], function () { return 'left' })));
				(((v_Operator || (v_Operator = new p5HashRef({})))._hash_[v_fixity] || ((v_Operator || (v_Operator = new p5HashRef({})))._hash_[v_fixity] = new p5HashRef({})))._hash_[v_name] = 1);
				((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[v_name] = v_precedence);
				(((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_[v_assoc] || ((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_[v_assoc] = new p5HashRef({})))._hash_[v_name] = 1);
				return ((Hash_Op[v_name] = 1));
		});
		var v_prec = null;
		(v_prec = (100));
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '.( )', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '.[ ]', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '.{ }', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '( )', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '[ ]', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'funcall', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'funcall_no_params', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'methcall', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'methcall_no_params', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'block', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', 'hash', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '++', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '--', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '++', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['postfix', '--', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '**', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['prefix', String.fromCharCode(92), v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '+', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '-', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '~', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['prefix', '!', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '=~', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '!~', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '*', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '/', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '%', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', 'x', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '+', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '-', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '.', v_prec, (new p5HashRef({'assoc' : 'list'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '<<', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '>>', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5for(p5pkg["Perlito5::Precedence"], function () {
				p5pkg["Perlito5::Precedence"].add_op(['prefix', p5pkg["Perlito5::Precedence"]["v__"], v_prec], null);
			}, ['-r', '-w', '-x', '-o', '-R', '-W', '-X', '-O', '-e', '-z', '-s', '-f', '-d', '-l', '-p', '-S', '-b', '-c', '-t', '-u', '-g', '-k', '-T', '-B', '-M', '-A', '-C'], false, "");
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'lt', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'le', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'gt', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'ge', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '<=', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '>=', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '<', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '>', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '<=>', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', 'cmp', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '==', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '!=', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'ne', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'eq', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '&', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '|', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '^', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '..', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '...', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '~~', v_prec, (new p5HashRef({'assoc' : 'chain'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '&&', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '||', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', '//', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('ternary', '? :', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '**=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '+=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '-=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '*=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '/=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', 'x=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '|=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '&=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '.=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '<<=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '>>=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '%=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '||=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '&&=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '^=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('infix', '//=', v_prec, (new p5HashRef({'assoc' : 'right'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '=>', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(p5list_to_a('list', ',', v_prec, (new p5HashRef({'assoc' : 'list'}))), null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['prefix', 'not', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', 'and', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', 'or', v_prec], null);
		p5pkg["Perlito5::Precedence"].add_op(['infix', 'xor', v_prec], null);
		(v_prec = ((p5num(v_prec) - 1)));
		p5pkg["Perlito5::Precedence"].add_op(['infix', '*start*', v_prec], null);
		p5make_sub("Perlito5::Precedence", "precedence_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Precedence"].shift([List__])));
				var v_get_token = null;
				(v_get_token = ((v_self || (v_self = new p5HashRef({})))._hash_['get_token']));
				var v_reduce = null;
				(v_reduce = ((v_self || (v_self = new p5HashRef({})))._hash_['reduce']));
				var v_last_end_token = null;
				(v_last_end_token = (v_End_token));
				var v_last_end_token_chars = null;
				(v_last_end_token_chars = (v_End_token_chars));
				(v_End_token = ((v_self || (v_self = new p5HashRef({})))._hash_['end_token']));
				(v_End_token_chars = ((v_self || (v_self = new p5HashRef({})))._hash_['end_token_chars']));
				var v_op_stack = null;
				(v_op_stack = ((new p5ArrayRef([]))));
				var v_num_stack = null;
				(v_num_stack = ((new p5ArrayRef([]))));
				var v_last = null;
				(v_last = ((new p5ArrayRef(['op', '*start*']))));
				var v_last_is_term = null;
				(v_last_is_term = (0));
				var v_token = null;
				(v_token = ((v_get_token)([v_last_is_term])));
				if ( (p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) == 'space') ) {
					(v_token = ((v_get_token)([v_last_is_term])));
				};
				p5while(function () {
						var v_token_is_term = null;
						(v_token_is_term = (p5pkg["Perlito5::Precedence"].is_term([v_token], 0)));
						if ( ((p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]) == ',') && ((p5str((v_last || (v_last = new p5ArrayRef([])))._array_[p5idx((v_last || (v_last = new p5ArrayRef([])))._array_,1)]) == '*start*') || (p5str((v_last || (v_last = new p5ArrayRef([])))._array_[p5idx((v_last || (v_last = new p5ArrayRef([])))._array_,1)]) == ','))) ) {
							p5pkg["Perlito5::Precedence"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a((new p5ArrayRef(p5list_to_a('term', null))))], null);
						};
						if ( (p5bool(((v_Operator || (v_Operator = new p5HashRef({})))._hash_['prefix'] || ((v_Operator || (v_Operator = new p5HashRef({})))._hash_['prefix'] = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]) && ((p5str((v_last || (v_last = new p5ArrayRef([])))._array_[p5idx((v_last || (v_last = new p5ArrayRef([])))._array_,1)]) == '*start*') || !( p5bool(v_last_is_term)))) ) {
							((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)] = 'prefix');
							p5pkg["Perlito5::Precedence"].unshift([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_, [v_token]], null);
						}
						else {
							if ( (p5bool((p5context([(v_Operator || (v_Operator = new p5HashRef({})))._hash_['postfix']], 0) || (p5context([(v_Operator || (v_Operator = new p5HashRef({})))._hash_['postfix']], 0) = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]) && p5bool(v_last_is_term)) ) {
								(function () {
									var v_pr = null;
									(v_pr = ((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]));
									p5while(function () {
											(v_reduce)([v_op_stack, v_num_stack]);
										}, function () { return p5and(((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_), function () { return p5context([(p5num(v_pr) <= p5num((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_[p5idx((p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_,1)]]))], 0) }) }, false, "");
									if ( (p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) != 'postfix_or_term') ) {
										((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)] = 'postfix');
									};
									p5pkg["Perlito5::Precedence"].unshift([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_, [v_token]], null);
									(v_token_is_term = (1));
									})();
							}
							else {
								if ( p5bool(v_token_is_term) ) {
									if ( p5bool(v_last_is_term) ) {
										p5pkg["Perlito5::Precedence"].say(p5list_to_a('#      last:  ', p5pkg["Perlito5::Dumper"].Dumper([v_last], 1)), null);
										p5pkg["Perlito5::Precedence"].say(p5list_to_a('#      token: ', p5pkg["Perlito5::Dumper"].Dumper([v_token], 1)), null);
										p5pkg["Perlito5::Precedence"].die([['Value tokens must be separated by an operator']], null);
									};
									((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)] = 'term');
									p5pkg["Perlito5::Precedence"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, [v_token]], null);
								}
								else {
									if ( p5bool((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]) ) {
										(function () {
											var v_pr = null;
											(v_pr = ((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]));
											if ( p5bool(((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_['right'] || ((v_Assoc || (v_Assoc = new p5HashRef({})))._hash_['right'] = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]) ) {
												p5while(function () {
														(v_reduce)([v_op_stack, v_num_stack]);
													}, function () { return p5and(((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_), function () { return p5context([(p5num(v_pr) < p5num((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_[p5idx((p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_,1)]]))], 0) }) }, false, "");
											}
											else {
												p5while(function () {
														(v_reduce)([v_op_stack, v_num_stack]);
													}, function () { return p5and(((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_), function () { return p5context([(p5num(v_pr) <= p5num((v_Precedence || (v_Precedence = new p5HashRef({})))._hash_[(p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_[p5idx((p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) || (p5context([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_[p5idx((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_,0)]], 0) = new p5ArrayRef([])))._array_,1)]]))], 0) }) }, false, "");
											};
											if ( p5bool(((v_Operator || (v_Operator = new p5HashRef({})))._hash_['ternary'] || ((v_Operator || (v_Operator = new p5HashRef({})))._hash_['ternary'] = new p5HashRef({})))._hash_[(v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)]]) ) {
												((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)] = 'ternary');
											}
											else {
												((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)] = 'infix');
											};
											p5pkg["Perlito5::Precedence"].unshift([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_, [v_token]], null);
											})();
									}
									else {
										p5pkg["Perlito5::Precedence"].die([p5list_to_a('Unknown token: ' + String.fromCharCode(39), (v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,1)], String.fromCharCode(39))], null);
									};
								};
							};
						};
						(v_last = (v_token));
						(v_last_is_term = (v_token_is_term));
						(v_token = ((v_get_token)([v_last_is_term])));
						if ( (p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) == 'space') ) {
							(v_token = ((v_get_token)([v_last_is_term])));
						};
					}, function () { return p5and(p5context([(v_token != null)], 0), function () { return p5context([(p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) != 'end')], 0) }) }, false, "");
				if ( ((v_token != null) && (p5str((v_token || (v_token = new p5ArrayRef([])))._array_[p5idx((v_token || (v_token = new p5ArrayRef([])))._array_,0)]) != 'end')) ) {
					p5pkg["Perlito5::Precedence"].die([['Unexpected end token: ', v_token]], null);
				};
				p5while(function () {
						(v_reduce)([v_op_stack, v_num_stack]);
					}, function () { return ((v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_) }, false, "");
				(v_End_token = (v_last_end_token));
				(v_End_token_chars = (v_last_end_token_chars));
				return (p5context([v_num_stack], p5want));
		});
		1;
	})()
;
	(function () {
		var p5148 = p5make_package("Perlito5::Grammar::Bareword");
		p5make_sub("Perlito5::Grammar::Bareword", "term_bareword", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_p = null;
				(v_p = (v_pos));
				var v_m_namespace = null;
				(v_m_namespace = (p5call(p5pkg["Perlito5::Grammar"], "optional_namespace_before_ident", [v_str, v_p], 0)));
				(v_p = ((v_m_namespace || (v_m_namespace = new p5HashRef({})))._hash_['to']));
				var v_m_name = null;
				(v_m_name = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m_name) ) {
					null;
				}
				else {
					throw(p5context([v_m_name], p5want));
				};
				(v_p = ((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to']));
				var v_name = null;
				(v_name = (p5pkg["Perlito5::Match"].flat([v_m_name], 0)));
				var v_namespace = null;
				(v_namespace = (p5pkg["Perlito5::Match"].flat([v_m_namespace], 0)));
				var v_full_name = null;
				(v_full_name = (v_name));
				if ( p5bool(v_namespace) ) {
					(v_full_name = ((p5str(v_namespace) + '::' + p5str(v_name))));
				};
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
				};
				if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 2], 0) == '=>') ) {
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', v_name, 'namespace', v_namespace, 'arguments', (new p5ArrayRef([])), 'bareword', 1), 1)))));
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to'] = v_p);
					throw(p5context([v_m_name], p5want));
				};
				if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 2], 0) == '->') ) {
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Proto"], "new", ['name', v_full_name], 1)))));
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to'] = v_p);
					throw(p5context([v_m_name], p5want));
				};
				var v_effective_name = null;
				(v_effective_name = ((p5str(p5or(v_namespace, function () { return p5pkg["Perlito5"]["v_PKG_NAME"] })) + '::' + p5str(v_name))));
				var v_sig = null;
				if ( (p5pkg["Perlito5"]["v_PROTO"])._hash_.hasOwnProperty(v_effective_name) ) {
					(v_sig = ((p5pkg["Perlito5"]["v_PROTO"] || (p5pkg["Perlito5"]["v_PROTO"] = new p5HashRef({})))._hash_[v_effective_name]));
				}
				else {
					if ( ((!( p5bool(v_namespace)) || (p5str(v_namespace) == 'CORE')) && (p5pkg["Perlito5"]["v_CORE_PROTO"])._hash_.hasOwnProperty(('CORE::' + p5str(v_name)))) ) {
						(v_effective_name = (('CORE::' + p5str(v_name))));
						(v_sig = ((p5pkg["Perlito5"]["v_CORE_PROTO"] || (p5pkg["Perlito5"]["v_CORE_PROTO"] = new p5HashRef({})))._hash_[v_effective_name]));
					}
					else {
						(v_sig = (null));
					};
				};
				var v_has_paren = null;
				(v_has_paren = (0));
				if ( (v_sig != null) ) {
					if ( (p5str(v_sig) == '') ) {
						if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 1], 0) == '(') ) {
							(function () {
								(v_p)++;
								(v_has_paren = (1));
								var v_m = null;
								(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, v_p], 0)));
								if ( p5bool(v_m) ) {
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
								};
								if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 1], 0) != ')') ) {
									p5pkg["Perlito5::Grammar::Bareword"].die([['syntax error near ', p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_pos, 10], 1)]], null);
								};
								(v_p)++;
								})();
						};
						((v_m_name || (v_m_name = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', v_name, 'namespace', v_namespace, 'arguments', (new p5ArrayRef([])), 'bareword', (p5num(v_has_paren) == 0)), 1)))));
						((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to'] = v_p);
						throw(p5context([v_m_name], p5want));
					};
					if ( (((p5str(v_sig) == '_') || (p5str(v_sig) == '$')) || (p5str(v_sig) == ';$')) ) {
						(function () {
							var v_m = null;
							var v_arg = null;
							if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 1], 0) == '(') ) {
								(function () {
									(v_m = (p5call(p5pkg["Perlito5::Expression"], "term_paren", [v_str, v_p], 0)));
									if ( !( p5bool(v_m)) ) {
										throw(p5context([v_m], p5want));
									};
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									(v_has_paren = (1));
									(v_arg = (((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,2)]));
									(v_arg = (p5pkg["Perlito5::Expression"].expand_list([v_arg], 0)));
									var v_v = null;
									(v_v = (p5pkg["Perlito5::Grammar::Bareword"].shift([(v_arg || (v_arg = new p5ArrayRef([])))._array_])));
									if ( p5bool((v_arg || (v_arg = new p5ArrayRef([])))._array_) ) {
										p5pkg["Perlito5::Grammar::Bareword"].die([[('Too many arguments for ' + p5str(v_name))]], null);
									};
									(v_arg = (v_v));
									})();
							}
							else {
								(v_m = (p5call(p5pkg["Perlito5::Expression"], "argument_parse", [v_str, v_p], 0)));
								(v_arg = ((v_m || (v_m = new p5HashRef({})))._hash_['capture']));
								if ( (p5str(v_arg) == '*undef*') ) {
									(v_arg = (null));
								}
								else {
									if ( ((p5str(p5pkg["Perlito5::Grammar::Bareword"].ref([v_arg], 0)) == 'Perlito5::AST::Apply') && (p5str((v_arg || (v_arg = new p5HashRef({})))._hash_['code']) == 'circumfix:<( )>')) ) {
										(function () {
											var v_v = null;
											(v_v = (p5pkg["Perlito5::Grammar::Bareword"].shift([((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] || ((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_])));
											if ( p5bool(((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] || ((v_arg || (v_arg = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_) ) {
												p5pkg["Perlito5::Grammar::Bareword"].die([[('Too many arguments for ' + p5str(v_name))]], null);
											};
											(v_arg = (v_v));
											})();
									};
								};
							};
							var List_args = [];
							if ( (v_arg != null) ) {
								p5pkg["Perlito5::Grammar::Bareword"].push([List_args, [v_arg]], null);
								(v_has_paren = (1));
							}
							else {
								if ( (p5str(v_sig) == '$') ) {
									p5pkg["Perlito5::Grammar::Bareword"].die([[('Not enough arguments for ' + p5str(v_name))]], null);
								};
								if ( (p5str(v_sig) == '_') ) {
									p5pkg["Perlito5::Grammar::Bareword"].push([List_args, p5list_to_a(p5call(p5pkg["Perlito5::AST::Var"], "new", ['namespace', '', 'name', '_', 'sigil', '$'], 1))], null);
								};
							};
							((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", ['code', v_name, 'namespace', v_namespace, 'arguments', (new p5ArrayRef(List_args)), 'bareword', (p5num(v_has_paren) == 0)], 1)))));
							throw(p5context([v_m], p5want));
							})();
					};
					if ( (p5str(v_sig) == '*') ) {
						null;
					};
				};
				if ( (p5pkg["Perlito5::Grammar::Bareword"].substr([v_str, v_p, 1], 0) == '(') ) {
					(function () {
						(v_m = (p5call(p5pkg["Perlito5::Expression"], "term_paren", [v_str, v_p], 0)));
						if ( !( p5bool(v_m)) ) {
							throw(p5context([v_m], p5want));
						};
						var v_arg = null;
						(v_arg = (((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,2)]));
						(v_arg = (p5pkg["Perlito5::Expression"].expand_list([v_arg], 0)));
						((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", ['code', v_name, 'namespace', v_namespace, 'arguments', v_arg], 1)))));
						throw(p5context([v_m], p5want));
						})();
				};
				var v_m_list = null;
				(v_m_list = (p5call(p5pkg["Perlito5::Expression"], "list_parse", [v_str, v_p], 0)));
				var v_list = null;
				(v_list = ((v_m_list || (v_m_list = new p5HashRef({})))._hash_['capture']));
				if ( (p5str(v_list) != '*undef*') ) {
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(['postfix_or_term', 'funcall', v_namespace, v_name, v_list])));
					((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to'] = (v_m_list || (v_m_list = new p5HashRef({})))._hash_['to']);
					throw(p5context([v_m_name], p5want));
				};
				((v_m_name || (v_m_name = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(['postfix_or_term', 'funcall_no_params', v_namespace, v_name])));
				return (p5context([v_m_name], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5149 = p5make_package("Perlito5::Expression");
		// use Perlito5::Precedence
;
		// use Perlito5::Grammar::Bareword
;
		p5make_sub("Perlito5::Expression", "expand_list", function (List__, p5want) {
			try {
				var v_param_list = null;
				(v_param_list = (p5pkg["Perlito5::Expression"].shift([List__])));
				if ( ((p5str(p5pkg["Perlito5::Expression"].ref([v_param_list], 0)) == 'Perlito5::AST::Apply') && (p5str(p5call(v_param_list, "code", [], 0)) == 'list:<,>')) ) {
					var v_args = null;
					(v_args = ((new p5ArrayRef([]))));
					p5for_lex(function (v_v) {
							if ( (v_v != null) ) {
								p5pkg["Perlito5::Expression"].push([(v_args || (v_args = new p5ArrayRef([])))._array_, [v_v]], null);
							};
						}, p5list_to_a((p5call(v_param_list, "arguments", [], p5want) || (p5call(v_param_list, "arguments", [], p5want) = new p5ArrayRef([])))._array_), false, "");
					throw(p5context([v_args], p5want))
				}
				
				else {
					if ( (p5str(v_param_list) == '*undef*') ) {
						throw((new p5ArrayRef([])))
					}
					
					else {
						throw((new p5ArrayRef([v_param_list])))
					}
				}
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "block_or_hash", function (List__, p5want) {
			try {
				var v_o = null;
				(v_o = (p5pkg["Perlito5::Expression"].shift([List__])));
				if ( (p5call(v_o, "sig", [], p5want) != null) ) {
					throw(p5context([v_o], p5want));
				};
				var v_stmts = null;
				(v_stmts = (p5call(v_o, "stmts", [], 0)));
				if ( (!( (v_stmts != null)) || (p5num(((v_stmts || (v_stmts = new p5ArrayRef([])))._array_)) == 0)) ) {
					throw(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'circumfix:<{ }>', 'namespace', '', 'arguments', (new p5ArrayRef([]))), p5want));
				};
				if ( (p5num(((v_stmts || (v_stmts = new p5ArrayRef([])))._array_)) != 1) ) {
					throw(p5context([v_o], p5want));
				};
				var v_stmt = null;
				(v_stmt = ((v_stmts || (v_stmts = new p5ArrayRef([])))._array_[p5idx((v_stmts || (v_stmts = new p5ArrayRef([])))._array_,0)]));
				if ( (p5str(p5pkg["Perlito5::Expression"].ref([v_stmt], 0)) == 'Perlito5::AST::Var') ) {
					throw(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'circumfix:<{ }>', 'namespace', '', 'arguments', (new p5ArrayRef([v_stmt]))), p5want));
				};
				if ( (p5str(p5pkg["Perlito5::Expression"].ref([v_stmt], 0)) != 'Perlito5::AST::Apply') ) {
					throw(p5context([v_o], p5want));
				};
				if ( (p5str(p5call(v_stmt, "code", [], 0)) == 'infix:<=>>') ) {
					throw(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'circumfix:<{ }>', 'namespace', '', 'arguments', (new p5ArrayRef([v_stmt]))), p5want));
				};
				if ( (p5str(p5call(v_stmt, "code", [], 0)) != 'list:<,>') ) {
					throw(p5context([v_o], p5want));
				};
				p5for_lex(function (v_item) {
						if ( ((p5str(p5pkg["Perlito5::Expression"].ref([v_item], 0)) == 'Perlito5::AST::Apply') && (p5str(p5call(v_item, "code", [], 0)) == 'infix:<=>>')) ) {
							throw(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'circumfix:<{ }>', 'namespace', '', 'arguments', p5pkg["Perlito5::Expression"].expand_list([v_stmt], 1)), p5want));
						};
					}, p5list_to_a((p5call(v_stmt, "arguments", [], p5want) || (p5call(v_stmt, "arguments", [], p5want) = new p5ArrayRef([])))._array_), false, "");
				return (p5context([v_o], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "pop_term", function (List__, p5want) {
			try {
				var v_num_stack = null;
				(v_num_stack = (p5pkg["Perlito5::Expression"].shift([List__])));
				var v_v = null;
				(v_v = (p5pkg["Perlito5::Expression"].pop([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_], 0)));
				if ( (p5str(p5pkg["Perlito5::Expression"].ref([v_v], 0)) == 'ARRAY') ) {
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'methcall_no_params') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', null, 'method', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'arguments', (new p5ArrayRef([]))), 0)));
						throw(p5context([v_v], p5want));
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'funcall_no_params') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)], 'namespace', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'arguments', (new p5ArrayRef([])), 'bareword', 1), 0)));
						throw(p5context([v_v], p5want));
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'methcall') ) {
						(function () {
							var v_param_list = null;
							(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)]), 0)));
							(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', null, 'method', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'arguments', v_param_list), 0)));
							throw(p5context([v_v], p5want));
							})();
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'funcall') ) {
						(function () {
							var v_param_list = null;
							(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,4)]), 0)));
							(v_v = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)], 'arguments', v_param_list, 'namespace', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
							throw(p5context([v_v], p5want));
							})();
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '( )') ) {
						(function () {
							var v_param_list = null;
							(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
							(v_v = (p5call(p5pkg["Perlito5::AST::Apply"], "new", ['code', 'circumfix:<( )>', 'arguments', v_param_list, 'namespace', ''], 0)));
							throw(p5context([v_v], p5want));
							})();
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '[ ]') ) {
						(function () {
							var v_param_list = null;
							(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
							(v_v = (p5call(p5pkg["Perlito5::AST::Apply"], "new", ['code', 'circumfix:<[ ]>', 'arguments', v_param_list, 'namespace', ''], 0)));
							throw(p5context([v_v], p5want));
							})();
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'block') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'sig', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)]), 0)));
						(v_v = (p5pkg["Perlito5::Expression"].block_or_hash([v_v], 0)));
						throw(p5context([v_v], p5want));
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.( )') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', null, 'method', 'postcircumfix:<( )>', 'arguments', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
						throw(p5context([v_v], p5want));
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.[ ]') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Index"], "new", p5list_to_a('obj', null, 'index_exp', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
						throw(p5context([v_v], p5want));
					};
					if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.{ }') ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Lookup"], "new", p5list_to_a('obj', null, 'index_exp', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
						throw(p5context([v_v], p5want));
					};
					if ( ((p5str(p5pkg["Perlito5::Expression"].ref([(v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]], 0)) == 'ARRAY') && (p5num(((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)])) == 2)) ) {
						(v_v = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'pair', 'arguments', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)], 'namespace', ''), 0)));
						throw(p5context([v_v], p5want));
					};
					throw((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]);
				};
				return (p5context([v_v], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "reduce_postfix", function (List__, p5want) {
			try {
				var v_op = null;
				(v_op = (p5pkg["Perlito5::Expression"].shift([List__])));
				var v_value = null;
				(v_value = (p5pkg["Perlito5::Expression"].shift([List__])));
				var v_v = null;
				(v_v = (v_op));
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'methcall_no_params') ) {
					(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', v_value, 'method', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'arguments', (new p5ArrayRef([]))), 0)));
					throw(p5context([v_v], p5want));
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'funcall_no_params') ) {
					p5pkg["Perlito5::Expression"].die([['unexpected function call']], null);
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'methcall') ) {
					(function () {
						var v_param_list = null;
						(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)]), 0)));
						(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', v_value, 'method', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'arguments', v_param_list), 0)));
						throw(p5context([v_v], p5want));
						})();
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'funcall') ) {
					p5pkg["Perlito5::Expression"].die([['unexpected function call']], null);
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '( )') ) {
					(function () {
						var v_param_list = null;
						(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
						if ( ((p5str(p5pkg["Perlito5::Expression"].ref([v_value], 0)) == 'Perlito5::AST::Apply') && !( (p5call(v_value, "arguments", [], p5want) != null))) ) {
							((v_value || (v_value = new p5HashRef({})))._hash_['arguments'] = v_param_list);
							throw(p5context([v_value], p5want));
						};
						if ( ((p5str(p5pkg["Perlito5::Expression"].ref([v_value], 0)) == 'Perlito5::AST::Call') && !( (p5call(v_value, "arguments", [], p5want) != null))) ) {
							((v_value || (v_value = new p5HashRef({})))._hash_['arguments'] = v_param_list);
							throw(p5context([v_value], p5want));
						};
						(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", ['invocant', v_value, 'method', 'postcircumfix:<( )>', 'arguments', v_param_list], 0)));
						throw(p5context([v_v], p5want));
						})();
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '[ ]') ) {
					(v_v = (p5call(p5pkg["Perlito5::AST::Index"], "new", p5list_to_a('obj', v_value, 'index_exp', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
					throw(p5context([v_v], p5want));
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == 'block') ) {
					(v_v = (p5call(p5pkg["Perlito5::AST::Lookup"], "new", p5list_to_a('obj', v_value, 'index_exp', (p5context([(v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]], 0) || (p5context([(v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]], 0) = new p5ArrayRef([])))._array_[p5idx((p5context([(v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]], 0) || (p5context([(v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]], 0) = new p5ArrayRef([])))._array_,0)]), 0)));
					throw(p5context([v_v], p5want));
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.( )') ) {
					(function () {
						var v_param_list = null;
						(v_param_list = (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
						(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", ['invocant', v_value, 'method', 'postcircumfix:<( )>', 'arguments', v_param_list], 0)));
						throw(p5context([v_v], p5want));
						})();
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.[ ]') ) {
					(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', v_value, 'method', 'postcircumfix:<[ ]>', 'arguments', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
					throw(p5context([v_v], p5want));
				};
				if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]) == '.{ }') ) {
					(v_v = (p5call(p5pkg["Perlito5::AST::Call"], "new", p5list_to_a('invocant', v_value, 'method', 'postcircumfix:<{ }>', 'arguments', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)]), 0)));
					throw(p5context([v_v], p5want));
				};
				p5pkg["Perlito5::Expression"].push([(v_op || (v_op = new p5ArrayRef([])))._array_, [v_value]], null);
				return (p5context([v_op], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var v_reduce_to_ast = null;
		(v_reduce_to_ast = (function (List__, p5want) {
				try {
					var v_op_stack = null;
					(v_op_stack = (p5pkg["Perlito5::Expression"].shift([List__])));
					var v_num_stack = null;
					(v_num_stack = (p5pkg["Perlito5::Expression"].shift([List__])));
					var v_last_op = null;
					(v_last_op = (p5pkg["Perlito5::Expression"].shift([(v_op_stack || (v_op_stack = new p5ArrayRef([])))._array_])));
					if ( (p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,0)]) == 'prefix') ) {
						return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', ('prefix:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1))))), 1))], p5want));
					}
					
					else {
						if ( (p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,0)]) == 'postfix') ) {
							return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', ('postfix:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1))))), 1))], p5want));
						}
						
						else {
							if ( (p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,0)]) == 'postfix_or_term') ) {
								return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5pkg["Perlito5::Expression"].reduce_postfix(p5list_to_a(v_last_op, p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1)), 1))], p5want));
							}
							
							else {
								if ( p5bool(p5pkg["Perlito5::Precedence"].is_assoc_type(p5list_to_a('list', (v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]), 0)) ) {
									var v_arg = null;
									if ( (p5num(((v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_)) < 2) ) {
										(function () {
											var v_v2 = null;
											(v_v2 = (p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 0)));
											if ( ((p5str(p5pkg["Perlito5::Expression"].ref([v_v2], 0)) == 'Perlito5::AST::Apply') && (p5str(p5call(v_v2, "code", [], 0)) == ('list:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'))) ) {
												p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', p5call(v_v2, "namespace", [], 1), 'code', p5call(v_v2, "code", [], 1), 'arguments', (new p5ArrayRef(p5list_to_a((p5call(v_v2, "arguments", [], p5want) || (p5call(v_v2, "arguments", [], p5want) = new p5ArrayRef([])))._array_, null)))), 1))], null);
											}
											else {
												p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', ('list:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', (new p5ArrayRef(p5list_to_a(v_v2, null)))), 1))], null);
											};
											throw(p5context([], p5want));
											})();
									}
									else {
										(function () {
											var v_v2 = null;
											(v_v2 = (p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 0)));
											(v_arg = ((new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1), v_v2)))));
											})();
									};
									if ( (((p5str(p5pkg["Perlito5::Expression"].ref([(v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,0)]], 0)) == 'Perlito5::AST::Apply') && (p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,0)]) == 'infix')) && (p5str(p5call((v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,0)], "code", [], 0)) == ('list:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'))) ) {
										p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', p5call(p5context([(v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,0)]], 0), "code", [], 1), 'arguments', (new p5ArrayRef(p5list_to_a((p5call(p5context([(v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,0)]], 0), "arguments", [], p5want) || (p5call(p5context([(v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,0)]], 0), "arguments", [], p5want) = new p5ArrayRef([])))._array_, (v_arg || (v_arg = new p5ArrayRef([])))._array_[p5idx((v_arg || (v_arg = new p5ArrayRef([])))._array_,1)])))), 1))], null);
										throw(p5context([], p5want));
									};
									return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", ['namespace', '', 'code', ('list:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', v_arg], 1))], p5want));
								}
								
								else {
									if ( p5bool(p5pkg["Perlito5::Precedence"].is_assoc_type(p5list_to_a('chain', (v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]), 0)) ) {
										if ( (p5num(((v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_)) < 2) ) {
											p5pkg["Perlito5::Expression"].die([[('Missing value after operator ' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]))]], null);
										};
										var v_v2 = null;
										(v_v2 = (p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 0)));
										var v_arg = null;
										(v_arg = ((new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1), v_v2)))));
										return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", ['namespace', '', 'code', ('infix:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', v_arg], 1))], p5want));
									}
									
									else {
										if ( (p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,0)]) == 'ternary') ) {
											if ( (p5num(((v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_)) < 2) ) {
												p5pkg["Perlito5::Expression"].die([['Missing value after ternary operator']], null);
											};
											var v_v2 = null;
											(v_v2 = (p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 0)));
											return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', ('ternary:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1), (v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,2)], v_v2)))), 1))], p5want));
										}
										
										else {
											if ( (p5num(((v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_)) < 2) ) {
												p5pkg["Perlito5::Expression"].die([[('missing value after operator ' + String.fromCharCode(39) + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + String.fromCharCode(39))]], null);
											};
											var v_v2 = null;
											(v_v2 = (p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 0)));
											return (p5pkg["Perlito5::Expression"].push([(v_num_stack || (v_num_stack = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', '', 'code', ('infix:<' + p5str((v_last_op || (v_last_op = new p5ArrayRef([])))._array_[p5idx((v_last_op || (v_last_op = new p5ArrayRef([])))._array_,1)]) + '>'), 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Expression"].pop_term([v_num_stack], 1), v_v2)))), 1))], p5want));
										}
									}
								}
							}
						}
					}
				}
				catch(err) {
					if ( err instanceof Error ) {
						throw(err);
					}
					else {
						return(err);
					}
				}
			}));
		p5make_sub("Perlito5::Expression", "term_arrow", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([p5and(('->' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5or(p5or(p5or(p5context([(function () {
									return (p5and(p5and(p5and(p5context([p5and(('(' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', '.( )', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse']), 1)))));
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5context([p5and(('[' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "square_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['square_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and((']' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', '.[ ]', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['square_parse']), 1)))));
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5context([p5and(('{' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "curly_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['curly_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', '.{ }', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['curly_parse']), 1)))));
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5context([p5and(('$' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(p5and(p5and(p5context([p5and(('(' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse'] = v_m2);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', 'methcall', p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', '$', 'namespace', '', 'name', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident']), 1)), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse']), 1)))));
												return (p5context([1], p5want));
											})()], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', 'methcall_no_params', p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', '$', 'namespace', '', 'name', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident']), 1)), 1)))));
												return (p5context([1], p5want));
											})()], p5want)], p5want));
										})()], p5want) }));
									})()], p5want) })], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(p5and(p5and(p5context([p5and(('(' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse'] = v_m2);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', 'methcall', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident']), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse']), 1)))));
												return (p5context([1], p5want));
											})()], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', 'methcall_no_params', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident']), 1)))));
												return (p5context([1], p5want));
											})()], p5want)], p5want));
										})()], p5want) }));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_digit", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "val_num", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.val_num'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.val_num']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "val_int", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.val_int'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.val_int']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_ternary", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('?' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "ternary5_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['ternary5_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and((':' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('op', '? :', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['ternary5_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_paren", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('(' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', '( )', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['paren_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_square", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('[' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "square_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['square_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and((']' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', '[ ]', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['square_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_curly", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5context([p5and(('{' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('postfix_or_term', 'block', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "declarator", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5or(p5or(p5context([(function () {
							return (p5and(('my' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('state' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 5], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (5 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('our' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('local' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 5], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (5 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_declarator", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "declarator", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['declarator'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "opt_type", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.opt_type'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "var_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_decl = null;
								(v_decl = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['declarator']), 0)));
								var v_type = null;
								(v_type = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.opt_type']), 0)));
								var v_var = null;
								(v_var = (((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident'] = new p5HashRef({})))._hash_['capture']));
								if ( (p5str(v_decl) == 'local') ) {
									(v_MATCH = (p5call(p5pkg["Perlito5::Grammar::String"], "double_quoted_var_with_subscript", p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident']), 0)));
									(v_var = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture']));
								};
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Decl"], "new", ['decl', v_decl, 'type', v_type, 'var', v_var], 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_return", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('return' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 6], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (6 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "list_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_args = null;
								(v_args = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse']), 0)));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'return', 'arguments', ( (p5str(v_args) == '*undef*') ? (new p5ArrayRef([])) : (new p5ArrayRef([v_args]))), 'namespace', ''), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_anon_sub", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('sub' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "anon_sub_def", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.anon_sub_def'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.anon_sub_def']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_do", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5context([p5and(('do' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_tmp = null;
								(v_tmp = (v_MATCH));
								(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
								var v_res = null;
								(v_res = (p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(('{' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want));
									})()], 0)));
								return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "statement_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['statement_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Do"], "new", p5list_to_a('block', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['statement_parse']), 1)), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_package", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('package' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 7], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (7 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_name = null;
								(v_name = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident']), 0)));
								(p5pkg["Perlito5"]["v_PKG_NAME"] = (v_name));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'package', 'arguments', (new p5ArrayRef([])), 'namespace', v_name), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_eval", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5context([p5and(('eval' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_tmp = null;
								(v_tmp = (v_MATCH));
								(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
								var v_res = null;
								(v_res = (p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(('{' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want));
									})()], 0)));
								return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "term_curly", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'eval', 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Do"], "new", p5list_to_a('block', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]), 1)), 1)))), 'namespace', ''), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "map_or_sort", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5or(p5context([(function () {
							return (p5and(('map' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('sort' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('grep' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "term_map_or_sort", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "map_or_sort", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['map_or_sort'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_tmp = null;
								(v_tmp = (v_MATCH));
								(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
								var v_res = null;
								(v_res = (p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(('{' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want));
									})()], 0)));
								return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "term_curly", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "list_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['map_or_sort']), 1), 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = new p5HashRef({})))._hash_['capture'] || (((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx((((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = new p5HashRef({})))._hash_['capture'] || (((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['term_curly'] = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,2)]), 1), (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a(((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] = new p5HashRef({})))._hash_['capture']), p5want) || (p5pkg["Perlito5::Expression"].expand_list(p5list_to_a(((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['list_parse'] = new p5HashRef({})))._hash_['capture']), p5want) = new p5ArrayRef([])))._array_))), 'namespace', ''), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		var v_Argument_end_token = null;
		(v_Argument_end_token = ((new p5HashRef({':' : 1, ']' : 1, ')' : 1, '}' : 1, ';' : 1, ',' : 1, '<' : 1, '>' : 1, '=' : 1, '&' : 1, '|' : 1, '^' : 1, '?' : 1, 'or' : 1, 'if' : 1, '=>' : 1, 'lt' : 1, 'le' : 1, 'gt' : 1, 'ge' : 1, '<=' : 1, '>=' : 1, '==' : 1, '!=' : 1, 'ne' : 1, 'eq' : 1, '..' : 1, '~~' : 1, '&&' : 1, '||' : 1, '+=' : 1, '-=' : 1, '*=' : 1, '/=' : 1, 'x=' : 1, '|=' : 1, '&=' : 1, '.=' : 1, '^=' : 1, '%=' : 1, '//' : 1, 'for' : 1, 'and' : 1, 'xor' : 1, '...' : 1, '<=>' : 1, 'cmp' : 1, '<<=' : 1, '>>=' : 1, '||=' : 1, '&&=' : 1, '//=' : 1, '**=' : 1, 'when' : 1, 'while' : 1, 'unless' : 1, 'foreach' : 1}))));
		var v_Argument_end_token_chars = null;
		(v_Argument_end_token_chars = ((new p5ArrayRef([7, 6, 5, 4, 3, 2, 1]))));
		var v_List_end_token = null;
		(v_List_end_token = ((new p5HashRef({':' : 1, ']' : 1, ')' : 1, '}' : 1, ';' : 1, 'or' : 1, 'if' : 1, 'for' : 1, 'and' : 1, 'xor' : 1, 'else' : 1, 'when' : 1, 'while' : 1, 'elsif' : 1, 'unless' : 1, 'foreach' : 1}))));
		var v_List_end_token_chars = null;
		(v_List_end_token_chars = ((new p5ArrayRef([7, 6, 5, 4, 3, 2, 1]))));
		var v_Expr_end_token = null;
		(v_Expr_end_token = ((new p5HashRef({']' : 1, ')' : 1, '}' : 1, ';' : 1, 'if' : 1, 'for' : 1, 'else' : 1, 'when' : 1, 'while' : 1, 'elsif' : 1, 'unless' : 1, 'foreach' : 1}))));
		var v_Expr_end_token_chars = null;
		(v_Expr_end_token_chars = ((new p5ArrayRef([7, 6, 5, 4, 3, 2, 1]))));
		p5make_sub("Perlito5::Expression", "op_parse_spc", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_last_is_term = null;
				(v_last_is_term = (List__[p5idx(List__,3)]));
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Precedence"], "op_parse", [v_str, v_pos, v_last_is_term], 0)));
				if ( !( p5bool(v_m)) ) {
					throw(p5context([v_m], p5want));
				};
				var v_spc = null;
				(v_spc = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_m || (v_m = new p5HashRef({})))._hash_['to']), 0)));
				if ( p5bool(v_spc) ) {
					((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (v_spc || (v_spc = new p5HashRef({})))._hash_['to']);
				};
				return (p5context([v_m], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "argument_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_expr = null;
				var v_last_pos = null;
				(v_last_pos = (v_pos));
				var v_is_first_token = null;
				(v_is_first_token = (1));
				var v_lexer_stack = null;
				(v_lexer_stack = ((new p5ArrayRef([]))));
				var v_last_token_was_space = null;
				(v_last_token_was_space = (1));
				var v_get_token = null;
				(v_get_token = (function (List__, p5want) {
						try {
							var v_last_is_term = null;
							(v_last_is_term = (List__[p5idx(List__,0)]));
							var v_v = null;
							if ( p5bool(((v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_)) ) {
								(v_v = (p5pkg["Perlito5::Expression"].pop([(v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_], 0)));
								if ( ((p5bool(v_is_first_token) && (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'op')) && !( p5bool(p5pkg["Perlito5::Precedence"].is_fixity_type(p5list_to_a('prefix', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]), 0)))) ) {
									((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)] = 'end');
								};
							}
							else {
								(function () {
									var v_m = null;
									(v_m = (p5call(p5pkg["Perlito5::Expression"], "op_parse_spc", [v_str, v_last_pos, v_last_is_term], 0)));
									if ( !( p5bool(v_m)) ) {
										throw((new p5ArrayRef(['end', '*end*'])));
									};
									(v_v = ((v_m || (v_m = new p5HashRef({})))._hash_['capture']));
									if ( ((p5bool(v_is_first_token) && (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'op')) && !( p5bool(p5pkg["Perlito5::Precedence"].is_fixity_type(p5list_to_a('prefix', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]), 0)))) ) {
										((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)] = 'end');
									};
									if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) != 'end') ) {
										(v_last_pos = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									};
									})();
							};
							(v_last_token_was_space = (p5context([(p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'space')], 0)));
							(v_is_first_token = (0));
							return (p5context([v_v], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}));
				var v_prec = null;
				(v_prec = (p5call(p5pkg["Perlito5::Precedence"], "new", ['get_token', v_get_token, 'reduce', v_reduce_to_ast, 'end_token', v_Argument_end_token, 'end_token_chars', v_Argument_end_token_chars], 0)));
				var v_res = null;
				(v_res = (p5call(v_prec, "precedence_parse", [], 0)));
				if ( (p5num(((v_res || (v_res = new p5ArrayRef([])))._array_)) == 0) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : '*undef*'})));
				};
				var v_result = null;
				(v_result = (p5pkg["Perlito5::Expression"].pop_term([v_res], 0)));
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : v_result})));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "list_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_expr = null;
				var v_last_pos = null;
				(v_last_pos = (v_pos));
				var v_is_first_token = null;
				(v_is_first_token = (1));
				var v_lexer_stack = null;
				(v_lexer_stack = ((new p5ArrayRef([]))));
				var v_last_token_was_space = null;
				(v_last_token_was_space = (1));
				var v_get_token = null;
				(v_get_token = (function (List__, p5want) {
						try {
							var v_last_is_term = null;
							(v_last_is_term = (List__[p5idx(List__,0)]));
							var v_v = null;
							if ( p5bool(((v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_)) ) {
								(v_v = (p5pkg["Perlito5::Expression"].pop([(v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_], 0)));
								if ( ((p5bool(v_is_first_token) && (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'op')) && !( p5bool(p5pkg["Perlito5::Precedence"].is_fixity_type(p5list_to_a('prefix', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]), 0)))) ) {
									((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)] = 'end');
								};
							}
							else {
								(function () {
									var v_m = null;
									(v_m = (p5call(p5pkg["Perlito5::Expression"], "op_parse_spc", [v_str, v_last_pos, v_last_is_term], 0)));
									if ( !( p5bool(v_m)) ) {
										throw((new p5ArrayRef(['end', '*end*'])));
									};
									(v_v = ((v_m || (v_m = new p5HashRef({})))._hash_['capture']));
									if ( ((p5bool(v_is_first_token) && (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'op')) && !( p5bool(p5pkg["Perlito5::Precedence"].is_fixity_type(p5list_to_a('prefix', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,1)]), 0)))) ) {
										((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)] = 'end');
									};
									if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) != 'end') ) {
										(v_last_pos = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									};
									})();
							};
							(v_last_token_was_space = (p5context([(p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) == 'space')], 0)));
							(v_is_first_token = (0));
							return (p5context([v_v], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}));
				var v_prec = null;
				(v_prec = (p5call(p5pkg["Perlito5::Precedence"], "new", ['get_token', v_get_token, 'reduce', v_reduce_to_ast, 'end_token', v_List_end_token, 'end_token_chars', v_List_end_token_chars], 0)));
				var v_res = null;
				(v_res = (p5call(v_prec, "precedence_parse", [], 0)));
				if ( (p5num(((v_res || (v_res = new p5ArrayRef([])))._array_)) == 0) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : '*undef*'})));
				};
				var v_result = null;
				(v_result = (p5pkg["Perlito5::Expression"].pop_term([v_res], 0)));
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : v_result})));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "circumfix_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (List__[p5idx(List__,3)]));
				var v_expr = null;
				var v_last_pos = null;
				(v_last_pos = (v_pos));
				var v_get_token = null;
				(v_get_token = (function (List__, p5want) {
							var v_last_is_term = null;
							(v_last_is_term = (List__[p5idx(List__,0)]));
							var v_m = null;
							(v_m = (p5call(p5pkg["Perlito5::Expression"], "op_parse_spc", [v_str, v_last_pos, v_last_is_term], 0)));
							if ( !( p5bool(v_m)) ) {
								p5pkg["Perlito5::Expression"].die([['Expected closing delimiter: ', v_delimiter, ' near ', v_last_pos]], null);
							};
							var v_v = null;
							(v_v = ((v_m || (v_m = new p5HashRef({})))._hash_['capture']));
							if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) != 'end') ) {
								(v_last_pos = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
							};
							return (p5context([v_v], p5want));
					}));
				var Hash_delim_token = {};
				(Hash_delim_token[v_delimiter] = 1);
				var v_prec = null;
				(v_prec = (p5call(p5pkg["Perlito5::Precedence"], "new", p5list_to_a('get_token', v_get_token, 'reduce', v_reduce_to_ast, 'end_token', (new p5HashRef(Hash_delim_token)), 'end_token_chars', (new p5ArrayRef([p5pkg["Perlito5::Expression"].length([v_delimiter], 1)]))), 0)));
				var v_res = null;
				(v_res = (p5call(v_prec, "precedence_parse", [], 0)));
				(v_res = (p5pkg["Perlito5::Expression"].pop_term([v_res], 0)));
				if ( !( (v_res != null)) ) {
					(v_res = ('*undef*'));
				};
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : v_res})));
		});
		p5make_sub("Perlito5::Expression", "ternary5_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				return (p5call(v_self, "circumfix_parse", [v_str, v_pos, ':'], p5want));
		});
		p5make_sub("Perlito5::Expression", "curly_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				return (p5call(v_self, "circumfix_parse", [v_str, v_pos, '}'], p5want));
		});
		p5make_sub("Perlito5::Expression", "square_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				return (p5call(v_self, "circumfix_parse", [v_str, v_pos, ']'], p5want));
		});
		p5make_sub("Perlito5::Expression", "paren_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				return (p5call(v_self, "circumfix_parse", [v_str, v_pos, ')'], p5want));
		});
		p5make_sub("Perlito5::Expression", "exp_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_expr = null;
				var v_last_pos = null;
				(v_last_pos = (v_pos));
				var v_lexer_stack = null;
				(v_lexer_stack = ((new p5ArrayRef([]))));
				var v_get_token = null;
				(v_get_token = (function (List__, p5want) {
						try {
							var v_last_is_term = null;
							(v_last_is_term = (List__[p5idx(List__,0)]));
							var v_v = null;
							if ( p5bool(((v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_)) ) {
								(v_v = (p5pkg["Perlito5::Expression"].pop([(v_lexer_stack || (v_lexer_stack = new p5ArrayRef([])))._array_], 0)));
							}
							else {
								(function () {
									var v_m = null;
									(v_m = (p5call(p5pkg["Perlito5::Expression"], "op_parse_spc", [v_str, v_last_pos, v_last_is_term], 0)));
									if ( !( p5bool(v_m)) ) {
										throw((new p5ArrayRef(['end', '*end*'])));
									};
									(v_v = ((v_m || (v_m = new p5HashRef({})))._hash_['capture']));
									if ( (p5str((v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,0)]) != 'end') ) {
										(v_last_pos = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									};
									})();
							};
							return (p5context([v_v], p5want));
						}
						catch(err) {
							if ( err instanceof Error ) {
								throw(err);
							}
							else {
								return(err);
							}
						}
					}));
				var v_prec = null;
				(v_prec = (p5call(p5pkg["Perlito5::Precedence"], "new", ['get_token', v_get_token, 'reduce', v_reduce_to_ast, 'end_token', v_Expr_end_token, 'end_token_chars', v_Expr_end_token_chars], 0)));
				var v_res = null;
				(v_res = (p5call(v_prec, "precedence_parse", [], 0)));
				if ( (p5num(((v_res || (v_res = new p5ArrayRef([])))._array_)) == 0) ) {
					throw(p5context([0], p5want));
				};
				var v_result = null;
				(v_result = (p5pkg["Perlito5::Expression"].pop_term([v_res], 0)));
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_last_pos, 'capture' : v_result})));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var List_Statement_chars = [];
		(List_Statement_chars = [9, 8, 7, 6, 5, 4, 3, 2, 1]);
		var Hash_Statement = {};
		(Hash_Statement = {'if' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "if", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'unless' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "unless", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'when' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "when", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'for' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "for", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'while' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "while", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}, 'when' : function (List__, p5want) {
					return (p5call(p5pkg["Perlito5::Grammar"], "when", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
			}});
		p5make_sub("Perlito5::Expression", "add_statement", function (List__, p5want) {
				var v_name = null;
				(v_name = (p5pkg["Perlito5::Expression"].shift([List__])));
				var v_param = null;
				(v_param = (p5pkg["Perlito5::Expression"].shift([List__])));
				return ((Hash_Statement[v_name] = v_param));
		});
		p5make_sub("Perlito5::Expression", "exp_stmt", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				p5for_lex(function (v_len) {
						var v_term = null;
						(v_term = (p5pkg["Perlito5::Expression"].substr([v_str, v_pos, v_len], 0)));
						if ( (Hash_Statement).hasOwnProperty(v_term) ) {
							(function () {
								var v_m = null;
								(v_m = ((Hash_Statement[v_term])([v_str, v_pos])));
								if ( p5bool(v_m) ) {
									throw(p5context([v_m], p5want));
								};
								})();
						};
					}, p5list_to_a(List_Statement_chars), false, "");
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var List_Modifier_chars = [];
		(List_Modifier_chars = [7, 6, 5, 4, 3, 2]);
		var Hash_Modifier = {};
		(Hash_Modifier = {'if' : 1, 'unless' : 1, 'when' : 1, 'for' : 1, 'foreach' : 1, 'while' : 1, 'when' : 1});
		p5make_sub("Perlito5::Expression", "statement_modifier", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_expression = null;
				(v_expression = (List__[p5idx(List__,3)]));
				p5for_lex(function (v_len) {
						var v_term = null;
						(v_term = (p5pkg["Perlito5::Expression"].substr([v_str, v_pos, v_len], 0)));
						if ( (Hash_Modifier).hasOwnProperty(v_term) ) {
							(function () {
								var v_m = null;
								(v_m = (p5call(v_self, "modifier", [v_str, (p5num(v_pos) + p5num(v_len)), v_term, v_expression], 0)));
								if ( p5bool(v_m) ) {
									throw(p5context([v_m], p5want));
								};
								})();
						};
					}, p5list_to_a(List_Modifier_chars), false, "");
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "modifier", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_modifier = null;
				(v_modifier = (List__[p5idx(List__,3)]));
				var v_expression = null;
				(v_expression = (List__[p5idx(List__,4)]));
				var v_modifier_exp = null;
				(v_modifier_exp = (p5call(v_self, "exp_parse", [v_str, v_pos], 0)));
				if ( !( p5bool(v_modifier_exp)) ) {
					p5pkg["Perlito5::Expression"].die([p5list_to_a('Expected expression after ' + String.fromCharCode(39), p5pkg["Perlito5::Match"].flat([v_modifier], 1), String.fromCharCode(39))], null);
				};
				if ( (p5str(v_modifier) == 'if') ) {
					throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (v_modifier_exp || (v_modifier_exp = new p5HashRef({})))._hash_['to'], 'capture', p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat([v_modifier_exp], 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([v_expression]))), 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1)), 1))))));
				};
				if ( (p5str(v_modifier) == 'unless') ) {
					throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (v_modifier_exp || (v_modifier_exp = new p5HashRef({})))._hash_['to'], 'capture', p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat([v_modifier_exp], 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([v_expression]))), 1)), 1))))));
				};
				if ( (p5str(v_modifier) == 'when') ) {
					throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (v_modifier_exp || (v_modifier_exp = new p5HashRef({})))._hash_['to'], 'capture', p5call(p5pkg["Perlito5::AST::When"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat([v_modifier_exp], 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([v_expression]))), 1)), 1))))));
				};
				if ( (p5str(v_modifier) == 'while') ) {
					throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (v_modifier_exp || (v_modifier_exp = new p5HashRef({})))._hash_['to'], 'capture', p5call(p5pkg["Perlito5::AST::While"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat([v_modifier_exp], 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([v_expression]))), 1), 'continue', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1)), 1))))));
				};
				if ( ((p5str(v_modifier) == 'for') || (p5str(v_modifier) == 'foreach')) ) {
					throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (v_modifier_exp || (v_modifier_exp = new p5HashRef({})))._hash_['to'], 'capture', p5call(p5pkg["Perlito5::AST::For"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat([v_modifier_exp], 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([v_expression]))), 1), 'continue', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1)), 1))))));
				};
				return (p5pkg["Perlito5::Expression"].die([[('Unexpected statement modifier ' + String.fromCharCode(39) + p5str(v_modifier) + String.fromCharCode(39))]], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Expression", "delimited_statement", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and((';' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m = null;
										(v_m = (v_MATCH));
										if ( !( p5bool((function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})())) ) {
											(v_MATCH = (v_m));
										};
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "statement_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['statement_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_m = null;
										(v_m = (v_MATCH));
										if ( !( p5bool((function () {
												return (p5and((';' == p5pkg["Perlito5::Expression"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
											})())) ) {
											(v_MATCH = (v_m));
										};
										return (p5context([1], p5want));
									})()], p5want) }), function () { return p5context([(function () {
										var v_m = null;
										(v_m = (v_MATCH));
										if ( !( p5bool((function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})())) ) {
											(v_MATCH = (v_m));
										};
										return (p5context([1], p5want));
									})()], p5want) }), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['statement_parse'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['statement_parse'] = new p5HashRef({})))._hash_['capture']);
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Expression", "statement_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_res = null;
				(v_res = (p5call(v_self, "exp_stmt", [v_str, v_pos], 0)));
				if ( p5bool(v_res) ) {
					throw(p5context([v_res], p5want));
				};
				(v_res = (p5call(v_self, "exp_parse", [v_str, v_pos], 0)));
				if ( !( p5bool(v_res)) ) {
					throw(p5context([], p5want));
				};
				if ( (((p5pkg["Perlito5::Expression"].substr([v_str, (v_res || (v_res = new p5HashRef({})))._hash_['to'], 1], 0) == ':') && p5bool(p5call((v_res || (v_res = new p5HashRef({})))._hash_['capture'], "isa", ['Perlito5::AST::Apply'], 0))) && p5bool(((v_res || (v_res = new p5HashRef({})))._hash_['capture'] || ((v_res || (v_res = new p5HashRef({})))._hash_['capture'] = new p5HashRef({})))._hash_['bareword'])) ) {
					(function () {
						var v_label = null;
						(v_label = (((v_res || (v_res = new p5HashRef({})))._hash_['capture'] || ((v_res || (v_res = new p5HashRef({})))._hash_['capture'] = new p5HashRef({})))._hash_['code']));
						var v_ws = null;
						(v_ws = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", [v_str, (p5num((v_res || (v_res = new p5HashRef({})))._hash_['to']) + 1)], 0)));
						var v_stmt = null;
						(v_stmt = (p5call(v_self, "statement_parse", p5list_to_a(v_str, (v_ws || (v_ws = new p5HashRef({})))._hash_['to']), 0)));
						if ( p5bool(v_stmt) ) {
							(((v_stmt || (v_stmt = new p5HashRef({})))._hash_['capture'] || ((v_stmt || (v_stmt = new p5HashRef({})))._hash_['capture'] = new p5HashRef({})))._hash_['label'] = v_label);
							throw(p5context([v_stmt], p5want));
						};
						((v_res || (v_res = new p5HashRef({})))._hash_['to'] = (v_ws || (v_ws = new p5HashRef({})))._hash_['to']);
						((v_res || (v_res = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef([])), 'code', 'undef', 'namespace', '', 'label', v_label), p5want));
						throw(p5context([v_res], p5want));
						})();
				};
				var v_modifier = null;
				(v_modifier = (p5call(v_self, "statement_modifier", p5list_to_a(v_str, (v_res || (v_res = new p5HashRef({})))._hash_['to'], p5pkg["Perlito5::Match"].flat([v_res], 1)), 0)));
				var v_p = null;
				(v_p = (( p5bool(v_modifier) ? (v_modifier || (v_modifier = new p5HashRef({})))._hash_['to'] : (v_res || (v_res = new p5HashRef({})))._hash_['to'])));
				var v_terminator = null;
				(v_terminator = (p5pkg["Perlito5::Expression"].substr([v_str, v_p, 1], 0)));
				if ( (((p5str(v_terminator) != ';') && (p5str(v_terminator) != '}')) && (p5str(v_terminator) != '')) ) {
					p5pkg["Perlito5::Expression"].die([['Number or Bareword found where operator expected']], null);
				};
				if ( !( p5bool(v_modifier)) ) {
					throw(p5context([v_res], p5want));
				};
				return (p5context([v_modifier], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5150 = p5make_package("Perlito5::Grammar");
		p5make_sub("Perlito5::Grammar", "unless", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('u' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([p5and(('n' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('l' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('s' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('s' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_paren", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_curly", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('l' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('s' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_body = null;
										(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
										if ( !( (v_body != null)) ) {
											p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'if' + String.fromCharCode(39)]], null);
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5or(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1), function () { return (new p5ArrayRef([])) })), 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1)), p5want));
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([(function () {
										var v_body = null;
										(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
										if ( !( (v_body != null)) ) {
											p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'unless' + String.fromCharCode(39)]], null);
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1)), p5want));
										return (p5context([1], p5want));
									})()], p5want)], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "if", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('i' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([p5and(('f' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_paren", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_curly", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5or(p5context([(function () {
									return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('l' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('s' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_body = null;
										(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
										if ( !( (v_body != null)) ) {
											p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'if' + String.fromCharCode(39)]], null);
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5or(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1), function () { return (new p5ArrayRef([])) })), 1)), p5want));
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('l' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('s' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "if", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['if'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_body = null;
										(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
										if ( !( (v_body != null)) ) {
											p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'if' + String.fromCharCode(39)]], null);
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['if']), 1))))), 1)), p5want));
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([(function () {
										var v_body = null;
										(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
										if ( !( (v_body != null)) ) {
											p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'if' + String.fromCharCode(39)]], null);
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::If"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1), 'otherwise', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 1)), p5want));
										return (p5context([1], p5want));
									})()], p5want)], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "when", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('w' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([p5and(('h' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('n' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_paren", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "term_curly", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_body = null;
								(v_body = ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_curly']), p5want) = new p5ArrayRef([])))._array_,2)]));
								if ( !( (v_body != null)) ) {
									p5pkg["Perlito5::Grammar"].die([['Missing code block in ' + String.fromCharCode(39) + 'when' + String.fromCharCode(39)]], null);
								};
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::When"], "new", p5list_to_a('cond', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.term_paren']), p5want) = new p5ArrayRef([])))._array_,2)], 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", ['stmts', v_body], 1)), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "for", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5context([p5and(('f' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([p5and(('o' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('r' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										return (p5and(('each' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([p5and(('m' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('y' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "var_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('(' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.paren_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_continue_block", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::For"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.paren_parse']), 1), 'topic', null, 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1), 'sig', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.var_ident']), 1)), 1), 'continue', ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = new p5HashRef({})))._hash_['capture']), p5want));
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([p5and(('(' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "exp_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(p5and(p5and(p5and(p5context([p5and((';' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['c_style_for'] = 1);
												return (p5context([1], p5want));
											})()], p5want) }), function () { return p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5or(p5or(p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp'] = v_m2);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want), function () { return p5context([(function () {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
													return (p5context([], p5want));
												})()], p5want) }), function () { return p5context([(function () {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
													return (p5context([p5context([(function () {
														var v_m2 = null;
														(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
														if ( p5bool(v_m2) ) {
															((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
															return (p5context([1], p5want));
														}
														
														else {
															return (p5context([0], p5want));
														}
													})()], p5want)], p5want));
												})()], p5want) }));
											})()], p5want) }), function () { return p5context([p5and((';' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5or(p5or(p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp2", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp2'] = v_m2);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want), function () { return p5context([(function () {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
													return (p5context([], p5want));
												})()], p5want) }), function () { return p5context([(function () {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
													return (p5context([p5context([(function () {
														var v_m2 = null;
														(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
														if ( p5bool(v_m2) ) {
															((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
															return (p5context([1], p5want));
														}
														
														else {
															return (p5context([0], p5want));
														}
													})()], p5want)], p5want));
												})()], p5want) }));
											})()], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([1], p5want));
										})()], p5want) }));
									})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts2", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts2'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "opt_continue_block", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_header = null;
										if ( p5bool((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['c_style_for']) ) {
											(v_header = ((new p5ArrayRef(p5list_to_a(((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] = new p5HashRef({})))._hash_['capture'], ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp'] = new p5HashRef({})))._hash_['capture'], ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp2'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp2'] = new p5HashRef({})))._hash_['capture'])))));
										}
										else {
											(v_header = (((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] = new p5HashRef({})))._hash_['capture']));
										};
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::For"], "new", p5list_to_a('cond', v_header, 'topic', null, 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts2']), 1), 'sig', null), 1), 'continue', ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = new p5HashRef({})))._hash_['capture']), p5want));
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "while", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('w' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([p5and(('h' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('i' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('l' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('(' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.paren_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_continue_block", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::While"], "new", p5list_to_a('cond', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.paren_parse']), 1), 'body', p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1), 'sig', null), 1), 'continue', ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['opt_continue_block'] = new p5HashRef({})))._hash_['capture']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "opt_continue_block", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('continue' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 8], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (8 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1), 'sig', null), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([])), 'sig', null), p5want));
								return (p5context([1], p5want));
							})()], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
	})()
;
	(function () {
		null;
		var p5151 = p5make_package("Perlito5::Grammar::String");
		// use Perlito5::Precedence
;
		p5pkg["Perlito5::Precedence"].add_term([String.fromCharCode(39), function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_q_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['"', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qq_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['/', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_m_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['<', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_glob", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['<<', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "here_doc_wanted", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['`', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qx", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['m', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_m_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['q', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_q_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['qq', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qq_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['qw', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qw_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['qx', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qx", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['qr', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_qr_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['s', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_s_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['tr', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_tr_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['y', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::String"], "term_tr_quote", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5make_sub("Perlito5::Grammar::String", "term_q_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and(('q' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5and(p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want), function () { return p5context([(function () {
												var v_tmp = null;
												(v_tmp = (v_MATCH));
												(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
												var v_res = null;
												(v_res = (p5context([(function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															var v_m2 = null;
															(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
															if ( p5bool(v_m2) ) {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																return (p5context([1], p5want));
															}
															
															else {
																return (p5context([0], p5want));
															}
														})()], p5want));
													})()], 0)));
												return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
											})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and((String.fromCharCode(39) == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "q_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['q_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['q_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_qq_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and(('qq' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5and(p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want), function () { return p5context([(function () {
												var v_tmp = null;
												(v_tmp = (v_MATCH));
												(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
												var v_res = null;
												(v_res = (p5context([(function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															var v_m2 = null;
															(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
															if ( p5bool(v_m2) ) {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																return (p5context([1], p5want));
															}
															
															else {
																return (p5context([0], p5want));
															}
														})()], p5want));
													})()], 0)));
												return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
											})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('"' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "qq_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qq_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qq_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_qw_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('qw' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_tmp = null;
										(v_tmp = (v_MATCH));
										(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
										var v_res = null;
										(v_res = (p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want));
											})()], 0)));
										return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
									})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "qw_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qw_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qw_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_m_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and(('m' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5and(p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want), function () { return p5context([(function () {
												var v_tmp = null;
												(v_tmp = (v_MATCH));
												(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
												var v_res = null;
												(v_res = (p5context([(function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															var v_m2 = null;
															(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
															if ( p5bool(v_m2) ) {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																return (p5context([1], p5want));
															}
															
															else {
																return (p5context([0], p5want));
															}
														})()], p5want));
													})()], 0)));
												return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
											})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('/' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "m_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['m_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['m_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_s_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('s' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_tmp = null;
										(v_tmp = (v_MATCH));
										(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
										var v_res = null;
										(v_res = (p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want));
											})()], 0)));
										return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
									})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "s_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['s_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['s_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_qx", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and(('qx' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5and(p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want), function () { return p5context([(function () {
												var v_tmp = null;
												(v_tmp = (v_MATCH));
												(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
												var v_res = null;
												(v_res = (p5context([(function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															var v_m2 = null;
															(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
															if ( p5bool(v_m2) ) {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																return (p5context([1], p5want));
															}
															
															else {
																return (p5context([0], p5want));
															}
														})()], p5want));
													})()], 0)));
												return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
											})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('`' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "qx_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qx_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qx_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_glob", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([p5and(('<' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "glob_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['glob_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['glob_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_tr_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('tr' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('y' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_tmp = null;
										(v_tmp = (v_MATCH));
										(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
										var v_res = null;
										(v_res = (p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want));
											})()], 0)));
										return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
									})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "tr_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['tr_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['tr_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "term_qr_quote", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([p5and(('qr' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('#' == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_tmp = null;
										(v_tmp = (v_MATCH));
										(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
										var v_res = null;
										(v_res = (p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want));
											})()], 0)));
										return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
									})()], p5want) }), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "qr_quote_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qr_quote_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['qr_quote_parse']), 1)))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		var Hash_pair = {};
		(Hash_pair = p5a_to_h(['{', '}', '(', ')', '[', ']', '<', '>']));
		var Hash_escape_sequence = {};
		(Hash_escape_sequence = {'a' : '7', 'b' : '8', 'e' : '27', 'f' : '12', 'n' : '10', 'r' : '13', 't' : '9'});
		var Hash_hex = {};
		(Hash_hex = p5a_to_h(p5list_to_a(p5map(p5pkg["Perlito5::Grammar::String"], function (p5want) {
				return ((p5context([p5pkg["Perlito5::Grammar::String"]["v__"], 1], p5want)));
			}, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']))));
		var Hash_octal = {};
		(Hash_octal = p5a_to_h(p5list_to_a(p5map(p5pkg["Perlito5::Grammar::String"], function (p5want) {
				return ((p5context([p5pkg["Perlito5::Grammar::String"]["v__"], 1], p5want)));
			}, ['0', '1', '2', '3', '4', '5', '6', '7']))));
		p5make_sub("Perlito5::Grammar::String", "q_quote_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_delimiter = (Hash_pair[v_delimiter]));
				};
				return (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_delimiter, 0], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "qq_quote_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_delimiter = (Hash_pair[v_delimiter]));
				};
				return (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_delimiter, 1], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "qw_quote_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_m = null;
				(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_delimiter, 0], 0)));
				if ( p5bool(v_m) ) {
					((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'list:<,>', 'arguments', (new p5ArrayRef(p5list_to_a(p5map(p5pkg["Perlito5::Grammar::String"], function (p5want) {
	return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"]["v__"]], p5want));
}, p5list_to_a(p5pkg["Perlito5::Grammar::String"].split(p5list_to_a(' ', (p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5HashRef({})))._hash_['buf']), 1)))))), 'namespace', ''), p5want));
				};
				return (p5context([v_m], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "m_quote_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				var v_closing_delimiter = null;
				(v_closing_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_closing_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_part1 = null;
				(v_part1 = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_closing_delimiter, 2], 0)));
				if ( p5bool(v_part1) ) {
					null;
				}
				else {
					throw(p5context([v_part1], p5want));
				};
				var v_str_regex = null;
				(v_str_regex = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['capture']));
				var v_p = null;
				(v_p = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']));
				var v_modifiers = null;
				(v_modifiers = (''));
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(v_modifiers = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
					((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to'] = (v_m || (v_m = new p5HashRef({})))._hash_['to']);
				};
				((v_part1 || (v_part1 = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'p5:m', 'arguments', (new p5ArrayRef([v_str_regex, v_modifiers])), 'namespace', ''), p5want));
				return (p5context([v_part1], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "s_quote_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				var v_closing_delimiter = null;
				(v_closing_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_closing_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_part1 = null;
				(v_part1 = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_closing_delimiter, 1], 0)));
				if ( p5bool(v_part1) ) {
					null;
				}
				else {
					throw(p5context([v_part1], p5want));
				};
				var v_str_regex = null;
				(v_str_regex = (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].substr([v_str, v_pos, ((p5num((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']) - p5num(v_pos)) - 1)], 1)], 0)));
				var v_part2 = null;
				var v_m = null;
				var v_p = null;
				(v_p = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(function () {
						(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", [v_str, v_p], 0)));
						(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
						(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)));
						var v_open_delimiter = null;
						(v_open_delimiter = (v_delimiter));
						(v_p)++;
						(v_closing_delimiter = (v_delimiter));
						if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
							(v_closing_delimiter = (Hash_pair[v_delimiter]));
						};
						(v_part2 = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_open_delimiter, v_closing_delimiter, 1], 0)));
						if ( p5bool(v_part2) ) {
							null;
						}
						else {
							throw(p5context([v_part2], p5want));
						};
						})();
				}
				else {
					(v_part2 = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_open_delimiter, v_closing_delimiter, 1], 0)));
					if ( p5bool(v_part2) ) {
						null;
					}
					else {
						throw(p5context([v_part2], p5want));
					};
				};
				(v_p = ((v_part2 || (v_part2 = new p5HashRef({})))._hash_['to']));
				var v_modifiers = null;
				(v_modifiers = (''));
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(v_modifiers = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
					((v_part2 || (v_part2 = new p5HashRef({})))._hash_['to'] = (v_m || (v_m = new p5HashRef({})))._hash_['to']);
				};
				((v_part2 || (v_part2 = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'p5:s', 'arguments', (new p5ArrayRef(p5list_to_a(v_str_regex, p5pkg["Perlito5::Match"].flat([v_part2], 1), v_modifiers))), 'namespace', ''), p5want));
				return (p5context([v_part2], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "qr_quote_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				var v_closing_delimiter = null;
				(v_closing_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_closing_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_part1 = null;
				(v_part1 = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_closing_delimiter, 2], 0)));
				if ( p5bool(v_part1) ) {
					null;
				}
				else {
					throw(p5context([v_part1], p5want));
				};
				var v_str_regex = null;
				(v_str_regex = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['capture']));
				var v_p = null;
				(v_p = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']));
				var v_modifiers = null;
				(v_modifiers = (''));
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(v_modifiers = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
					((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to'] = (v_m || (v_m = new p5HashRef({})))._hash_['to']);
				};
				((v_part1 || (v_part1 = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'p5:qr', 'arguments', (new p5ArrayRef([v_str_regex, v_modifiers])), 'namespace', ''), p5want));
				return (p5context([v_part1], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "qx_quote_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_m = null;
				(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_delimiter, 0], 0)));
				if ( p5bool(v_m) ) {
					((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'qx', 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Match"].flat([v_m], 1)))), 'namespace', ''), p5want));
				};
				return (p5context([v_m], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "glob_quote_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_m = null;
				(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_delimiter, 0], 0)));
				if ( p5bool(v_m) ) {
					((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'glob', 'arguments', (new p5ArrayRef(p5list_to_a(p5pkg["Perlito5::Match"].flat([v_m], 1)))), 'namespace', ''), p5want));
				};
				return (p5context([v_m], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "tr_quote_parse", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) - 1), 1], 0)));
				var v_open_delimiter = null;
				(v_open_delimiter = (v_delimiter));
				var v_closing_delimiter = null;
				(v_closing_delimiter = (v_delimiter));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(v_closing_delimiter = (Hash_pair[v_delimiter]));
				};
				var v_part1 = null;
				(v_part1 = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, v_open_delimiter, v_closing_delimiter, 1], 0)));
				if ( p5bool(v_part1) ) {
					null;
				}
				else {
					throw(p5context([v_part1], p5want));
				};
				var v_str_regex = null;
				(v_str_regex = (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].substr([v_str, v_pos, ((p5num((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']) - p5num(v_pos)) - 1)], 1)], 0)));
				var v_part2 = null;
				var v_m = null;
				var v_p = null;
				(v_p = ((v_part1 || (v_part1 = new p5HashRef({})))._hash_['to']));
				if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
					(function () {
						(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", [v_str, v_p], 0)));
						(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
						(v_delimiter = (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)));
						var v_open_delimiter = null;
						(v_open_delimiter = (v_delimiter));
						(v_p)++;
						(v_closing_delimiter = (v_delimiter));
						if ( (Hash_pair).hasOwnProperty(v_delimiter) ) {
							(v_closing_delimiter = (Hash_pair[v_delimiter]));
						};
						(v_part2 = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_open_delimiter, v_closing_delimiter, 1], 0)));
						if ( p5bool(v_part2) ) {
							null;
						}
						else {
							throw(p5context([v_part2], p5want));
						};
						})();
				}
				else {
					(v_part2 = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_open_delimiter, v_closing_delimiter, 1], 0)));
					if ( p5bool(v_part2) ) {
						null;
					}
					else {
						throw(p5context([v_part2], p5want));
					};
				};
				(v_p = ((v_part2 || (v_part2 = new p5HashRef({})))._hash_['to']));
				var v_modifiers = null;
				(v_modifiers = (''));
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(v_modifiers = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
					((v_part2 || (v_part2 = new p5HashRef({})))._hash_['to'] = (v_m || (v_m = new p5HashRef({})))._hash_['to']);
				};
				((v_part2 || (v_part2 = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'p5:tr', 'arguments', (new p5ArrayRef(p5list_to_a(v_str_regex, p5pkg["Perlito5::Match"].flat([v_part2], 1), v_modifiers))), 'namespace', ''), p5want));
				return (p5context([v_part2], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "string_interpolation_parse", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_open_delimiter = null;
				(v_open_delimiter = (List__[p5idx(List__,3)]));
				var v_delimiter = null;
				(v_delimiter = (List__[p5idx(List__,4)]));
				var v_interpolate = null;
				(v_interpolate = (List__[p5idx(List__,5)]));
				var v_p = null;
				(v_p = (v_pos));
				var v_balanced = null;
				(v_balanced = (p5and(v_open_delimiter, function () { return (Hash_pair).hasOwnProperty(v_open_delimiter) })));
				var List_args = [];
				var v_buf = null;
				(v_buf = (''));
				p5while(function () {
						var v_c = null;
						(v_c = (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)));
						var v_c2 = null;
						(v_c2 = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_p) + 1), 1], 0)));
						var v_m = null;
						var v_more = null;
						(v_more = (''));
						if ( ((p5bool(v_balanced) && (p5str(v_c) == String.fromCharCode(92))) && ((p5str(v_c2) == p5str(v_open_delimiter)) || (p5str(v_c2) == p5str(v_delimiter)))) ) {
							(v_p)++;
							(v_c = (v_c2));
						}
						else {
							if ( (p5bool(v_balanced) && (p5str(v_c) == p5str(v_open_delimiter))) ) {
								(v_buf = ((p5str(v_buf) + p5str(v_c))));
								(v_p)++;
								(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_open_delimiter, v_delimiter, v_interpolate], 0)));
								(v_more = (v_delimiter));
							}
							else {
								if ( (p5bool(v_interpolate) && ((p5str(v_c) == '$') || (p5str(v_c) == '@'))) ) {
									(v_m = (p5call(p5pkg["Perlito5::Grammar::String"], "double_quoted_var", [v_str, v_p, v_delimiter, v_interpolate], 0)));
								}
								else {
									if ( (p5str(v_c) == String.fromCharCode(92)) ) {
										if ( (p5num(v_interpolate) == 2) ) {
											(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_p, 'to', (p5num(v_p) + 2), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 2], 1)], 1)))))));
										}
										else {
											if ( (p5num(v_interpolate) == 1) ) {
												(v_m = (p5call(p5pkg["Perlito5::Grammar::String"], "double_quoted_unescape", [v_str, v_p], 0)));
											}
											else {
												(v_m = (( (p5str(v_c2) == String.fromCharCode(92)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_p, 'to', (p5num(v_p) + 2), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', String.fromCharCode(92)], 1))))) : ( (p5str(v_c2) == String.fromCharCode(39)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_p, 'to', (p5num(v_p) + 2), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', String.fromCharCode(39)], 1))))) : 0))));
											};
										};
									};
								};
							};
						};
						if ( p5bool(v_m) ) {
							(function () {
								var v_obj = null;
								(v_obj = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
								if ( (p5str(p5pkg["Perlito5::Grammar::String"].ref([v_obj], 0)) == 'Perlito5::AST::Val::Buf') ) {
									(v_buf = ((p5str(v_buf) + p5str((v_obj || (v_obj = new p5HashRef({})))._hash_['buf']))));
									(v_obj = (null));
								};
								if ( p5bool(v_obj) ) {
									if ( p5bool(p5pkg["Perlito5::Grammar::String"].length([v_buf], 0)) ) {
										p5pkg["Perlito5::Grammar::String"].push([List_args, p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', v_buf], 1))], null);
										(v_buf = (''));
									};
									p5pkg["Perlito5::Grammar::String"].push([List_args, [v_obj]], null);
								};
								(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
								(v_buf = ((p5str(v_buf) + p5str(v_more))));
								})();
						}
						else {
							(v_p)++;
							if ( ((p5str(v_c) == p5pkg["Perlito5::Grammar::String"].chr([10], 0)) || (p5str(v_c) == p5pkg["Perlito5::Grammar::String"].chr([13], 0))) ) {
								(function () {
									var v_m = null;
									(v_m = (p5call(v_self, "here_doc", [v_str, v_p], 0)));
									if ( (p5num(v_p) != p5num((v_m || (v_m = new p5HashRef({})))._hash_['to'])) ) {
										(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									}
									else {
										(v_buf = ((p5str(v_buf) + p5str(v_c))));
									};
									})();
							}
							else {
								(v_buf = ((p5str(v_buf) + p5str(v_c))));
							};
						};
					}, function () { return p5and((p5num(v_p) < p5pkg["Perlito5::Grammar::String"].length([v_str], 0)), function () { return (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) != p5str(v_delimiter)) }) }, false, "");
				if ( p5bool(p5pkg["Perlito5::Grammar::String"].length([v_buf], 0)) ) {
					p5pkg["Perlito5::Grammar::String"].push([List_args, p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', v_buf], 1))], null);
				};
				if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) != p5str(v_delimiter)) ) {
					p5pkg["Perlito5::Grammar::String"].die([[('Can' + String.fromCharCode(39) + 't find string terminator ' + String.fromCharCode(39) + p5str(v_delimiter) + String.fromCharCode(39) + ' anywhere before EOF')]], null);
				};
				(v_p = ((p5num(v_p) + p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0))));
				var v_ast = null;
				if ( !( p5bool(List_args.length)) ) {
					(v_ast = (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', ''], 0)));
				}
				else {
					if ( (p5num(List_args.length) == 1) ) {
						(v_ast = (List_args[p5idx(List_args,0)]));
					}
					else {
						(v_ast = (p5call(p5pkg["Perlito5::AST::Apply"], "new", ['namespace', '', 'code', 'list:<.>', 'arguments', (new p5ArrayRef(List_args))], 0)));
					};
				};
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_p, 'capture' : v_ast})));
		});
		var List_Here_doc = [];
		p5make_sub("Perlito5::Grammar::String", "here_doc_wanted", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				var v_type = null;
				(v_type = ('double_quote'));
				var v_p = null;
				(v_p = (v_pos));
				if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 2], 0) == '<<') ) {
					(function () {
						(v_p = ((p5num(v_p) + 2)));
						var v_quote = null;
						(v_quote = (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)));
						if ( ((p5str(v_quote) == String.fromCharCode(39)) || (p5str(v_quote) == '"')) ) {
							(function () {
								(v_p = ((p5num(v_p) + 1)));
								var v_m = null;
								(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_p, v_quote, v_quote, 0], 0)));
								if ( p5bool(v_m) ) {
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									(v_delimiter = ((p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5HashRef({})))._hash_['buf']));
									(v_type = (( (p5str(v_quote) == String.fromCharCode(39)) ? 'single_quote' : 'double_quote')));
								};
								})();
						}
						else {
							(function () {
								if ( (p5str(v_quote) == String.fromCharCode(92)) ) {
									(v_p = ((p5num(v_p) + 1)));
								};
								var v_m = null;
								(v_m = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
								if ( p5bool(v_m) ) {
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									(v_delimiter = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
									(v_type = (( (p5str(v_quote) == String.fromCharCode(92)) ? 'single_quote' : 'double_quote')));
								}
								else {
									p5pkg["Perlito5::Grammar::String"].die([['Use of bare << to mean <<"" is deprecated']], null);
								};
								})();
						};
						})();
				};
				if ( !( (v_delimiter != null)) ) {
					throw(p5context([0], p5want));
				};
				var v_placeholder = null;
				(v_placeholder = (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'list:<.>', 'namespace', '', 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'list:<.>', 'namespace', '', 'arguments', (new p5ArrayRef([]))), 1))))), 0)));
				p5pkg["Perlito5::Grammar::String"].push([List_Here_doc, p5list_to_a((new p5ArrayRef(p5list_to_a(v_type, (((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] || ((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] || ((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] || (((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] || ((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] || ((v_placeholder || (v_placeholder = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)] = new p5HashRef({})))._hash_['arguments'], v_delimiter))))], null);
				return ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', v_p, 'capture', (new p5ArrayRef(['term', v_placeholder])))))));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "newline", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5context([p5and((String.fromCharCode(10) == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										return (p5and((String.fromCharCode(13) == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5context([p5and((String.fromCharCode(13) == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										return (p5and((String.fromCharCode(10) == p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::String", "here_doc", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				if ( !( p5bool(List_Here_doc.length)) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
				};
				var v_p = null;
				(v_p = (v_pos));
				var v_here = null;
				(v_here = (p5pkg["Perlito5::Grammar::String"].shift([List_Here_doc])));
				var v_type = null;
				(v_type = ((v_here || (v_here = new p5ArrayRef([])))._array_[p5idx((v_here || (v_here = new p5ArrayRef([])))._array_,0)]));
				var v_result = null;
				(v_result = ((v_here || (v_here = new p5ArrayRef([])))._array_[p5idx((v_here || (v_here = new p5ArrayRef([])))._array_,1)]));
				var v_delimiter = null;
				(v_delimiter = ((v_here || (v_here = new p5ArrayRef([])))._array_[p5idx((v_here || (v_here = new p5ArrayRef([])))._array_,2)]));
				if ( (p5str(v_type) == 'single_quote') ) {
					p5while(function () {
							if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) == p5str(v_delimiter)) ) {
								(function () {
									p5pkg["Perlito5::Grammar::String"].push([(v_result || (v_result = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].substr([v_str, v_pos, (p5num(v_p) - p5num(v_pos))], 1)], 1))], null);
									(v_p = ((p5num(v_p) + p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0))));
									var v_m = null;
									(v_m = (p5call(v_self, "newline", [v_str, v_p], 0)));
									if ( ((p5num(v_p) >= p5pkg["Perlito5::Grammar::String"].length([v_str], 0)) || p5bool(v_m)) ) {
										if ( p5bool(v_m) ) {
											(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
										};
										throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : (p5num(v_p) - 1)})));
									};
									})();
							};
							p5while(function () {
									(v_p)++;
								}, function () { return p5and((p5num(v_p) < p5pkg["Perlito5::Grammar::String"].length([v_str], 0)), function () { return p5context([p5and((p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) != p5pkg["Perlito5::Grammar::String"].chr([10], 0)), function () { return (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) != p5pkg["Perlito5::Grammar::String"].chr([13], 0)) })], 0) }) }, false, "");
							p5while(function () {
									(v_p)++;
								}, function () { return p5and((p5num(v_p) < p5pkg["Perlito5::Grammar::String"].length([v_str], 0)), function () { return p5context([p5or((p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) == p5pkg["Perlito5::Grammar::String"].chr([10], 0)), function () { return (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) == p5pkg["Perlito5::Grammar::String"].chr([13], 0)) })], 0) }) }, false, "");
						}, function () { return (p5num(v_p) < p5pkg["Perlito5::Grammar::String"].length([v_str], 0)) }, false, "");
				}
				else {
					(function () {
						var v_m = null;
						if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) == p5str(v_delimiter)) ) {
							(v_p = ((p5num(v_p) + p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0))));
							(v_m = (p5call(v_self, "newline", [v_str, v_p], 0)));
							if ( ((p5num(v_p) >= p5pkg["Perlito5::Grammar::String"].length([v_str], 0)) || p5bool(v_m)) ) {
								p5pkg["Perlito5::Grammar::String"].push([(v_result || (v_result = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', ''], 1))], null);
								if ( p5bool(v_m) ) {
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
								};
								throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_p})));
							};
						};
						(v_m = (p5call(v_self, "string_interpolation_parse", [v_str, v_pos, '', (String.fromCharCode(10) + p5str(v_delimiter) + String.fromCharCode(10)), 1], 0)));
						if ( p5bool(v_m) ) {
							p5pkg["Perlito5::Grammar::String"].push([(v_result || (v_result = new p5ArrayRef([])))._array_, p5list_to_a(p5pkg["Perlito5::Match"].flat([v_m], 1))], null);
							p5pkg["Perlito5::Grammar::String"].push([(v_result || (v_result = new p5ArrayRef([])))._array_, p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', String.fromCharCode(10)], 1))], null);
							((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) - 1));
							throw(p5context([v_m], p5want));
						};
						})();
				};
				return (p5pkg["Perlito5::Grammar::String"].die([[('Can' + String.fromCharCode(39) + 't find string terminator "' + p5str(v_delimiter) + '" anywhere before EOF')]], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "double_quoted_unescape", function (List__, p5want) {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_c2 = null;
				(v_c2 = (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 1), 1], 0)));
				var v_m = null;
				if ( (Hash_escape_sequence).hasOwnProperty(v_c2) ) {
					(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_pos) + 2), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].chr([Hash_escape_sequence[v_c2]], 1)], 1)))))));
				}
				else {
					if ( (p5str(v_c2) == 'c') ) {
						(function () {
							var v_c3 = null;
							(v_c3 = (((p5pkg["Perlito5::Grammar::String"].ord([p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 2), 1], 0)], 0) - p5pkg["Perlito5::Grammar::String"].ord(['A'], 0)) + 1)));
							if ( (p5num(v_c3) < 0) ) {
								(v_c3 = ((128 + p5num(v_c3))));
							};
							(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_pos) + 3), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5::Grammar::String"].chr([v_c3], 1)], 1)))))));
							})();
					}
					else {
						if ( (p5str(v_c2) == 'x') ) {
							if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 2), 1], 0) == '{') ) {
								(function () {
									var v_p = null;
									(v_p = ((p5num(v_pos) + 3)));
									p5while(function () {
											(v_p)++;
										}, function () { return p5and((p5num(v_p) < p5pkg["Perlito5::Grammar::String"].length([v_str], 0)), function () { return (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) != '}') }) }, false, "");
									var v_tmp = null;
									(v_tmp = (p5pkg["Perlito5::Grammar::String"].oct([('0x' + p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 3), (p5num(v_p) - p5num(v_pos))], 0))], 0)));
									(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_p) + 1), 'capture', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_tmp], 1)))), 'code', 'chr'), 1)))))));
									})();
							}
							else {
								(function () {
									var v_p = null;
									(v_p = ((p5num(v_pos) + 2)));
									if ( p5bool(Hash_hex[p5pkg["Perlito5::Grammar::String"].uc([p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)], p5want)]) ) {
										(v_p)++;
									};
									if ( p5bool(Hash_hex[p5pkg["Perlito5::Grammar::String"].uc([p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0)], p5want)]) ) {
										(v_p)++;
									};
									var v_tmp = null;
									(v_tmp = (p5pkg["Perlito5::Grammar::String"].oct([('0x' + p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 2), (p5num(v_p) - p5num(v_pos))], 0))], 0)));
									(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', v_p, 'capture', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_tmp], 1)))), 'code', 'chr'), 1)))))));
									})();
							};
						}
						else {
							if ( (Hash_octal).hasOwnProperty(v_c2) ) {
								(function () {
									var v_p = null;
									(v_p = ((p5num(v_pos) + 2)));
									if ( p5bool(Hash_octal[p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], p5want)]) ) {
										(v_p)++;
									};
									if ( p5bool(Hash_octal[p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], p5want)]) ) {
										(v_p)++;
									};
									var v_tmp = null;
									(v_tmp = (p5pkg["Perlito5::Grammar::String"].oct([p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 1), (p5num(v_p) - p5num(v_pos))], 0)], 0)));
									(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', v_p, 'capture', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_tmp], 1)))), 'code', 'chr'), 1)))))));
									})();
							}
							else {
								(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_pos) + 2), 'capture', p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', v_c2], 1)))))));
							};
						};
					};
				};
				return (p5context([v_m], p5want));
		});
		p5make_sub("Perlito5::Grammar::String", "double_quoted_var_with_subscript", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_m_var = null;
				(v_m_var = (List__[p5idx(List__,1)]));
				var v_interpolate = null;
				(v_interpolate = (List__[p5idx(List__,2)]));
				var v_str = null;
				(v_str = ((v_m_var || (v_m_var = new p5HashRef({})))._hash_['str']));
				var v_pos = null;
				(v_pos = ((v_m_var || (v_m_var = new p5HashRef({})))._hash_['to']));
				var v_p = null;
				(v_p = (v_pos));
				var v_m_index = null;
				if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) == '[') ) {
					if ( (p5num(v_interpolate) == 2) ) {
						(function () {
							var v_m = null;
							(v_m = (p5or(p5or(p5call(p5pkg["Perlito5::Expression"], "term_digit", [v_str, (p5num(v_p) + 1)], 0), function () { return p5context([p5and((p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_p) + 1), 1], 0) == '-'), function () { return p5call(p5pkg["Perlito5::Expression"], "term_digit", [v_str, (p5num(v_p) + 2)], 0) })], 0) }), function () { return p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", [v_str, (p5num(v_p) + 1)], 0) })));
							if ( p5bool(v_m) ) {
								null;
							}
							else {
								throw(p5context([v_m_var], p5want));
							};
							if ( (p5pkg["Perlito5::Grammar::String"].substr([v_str, (v_m || (v_m = new p5HashRef({})))._hash_['to'], 1], 0) == ']') ) {
								null;
							}
							else {
								throw(p5context([v_m_var], p5want));
							};
							})();
					};
					(v_p)++;
					(v_m_index = (p5call(p5pkg["Perlito5::Expression"], "list_parse", [v_str, v_p], 0)));
					if ( p5bool(v_m_index) ) {
						(function () {
							var v_exp = null;
							(v_exp = ((v_m_index || (v_m_index = new p5HashRef({})))._hash_['capture']));
							(v_p = ((v_m_index || (v_m_index = new p5HashRef({})))._hash_['to']));
							if ( ((p5str(v_exp) != '*undef*') && (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_p, 1], 0) == ']')) ) {
								(v_p)++;
								((v_m_index || (v_m_index = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Index"], "new", p5list_to_a('obj', (v_m_var || (v_m_var = new p5HashRef({})))._hash_['capture'], 'index_exp', v_exp), p5want));
								((v_m_index || (v_m_index = new p5HashRef({})))._hash_['to'] = v_p);
								throw(p5call(v_self, "double_quoted_var_with_subscript", [v_m_index, v_interpolate], p5want));
							};
							})();
					};
				};
				(v_m_index = (p5call(p5pkg["Perlito5::Expression"], "term_curly", [v_str, v_pos], 0)));
				if ( p5bool(v_m_index) ) {
					((v_m_index || (v_m_index = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Lookup"], "new", p5list_to_a('obj', (v_m_var || (v_m_var = new p5HashRef({})))._hash_['capture'], 'index_exp', ((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_,2)] || ((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_,2)] = new p5ArrayRef([])))._array_[p5idx(((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_,2)] || ((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m_index], p5want) || (p5pkg["Perlito5::Match"].flat([v_m_index], p5want) = new p5ArrayRef([])))._array_,2)] = new p5ArrayRef([])))._array_,0)]), p5want));
					throw(p5call(v_self, "double_quoted_var_with_subscript", [v_m_index, v_interpolate], p5want));
				};
				return (p5context([v_m_var], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::String", "double_quoted_var", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_delimiter = null;
				(v_delimiter = (List__[p5idx(List__,3)]));
				var v_interpolate = null;
				(v_interpolate = (List__[p5idx(List__,4)]));
				var v_c = null;
				(v_c = (p5pkg["Perlito5::Grammar::String"].substr([v_str, v_pos, 1], 0)));
				if ( ((p5str(v_c) == '$') && (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 1), 1], 0) == '{')) ) {
					(function () {
						var v_m = null;
						(v_m = (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", [v_str, v_pos], 0)));
						if ( p5bool(v_m) ) {
							null;
						}
						else {
							throw(p5context([v_m], p5want));
						};
						var v_var = null;
						(v_var = ((p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5ArrayRef([])))._array_[p5idx((p5pkg["Perlito5::Match"].flat([v_m], p5want) || (p5pkg["Perlito5::Match"].flat([v_m], p5want) = new p5ArrayRef([])))._array_,1)]));
						((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = v_var);
						throw(p5context([v_m], p5want));
						})();
				}
				else {
					if ( ((p5str(v_c) == '$') && (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 1), p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) != p5str(v_delimiter))) ) {
						(function () {
							var v_m = null;
							(v_m = (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", [v_str, v_pos], 0)));
							if ( p5bool(v_m) ) {
								null;
							}
							else {
								throw(p5context([v_m], p5want));
							};
							((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,1)]);
							throw(p5call(v_self, "double_quoted_var_with_subscript", [v_m, v_interpolate], p5want));
							})();
					}
					else {
						if ( ((p5str(v_c) == '@') && (p5pkg["Perlito5::Grammar::String"].substr([v_str, (p5num(v_pos) + 1), p5pkg["Perlito5::Grammar::String"].length([v_delimiter], 0)], 0) != p5str(v_delimiter))) ) {
							(function () {
								var v_m = null;
								(v_m = (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", [v_str, v_pos], 0)));
								if ( p5bool(v_m) ) {
									null;
								}
								else {
									throw(p5context([v_m], p5want));
								};
								((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,1)]);
								(v_m = (p5call(v_self, "double_quoted_var_with_subscript", [v_m, v_interpolate], 0)));
								((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'join', 'arguments', (new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', ' '], 1), (v_m || (v_m = new p5HashRef({})))._hash_['capture']))), 'namespace', ''), p5want));
								throw(p5context([v_m], p5want));
								})();
						};
					};
				};
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		null;
		var p5152 = p5make_package("Perlito5::Grammar::Sigil");
		// use Perlito5::Precedence
;
		p5pkg["Perlito5::Precedence"].add_term(['$', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['@', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['%', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['&', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['*', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		var Hash_special_var = {};
		(Hash_special_var = p5a_to_h(['$_', '', '$&', '', '$`', '', '$' + String.fromCharCode(39), '', '$+', '', '@+', '', '%+', '', '$.', '', '$/', '', '$|', '', '$,', '', '$' + String.fromCharCode(92), '', '$"', '', '$;', '', '$%', '', '$=', '', '$-', '', '@-', '', '%-', '', '$~', '', '$^', '', '$:', '', '$?', '', '$!', '', '%!', '', '$@', '', '$$', '', '$<', '', '$>', '', '$(', '', '$)', '', '$[', '', '$]', 'main', '@_', '', '$*', '', '$#+', '', '$#-', '', '$#_', '']));
		p5make_sub("Perlito5::Grammar::Sigil", "term_special_var", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_len = null;
				(v_len = (0));
				var v_s = null;
				(v_s = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_pos, 3], 0)));
				if ( (p5str(v_s) == '$#[') ) {
					(v_len = (2));
				}
				else {
					if ( (Hash_special_var).hasOwnProperty(v_s) ) {
						(v_len = (3));
					}
					else {
						(v_s = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_pos, 2], 0)));
						if ( (Hash_special_var).hasOwnProperty(v_s) ) {
							(v_len = (2));
						};
					};
				};
				if ( p5bool(v_len) ) {
					(function () {
						var v_c0 = null;
						(v_c0 = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, ((p5num(v_pos) + p5num(v_len)) - 1), 1], 0)));
						var v_c1 = null;
						(v_c1 = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, (p5num(v_pos) + p5num(v_len)), 1], 0)));
						if ( ((((((p5str(v_c0) == '$') || (p5str(v_c0) == '@')) || (p5str(v_c0) == '%')) || (p5str(v_c0) == '*')) || (p5str(v_c0) == '&')) && ((((((((p5str(v_c1) == '$') || (p5str(v_c1) == '@')) || (p5str(v_c1) == '%')) || (p5str(v_c1) == '*')) || (p5str(v_c1) == '&')) || ((p5str(v_c1) >= 'a') && (p5str(v_c1) <= 'z'))) || ((p5str(v_c1) >= 'A') && (p5str(v_c1) <= 'Z'))) || ((p5str(v_c1) >= '0') && (p5str(v_c1) <= '9')))) ) {
							null;
						}
						else {
							throw((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', (p5num(v_pos) + p5num(v_len)), 'capture', (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', p5pkg["Perlito5::Grammar::Sigil"].substr([v_s, 0, (p5num(v_len) - 1)], 1), 'namespace', Hash_special_var[v_s], 'name', p5pkg["Perlito5::Grammar::Sigil"].substr([v_s, (p5num(v_len) - 1), 1], 1)), 1)))))))));
						};
						})();
				};
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var Hash_sigil = {};
		(Hash_sigil = {'$' : 1, '%' : 1, '@' : 1, '&' : 1, '*' : 1});
		p5make_sub("Perlito5::Grammar::Sigil", "term_sigil", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_c1 = null;
				(v_c1 = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_pos, 1], 0)));
				if ( (Hash_sigil).hasOwnProperty(v_c1) ) {
					null;
				}
				else {
					throw(p5context([], p5want));
				};
				var v_p = null;
				(v_p = ((p5num(v_pos) + 1)));
				var v_sigil = null;
				(v_sigil = (v_c1));
				if ( (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_pos, 2], 0) == '$#') ) {
					(v_sigil = ('$#'));
					(v_p)++;
				};
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", [v_str, v_p], 0)));
				(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
				(v_c1 = (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_p, 1], 0)));
				var v_q = null;
				(v_q = ((p5num(v_p) + 1)));
				if ( (p5str(v_c1) == '{') ) {
					(function () {
						var v_p = null;
						(v_p = (v_q));
						(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", [v_str, v_p], 0)));
						(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
						(v_m = (p5call(p5pkg["Perlito5::Grammar"], "optional_namespace_before_ident", [v_str, v_p], 0)));
						if ( p5bool(v_m) ) {
							(function () {
								var v_n = null;
								(v_n = (p5call(p5pkg["Perlito5::Grammar"], "var_name", p5list_to_a(v_str, (v_m || (v_m = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_n) ) {
									(function () {
										var v_spc = null;
										(v_spc = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_n || (v_n = new p5HashRef({})))._hash_['to']), 0)));
										((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', v_sigil, 'namespace', p5pkg["Perlito5::Match"].flat([v_m], 1), 'name', p5pkg["Perlito5::Match"].flat([v_n], 1)), p5want));
										((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (v_spc || (v_spc = new p5HashRef({})))._hash_['to']);
										(v_m = (p5call(p5pkg["Perlito5::Grammar::String"], "double_quoted_var_with_subscript", [v_m], 0)));
										((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', (v_m || (v_m = new p5HashRef({})))._hash_['capture']))));
										(v_spc = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_m || (v_m = new p5HashRef({})))._hash_['to']), 0)));
										var v_p = null;
										(v_p = ((v_spc || (v_spc = new p5HashRef({})))._hash_['to']));
										if ( (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_p, 1], 0) == '}') ) {
											((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (p5num(v_p) + 1));
											throw(p5context([v_m], p5want));
										};
										})();
								};
								})();
						};
						if ( (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_p, 1], 0) == '^') ) {
							(v_m = (p5call(p5pkg["Perlito5::Grammar"], "var_name", [v_str, (p5num(v_p) + 1)], 0)));
							if ( p5bool(v_m) ) {
								(function () {
									var v_p = null;
									(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
									if ( (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_p, 1], 0) == '}') ) {
										((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) + 1));
										((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', v_sigil, 'namespace', 'main', 'name', ('^' + p5str(p5pkg["Perlito5::Match"].flat([v_m], 0)))], 1)))));
										throw(p5context([v_m], p5want));
									};
									})();
							};
						};
						(v_m = (p5call(p5pkg["Perlito5::Expression"], "curly_parse", [v_str, v_p], 0)));
						if ( p5bool(v_m) ) {
							(function () {
								var v_p = null;
								(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
								if ( (p5pkg["Perlito5::Grammar::Sigil"].substr([v_str, v_p, 1], 0) == '}') ) {
									((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) + 1));
									((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef(p5list_to_a((v_m || (v_m = new p5HashRef({})))._hash_['capture']))), 'code', ('prefix:<' + p5str(v_sigil) + '>'), 'namespace', ''), 1)))));
									throw(p5context([v_m], p5want));
								};
								})();
						};
						})();
				};
				if ( (p5str(v_c1) == '^') ) {
					(function () {
						var v_p = null;
						(v_p = (v_q));
						(v_m = (p5call(p5pkg["Perlito5::Grammar"], "word", [v_str, v_p], 0)));
						if ( p5bool(v_m) ) {
							((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Var"], "new", ['sigil', v_sigil, 'namespace', 'main', 'name', ('^' + p5str(p5pkg["Perlito5::Match"].flat([v_m], 0)))], 1)))));
							throw(p5context([v_m], p5want));
						};
						})();
				};
				if ( (p5str(v_c1) == '$') ) {
					(v_m = (p5call(v_self, "term_sigil", [v_str, v_p], 0)));
					if ( p5bool(v_m) ) {
						((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('arguments', (new p5ArrayRef(p5list_to_a(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,1)]))), 'code', ('prefix:<' + p5str(v_sigil) + '>'), 'namespace', ''), 1)))));
						throw(p5context([v_m], p5want));
					};
				};
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "optional_namespace_before_ident", [v_str, v_p], 0)));
				if ( p5bool(v_m) ) {
					(function () {
						var v_n = null;
						(v_n = (p5call(p5pkg["Perlito5::Grammar"], "var_name", p5list_to_a(v_str, (v_m || (v_m = new p5HashRef({})))._hash_['to']), 0)));
						if ( p5bool(v_n) ) {
							((v_n || (v_n = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', v_sigil, 'namespace', p5pkg["Perlito5::Match"].flat([v_m], 1), 'name', p5pkg["Perlito5::Match"].flat([v_n], 1)), 1)))));
							throw(p5context([v_n], p5want));
						};
						})();
				};
				return (p5call(v_self, "term_special_var", [v_str, v_pos], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5153 = p5make_package("Perlito5::Grammar::Use");
		// use Perlito5::Precedence
;
		// use Perlito5::Grammar
;
		p5pkg["Perlito5::Precedence"].add_term(['no', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Use"], "term_use", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Precedence"].add_term(['use', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Use"], "term_use", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		var Hash_Perlito_internal_module = {};
		(Hash_Perlito_internal_module = {'strict' : 'Perlito5::strict', 'warnings' : 'Perlito5::warnings', 'utf8' : 'Perlito5::utf8', 'bytes' : 'Perlito5::bytes'});
		p5make_sub("Perlito5::Grammar::Use", "use_decl", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(('use' == p5pkg["Perlito5::Grammar::Use"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('no' == p5pkg["Perlito5::Grammar::Use"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Use", "term_use", function (List__, p5want) {
			try {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "use_decl", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['use_decl'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "val_version", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.val_version'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a('term', p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'undef', 'namespace', '', 'arguments', (new p5ArrayRef([]))), 1)))));
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_m = null;
										(v_m = (v_MATCH));
										if ( !( p5bool((function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													return (p5and(p5context([p5and(('-' == p5pkg["Perlito5::Grammar::Use"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
														var v_m2 = null;
														(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
														if ( p5bool(v_m2) ) {
															((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
															if ( (v_MATCH)._hash_.hasOwnProperty('Perlito5::Grammar.ident') ) {
																p5pkg["Perlito5::Grammar::Use"].push([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident'] = new p5ArrayRef([])))._array_, [v_m2]], null);
															}
															else {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident'] = (new p5ArrayRef([v_m2])));
															};
															return (p5context([1], p5want));
														}
														
														else {
															return (p5context([0], p5want));
														}
													})()], p5want) }));
												})()], p5want));
											})())) ) {
											(v_MATCH = (v_m));
										};
										return (p5context([1], p5want));
									})()], p5want) }), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "list_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.list_parse'] = v_m2);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_list = null;
										(v_list = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.list_parse']), 0)));
										if ( (p5str(v_list) == '*undef*') ) {
											(v_list = (null));
										}
										else {
											(function () {
												var v_m = null;
												(v_m = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.list_parse']));
												var v_list_code = null;
												(v_list_code = (p5pkg["Perlito5::Grammar::Use"].substr([v_str, (v_m || (v_m = new p5HashRef({})))._hash_['from'], (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) - p5num((v_m || (v_m = new p5HashRef({})))._hash_['from']))], 0)));
												var List_list = [];
												(List_list = p5list_to_a((function () {
var r = null;
p5pkg["main"]["v_@"] = "";
try {
r = eval(perl5_to_js(p5str(v_list_code), "Perlito5::Grammar::Use", (new p5ArrayRef(p5list_to_a((new p5HashRef(p5a_to_h(p5list_to_a('$list_code', (new p5HashRef({'decl' : 'my'})), '$m', (new p5HashRef({'decl' : 'my'})), '@list', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$list', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef({})), (new p5HashRef(p5a_to_h(p5list_to_a('$pos1', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef({})), (new p5HashRef(p5a_to_h(p5list_to_a('$pos1', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$MATCH', (new p5HashRef({'decl' : 'my'})), '$grammar', (new p5HashRef({'decl' : 'my'})), '$pos', (new p5HashRef({'decl' : 'my'})), '$str', (new p5HashRef({'decl' : 'my'})), '$tmp', (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'})), '%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'})))))))))))
}
catch(err) {
if ( err instanceof p5_error ) {
p5pkg["main"]["v_@"] = err;
}
else if ( err instanceof Error ) {
p5pkg["main"]["v_@"] = err;
}
else {
throw(err);
}
}
return r;
})()));
												(v_list = ((new p5ArrayRef(List_list))));
												})();
										};
										var v_ast = null;
										(v_ast = (p5call(p5pkg["Perlito5::AST::Use"], "new", p5list_to_a('code', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['use_decl']), 1), 'mod', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.full_ident']), 1), 'arguments', v_list), 0)));
										p5pkg["Perlito5::Grammar::Use"].parse_time_eval([v_ast], null);
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(['term', v_ast])));
										return (p5context([1], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Use", "parse_time_eval", function (List__, p5want) {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				var v_module_name = null;
				(v_module_name = (p5call(v_self, "mod", [], 0)));
				var v_use_or_not = null;
				(v_use_or_not = (p5call(v_self, "code", [], 0)));
				var v_arguments = null;
				(v_arguments = ((v_self || (v_self = new p5HashRef({})))._hash_['arguments']));
				var v_skip_import = null;
				(v_skip_import = (p5and((v_arguments != null), function () { return (p5num((v_arguments || (v_arguments = new p5ArrayRef([])))._array_) == 0) })));
				if ( (v_arguments != null) ) {
					null;
				}
				else {
					(v_arguments = ((new p5ArrayRef([]))));
				};
				if ( (p5str(v_module_name) == 'feature') ) {
					null;
				}
				
				else {
					if ( p5bool(p5pkg["Perlito5"]["v_EXPAND_USE"]) ) {
						if ( (Hash_Perlito_internal_module).hasOwnProperty(v_module_name) ) {
							(v_module_name = (Hash_Perlito_internal_module[v_module_name]));
						};
						var v_filename = null;
						(v_filename = (p5pkg["Perlito5::Grammar::Use"].modulename_to_filename([v_module_name], 0)));
						p5pkg["Perlito5::Grammar::Use"]["require"]([p5str(v_filename), 0]);
						if ( !( p5bool(v_skip_import)) ) {
							if ( (p5str(v_use_or_not) == 'use') ) {
								if ( p5bool((p5num((p5pkg["Perlito5::Grammar::Use"]["v__"] != null)) & p5num(p5for_lex(function () {
		(p5str(v_module_name) + '::import');
	}, [0], false, "")))) ) {
									return (p5call(v_module_name, "import", p5list_to_a((v_arguments || (v_arguments = new p5ArrayRef([])))._array_), p5want));
								}
								
								else {
									null;
								}
							}
							
							else {
								if ( (p5str(v_use_or_not) == 'no') ) {
									if ( p5bool((p5num((p5pkg["Perlito5::Grammar::Use"]["v__"] != null)) & p5num(p5for_lex(function () {
		(p5str(v_module_name) + '::unimport');
	}, [0], false, "")))) ) {
										return (p5call(v_module_name, "unimport", p5list_to_a((v_arguments || (v_arguments = new p5ArrayRef([])))._array_), p5want));
									}
									
									else {
										null;
									}
								}
								
								else {
									null;
								}
							}
						}
						
						else {
							null;
						}
					}
					
					else {
						null;
					}
				}
		});
		p5make_sub("Perlito5::Grammar::Use", "emit_time_eval", function (List__, p5want) {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				if ( (p5str(p5call(v_self, "mod", [], 0)) == 'strict') ) {
					if ( (p5str(p5call(v_self, "code", [], 0)) == 'use') ) {
						return (p5call(p5pkg["Perlito5::strict"], "import", [], p5want));
					}
					
					else {
						if ( (p5str(p5call(v_self, "code", [], 0)) == 'no') ) {
							return (p5call(p5pkg["Perlito5::strict"], "unimport", [], p5want));
						}
						
						else {
							null;
						}
					}
				}
				
				else {
					null;
				}
		});
		p5make_sub("Perlito5::Grammar::Use", "modulename_to_filename", function (List__, p5want) {
				var v_s = null;
				(v_s = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				v_s = p5str(v_s).replace(/::/g, '/');
				return (p5context([(p5str(v_s) + '.pm')], p5want));
		});
		p5make_sub("Perlito5::Grammar::Use", "filename_lookup", function (List__, p5want) {
			try {
				var v_filename = null;
				(v_filename = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				if ( (p5pkg["main"]["Hash_INC"]).hasOwnProperty(v_filename) ) {
					if ( p5bool(p5pkg["main"]["Hash_INC"][v_filename]) ) {
						throw(p5context(['done'], p5want));
					};
					p5pkg["Perlito5::Grammar::Use"].die([['Compilation failed in require']], null);
				};
				p5for_lex(function (v_prefix) {
						var v_realfilename = null;
						(v_realfilename = ((p5str(v_prefix) + '/' + p5str(v_filename))));
						if ( p5bool(p5is_file(p5str(v_realfilename))) ) {
							(p5pkg["main"]["Hash_INC"][v_filename] = v_realfilename);
							throw(p5context(['todo'], p5want));
						};
					}, p5list_to_a(p5pkg["main"]["List_INC"], '.'), false, "");
				return (p5pkg["Perlito5::Grammar::Use"].die([[('Can' + String.fromCharCode(39) + 't locate ' + p5str(v_filename) + ' in @INC ' + '(@INC contains ' + p5pkg["Perlito5::Grammar::Use"].join([' ', p5list_to_a(p5pkg["main"]["List_INC"])], 0) + ').')]], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Use", "expand_use", function (List__, p5want) {
			try {
				var v_comp_units = null;
				(v_comp_units = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				var v_stmt = null;
				(v_stmt = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				var v_module_name = null;
				(v_module_name = (p5call(v_stmt, "mod", [], 0)));
				if ( (((p5str(v_module_name) == 'strict') || (p5str(v_module_name) == 'warnings')) || (p5str(v_module_name) == 'feature')) ) {
					throw(p5context([], p5want));
				};
				var v_filename = null;
				(v_filename = (p5pkg["Perlito5::Grammar::Use"].modulename_to_filename([v_module_name], 0)));
				if ( (p5str(p5pkg["Perlito5::Grammar::Use"].filename_lookup([v_filename], 0)) == 'done') ) {
					throw(p5context([], p5want));
				};
				var v_realfilename = null;
				(v_realfilename = (p5pkg["main"]["Hash_INC"][v_filename]));
				var v_source = null;
				(v_source = (p5pkg["Perlito5::IO"].slurp([v_realfilename], 0)));
				var v_m = null;
				(v_m = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", [v_source, 0], 0)));
				if ( (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) != p5pkg["Perlito5::Grammar::Use"].length([v_source], 0)) ) {
					p5pkg["Perlito5::Grammar::Use"].die([p5list_to_a('Syntax Error near ', (v_m || (v_m = new p5HashRef({})))._hash_['to'])], null);
				};
				return (p5pkg["Perlito5::Grammar::Use"].push([(v_comp_units || (v_comp_units = new p5ArrayRef([])))._array_, p5list_to_a((p5pkg["Perlito5::Grammar::Use"].add_comp_unit(p5list_to_a((new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::CompUnit"], "new", p5list_to_a('name', 'main', 'body', p5pkg["Perlito5::Match"].flat([v_m], 1)), 1))))), p5want) || (p5pkg["Perlito5::Grammar::Use"].add_comp_unit(p5list_to_a((new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::CompUnit"], "new", p5list_to_a('name', 'main', 'body', p5pkg["Perlito5::Match"].flat([v_m], 1)), 1))))), p5want) = new p5ArrayRef([])))._array_)], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Use", "add_comp_unit", function (List__, p5want) {
				var v_parse = null;
				(v_parse = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				var v_comp_units = null;
				(v_comp_units = ((new p5ArrayRef([]))));
				p5for_lex(function (v_comp_unit) {
						if ( (v_comp_unit != null) ) {
							if ( p5bool(p5call(v_comp_unit, "isa", ['Perlito5::AST::Use'], 0)) ) {
								p5pkg["Perlito5::Grammar::Use"].expand_use([v_comp_units, v_comp_unit], null);
							}
							else {
								if ( p5bool(p5call(v_comp_unit, "isa", ['Perlito5::AST::CompUnit'], 0)) ) {
									p5for_lex(function (v_stmt) {
											if ( p5bool(p5call(v_stmt, "isa", ['Perlito5::AST::Use'], 0)) ) {
												p5pkg["Perlito5::Grammar::Use"].expand_use([v_comp_units, v_stmt], null);
											};
										}, p5list_to_a((p5call(v_comp_unit, "body", [], p5want) || (p5call(v_comp_unit, "body", [], p5want) = new p5ArrayRef([])))._array_), false, "");
								};
							};
							p5pkg["Perlito5::Grammar::Use"].push([(v_comp_units || (v_comp_units = new p5ArrayRef([])))._array_, [v_comp_unit]], null);
						};
					}, p5list_to_a((v_parse || (v_parse = new p5ArrayRef([])))._array_), false, "");
				return (p5context([v_comp_units], p5want));
		});
		p5make_sub("Perlito5::Grammar::Use", "require", function (List__, p5want) {
			try {
				var v_filename = null;
				(v_filename = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				var v_is_bareword = null;
				(v_is_bareword = (p5pkg["Perlito5::Grammar::Use"].shift([List__])));
				if ( p5bool(v_is_bareword) ) {
					(v_filename = (p5pkg["Perlito5::Grammar::Use"].modulename_to_filename([v_filename], 0)));
				};
				if ( (p5str(p5pkg["Perlito5::Grammar::Use"].filename_lookup([v_filename], 0)) == 'done') ) {
					throw(p5context([], p5want));
				};
				(p5pkg["Perlito5::Grammar::Use"]["v_result"] = ((function () {
var r = null;
p5pkg["main"]["v_@"] = "";
try {
r = eval(perl5_to_js(p5str(p5pkg["Perlito5::IO"].slurp(p5list_to_a(p5pkg["main"]["Hash_INC"][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'})), '%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'})))))))))))
}
catch(err) {
if ( err instanceof p5_error ) {
p5pkg["main"]["v_@"] = err;
}
else if ( err instanceof Error ) {
p5pkg["main"]["v_@"] = err;
}
else {
throw(err);
}
}
return r;
})()));
				if ( p5bool(p5pkg["main"]["v_@"]) ) {
					(p5pkg["main"]["Hash_INC"][v_filename] = null);
					return (p5pkg["Perlito5::Grammar::Use"].die([[p5pkg["main"]["v_@"]]], p5want));
				}
				
				else {
					if ( !( p5bool(p5pkg["Perlito5::Grammar::Use"]["v_result"])) ) {
						(delete p5pkg["main"]["Hash_INC"][v_filename]);
						if ( p5bool(p5pkg["main"]["v_@"]) ) {
							p5pkg["Perlito5::Grammar::Use"].warn([[p5pkg["main"]["v_@"]]], null);
						};
						return (p5pkg["Perlito5::Grammar::Use"].die([[(p5str(v_filename) + ' did not return true value')]], p5want));
					}
					
					else {
						throw(p5context([p5pkg["Perlito5::Grammar::Use"]["v_result"]], p5want))
					}
				}
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5154 = p5make_package("Perlito5::Grammar::Block");
		// use Perlito5::Expression
;
		// our p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"]
		(p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"] = {'BEGIN' : 1, 'UNITCHECK' : 1, 'CHECK' : 1, 'INIT' : 1, 'END' : 1});
		p5pkg["Perlito5::Expression"].add_statement(['{', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Block"], "term_block", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5pkg["Perlito5::Expression"].add_statement(['sub', function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Block"], "named_sub", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
		p5for(p5pkg["Perlito5::Grammar::Block"], function () {
				p5pkg["Perlito5::Expression"].add_statement([p5pkg["Perlito5::Grammar::Block"]["v__"], function (List__, p5want) {
		return (p5call(p5pkg["Perlito5::Grammar::Block"], "term_block", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), p5want));
}], null);
			}, p5list_to_a(p5pkg["Perlito5::Grammar::Block"].keys([p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"]], 1)), false, "");
		p5make_sub("Perlito5::Grammar::Block", "term_block", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_p = null;
				(v_p = (v_pos));
				var v_block_name = null;
				var v_m_name = null;
				(v_m_name = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, v_p], 0)));
				if ( p5bool(v_m_name) ) {
					(v_p = ((v_m_name || (v_m_name = new p5HashRef({})))._hash_['to']));
					(v_block_name = (p5pkg["Perlito5::Match"].flat([v_m_name], 0)));
				};
				var v_ws = null;
				(v_ws = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, v_p], 0)));
				if ( p5bool(v_ws) ) {
					(v_p = ((v_ws || (v_ws = new p5HashRef({})))._hash_['to']));
				};
				if ( (p5pkg["Perlito5::Grammar::Block"].substr([v_str, v_p, 1], 0) == '{') ) {
					(function () {
						var v_m = null;
						(v_m = (p5call(p5pkg["Perlito5::Expression"], "term_curly", [v_str, v_p], 0)));
						if ( p5bool(v_m) ) {
							(function () {
								var v_block_start = null;
								(v_block_start = (v_p));
								(v_p = ((v_m || (v_m = new p5HashRef({})))._hash_['to']));
								(v_ws = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, v_p], 0)));
								if ( p5bool(v_ws) ) {
									(v_p = ((v_ws || (v_ws = new p5HashRef({})))._hash_['to']));
								};
								var v_continue = null;
								(v_continue = (p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (new p5ArrayRef([]))), 0)));
								var v_has_continue = null;
								(v_has_continue = (0));
								if ( (!( p5bool(v_block_name)) && (p5pkg["Perlito5::Grammar::Block"].substr([v_str, v_p, 8], 0) == 'continue')) ) {
									(function () {
										(v_p = ((p5num(v_p) + 8)));
										(v_ws = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, v_p], 0)));
										if ( p5bool(v_ws) ) {
											(v_p = ((v_ws || (v_ws = new p5HashRef({})))._hash_['to']));
										};
										var v_cont = null;
										(v_cont = (p5call(p5pkg["Perlito5::Expression"], "term_curly", [v_str, v_p], 0)));
										if ( p5bool(v_cont) ) {
											null;
										}
										else {
											p5pkg["Perlito5::Grammar::Block"].die([['syntax error']], null);
										};
										p5pkg["Perlito5::Grammar::Block"].warn([['continue!']], null);
										((v_continue || (v_continue = new p5HashRef({})))._hash_['stmts'] = ((v_cont || (v_cont = new p5HashRef({})))._hash_['capture'] || ((v_cont || (v_cont = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_[p5idx(((v_cont || (v_cont = new p5HashRef({})))._hash_['capture'] || ((v_cont || (v_cont = new p5HashRef({})))._hash_['capture'] = new p5ArrayRef([])))._array_,2)]);
										(v_has_continue = (1));
										((v_m || (v_m = new p5HashRef({})))._hash_['to'] = (v_cont || (v_cont = new p5HashRef({})))._hash_['to']);
										})();
								};
								var v_v = null;
								(v_v = (p5pkg["Perlito5::Match"].flat([v_m], 0)));
								(v_v = (p5call(p5pkg["Perlito5::AST::Lit::Block"], "new", p5list_to_a('stmts', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,2)], 'sig', (v_v || (v_v = new p5ArrayRef([])))._array_[p5idx((v_v || (v_v = new p5ArrayRef([])))._array_,3)]), 0)));
								if ( (p5bool(v_has_continue) || p5bool(v_block_name)) ) {
									null;
								}
								else {
									(v_v = (p5pkg["Perlito5::Expression"].block_or_hash([v_v], 0)));
								};
								if ( (p5str(p5pkg["Perlito5::Grammar::Block"].ref([v_v], 0)) == 'Perlito5::AST::Lit::Block') ) {
									if ( (p5str(v_block_name) == 'BEGIN') ) {
										(function () {
var r = null;
p5pkg["main"]["v_@"] = "";
try {
r = eval(perl5_to_js(p5pkg["Perlito5::Grammar::Block"].substr([v_str, v_block_start, (p5num((v_m || (v_m = new p5HashRef({})))._hash_['to']) - p5num(v_block_start))], 0), "Perlito5::Grammar::Block", (new p5ArrayRef(p5list_to_a((new p5HashRef({})), (new p5HashRef({})), (new p5HashRef(p5a_to_h(p5list_to_a('$block_start', (new p5HashRef({'decl' : 'my'})), '$continue', (new p5HashRef({'decl' : 'my'})), '$has_continue', (new p5HashRef({'decl' : 'my'})), '$v', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$m', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$block_name', (new p5HashRef({'decl' : 'my'})), '$m_name', (new p5HashRef({'decl' : 'my'})), '$p', (new p5HashRef({'decl' : 'my'})), '$pos', (new p5HashRef({'decl' : 'my'})), '$self', (new p5HashRef({'decl' : 'my'})), '$str', (new p5HashRef({'decl' : 'my'})), '$ws', (new p5HashRef({'decl' : 'my'})))))), (new p5HashRef(p5a_to_h(p5list_to_a('$AUTOLOAD', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Block'})), '$_', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Block'})), '$a', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Block'})), '$b', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Block'})), '%Named_block', (new p5HashRef({'decl' : 'our', 'namespace' : 'Perlito5::Grammar::Block'})))))), (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'})), '%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'})))))))))))
}
catch(err) {
if ( err instanceof p5_error ) {
p5pkg["main"]["v_@"] = err;
}
else if ( err instanceof Error ) {
p5pkg["main"]["v_@"] = err;
}
else {
throw(err);
}
}
return r;
})();
										((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'undef', 'namespace', '', 'arguments', (new p5ArrayRef([]))), p5want));
									}
									else {
										((v_v || (v_v = new p5HashRef({})))._hash_['name'] = v_block_name);
										((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = v_v);
										(((v_m || (v_m = new p5HashRef({})))._hash_['capture'] || ((v_m || (v_m = new p5HashRef({})))._hash_['capture'] = new p5HashRef({})))._hash_['continue'] = v_continue);
									};
									throw(p5context([v_m], p5want));
								};
								})();
						};
						})();
				};
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Block", "named_sub_def", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "optional_namespace_before_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.optional_namespace_before_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "prototype", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.prototype'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar::Block"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('}' == p5pkg["Perlito5::Grammar::Block"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([(function () {
										p5pkg["Perlito5::Grammar::Block"].die([p5list_to_a('Syntax Error in sub ' + String.fromCharCode(39), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident']), 1), String.fromCharCode(39))], null);
										return (p5context([1], p5want));
									})()], p5want)], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_name = null;
								(v_name = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.ident']), 0)));
								var v_sig = null;
								(v_sig = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.prototype']), 0)));
								if ( (p5str(v_sig) == '*undef*') ) {
									(v_sig = (null));
								};
								var v_namespace = null;
								(v_namespace = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.optional_namespace_before_ident']), 0)));
								if ( p5bool(v_name) ) {
									(function () {
										if ( p5bool(v_namespace) ) {
											null;
										}
										else {
											(v_namespace = (p5pkg["Perlito5"]["v_PKG_NAME"]));
										};
										var v_full_name = null;
										(v_full_name = ((p5str(v_namespace) + '::' + p5str(v_name))));
										if ( (p5pkg["Perlito5"]["v_PROTO"])._hash_.hasOwnProperty(v_full_name) ) {
											p5pkg["Perlito5::Grammar::Block"].warn([[('Subroutine ' + p5str(v_full_name) + ' redefined')]], null);
										};
										((p5pkg["Perlito5"]["v_PROTO"] || (p5pkg["Perlito5"]["v_PROTO"] = new p5HashRef({})))._hash_[v_full_name] = v_sig);
										})();
								};
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Sub"], "new", p5list_to_a('name', v_name, 'namespace', v_namespace, 'sig', v_sig, 'block', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Grammar.exp_stmts']), 1)), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Block", "named_sub", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				if ( (p5pkg["Perlito5::Grammar::Block"].substr([v_str, v_pos, 3], 0) == 'sub') ) {
					null;
				}
				else {
					throw(p5context([], p5want));
				};
				var v_ws = null;
				(v_ws = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", [v_str, (p5num(v_pos) + 3)], 0)));
				if ( p5bool(v_ws) ) {
					null;
				}
				else {
					throw(p5context([], p5want));
				};
				(p5pkg["Perlito5::Grammar::Block"]["v_p"] = ((v_ws || (v_ws = new p5HashRef({})))._hash_['to']));
				var v_m_name = null;
				(v_m_name = (p5call(p5pkg["Perlito5::Grammar"], "ident", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], 0)));
				if ( p5bool(v_m_name) ) {
					null;
				}
				else {
					throw(p5context([], p5want));
				};
				var v_block_name = null;
				(v_block_name = (p5pkg["Perlito5::Match"].flat([v_m_name], 0)));
				if ( (p5pkg["Perlito5::Grammar::Block"]["Hash_Named_block"]).hasOwnProperty(v_block_name) ) {
					throw(p5call(p5pkg["Perlito5::Grammar::Block"], "term_block", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], p5want));
				};
				return (p5call(p5pkg["Perlito5::Grammar::Block"], "named_sub_def", [v_str, p5pkg["Perlito5::Grammar::Block"]["v_p"]], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5155 = p5make_package("Perlito5::Grammar::Space");
		// use Perlito5::Precedence
;
		var Hash_space = {};
		(Hash_space = p5a_to_h(['#', function (List__, p5want) {
					var v_m = null;
					(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "to_eol", p5list_to_a(List__[p5idx(List__,0)], List__[p5idx(List__,1)]), 0)));
					return ((v_m || (v_m = new p5HashRef({})))._hash_['to']);
			}, p5pkg["Perlito5::Grammar::Space"].chr([9], 1), function (List__, p5want) {
					return (List__[p5idx(List__,1)]);
			}, p5pkg["Perlito5::Grammar::Space"].chr([10], 1), function (List__, p5want) {
					var v_str = null;
					(v_str = (List__[p5idx(List__,0)]));
					var v_pos = null;
					(v_pos = (List__[p5idx(List__,1)]));
					if ( (p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_pos, 1], 0) == p5pkg["Perlito5::Grammar::Space"].chr([13], 0)) ) {
						(v_pos)++;
					};
					var v_m = null;
					(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "start_of_line", p5list_to_a(List__[p5idx(List__,0)], v_pos), 0)));
					return ((v_m || (v_m = new p5HashRef({})))._hash_['to']);
			}, p5pkg["Perlito5::Grammar::Space"].chr([12], 1), function (List__, p5want) {
					return (List__[p5idx(List__,1)]);
			}, p5pkg["Perlito5::Grammar::Space"].chr([13], 1), function (List__, p5want) {
					var v_str = null;
					(v_str = (List__[p5idx(List__,0)]));
					var v_pos = null;
					(v_pos = (List__[p5idx(List__,1)]));
					if ( (p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_pos, 1], 0) == p5pkg["Perlito5::Grammar::Space"].chr([10], 0)) ) {
						(v_pos)++;
					};
					var v_m = null;
					(v_m = (p5call(p5pkg["Perlito5::Grammar::Space"], "start_of_line", p5list_to_a(List__[p5idx(List__,0)], v_pos), 0)));
					return ((v_m || (v_m = new p5HashRef({})))._hash_['to']);
			}, p5pkg["Perlito5::Grammar::Space"].chr([32], 1), function (List__, p5want) {
					return (List__[p5idx(List__,1)]);
			}]));
		p5make_sub("Perlito5::Grammar::Space", "term_space", function (List__, p5want) {
			try {
				var v_str = null;
				(v_str = (List__[p5idx(List__,0)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,1)]));
				var v_p = null;
				(v_p = (v_pos));
				p5while(function () {
						(v_p = ((Hash_space[p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)])([v_str, (p5num(v_p) + 1)])));
					}, function () { return (Hash_space).hasOwnProperty(p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)) }, false, "");
				if ( ((p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 7], 0) == '__END__') || (p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 8], 0) == '__DATA__')) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : p5pkg["Perlito5::Grammar::Space"].length([v_str], p5want)})));
				};
				return ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', v_pos, 'to', v_p, 'capture', (new p5ArrayRef(['space', ' '])))))));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Space", "term_end", function (List__, p5want) {
				return ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__[p5idx(List__,0)], 'from', List__[p5idx(List__,1)], 'to', p5pkg["Perlito5::Grammar::Space"].length([List__[p5idx(List__,0)]], 1), 'capture', (new p5ArrayRef(['space', ' '])))))));
		});
		p5pkg["Perlito5::Precedence"].add_term(['#', p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term([p5pkg["Perlito5::Grammar::Space"].chr([9], 1), p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term([p5pkg["Perlito5::Grammar::Space"].chr([10], 1), p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term([p5pkg["Perlito5::Grammar::Space"].chr([12], 1), p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term([p5pkg["Perlito5::Grammar::Space"].chr([13], 1), p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term([p5pkg["Perlito5::Grammar::Space"].chr([32], 1), p5pkg["Perlito5::Grammar::Space"].term_space], null);
		p5pkg["Perlito5::Precedence"].add_term(['__END__', p5pkg["Perlito5::Grammar::Space"].term_end], null);
		p5pkg["Perlito5::Precedence"].add_term(['__DATA__', p5pkg["Perlito5::Grammar::Space"].term_end], null);
		p5make_sub("Perlito5::Grammar::Space", "to_eol", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							var v_last_match_null = null;
							(v_last_match_null = (0));
							var v_m = null;
							(v_m = (v_MATCH));
							var v_to = null;
							(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
							p5while(function () {
									if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
										(v_last_match_null = ((p5num(v_last_match_null) + 1)));
									}
									else {
										(v_last_match_null = (0));
									};
									(v_m = (v_MATCH));
									(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								}, function () { return p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5context([(function () {
									return (p5and(p5context([(function () {
										var v_tmp = null;
										(v_tmp = (v_MATCH));
										(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
										var v_res = null;
										(v_res = (p5context([(function () {
												var v_pos1 = null;
												(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												return (p5context([(function () {
													var v_pos1 = null;
													(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
													return (p5or(p5context([(function () {
														return (p5and((String.fromCharCode(10) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
													})()], p5want), function () { return p5context([(function () {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
														return (p5context([p5context([p5and((String.fromCharCode(13) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
													})()], p5want) }));
												})()], p5want));
											})()], 0)));
										return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
									})()], p5want), function () { return p5context([p5and(('' != p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }));
								})()], p5want));
							})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
							(v_MATCH = (v_m));
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
							return (p5context([1], p5want));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Space", "pod_pod_begin", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and((String.fromCharCode(10) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and((String.fromCharCode(13) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([p5and(('=cut' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "to_eol", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5and(p5context([p5and(('' != p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "to_eol", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "pod_pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Space", "pod_begin", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and((String.fromCharCode(10) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and((String.fromCharCode(13) == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([p5and(('=end' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 4], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "to_eol", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5and(p5context([p5and(('' != p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "to_eol", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Space", "start_of_line", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Grammar::String"], "here_doc", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5context([p5and(('=' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5or(p5or(p5context([(function () {
											return (p5and(p5context([p5and(('pod' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "pod_pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5context([p5and(('head1' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 5], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (5 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "pod_pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) })], p5want));
										})()], p5want) }), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5context([p5and(('begin' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 5], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (5 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) })], p5want));
										})()], p5want) }), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5context([p5and(('for' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 3], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (3 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "pod_begin", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([1], p5want));
								})()], p5want) }));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar::Space", "ws", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_str = null;
				(v_str = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_pos = null;
				(v_pos = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_p = null;
				(v_p = (v_pos));
				p5while(function () {
						(v_p = ((Hash_space[p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)])([v_str, (p5num(v_p) + 1)])));
					}, function () { return (Hash_space).hasOwnProperty(p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)) }, false, "");
				if ( ((p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 7], 0) == '__END__') || (p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 8], 0) == '__DATA__')) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : p5pkg["Perlito5::Grammar::Space"].length([v_str], p5want)})));
				};
				if ( (p5num(v_p) == p5num(v_pos)) ) {
					throw(p5context([0], p5want));
				};
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_p})));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar::Space", "opt_ws", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_str = null;
				(v_str = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_pos = null;
				(v_pos = (p5pkg["Perlito5::Grammar::Space"].shift([List__])));
				var v_p = null;
				(v_p = (v_pos));
				p5while(function () {
						(v_p = ((Hash_space[p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)])([v_str, (p5num(v_p) + 1)])));
					}, function () { return (Hash_space).hasOwnProperty(p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 1], p5want)) }, false, "");
				if ( ((p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 7], 0) == '__END__') || (p5pkg["Perlito5::Grammar::Space"].substr([v_str, v_p, 8], 0) == '__DATA__')) ) {
					throw((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : p5pkg["Perlito5::Grammar::Space"].length([v_str], p5want)})));
				};
				return ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_p})));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		1;
	})()
;
	(function () {
		var p5156 = p5make_package("Perlito5::Grammar");
		// use Perlito5::Expression
;
		// use Perlito5::Grammar::Control
;
		// use Perlito5::Grammar::String
;
		// use Perlito5::Grammar::Sigil
;
		// use Perlito5::Grammar::Use
;
		// use Perlito5::Grammar::Block
;
		// use Perlito5::Grammar::Space
;
		p5make_sub("Perlito5::Grammar", "word", function (List__, p5want) {
				return (( p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__[p5idx(List__,1)], List__[p5idx(List__,2)], 1], p5want)).match(/\w/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__[p5idx(List__,1)], 'from', List__[p5idx(List__,2)], 'to', (p5num(List__[p5idx(List__,2)]) + 1))))) : 0));
		});
		p5make_sub("Perlito5::Grammar", "digit", function (List__, p5want) {
				return (( p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__[p5idx(List__,1)], List__[p5idx(List__,2)], 1], p5want)).match(/\d/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__[p5idx(List__,1)], 'from', List__[p5idx(List__,2)], 'to', (p5num(List__[p5idx(List__,2)]) + 1))))) : 0));
		});
		p5make_sub("Perlito5::Grammar", "ident", function (List__, p5want) {
			try {
				if ( (p5bool(!((p5str(p5pkg["Perlito5::Grammar"].substr([List__[p5idx(List__,1)], List__[p5idx(List__,2)], 1], p5want)).match(/\w/) ? 1 : 0))) || p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__[p5idx(List__,1)], List__[p5idx(List__,2)], 1], p5want)).match(/\d/) ? 1 : 0))) ) {
					throw(p5context([], p5want));
				};
				var v_m = null;
				(v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__[p5idx(List__,1)], 'from', List__[p5idx(List__,2)], 'to', (p5num(List__[p5idx(List__,2)]) + 1)))))));
				p5while(function () {
						((v_m || (v_m = new p5HashRef({})))._hash_['to'])++;
					}, function () { return (p5str(p5pkg["Perlito5::Grammar"].substr([List__[p5idx(List__,1)], (v_m || (v_m = new p5HashRef({})))._hash_['to'], 1], p5want)).match(/\w/) ? 1 : 0) }, false, "");
				return (p5context([v_m], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		p5make_sub("Perlito5::Grammar", "full_ident", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									}, function () { return p5and(p5context([(function () {
									var v_pos1 = null;
									(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									return (p5context([(function () {
										return (p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], p5want) }));
									})()], p5want));
								})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "namespace_before_ident", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_tmp = null;
								(v_tmp = (v_MATCH));
								(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
								var v_res = null;
								(v_res = (p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want));
									})()], 0)));
								return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
							})()], p5want) }), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									}, function () { return p5and(p5context([(function () {
									var v_pos1 = null;
									(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									return (p5context([(function () {
										return (p5and(p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], p5want) }), function () { return p5context([(function () {
											var v_tmp = null;
											(v_tmp = (v_MATCH));
											(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
											var v_res = null;
											(v_res = (p5context([(function () {
													var v_pos1 = null;
													(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
													return (p5context([(function () {
														return (p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
													})()], p5want));
												})()], 0)));
											return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
										})()], p5want) }));
									})()], p5want));
								})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "optional_namespace_before_ident", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5or(p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "namespace_before_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['namespace_before_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									}, function () { return p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], 0) })], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['namespace_before_ident']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = 'main');
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(1, function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = '');
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "ws", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							var v_m2 = null;
							(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
							if ( p5bool(v_m2) ) {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
								return (p5context([1], p5want));
							}
							
							else {
								return (p5context([0], p5want));
							}
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "opt_ws", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							var v_m = null;
							(v_m = (v_MATCH));
							if ( !( p5bool((function () {
									var v_m2 = null;
									(v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
									if ( p5bool(v_m2) ) {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
										return (p5context([1], p5want));
									}
									
									else {
										return (p5context([0], p5want));
									}
								})())) ) {
								(v_MATCH = (v_m));
							};
							return (p5context([1], p5want));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "exp_stmts2", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['exp_stmts']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "exp", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "exp_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "exp2", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "exp_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.exp_parse']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "opt_type", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										return (p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['full_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['full_ident']), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(1, function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = '');
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "var_sigil", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5or(p5or(p5or(p5context([(function () {
							return (p5and(('$' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('%' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('@' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('&' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([p5and(('*' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "var_name", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							var v_m2 = null;
							(v_m2 = (p5call(v_grammar, "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
							if ( p5bool(v_m2) ) {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['full_ident'] = v_m2);
								return (p5context([1], p5want));
							}
							
							else {
								return (p5context([0], p5want));
							}
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['digit'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "var_ident", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "var_sigil", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['var_sigil'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "optional_namespace_before_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['optional_namespace_before_ident'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "var_name", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['var_name'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['var_sigil']), 1), 'namespace', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['optional_namespace_before_ident']), 1), 'name', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['var_name']), 1)), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "exponent", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('e' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('E' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5or(p5context([(function () {
									return (p5and(('+' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('-' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([1], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								var v_count = null;
								(v_count = (0));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										(v_count = ((p5num(v_count) + 1)));
									}, function () { return p5and(p5context([(function () {
									var v_pos1 = null;
									(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									return (p5or(p5context([(function () {
										return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})()], p5want), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
										return (p5context([p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], p5want)], p5want));
									})()], p5want) }));
								})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([(p5num(v_count) > 0)], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "val_num", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(p5and(p5and(p5context([p5and(('.' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want) }), function () { return p5context([(function () {
										var v_last_match_null = null;
										(v_last_match_null = (0));
										var v_m = null;
										(v_m = (v_MATCH));
										var v_to = null;
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										p5while(function () {
												if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
													(v_last_match_null = ((p5num(v_last_match_null) + 1)));
												}
												else {
													(v_last_match_null = (0));
												};
												(v_m = (v_MATCH));
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											}, function () { return p5and(p5context([(function () {
											var v_pos1 = null;
											(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											return (p5or(p5context([(function () {
												return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
											})()], p5want), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
												return (p5context([p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want)], p5want));
											})()], p5want) }));
										})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
										(v_MATCH = (v_m));
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
										return (p5context([1], p5want));
									})()], p5want) }), function () { return p5context([(function () {
										var v_m = null;
										(v_m = (v_MATCH));
										if ( !( p5bool((function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "exponent", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})())) ) {
											(v_MATCH = (v_m));
										};
										return (p5context([1], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([(function () {
										var v_m2 = null;
										(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
										if ( p5bool(v_m2) ) {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
											return (p5context([1], p5want));
										}
										
										else {
											return (p5context([0], p5want));
										}
									})()], p5want), function () { return p5context([(function () {
										var v_last_match_null = null;
										(v_last_match_null = (0));
										var v_m = null;
										(v_m = (v_MATCH));
										var v_to = null;
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										p5while(function () {
												if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
													(v_last_match_null = ((p5num(v_last_match_null) + 1)));
												}
												else {
													(v_last_match_null = (0));
												};
												(v_m = (v_MATCH));
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											}, function () { return p5and(p5context([(function () {
											var v_pos1 = null;
											(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											return (p5or(p5context([(function () {
												return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
											})()], p5want), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
												return (p5context([p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want)], p5want));
											})()], p5want) }));
										})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
										(v_MATCH = (v_m));
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
										return (p5context([1], p5want));
									})()], p5want) }), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "exponent", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5and(p5and(p5and(p5context([p5and(('.' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_tmp = null;
												(v_tmp = (v_MATCH));
												(v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to'], 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_['to']))))));
												var v_res = null;
												(v_res = (p5context([(function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															return (p5and(('.' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
														})()], p5want));
													})()], 0)));
												return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
											})()], p5want) }), function () { return p5context([(function () {
												var v_last_match_null = null;
												(v_last_match_null = (0));
												var v_m = null;
												(v_m = (v_MATCH));
												var v_to = null;
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												p5while(function () {
														if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
															(v_last_match_null = ((p5num(v_last_match_null) + 1)));
														}
														else {
															(v_last_match_null = (0));
														};
														(v_m = (v_MATCH));
														(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
													}, function () { return p5and(p5context([(function () {
													var v_pos1 = null;
													(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
													return (p5or(p5context([(function () {
														return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
													})()], p5want), function () { return p5context([(function () {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
														return (p5context([p5context([(function () {
															var v_m2 = null;
															(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
															if ( p5bool(v_m2) ) {
																((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																return (p5context([1], p5want));
															}
															
															else {
																return (p5context([0], p5want));
															}
														})()], p5want)], p5want));
													})()], p5want) }));
												})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
												(v_MATCH = (v_m));
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
												return (p5context([1], p5want));
											})()], p5want) }), function () { return p5context([(function () {
												var v_m = null;
												(v_m = (v_MATCH));
												if ( !( p5bool((function () {
														var v_m2 = null;
														(v_m2 = (p5call(v_grammar, "exponent", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
														if ( p5bool(v_m2) ) {
															((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
															return (p5context([1], p5want));
														}
														
														else {
															return (p5context([0], p5want));
														}
													})())) ) {
													(v_MATCH = (v_m));
												};
												return (p5context([1], p5want));
											})()], p5want) })], p5want));
										})()], p5want) }));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								var v_s = null;
								(v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0)));
								v_s = p5str(v_s).replace(/_/g, '');
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Val::Num"], "new", ['num', v_s], p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "digits", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							var v_last_match_null = null;
							(v_last_match_null = (0));
							var v_m = null;
							(v_m = (v_MATCH));
							var v_to = null;
							(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
							var v_count = null;
							(v_count = (0));
							p5while(function () {
									if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
										(v_last_match_null = ((p5num(v_last_match_null) + 1)));
									}
									else {
										(v_last_match_null = (0));
									};
									(v_m = (v_MATCH));
									(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									(v_count = ((p5num(v_count) + 1)));
								}, function () { return p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
							(v_MATCH = (v_m));
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
							return (p5context([(p5num(v_count) > 0)], p5want));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "val_int", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5or(p5context([(function () {
									return (p5and(p5and(p5context([p5and(('0' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('x' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5context([p5and(('X' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
										})()], p5want) }));
									})()], p5want) }), function () { return p5context([(function () {
										var v_last_match_null = null;
										(v_last_match_null = (0));
										var v_m = null;
										(v_m = (v_MATCH));
										var v_to = null;
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										var v_count = null;
										(v_count = (0));
										p5while(function () {
												if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
													(v_last_match_null = ((p5num(v_last_match_null) + 1)));
												}
												else {
													(v_last_match_null = (0));
												};
												(v_m = (v_MATCH));
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												(v_count = ((p5num(v_count) + 1)));
											}, function () { return p5and(p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "word", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
										(v_MATCH = (v_m));
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
										return (p5context([(p5num(v_count) > 0)], p5want));
									})()], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5and(p5context([p5and(('0' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5or(p5context([(function () {
											return (p5and(('b' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want), function () { return p5context([(function () {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
											return (p5context([p5context([p5and(('B' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
										})()], p5want) }));
									})()], p5want) }), function () { return p5context([(function () {
										var v_last_match_null = null;
										(v_last_match_null = (0));
										var v_m = null;
										(v_m = (v_MATCH));
										var v_to = null;
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										var v_count = null;
										(v_count = (0));
										p5while(function () {
												if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
													(v_last_match_null = ((p5num(v_last_match_null) + 1)));
												}
												else {
													(v_last_match_null = (0));
												};
												(v_m = (v_MATCH));
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												(v_count = ((p5num(v_count) + 1)));
											}, function () { return p5and(p5context([(function () {
											var v_pos1 = null;
											(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											return (p5or(p5or(p5context([(function () {
												return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
											})()], p5want), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
												return (p5context([p5context([p5and(('0' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
											})()], p5want) }), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
												return (p5context([p5context([p5and(('1' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
											})()], p5want) }));
										})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
										(v_MATCH = (v_m));
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
										return (p5context([(p5num(v_count) > 0)], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5and(p5context([p5and(('0' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
										var v_last_match_null = null;
										(v_last_match_null = (0));
										var v_m = null;
										(v_m = (v_MATCH));
										var v_to = null;
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										var v_count = null;
										(v_count = (0));
										p5while(function () {
												if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
													(v_last_match_null = ((p5num(v_last_match_null) + 1)));
												}
												else {
													(v_last_match_null = (0));
												};
												(v_m = (v_MATCH));
												(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
												(v_count = ((p5num(v_count) + 1)));
											}, function () { return p5and(p5context([(function () {
											var v_pos1 = null;
											(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
											return (p5or(p5context([(function () {
												return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
											})()], p5want), function () { return p5context([(function () {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
												return (p5context([p5context([(function () {
													var v_m2 = null;
													(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
													if ( p5bool(v_m2) ) {
														((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
														return (p5context([1], p5want));
													}
													
													else {
														return (p5context([0], p5want));
													}
												})()], p5want)], p5want));
											})()], p5want) }));
										})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
										(v_MATCH = (v_m));
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
										return (p5context([(p5num(v_count) > 0)], p5want));
									})()], p5want) })], p5want));
								})()], p5want) }));
							})()], p5want), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', p5pkg["Perlito5::Grammar"].oct([p5pkg["Perlito5::Grammar"].lc([p5pkg["Perlito5::Match"].flat([v_MATCH], 0)], 0)], 1)], p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									}, function () { return p5and(p5context([(function () {
									var v_pos1 = null;
									(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									return (p5or(p5context([(function () {
										return (p5and(('_' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
									})()], p5want), function () { return p5context([(function () {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
										return (p5context([p5context([(function () {
											var v_m2 = null;
											(v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
											if ( p5bool(v_m2) ) {
												((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
												return (p5context([1], p5want));
											}
											
											else {
												return (p5context([0], p5want));
											}
										})()], p5want)], p5want));
									})()], p5want) }));
								})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([(function () {
								var v_s = null;
								(v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0)));
								v_s = p5str(v_s).replace(/_/g, '');
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_s], p5want));
								return (p5context([1], p5want));
							})()], p5want) })], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "val_version", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(('v' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
										})()], p5want));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "digits", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m = null;
								(v_m = (v_MATCH));
								if ( !( p5bool((function () {
										var v_pos1 = null;
										(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
										return (p5context([(function () {
											return (p5and(p5and(p5context([p5and(('.' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
												var v_m2 = null;
												(v_m2 = (p5call(v_grammar, "digits", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
												if ( p5bool(v_m2) ) {
													((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
													return (p5context([1], p5want));
												}
												
												else {
													return (p5context([0], p5want));
												}
											})()], p5want) }), function () { return p5context([(function () {
												var v_m = null;
												(v_m = (v_MATCH));
												if ( !( p5bool((function () {
														var v_pos1 = null;
														(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
														return (p5context([(function () {
															return (p5and(p5context([p5and(('.' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want), function () { return p5context([(function () {
																var v_m2 = null;
																(v_m2 = (p5call(v_grammar, "digits", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
																if ( p5bool(v_m2) ) {
																	((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
																	return (p5context([1], p5want));
																}
																
																else {
																	return (p5context([0], p5want));
																}
															})()], p5want) }));
														})()], p5want));
													})())) ) {
													(v_MATCH = (v_m));
												};
												return (p5context([1], p5want));
											})()], p5want) }));
										})()], p5want));
									})())) ) {
									(v_MATCH = (v_m));
								};
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		var List_PKG = [];
		p5make_sub("Perlito5::Grammar", "exp_stmts", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5context([(function () {
								p5pkg["Perlito5::Grammar"].push([List_PKG, [p5pkg["Perlito5"]["v_PKG_NAME"]]], null);
								return (p5context([1], p5want));
							})()], p5want), function () { return p5context([(function () {
								var v_last_match_null = null;
								(v_last_match_null = (0));
								var v_m = null;
								(v_m = (v_MATCH));
								var v_to = null;
								(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								p5while(function () {
										if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
											(v_last_match_null = ((p5num(v_last_match_null) + 1)));
										}
										else {
											(v_last_match_null = (0));
										};
										(v_m = (v_MATCH));
										(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
									}, function () { return p5and(p5context([(function () {
									var v_m2 = null;
									(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "delimited_statement", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
									if ( p5bool(v_m2) ) {
										((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
										if ( (v_MATCH)._hash_.hasOwnProperty('Perlito5::Expression.delimited_statement') ) {
											p5pkg["Perlito5::Grammar"].push([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.delimited_statement'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.delimited_statement'] = new p5ArrayRef([])))._array_, [v_m2]], null);
										}
										else {
											((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.delimited_statement'] = (new p5ArrayRef([v_m2])));
										};
										return (p5context([1], p5want));
									}
									
									else {
										return (p5context([0], p5want));
									}
								})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
								(v_MATCH = (v_m));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
								return (p5context([1], p5want));
							})()], p5want) }), function () { return p5context([(function () {
								(p5pkg["Perlito5"]["v_PKG_NAME"] = (p5pkg["Perlito5::Grammar"].pop([List_PKG], 0)));
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = (new p5ArrayRef(p5list_to_a(p5map(p5pkg["Perlito5::Grammar"], function (p5want) {
	return ((p5pkg["Perlito5::Grammar"]["v__"] || (p5pkg["Perlito5::Grammar"]["v__"] = new p5HashRef({})))._hash_['capture']);
}, p5list_to_a(((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.delimited_statement'] || ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['Perlito5::Expression.delimited_statement'] = new p5ArrayRef([])))._array_))))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "args_sig", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							var v_last_match_null = null;
							(v_last_match_null = (0));
							var v_m = null;
							(v_m = (v_MATCH));
							var v_to = null;
							(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
							p5while(function () {
									if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])) ) {
										(v_last_match_null = ((p5num(v_last_match_null) + 1)));
									}
									else {
										(v_last_match_null = (0));
									};
									(v_m = (v_MATCH));
									(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								}, function () { return p5and(p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5or(p5or(p5or(p5or(p5or(p5or(p5or(p5or(p5context([(function () {
									return (p5and((';' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and((String.fromCharCode(92) == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 2], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('[' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and((']' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('*' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('+' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('@' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('%' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('$' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([p5and(('&' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want)], p5want));
								})()], p5want) }));
							})()], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
							(v_MATCH = (v_m));
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_to);
							return (p5context([1], p5want));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "prototype", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5or(p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([p5and(('(' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "args_sig", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['args_sig'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = ('' + p5str(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['args_sig']), 0))));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want), function () { return p5context([(function () {
							((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
							return (p5context([p5context([(function () {
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = '*undef*');
								return (p5context([1], p5want));
							})()], p5want)], p5want));
						})()], p5want) }));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
		p5make_sub("Perlito5::Grammar", "anon_sub_def", function (List__, p5want) {
				var v_grammar = null;
				(v_grammar = (List__[p5idx(List__,0)]));
				var v_str = null;
				(v_str = (List__[p5idx(List__,1)]));
				var v_pos = null;
				(v_pos = (List__[p5idx(List__,2)]));
				var v_MATCH = null;
				(v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos}))));
				var v_tmp = null;
				(v_tmp = (p5context([p5context([(function () {
						var v_pos1 = null;
						(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
						return (p5context([(function () {
							return (p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "prototype", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['prototype'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([p5and(('{' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) })], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "exp_stmts", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['exp_stmts'] = v_m2);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_m2 = null;
								(v_m2 = (p5call(v_grammar, "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']), 0)));
								if ( p5bool(v_m2) ) {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (v_m2 || (v_m2 = new p5HashRef({})))._hash_['to']);
									return (p5context([1], p5want));
								}
								
								else {
									return (p5context([0], p5want));
								}
							})()], p5want) }), function () { return p5context([(function () {
								var v_pos1 = null;
								(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to']));
								return (p5or(p5context([(function () {
									return (p5and(('}' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'], 1], 0)), function () { return p5context([((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = (1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'])))], p5want) }));
								})()], p5want), function () { return p5context([(function () {
									((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['to'] = v_pos1);
									return (p5context([p5context([(function () {
										p5pkg["Perlito5::Grammar"].die([['Syntax Error in anon sub']], null);
										return (p5context([1], p5want));
									})()], p5want)], p5want));
								})()], p5want) }));
							})()], p5want) }), function () { return p5context([(function () {
								var v_sig = null;
								(v_sig = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['prototype']), 0)));
								if ( (p5str(v_sig) == '*undef*') ) {
									(v_sig = (null));
								};
								((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['capture'] = p5call(p5pkg["Perlito5::AST::Sub"], "new", p5list_to_a('name', null, 'namespace', null, 'sig', v_sig, 'block', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_['exp_stmts']), 1)), p5want));
								return (p5context([1], p5want));
							})()], p5want) }));
						})()], p5want));
					})()], 0)], 0)));
				return (( p5bool(v_tmp) ? v_MATCH : 0));
		});
	})()
;
	// use Perlito5::Grammar
;
	// use Perlito5::Grammar::Control
;
	// use Perlito5::Precedence
;
	// use Perlito5::Expression
;
	(function () {
		null;
		var p5157 = p5make_package("Perlito5::AST::Apply");
		var Hash_op = {};
		(Hash_op = {'infix:<+=>' : 'infix:<+>', 'infix:<-=>' : 'infix:<->', 'infix:<*=>' : 'infix:<*>', 'infix:</=>' : 'infix:</>', 'infix:<||=>' : 'infix:<||>', 'infix:<&&=>' : 'infix:<&&>', 'infix:<|=>' : 'infix:<|>', 'infix:<&=>' : 'infix:<&>', 'infix:<//=>' : 'infix:<//>', 'infix:<.=>' : 'list:<.>'});
		p5make_sub("Perlito5::AST::Apply", "op_assign", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_code = null;
				(v_code = ((v_self || (v_self = new p5HashRef({})))._hash_['code']));
				if ( p5bool(p5pkg["Perlito5::AST::Apply"].ref([v_code], 0)) ) {
					throw(p5context([0], p5want));
				};
				if ( (Hash_op).hasOwnProperty(v_code) ) {
					throw(p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', 'infix:<=>', 'arguments', (new p5ArrayRef(p5list_to_a(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_[p5idx(((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] || ((v_self || (v_self = new p5HashRef({})))._hash_['arguments'] = new p5ArrayRef([])))._array_,0)], p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('code', Hash_op[v_code], 'arguments', (v_self || (v_self = new p5HashRef({})))._hash_['arguments']), 1))))), p5want));
				};
				return (p5context([0], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
		var p5158 = p5make_package("Perlito5::AST::Do");
		p5make_sub("Perlito5::AST::Do", "simplify", function (List__, p5want) {
			try {
				var v_self = null;
				(v_self = (List__[p5idx(List__,0)]));
				var v_block = null;
				if ( p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_['block'], "isa", ['Perlito5::AST::Lit::Block'], 0)) ) {
					(v_block = (p5call((v_self || (v_self = new p5HashRef({})))._hash_['block'], "stmts", [], 0)));
				}
				else {
					(v_block = ((new p5ArrayRef(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_['block'])))));
				};
				if ( (p5num(((v_block || (v_block = new p5ArrayRef([])))._array_)) == 1) ) {
					(function () {
						var v_stmt = null;
						(v_stmt = ((v_block || (v_block = new p5ArrayRef([])))._array_[p5idx((v_block || (v_block = new p5ArrayRef([])))._array_,0)]));
						if ( (p5bool(p5call(v_stmt, "isa", ['Perlito5::AST::Apply'], 0)) && (p5str(p5call(v_stmt, "code", [], 0)) == 'circumfix:<( )>')) ) {
							(function () {
								var v_args = null;
								(v_args = (p5call(v_stmt, "arguments", [], 0)));
								if ( (p5num((v_args || (v_args = new p5ArrayRef([])))._array_) == 1) ) {
									throw(p5call(p5call(p5pkg["Perlito5::AST::Do"], "new", p5list_to_a('block', (v_args || (v_args = new p5ArrayRef([])))._array_[p5idx((v_args || (v_args = new p5ArrayRef([])))._array_,0)]), p5want), "simplify", [], p5want));
								};
								throw(p5call(p5pkg["Perlito5::AST::Do"], "new", ['block', v_block], p5want));
								})();
						};
						if ( p5bool(p5call(v_stmt, "isa", ['Perlito5::AST::Do'], 0)) ) {
							throw(p5call(v_stmt, "simplify", [], p5want));
						};
						})();
				};
				return (p5call(p5pkg["Perlito5::AST::Do"], "new", ['block', v_block], p5want));
			}
			catch(err) {
				if ( err instanceof Error ) {
					throw(err);
				}
				else {
					return(err);
				}
			}
		});
	})()
;
	// use Perlito5::Macro
;
	(function () {
		var p5159 = p5make_package("Perlito5::Runtime");
		// use Perlito5::strict
;
		if ( p5bool(p5pkg["main"]["v_]"]) ) {
			null;
		}
		else {
			(p5pkg["main"]["v_]"] = (5.012003));
		};
		(p5pkg["Perlito5"]["v_EXPAND_USE"] = (1));
		(p5pkg["Perlito5"]["v_STRICT"] = (0));
		(p5pkg["Perlito5"]["v_WARNINGS"] = (0));
		(p5pkg["Perlito5"]["v_UTF8"] = (0));
		(p5pkg["Perlito5"]["v_BYTES"] = (0));
		p5for(p5pkg["Perlito5::Runtime"], function () {
				p5pkg["Perlito5::Runtime"].push([p5pkg["main"]["List_INC"], [p5pkg["Perlito5::Runtime"]["v__"]]], null);
			}, p5list_to_a(p5pkg["Perlito5::Runtime"].split(p5list_to_a(':', p5or(p5pkg["main"]["Hash_ENV"]['PERL5LIB'], function () { return '' })), 1)), false, "");
		(p5pkg["Perlito5"]["v_SPECIAL_VAR"] = ((new p5HashRef(p5a_to_h(p5list_to_a('$_', 'ARG', '$&', '$MATCH', '$`', '$PREMATCH', '$' + String.fromCharCode(39), '$POSTMATCH', '$+', '$LAST_PAREN_MATCH', '@+', '@LAST_MATCH_END', '%+', '%LAST_PAREN_MATCH', '@-', '@LAST_MATCH_START', '$|', 'autoflush', '$/', '$RS', '@_', '@ARG', '< $', '$EUID', '$.', '$NR', '< $< ', '$UID', '$(', '$GID', '$#', null, '$@', '$EVAL_ERROR', '$=', '$FORMAT_LINES_PER_PAGE', '$,', '$OFS', '$?', '$CHILD_ERROR', '$*', null, '$[', null, '$$', '$PID', '%-', null, '$~', '$FORMAT_NAME', '$-', '$FORMAT_LINES_LEFT', '$&', '$MATCH', '$%', '$FORMAT_PAGE_NUMBER', '$)', '$EGID', '$]', null, '$!', '$ERRNO', '$;', '$SUBSEP', '$' + String.fromCharCode(92), '$ORS', '%!', null, '$"', '$LIST_SEPARATOR', '$_', '$ARG', '$:', 'FORMAT_LINE_BREAK_CHARACTERS'))))));
		(p5pkg["Perlito5"]["v_CORE_PROTO"] = ((new p5HashRef(p5a_to_h(p5list_to_a('CORE::shutdown', '*$', 'CORE::chop', null, 'CORE::lstat', '*', 'CORE::rename', '$$', 'CORE::lock', String.fromCharCode(92) + '$', 'CORE::rand', ';$', 'CORE::gmtime', ';$', 'CORE::gethostbyname', '$', 'CORE::each', String.fromCharCode(92) + '[@%]', 'CORE::ref', '_', 'CORE::syswrite', '*$;$$', 'CORE::msgctl', '$$$', 'CORE::getnetbyname', '$', 'CORE::write', ';*', 'CORE::alarm', '_', 'CORE::print', null, 'CORE::getnetent', '', 'CORE::semget', '$$$', 'CORE::use', null, 'CORE::abs', '_', 'CORE::break', '', 'CORE::undef', null, 'CORE::no', null, 'CORE::eval', null, 'CORE::split', null, 'CORE::localtime', ';$', 'CORE::sort', null, 'CORE::chown', '@', 'CORE::endpwent', '', 'CORE::getpwent', '', 'CORE::pos', null, 'CORE::lcfirst', '_', 'CORE::kill', '@', 'CORE::send', '*$$;$', 'CORE::endprotoent', '', 'CORE::semctl', '$$$$', 'CORE::waitpid', '$$', 'CORE::utime', '@', 'CORE::dbmclose', String.fromCharCode(92) + '%', 'CORE::getpwnam', '$', 'CORE::substr', '$$;$$', 'CORE::listen', '*$', 'CORE::getprotoent', '', 'CORE::shmget', '$$$', 'CORE::our', null, 'CORE::readlink', '_', 'CORE::shmwrite', '$$$$', 'CORE::times', '', 'CORE::package', null, 'CORE::map', null, 'CORE::join', '$@', 'CORE::rmdir', '_', 'CORE::shmread', '$$$$', 'CORE::uc', '_', 'CORE::bless', '$;$', 'CORE::closedir', '*', 'CORE::getppid', '', 'CORE::tie', null, 'CORE::readdir', '*', 'CORE::gethostent', '', 'CORE::getlogin', '', 'CORE::last', null, 'CORE::gethostbyaddr', '$$', 'CORE::accept', '**', 'CORE::log', '_', 'CORE::tell', ';*', 'CORE::readline', ';*', 'CORE::tied', null, 'CORE::socket', '*$$$', 'CORE::umask', ';$', 'CORE::sysread', '*' + String.fromCharCode(92) + '$$;$', 'CORE::syscall', '$@', 'CORE::quotemeta', '_', 'CORE::dump', '', 'CORE::opendir', '*$', 'CORE::untie', null, 'CORE::truncate', '$$', 'CORE::select', ';*', 'CORE::sleep', ';$', 'CORE::seek', '*$$', 'CORE::read', '*' + String.fromCharCode(92) + '$$;$', 'CORE::rewinddir', '*', 'CORE::scalar', null, 'CORE::wantarray', '', 'CORE::oct', '_', 'CORE::bind', '*$', 'CORE::stat', '*', 'CORE::sqrt', '_', 'CORE::getc', ';*', 'CORE::fileno', '*', 'CORE::getpeername', '*', 'CORE::sin', '_', 'CORE::getnetbyaddr', '$$', 'CORE::grep', null, 'CORE::setservent', '$', 'CORE::sub', null, 'CORE::shmctl', '$$$', 'CORE::study', null, 'CORE::msgrcv', '$$$$$', 'CORE::setsockopt', '*$$$', 'CORE::int', '_', 'CORE::pop', ';' + String.fromCharCode(92) + '@', 'CORE::link', '$$', 'CORE::exec', null, 'CORE::setpwent', '', 'CORE::mkdir', '_;$', 'CORE::sysseek', '*$$', 'CORE::endservent', '', 'CORE::chr', '_', 'CORE::when', null, 'CORE::getpwuid', '$', 'CORE::setprotoent', '$', 'CORE::reverse', '@', 'CORE::say', null, 'CORE::goto', null, 'CORE::getgrent', '', 'CORE::endnetent', '', 'CORE::hex', '_', 'CORE::binmode', '*;$', 'CORE::formline', '$@', 'CORE::getgrnam', '$', 'CORE::ucfirst', '_', 'CORE::chdir', ';$', 'CORE::setnetent', '$', 'CORE::splice', String.fromCharCode(92) + '@;$$@', 'CORE::unlink', '@', 'CORE::time', '', 'CORE::push', String.fromCharCode(92) + '@@', 'CORE::exit', ';$', 'CORE::endgrent', '', 'CORE::unshift', String.fromCharCode(92) + '@@', 'CORE::local', null, 'CORE::my', null, 'CORE::cos', '_', 'CORE::redo', null, 'CORE::warn', '@', 'CORE::getsockname', '*', 'CORE::pipe', '**', 'CORE::sprintf', '$@', 'CORE::open', '*;$@', 'CORE::setpgrp', ';$$', 'CORE::exp', '_', 'CORE::seekdir', '*$', 'CORE::getservbyport', '$$', 'CORE::given', null, 'CORE::pack', '$@', 'CORE::msgget', '$$', 'CORE::rindex', '$$;$', 'CORE::srand', ';$', 'CORE::telldir', '*', 'CORE::connect', '*$', 'CORE::getprotobyname', '$', 'CORE::msgsnd', '$$$', 'CORE::length', '_', 'CORE::state', null, 'CORE::die', '@', 'CORE::delete', null, 'CORE::getservent', '', 'CORE::getservbyname', '$$', 'CORE::setpriority', '$$$', 'CORE::lc', '_', 'CORE::fcntl', '*$$', 'CORE::chroot', '_', 'CORE::recv', '*' + String.fromCharCode(92) + '$$$', 'CORE::dbmopen', String.fromCharCode(92) + '%$$', 'CORE::socketpair', '**$$$', 'CORE::vec', '$$$', 'CORE::system', null, 'CORE::defined', '_', 'CORE::index', '$$;$', 'CORE::caller', ';$', 'CORE::close', ';*', 'CORE::atan2', '$$', 'CORE::semop', '$$', 'CORE::unpack', '$;$', 'CORE::ord', '_', 'CORE::chmod', '@', 'CORE::prototype', null, 'CORE::getprotobynumber', '$', 'CORE::values', String.fromCharCode(92) + '[@%]', 'CORE::chomp', null, 'CORE::ioctl', '*$$', 'CORE::eof', ';*', 'CORE::crypt', '$$', 'CORE::do', null, 'CORE::flock', '*$', 'CORE::wait', '', 'CORE::sethostent', '$', 'CORE::return', null, 'CORE::getsockopt', '*$$', 'CORE::fork', '', 'CORE::require', null, 'CORE::format', null, 'CORE::readpipe', '_', 'CORE::endhostent', '', 'CORE::getpgrp', ';$', 'CORE::setgrent', '', 'CORE::keys', String.fromCharCode(92) + '[@%]', 'CORE::glob', null, 'CORE::getpriority', '$$', 'CORE::reset', ';$', 'CORE::sysopen', '*$$;$', 'CORE::continue', '', 'CORE::next', null, 'CORE::getgrgid', '$', 'CORE::default', null, 'CORE::shift', ';' + String.fromCharCode(92) + '@', 'CORE::symlink', '$$', 'CORE::exists', '$', 'CORE::printf', '$@'))))));
		1;
	})()
;
	// use Perlito5::Runtime
;
	p5make_sub("Perlito5", "compile_p5_to_js", function (List__, p5want) {
			var v_s = null;
			(v_s = (p5pkg["Perlito5"].shift([List__])));
			(p5pkg["Perlito5"]["v_PKG_NAME"] = ('main'));
			(p5pkg["Perlito5"]["v_PROTO"] = ((new p5HashRef({}))));
			var v_ast = null;
			(v_ast = (p5call(p5pkg["Perlito5::Grammar"], "exp_stmts", [v_s, 0], 0)));
			return (p5pkg["Perlito5::AST::CompUnit"].emit_javascript_program(p5list_to_a((new p5ArrayRef(p5list_to_a(p5call(p5pkg["Perlito5::AST::CompUnit"], "new", p5list_to_a('name', 'main', 'body', p5pkg["Perlito5::Match"].flat([v_ast], 1)), 1))))), p5want));
	});
	1;
})()

