diff --git a/Gemfile b/Gemfile index ad19345..c08f6c2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,2 @@ source 'https://rubygems.org' -gem 'opal', '~> 0.8.0' +gem 'opal', '~> 0.9.2' diff --git a/Gemfile.lock b/Gemfile.lock index 131fbc4..dc74177 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,20 +1,22 @@ GEM remote: https://rubygems.org/ specs: + concurrent-ruby (1.0.1) hike (1.2.3) - opal (0.8.0) + opal (0.9.2) hike (~> 1.2) sourcemap (~> 0.1.0) sprockets (~> 3.1) tilt (>= 1.4) - rack (1.6.1) + rack (1.6.4) sourcemap (0.1.1) - sprockets (3.2.0) - rack (~> 1.0) - tilt (2.0.1) + sprockets (3.5.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + tilt (2.0.2) PLATFORMS ruby DEPENDENCIES - opal (~> 0.8.0) + opal (~> 0.9.2) diff --git a/compiler.rb b/compiler.rb index 9d6b08a..e89507b 100644 --- a/compiler.rb +++ b/compiler.rb @@ -2,299 +2,9 @@ require "opal-source-maps" require "opal-parser" -# MRI implement `begin/end while condition` differently -# See issue: https://github.com/opal/opal/issues/575 -module SourceMap - module VLQ - def self.encode(ary) - result = [] - ary.each do |n| - vlq = n < 0 ? ((-n) << 1) + 1 : n << 1 - loop do - digit = vlq & VLQ_BASE_MASK - vlq >>= VLQ_BASE_SHIFT - digit |= VLQ_CONTINUATION_BIT if vlq > 0 - result << BASE64_DIGITS[digit] - break unless vlq > 0 - end - end - result.join - end - end -end - -# FIXME -# Related issues: https://github.com/opal/opal/issues/1074 -# https://github.com/opal/opal/issues/1076 -class StringScanner - attr_reader :pos - attr_reader :matched - - def initialize(string) - @string = string - @pos = 0 - @matched = nil - @working = string - @match = [] - end - - attr_reader :string - - def beginning_of_line? - `#@pos === 0 || #@string.charAt(#@pos - 1) === "\n"` - end - - alias bol? beginning_of_line? - - def scan(pattern) - pattern = anchor(pattern) - - %x{ - var result = pattern.exec(#@working); - if (result == null) { - return #@matched = nil; - } - else if (typeof(result) === 'object') { - #@prev_pos = #@pos; - #@pos += result[0].length; - #@working = #@working.substring(result[0].length); - #@matched = result[0]; - #@match = result; - return result[0]; - } - else if (typeof(result) === 'string') { - #@pos += result.length; - #@working = #@working.substring(result.length); - return result; - } - else { - return nil; - } - } - end - - def scan_until(pattern) - pattern = anchor(pattern) - - %x{ - var pos = #@pos, - working = #@working, - result; - while (true) { - result = pattern.exec(working); - pos += 1; - working = working.substr(1); - if (result == null) { - if (working.length === 0) { - return #@matched = nil; - } - continue; - } - #@matched = #@string.substr(#@pos, pos - #@pos - 1 + result[0].length); - #@prev_pos = pos - 1; - #@pos = pos; - #@working = working.substr(result[0].length); - return #@matched; - } - } - end - - - def [](idx) - %x{ - var match = #@match; - if (idx < 0) { - idx += match.length; - } - if (idx < 0 || idx >= match.length) { - return nil; - } - if (match[idx] == null) { - return nil; - } - return match[idx]; - } - end - - def check(pattern) - pattern = anchor(pattern) - - %x{ - var result = pattern.exec(#@working); - if (result == null) { - return #@matched = nil; - } - return #@matched = result[0]; - } - end - - def check_until(pattern) - %x{ - var prev_pos = #@prev_pos, - pos = #@pos; - var result = #{scan_until(pattern)}; - if (result !== nil) { - #@matched = result.substr(-1); - #@working = #@string.substr(pos); - } - #@prev_pos = prev_pos; - #@pos = pos; - return result; - } - end - - def peek(length) - `#@working.substring(0, length)` - end - - def eos? - `#@working.length === 0` - end - - def exist?(pattern) - %x{ - var result = pattern.exec(#@working); - if (result == null) { - return nil; - } - else if (result.index == 0) { - return 0; - } - else { - return result.index + 1; - } - } - end - - def skip(pattern) - pattern = anchor(pattern) - - %x{ - var result = pattern.exec(#@working); - if (result == null) { - return #@matched = nil; - } - else { - var match_str = result[0]; - var match_len = match_str.length; - #@matched = match_str; - #@prev_pos = #@pos; - #@pos += match_len; - #@working = #@working.substring(match_len); - return match_len; - } - } - end - - def skip_until(pattern) - %x{ - var result = #{scan_until(pattern)}; - if (result === nil) { - return nil; - } - else { - #@matched = result.substr(-1); - return result.length; - } - } - end - - def get_byte - %x{ - var result = nil; - if (#@pos < #@string.length) { - #@prev_pos = #@pos; - #@pos += 1; - result = #@matched = #@working.substring(0, 1); - #@working = #@working.substring(1); - } - else { - #@matched = nil; - } - return result; - } - end - - # not exactly, but for now... - alias getch get_byte - - def match?(pattern) - pattern = anchor(pattern) - - %x{ - var result = pattern.exec(#@working); - if (result == null) { - return nil; - } - else { - #@prev_pos = #@pos; - return result[0].length; - } - } - end - - def pos=(pos) - %x{ - if (pos < 0) { - pos += #{@string.length}; - } - } - - @pos = pos - @working = `#{@string}.slice(pos)` - end - - def post_match - %x{ - if (#@matched === nil) { - return nil; - } - return #@string.substr(#@pos); - } - end - - def pre_match - %x{ - if (#@matched === nil) { - return nil; - } - return #@string.substr(0, #@prev_pos); - } - end - - def reset - @working = @string - @matched = nil - @pos = 0 - end - - def rest - @working - end - - def rest? - `#@working.length !== 0` - end - - def rest_size - rest.size - end - - def terminate - @match = nil - self.pos = @string.length - end - - def unscan - @pos = @prev_pos - @prev_pos = nil - @match = nil - - self - end - -private - def anchor(pattern) - `new RegExp('^(?:' + pattern.toString().substr(1, pattern.toString().length - 2) + ')')` +# fixes https://github.com/opal/opal/issues/1400 +class Pathname + def cleanpath + `return #@path` end end diff --git a/index.es6.js b/index.es6.js index 4b924ad..51527ba 100644 --- a/index.es6.js +++ b/index.es6.js @@ -76,7 +76,7 @@ export default function(source) { var resolved = resolveFilename(this, filename); if (resolved.match(/\.js$/)) { prepend.push(`require('${require.resolve('imports-loader')}!${resolved}');`); - prepend.push(`Opal.mark_as_loaded(Opal.normalize_loadable_path('${filename}'));`) + prepend.push(`Opal.mark_as_loaded('${filename}');`) } else { prepend.push(`require('!!${currentLoader}?file=${filename}&requirable=true!${resolved}');`); } diff --git a/index.js b/index.js index e653521..00a4f34 100644 --- a/index.js +++ b/index.js @@ -123,7 +123,7 @@ exports["default"] = function (source) { var resolved = resolveFilename(_this, filename); if (resolved.match(/\.js$/)) { prepend.push("require('" + require.resolve('imports-loader') + "!" + resolved + "');"); - prepend.push("Opal.mark_as_loaded(Opal.normalize_loadable_path('" + filename + "'));"); + prepend.push("Opal.mark_as_loaded('" + filename + "');"); } else { prepend.push("require('!!" + currentLoader + "?file=" + filename + "&requirable=true!" + resolved + "');"); } diff --git a/package.json b/package.json index adb1792..65d8c5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opalrb-loader", - "version": "0.0.3", + "version": "0.0.4", "description": "Opal Ruby module loader for webpack", "main": "index.js", "scripts": { diff --git a/vendor/opal-compiler.js b/vendor/opal-compiler.js index e0c6881..84f6a28 100644 --- a/vendor/opal-compiler.js +++ b/vendor/opal-compiler.js @@ -4,11 +4,41 @@ return this.Opal; } + var nil; + + // The actual class for BasicObject + var BasicObject; + + // The actual Object class. + // The leading underscore is to avoid confusion with window.Object() + var _Object; + + // The actual Module class + var Module; + + // The actual Class class + var Class; + + // Constructor for instances of BasicObject + function BasicObject_alloc(){} + + // Constructor for instances of Object + function Object_alloc(){} + + // Constructor for instances of Class + function Class_alloc(){} + + // Constructor for instances of Module + function Module_alloc(){} + + // Constructor for instances of NilClass (nil) + function NilClass_alloc(){} + // The Opal object that is exposed globally var Opal = this.Opal = {}; // All bridged classes - keep track to donate methods from Object - var bridged_classes = Opal.bridged_classes = []; + var bridges = {}; // TopScope is used for inheriting constants from the top scope var TopScope = function(){}; @@ -52,130 +82,152 @@ // (See nodejs and phantom for examples) Opal.exit = function(status) { if (Opal.gvars.DEBUG) console.log('Exited with status '+status); }; - /** - Get a constant on the given scope. Every class and module in Opal has a - scope used to store, and inherit, constants. For example, the top level - `Object` in ruby has a scope accessible as `Opal.Object.$$scope`. - - To get the `Array` class using this scope, you could use: - - Opal.Object.$$scope.get("Array") - - If a constant with the given name cannot be found, then a dispatch to the - class/module's `#const_method` is called, which by default will raise an - error. - - @param [String] name the name of the constant to lookup - @returns [RubyObject] - */ + // keeps track of exceptions for $! + Opal.exceptions = []; + + // Get a constant on the given scope. Every class and module in Opal has a + // scope used to store, and inherit, constants. For example, the top level + // `Object` in ruby has a scope accessible as `Opal.Object.$$scope`. + // + // To get the `Array` class using this scope, you could use: + // + // Opal.Object.$$scope.get("Array") + // + // If a constant with the given name cannot be found, then a dispatch to the + // class/module's `#const_method` is called, which by default will raise an + // error. + // + // @param [String] name the name of the constant to lookup + // @return [RubyObject] + // Opal.get = function(name) { var constant = this[name]; if (constant == null) { - return this.base.$const_missing(name); + return this.base.$const_get(name); } return constant; }; - /* - * Create a new constants scope for the given class with the given - * base. Constants are looked up through their parents, so the base - * scope will be the outer scope of the new klass. - */ - function create_scope(base, klass, id) { + // Create a new constants scope for the given class with the given + // base. Constants are looked up through their parents, so the base + // scope will be the outer scope of the new klass. + // + // @param base_scope [$$scope] the scope in which the new scope should be created + // @param klass [Class] + // @param id [String, null] the name of the newly created scope + // + Opal.create_scope = function(base_scope, klass, id) { var const_alloc = function() {}; - var const_scope = const_alloc.prototype = new base.constructor(); + var const_scope = const_alloc.prototype = new base_scope.constructor(); klass.$$scope = const_scope; - klass.$$base_module = base.base; + klass.$$base_module = base_scope.base; const_scope.base = klass; const_scope.constructor = const_alloc; const_scope.constants = []; if (id) { - klass.$$orig_scope = base; - base[id] = base.constructor[id] = klass; - base.constants.push(id); + Opal.cdecl(base_scope, id, klass); + const_alloc.displayName = id+"_scope_alloc"; } } - Opal.create_scope = create_scope; - - /* - * A `class Foo; end` expression in ruby is compiled to call this runtime - * method which either returns an existing class of the given name, or creates - * a new class in the given `base` scope. - * - * If a constant with the given name exists, then we check to make sure that - * it is a class and also that the superclasses match. If either of these - * fail, then we raise a `TypeError`. Note, superklass may be null if one was - * not specified in the ruby code. - * - * We pass a constructor to this method of the form `function ClassName() {}` - * simply so that classes show up with nicely formatted names inside debuggers - * in the web browser (or node/sprockets). - * - * The `base` is the current `self` value where the class is being created - * from. We use this to get the scope for where the class should be created. - * If `base` is an object (not a class/module), we simple get its class and - * use that as the base instead. - * - * @param [Object] base where the class is being created - * @param [Class] superklass superclass of the new class (may be null) - * @param [String] id the name of the class to be created - * @param [Function] constructor function to use as constructor - * @return [Class] new or existing ruby class - */ + // A `class Foo; end` expression in ruby is compiled to call this runtime + // method which either returns an existing class of the given name, or creates + // a new class in the given `base` scope. + // + // If a constant with the given name exists, then we check to make sure that + // it is a class and also that the superclasses match. If either of these + // fail, then we raise a `TypeError`. Note, superklass may be null if one was + // not specified in the ruby code. + // + // We pass a constructor to this method of the form `function ClassName() {}` + // simply so that classes show up with nicely formatted names inside debuggers + // in the web browser (or node/sprockets). + // + // The `base` is the current `self` value where the class is being created + // from. We use this to get the scope for where the class should be created. + // If `base` is an object (not a class/module), we simple get its class and + // use that as the base instead. + // + // @param base [Object] where the class is being created + // @param superklass [Class,null] superclass of the new class (may be null) + // @param id [String] the name of the class to be created + // @param constructor [Function] function to use as constructor + // + // @return new [Class] or existing ruby class + // Opal.klass = function(base, superklass, id, constructor) { + var klass, bridged, alloc; + // If base is an object, use its class - if (!base.$$is_class) { + if (!base.$$is_class && !base.$$is_module) { base = base.$$class; } - // Not specifying a superclass means we can assume it to be Object - if (superklass === null) { - superklass = ObjectClass; + // If the superclass is a function then we're bridging a native JS class + if (typeof(superklass) === 'function') { + bridged = superklass; + superklass = _Object; } - var klass = base.$$scope[id]; + // Try to find the class in the current scope + klass = base.$$scope[id]; - // If a constant exists in the scope, then we must use that - if ($hasOwn.call(base.$$scope, id) && klass.$$orig_scope === base.$$scope) { + // If the class exists in the scope, then we must use that + if (klass && klass.$$orig_scope === base.$$scope) { // Make sure the existing constant is a class, or raise error if (!klass.$$is_class) { throw Opal.TypeError.$new(id + " is not a class"); } // Make sure existing class has same superclass - if (superklass !== klass.$$super && superklass !== ObjectClass) { + if (superklass && klass.$$super !== superklass) { throw Opal.TypeError.$new("superclass mismatch for class " + id); } + + return klass; } - else if (typeof(superklass) === 'function') { - // passed native constructor as superklass, so bridge it as ruby class - return bridge_class(id, superklass, base); + + // Class doesnt exist, create a new one with given superclass... + + // Not specifying a superclass means we can assume it to be Object + if (superklass == null) { + superklass = _Object; } - else { - // if class doesnt exist, create a new one with given superclass - klass = boot_class(superklass, constructor); - // name class using base (e.g. Foo or Foo::Baz) - klass.$$name = id; + // If bridged the JS class will also be the alloc function + alloc = bridged || boot_class_alloc(id, constructor, superklass); + + // Create the class object (instance of Class) + klass = boot_class_object(id, superklass, alloc); + + // Name the class + klass.$$name = id; + klass.displayName = id; - // every class gets its own constant scope, inherited from current scope - create_scope(base.$$scope, klass, id); + // Mark the object as a class + klass.$$is_class = true; - // Name new class directly onto current scope (Opal.Foo.Baz = klass) - base[id] = base.$$scope[id] = klass; + // Every class gets its own constant scope, inherited from current scope + Opal.create_scope(base.$$scope, klass, id); + // Name new class directly onto current scope (Opal.Foo.Baz = klass) + base[id] = base.$$scope[id] = klass; + + if (bridged) { + Opal.bridge(klass, alloc); + } + else { // Copy all parent constants to child, unless parent is Object - if (superklass !== ObjectClass && superklass !== BasicObjectClass) { + if (superklass !== _Object && superklass !== BasicObject) { donate_constants(superklass, klass); } - // call .inherited() hook with new class on the superclass + // Call .inherited() hook with new class on the superclass if (superklass.$inherited) { superklass.$inherited(klass); } @@ -185,33 +237,34 @@ }; // Create generic class with given superclass. - function boot_class(superklass, constructor) { + Opal.boot_class = function(superklass, constructor) { var alloc = boot_class_alloc(null, constructor, superklass) - return boot_class_object(superklass, alloc); + return boot_class_object(null, superklass, alloc); } - // Make `boot_class` available to the JS-API - Opal.boot = boot_class; - - /* - * The class object itself (as in `Class.new`) - * - * @param [(Opal) Class] superklass Another class object (as in `Class.new`) - * @param [constructor] alloc The constructor that holds the prototype - * that will be used for instances of the - * newly constructed class. - */ - function boot_class_object(superklass, alloc) { - var singleton_class = function() {}; - singleton_class.prototype = superklass.constructor.prototype; + // The class object itself (as in `Class.new`) + // + // @param superklass [(Opal) Class] Another class object (as in `Class.new`) + // @param alloc [constructor] The constructor that holds the prototype + // that will be used for instances of the + // newly constructed class. + function boot_class_object(id, superklass, alloc) { + // Grab the superclass prototype and use it to build an intermediary object + // in the prototype chain. + function Superclass_alloc_proxy() {}; + Superclass_alloc_proxy.prototype = superklass.constructor.prototype; + function SingletonClass_alloc() {} + SingletonClass_alloc.prototype = new Superclass_alloc_proxy(); - function OpalClass() {} - OpalClass.prototype = new singleton_class(); + if (id) { + SingletonClass_alloc.displayName = "SingletonClass_alloc("+id+")"; + } - var klass = new OpalClass(); + // The built class is the only instance of its singleton_class + var klass = new SingletonClass_alloc(); - setup_module_or_class_object(klass, OpalClass, superklass, alloc.prototype); + setup_module_or_class_object(klass, SingletonClass_alloc, superklass, alloc.prototype); // @property $$alloc This is the constructor of instances of the current // class. Its prototype will be used for method lookup @@ -224,22 +277,21 @@ return klass; } - /* - * Adds common/required properties to a module or class object - * (as in `Module.new` / `Class.new`) - * - * @param module The module or class that needs to be prepared - * - * @param constructor The constructor of the module or class itself, - * usually it's already assigned by using `new`. Some - * ipothesis on why it's needed can be found below. - * - * @param superklass The superclass of the class/module object, for modules - * is `Module` (of `ModuleClass` in JS context) - * - * @param prototype The prototype on which the class/module methods will - * be stored. - */ + // Adds common/required properties to a module or class object + // (as in `Module.new` / `Class.new`) + // + // @param module The module or class that needs to be prepared + // + // @param constructor The constructor of the module or class itself, + // usually it's already assigned by using `new`. Some + // ipothesis on why it's needed can be found below. + // + // @param superklass The superclass of the class/module object, for modules + // is `Module` (of `Module` in JS context) + // + // @param prototype The prototype on which the class/module methods will + // be stored. + // function setup_module_or_class_object(module, constructor, superklass, prototype) { // @property $$id Each class is assigned a unique `id` that helps // comparation and implementation of `#object_id` @@ -256,8 +308,16 @@ // Maybe there are some browsers not abiding (IE6?) module.constructor = constructor; - // @property $$is_class Clearly mark this as a class-like - module.$$is_class = true; + if (superklass === Module) { + // @property $$is_module Clearly mark this as a module + module.$$is_module = true; + module.$$class = Module; + } + else { + // @property $$is_class Clearly mark this as a class + module.$$is_class = true; + module.$$class = Class; + } // @property $$super the superclass, doesn't get changed by module inclusions module.$$super = superklass; @@ -267,55 +327,56 @@ // the last included module module.$$parent = superklass; - // @property $$methods keeps track of methods defined on the class - // but seems to be used just by `define_basic_object_method` - // and for donating (Ruby) Object methods to bridged classes - // TODO: check if it can be removed - module.$$methods = []; - // @property $$inc included modules module.$$inc = []; } - /** - Define new module (or return existing module). The given `base` is basically - the current `self` value the `module` statement was defined in. If this is - a ruby module or class, then it is used, otherwise if the base is a ruby - object then that objects real ruby class is used (e.g. if the base is the - main object, then the top level `Object` class is used as the base). - - If a module of the given name is already defined in the base, then that - instance is just returned. - - If there is a class of the given name in the base, then an error is - generated instead (cannot have a class and module of same name in same base). - - Otherwise, a new module is created in the base with the given name, and that - new instance is returned back (to be referenced at runtime). - - @param [RubyModule or Class] base class or module this definition is inside - @param [String] id the name of the new (or existing) module - @returns [RubyModule] - */ + // Define new module (or return existing module). The given `base` is basically + // the current `self` value the `module` statement was defined in. If this is + // a ruby module or class, then it is used, otherwise if the base is a ruby + // object then that objects real ruby class is used (e.g. if the base is the + // main object, then the top level `Object` class is used as the base). + // + // If a module of the given name is already defined in the base, then that + // instance is just returned. + // + // If there is a class of the given name in the base, then an error is + // generated instead (cannot have a class and module of same name in same base). + // + // Otherwise, a new module is created in the base with the given name, and that + // new instance is returned back (to be referenced at runtime). + // + // @param base [Module, Class] class or module this definition is inside + // @param id [String] the name of the new (or existing) module + // @return [Module] + // Opal.module = function(base, id) { var module; - if (!base.$$is_class) { + if (!base.$$is_class && !base.$$is_module) { base = base.$$class; } if ($hasOwn.call(base.$$scope, id)) { module = base.$$scope[id]; - if (!module.$$is_mod && module !== ObjectClass) { + if (!module.$$is_module && module !== _Object) { throw Opal.TypeError.$new(id + " is not a module"); } } else { module = boot_module_object(); + + // name module using base (e.g. Foo or Foo::Baz) module.$$name = id; - create_scope(base.$$scope, module, id); + // mark the object as a module + module.$$is_module = true; + + // initialize dependency tracking + module.$$dep = []; + + Opal.create_scope(base.$$scope, module, id); // Name new module directly onto current scope (Opal.Foo.Baz = module) base[id] = base.$$scope[id] = module; @@ -324,13 +385,12 @@ return module; }; - /* - * Internal function to create a new module instance. This simply sets up - * the prototype hierarchy and method tables. - */ + // Internal function to create a new module instance. This simply sets up + // the prototype hierarchy and method tables. + // function boot_module_object() { var mtor = function() {}; - mtor.prototype = ModuleClass.constructor.prototype; + mtor.prototype = Module_alloc.prototype; function module_constructor() {} module_constructor.prototype = new mtor(); @@ -338,118 +398,178 @@ var module = new module_constructor(); var module_prototype = {}; - setup_module_or_class_object(module, module_constructor, ModuleClass, module_prototype); - - module.$$is_mod = true; - module.$$dep = []; + setup_module_or_class_object(module, module_constructor, Module, module_prototype); return module; } - /** - Return the singleton class for the passed object. - - If the given object alredy has a singleton class, then it will be stored on - the object as the `$$meta` property. If this exists, then it is simply - returned back. - - Otherwise, a new singleton object for the class or object is created, set on - the object at `$$meta` for future use, and then returned. - - @param [RubyObject] object the ruby object - @returns [RubyClass] the singleton class for object - */ + // Make `boot_module_object` available to the JS-API + Opal.boot_module_object = boot_module_object; + + // Return the singleton class for the passed object. + // + // If the given object alredy has a singleton class, then it will be stored on + // the object as the `$$meta` property. If this exists, then it is simply + // returned back. + // + // Otherwise, a new singleton object for the class or object is created, set on + // the object at `$$meta` for future use, and then returned. + // + // @param [RubyObject] object the ruby object + // @return [RubyClass] the singleton class for object + // Opal.get_singleton_class = function(object) { if (object.$$meta) { return object.$$meta; } - if (object.$$is_class) { + if (object.$$is_class || object.$$is_module) { return build_class_singleton_class(object); } return build_object_singleton_class(object); }; - /** - Build the singleton class for an existing class. - - NOTE: Actually in MRI a class' singleton class inherits from its - superclass' singleton class which in turn inherits from Class. - - @param [RubyClass] klass - @returns [RubyClass] - */ + // Build the singleton class for an existing class. + // + // NOTE: Actually in MRI a class' singleton class inherits from its + // superclass' singleton class which in turn inherits from Class. + // + // @param [RubyClass] klass + // @return [RubyClass] + // function build_class_singleton_class(klass) { - var meta = new Opal.Class.$$alloc; + var meta = new Opal.Class.$$alloc(); meta.$$class = Opal.Class; meta.$$proto = klass.constructor.prototype; meta.$$is_singleton = true; + meta.$$singleton_of = klass; meta.$$inc = []; - meta.$$methods = []; meta.$$scope = klass.$$scope; return klass.$$meta = meta; } - /** - Build the singleton class for a Ruby (non class) Object. - - @param [RubyObject] object - @returns [RubyClass] - */ + // Build the singleton class for a Ruby (non class) Object. + // + // @param [RubyObject] object + // @return [RubyClass] + // function build_object_singleton_class(object) { var orig_class = object.$$class, class_id = "#>"; - var Singleton = function () {}; - var meta = Opal.boot(orig_class, Singleton); + var Singleton = function() {}; + var meta = Opal.boot_class(orig_class, Singleton); meta.$$name = class_id; meta.$$proto = object; meta.$$class = orig_class.$$class; meta.$$scope = orig_class.$$scope; meta.$$parent = orig_class; + meta.$$is_singleton = true; + meta.$$singleton_of = object; + return object.$$meta = meta; } - /** - The actual inclusion of a module into a class. - - ## Class `$$parent` and `iclass` - - To handle `super` calls, every class has a `$$parent`. This parent is - used to resolve the next class for a super call. A normal class would - have this point to its superclass. However, if a class includes a module - then this would need to take into account the module. The module would - also have to then point its `$$parent` to the actual superclass. We - cannot modify modules like this, because it might be included in more - then one class. To fix this, we actually insert an `iclass` as the class' - `$$parent` which can then point to the superclass. The `iclass` acts as - a proxy to the actual module, so the `super` chain can then search it for - the required method. - - @param [RubyModule] module the module to include - @param [RubyClass] klass the target class to include module into - @returns [null] - */ + // Bridges a single method. + function bridge_method(target, from, name, body) { + var ancestors, i, ancestor, length; + + ancestors = target.$$bridge.$ancestors(); + + // order important here, we have to check for method presence in + // ancestors from the bridged class to the last ancestor + for (i = 0, length = ancestors.length; i < length; i++) { + ancestor = ancestors[i]; + + if ($hasOwn.call(ancestor.$$proto, name) && + ancestor.$$proto[name] && + !ancestor.$$proto[name].$$donated && + !ancestor.$$proto[name].$$stub && + ancestor !== from) { + break; + } + + if (ancestor === from) { + target.prototype[name] = body + break; + } + } + + } + + // Bridges from *donator* to a *target*. + function _bridge(target, donator) { + var id, methods, method, i, bridged; + + if (typeof(target) === "function") { + id = donator.$__id__(); + methods = donator.$instance_methods(); + + for (i = methods.length - 1; i >= 0; i--) { + method = '$' + methods[i]; + + bridge_method(target, donator, method, donator.$$proto[method]); + } + + if (!bridges[id]) { + bridges[id] = []; + } + + bridges[id].push(target); + } + else { + bridged = bridges[target.$__id__()]; + + if (bridged) { + for (i = bridged.length - 1; i >= 0; i--) { + _bridge(bridged[i], donator); + } + + bridges[donator.$__id__()] = bridged.slice(); + } + } + } + + // The actual inclusion of a module into a class. + // + // ## Class `$$parent` and `iclass` + // + // To handle `super` calls, every class has a `$$parent`. This parent is + // used to resolve the next class for a super call. A normal class would + // have this point to its superclass. However, if a class includes a module + // then this would need to take into account the module. The module would + // also have to then point its `$$parent` to the actual superclass. We + // cannot modify modules like this, because it might be included in more + // then one class. To fix this, we actually insert an `iclass` as the class' + // `$$parent` which can then point to the superclass. The `iclass` acts as + // a proxy to the actual module, so the `super` chain can then search it for + // the required method. + // + // @param [RubyModule] module the module to include + // @param [RubyClass] klass the target class to include module into + // @return [null] + // Opal.append_features = function(module, klass) { - var included = klass.$$inc; + var iclass, donator, prototype, methods, id, i; - // check if this module is already included in the klass - for (var j = 0, jj = included.length; j < jj; j++) { - if (included[j] === module) { + // check if this module is already included in the class + for (i = klass.$$inc.length - 1; i >= 0; i--) { + if (klass.$$inc[i] === module) { return; } } - included.push(module); + klass.$$inc.push(module); module.$$dep.push(klass); + _bridge(klass, module); // iclass - var iclass = { + iclass = { $$name: module.$$name, $$proto: module.$$proto, $$parent: klass.$$parent, @@ -459,28 +579,24 @@ klass.$$parent = iclass; - var donator = module.$$proto, - prototype = klass.$$proto, - methods = module.$$methods; + donator = module.$$proto; + prototype = klass.$$proto; + methods = module.$instance_methods(); - for (var i = 0, length = methods.length; i < length; i++) { - var method = methods[i], current; + for (i = methods.length - 1; i >= 0; i--) { + id = '$' + methods[i]; - - if ( prototype.hasOwnProperty(method) && - !(current = prototype[method]).$$donated && !current.$$stub ) { - // if the target class already has a method of the same name defined - // and that method was NOT donated, then it must be a method defined - // by the class so we do not want to override it - } - else { - prototype[method] = donator[method]; - prototype[method].$$donated = true; + // if the target class already has a method of the same name defined + // and that method was NOT donated, then it must be a method defined + // by the class so we do not want to override it + if ( prototype.hasOwnProperty(id) && + !prototype[id].$$donated && + !prototype[id].$$stub) { + continue; } - } - if (klass.$$dep) { - donate_methods(klass, methods.slice(), true); + prototype[id] = donator[id]; + prototype[id].$$donated = module; } donate_constants(module, klass); @@ -489,14 +605,13 @@ // Boot a base class (makes instances). function boot_class_alloc(id, constructor, superklass) { if (superklass) { - var ctor = function() {}; - ctor.prototype = superklass.$$proto || superklass.prototype; - - if (id) { - ctor.displayName = id; - } + var alloc_proxy = function() {}; + alloc_proxy.prototype = superklass.$$proto || superklass.prototype; + constructor.prototype = new alloc_proxy(); + } - constructor.prototype = new ctor(); + if (id) { + constructor.displayName = id+'_alloc'; } constructor.prototype.constructor = constructor; @@ -504,15 +619,14 @@ return constructor; } - /* - * Builds the class object for core classes: - * - make the class object have a singleton class - * - make the singleton class inherit from its parent singleton class - * - * @param id [String] the name of the class - * @param alloc [Function] the constructor for the core class instances - * @param superclass [Class alloc] the constructor of the superclass - */ + // Builds the class object for core classes: + // - make the class object have a singleton class + // - make the singleton class inherit from its parent singleton class + // + // @param id [String] the name of the class + // @param alloc [Function] the constructor for the core class instances + // @param superclass [Class alloc] the constructor of the superclass + // function boot_core_class_object(id, alloc, superclass) { var superclass_constructor = function() {}; superclass_constructor.prototype = superclass.prototype; @@ -527,8 +641,9 @@ setup_module_or_class_object(klass, singleton_class, superclass, alloc.prototype); - klass.$$alloc = alloc; - klass.$$name = id; + klass.$$alloc = alloc; + klass.$$name = id; + klass.displayName = id; // Give all instances a ref to their class alloc.prototype.$$class = klass; @@ -539,87 +654,111 @@ return klass; } - /* - * For performance, some core ruby classes are toll-free bridged to their - * native javascript counterparts (e.g. a ruby Array is a javascript Array). - * - * This method is used to setup a native constructor (e.g. Array), to have - * its prototype act like a normal ruby class. Firstly, a new ruby class is - * created using the native constructor so that its prototype is set as the - * target for th new class. Note: all bridged classes are set to inherit - * from Object. - * - * Bridged classes are tracked in `bridged_classes` array so that methods - * defined on Object can be "donated" to all bridged classes. This allows - * us to fake the inheritance of a native prototype from our Object - * prototype. - * - * Example: - * - * bridge_class("Proc", Function); - * - * @param [String] name the name of the ruby class to create - * @param [Function] constructor native javascript constructor to use - * @param [Object] base where the bridge class is being created. If none is supplied, the top level scope (Opal) will be used - * @return [Class] returns new ruby class - */ - function bridge_class(name, constructor, base) { - var klass = boot_class_object(ObjectClass, constructor); - - klass.$$name = name; - - if (base === undefined) { - base = Opal; - } - else { - base = base.$$scope; + // For performance, some core Ruby classes are toll-free bridged to their + // native JavaScript counterparts (e.g. a Ruby Array is a JavaScript Array). + // + // This method is used to setup a native constructor (e.g. Array), to have + // its prototype act like a normal Ruby class. Firstly, a new Ruby class is + // created using the native constructor so that its prototype is set as the + // target for th new class. Note: all bridged classes are set to inherit + // from Object. + // + // Example: + // + // Opal.bridge(self, Function); + // + // @param [Class] klass the Ruby class to bridge + // @param [Function] constructor native JavaScript constructor to use + // @return [Class] returns the passed Ruby class + // + Opal.bridge = function(klass, constructor) { + if (constructor.$$bridge) { + throw Opal.ArgumentError.$new("already bridged"); } - create_scope(base, klass, name); - bridged_classes.push(klass); + Opal.stub_subscribers.push(constructor.prototype); + + constructor.prototype.$$class = klass; + constructor.$$bridge = klass; - var object_methods = BasicObjectClass.$$methods.concat(ObjectClass.$$methods); + var ancestors = klass.$ancestors(); - for (var i = 0, len = object_methods.length; i < len; i++) { - var meth = object_methods[i]; - constructor.prototype[meth] = ObjectClass.$$proto[meth]; + // order important here, we have to bridge from the last ancestor to the + // bridged class + for (var i = ancestors.length - 1; i >= 0; i--) { + _bridge(constructor, ancestors[i]); } - add_stubs_subscriber(constructor.prototype); + for (var name in BasicObject_alloc.prototype) { + var method = BasicObject_alloc.prototype[method]; + + if (method && method.$$stub && !(name in constructor.prototype)) { + constructor.prototype[name] = method; + } + } return klass; } - /* - * constant assign - */ + + // Constant assignment, see also `Opal.cdecl` + // + // @param base_module [Module, Class] the constant namespace + // @param name [String] the name of the constant + // @param value [Object] the value of the constant + // + // @example Assigning a namespaced constant + // self::FOO = 'bar' + // + // @example Assigning with Module#const_set + // Foo.const_set :BAR, 123 + // Opal.casgn = function(base_module, name, value) { - var scope = base_module.$$scope; + function update(klass, name) { + klass.$$name = name; - if (value.$$is_class && value.$$name === nil) { - value.$$name = name; + for (name in klass.$$scope) { + var value = klass.$$scope[name]; + + if (value.$$name === nil && (value.$$is_class || value.$$is_module)) { + update(value, name) + } + } } - if (value.$$is_class) { - value.$$base_module = base_module; + var scope = base_module.$$scope; + + if (value.$$is_class || value.$$is_module) { + // Only checking _Object prevents setting a const on an anonymous class + // that has a superclass that's not Object + if (value.$$is_class || value.$$base_module === _Object) { + value.$$base_module = base_module; + } + + if (value.$$name === nil && value.$$base_module.$$name !== nil) { + update(value, name); + } } scope.constants.push(name); return scope[name] = value; }; - /* - * constant decl - */ + // constant decl Opal.cdecl = function(base_scope, name, value) { + if ((value.$$is_class || value.$$is_module) && value.$$orig_scope == null) { + value.$$name = name; + value.$$orig_scope = base_scope; + base_scope.constructor[name] = value; + } + base_scope.constants.push(name); return base_scope[name] = value; }; - /* - * When a source module is included into the target module, we must also copy - * its constants to the target. - */ + // When a source module is included into the target module, we must also copy + // its constants to the target. + // function donate_constants(source_mod, target_mod) { var source_constants = source_mod.$$scope.constants, target_scope = target_mod.$$scope, @@ -631,43 +770,98 @@ } }; - /* - * Methods stubs are used to facilitate method_missing in opal. A stub is a - * placeholder function which just calls `method_missing` on the receiver. - * If no method with the given name is actually defined on an object, then it - * is obvious to say that the stub will be called instead, and then in turn - * method_missing will be called. - * - * When a file in ruby gets compiled to javascript, it includes a call to - * this function which adds stubs for every method name in the compiled file. - * It should then be safe to assume that method_missing will work for any - * method call detected. - * - * Method stubs are added to the BasicObject prototype, which every other - * ruby object inherits, so all objects should handle method missing. A stub - * is only added if the given property name (method name) is not already - * defined. - * - * Note: all ruby methods have a `$` prefix in javascript, so all stubs will - * have this prefix as well (to make this method more performant). - * - * Opal.add_stubs(["$foo", "$bar", "$baz="]); - * - * All stub functions will have a private `$$stub` property set to true so - * that other internal methods can detect if a method is just a stub or not. - * `Kernel#respond_to?` uses this property to detect a methods presence. - * - * @param [Array] stubs an array of method stubs to add - */ + // Donate methods for a module. + function donate(module, jsid) { + var included_in = module.$$dep, + body = module.$$proto[jsid], + i, length, includee, dest, current, + klass_includees, j, jj, current_owner_index, module_index; + + if (!included_in) { + return; + } + + for (i = 0, length = included_in.length; i < length; i++) { + includee = included_in[i]; + dest = includee.$$proto; + current = dest[jsid]; + + if (dest.hasOwnProperty(jsid) && !current.$$donated && !current.$$stub) { + // target class has already defined the same method name - do nothing + } + else if (dest.hasOwnProperty(jsid) && !current.$$stub) { + // target class includes another module that has defined this method + klass_includees = includee.$$inc; + + for (j = 0, jj = klass_includees.length; j < jj; j++) { + if (klass_includees[j] === current.$$donated) { + current_owner_index = j; + } + if (klass_includees[j] === module) { + module_index = j; + } + } + + // only redefine method on class if the module was included AFTER + // the module which defined the current method body. Also make sure + // a module can overwrite a method it defined before + if (current_owner_index <= module_index) { + dest[jsid] = body; + dest[jsid].$$donated = module; + } + } + else { + // neither a class, or module included by class, has defined method + dest[jsid] = body; + dest[jsid].$$donated = module; + } + + if (includee.$$dep) { + donate(includee, jsid); + } + } + }; + + // Methods stubs are used to facilitate method_missing in opal. A stub is a + // placeholder function which just calls `method_missing` on the receiver. + // If no method with the given name is actually defined on an object, then it + // is obvious to say that the stub will be called instead, and then in turn + // method_missing will be called. + // + // When a file in ruby gets compiled to javascript, it includes a call to + // this function which adds stubs for every method name in the compiled file. + // It should then be safe to assume that method_missing will work for any + // method call detected. + // + // Method stubs are added to the BasicObject prototype, which every other + // ruby object inherits, so all objects should handle method missing. A stub + // is only added if the given property name (method name) is not already + // defined. + // + // Note: all ruby methods have a `$` prefix in javascript, so all stubs will + // have this prefix as well (to make this method more performant). + // + // Opal.add_stubs(["$foo", "$bar", "$baz="]); + // + // All stub functions will have a private `$$stub` property set to true so + // that other internal methods can detect if a method is just a stub or not. + // `Kernel#respond_to?` uses this property to detect a methods presence. + // + // @param [Array] stubs an array of method stubs to add + // Opal.add_stubs = function(stubs) { - var subscribers = Opal.stub_subscribers; - var subscriber; + var subscriber, subscribers = Opal.stub_subscribers, + i, ilength = stubs.length, + j, jlength = subscribers.length, + method_name, stub; - for (var i = 0, length = stubs.length; i < length; i++) { - var method_name = stubs[i], stub = stub_for(method_name); + for (i = 0; i < ilength; i++) { + method_name = stubs[i]; + stub = stub_for(method_name); - for (var j = 0; j < subscribers.length; j++) { + for (j = 0; j < jlength; j++) { subscriber = subscribers[j]; + if (!(method_name in subscriber)) { subscriber[method_name] = stub; } @@ -675,41 +869,27 @@ } }; - /* - * Add a prototype to the subscribers list, and (TODO) add previously stubbed - * methods. - * - * @param [Prototype] - */ - function add_stubs_subscriber(prototype) { - // TODO: Add previously stubbed methods too. - Opal.stub_subscribers.push(prototype); - } - - /* - * Keep a list of prototypes that want method_missing stubs to be added. - * - * @default [Prototype List] BasicObject.prototype - */ - Opal.stub_subscribers = [BasicObject.prototype]; - - /* - * Add a method_missing stub function to the given prototype for the - * given name. - * - * @param [Prototype] prototype the target prototype - * @param [String] stub stub name to add (e.g. "$foo") - */ - function add_stub_for(prototype, stub) { + // Keep a list of prototypes that want method_missing stubs to be added. + // + // @default [Prototype List] BasicObject_alloc.prototype + // + Opal.stub_subscribers = [BasicObject_alloc.prototype]; + + // Add a method_missing stub function to the given prototype for the + // given name. + // + // @param [Prototype] prototype the target prototype + // @param [String] stub stub name to add (e.g. "$foo") + // + Opal.add_stub_for = function(prototype, stub) { var method_missing_stub = stub_for(stub); prototype[stub] = method_missing_stub; } - /* - * Generate the method_missing stub for a given method name. - * - * @param [String] method_name The js-name of the method to stub (e.g. "$foo") - */ + // Generate the method_missing stub for a given method name. + // + // @param [String] method_name The js-name of the method to stub (e.g. "$foo") + // function stub_for(method_name) { function method_missing_stub() { // Copy any given block onto the method_missing dispatcher @@ -727,25 +907,51 @@ return method_missing_stub; } - // Expose for other parts of Opal to use - Opal.add_stub_for = add_stub_for; - // Arity count error dispatcher Opal.ac = function(actual, expected, object, meth) { - var inspect = (object.$$is_class ? object.$$name + '.' : object.$$class.$$name + '#') + meth; - var msg = '[' + inspect + '] wrong number of arguments(' + actual + ' for ' + expected + ')'; - throw Opal.ArgumentError.$new(msg); + var inspect = ''; + if (object.$$is_class || object.$$is_module) { + inspect += object.$$name + '.'; + } + else { + inspect += object.$$class.$$name + '#'; + } + inspect += meth; + + throw Opal.ArgumentError.$new('[' + inspect + '] wrong number of arguments(' + actual + ' for ' + expected + ')'); }; + // The Array of ancestors for a given module/class + Opal.ancestors = function(module_or_class) { + var parent = module_or_class, + result = []; + + while (parent) { + result.push(parent); + for (var i=0; i < parent.$$inc.length; i++) { + result = result.concat(Opal.ancestors(parent.$$inc[i])); + } + + parent = parent.$$is_class ? parent.$$super : null; + } + + return result; + } + // Super dispatcher Opal.find_super_dispatcher = function(obj, jsid, current_func, iter, defs) { var dispatcher; if (defs) { - dispatcher = obj.$$is_class ? defs.$$super : obj.$$class.$$proto; + if (obj.$$is_class || obj.$$is_module) { + dispatcher = defs.$$super; + } + else { + dispatcher = obj.$$class.$$proto; + } } else { - if (obj.$$is_class) { + if (obj.$$is_class || obj.$$is_module) { dispatcher = obj.$$super; } else { @@ -804,14 +1010,13 @@ return klass.$$proto; }; - /* - * Used to return as an expression. Sometimes, we can't simply return from - * a javascript function as if we were a method, as the return is used as - * an expression, or even inside a block which must "return" to the outer - * method. This helper simply throws an error which is then caught by the - * method. This approach is expensive, so it is only used when absolutely - * needed. - */ + // Used to return as an expression. Sometimes, we can't simply return from + // a javascript function as if we were a method, as the return is used as + // an expression, or even inside a block which must "return" to the outer + // method. This helper simply throws an error which is then caught by the + // method. This approach is expensive, so it is only used when absolutely + // needed. + // Opal.ret = function(val) { Opal.returner.$v = val; throw Opal.returner; @@ -837,7 +1042,7 @@ throw Opal.LocalJumpError.$new("no block given"); } - if (block.length > 1 && args.length == 1) { + if (block.length > 1 && args.length === 1) { if (args[0].$$is_array) { return block.apply(null, args[0]); } @@ -884,7 +1089,7 @@ } for (var i = 0, length = search.$$inc.length; i < length; i++) { - if (search.$$inc[i] == klass) { + if (search.$$inc[i] === klass) { return true; } } @@ -895,35 +1100,74 @@ return false; }; - // Helper to convert the given object to an array + // Helpers for implementing multiple assignment + // Our code for extracting the values and assigning them only works if the + // return value is a JS array + // So if we get an Array subclass, extract the wrapped JS array from it + Opal.to_ary = function(value) { + // Used for: a, b = something (no splat) if (value.$$is_array) { - return value; + return (value.constructor === Array) ? value : value.literal; + } + else if (value['$respond_to?']('to_ary', true)) { + var ary = value.$to_ary(); + if (ary === nil) { + return [value]; + } + else if (ary.$$is_array) { + return (ary.constructor === Array) ? ary : ary.literal; + } + else { + throw Opal.TypeError.$new("Can't convert " + value.$$class + + " to Array (" + value.$$class + "#to_ary gives " + ary.$$class + ")"); + } } - else if (value.$to_ary && !value.$to_ary.$$stub) { - return value.$to_ary(); + else { + return [value]; } + }; - return [value]; + Opal.to_a = function(value) { + // Used for: a, b = *something (with splat) + if (value.$$is_array) { + // A splatted array must be copied + return (value.constructor === Array) ? value.slice() : value.literal.slice(); + } + else if (value['$respond_to?']('to_a', true)) { + var ary = value.$to_a(); + if (ary === nil) { + return [value]; + } + else if (ary.$$is_array) { + return (ary.constructor === Array) ? ary : ary.literal; + } + else { + throw Opal.TypeError.$new("Can't convert " + value.$$class + + " to Array (" + value.$$class + "#to_a gives " + ary.$$class + ")"); + } + } + else { + return [value]; + } }; - /** - Used to get a list of rest keyword arguments. Method takes the given - keyword args, i.e. the hash literal passed to the method containing all - keyword arguemnts passed to method, as well as the used args which are - the names of required and optional arguments defined. This method then - just returns all key/value pairs which have not been used, in a new - hash literal. - - @param given_args [Hash] all kwargs given to method - @param used_args [Object] all keys used as named kwargs - @return [Hash] - */ + // Used to get a list of rest keyword arguments. Method takes the given + // keyword args, i.e. the hash literal passed to the method containing all + // keyword arguemnts passed to method, as well as the used args which are + // the names of required and optional arguments defined. This method then + // just returns all key/value pairs which have not been used, in a new + // hash literal. + // + // @param given_args [Hash] all kwargs given to method + // @param used_args [Object] all keys used as named kwargs + // @return [Hash] + // Opal.kwrestargs = function(given_args, used_args) { var keys = [], map = {}, key = null, - given_map = given_args.smap; + given_map = given_args.$$smap; for (key in given_map) { if (!used_args[key]) { @@ -935,21 +1179,20 @@ return Opal.hash2(keys, map); }; - /* - * Call a ruby method on a ruby object with some arguments: - * - * var my_array = [1, 2, 3, 4] - * Opal.send(my_array, 'length') # => 4 - * Opal.send(my_array, 'reverse!') # => [4, 3, 2, 1] - * - * A missing method will be forwarded to the object via - * method_missing. - * - * The result of either call with be returned. - * - * @param [Object] recv the ruby object - * @param [String] mid ruby method to call - */ + // Call a ruby method on a ruby object with some arguments: + // + // var my_array = [1, 2, 3, 4] + // Opal.send(my_array, 'length') # => 4 + // Opal.send(my_array, 'reverse!') # => [4, 3, 2, 1] + // + // A missing method will be forwarded to the object via + // method_missing. + // + // The result of either call with be returned. + // + // @param [Object] recv the ruby object + // @param [String] mid ruby method to call + // Opal.send = function(recv, mid) { var args = $slice.call(arguments, 2), func = recv['$' + mid]; @@ -973,479 +1216,615 @@ return recv.$method_missing.apply(recv, [mid].concat(args)); }; - /* - * Donate methods for a class/module - */ - function donate_methods(klass, defined, indirect) { - var methods = klass.$$methods, included_in = klass.$$dep; - - // if (!indirect) { - klass.$$methods = methods.concat(defined); - // } + // Used to define methods on an object. This is a helper method, used by the + // compiled source to define methods on special case objects when the compiler + // can not determine the destination object, or the object is a Module + // instance. This can get called by `Module#define_method` as well. + // + // ## Modules + // + // Any method defined on a module will come through this runtime helper. + // The method is added to the module body, and the owner of the method is + // set to be the module itself. This is used later when choosing which + // method should show on a class if more than 1 included modules define + // the same method. Finally, if the module is in `module_function` mode, + // then the method is also defined onto the module itself. + // + // ## Classes + // + // This helper will only be called for classes when a method is being + // defined indirectly; either through `Module#define_method`, or by a + // literal `def` method inside an `instance_eval` or `class_eval` body. In + // either case, the method is simply added to the class' prototype. A special + // exception exists for `BasicObject` and `Object`. These two classes are + // special because they are used in toll-free bridged classes. In each of + // these two cases, extra work is required to define the methods on toll-free + // bridged class' prototypes as well. + // + // ## Objects + // + // If a simple ruby object is the object, then the method is simply just + // defined on the object as a singleton method. This would be the case when + // a method is defined inside an `instance_eval` block. + // + // @param [RubyObject or Class] obj the actual obj to define method for + // @param [String] jsid the javascript friendly method name (e.g. '$foo') + // @param [Function] body the literal javascript function used as method + // @return [null] + // + Opal.defn = function(obj, jsid, body) { + obj.$$proto[jsid] = body; - if (included_in) { - for (var i = 0, length = included_in.length; i < length; i++) { - var includee = included_in[i]; - var dest = includee.$$proto; + if (obj.$$is_module) { + donate(obj, jsid); - for (var j = 0, jj = defined.length; j < jj; j++) { - var method = defined[j]; + if (obj.$$module_function) { + Opal.defs(obj, jsid, body); + } + } - dest[method] = klass.$$proto[method]; - dest[method].$$donated = true; - } + if (obj.$__id__ && !obj.$__id__.$$stub) { + var bridged = bridges[obj.$__id__()]; - if (includee.$$dep) { - donate_methods(includee, defined, true); + if (bridged) { + for (var i = bridged.length - 1; i >= 0; i--) { + bridge_method(bridged[i], obj, jsid, body); } } } - }; - - /** - Define the given method on the module. - - This also handles donating methods to all classes that include this - module. Method conflicts are also handled here, where a class might already - have defined a method of the same name, or another included module defined - the same method. - @param [RubyModule] module the module method defined on - @param [String] jsid javascript friendly method name (e.g. "$foo") - @param [Function] body method body of actual function - */ - function define_module_method(module, jsid, body) { - module.$$proto[jsid] = body; - body.$$owner = module; - - module.$$methods.push(jsid); - - if (module.$$module_function) { - module[jsid] = body; + if (obj.$method_added && !obj.$method_added.$$stub) { + obj.$method_added(jsid.substr(1)); } - var included_in = module.$$dep; + var singleton_of = obj.$$singleton_of; + if (singleton_of && singleton_of.$singleton_method_added && !singleton_of.$singleton_method_added.$$stub) { + singleton_of.$singleton_method_added(jsid.substr(1)); + } - if (included_in) { - for (var i = 0, length = included_in.length; i < length; i++) { - var includee = included_in[i]; - var dest = includee.$$proto; - var current = dest[jsid]; + return nil; + }; - if (dest.hasOwnProperty(jsid) && !current.$$donated && !current.$$stub) { - // target class has already defined the same method name - do nothing - } - else if (dest.hasOwnProperty(jsid) && !current.$$stub) { - // target class includes another module that has defined this method - var klass_includees = includee.$$inc; + // Define a singleton method on the given object. + Opal.defs = function(obj, jsid, body) { + Opal.defn(Opal.get_singleton_class(obj), jsid, body) + }; - for (var j = 0, jj = klass_includees.length; j < jj; j++) { - if (klass_includees[j] === current.$$owner) { - var current_owner_index = j; - } - if (klass_includees[j] === module) { - var module_index = j; - } - } + Opal.def = function(obj, jsid, body) { + // if instance_eval is invoked on a module/class, it sets inst_eval_mod + if (!obj.$$eval && (obj.$$is_class || obj.$$is_module)) { + Opal.defn(obj, jsid, body); + } + else { + Opal.defs(obj, jsid, body); + } + }; - // only redefine method on class if the module was included AFTER - // the module which defined the current method body. Also make sure - // a module can overwrite a method it defined before - if (current_owner_index <= module_index) { - dest[jsid] = body; - dest[jsid].$$donated = true; - } - } - else { - // neither a class, or module included by class, has defined method - dest[jsid] = body; - dest[jsid].$$donated = true; - } + // Called from #remove_method. + Opal.rdef = function(obj, jsid) { + // TODO: remove from bridges as well - if (includee.$$dep) { - donate_methods(includee, [jsid], true); - } - } + if (!$hasOwn.call(obj.$$proto, jsid)) { + throw Opal.NameError.$new("method '" + jsid.substr(1) + "' not defined in " + obj.$name()); } - } - /** - Used to define methods on an object. This is a helper method, used by the - compiled source to define methods on special case objects when the compiler - can not determine the destination object, or the object is a Module - instance. This can get called by `Module#define_method` as well. - - ## Modules - - Any method defined on a module will come through this runtime helper. - The method is added to the module body, and the owner of the method is - set to be the module itself. This is used later when choosing which - method should show on a class if more than 1 included modules define - the same method. Finally, if the module is in `module_function` mode, - then the method is also defined onto the module itself. - - ## Classes - - This helper will only be called for classes when a method is being - defined indirectly; either through `Module#define_method`, or by a - literal `def` method inside an `instance_eval` or `class_eval` body. In - either case, the method is simply added to the class' prototype. A special - exception exists for `BasicObject` and `Object`. These two classes are - special because they are used in toll-free bridged classes. In each of - these two cases, extra work is required to define the methods on toll-free - bridged class' prototypes as well. - - ## Objects - - If a simple ruby object is the object, then the method is simply just - defined on the object as a singleton method. This would be the case when - a method is defined inside an `instance_eval` block. - - @param [RubyObject or Class] obj the actual obj to define method for - @param [String] jsid the javascript friendly method name (e.g. '$foo') - @param [Function] body the literal javascript function used as method - @returns [null] - */ - Opal.defn = function(obj, jsid, body) { - if (obj.$$is_mod) { - define_module_method(obj, jsid, body); - } - else if (obj.$$is_class) { - obj.$$proto[jsid] = body; + delete obj.$$proto[jsid]; - if (obj === BasicObjectClass) { - define_basic_object_method(jsid, body); - } - else if (obj === ObjectClass) { - donate_methods(obj, [jsid]); + if (obj.$$is_singleton) { + if (obj.$$proto.$singleton_method_removed && !obj.$$proto.$singleton_method_removed.$$stub) { + obj.$$proto.$singleton_method_removed(jsid.substr(1)); } } else { - obj[jsid] = body; + if (obj.$method_removed && !obj.$method_removed.$$stub) { + obj.$method_removed(jsid.substr(1)); + } } - - return nil; }; - /* - * Define a singleton method on the given object. - */ - Opal.defs = function(obj, jsid, body) { - if (obj.$$is_class || obj.$$is_mod) { - obj.constructor.prototype[jsid] = body; + // Called from #undef_method. + Opal.udef = function(obj, jsid) { + if (!obj.$$proto[jsid] || obj.$$proto[jsid].$$stub) { + throw Opal.NameError.$new("method '" + jsid.substr(1) + "' not defined in " + obj.$name()); + } + + Opal.add_stub_for(obj.$$proto, jsid); + + if (obj.$$is_singleton) { + if (obj.$$proto.$singleton_method_undefined && !obj.$$proto.$singleton_method_undefined.$$stub) { + obj.$$proto.$singleton_method_undefined(jsid.substr(1)); + } } else { - obj[jsid] = body; + if (obj.$method_undefined && !obj.$method_undefined.$$stub) { + obj.$method_undefined(jsid.substr(1)); + } } }; - function define_basic_object_method(jsid, body) { - BasicObjectClass.$$methods.push(jsid); - for (var i = 0, len = bridged_classes.length; i < len; i++) { - bridged_classes[i].$$proto[jsid] = body; + Opal.alias = function(obj, name, old) { + var id = '$' + name, + old_id = '$' + old, + body = obj.$$proto['$' + old]; + + // instance_eval is being run on a class/module, so that need to alias class methods + if (obj.$$eval) { + return Opal.alias(Opal.get_singleton_class(obj), name, old); } - } - /* - * Called to remove a method. - */ - Opal.undef = function(obj, jsid) { - delete obj.$$proto[jsid]; - }; + if (typeof(body) !== "function" || body.$$stub) { + var ancestor = obj.$$super; - Opal.hash = function() { - if (arguments.length == 1 && arguments[0].$$class == Opal.Hash) { - return arguments[0]; + while (typeof(body) !== "function" && ancestor) { + body = ancestor[old_id]; + ancestor = ancestor.$$super; + } + + if (typeof(body) !== "function" || body.$$stub) { + throw Opal.NameError.$new("undefined method `" + old + "' for class `" + obj.$name() + "'") + } } - var hash = new Opal.Hash.$$alloc(), - keys = [], - _map = {}, - smap = {}, - key, obj, length, khash, map; + Opal.defn(obj, id, body); - hash.map = _map; - hash.smap = smap; - hash.keys = keys; + return obj; + }; - if (arguments.length == 1) { - if (arguments[0].$$is_array) { - var args = arguments[0]; + Opal.alias_native = function(obj, name, native_name) { + var id = '$' + name, + body = obj.$$proto[native_name]; - for (var i = 0, ii = args.length; i < ii; i++) { - var pair = args[i]; + if (typeof(body) !== "function" || body.$$stub) { + throw Opal.NameError.$new("undefined native method `" + native_name + "' for class `" + obj.$name() + "'") + } - if (pair.length !== 2) { - throw Opal.ArgumentError.$new("value not of length 2: " + pair.$inspect()); - } + Opal.defn(obj, id, body); - key = pair[0]; - obj = pair[1]; + return obj; + }; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; - } + Opal.hash_init = function(hash) { + hash.$$map = {}; + hash.$$smap = {}; + hash.$$keys = []; + }; - if (map[khash] == null) { - keys.push(key); - } + Opal.hash_clone = function(from_hash, to_hash) { + to_hash.none = from_hash.none; + to_hash.proc = from_hash.proc; - map[khash] = obj; - } - } - else { - obj = arguments[0]; - for (key in obj) { - khash = key.$hash(); - smap[khash] = obj[khash]; - keys.push(key); - } + for (var i = 0, keys = from_hash.$$keys, length = keys.length, key, value; i < length; i++) { + key = from_hash.$$keys[i]; + + if (key.$$is_string) { + value = from_hash.$$smap[key]; + } else { + value = key.value; + key = key.key; } + + Opal.hash_put(to_hash, key, value); } - else { - length = arguments.length; - if (length % 2 !== 0) { - throw Opal.ArgumentError.$new("odd number of arguments for Hash"); + }; + + Opal.hash_put = function(hash, key, value) { + if (key.$$is_string) { + if (!hash.$$smap.hasOwnProperty(key)) { + hash.$$keys.push(key); } + hash.$$smap[key] = value; + return; + } - for (var j = 0; j < length; j++) { - key = arguments[j]; - obj = arguments[++j]; + var key_hash = key.$hash(), bucket, last_bucket; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; - } + if (!hash.$$map.hasOwnProperty(key_hash)) { + bucket = {key: key, key_hash: key_hash, value: value}; + hash.$$keys.push(bucket); + hash.$$map[key_hash] = bucket; + return; + } - if (map[khash] == null) { - keys.push(key); - } + bucket = hash.$$map[key_hash]; - map[khash] = obj; + while (bucket) { + if (key === bucket.key || key['$eql?'](bucket.key)) { + last_bucket = undefined; + bucket.value = value; + break; } + last_bucket = bucket; + bucket = bucket.next; } - return hash; + if (last_bucket) { + bucket = {key: key, key_hash: key_hash, value: value}; + hash.$$keys.push(bucket); + last_bucket.next = bucket; + } }; - /* - * hash2 is a faster creator for hashes that just use symbols and - * strings as keys. The map and keys array can be constructed at - * compile time, so they are just added here by the constructor - * function - */ - Opal.hash2 = function(keys, map) { - var hash = new Opal.Hash.$$alloc(); - - hash.keys = keys; - hash.map = {}; - hash.smap = map; + Opal.hash_get = function(hash, key) { + if (key.$$is_string) { + if (hash.$$smap.hasOwnProperty(key)) { + return hash.$$smap[key]; + } + return; + } - return hash; - }; + var key_hash = key.$hash(), bucket; - /* - * Create a new range instance with first and last values, and whether the - * range excludes the last value. - */ - Opal.range = function(first, last, exc) { - var range = new Opal.Range.$$alloc(); - range.begin = first; - range.end = last; - range.exclude = exc; + if (hash.$$map.hasOwnProperty(key_hash)) { + bucket = hash.$$map[key_hash]; - return range; + while (bucket) { + if (key === bucket.key || key['$eql?'](bucket.key)) { + return bucket.value; + } + bucket = bucket.next; + } + } }; - // Require system - // -------------- - (function(Opal) { - var loaded_features = ['corelib/runtime'], - require_table = {'corelib/runtime': true}, - modules = {}; + Opal.hash_delete = function(hash, key) { + var i, keys = hash.$$keys, length = keys.length, value; - var current_dir = '.'; + if (key.$$is_string) { + if (!hash.$$smap.hasOwnProperty(key)) { + return; + } - function mark_as_loaded(filename) { - if (require_table[filename]) { - return false; + for (i = 0; i < length; i++) { + if (keys[i] === key) { + keys.splice(i, 1); + break; + } } - loaded_features.push(filename); - require_table[filename] = true; + value = hash.$$smap[key]; + delete hash.$$smap[key]; + return value; + } - return true; + var key_hash = key.$hash(); + + if (!hash.$$map.hasOwnProperty(key_hash)) { + return; + } + + var bucket = hash.$$map[key_hash], last_bucket; + + while (bucket) { + if (key === bucket.key || key['$eql?'](bucket.key)) { + value = bucket.value; + + for (i = 0; i < length; i++) { + if (keys[i] === bucket) { + keys.splice(i, 1); + break; + } + } + + if (last_bucket && bucket.next) { + last_bucket.next = bucket.next; + } + else if (last_bucket) { + delete last_bucket.next; + } + else if (bucket.next) { + hash.$$map[key_hash] = bucket.next; + } + else { + delete hash.$$map[key_hash]; + } + + return value; + } + last_bucket = bucket; + bucket = bucket.next; } + }; - function normalize_loadable_path(path) { - var parts, part, new_parts = [], SEPARATOR = '/'; + Opal.hash_rehash = function(hash) { + for (var i = 0, length = hash.$$keys.length, key_hash, bucket, last_bucket; i < length; i++) { - if (current_dir !== '.') { - path = current_dir.replace(/\/*$/, '/') + path; + if (hash.$$keys[i].$$is_string) { + continue; } - path = path.replace(/\.(rb|opal|js)$/, ''); - parts = path.split(SEPARATOR); + key_hash = hash.$$keys[i].key.$hash(); - for (var i = 0, ii = parts.length; i < ii; i++) { - part = parts[i]; - if (part == '') continue; - (part === '..') ? new_parts.pop() : new_parts.push(part) + if (key_hash === hash.$$keys[i].key_hash) { + continue; } - return new_parts.join(SEPARATOR); - } + bucket = hash.$$map[hash.$$keys[i].key_hash]; + last_bucket = undefined; - function load(path) { - mark_as_loaded(path); + while (bucket) { + if (bucket === hash.$$keys[i]) { + if (last_bucket && bucket.next) { + last_bucket.next = bucket.next; + } + else if (last_bucket) { + delete last_bucket.next; + } + else if (bucket.next) { + hash.$$map[hash.$$keys[i].key_hash] = bucket.next; + } + else { + delete hash.$$map[hash.$$keys[i].key_hash]; + } + break; + } + last_bucket = bucket; + bucket = bucket.next; + } - var module = modules[path]; + hash.$$keys[i].key_hash = key_hash; - if (module) { - module(Opal); + if (!hash.$$map.hasOwnProperty(key_hash)) { + hash.$$map[key_hash] = hash.$$keys[i]; + continue; } - else { - var severity = Opal.dynamic_require_severity || 'warning'; - var message = 'cannot load such file -- ' + path; - if (severity === "error") { - Opal.LoadError ? Opal.LoadError.$new(message) : function(){throw message}(); + bucket = hash.$$map[key_hash]; + last_bucket = undefined; + + while (bucket) { + if (bucket === hash.$$keys[i]) { + last_bucket = undefined; + break; } - else if (severity === "warning") { - console.warn('WARNING: LoadError: ' + message); + last_bucket = bucket; + bucket = bucket.next; + } + + if (last_bucket) { + last_bucket.next = hash.$$keys[i]; + } + } + }; + + Opal.hash = function() { + var arguments_length = arguments.length, args, hash, i, length, key, value; + + if (arguments_length === 1 && arguments[0].$$is_hash) { + return arguments[0]; + } + + hash = new Opal.Hash.$$alloc(); + Opal.hash_init(hash); + + if (arguments_length === 1 && arguments[0].$$is_array) { + args = arguments[0]; + length = args.length; + + for (i = 0; i < length; i++) { + if (args[i].length !== 2) { + throw Opal.ArgumentError.$new("value not of length 2: " + args[i].$inspect()); } + + key = args[i][0]; + value = args[i][1]; + + Opal.hash_put(hash, key, value); } - return true; + return hash; } - function require(path) { - if (require_table[path]) { - return false; + if (arguments_length === 1) { + args = arguments[0]; + for (key in args) { + if (args.hasOwnProperty(key)) { + value = args[key]; + + Opal.hash_put(hash, key, value); + } } - return load(path); + return hash; } - Opal.modules = modules; - Opal.loaded_features = loaded_features; + if (arguments_length % 2 !== 0) { + throw Opal.ArgumentError.$new("odd number of arguments for Hash"); + } - Opal.normalize_loadable_path = normalize_loadable_path; - Opal.mark_as_loaded = mark_as_loaded; + for (i = 0; i < arguments_length; i += 2) { + key = arguments[i]; + value = arguments[i + 1]; - Opal.load = load; - Opal.require = require; - })(Opal); + Opal.hash_put(hash, key, value); + } - // Initialization + return hash; + }; + + // hash2 is a faster creator for hashes that just use symbols and + // strings as keys. The map and keys array can be constructed at + // compile time, so they are just added here by the constructor + // function + // + Opal.hash2 = function(keys, smap) { + var hash = new Opal.Hash.$$alloc(); + + hash.$$map = {}; + hash.$$keys = keys; + hash.$$smap = smap; + + return hash; + }; + + // Create a new range instance with first and last values, and whether the + // range excludes the last value. + // + Opal.range = function(first, last, exc) { + var range = new Opal.Range.$$alloc(); + range.begin = first; + range.end = last; + range.exclude = exc; + + return range; + }; + + Opal.ivar = function(name) { + if ( + // properties + name === "constructor" || + name === "displayName" || + name === "__count__" || + name === "__noSuchMethod__" || + name === "__parent__" || + name === "__proto__" || + + // methods + name === "hasOwnProperty" || + name === "valueOf" + ) + { + return name + "$"; + } + + return name; + }; + + // Require system // -------------- - // The actual class for BasicObject - var BasicObjectClass; + Opal.modules = {}; + Opal.loaded_features = ['corelib/runtime']; + Opal.current_dir = '.' + Opal.require_table = {'corelib/runtime': true}; - // The actual Object class - var ObjectClass; + function normalize(path) { + var parts, part, new_parts = [], SEPARATOR = '/'; - // The actual Module class - var ModuleClass; + if (Opal.current_dir !== '.') { + path = Opal.current_dir.replace(/\/*$/, '/') + path; + } - // The actual Class class - var ClassClass; + path = path.replace(/\.(rb|opal|js)$/, ''); + parts = path.split(SEPARATOR); - // Constructor for instances of BasicObject - function BasicObject(){} + for (var i = 0, ii = parts.length; i < ii; i++) { + part = parts[i]; + if (part === '') continue; + (part === '..') ? new_parts.pop() : new_parts.push(part) + } - // Constructor for instances of Object - function Object(){} + return new_parts.join(SEPARATOR); + } - // Constructor for instances of Class - function Class(){} + Opal.loaded = function(paths) { + var i, l, path; - // Constructor for instances of Module - function Module(){} + for (i = 0, l = paths.length; i < l; i++) { + path = normalize(paths[i]); - // Constructor for instances of NilClass (nil) - function NilClass(){} + if (Opal.require_table[path]) { + return; + } + + Opal.loaded_features.push(path); + Opal.require_table[path] = true; + } + } + + Opal.load = function(path) { + path = normalize(path); + + Opal.loaded([path]); + + var module = Opal.modules[path]; + + if (module) { + module(Opal); + } + else { + var severity = Opal.dynamic_require_severity || 'warning'; + var message = 'cannot load such file -- ' + path; + + if (severity === "error") { + Opal.LoadError ? Opal.LoadError.$new(message) : function(){throw message}(); + } + else if (severity === "warning") { + console.warn('WARNING: LoadError: ' + message); + } + } + + return true; + } + + Opal.require = function(path) { + path = normalize(path); + + if (Opal.require_table[path]) { + return false; + } + + return Opal.load(path); + } + + // Initialization + // -------------- // Constructors for *instances* of core objects - boot_class_alloc('BasicObject', BasicObject); - boot_class_alloc('Object', Object, BasicObject); - boot_class_alloc('Module', Module, Object); - boot_class_alloc('Class', Class, Module); + boot_class_alloc('BasicObject', BasicObject_alloc); + boot_class_alloc('Object', Object_alloc, BasicObject_alloc); + boot_class_alloc('Module', Module_alloc, Object_alloc); + boot_class_alloc('Class', Class_alloc, Module_alloc); // Constructors for *classes* of core objects - BasicObjectClass = boot_core_class_object('BasicObject', BasicObject, Class); - ObjectClass = boot_core_class_object('Object', Object, BasicObjectClass.constructor); - ModuleClass = boot_core_class_object('Module', Module, ObjectClass.constructor); - ClassClass = boot_core_class_object('Class', Class, ModuleClass.constructor); + BasicObject = boot_core_class_object('BasicObject', BasicObject_alloc, Class_alloc); + _Object = boot_core_class_object('Object', Object_alloc, BasicObject.constructor); + Module = boot_core_class_object('Module', Module_alloc, _Object.constructor); + Class = boot_core_class_object('Class', Class_alloc, Module.constructor); // Fix booted classes to use their metaclass - BasicObjectClass.$$class = ClassClass; - ObjectClass.$$class = ClassClass; - ModuleClass.$$class = ClassClass; - ClassClass.$$class = ClassClass; + BasicObject.$$class = Class; + _Object.$$class = Class; + Module.$$class = Class; + Class.$$class = Class; // Fix superclasses of booted classes - BasicObjectClass.$$super = null; - ObjectClass.$$super = BasicObjectClass; - ModuleClass.$$super = ObjectClass; - ClassClass.$$super = ModuleClass; - - BasicObjectClass.$$parent = null; - ObjectClass.$$parent = BasicObjectClass; - ModuleClass.$$parent = ObjectClass; - ClassClass.$$parent = ModuleClass; - - // Internally, Object acts like a module as it is "included" into bridged - // classes. In other words, we donate methods from Object into our bridged - // classes as their prototypes don't inherit from our root Object, so they - // act like module includes. - ObjectClass.$$dep = bridged_classes; - - Opal.base = ObjectClass; - BasicObjectClass.$$scope = ObjectClass.$$scope = Opal; - BasicObjectClass.$$orig_scope = ObjectClass.$$orig_scope = Opal; - Opal.Kernel = ObjectClass; - - ModuleClass.$$scope = ObjectClass.$$scope; - ModuleClass.$$orig_scope = ObjectClass.$$orig_scope; - ClassClass.$$scope = ObjectClass.$$scope; - ClassClass.$$orig_scope = ObjectClass.$$orig_scope; - - ObjectClass.$$proto.toString = function() { + BasicObject.$$super = null; + _Object.$$super = BasicObject; + Module.$$super = _Object; + Class.$$super = Module; + + BasicObject.$$parent = null; + _Object.$$parent = BasicObject; + Module.$$parent = _Object; + Class.$$parent = Module; + + Opal.base = _Object; + BasicObject.$$scope = _Object.$$scope = Opal; + BasicObject.$$orig_scope = _Object.$$orig_scope = Opal; + + Module.$$scope = _Object.$$scope; + Module.$$orig_scope = _Object.$$orig_scope; + Class.$$scope = _Object.$$scope; + Class.$$orig_scope = _Object.$$orig_scope; + + _Object.$$proto.toString = function() { return this.$to_s(); }; - ObjectClass.$$proto.$require = Opal.require; + _Object.$$proto.$require = Opal.require; - Opal.top = new ObjectClass.$$alloc(); + Opal.top = new _Object.$$alloc(); // Nil - Opal.klass(ObjectClass, ObjectClass, 'NilClass', NilClass); - var nil = Opal.nil = new NilClass(); + Opal.klass(_Object, _Object, 'NilClass', NilClass_alloc); + nil = Opal.nil = new NilClass_alloc(); nil.$$id = nil_id; nil.call = nil.apply = function() { throw Opal.LocalJumpError.$new('no block given'); }; Opal.breaker = new Error('unexpected break'); Opal.returner = new Error('unexpected return'); - bridge_class('Array', Array); - bridge_class('Boolean', Boolean); - bridge_class('Numeric', Number); - bridge_class('String', String); - bridge_class('Proc', Function); - bridge_class('Exception', Error); - bridge_class('Regexp', RegExp); - bridge_class('Time', Date); - TypeError.$$super = Error; }).call(this); @@ -1453,22 +1832,30 @@ if (typeof(global) !== 'undefined') { global.Opal = this.Opal; Opal.global = global; } + if (typeof(window) !== 'undefined') { window.Opal = this.Opal; Opal.global = window; } -Opal.mark_as_loaded(Opal.normalize_loadable_path("corelib/runtime")); -/* Generated by Opal 0.8.0 */ +Opal.loaded(["corelib/runtime"]); +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/helpers"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - Opal.add_stubs(['$new', '$class', '$===', '$respond_to?', '$raise', '$type_error', '$__send__', '$coerce_to', '$nil?', '$<=>', '$inspect']); + Opal.add_stubs(['$new', '$class', '$===', '$respond_to?', '$raise', '$type_error', '$__send__', '$coerce_to', '$nil?', '$<=>', '$inspect', '$coerce_to!']); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; + Opal.defs(self, '$bridge', function(klass, constructor) { + var self = this; + + return Opal.bridge(klass, constructor); + }); + Opal.defs(self, '$type_error', function(object, type, method, coerced) { var $a, $b, self = this; @@ -1478,7 +1865,7 @@ Opal.modules["corelib/helpers"] = function(Opal) { if (coerced == null) { coerced = nil } - if ((($a = (($b = method !== false && method !== nil) ? coerced : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = (($b = method !== false && method !== nil) ? coerced : method)) !== nil && (!$a.$$is_boolean || $a == true))) { return $scope.get('TypeError').$new("can't convert " + (object.$class()) + " into " + (type) + " (" + (object.$class()) + "#" + (method) + " gives " + (coerced.$class())) } else { return $scope.get('TypeError').$new("no implicit conversion of " + (object.$class()) + " into " + (type)) @@ -1591,15 +1978,33 @@ Opal.modules["corelib/helpers"] = function(Opal) { } }); - })(self) + + Opal.defs(self, '$instance_variable_name!', function(name) { + var $a, self = this; + + name = $scope.get('Opal')['$coerce_to!'](name, $scope.get('String'), "to_str"); + if ((($a = /^@[a-zA-Z_][a-zA-Z0-9_]*?$/.test(name)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('NameError').$new("'" + (name) + "' is not allowed as an instance variable name", name)) + }; + return name; + }); + })($scope.base) }; -/* Generated by Opal 0.8.0 */ +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/module"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - Opal.add_stubs(['$attr_reader', '$attr_writer', '$coerce_to!', '$raise', '$=~', '$[]', '$!', '$==', '$inject', '$const_get', '$split', '$const_missing', '$to_str', '$===', '$to_proc', '$lambda', '$bind', '$call', '$class', '$append_features', '$included', '$name', '$new', '$to_s', '$__id__']); + Opal.add_stubs(['$===', '$raise', '$equal?', '$<', '$>', '$nil?', '$attr_reader', '$attr_writer', '$coerce_to!', '$new', '$=~', '$inject', '$const_get', '$split', '$const_missing', '$to_str', '$to_proc', '$lambda', '$bind', '$call', '$class', '$append_features', '$included', '$name', '$to_s', '$__id__']); return (function($base, $super) { function $Module(){}; var self = $Module = $klass($base, $super, 'Module', $Module); @@ -1611,13 +2016,12 @@ Opal.modules["corelib/module"] = function(Opal) { TMP_1.$$p = null; - function AnonModule(){} - var klass = Opal.boot(Opal.Module, AnonModule); - klass.$$name = nil; - klass.$$class = Opal.Module; - klass.$$dep = [] - klass.$$is_mod = true; - klass.$$proto = {}; + var klass = Opal.boot_module_object(); + klass.$$name = nil; + klass.$$class = Opal.Module; + klass.$$dep = [] + klass.$$is_module = true; + klass.$$proto = {}; // inherit scope from parent Opal.create_scope(Opal.Module.$$scope, klass); @@ -1633,116 +2037,167 @@ Opal.modules["corelib/module"] = function(Opal) { }); - def['$==='] = function(object) { + Opal.defn(self, '$===', function(object) { var $a, self = this; if ((($a = object == null) !== nil && (!$a.$$is_boolean || $a == true))) { return false}; return Opal.is_a(object, self); - }; + }); - def['$<'] = function(other) { - var self = this; + Opal.defn(self, '$<', function(other) { + var $a, self = this; + if ((($a = $scope.get('Module')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "compared with non class/module") + }; - var working = self; + var working = self, + ancestors, + i, length; + + if (working === other) { + return false; + } - while (working) { - if (working === other) { + for (i = 0, ancestors = Opal.ancestors(self), length = ancestors.length; i < length; i++) { + if (ancestors[i] === other) { return true; } + } - working = working.$$parent; + for (i = 0, ancestors = Opal.ancestors(other), length = ancestors.length; i < length; i++) { + if (ancestors[i] === self) { + return false; + } } - return false; + return nil; - }; + }); - def.$alias_method = function(newname, oldname) { - var self = this; + Opal.defn(self, '$<=', function(other) { + var $a, self = this; - - var newjsid = '$' + newname, - body = self.$$proto['$' + oldname]; + return ((($a = self['$equal?'](other)) !== false && $a !== nil) ? $a : $rb_lt(self, other)); + }); - if (self.$$is_singleton) { - self.$$proto[newjsid] = body; - } - else { - Opal.defn(self, newjsid, body); - } + Opal.defn(self, '$>', function(other) { + var $a, self = this; - return self; + if ((($a = $scope.get('Module')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "compared with non class/module") + }; + return $rb_lt(other, self); + }); + + Opal.defn(self, '$>=', function(other) { + var $a, self = this; + + return ((($a = self['$equal?'](other)) !== false && $a !== nil) ? $a : $rb_gt(self, other)); + }); + + Opal.defn(self, '$<=>', function(other) { + var $a, self = this, lt = nil; + + + if (self === other) { + return 0; + } + if ((($a = $scope.get('Module')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return nil + }; + lt = $rb_lt(self, other); + if ((($a = lt['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + if (lt !== false && lt !== nil) { + return -1 + } else { + return 1 + }; + }); + + Opal.defn(self, '$alias_method', function(newname, oldname) { + var self = this; + + Opal.alias(self, newname, oldname); return self; - }; + }); - def.$alias_native = function(mid, jsid) { + Opal.defn(self, '$alias_native', function(mid, jsid) { var self = this; if (jsid == null) { jsid = mid } - return self.$$proto['$' + mid] = self.$$proto[jsid]; - }; + Opal.alias_native(self, mid, jsid); + return self; + }); - def.$ancestors = function() { + Opal.defn(self, '$ancestors', function() { var self = this; - - var parent = self, - result = []; - - while (parent) { - result.push(parent); - result = result.concat(parent.$$inc); - - parent = parent.$$super; - } - - return result; - - }; + return Opal.ancestors(self); + }); - def.$append_features = function(klass) { + Opal.defn(self, '$append_features', function(klass) { var self = this; Opal.append_features(self, klass); return self; - }; + }); - def.$attr_accessor = function(names) { - var $a, $b, self = this; + Opal.defn(self, '$attr_accessor', function() { + var $a, $b, self = this, $splat_index = nil; - names = $slice.call(arguments, 0); - ($a = self).$attr_reader.apply($a, [].concat(names)); - return ($b = self).$attr_writer.apply($b, [].concat(names)); - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } + ($a = self).$attr_reader.apply($a, Opal.to_a(names)); + return ($b = self).$attr_writer.apply($b, Opal.to_a(names)); + }); - Opal.defn(self, '$attr', def.$attr_accessor); + Opal.alias(self, 'attr', 'attr_accessor'); - def.$attr_reader = function(names) { - var self = this; + Opal.defn(self, '$attr_reader', function() { + var self = this, $splat_index = nil; - names = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } var proto = self.$$proto; for (var i = names.length - 1; i >= 0; i--) { var name = names[i], - id = '$' + name; + id = '$' + name, + ivar = Opal.ivar(name); // the closure here is needed because name will change at the next // cycle, I wish we could use let. - var body = (function(name) { + var body = (function(ivar) { return function() { - return this[name]; + if (this[ivar] == null) { + return nil; + } + else { + return this[ivar]; + } }; - })(name); + })(ivar); // initialize the instance variable as nil - proto[name] = nil; + proto[ivar] = nil; if (self.$$is_singleton) { proto.constructor.prototype[id] = body; @@ -1753,29 +2208,35 @@ Opal.modules["corelib/module"] = function(Opal) { } return nil; - }; + }); - def.$attr_writer = function(names) { - var self = this; + Opal.defn(self, '$attr_writer', function() { + var self = this, $splat_index = nil; - names = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } var proto = self.$$proto; for (var i = names.length - 1; i >= 0; i--) { var name = names[i], - id = '$' + name + '='; + id = '$' + name + '=', + ivar = Opal.ivar(name); // the closure here is needed because name will change at the next // cycle, I wish we could use let. - var body = (function(name){ + var body = (function(ivar){ return function(value) { - return this[name] = value; + return this[ivar] = value; } - })(name); + })(ivar); // initialize the instance variable as nil - proto[name] = nil; + proto[ivar] = nil; if (self.$$is_singleton) { proto.constructor.prototype[id] = body; @@ -1786,9 +2247,9 @@ Opal.modules["corelib/module"] = function(Opal) { } return nil; - }; + }); - def.$autoload = function(const$, path) { + Opal.defn(self, '$autoload', function(const$, path) { var self = this; @@ -1801,26 +2262,26 @@ Opal.modules["corelib/module"] = function(Opal) { autoloaders[const$] = path; return nil; ; - }; + }); - def.$class_variable_get = function(name) { + Opal.defn(self, '$class_variable_get', function(name) { var $a, self = this; name = $scope.get('Opal')['$coerce_to!'](name, $scope.get('String'), "to_str"); if ((($a = name.length < 3 || name.slice(0,2) !== '@@') !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('NameError'), "class vars should start with @@")}; + self.$raise($scope.get('NameError').$new("class vars should start with @@", name))}; var value = Opal.cvars[name.slice(2)]; (function() {if ((($a = value == null) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$raise($scope.get('NameError'), "uninitialized class variable @@a in") + return self.$raise($scope.get('NameError').$new("uninitialized class variable @@a in", name)) } else { return nil }; return nil; })() return value; - }; + }); - def.$class_variable_set = function(name, value) { + Opal.defn(self, '$class_variable_set', function(name, value) { var $a, self = this; name = $scope.get('Opal')['$coerce_to!'](name, $scope.get('String'), "to_str"); @@ -1830,15 +2291,15 @@ Opal.modules["corelib/module"] = function(Opal) { Opal.cvars[name.slice(2)] = value; return value; - }; + }); - def.$constants = function() { + Opal.defn(self, '$constants', function() { var self = this; - return self.$$scope.constants; - }; + return self.$$scope.constants.slice(0); + }); - def['$const_defined?'] = function(name, inherit) { + Opal.defn(self, '$const_defined?', function(name, inherit) { var $a, self = this; if (inherit == null) { @@ -1846,7 +2307,7 @@ Opal.modules["corelib/module"] = function(Opal) { } if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - self.$raise($scope.get('NameError'), "wrong constant name " + (name)) + self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name)) }; var scopes = [self.$$scope]; @@ -1869,21 +2330,21 @@ Opal.modules["corelib/module"] = function(Opal) { return false; - }; + }); - def.$const_get = function(name, inherit) { + Opal.defn(self, '$const_get', function(name, inherit) { var $a, $b, TMP_2, self = this; if (inherit == null) { inherit = true } - if ((($a = ($b = name['$[]']("::"), $b !== false && $b !== nil ?name['$==']("::")['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = name.indexOf('::') != -1 && name != '::') !== nil && (!$a.$$is_boolean || $a == true))) { return ($a = ($b = name.$split("::")).$inject, $a.$$p = (TMP_2 = function(o, c){var self = TMP_2.$$s || this; if (o == null) o = nil;if (c == null) c = nil; return o.$const_get(c)}, TMP_2.$$s = self, TMP_2), $a).call($b, self)}; - if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = /^[A-Z]\w*$/.test(name)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - self.$raise($scope.get('NameError'), "wrong constant name " + (name)) + self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name)) }; var scopes = [self.$$scope]; @@ -1906,9 +2367,9 @@ if (o == null) o = nil;if (c == null) c = nil; return self.$const_missing(name); - }; + }); - def.$const_missing = function(name) { + Opal.defn(self, '$const_missing', function(name) { var self = this; @@ -1922,36 +2383,40 @@ if (o == null) o = nil;if (c == null) c = nil; } } - return self.$raise($scope.get('NameError'), "uninitialized constant " + (self) + "::" + (name)); - }; + return self.$raise($scope.get('NameError').$new("uninitialized constant " + (self) + "::" + (name), name)); + }); - def.$const_set = function(name, value) { + Opal.defn(self, '$const_set', function(name, value) { var $a, self = this; if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - self.$raise($scope.get('NameError'), "wrong constant name " + (name)) + self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name)) }; try { name = name.$to_str() } catch ($err) {if (true) { - self.$raise($scope.get('TypeError'), "conversion with #to_str failed") + try { + self.$raise($scope.get('TypeError'), "conversion with #to_str failed") + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } }else { throw $err; } }; Opal.casgn(self, name, value); return value; - }; + }); - def.$define_method = TMP_3 = function(name, method) { + Opal.defn(self, '$define_method', TMP_3 = function(name, method) { var $a, $b, $c, TMP_4, self = this, $iter = TMP_3.$$p, block = $iter || nil, $case = nil; TMP_3.$$p = null; - if ((($a = method === undefined && !(block !== nil)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = method === undefined && block === nil) !== nil && (!$a.$$is_boolean || $a == true))) { self.$raise($scope.get('ArgumentError'), "tried to create a Proc object without a block")}; - ((($a = block) !== false && $a !== nil) ? $a : block = (function() {$case = method;if ($scope.get('Proc')['$===']($case)) {return method}else if ($scope.get('Method')['$===']($case)) {return method.$to_proc()}else if ($scope.get('UnboundMethod')['$===']($case)) {return ($b = ($c = self).$lambda, $b.$$p = (TMP_4 = function(args){var self = TMP_4.$$s || this, $a, bound = nil; + ((($a = block) !== false && $a !== nil) ? $a : block = (function() {$case = method;if ($scope.get('Proc')['$===']($case)) {return method}else if ($scope.get('Method')['$===']($case)) {return method.$to_proc().$$unbound;}else if ($scope.get('UnboundMethod')['$===']($case)) {return ($b = ($c = self).$lambda, $b.$$p = (TMP_4 = function(args){var self = TMP_4.$$s || this, $a, bound = nil; args = $slice.call(arguments, 0); bound = method.$bind(self); - return ($a = bound).$call.apply($a, [].concat(args));}, TMP_4.$$s = self, TMP_4), $b).call($c)}else {return self.$raise($scope.get('TypeError'), "wrong argument type " + (block.$class()) + " (expected Proc/Method)")}})()); + return ($a = bound).$call.apply($a, Opal.to_a(args));}, TMP_4.$$s = self, TMP_4), $b).call($c)}else {return self.$raise($scope.get('TypeError'), "wrong argument type " + (block.$class()) + " (expected Proc/Method)")}})()); var id = '$' + name; @@ -1959,28 +2424,44 @@ args = $slice.call(arguments, 0); block.$$s = null; block.$$def = block; - if (self.$$is_singleton) { - self.$$proto[id] = block; - } - else { - Opal.defn(self, id, block); - } + Opal.defn(self, id, block); return name; - }; + }); - def.$remove_method = function(name) { - var self = this; + Opal.defn(self, '$remove_method', function() { + var self = this, $splat_index = nil; - Opal.undef(self, '$' + name); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } + + for (var i = 0, length = names.length; i < length; i++) { + Opal.rdef(self, "$" + names[i]); + } + return self; - }; + }); - def.$include = function(mods) { + Opal.defn(self, '$singleton_class?', function() { var self = this; - mods = $slice.call(arguments, 0); + return !!self.$$is_singleton; + }); + + Opal.defn(self, '$include', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var mods = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + mods[$splat_index] = arguments[$splat_index + 0]; + } for (var i = mods.length - 1; i >= 0; i--) { var mod = mods[i]; @@ -1989,14 +2470,18 @@ args = $slice.call(arguments, 0); continue; } + if (!mod.$$is_module) { + self.$raise($scope.get('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); + } + (mod).$append_features(self); (mod).$included(self); } return self; - }; + }); - def['$include?'] = function(mod) { + Opal.defn(self, '$include?', function(mod) { var self = this; @@ -2010,23 +2495,23 @@ args = $slice.call(arguments, 0); } return false; - }; + }); - def.$instance_method = function(name) { + Opal.defn(self, '$instance_method', function(name) { var self = this; var meth = self.$$proto['$' + name]; if (!meth || meth.$$stub) { - self.$raise($scope.get('NameError'), "undefined method `" + (name) + "' for class `" + (self.$name()) + "'"); + self.$raise($scope.get('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$name()) + "'", name)); } return $scope.get('UnboundMethod').$new(self, meth, name); - }; + }); - def.$instance_methods = function(include_super) { + Opal.defn(self, '$instance_methods', function(include_super) { var self = this; if (include_super == null) { @@ -2037,11 +2522,11 @@ args = $slice.call(arguments, 0); proto = self.$$proto; for (var prop in proto) { - if (!(prop.charAt(0) === '$')) { + if (prop.charAt(0) !== '$') { continue; } - if (!(typeof(proto[prop]) === "function")) { + if (typeof(proto[prop]) !== "function") { continue; } @@ -2049,7 +2534,7 @@ args = $slice.call(arguments, 0); continue; } - if (!self.$$is_mod) { + if (!self.$$is_module) { if (self !== Opal.BasicObject && proto[prop] === Opal.BasicObject.$$proto[prop]) { continue; } @@ -2068,21 +2553,39 @@ args = $slice.call(arguments, 0); return methods; - }; + }); - def.$included = function(mod) { + Opal.defn(self, '$included', function(mod) { var self = this; return nil; - }; + }); - def.$extended = function(mod) { + Opal.defn(self, '$extended', function(mod) { var self = this; return nil; - }; + }); + + Opal.defn(self, '$method_added', function() { + var self = this; + + return nil; + }); + + Opal.defn(self, '$method_removed', function() { + var self = this; + + return nil; + }); - def.$module_eval = TMP_5 = function() { + Opal.defn(self, '$method_undefined', function() { + var self = this; + + return nil; + }); + + Opal.defn(self, '$module_eval', TMP_5 = function() { var self = this, $iter = TMP_5.$$p, block = $iter || nil; TMP_5.$$p = null; @@ -2100,61 +2603,74 @@ args = $slice.call(arguments, 0); return result; - }; + }); - Opal.defn(self, '$class_eval', def.$module_eval); + Opal.alias(self, 'class_eval', 'module_eval'); - def.$module_exec = TMP_6 = function() { - var self = this, $iter = TMP_6.$$p, block = $iter || nil; + Opal.defn(self, '$module_exec', TMP_6 = function() { + var self = this, $iter = TMP_6.$$p, block = $iter || nil, $splat_index = nil; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } TMP_6.$$p = null; if (block === nil) { - throw new Error("no block given"); + self.$raise($scope.get('LocalJumpError'), "no block given") } var block_self = block.$$s, result; block.$$s = null; - result = block.apply(self, $slice.call(arguments)); + result = block.apply(self, args); block.$$s = block_self; return result; - - }; + ; + }); - Opal.defn(self, '$class_exec', def.$module_exec); + Opal.alias(self, 'class_exec', 'module_exec'); - def['$method_defined?'] = function(method) { + Opal.defn(self, '$method_defined?', function(method) { var self = this; var body = self.$$proto['$' + method]; return (!!body) && !body.$$stub; - }; + }); - def.$module_function = function(methods) { - var self = this; + Opal.defn(self, '$module_function', function() { + var self = this, $splat_index = nil; - methods = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var methods = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + methods[$splat_index] = arguments[$splat_index + 0]; + } if (methods.length === 0) { self.$$module_function = true; } else { for (var i = 0, length = methods.length; i < length; i++) { - var meth = methods[i], func = self.$$proto['$' + meth]; + var meth = methods[i], + id = '$' + meth, + func = self.$$proto[id]; - self.constructor.prototype['$' + meth] = func; + Opal.defs(self, id, func); } } return self; - }; + }); - def.$name = function() { + Opal.defn(self, '$name', function() { var self = this; @@ -2184,60 +2700,15 @@ args = $slice.call(arguments, 0); return self.$$full_name = result.join('::'); - }; - - def.$public = function(methods) { - var self = this; - - methods = $slice.call(arguments, 0); - - if (methods.length === 0) { - self.$$module_function = false; - } - - return nil; - - }; - - Opal.defn(self, '$private', def.$public); - - Opal.defn(self, '$protected', def.$public); - - Opal.defn(self, '$nesting', def.$public); - - def.$private_class_method = function(name) { - var self = this; - - return self['$' + name] || nil; - }; - - Opal.defn(self, '$public_class_method', def.$private_class_method); - - def['$private_method_defined?'] = function(obj) { - var self = this; - - return false; - }; - - def.$private_constant = function() { - var self = this; - - return nil; - }; - - Opal.defn(self, '$protected_method_defined?', def['$private_method_defined?']); - - Opal.defn(self, '$public_instance_methods', def.$instance_methods); - - Opal.defn(self, '$public_method_defined?', def['$method_defined?']); + }); - def.$remove_class_variable = function() { + Opal.defn(self, '$remove_class_variable', function() { var self = this; return nil; - }; + }); - def.$remove_const = function(name) { + Opal.defn(self, '$remove_const', function(name) { var self = this; @@ -2245,26 +2716,37 @@ args = $slice.call(arguments, 0); delete self.$$scope[name]; return old; - }; + }); - def.$to_s = function() { + Opal.defn(self, '$to_s', function() { var $a, self = this; - return ((($a = self.$$name) !== false && $a !== nil) ? $a : "#<" + (self.$$is_mod ? 'Module' : 'Class') + ":0x" + (self.$__id__().$to_s(16)) + ">"); - }; + return ((($a = Opal.Module.$name.call(self)) !== false && $a !== nil) ? $a : "#<" + (self.$$is_module ? 'Module' : 'Class') + ":0x" + (self.$__id__().$to_s(16)) + ">"); + }); - return (def.$undef_method = function(symbol) { - var self = this; + return (Opal.defn(self, '$undef_method', function() { + var self = this, $splat_index = nil; - Opal.add_stub_for(self.$$proto, "$" + symbol); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } + + for (var i = 0, length = names.length; i < length; i++) { + Opal.udef(self, "$" + names[i]); + } + return self; - }, nil) && 'undef_method'; - })(self, null) + }), nil) && 'undef_method'; + })($scope.base, null) }; -/* Generated by Opal 0.8.0 */ +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/class"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; Opal.add_stubs(['$require', '$raise', '$allocate']); @@ -2283,14 +2765,15 @@ Opal.modules["corelib/class"] = function(Opal) { } TMP_1.$$p = null; - if (!sup.$$is_class || sup.$$is_mod) { + if (!sup.$$is_class) { self.$raise($scope.get('TypeError'), "superclass must be a Class"); } function AnonClass(){}; - var klass = Opal.boot(sup, AnonClass) - klass.$$name = nil; - klass.$$parent = sup; + var klass = Opal.boot_class(sup, AnonClass) + klass.$$name = nil; + klass.$$parent = sup; + klass.$$is_class = true; // inherit scope from parent Opal.create_scope(sup.$$scope, klass); @@ -2308,26 +2791,31 @@ Opal.modules["corelib/class"] = function(Opal) { ; }); - def.$allocate = function() { + Opal.defn(self, '$allocate', function() { var self = this; - var obj = new self.$$alloc; + var obj = new self.$$alloc(); obj.$$id = Opal.uid(); return obj; - }; + }); - def.$inherited = function(cls) { + Opal.defn(self, '$inherited', function(cls) { var self = this; return nil; - }; + }); - def.$new = TMP_2 = function(args) { - var self = this, $iter = TMP_2.$$p, block = $iter || nil; + Opal.defn(self, '$new', TMP_2 = function() { + var self = this, $iter = TMP_2.$$p, block = $iter || nil, $splat_index = nil; - args = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } TMP_2.$$p = null; var obj = self.$allocate(); @@ -2336,27 +2824,31 @@ Opal.modules["corelib/class"] = function(Opal) { obj.$initialize.apply(obj, args); return obj; ; - }; + }); - return (def.$superclass = function() { + return (Opal.defn(self, '$superclass', function() { var self = this; return self.$$super || nil; - }, nil) && 'superclass'; - })(self, null); + }), nil) && 'superclass'; + })($scope.base, null); }; -/* Generated by Opal 0.8.0 */ +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/basic_object"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $range = Opal.range, $hash2 = Opal.hash2; - Opal.add_stubs(['$raise', '$inspect']); + Opal.add_stubs(['$==', '$!', '$nil?', '$cover?', '$size', '$raise', '$compile', '$lambda', '$>', '$new', '$inspect']); return (function($base, $super) { function $BasicObject(){}; var self = $BasicObject = $klass($base, $super, 'BasicObject', $BasicObject); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_4, TMP_5; Opal.defn(self, '$initialize', function() { var self = this; @@ -2370,16 +2862,29 @@ Opal.modules["corelib/basic_object"] = function(Opal) { return self === other; }); + Opal.defn(self, '$eql?', function(other) { + var self = this; + + return self['$=='](other); + }); + + Opal.alias(self, 'equal?', '=='); + Opal.defn(self, '$__id__', function() { var self = this; return self.$$id || (self.$$id = Opal.uid()); }); - Opal.defn(self, '$__send__', TMP_1 = function(symbol, args) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$__send__', TMP_1 = function(symbol) { + var self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil; - args = $slice.call(arguments, 1); + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } TMP_1.$$p = null; var func = self['$' + symbol] @@ -2406,35 +2911,75 @@ Opal.modules["corelib/basic_object"] = function(Opal) { return false; }); - Opal.defn(self, '$eql?', def['$==']); + Opal.defn(self, '$!=', function(other) { + var self = this; + + return (self['$=='](other))['$!'](); + }); - Opal.defn(self, '$equal?', def['$==']); + Opal.alias(self, 'equal?', '=='); Opal.defn(self, '$instance_eval', TMP_2 = function() { - var self = this, $iter = TMP_2.$$p, block = $iter || nil; + var $a, $b, TMP_3, self = this, $iter = TMP_2.$$p, block = $iter || nil, string = nil, file = nil, _lineno = nil, compiled = nil, wrapper = nil, $splat_index = nil; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } TMP_2.$$p = null; - if (block !== false && block !== nil) { - } else { - $scope.get('Kernel').$raise($scope.get('ArgumentError'), "no block given") - }; + if ((($a = ($b = block['$nil?'](), $b !== false && $b !== nil ?!!Opal.compile : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ($range(1, 3, false))['$cover?'](args.$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + $scope.get('Kernel').$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)") + }; + $a = Opal.to_a(args), string = ($a[0] == null ? nil : $a[0]), file = ($a[1] == null ? nil : $a[1]), _lineno = ($a[2] == null ? nil : $a[2]), $a; + compiled = $scope.get('Opal').$compile(string, $hash2(["file", "eval"], {"file": (((($a = file) !== false && $a !== nil) ? $a : "(eval)")), "eval": true})); + wrapper = function() {return eval(compiled)}; + block = ($a = ($b = $scope.get('Kernel')).$lambda, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; + + return wrapper.call(self);}, TMP_3.$$s = self, TMP_3), $a).call($b); + } else if ((($a = $rb_gt(args.$size(), 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + $scope.get('Kernel').$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$size()) + " for 0)")}; var old = block.$$s, result; block.$$s = null; - result = block.call(self, self); + + // Need to pass $$eval so that method definitions know if this is + // being done on a class/module. Cannot be compiler driven since + // send(:instance_eval) needs to work. + if (self.$$is_class || self.$$is_module) { + self.$$eval = true; + try { + result = block.call(self, self); + } + finally { + self.$$eval = false; + } + } + else { + result = block.call(self, self); + } + block.$$s = old; return result; }); - Opal.defn(self, '$instance_exec', TMP_3 = function(args) { - var self = this, $iter = TMP_3.$$p, block = $iter || nil; + Opal.defn(self, '$instance_exec', TMP_4 = function() { + var self = this, $iter = TMP_4.$$p, block = $iter || nil, $splat_index = nil; - args = $slice.call(arguments, 0); - TMP_3.$$p = null; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_4.$$p = null; if (block !== false && block !== nil) { } else { $scope.get('Kernel').$raise($scope.get('ArgumentError'), "no block given") @@ -2444,50 +2989,92 @@ Opal.modules["corelib/basic_object"] = function(Opal) { result; block.$$s = null; - result = block.apply(self, args); + + if (self.$$is_class || self.$$is_module) { + self.$$eval = true; + try { + result = block.apply(self, args); + } + finally { + self.$$eval = false; + } + } + else { + result = block.apply(self, args); + } + block.$$s = block_self; return result; }); - return (Opal.defn(self, '$method_missing', TMP_4 = function(symbol, args) { - var $a, self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$singleton_method_added', function() { + var self = this; + + return nil; + }); + + Opal.defn(self, '$singleton_method_removed', function() { + var self = this; - args = $slice.call(arguments, 1); - TMP_4.$$p = null; - return $scope.get('Kernel').$raise($scope.get('NoMethodError'), (function() {if ((($a = self.$inspect && !self.$inspect.$$stub) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil; + }); + + Opal.defn(self, '$singleton_method_undefined', function() { + var self = this; + + return nil; + }); + + return (Opal.defn(self, '$method_missing', TMP_5 = function(symbol) { + var $a, self = this, $iter = TMP_5.$$p, block = $iter || nil, $splat_index = nil; + + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + TMP_5.$$p = null; + return $scope.get('Kernel').$raise($scope.get('NoMethodError').$new((function() {if ((($a = self.$inspect && !self.$inspect.$$stub) !== nil && (!$a.$$is_boolean || $a == true))) { return "undefined method `" + (symbol) + "' for " + (self.$inspect()) + ":" + (self.$$class) } else { return "undefined method `" + (symbol) + "' for " + (self.$$class) - }; return nil; })()); + }; return nil; })(), symbol)); }), nil) && 'method_missing'; - })(self, null) + })($scope.base, null) }; -/* Generated by Opal 0.8.0 */ +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/kernel"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; function $rb_gt(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); } function $rb_le(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $gvars = Opal.gvars, $hash2 = Opal.hash2; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $gvars = Opal.gvars, $hash2 = Opal.hash2, $klass = Opal.klass; - Opal.add_stubs(['$raise', '$inspect', '$==', '$object_id', '$class', '$new', '$coerce_to?', '$<<', '$allocate', '$copy_instance_variables', '$initialize_clone', '$initialize_copy', '$singleton_class', '$initialize_dup', '$for', '$to_proc', '$each', '$reverse', '$append_features', '$extended', '$length', '$respond_to?', '$[]', '$nil?', '$to_a', '$to_int', '$fetch', '$Integer', '$Float', '$to_ary', '$to_str', '$coerce_to', '$to_s', '$__id__', '$coerce_to!', '$===', '$print', '$format', '$puts', '$empty?', '$rand', '$respond_to_missing?', '$try_convert!', '$expand_path', '$join', '$start_with?']); - return (function($base) { - var self = $module($base, 'Kernel'); + Opal.add_stubs(['$raise', '$new', '$inspect', '$!', '$=~', '$==', '$object_id', '$class', '$coerce_to?', '$<<', '$allocate', '$copy_instance_variables', '$copy_singleton_methods', '$initialize_clone', '$initialize_copy', '$define_method', '$to_proc', '$singleton_class', '$initialize_dup', '$for', '$loop', '$pop', '$call', '$append_features', '$extended', '$length', '$respond_to?', '$[]', '$nil?', '$to_a', '$to_int', '$fetch', '$Integer', '$Float', '$to_ary', '$to_str', '$coerce_to', '$to_s', '$__id__', '$instance_variable_name!', '$coerce_to!', '$===', '$>', '$print', '$format', '$puts', '$each', '$<=', '$empty?', '$exception', '$kind_of?', '$respond_to_missing?', '$try_convert!', '$expand_path', '$join', '$start_with?', '$sym', '$arg', '$include']); + (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_9; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_6, TMP_7, TMP_8, TMP_10, TMP_11; - Opal.defn(self, '$method_missing', TMP_1 = function(symbol, args) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$method_missing', TMP_1 = function(symbol) { + var self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil; - args = $slice.call(arguments, 1); + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } TMP_1.$$p = null; - return self.$raise($scope.get('NoMethodError'), "undefined method `" + (symbol) + "' for " + (self.$inspect())); + return self.$raise($scope.get('NoMethodError').$new("undefined method `" + (symbol) + "' for " + (self.$inspect()), symbol, args)); }); Opal.defn(self, '$=~', function(obj) { @@ -2496,6 +3083,12 @@ Opal.modules["corelib/kernel"] = function(Opal) { return false; }); + Opal.defn(self, '$!~', function(obj) { + var self = this; + + return (self['$=~'](obj))['$!'](); + }); + Opal.defn(self, '$===', function(other) { var $a, self = this; @@ -2506,6 +3099,9 @@ Opal.modules["corelib/kernel"] = function(Opal) { var self = this; + // set guard for infinite recursion + self.$$comparable = true; + var x = self['$=='](other); if (x && x !== nil) { @@ -2513,7 +3109,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { } return nil; - ; + }); Opal.defn(self, '$method', function(name) { @@ -2523,7 +3119,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { var meth = self['$' + name]; if (!meth || meth.$$stub) { - self.$raise($scope.get('NameError'), "undefined method `" + (name) + "' for class `" + (self.$class()) + "'"); + self.$raise($scope.get('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$class()) + "'", name)); } return $scope.get('Method').$new(self, meth, name); @@ -2556,6 +3152,8 @@ Opal.modules["corelib/kernel"] = function(Opal) { }); + Opal.alias(self, 'public_methods', 'methods'); + Opal.defn(self, '$Array', function(object) { var self = this; @@ -2606,7 +3204,32 @@ Opal.modules["corelib/kernel"] = function(Opal) { for (var name in other) { - if (name.charAt(0) !== '$') { + if (other.hasOwnProperty(name) && name.charAt(0) !== '$') { + self[name] = other[name]; + } + } + + }); + + Opal.defn(self, '$copy_singleton_methods', function(other) { + var self = this; + + + var name; + + if (other.hasOwnProperty('$$meta')) { + var other_singleton_class_proto = Opal.get_singleton_class(other).$$proto; + var self_singleton_class_proto = Opal.get_singleton_class(self).$$proto; + + for (name in other_singleton_class_proto) { + if (name.charAt(0) === '$' && other_singleton_class_proto.hasOwnProperty(name)) { + self_singleton_class_proto[name] = other_singleton_class_proto[name]; + } + } + } + + for (name in other) { + if (name.charAt(0) === '$' && name.charAt(1) !== '$' && other.hasOwnProperty(name)) { self[name] = other[name]; } } @@ -2618,6 +3241,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { copy = self.$class().$allocate(); copy.$copy_instance_variables(self); + copy.$copy_singleton_methods(self); copy.$initialize_clone(self); return copy; }); @@ -2628,28 +3252,11 @@ Opal.modules["corelib/kernel"] = function(Opal) { return self.$initialize_copy(other); }); - Opal.defn(self, '$define_singleton_method', TMP_3 = function(name, body) { - var $a, self = this, $iter = TMP_3.$$p, block = $iter || nil; + Opal.defn(self, '$define_singleton_method', TMP_3 = function(name, method) { + var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil; - if (body == null) { - body = nil - } TMP_3.$$p = null; - ((($a = body) !== false && $a !== nil) ? $a : body = block); - if (body !== false && body !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to create Proc object without a block") - }; - - var jsid = '$' + name; - body.$$jsid = name; - body.$$s = null; - body.$$def = body; - - self.$singleton_class().$$proto[jsid] = body; - - return self; - + return ($a = ($b = self.$singleton_class()).$define_method, $a.$$p = block.$to_proc(), $a).call($b, name, method); }); Opal.defn(self, '$dup', function() { @@ -2667,18 +3274,23 @@ Opal.modules["corelib/kernel"] = function(Opal) { return self.$initialize_copy(other); }); - Opal.defn(self, '$enum_for', TMP_4 = function(method, args) { - var $a, $b, self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$enum_for', TMP_4 = function(method) { + var $a, $b, self = this, $iter = TMP_4.$$p, block = $iter || nil, $splat_index = nil; - args = $slice.call(arguments, 1); + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } if (method == null) { method = "each" } TMP_4.$$p = null; - return ($a = ($b = $scope.get('Enumerator')).$for, $a.$$p = block.$to_proc(), $a).apply($b, [self, method].concat(args)); + return ($a = ($b = $scope.get('Enumerator')).$for, $a.$$p = block.$to_proc(), $a).apply($b, [self, method].concat(Opal.to_a(args))); }); - Opal.defn(self, '$to_enum', def.$enum_for); + Opal.alias(self, 'to_enum', 'enum_for'); Opal.defn(self, '$equal?', function(other) { var self = this; @@ -2687,30 +3299,47 @@ Opal.modules["corelib/kernel"] = function(Opal) { }); Opal.defn(self, '$exit', function(status) { - var $a, $b, self = this; + var $a, $b, TMP_5, self = this; if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil; if (status == null) { status = true } - if ((($a = $gvars.__at_exit__) !== nil && (!$a.$$is_boolean || $a == true))) { - ($a = ($b = $gvars.__at_exit__.$reverse()).$each, $a.$$p = "call".$to_proc(), $a).call($b)}; + ((($a = $gvars.__at_exit__) !== false && $a !== nil) ? $a : $gvars.__at_exit__ = []); + ($a = ($b = self).$loop, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this, block = nil; + if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil; + + block = $gvars.__at_exit__.$pop(); + if (block !== false && block !== nil) { + return block.$call() + } else { + return ($breaker.$v = nil, $breaker) + };}, TMP_5.$$s = self, TMP_5), $a).call($b); if ((($a = status === true) !== nil && (!$a.$$is_boolean || $a == true))) { status = 0}; Opal.exit(status); return nil; }); - Opal.defn(self, '$extend', function(mods) { - var self = this; + Opal.defn(self, '$extend', function() { + var self = this, $splat_index = nil; - mods = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var mods = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + mods[$splat_index] = arguments[$splat_index + 0]; + } var singleton = self.$singleton_class(); for (var i = mods.length - 1; i >= 0; i--) { var mod = mods[i]; + if (!mod.$$is_module) { + self.$raise($scope.get('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); + } + (mod).$append_features(singleton); (mod).$extended(self); } @@ -2718,12 +3347,17 @@ Opal.modules["corelib/kernel"] = function(Opal) { return self; }); - Opal.defn(self, '$format', function(format_string, args) { - var $a, $b, self = this, ary = nil; + Opal.defn(self, '$format', function(format_string) { + var $a, $b, self = this, ary = nil, $splat_index = nil; if ($gvars.DEBUG == null) $gvars.DEBUG = nil; - args = $slice.call(arguments, 1); - if ((($a = (($b = args.$length()['$=='](1)) ? args['$[]'](0)['$respond_to?']("to_ary") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + if ((($a = (($b = args.$length()['$=='](1)) ? args['$[]'](0)['$respond_to?']("to_ary") : args.$length()['$=='](1))) !== nil && (!$a.$$is_boolean || $a == true))) { ary = $scope.get('Opal')['$coerce_to?'](args['$[]'](0), $scope.get('Array'), "to_ary"); if ((($a = ary['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { } else { @@ -2821,7 +3455,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { } if (format_string.charCodeAt(i) < 48 || format_string.charCodeAt(i) > 57) { i--; - num = parseInt(str) || 0; + num = parseInt(str, 10) || 0; if (num > 2147483647) { self.$raise($scope.get('ArgumentError'), "" + (label) + " too big") } @@ -3140,7 +3774,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { case 'g': case 'G': str = arg.toExponential(); - exponent = parseInt(str.split('e')[1]); + exponent = parseInt(str.split('e')[1], 10); if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) { str = arg.toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision); } @@ -3174,7 +3808,7 @@ Opal.modules["corelib/kernel"] = function(Opal) { case 'g': case 'G': str = (-arg).toExponential(); - exponent = parseInt(str.split('e')[1]); + exponent = parseInt(str.split('e')[1], 10); if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) { str = (-arg).toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision); } @@ -3264,24 +3898,10 @@ Opal.modules["corelib/kernel"] = function(Opal) { ; }); - Opal.defn(self, '$freeze', function() { - var self = this; - - self.___frozen___ = true; - return self; - }); - - Opal.defn(self, '$frozen?', function() { - var $a, self = this; - if (self.___frozen___ == null) self.___frozen___ = nil; - - return ((($a = self.___frozen___) !== false && $a !== nil) ? $a : false); - }); - Opal.defn(self, '$hash', function() { var self = this; - return "" + (self.$class()) + ":" + (self.$class().$__id__()) + ":" + (self.$__id__()); + return self.$__id__(); }); Opal.defn(self, '$initialize_copy', function(other) { @@ -3299,20 +3919,28 @@ Opal.modules["corelib/kernel"] = function(Opal) { Opal.defn(self, '$instance_of?', function(klass) { var self = this; + + if (!klass.$$is_class && !klass.$$is_module) { + self.$raise($scope.get('TypeError'), "class or module required"); + } + return self.$$class === klass; + ; }); Opal.defn(self, '$instance_variable_defined?', function(name) { var self = this; + name = $scope.get('Opal')['$instance_variable_name!'](name); return Opal.hasOwnProperty.call(self, name.substr(1)); }); Opal.defn(self, '$instance_variable_get', function(name) { var self = this; + name = $scope.get('Opal')['$instance_variable_name!'](name); - var ivar = self[name.substr(1)]; + var ivar = self[Opal.ivar(name.substr(1))]; return ivar == null ? nil : ivar; @@ -3321,23 +3949,43 @@ Opal.modules["corelib/kernel"] = function(Opal) { Opal.defn(self, '$instance_variable_set', function(name, value) { var self = this; - return self[name.substr(1)] = value; + name = $scope.get('Opal')['$instance_variable_name!'](name); + return self[Opal.ivar(name.substr(1))] = value; }); - Opal.defn(self, '$instance_variables', function() { + Opal.defn(self, '$remove_instance_variable', function(name) { var self = this; + name = $scope.get('Opal')['$instance_variable_name!'](name); - var result = []; - - for (var name in self) { - if (name.charAt(0) !== '$') { - if (name !== '$$class' && name !== '$$id') { - result.push('@' + name); - } - } + var key = Opal.ivar(name.substr(1)), + val; + if (self.hasOwnProperty(key)) { + val = self[key]; + delete self[key]; + return val; } - + + return self.$raise($scope.get('NameError'), "instance variable " + (name) + " not defined"); + }); + + Opal.defn(self, '$instance_variables', function() { + var self = this; + + + var result = [], ivar; + + for (var name in self) { + if (self.hasOwnProperty(name) && name.charAt(0) !== '$') { + if (name.substr(-1) === '$') { + ivar = name.slice(0, name.length - 1); + } else { + ivar = name; + } + result.push('@' + ivar); + } + } + return result; }); @@ -3472,15 +4120,21 @@ Opal.modules["corelib/kernel"] = function(Opal) { Opal.defn(self, '$is_a?', function(klass) { var self = this; + + if (!klass.$$is_class && !klass.$$is_module) { + self.$raise($scope.get('TypeError'), "class or module required"); + } + return Opal.is_a(self, klass); + ; }); - Opal.defn(self, '$kind_of?', def['$is_a?']); + Opal.alias(self, 'kind_of?', 'is_a?'); - Opal.defn(self, '$lambda', TMP_5 = function() { - var self = this, $iter = TMP_5.$$p, block = $iter || nil; + Opal.defn(self, '$lambda', TMP_6 = function() { + var self = this, $iter = TMP_6.$$p, block = $iter || nil; - TMP_5.$$p = null; + TMP_6.$$p = null; block.$$is_lambda = true; return block; }); @@ -3489,13 +4143,13 @@ Opal.modules["corelib/kernel"] = function(Opal) { var self = this; file = $scope.get('Opal')['$coerce_to!'](file, $scope.get('String'), "to_str"); - return Opal.load(Opal.normalize_loadable_path(file)); + return Opal.load(file); }); - Opal.defn(self, '$loop', TMP_6 = function() { - var self = this, $iter = TMP_6.$$p, block = $iter || nil; + Opal.defn(self, '$loop', TMP_7 = function() { + var self = this, $iter = TMP_7.$$p, block = $iter || nil; - TMP_6.$$p = null; + TMP_7.$$p = null; while (true) { if (block() === $breaker) { @@ -3512,29 +4166,26 @@ Opal.modules["corelib/kernel"] = function(Opal) { return false; }); - Opal.defn(self, '$object_id', def.$__id__); + Opal.alias(self, 'object_id', '__id__'); - Opal.defn(self, '$printf', function(args) { - var $a, self = this; + Opal.defn(self, '$printf', function() { + var $a, self = this, $splat_index = nil; - args = $slice.call(arguments, 0); - if ($rb_gt(args.$length(), 0)) { - self.$print(($a = self).$format.apply($a, [].concat(args)))}; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + if ((($a = $rb_gt(args.$length(), 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$print(($a = self).$format.apply($a, Opal.to_a(args)))}; return nil; }); - Opal.defn(self, '$private_methods', function() { - var self = this; - - return []; - }); - - Opal.defn(self, '$private_instance_methods', def.$private_methods); - - Opal.defn(self, '$proc', TMP_7 = function() { - var self = this, $iter = TMP_7.$$p, block = $iter || nil; + Opal.defn(self, '$proc', TMP_8 = function() { + var self = this, $iter = TMP_8.$$p, block = $iter || nil; - TMP_7.$$p = null; + TMP_8.$$p = null; if (block !== false && block !== nil) { } else { self.$raise($scope.get('ArgumentError'), "tried to create Proc object without a block") @@ -3543,67 +4194,103 @@ Opal.modules["corelib/kernel"] = function(Opal) { return block; }); - Opal.defn(self, '$puts', function(strs) { - var $a, self = this; + Opal.defn(self, '$puts', function() { + var $a, self = this, $splat_index = nil; if ($gvars.stdout == null) $gvars.stdout = nil; - strs = $slice.call(arguments, 0); - return ($a = $gvars.stdout).$puts.apply($a, [].concat(strs)); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = $gvars.stdout).$puts.apply($a, Opal.to_a(strs)); }); - Opal.defn(self, '$p', function(args) { - var $a, $b, TMP_8, self = this; + Opal.defn(self, '$p', function() { + var $a, $b, TMP_9, self = this, $splat_index = nil; - args = $slice.call(arguments, 0); - ($a = ($b = args).$each, $a.$$p = (TMP_8 = function(obj){var self = TMP_8.$$s || this; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + ($a = ($b = args).$each, $a.$$p = (TMP_9 = function(obj){var self = TMP_9.$$s || this; if ($gvars.stdout == null) $gvars.stdout = nil; if (obj == null) obj = nil; - return $gvars.stdout.$puts(obj.$inspect())}, TMP_8.$$s = self, TMP_8), $a).call($b); - if ($rb_le(args.$length(), 1)) { + return $gvars.stdout.$puts(obj.$inspect())}, TMP_9.$$s = self, TMP_9), $a).call($b); + if ((($a = $rb_le(args.$length(), 1)) !== nil && (!$a.$$is_boolean || $a == true))) { return args['$[]'](0) } else { return args }; }); - Opal.defn(self, '$print', function(strs) { - var $a, self = this; + Opal.defn(self, '$print', function() { + var $a, self = this, $splat_index = nil; if ($gvars.stdout == null) $gvars.stdout = nil; - strs = $slice.call(arguments, 0); - return ($a = $gvars.stdout).$print.apply($a, [].concat(strs)); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = $gvars.stdout).$print.apply($a, Opal.to_a(strs)); }); - Opal.defn(self, '$warn', function(strs) { - var $a, $b, self = this; + Opal.defn(self, '$warn', function() { + var $a, $b, self = this, $splat_index = nil; if ($gvars.VERBOSE == null) $gvars.VERBOSE = nil; if ($gvars.stderr == null) $gvars.stderr = nil; - strs = $slice.call(arguments, 0); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } if ((($a = ((($b = $gvars.VERBOSE['$nil?']()) !== false && $b !== nil) ? $b : strs['$empty?']())) !== nil && (!$a.$$is_boolean || $a == true))) { return nil } else { - return ($a = $gvars.stderr).$puts.apply($a, [].concat(strs)) + return ($a = $gvars.stderr).$puts.apply($a, Opal.to_a(strs)) }; }); - Opal.defn(self, '$raise', function(exception, string) { + Opal.defn(self, '$raise', function(exception, string, _backtrace) { var self = this; if ($gvars["!"] == null) $gvars["!"] = nil; + if (string == null) { + string = nil + } + if (_backtrace == null) { + _backtrace = nil + } - if (exception == null && $gvars["!"]) { + if (exception == null && $gvars["!"] !== nil) { throw $gvars["!"]; } - if (exception == null) { exception = $scope.get('RuntimeError').$new(); } else if (exception.$$is_string) { exception = $scope.get('RuntimeError').$new(exception); } - else if (exception.$$is_class) { - exception = exception.$new(string); + // using respond_to? and not an undefined check to avoid method_missing matching as true + else if (exception.$$is_class && exception['$respond_to?']("exception")) { + exception = exception.$exception(string); + } + else if (exception['$kind_of?']($scope.get('Exception'))) { + // exception is fine + } + else { + exception = $scope.get('TypeError').$new("exception class/object expected"); + } + + if ($gvars["!"] !== nil) { + Opal.exceptions.push($gvars["!"]); } $gvars["!"] = exception; @@ -3612,7 +4299,7 @@ if (obj == null) obj = nil; ; }); - Opal.defn(self, '$fail', def.$raise); + Opal.alias(self, 'fail', 'raise'); Opal.defn(self, '$rand', function(max) { var self = this; @@ -3622,9 +4309,10 @@ if (obj == null) obj = nil; return Math.random(); } else if (max.$$is_range) { - var arr = max.$to_a(); + var min = max.begin, range = max.end - min; + if(!max.exclude) range++; - return arr[self.$rand(arr.length)]; + return self.$rand(range) + min; } else { return Math.floor(Math.random() * @@ -3639,7 +4327,7 @@ if (obj == null) obj = nil; if (include_all == null) { include_all = false } - if ((($a = self['$respond_to_missing?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$respond_to_missing?'](name, include_all)) !== nil && (!$a.$$is_boolean || $a == true))) { return true}; var body = self['$' + name]; @@ -3651,9 +4339,12 @@ if (obj == null) obj = nil; return false; }); - Opal.defn(self, '$respond_to_missing?', function(method_name) { + Opal.defn(self, '$respond_to_missing?', function(method_name, include_all) { var self = this; + if (include_all == null) { + include_all = false + } return false; }); @@ -3661,7 +4352,7 @@ if (obj == null) obj = nil; var self = this; file = $scope.get('Opal')['$coerce_to!'](file, $scope.get('String'), "to_str"); - return Opal.require(Opal.normalize_loadable_path(file)); + return Opal.require(file); }); Opal.defn(self, '$require_relative', function(file) { @@ -3669,7 +4360,7 @@ if (obj == null) obj = nil; $scope.get('Opal')['$try_convert!'](file, $scope.get('String'), "to_str"); file = $scope.get('File').$expand_path($scope.get('File').$join(Opal.current_file, "..", file)); - return Opal.require(Opal.normalize_loadable_path(file)); + return Opal.require(file); }); Opal.defn(self, '$require_tree', function(path) { @@ -3688,9 +4379,9 @@ if (obj == null) obj = nil; return nil; }); - Opal.defn(self, '$send', def.$__send__); + Opal.alias(self, 'send', '__send__'); - Opal.defn(self, '$public_send', def.$__send__); + Opal.alias(self, 'public_send', '__send__'); Opal.defn(self, '$singleton_class', function() { var self = this; @@ -3698,32 +4389,42 @@ if (obj == null) obj = nil; return Opal.get_singleton_class(self); }); - Opal.defn(self, '$sprintf', def.$format); - - Opal.defn(self, '$srand', def.$rand); - - Opal.defn(self, '$String', function(str) { - var $a, self = this; + Opal.defn(self, '$sleep', function(seconds) { + var self = this; - return ((($a = $scope.get('Opal')['$coerce_to?'](str, $scope.get('String'), "to_str")) !== false && $a !== nil) ? $a : $scope.get('Opal')['$coerce_to!'](str, $scope.get('String'), "to_s")); + if (seconds == null) { + seconds = nil + } + + if (seconds === nil) { + self.$raise($scope.get('TypeError'), "can't convert NilClass into time interval") + } + if (!seconds.$$is_number) { + self.$raise($scope.get('TypeError'), "can't convert " + (seconds.$class()) + " into time interval") + } + if (seconds < 0) { + self.$raise($scope.get('ArgumentError'), "time interval must be positive") + } + var t = new Date(); + while (new Date() - t <= seconds * 1000); + return seconds; + ; }); - Opal.defn(self, '$taint', function() { - var self = this; + Opal.alias(self, 'sprintf', 'format'); - return self; - }); + Opal.alias(self, 'srand', 'rand'); - Opal.defn(self, '$tainted?', function() { - var self = this; + Opal.defn(self, '$String', function(str) { + var $a, self = this; - return false; + return ((($a = $scope.get('Opal')['$coerce_to?'](str, $scope.get('String'), "to_str")) !== false && $a !== nil) ? $a : $scope.get('Opal')['$coerce_to!'](str, $scope.get('String'), "to_s")); }); - Opal.defn(self, '$tap', TMP_9 = function() { - var self = this, $iter = TMP_9.$$p, block = $iter || nil; + Opal.defn(self, '$tap', TMP_10 = function() { + var self = this, $iter = TMP_10.$$p, block = $iter || nil; - TMP_9.$$p = null; + TMP_10.$$p = null; if (Opal.yield1(block, self) === $breaker) return $breaker.$v; return self; }); @@ -3740,185 +4441,56 @@ if (obj == null) obj = nil; return "#<" + (self.$class()) + ":0x" + (self.$__id__().$to_s(16)) + ">"; }); - Opal.defn(self, '$untaint', def.$taint); - })(self) -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/nil_class"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - - Opal.add_stubs(['$raise']); - (function($base, $super) { - function $NilClass(){}; - var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); - - var def = self.$$proto, $scope = self.$$scope; - - def['$!'] = function() { - var self = this; - - return true; - }; - - def['$&'] = function(other) { - var self = this; - - return false; - }; - - def['$|'] = function(other) { - var self = this; - - return other !== false && other !== nil; - }; - - def['$^'] = function(other) { - var self = this; - - return other !== false && other !== nil; - }; - - def['$=='] = function(other) { - var self = this; - - return other === nil; - }; - - def.$dup = function() { - var self = this; - - return self.$raise($scope.get('TypeError')); - }; - - def.$inspect = function() { - var self = this; - - return "nil"; - }; - - def['$nil?'] = function() { - var self = this; - - return true; - }; - - def.$singleton_class = function() { - var self = this; - - return $scope.get('NilClass'); - }; - - def.$to_a = function() { - var self = this; - - return []; - }; - - def.$to_h = function() { - var self = this; - - return Opal.hash(); - }; - - def.$to_i = function() { - var self = this; - - return 0; - }; - - Opal.defn(self, '$to_f', def.$to_i); - - return (def.$to_s = function() { - var self = this; + Opal.defn(self, '$catch', TMP_11 = function(sym) { + var $a, self = this, $iter = TMP_11.$$p, $yield = $iter || nil, e = nil; - return ""; - }, nil) && 'to_s'; - })(self, null); - return Opal.cdecl($scope, 'NIL', nil); -}; + TMP_11.$$p = null; + try { + return $a = Opal.yieldX($yield, []), $a === $breaker ? $a : $a + } catch ($err) {if (Opal.rescue($err, [$scope.get('UncaughtThrowError')])) {e = $err; + try { + if (e.$sym()['$=='](sym)) { + return e.$arg()}; + return self.$raise(); + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/boolean"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.defn(self, '$throw', function() { + var self = this, $splat_index = nil; - Opal.add_stubs(['$undef_method']); - (function($base, $super) { - function $Boolean(){}; - var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return self.$raise($scope.get('UncaughtThrowError').$new(args)); + }); + })($scope.base); + return (function($base, $super) { + function $Object(){}; + var self = $Object = $klass($base, $super, 'Object', $Object); var def = self.$$proto, $scope = self.$$scope; - def.$$is_boolean = true; - - def.$__id__ = function() { - var self = this; - - return self.valueOf() ? 2 : 0; - }; - - Opal.defn(self, '$object_id', def.$__id__); - - (function(self) { - var $scope = self.$$scope, def = self.$$proto; - - return self.$undef_method("new") - })(self.$singleton_class()); - - def['$!'] = function() { - var self = this; - - return self != true; - }; - - def['$&'] = function(other) { - var self = this; - - return (self == true) ? (other !== false && other !== nil) : false; - }; - - def['$|'] = function(other) { - var self = this; - - return (self == true) ? true : (other !== false && other !== nil); - }; - - def['$^'] = function(other) { - var self = this; - - return (self == true) ? (other === false || other === nil) : (other !== false && other !== nil); - }; - - def['$=='] = function(other) { - var self = this; - - return (self == true) === other.valueOf(); - }; - - Opal.defn(self, '$equal?', def['$==']); - - Opal.defn(self, '$singleton_class', def.$class); - - return (def.$to_s = function() { - var self = this; - - return (self == true) ? 'true' : 'false'; - }, nil) && 'to_s'; - })(self, null); - Opal.cdecl($scope, 'TrueClass', $scope.get('Boolean')); - Opal.cdecl($scope, 'FalseClass', $scope.get('Boolean')); - Opal.cdecl($scope, 'TRUE', true); - return Opal.cdecl($scope, 'FALSE', false); + return self.$include($scope.get('Kernel')) + })($scope.base, null); }; -/* Generated by Opal 0.8.0 */ +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/error"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; - Opal.add_stubs(['$attr_reader', '$class']); + Opal.add_stubs(['$new', '$clone', '$to_s', '$empty?', '$class', '$attr_reader', '$[]', '$>', '$length', '$inspect']); (function($base, $super) { function $Exception(){}; var self = $Exception = $klass($base, $super, 'Exception', $Exception); @@ -3926,15 +4498,17 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; def.message = nil; - self.$attr_reader("message"); - - Opal.defs(self, '$new', function(message) { - var self = this; + Opal.defs(self, '$new', function() { + var self = this, $splat_index = nil; - if (message == null) { - message = "Exception" + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; } + var message = (args.length > 0) ? args[0] : nil; var err = new self.$$alloc(message); if (Error.captureStackTrace) { @@ -3942,18 +4516,36 @@ Opal.modules["corelib/error"] = function(Opal) { } err.name = self.$$name; - err.$initialize(message); + err.$initialize.apply(err, args); return err; }); - def.$initialize = function(message) { - var self = this; + Opal.defs(self, '$exception', function() { + var $a, self = this, $splat_index = nil; - return self.message = message; - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = self).$new.apply($a, Opal.to_a(args)); + }); + + Opal.defn(self, '$initialize', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return self.message = (args.length > 0) ? args[0] : nil; + }); - def.$backtrace = function() { + Opal.defn(self, '$backtrace', function() { var self = this; @@ -3968,24 +4560,56 @@ Opal.modules["corelib/error"] = function(Opal) { return []; - }; + }); - def.$inspect = function() { + Opal.defn(self, '$exception', function(str) { var self = this; - return "#<" + (self.$class()) + ": '" + (self.message) + "'>"; - }; - - return Opal.defn(self, '$to_s', def.$message); - })(self, null); - (function($base, $super) { - function $ScriptError(){}; - var self = $ScriptError = $klass($base, $super, 'ScriptError', $ScriptError); + if (str == null) { + str = nil + } + + if (str === nil || self === str) { + return self; + } + + var cloned = self.$clone(); + cloned.message = str; + return cloned; + + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$message', function() { + var self = this; + + return self.$to_s(); + }); + + Opal.defn(self, '$inspect', function() { + var $a, self = this, as_str = nil; + + as_str = self.$to_s(); + if ((($a = as_str['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$class().$to_s() + } else { + return "#<" + (self.$class().$to_s()) + ": " + (self.$to_s()) + ">" + }; + }); + + return (Opal.defn(self, '$to_s', function() { + var $a, $b, self = this; + + return ((($a = (($b = self.message, $b !== false && $b !== nil ?self.message.$to_s() : $b))) !== false && $a !== nil) ? $a : self.$class().$to_s()); + }), nil) && 'to_s'; + })($scope.base, Error); + (function($base, $super) { + function $ScriptError(){}; + var self = $ScriptError = $klass($base, $super, 'ScriptError', $ScriptError); + + var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); (function($base, $super) { function $SyntaxError(){}; var self = $SyntaxError = $klass($base, $super, 'SyntaxError', $SyntaxError); @@ -3993,7 +4617,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('ScriptError')); + })($scope.base, $scope.get('ScriptError')); (function($base, $super) { function $LoadError(){}; var self = $LoadError = $klass($base, $super, 'LoadError', $LoadError); @@ -4001,7 +4625,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('ScriptError')); + })($scope.base, $scope.get('ScriptError')); (function($base, $super) { function $NotImplementedError(){}; var self = $NotImplementedError = $klass($base, $super, 'NotImplementedError', $NotImplementedError); @@ -4009,7 +4633,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('ScriptError')); + })($scope.base, $scope.get('ScriptError')); (function($base, $super) { function $SystemExit(){}; var self = $SystemExit = $klass($base, $super, 'SystemExit', $SystemExit); @@ -4017,7 +4641,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); (function($base, $super) { function $NoMemoryError(){}; var self = $NoMemoryError = $klass($base, $super, 'NoMemoryError', $NoMemoryError); @@ -4025,7 +4649,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); (function($base, $super) { function $SignalException(){}; var self = $SignalException = $klass($base, $super, 'SignalException', $SignalException); @@ -4033,7 +4657,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); (function($base, $super) { function $Interrupt(){}; var self = $Interrupt = $klass($base, $super, 'Interrupt', $Interrupt); @@ -4041,7 +4665,15 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); + (function($base, $super) { + function $SecurityError(){}; + var self = $SecurityError = $klass($base, $super, 'SecurityError', $SecurityError); + + var def = self.$$proto, $scope = self.$$scope; + + return nil; + })($scope.base, $scope.get('Exception')); (function($base, $super) { function $StandardError(){}; var self = $StandardError = $klass($base, $super, 'StandardError', $StandardError); @@ -4049,7 +4681,15 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('Exception')); + })($scope.base, $scope.get('Exception')); + (function($base, $super) { + function $ZeroDivisionError(){}; + var self = $ZeroDivisionError = $klass($base, $super, 'ZeroDivisionError', $ZeroDivisionError); + + var def = self.$$proto, $scope = self.$$scope; + + return nil; + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $NameError(){}; var self = $NameError = $klass($base, $super, 'NameError', $NameError); @@ -4057,7 +4697,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $NoMethodError(){}; var self = $NoMethodError = $klass($base, $super, 'NoMethodError', $NoMethodError); @@ -4065,7 +4705,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('NameError')); + })($scope.base, $scope.get('NameError')); (function($base, $super) { function $RuntimeError(){}; var self = $RuntimeError = $klass($base, $super, 'RuntimeError', $RuntimeError); @@ -4073,7 +4713,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $LocalJumpError(){}; var self = $LocalJumpError = $klass($base, $super, 'LocalJumpError', $LocalJumpError); @@ -4081,7 +4721,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $TypeError(){}; var self = $TypeError = $klass($base, $super, 'TypeError', $TypeError); @@ -4089,7 +4729,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $ArgumentError(){}; var self = $ArgumentError = $klass($base, $super, 'ArgumentError', $ArgumentError); @@ -4097,7 +4737,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $IndexError(){}; var self = $IndexError = $klass($base, $super, 'IndexError', $IndexError); @@ -4105,7 +4745,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $StopIteration(){}; var self = $StopIteration = $klass($base, $super, 'StopIteration', $StopIteration); @@ -4113,7 +4753,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('IndexError')); + })($scope.base, $scope.get('IndexError')); (function($base, $super) { function $KeyError(){}; var self = $KeyError = $klass($base, $super, 'KeyError', $KeyError); @@ -4121,7 +4761,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('IndexError')); + })($scope.base, $scope.get('IndexError')); (function($base, $super) { function $RangeError(){}; var self = $RangeError = $klass($base, $super, 'RangeError', $RangeError); @@ -4129,7 +4769,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $FloatDomainError(){}; var self = $FloatDomainError = $klass($base, $super, 'FloatDomainError', $FloatDomainError); @@ -4137,7 +4777,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('RangeError')); + })($scope.base, $scope.get('RangeError')); (function($base, $super) { function $IOError(){}; var self = $IOError = $klass($base, $super, 'IOError', $IOError); @@ -4145,7 +4785,7 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); + })($scope.base, $scope.get('StandardError')); (function($base, $super) { function $SystemCallError(){}; var self = $SystemCallError = $klass($base, $super, 'SystemCallError', $SystemCallError); @@ -4153,9 +4793,9 @@ Opal.modules["corelib/error"] = function(Opal) { var def = self.$$proto, $scope = self.$$scope; return nil; - })(self, $scope.get('StandardError')); - return (function($base) { - var self = $module($base, 'Errno'); + })($scope.base, $scope.get('StandardError')); + (function($base) { + var $Errno, self = $Errno = $module($base, 'Errno'); var def = self.$$proto, $scope = self.$$scope; @@ -4171,266 +4811,333 @@ Opal.modules["corelib/error"] = function(Opal) { TMP_1.$$p = null; return Opal.find_super_dispatcher(self, 'new', TMP_1, null, $EINVAL).apply(self, ["Invalid argument"]); }), nil) && 'new' - })(self, $scope.get('SystemCallError')) - })(self); -}; + })($scope.base, $scope.get('SystemCallError')) + })($scope.base); + (function($base, $super) { + function $UncaughtThrowError(){}; + var self = $UncaughtThrowError = $klass($base, $super, 'UncaughtThrowError', $UncaughtThrowError); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/regexp"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; + var def = self.$$proto, $scope = self.$$scope, TMP_2; + + def.sym = nil; + self.$attr_reader("sym", "arg"); + + return (Opal.defn(self, '$initialize', TMP_2 = function(args) { + var $a, self = this, $iter = TMP_2.$$p, $yield = $iter || nil; - Opal.add_stubs(['$nil?', '$[]', '$raise', '$escape', '$options', '$to_str', '$new', '$join', '$!', '$match', '$begin', '$coerce_to', '$call', '$=~']); + TMP_2.$$p = null; + self.sym = args['$[]'](0); + if ((($a = $rb_gt(args.$length(), 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.arg = args['$[]'](1)}; + return Opal.find_super_dispatcher(self, 'initialize', TMP_2, null).apply(self, ["uncaught throw " + (self.sym.$inspect())]); + }), nil) && 'initialize'; + })($scope.base, $scope.get('ArgumentError')); (function($base, $super) { - function $RegexpError(){}; - var self = $RegexpError = $klass($base, $super, 'RegexpError', $RegexpError); + function $NameError(){}; + var self = $NameError = $klass($base, $super, 'NameError', $NameError); - var def = self.$$proto, $scope = self.$$scope; + var def = self.$$proto, $scope = self.$$scope, TMP_3; - return nil; - })(self, $scope.get('StandardError')); + self.$attr_reader("name"); + + return (Opal.defn(self, '$initialize', TMP_3 = function(message, name) { + var self = this, $iter = TMP_3.$$p, $yield = $iter || nil; + + if (name == null) { + name = nil + } + TMP_3.$$p = null; + Opal.find_super_dispatcher(self, 'initialize', TMP_3, null).apply(self, [message]); + return self.name = name; + }), nil) && 'initialize'; + })($scope.base, null); return (function($base, $super) { - function $Regexp(){}; - var self = $Regexp = $klass($base, $super, 'Regexp', $Regexp); + function $NoMethodError(){}; + var self = $NoMethodError = $klass($base, $super, 'NoMethodError', $NoMethodError); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + var def = self.$$proto, $scope = self.$$scope, TMP_4; - Opal.cdecl($scope, 'IGNORECASE', 1); + self.$attr_reader("args"); - Opal.cdecl($scope, 'MULTILINE', 4); + return (Opal.defn(self, '$initialize', TMP_4 = function(message, name, args) { + var self = this, $iter = TMP_4.$$p, $yield = $iter || nil; - def.$$is_regexp = true; + if (args == null) { + args = [] + } + TMP_4.$$p = null; + Opal.find_super_dispatcher(self, 'initialize', TMP_4, null).apply(self, [message, name]); + return self.args = args; + }), nil) && 'initialize'; + })($scope.base, null); +}; - (function(self) { - var $scope = self.$$scope, def = self.$$proto; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/constants"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; - self.$$proto.$escape = function(string) { - var self = this; + Opal.cdecl($scope, 'RUBY_PLATFORM', "opal"); + Opal.cdecl($scope, 'RUBY_ENGINE', "opal"); + Opal.cdecl($scope, 'RUBY_VERSION', "2.2.3"); + Opal.cdecl($scope, 'RUBY_ENGINE_VERSION', "0.9.2"); + Opal.cdecl($scope, 'RUBY_RELEASE_DATE', "2016-01-10"); + Opal.cdecl($scope, 'RUBY_PATCHLEVEL', 0); + Opal.cdecl($scope, 'RUBY_REVISION', 0); + Opal.cdecl($scope, 'RUBY_COPYRIGHT', "opal - Copyright (C) 2013-2015 Adam Beynon"); + return Opal.cdecl($scope, 'RUBY_DESCRIPTION', "opal " + ($scope.get('RUBY_ENGINE_VERSION')) + " (" + ($scope.get('RUBY_RELEASE_DATE')) + " revision " + ($scope.get('RUBY_REVISION')) + ")"); +}; - - return string.replace(/([-[\]\/{}()*+?.^$\\| ])/g, '\\$1') - .replace(/[\n]/g, '\\n') - .replace(/[\r]/g, '\\r') - .replace(/[\f]/g, '\\f') - .replace(/[\t]/g, '\\t'); - - }; - self.$$proto.$last_match = function(n) { - var $a, self = this; - if ($gvars["~"] == null) $gvars["~"] = nil; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/base"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; - if (n == null) { - n = nil - } - if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return $gvars["~"] - } else { - return $gvars["~"]['$[]'](n) - }; - }; - self.$$proto.$quote = self.$$proto.$escape; - self.$$proto.$union = function(parts) { - var self = this; + Opal.add_stubs(['$require']); + self.$require("corelib/runtime"); + self.$require("corelib/helpers"); + self.$require("corelib/module"); + self.$require("corelib/class"); + self.$require("corelib/basic_object"); + self.$require("corelib/kernel"); + self.$require("corelib/error"); + return self.$require("corelib/constants"); +}; - parts = $slice.call(arguments, 0); - - var is_first_part_array, quoted_validated, part, options, each_part_options; - if (parts.length == 0) { - return /(?!)/; - } - // cover the 2 arrays passed as arguments case - is_first_part_array = parts[0].$$is_array; - if (parts.length > 1 && is_first_part_array) { - self.$raise($scope.get('TypeError'), "no implicit conversion of Array into String") - } - // deal with splat issues (related to https://github.com/opal/opal/issues/858) - if (is_first_part_array) { - parts = parts[0]; - } - options = undefined; - quoted_validated = []; - for (var i=0; i < parts.length; i++) { - part = parts[i]; - if (part.$$is_string) { - quoted_validated.push(self.$escape(part)); - } - else if (part.$$is_regexp) { - each_part_options = (part).$options(); - if (options != undefined && options != each_part_options) { - self.$raise($scope.get('TypeError'), "All expressions must use the same options") - } - options = each_part_options; - quoted_validated.push('('+part.source+')'); - } - else { - quoted_validated.push(self.$escape((part).$to_str())); - } - } - - return self.$new((quoted_validated).$join("|"), options); - }; - return (self.$$proto.$new = function(regexp, options) { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/nil"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - - // Play nice with IE8 - if (regexp.$$is_string && regexp.substr(regexp.length-1, 1) == "\\") { - self.$raise($scope.get('RegexpError'), "too short escape sequence: /" + (regexp) + "/") - } - - if (options == undefined || options['$!']()) { - options = undefined; - } - - if (options != undefined) { - if (regexp.$$is_regexp) { - // options are already in regex - options = undefined; - } - else if (options.$$is_number) { - var result = ''; - if ($scope.get('IGNORECASE') & options) { - result += 'i'; - } - if ($scope.get('MULTILINE') & options) { - result += 'm'; - } - options = result; - } - else { - options = 'i'; - } - } - - return new RegExp(regexp, options); - ; - }, nil) && 'new'; - })(self.$singleton_class()); + Opal.add_stubs(['$raise', '$class', '$new', '$>', '$length', '$Rational']); + (function($base, $super) { + function $NilClass(){}; + var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); - def['$=='] = function(other) { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return other.constructor == RegExp && self.toString() === other.toString(); - }; + def.$$meta = self; - def['$==='] = function(string) { + Opal.defn(self, '$!', function() { var self = this; - return self.$match(string) !== nil; - }; - - def['$=~'] = function(string) { - var $a, self = this; - if ($gvars["~"] == null) $gvars["~"] = nil; + return true; + }); - return ($a = self.$match(string), $a !== false && $a !== nil ?$gvars["~"].$begin(0) : $a); - }; + Opal.defn(self, '$&', function(other) { + var self = this; - Opal.defn(self, '$eql?', def['$==']); + return false; + }); - def.$inspect = function() { + Opal.defn(self, '$|', function(other) { var self = this; - return self.toString(); - }; + return other !== false && other !== nil; + }); - def.$match = TMP_1 = function(string, pos) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; - if ($gvars["~"] == null) $gvars["~"] = nil; + Opal.defn(self, '$^', function(other) { + var self = this; - TMP_1.$$p = null; - - if (pos === undefined) { - pos = 0; - } else { - pos = $scope.get('Opal').$coerce_to(pos, $scope.get('Integer'), "to_int"); - } + return other !== false && other !== nil; + }); - if (string === nil) { - return $gvars["~"] = nil; - } + Opal.defn(self, '$==', function(other) { + var self = this; - string = $scope.get('Opal').$coerce_to(string, $scope.get('String'), "to_str"); + return other === nil; + }); - if (pos < 0) { - pos += string.length; - if (pos < 0) { - return $gvars["~"] = nil; - } - } + Opal.defn(self, '$dup', function() { + var self = this; - // global RegExp maintains state, so not using self/this - var md, re = new RegExp(self.source, 'gm' + (self.ignoreCase ? 'i' : '')); + return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class())); + }); - while (true) { - md = re.exec(string); - if (md === null) { - return $gvars["~"] = nil; - } - if (md.index >= pos) { - $gvars["~"] = $scope.get('MatchData').$new(re, md) - return block === nil ? $gvars["~"] : block.$call($gvars["~"]); - } - re.lastIndex = md.index + 1; - } - ; - }; + Opal.defn(self, '$clone', function() { + var self = this; + + return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class())); + }); - def['$~'] = function() { + Opal.defn(self, '$inspect', function() { var self = this; - if ($gvars._ == null) $gvars._ = nil; - return self['$=~']($gvars._); - }; + return "nil"; + }); - def.$source = function() { + Opal.defn(self, '$nil?', function() { var self = this; - return self.source; - }; + return true; + }); - def.$options = function() { + Opal.defn(self, '$singleton_class', function() { var self = this; - - var as_string, text_flags, result, text_flag; - as_string = self.toString(); - if (as_string == "/(?:)/") { - self.$raise($scope.get('TypeError'), "uninitialized Regexp") - } - text_flags = as_string.replace(self.source, '').match(/\w+/); - result = 0; - // may have no flags - if (text_flags == null) { - return result; - } - // first match contains all of our flags - text_flags = text_flags[0]; - for (var i=0; i < text_flags.length; i++) { - text_flag = text_flags[i]; - switch(text_flag) { - case 'i': - result |= $scope.get('IGNORECASE'); - break; - case 'm': - result |= $scope.get('MULTILINE'); - break; - default: - self.$raise("RegExp flag " + (text_flag) + " does not have a match in Ruby") - } - } - - return result; - - }; + return $scope.get('NilClass'); + }); - return Opal.defn(self, '$to_s', def.$source); - })(self, null); -}; + Opal.defn(self, '$to_a', function() { + var self = this; -/* Generated by Opal 0.8.0 */ + return []; + }); + + Opal.defn(self, '$to_h', function() { + var self = this; + + return Opal.hash(); + }); + + Opal.defn(self, '$to_i', function() { + var self = this; + + return 0; + }); + + Opal.alias(self, 'to_f', 'to_i'); + + Opal.defn(self, '$to_s', function() { + var self = this; + + return ""; + }); + + Opal.defn(self, '$to_c', function() { + var self = this; + + return $scope.get('Complex').$new(0, 0); + }); + + Opal.defn(self, '$rationalize', function() { + var $a, self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + if ((($a = $rb_gt(args.$length(), 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'))}; + return self.$Rational(0, 1); + }); + + Opal.defn(self, '$to_r', function() { + var self = this; + + return self.$Rational(0, 1); + }); + + return (Opal.defn(self, '$instance_variables', function() { + var self = this; + + return []; + }), nil) && 'instance_variables'; + })($scope.base, null); + return Opal.cdecl($scope, 'NIL', nil); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/boolean"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + + Opal.add_stubs(['$raise', '$class']); + (function($base, $super) { + function $Boolean(){}; + var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); + + var def = self.$$proto, $scope = self.$$scope; + + def.$$is_boolean = true; + + def.$$meta = self; + + Opal.defn(self, '$__id__', function() { + var self = this; + + return self.valueOf() ? 2 : 0; + }); + + Opal.alias(self, 'object_id', '__id__'); + + Opal.defn(self, '$!', function() { + var self = this; + + return self != true; + }); + + Opal.defn(self, '$&', function(other) { + var self = this; + + return (self == true) ? (other !== false && other !== nil) : false; + }); + + Opal.defn(self, '$|', function(other) { + var self = this; + + return (self == true) ? true : (other !== false && other !== nil); + }); + + Opal.defn(self, '$^', function(other) { + var self = this; + + return (self == true) ? (other === false || other === nil) : (other !== false && other !== nil); + }); + + Opal.defn(self, '$==', function(other) { + var self = this; + + return (self == true) === other.valueOf(); + }); + + Opal.alias(self, 'equal?', '=='); + + Opal.alias(self, 'eql?', '=='); + + Opal.defn(self, '$singleton_class', function() { + var self = this; + + return $scope.get('Boolean'); + }); + + Opal.defn(self, '$to_s', function() { + var self = this; + + return (self == true) ? 'true' : 'false'; + }); + + Opal.defn(self, '$dup', function() { + var self = this; + + return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class())); + }); + + return (Opal.defn(self, '$clone', function() { + var self = this; + + return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class())); + }), nil) && 'clone'; + })($scope.base, Boolean); + Opal.cdecl($scope, 'TrueClass', $scope.get('Boolean')); + Opal.cdecl($scope, 'FalseClass', $scope.get('Boolean')); + Opal.cdecl($scope, 'TRUE', true); + return Opal.cdecl($scope, 'FALSE', false); +}; + +/* Generated by Opal 0.9.2 */ Opal.modules["corelib/comparable"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; function $rb_gt(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); } @@ -4439,9 +5146,9 @@ Opal.modules["corelib/comparable"] = function(Opal) { } var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - Opal.add_stubs(['$===', '$equal?', '$<=>', '$normalize', '$raise', '$class']); + Opal.add_stubs(['$===', '$>', '$<', '$equal?', '$<=>', '$normalize', '$raise', '$class']); return (function($base) { - var self = $module($base, 'Comparable'); + var $Comparable, self = $Comparable = $module($base, 'Comparable'); var def = self.$$proto, $scope = self.$$scope; @@ -4450,9 +5157,9 @@ Opal.modules["corelib/comparable"] = function(Opal) { if ((($a = $scope.get('Integer')['$==='](what)) !== nil && (!$a.$$is_boolean || $a == true))) { return what}; - if ($rb_gt(what, 0)) { + if ((($a = $rb_gt(what, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { return 1}; - if ($rb_lt(what, 0)) { + if ((($a = $rb_lt(what, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { return -1}; return 0; }); @@ -4463,13 +5170,28 @@ Opal.modules["corelib/comparable"] = function(Opal) { try { if ((($a = self['$equal?'](other)) !== nil && (!$a.$$is_boolean || $a == true))) { return true}; + + if (self["$<=>"] == Opal.Kernel["$<=>"]) { + return false; + } + + // check for infinite recursion + if (self.$$comparable) { + delete self.$$comparable; + return false; + } + if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a.$$is_boolean || $a == true))) { } else { return false }; return $scope.get('Comparable').$normalize(cmp) == 0; } catch ($err) {if (Opal.rescue($err, [$scope.get('StandardError')])) { - return false + try { + return false + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } }else { throw $err; } }; }); @@ -4523,22998 +5245,26855 @@ Opal.modules["corelib/comparable"] = function(Opal) { return false}; return true; }); - })(self) + })($scope.base) }; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/enumerable"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/regexp"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; - Opal.add_stubs(['$raise', '$enum_for', '$flatten', '$map', '$==', '$destructure', '$nil?', '$coerce_to!', '$coerce_to', '$===', '$new', '$<<', '$[]', '$[]=', '$inspect', '$__send__', '$yield', '$enumerator_size', '$respond_to?', '$size', '$private', '$compare', '$<=>', '$dup', '$to_a', '$lambda', '$sort', '$call', '$first', '$zip']); - return (function($base) { - var self = $module($base, 'Enumerable'); + Opal.add_stubs(['$nil?', '$[]', '$raise', '$escape', '$options', '$to_str', '$new', '$join', '$coerce_to!', '$!', '$match', '$coerce_to?', '$begin', '$coerce_to', '$call', '$=~', '$attr_reader', '$===', '$inspect', '$to_a']); + (function($base, $super) { + function $RegexpError(){}; + var self = $RegexpError = $klass($base, $super, 'RegexpError', $RegexpError); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14, TMP_15, TMP_16, TMP_17, TMP_18, TMP_19, TMP_20, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_32, TMP_33, TMP_35, TMP_37, TMP_41, TMP_42; + var def = self.$$proto, $scope = self.$$scope; - Opal.defn(self, '$all?', TMP_1 = function() { - var $a, self = this, $iter = TMP_1.$$p, block = $iter || nil; + return nil; + })($scope.base, $scope.get('StandardError')); + (function($base, $super) { + function $Regexp(){}; + var self = $Regexp = $klass($base, $super, 'Regexp', $Regexp); - TMP_1.$$p = null; - - var result = true; + var def = self.$$proto, $scope = self.$$scope, TMP_2; - if (block !== nil) { - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + Opal.cdecl($scope, 'IGNORECASE', 1); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + Opal.cdecl($scope, 'MULTILINE', 4); - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - result = false; - return $breaker; - } - }; - } - else { - self.$each.$$p = function(obj) { - if (arguments.length == 1 && (($a = obj) === nil || ($a.$$is_boolean && $a == false))) { - result = false; - return $breaker; - } - }; - } + def.$$is_regexp = true; - self.$each(); + (function(self) { + var $scope = self.$$scope, def = self.$$proto, TMP_1; - return result; - - }); + Opal.defn(self, '$allocate', TMP_1 = function() { + var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, allocated = nil, $zuper = nil, $zuper_index = nil; - Opal.defn(self, '$any?', TMP_2 = function() { - var $a, self = this, $iter = TMP_2.$$p, block = $iter || nil; + TMP_1.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + allocated = Opal.find_super_dispatcher(self, 'allocate', TMP_1, $iter).apply(self, $zuper); + allocated.uninitialized = true; + return allocated; + }); + Opal.defn(self, '$escape', function(string) { + var self = this; - TMP_2.$$p = null; + + return string.replace(/([-[\]\/{}()*+?.^$\\| ])/g, '\\$1') + .replace(/[\n]/g, '\\n') + .replace(/[\r]/g, '\\r') + .replace(/[\f]/g, '\\f') + .replace(/[\t]/g, '\\t'); - var result = false; + }); + Opal.defn(self, '$last_match', function(n) { + var $a, self = this; + if ($gvars["~"] == null) $gvars["~"] = nil; - if (block !== nil) { - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + if (n == null) { + n = nil + } + if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return $gvars["~"] + } else { + return $gvars["~"]['$[]'](n) + }; + }); + Opal.alias(self, 'quote', 'escape'); + Opal.defn(self, '$union', function() { + var self = this, $splat_index = nil; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var parts = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + parts[$splat_index] = arguments[$splat_index + 0]; + } + + var is_first_part_array, quoted_validated, part, options, each_part_options; + if (parts.length == 0) { + return /(?!)/; + } + // cover the 2 arrays passed as arguments case + is_first_part_array = parts[0].$$is_array; + if (parts.length > 1 && is_first_part_array) { + self.$raise($scope.get('TypeError'), "no implicit conversion of Array into String") + } + // deal with splat issues (related to https://github.com/opal/opal/issues/858) + if (is_first_part_array) { + parts = parts[0]; + } + options = undefined; + quoted_validated = []; + for (var i=0; i < parts.length; i++) { + part = parts[i]; + if (part.$$is_string) { + quoted_validated.push(self.$escape(part)); } - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result = true; - return $breaker; + else if (part.$$is_regexp) { + each_part_options = (part).$options(); + if (options != undefined && options != each_part_options) { + self.$raise($scope.get('TypeError'), "All expressions must use the same options") + } + options = each_part_options; + quoted_validated.push('('+part.source+')'); } - }; - } - else { - self.$each.$$p = function(obj) { - if (arguments.length != 1 || (($a = obj) !== nil && (!$a.$$is_boolean || $a == true))) { - result = true; - return $breaker; + else { + quoted_validated.push(self.$escape((part).$to_str())); } } - } + + return self.$new((quoted_validated).$join("|"), options); + }); + return (Opal.defn(self, '$new', function(regexp, options) { + var self = this; - self.$each(); + + if (regexp.$$is_regexp) { + return new RegExp(regexp); + } - return result; - - }); + regexp = $scope.get('Opal')['$coerce_to!'](regexp, $scope.get('String'), "to_str"); - Opal.defn(self, '$chunk', TMP_3 = function(state) { - var self = this, $iter = TMP_3.$$p, block = $iter || nil; + if (regexp.charAt(regexp.length - 1) === '\\') { + self.$raise($scope.get('RegexpError'), "too short escape sequence: /" + (regexp) + "/") + } - TMP_3.$$p = null; - return self.$raise($scope.get('NotImplementedError')); - }); + if (options === undefined || options['$!']()) { + return new RegExp(regexp); + } - Opal.defn(self, '$collect', TMP_4 = function() { - var self = this, $iter = TMP_4.$$p, block = $iter || nil; + if (options.$$is_number) { + var temp = ''; + if ($scope.get('IGNORECASE') & options) { temp += 'i'; } + if ($scope.get('MULTILINE') & options) { temp += 'm'; } + options = temp; + } + else { + options = 'i'; + } - TMP_4.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("collect") - }; - - var result = []; + return new RegExp(regexp, options); + ; + }), nil) && 'new'; + })(Opal.get_singleton_class(self)); - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + Opal.defn(self, '$==', function(other) { + var self = this; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + return other.constructor == RegExp && self.toString() === other.toString(); + }); - result.push(value); - }; + Opal.defn(self, '$===', function(string) { + var self = this; - self.$each(); + return self.$match($scope.get('Opal')['$coerce_to?'](string, $scope.get('String'), "to_str")) !== nil; + }); - return result; - + Opal.defn(self, '$=~', function(string) { + var $a, self = this; + if ($gvars["~"] == null) $gvars["~"] = nil; + + return ($a = self.$match(string), $a !== false && $a !== nil ?$gvars["~"].$begin(0) : $a); }); - Opal.defn(self, '$collect_concat', TMP_5 = function() { - var $a, $b, TMP_6, self = this, $iter = TMP_5.$$p, block = $iter || nil; + Opal.alias(self, 'eql?', '=='); - TMP_5.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("collect_concat") - }; - return ($a = ($b = self).$map, $a.$$p = (TMP_6 = function(item){var self = TMP_6.$$s || this, $a; -if (item == null) item = nil; - return $a = Opal.yield1(block, item), $a === $breaker ? $a : $a}, TMP_6.$$s = self, TMP_6), $a).call($b).$flatten(1); + Opal.defn(self, '$inspect', function() { + var self = this; + + return self.toString(); }); - Opal.defn(self, '$count', TMP_7 = function(object) { - var $a, self = this, $iter = TMP_7.$$p, block = $iter || nil; + Opal.defn(self, '$match', TMP_2 = function(string, pos) { + var self = this, $iter = TMP_2.$$p, block = $iter || nil; + if ($gvars["~"] == null) $gvars["~"] = nil; - TMP_7.$$p = null; + TMP_2.$$p = null; - var result = 0; - - if (object != null) { - block = function() { - return $scope.get('Opal').$destructure(arguments)['$=='](object); - }; + if (self.uninitialized) { + self.$raise($scope.get('TypeError'), "uninitialized Regexp") } - else if (block === nil) { - block = function() { return true; }; + + if (pos === undefined) { + pos = 0; + } else { + pos = $scope.get('Opal').$coerce_to(pos, $scope.get('Integer'), "to_int"); } - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + if (string === nil) { + return $gvars["~"] = nil; + } - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + string = $scope.get('Opal').$coerce_to(string, $scope.get('String'), "to_str"); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result++; + if (pos < 0) { + pos += string.length; + if (pos < 0) { + return $gvars["~"] = nil; } } - self.$each(); - - return result; - - }); - - Opal.defn(self, '$cycle', TMP_8 = function(n) { - var $a, self = this, $iter = TMP_8.$$p, block = $iter || nil; - - if (n == null) { - n = nil + var source = self.source; + var flags = 'g'; + // m flag + a . in Ruby will match white space, but in JS, it only matches beginning/ending of lines, so we get the equivalent here + if (self.multiline) { + source = source.replace('.', "[\\s\\S]"); + flags += 'm'; } - TMP_8.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("cycle", n) - }; - if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); - if ((($a = n <= 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - }; - - var result, - all = []; - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + // global RegExp maintains state, so not using self/this + var md, re = new RegExp(source, flags + (self.ignoreCase ? 'i' : '')); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + while (true) { + md = re.exec(string); + if (md === null) { + return $gvars["~"] = nil; } - - all.push(param); + if (md.index >= pos) { + $gvars["~"] = $scope.get('MatchData').$new(re, md) + return block === nil ? $gvars["~"] : block.$call($gvars["~"]); + } + re.lastIndex = md.index + 1; } + ; + }); - self.$each(); + Opal.defn(self, '$~', function() { + var self = this; + if ($gvars._ == null) $gvars._ = nil; - if (result !== undefined) { - return result; - } + return self['$=~']($gvars._); + }); - if (all.length === 0) { - return nil; - } - - if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - - while (true) { - for (var i = 0, length = all.length; i < length; i++) { - var value = Opal.yield1(block, all[i]); + Opal.defn(self, '$source', function() { + var self = this; - if (value === $breaker) { - return $breaker.$v; - } - } - } - - } else { - - while (n > 1) { - for (var i = 0, length = all.length; i < length; i++) { - var value = Opal.yield1(block, all[i]); + return self.source; + }); - if (value === $breaker) { - return $breaker.$v; - } - } + Opal.defn(self, '$options', function() { + var self = this; - n--; - } - }; + if (self.uninitialized) { + self.$raise($scope.get('TypeError'), "uninitialized Regexp") + } + var result = 0; + // should be supported in IE6 according to https://msdn.microsoft.com/en-us/library/7f5z26w4(v=vs.94).aspx + if (self.multiline) { + result |= $scope.get('MULTILINE'); + } + if (self.ignoreCase) { + result |= $scope.get('IGNORECASE'); + } + return result; + ; }); - Opal.defn(self, '$detect', TMP_9 = function(ifnone) { - var $a, self = this, $iter = TMP_9.$$p, block = $iter || nil; + Opal.defn(self, '$casefold?', function() { + var self = this; - TMP_9.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("detect", ifnone) - }; - - var result = undefined; + return self.ignoreCase; + }); - self.$each.$$p = function() { - var params = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, params); + return Opal.alias(self, 'to_s', 'source'); + })($scope.base, RegExp); + return (function($base, $super) { + function $MatchData(){}; + var self = $MatchData = $klass($base, $super, 'MatchData', $MatchData); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + var def = self.$$proto, $scope = self.$$scope; - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result = params; - return $breaker; - } - }; + def.matches = nil; + self.$attr_reader("post_match", "pre_match", "regexp", "string"); - self.$each(); + Opal.defn(self, '$initialize', function(regexp, match_groups) { + var self = this; - if (result === undefined && ifnone !== undefined) { - if (typeof(ifnone) === 'function') { - result = ifnone(); + $gvars["~"] = self; + self.regexp = regexp; + self.begin = match_groups.index; + self.string = match_groups.input; + self.pre_match = match_groups.input.slice(0, match_groups.index); + self.post_match = match_groups.input.slice(match_groups.index + match_groups[0].length); + self.matches = []; + + for (var i = 0, length = match_groups.length; i < length; i++) { + var group = match_groups[i]; + + if (group == null) { + self.matches.push(nil); } else { - result = ifnone; + self.matches.push(group); } } - - return result === undefined ? nil : result; }); - Opal.defn(self, '$drop', function(number) { - var $a, self = this; - - number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); - if ((($a = number < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "attempt to drop negative size")}; - - var result = [], - current = 0; - - self.$each.$$p = function() { - if (number <= current) { - result.push($scope.get('Opal').$destructure(arguments)); - } + Opal.defn(self, '$[]', function() { + var $a, self = this, $splat_index = nil; - current++; - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = self.matches)['$[]'].apply($a, Opal.to_a(args)); + }); - self.$each() + Opal.defn(self, '$offset', function(n) { + var self = this; - return result; - + + if (n !== 0) { + self.$raise($scope.get('ArgumentError'), "MatchData#offset only supports 0th element") + } + return [self.begin, self.begin + self.matches[n].length]; + ; }); - Opal.defn(self, '$drop_while', TMP_10 = function() { - var $a, self = this, $iter = TMP_10.$$p, block = $iter || nil; + Opal.defn(self, '$==', function(other) { + var $a, $b, $c, $d, self = this; - TMP_10.$$p = null; - if ((block !== nil)) { + if ((($a = $scope.get('MatchData')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return self.$enum_for("drop_while") + return false }; - - var result = [], - dropping = true; - - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); - - if (dropping) { - var value = Opal.yield1(block, param); - - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + return ($a = ($b = ($c = ($d = self.string == other.string, $d !== false && $d !== nil ?self.regexp.toString() == other.regexp.toString() : $d), $c !== false && $c !== nil ?self.pre_match == other.pre_match : $c), $b !== false && $b !== nil ?self.post_match == other.post_match : $b), $a !== false && $a !== nil ?self.begin == other.begin : $a); + }); - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - dropping = false; - result.push(param); - } - } - else { - result.push(param); - } - }; + Opal.alias(self, 'eql?', '=='); - self.$each(); + Opal.defn(self, '$begin', function(n) { + var self = this; - return result; - + + if (n !== 0) { + self.$raise($scope.get('ArgumentError'), "MatchData#begin only supports 0th element") + } + return self.begin; + ; }); - Opal.defn(self, '$each_cons', TMP_11 = function(n) { - var self = this, $iter = TMP_11.$$p, block = $iter || nil; + Opal.defn(self, '$end', function(n) { + var self = this; - TMP_11.$$p = null; - return self.$raise($scope.get('NotImplementedError')); + + if (n !== 0) { + self.$raise($scope.get('ArgumentError'), "MatchData#end only supports 0th element") + } + return self.begin + self.matches[n].length; + ; }); - Opal.defn(self, '$each_entry', TMP_12 = function() { - var self = this, $iter = TMP_12.$$p, block = $iter || nil; + Opal.defn(self, '$captures', function() { + var self = this; - TMP_12.$$p = null; - return self.$raise($scope.get('NotImplementedError')); + return self.matches.slice(1); }); - Opal.defn(self, '$each_slice', TMP_13 = function(n) { - var $a, self = this, $iter = TMP_13.$$p, block = $iter || nil; + Opal.defn(self, '$inspect', function() { + var self = this; - TMP_13.$$p = null; - n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - if ((($a = n <= 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "invalid slice size")}; - if ((block !== nil)) { - } else { - return self.$enum_for("each_slice", n) - }; - var result, - slice = [] + var str = "#"; + ; + }); - if (slice.length === n) { - if (Opal.yield1(block, slice) === $breaker) { - result = $breaker.$v; - return $breaker; - } + Opal.defn(self, '$length', function() { + var self = this; - slice = []; - } - }; + return self.matches.length; + }); - self.$each(); + Opal.alias(self, 'size', 'length'); - if (result !== undefined) { - return result; - } + Opal.defn(self, '$to_a', function() { + var self = this; - // our "last" group, if smaller than n then won't have been yielded - if (slice.length > 0) { - if (Opal.yield1(block, slice) === $breaker) { - return $breaker.$v; - } - } - ; - return nil; + return self.matches; }); - Opal.defn(self, '$each_with_index', TMP_14 = function(args) { - var $a, self = this, $iter = TMP_14.$$p, block = $iter || nil; + Opal.defn(self, '$to_s', function() { + var self = this; - args = $slice.call(arguments, 0); - TMP_14.$$p = null; - if ((block !== nil)) { - } else { - return ($a = self).$enum_for.apply($a, ["each_with_index"].concat(args)) - }; + return self.matches[0]; + }); + + return (Opal.defn(self, '$values_at', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } - var result, - index = 0; + var i, a, index, values = []; - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = block(param, index); + for (i = 0; i < args.length; i++) { - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + if (args[i].$$is_range) { + a = (args[i]).$to_a(); + a.unshift(i, 1); + Array.prototype.splice.apply(args, a); } - index++; - }; + index = $scope.get('Opal')['$coerce_to!'](args[i], $scope.get('Integer'), "to_int"); - self.$each.apply(self, args); + if (index < 0) { + index += self.matches.length; + if (index < 0) { + values.push(nil); + continue; + } + } - if (result !== undefined) { - return result; + values.push(self.matches[index]); } + + return values; - return self; - }); + }), nil) && 'values_at'; + })($scope.base, null); +}; - Opal.defn(self, '$each_with_object', TMP_15 = function(object) { - var self = this, $iter = TMP_15.$$p, block = $iter || nil; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/string"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; - TMP_15.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("each_with_object", object) - }; - - var result; + Opal.add_stubs(['$require', '$include', '$coerce_to?', '$coerce_to', '$raise', '$===', '$format', '$to_s', '$respond_to?', '$to_str', '$<=>', '$==', '$=~', '$new', '$empty?', '$ljust', '$ceil', '$/', '$+', '$rjust', '$floor', '$to_a', '$each_char', '$to_proc', '$coerce_to!', '$copy_singleton_methods', '$initialize_clone', '$initialize_dup', '$enum_for', '$size', '$chomp', '$[]', '$to_i', '$class', '$each_line', '$match', '$captures', '$proc', '$shift', '$__send__', '$succ', '$escape']); + self.$require("corelib/comparable"); + self.$require("corelib/regexp"); + (function($base, $super) { + function $String(){}; + var self = $String = $klass($base, $super, 'String', $String); - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = block(param, object); + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_11; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - }; + def.length = nil; + self.$include($scope.get('Comparable')); - self.$each(); + def.$$is_string = true; - if (result !== undefined) { - return result; - } - - return object; + Opal.defn(self, '$__id__', function() { + var self = this; + + return self.toString(); }); - Opal.defn(self, '$entries', function(args) { + Opal.alias(self, 'object_id', '__id__'); + + Opal.defs(self, '$try_convert', function(what) { var self = this; - args = $slice.call(arguments, 0); - - var result = []; + return $scope.get('Opal')['$coerce_to?'](what, $scope.get('String'), "to_str"); + }); - self.$each.$$p = function() { - result.push($scope.get('Opal').$destructure(arguments)); - }; + Opal.defs(self, '$new', function(str) { + var self = this; - self.$each.apply(self, args); + if (str == null) { + str = "" + } + str = $scope.get('Opal').$coerce_to(str, $scope.get('String'), "to_str"); + return new String(str); + }); - return result; + Opal.defn(self, '$initialize', function(str) { + var self = this; + + + if (str === undefined) { + return self; + } + return self.$raise($scope.get('NotImplementedError'), "Mutable strings are not supported in Opal."); }); - Opal.defn(self, '$find', def.$detect); - - Opal.defn(self, '$find_all', TMP_16 = function() { - var $a, self = this, $iter = TMP_16.$$p, block = $iter || nil; + Opal.defn(self, '$%', function(data) { + var $a, self = this; - TMP_16.$$p = null; - if ((block !== nil)) { + if ((($a = $scope.get('Array')['$==='](data)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = self).$format.apply($a, [self].concat(Opal.to_a(data))) } else { - return self.$enum_for("find_all") + return self.$format(self, data) }; + }); + + Opal.defn(self, '$*', function(count) { + var self = this; + - var result = []; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + if (count < 0) { + self.$raise($scope.get('ArgumentError'), "negative argument") + } - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + if (count === 0) { + return ''; + } - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result.push(param); - } - }; + var result = '', + string = self.toString(); - self.$each(); + // All credit for the bit-twiddling magic code below goes to Mozilla + // polyfill implementation of String.prototype.repeat() posted here: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat + + if (string.length * count >= 1 << 28) { + self.$raise($scope.get('RangeError'), "multiply count must not overflow maximum string size") + } + + for (;;) { + if ((count & 1) === 1) { + result += string; + } + count >>>= 1; + if (count === 0) { + break; + } + string += string; + } return result; - + ; }); - Opal.defn(self, '$find_index', TMP_17 = function(object) { - var $a, self = this, $iter = TMP_17.$$p, block = $iter || nil; - - TMP_17.$$p = null; - if ((($a = object === undefined && block === nil) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$enum_for("find_index")}; - - var result = nil, - index = 0; - - if (object != null) { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); - - if ((param)['$=='](object)) { - result = index; - return $breaker; - } - - index += 1; - }; - } - else if (block !== nil) { - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); - - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result = index; - return $breaker; - } - - index += 1; - }; - } - - self.$each(); + Opal.defn(self, '$+', function(other) { + var self = this; - return result; - + other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str"); + return self + other.$to_s(); }); - Opal.defn(self, '$first', function(number) { - var $a, self = this, result = nil; - - if ((($a = number === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { - result = nil; - - self.$each.$$p = function() { - result = $scope.get('Opal').$destructure(arguments); - - return $breaker; - }; + Opal.defn(self, '$<=>', function(other) { + var $a, self = this; - self.$each(); - ; + if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_str().$to_s(); + return self > other ? 1 : (self < other ? -1 : 0); } else { - result = []; - number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); - if ((($a = number < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "attempt to take negative size")}; - if ((($a = number == 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - var current = 0, - number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); - - self.$each.$$p = function() { - result.push($scope.get('Opal').$destructure(arguments)); - - if (number <= ++current) { - return $breaker; - } - }; + var cmp = other['$<=>'](self); - self.$each(); + if (cmp === nil) { + return nil; + } + else { + return cmp > 0 ? -1 : (cmp < 0 ? 1 : 0); + } ; }; - return result; }); - Opal.defn(self, '$flat_map', def.$collect_concat); - - Opal.defn(self, '$grep', TMP_18 = function(pattern) { - var $a, self = this, $iter = TMP_18.$$p, block = $iter || nil; + Opal.defn(self, '$==', function(other) { + var self = this; - TMP_18.$$p = null; - var result = []; - - if (block !== nil) { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = pattern['$==='](param); + if (other.$$is_string) { + return self.toString() === other.toString(); + } + if ($scope.get('Opal')['$respond_to?'](other, "to_str")) { + return other['$=='](self); + } + return false; + ; + }); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - value = Opal.yield1(block, param); + Opal.alias(self, 'eql?', '=='); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + Opal.alias(self, '===', '=='); - result.push(value); - } - }; - } - else { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = pattern['$==='](param); + Opal.defn(self, '$=~', function(other) { + var self = this; - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result.push(param); - } - }; + + if (other.$$is_string) { + self.$raise($scope.get('TypeError'), "type mismatch: String given"); } - self.$each(); - - return result; + return other['$=~'](self); ; }); - Opal.defn(self, '$group_by', TMP_19 = function() { - var $a, $b, $c, self = this, $iter = TMP_19.$$p, block = $iter || nil, hash = nil; + Opal.defn(self, '$[]', function(index, length) { + var self = this; - TMP_19.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("group_by") - }; - hash = $scope.get('Hash').$new(); - var result; + var size = self.length, exclude; - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + if (index.$$is_range) { + exclude = index.exclude; + length = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"); + index = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + if (Math.abs(index) > size) { + return nil; } - (($a = value, $b = hash, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, []))))['$<<'](param); - } + if (index < 0) { + index += size; + } - self.$each(); + if (length < 0) { + length += size; + } - if (result !== undefined) { - return result; - } - - return hash; - }); + if (!exclude) { + length += 1; + } - Opal.defn(self, '$include?', function(obj) { - var self = this; + length = length - index; - - var result = false; + if (length < 0) { + length = 0; + } - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); + return self.substr(index, length); + } - if ((param)['$=='](obj)) { - result = true; - return $breaker; + + if (index.$$is_string) { + if (length != null) { + self.$raise($scope.get('TypeError')) } + return self.indexOf(index) !== -1 ? index : nil; } - self.$each(); - return result; - - }); + if (index.$$is_regexp) { + var match = self.match(index); - Opal.defn(self, '$inject', TMP_20 = function(object, sym) { - var self = this, $iter = TMP_20.$$p, block = $iter || nil; + if (match === null) { + $gvars["~"] = nil + return nil; + } - TMP_20.$$p = null; - - var result = object; + $gvars["~"] = $scope.get('MatchData').$new(index, match) - if (block !== nil && sym === undefined) { - self.$each.$$p = function() { - var value = $scope.get('Opal').$destructure(arguments); + if (length == null) { + return match[0]; + } - if (result === undefined) { - result = value; - return; - } + length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - value = Opal.yieldX(block, [result, value]); + if (length < 0 && -length < match.length) { + return match[length += match.length]; + } - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + if (length >= 0 && length < match.length) { + return match[length]; + } - result = value; - }; + return nil; } - else { - if (sym === undefined) { - if (!$scope.get('Symbol')['$==='](object)) { - self.$raise($scope.get('TypeError'), "" + (object.$inspect()) + " is not a Symbol"); - } - sym = object; - result = undefined; - } - self.$each.$$p = function() { - var value = $scope.get('Opal').$destructure(arguments); + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - if (result === undefined) { - result = value; - return; - } + if (index < 0) { + index += size; + } - result = (result).$__send__(sym, value); - }; + if (length == null) { + if (index >= size || index < 0) { + return nil; + } + return self.substr(index, 1); } - self.$each(); + length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - return result == undefined ? nil : result; - ; - }); + if (length < 0) { + return nil; + } - Opal.defn(self, '$lazy', function() { - var $a, $b, TMP_21, self = this; + if (index > size || index < 0) { + return nil; + } - return ($a = ($b = (($scope.get('Enumerator')).$$scope.get('Lazy'))).$new, $a.$$p = (TMP_21 = function(enum$, args){var self = TMP_21.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - return ($a = enum$).$yield.apply($a, [].concat(args))}, TMP_21.$$s = self, TMP_21), $a).call($b, self, self.$enumerator_size()); + return self.substr(index, length); + }); - Opal.defn(self, '$enumerator_size', function() { - var $a, self = this; - - if ((($a = self['$respond_to?']("size")) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$size() - } else { - return nil - }; - }); + Opal.alias(self, 'byteslice', '[]'); - self.$private("enumerator_size"); + Opal.defn(self, '$capitalize', function() { + var self = this; - Opal.defn(self, '$map', def.$collect); + return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase(); + }); - Opal.defn(self, '$max', TMP_22 = function() { - var self = this, $iter = TMP_22.$$p, block = $iter || nil; + Opal.defn(self, '$casecmp', function(other) { + var self = this; - TMP_22.$$p = null; + other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str").$to_s(); - var result; - - if (block !== nil) { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); - - if (result === undefined) { - result = param; - return; - } - - var value = block(param, result); - - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - - if (value === nil) { - self.$raise($scope.get('ArgumentError'), "comparison failed"); - } - - if (value > 0) { - result = param; - } - }; + var ascii_only = /^[\x00-\x7F]*$/; + if (ascii_only.test(self) && ascii_only.test(other)) { + self = self.toLowerCase(); + other = other.toLowerCase(); } - else { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); + + return self['$<=>'](other); + }); - if (result === undefined) { - result = param; - return; - } + Opal.defn(self, '$center', function(width, padstr) { + var $a, self = this; - if ($scope.get('Opal').$compare(param, result) > 0) { - result = param; - } - }; + if (padstr == null) { + padstr = " " } + width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); + padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); + if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "zero width padding")}; + if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + + var ljustified = self.$ljust($rb_divide(($rb_plus(width, self.length)), 2).$ceil(), padstr), + rjustified = self.$rjust($rb_divide(($rb_plus(width, self.length)), 2).$floor(), padstr); - self.$each(); - - return result === undefined ? nil : result; - + return rjustified + ljustified.slice(self.length); + ; }); - Opal.defn(self, '$max_by', TMP_23 = function() { - var self = this, $iter = TMP_23.$$p, block = $iter || nil; + Opal.defn(self, '$chars', TMP_1 = function() { + var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; - TMP_23.$$p = null; + TMP_1.$$p = null; if (block !== false && block !== nil) { } else { - return self.$enum_for("max_by") + return self.$each_char().$to_a() }; - - var result, - by; + return ($a = ($b = self).$each_char, $a.$$p = block.$to_proc(), $a).call($b); + }); - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + Opal.defn(self, '$chomp', function(separator) { + var $a, self = this; + if ($gvars["/"] == null) $gvars["/"] = nil; - if (result === undefined) { - result = param; - by = value; - return; - } + if (separator == null) { + separator = $gvars["/"] + } + if ((($a = separator === nil || self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + separator = $scope.get('Opal')['$coerce_to!'](separator, $scope.get('String'), "to_str").$to_s(); + + if (separator === "\n") { + return self.replace(/\r?\n?$/, ''); + } + else if (separator === "") { + return self.replace(/(\r?\n)+$/, ''); + } + else if (self.length > separator.length) { + var tail = self.substr(self.length - separator.length, separator.length); - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + if (tail === separator) { + return self.substr(0, self.length - separator.length); } + } + + return self; + }); - if ((value)['$<=>'](by) > 0) { - result = param - by = value; - } - }; + Opal.defn(self, '$chop', function() { + var self = this; - self.$each(); + + var length = self.length; - return result === undefined ? nil : result; + if (length <= 1) { + return ""; + } + + if (self.charAt(length - 1) === "\n" && self.charAt(length - 2) === "\r") { + return self.substr(0, length - 2); + } + else { + return self.substr(0, length - 1); + } }); - Opal.defn(self, '$member?', def['$include?']); - - Opal.defn(self, '$min', TMP_24 = function() { - var self = this, $iter = TMP_24.$$p, block = $iter || nil; + Opal.defn(self, '$chr', function() { + var self = this; - TMP_24.$$p = null; - - var result; + return self.charAt(0); + }); - if (block !== nil) { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); + Opal.defn(self, '$clone', function() { + var self = this, copy = nil; - if (result === undefined) { - result = param; - return; - } + copy = self.slice(); + copy.$copy_singleton_methods(self); + copy.$initialize_clone(self); + return copy; + }); - var value = block(param, result); + Opal.defn(self, '$dup', function() { + var self = this, copy = nil; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + copy = self.slice(); + copy.$initialize_dup(self); + return copy; + }); - if (value === nil) { - self.$raise($scope.get('ArgumentError'), "comparison failed"); - } + Opal.defn(self, '$count', function() { + var self = this, $splat_index = nil; - if (value < 0) { - result = param; - } - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var sets = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + sets[$splat_index] = arguments[$splat_index + 0]; } - else { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments); + + if (sets.length === 0) { + self.$raise($scope.get('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") + } + var char_class = char_class_from_char_sets(sets); + if (char_class === null) { + return 0; + } + return self.length - self.replace(new RegExp(char_class, 'g'), '').length; + ; + }); - if (result === undefined) { - result = param; - return; - } + Opal.defn(self, '$delete', function() { + var self = this, $splat_index = nil; - if ($scope.get('Opal').$compare(param, result) < 0) { - result = param; - } - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var sets = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + sets[$splat_index] = arguments[$splat_index + 0]; + } + + if (sets.length === 0) { + self.$raise($scope.get('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") + } + var char_class = char_class_from_char_sets(sets); + if (char_class === null) { + return self; } + return self.replace(new RegExp(char_class, 'g'), ''); + ; + }); - self.$each(); + Opal.defn(self, '$downcase', function() { + var self = this; - return result === undefined ? nil : result; - + return self.toLowerCase(); }); - Opal.defn(self, '$min_by', TMP_25 = function() { - var self = this, $iter = TMP_25.$$p, block = $iter || nil; + Opal.defn(self, '$each_char', TMP_2 = function() { + var $a, $b, TMP_3, self = this, $iter = TMP_2.$$p, block = $iter || nil; - TMP_25.$$p = null; - if (block !== false && block !== nil) { + TMP_2.$$p = null; + if ((block !== nil)) { } else { - return self.$enum_for("min_by") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; + + return self.$size()}, TMP_3.$$s = self, TMP_3), $a).call($b, "each_char") }; - var result, - by; - - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); - - if (result === undefined) { - result = param; - by = value; - return; - } + for (var i = 0, length = self.length; i < length; i++) { + var value = Opal.yield1(block, self.charAt(i)); if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - - if ((value)['$<=>'](by) < 0) { - result = param - by = value; + return $breaker.$v; } - }; - - self.$each(); - - return result === undefined ? nil : result; + } + return self; }); - Opal.defn(self, '$minmax', TMP_26 = function() { - var self = this, $iter = TMP_26.$$p, block = $iter || nil; - - TMP_26.$$p = null; - return self.$raise($scope.get('NotImplementedError')); - }); + Opal.defn(self, '$each_line', TMP_4 = function(separator) { + var self = this, $iter = TMP_4.$$p, block = $iter || nil; + if ($gvars["/"] == null) $gvars["/"] = nil; - Opal.defn(self, '$minmax_by', TMP_27 = function() { - var self = this, $iter = TMP_27.$$p, block = $iter || nil; + if (separator == null) { + separator = $gvars["/"] + } + TMP_4.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("each_line", separator) + }; + + var value; - TMP_27.$$p = null; - return self.$raise($scope.get('NotImplementedError')); - }); + if (separator === nil) { + value = Opal.yield1(block, self); - Opal.defn(self, '$none?', TMP_28 = function() { - var $a, self = this, $iter = TMP_28.$$p, block = $iter || nil; + if (value === $breaker) { + return value.$v; + } + else { + return self; + } + } - TMP_28.$$p = null; - - var result = true; + separator = $scope.get('Opal').$coerce_to(separator, $scope.get('String'), "to_str") - if (block !== nil) { - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + var a, i, n, length, chomped, trailing, splitted; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + if (separator.length === 0) { + for (a = self.split(/(\n{2,})/), i = 0, n = a.length; i < n; i += 2) { + if (a[i] || a[i + 1]) { + value = Opal.yield1(block, (a[i] || "") + (a[i + 1] || "")); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result = false; - return $breaker; + if (value === $breaker) { + return value.$v; + } } } - } - else { - self.$each.$$p = function() { - var value = $scope.get('Opal').$destructure(arguments); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - result = false; - return $breaker; - } - }; + return self; } - self.$each(); - - return result; - - }); - - Opal.defn(self, '$one?', TMP_29 = function() { - var $a, self = this, $iter = TMP_29.$$p, block = $iter || nil; - - TMP_29.$$p = null; - - var result = false; + chomped = self.$chomp(separator); + trailing = self.length != chomped.length; + splitted = chomped.split(separator); - if (block !== nil) { - self.$each.$$p = function() { - var value = Opal.yieldX(block, arguments); + for (i = 0, length = splitted.length; i < length; i++) { + if (i < length - 1 || trailing) { + value = Opal.yield1(block, splitted[i] + separator); if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - if (result === true) { - result = false; - return $breaker; - } - - result = true; + return value.$v; } } - } - else { - self.$each.$$p = function() { - var value = $scope.get('Opal').$destructure(arguments); - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - if (result === true) { - result = false; - return $breaker; - } + else { + value = Opal.yield1(block, splitted[i]); - result = true; + if (value === $breaker) { + return value.$v; } } } - - self.$each(); - - return result; + return self; }); - Opal.defn(self, '$partition', TMP_30 = function() { - var $a, self = this, $iter = TMP_30.$$p, block = $iter || nil; + Opal.defn(self, '$empty?', function() { + var self = this; - TMP_30.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("partition") - }; - - var truthy = [], falsy = [], result; + return self.length === 0; + }); - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + Opal.defn(self, '$end_with?', function() { + var self = this, $splat_index = nil; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var suffixes = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + suffixes[$splat_index] = arguments[$splat_index + 0]; + } + + for (var i = 0, length = suffixes.length; i < length; i++) { + var suffix = $scope.get('Opal').$coerce_to(suffixes[i], $scope.get('String'), "to_str").$to_s(); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - truthy.push(param); - } - else { - falsy.push(param); + if (self.length >= suffix.length && + self.substr(self.length - suffix.length, suffix.length) == suffix) { + return true; } - }; - - self.$each(); - - return [truthy, falsy]; + } + return false; }); - Opal.defn(self, '$reduce', def.$inject); + Opal.alias(self, 'eql?', '=='); - Opal.defn(self, '$reject', TMP_31 = function() { - var $a, self = this, $iter = TMP_31.$$p, block = $iter || nil; + Opal.alias(self, 'equal?', '==='); - TMP_31.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("reject") - }; + Opal.defn(self, '$gsub', TMP_5 = function(pattern, replacement) { + var self = this, $iter = TMP_5.$$p, block = $iter || nil; + + TMP_5.$$p = null; - var result = []; + if (replacement === undefined && block === nil) { + return self.$enum_for("gsub", pattern); + } - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + var result = '', match_data = nil, index = 0, match, _replacement; - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + if (pattern.$$is_regexp) { + pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); + } else { + pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); + pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + } + + while (true) { + match = pattern.exec(self); + + if (match === null) { + $gvars["~"] = nil + result += self.slice(index); + break; } - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - result.push(param); + match_data = $scope.get('MatchData').$new(pattern, match); + + if (replacement === undefined) { + _replacement = block(match[0]); + } + else if (replacement.$$is_hash) { + _replacement = (replacement)['$[]'](match[0]).$to_s(); + } + else { + if (!replacement.$$is_string) { + replacement = $scope.get('Opal').$coerce_to(replacement, $scope.get('String'), "to_str"); + } + _replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { + if (slashes.length % 2 === 0) { + return original; + } + switch (command) { + case "+": + for (var i = match.length - 1; i > 0; i--) { + if (match[i] !== undefined) { + return slashes.slice(1) + match[i]; + } + } + return ''; + case "&": return slashes.slice(1) + match[0]; + case "`": return slashes.slice(1) + self.slice(0, match.index); + case "'": return slashes.slice(1) + self.slice(match.index + match[0].length); + default: return slashes.slice(1) + (match[command] || ''); + } + }).replace(/\\\\/g, '\\'); } - }; - self.$each(); + if (pattern.lastIndex === match.index) { + result += (_replacement + self.slice(index, match.index + 1)) + pattern.lastIndex += 1; + } + else { + result += (self.slice(index, match.index) + _replacement) + } + index = pattern.lastIndex; + } + $gvars["~"] = match_data return result; - + ; }); - Opal.defn(self, '$reverse_each', TMP_32 = function() { - var self = this, $iter = TMP_32.$$p, block = $iter || nil; + Opal.defn(self, '$hash', function() { + var self = this; - TMP_32.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("reverse_each") - }; - - var result = []; + return self.toString(); + }); - self.$each.$$p = function() { - result.push(arguments); - }; + Opal.defn(self, '$hex', function() { + var self = this; - self.$each(); + return self.$to_i(16); + }); - for (var i = result.length - 1; i >= 0; i--) { - Opal.yieldX(block, result[i]); - } + Opal.defn(self, '$include?', function(other) { + var $a, self = this; - return result; + + if (other.$$is_string) { + return self.indexOf(other) !== -1; + } + if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "no implicit conversion of " + (other.$class()) + " into String") + }; + return self.indexOf(other.$to_str()) !== -1; }); - Opal.defn(self, '$select', def.$find_all); - - Opal.defn(self, '$slice_before', TMP_33 = function(pattern) { - var $a, $b, TMP_34, self = this, $iter = TMP_33.$$p, block = $iter || nil; + Opal.defn(self, '$index', function(search, offset) { + var self = this; - TMP_33.$$p = null; - if ((($a = pattern === undefined && block === nil || arguments.length > 1) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 1)")}; - return ($a = ($b = $scope.get('Enumerator')).$new, $a.$$p = (TMP_34 = function(e){var self = TMP_34.$$s || this, $a; -if (e == null) e = nil; - var slice = []; - - if (block !== nil) { - if (pattern === undefined) { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); + var index, + match, + regex; - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { - e['$<<'](slice); - slice = []; - } - - slice.push(param); - }; - } - else { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = block(param, pattern.$dup()); - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { - e['$<<'](slice); - slice = []; - } - - slice.push(param); - }; + if (offset === undefined) { + offset = 0; + } else { + offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int"); + if (offset < 0) { + offset += self.length; + if (offset < 0) { + return nil; } } - else { - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = pattern['$==='](param); - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { - e['$<<'](slice); - slice = []; - } + } - slice.push(param); - }; + if (search.$$is_regexp) { + regex = new RegExp(search.source, 'gm' + (search.ignoreCase ? 'i' : '')); + while (true) { + match = regex.exec(self); + if (match === null) { + $gvars["~"] = nil; + index = -1; + break; + } + if (match.index >= offset) { + $gvars["~"] = $scope.get('MatchData').$new(regex, match) + index = match.index; + break; + } + regex.lastIndex = match.index + 1; } - - self.$each(); - - if (slice.length > 0) { - e['$<<'](slice); + } else { + search = $scope.get('Opal').$coerce_to(search, $scope.get('String'), "to_str"); + if (search.length === 0 && offset > self.length) { + index = -1; + } else { + index = self.indexOf(search, offset); } - ;}, TMP_34.$$s = self, TMP_34), $a).call($b); - }); - - Opal.defn(self, '$sort', TMP_35 = function() { - var $a, $b, TMP_36, self = this, $iter = TMP_35.$$p, block = $iter || nil, ary = nil; + } - TMP_35.$$p = null; - ary = self.$to_a(); - if ((block !== nil)) { - } else { - block = ($a = ($b = self).$lambda, $a.$$p = (TMP_36 = function(a, b){var self = TMP_36.$$s || this; -if (a == null) a = nil;if (b == null) b = nil; - return a['$<=>'](b)}, TMP_36.$$s = self, TMP_36), $a).call($b) - }; - return ary.sort(block); + return index === -1 ? nil : index; + }); - Opal.defn(self, '$sort_by', TMP_37 = function() { - var $a, $b, TMP_38, $c, $d, TMP_39, $e, $f, TMP_40, self = this, $iter = TMP_37.$$p, block = $iter || nil; - - TMP_37.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("sort_by") - }; - return ($a = ($b = ($c = ($d = ($e = ($f = self).$map, $e.$$p = (TMP_40 = function(){var self = TMP_40.$$s || this, arg = nil; + Opal.defn(self, '$inspect', function() { + var self = this; - arg = $scope.get('Opal').$destructure(arguments); - return [block.$call(arg), arg];}, TMP_40.$$s = self, TMP_40), $e).call($f)).$sort, $c.$$p = (TMP_39 = function(a, b){var self = TMP_39.$$s || this; -if (a == null) a = nil;if (b == null) b = nil; - return a['$[]'](0)['$<=>'](b['$[]'](0))}, TMP_39.$$s = self, TMP_39), $c).call($d)).$map, $a.$$p = (TMP_38 = function(arg){var self = TMP_38.$$s || this; -if (arg == null) arg = nil; - return arg[1];}, TMP_38.$$s = self, TMP_38), $a).call($b); + + var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + meta = { + '\u0007': '\\a', + '\u001b': '\\e', + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\v': '\\v', + '"' : '\\"', + '\\': '\\\\' + }, + escaped = self.replace(escapable, function (chr) { + return meta[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16).toUpperCase()).slice(-4); + }); + return '"' + escaped.replace(/\#[\$\@\{]/g, '\\$&') + '"'; + }); - Opal.defn(self, '$take', function(num) { + Opal.defn(self, '$intern', function() { var self = this; - return self.$first(num); + return self; }); - Opal.defn(self, '$take_while', TMP_41 = function() { - var $a, self = this, $iter = TMP_41.$$p, block = $iter || nil; + Opal.defn(self, '$lines', TMP_6 = function(separator) { + var $a, $b, self = this, $iter = TMP_6.$$p, block = $iter || nil, e = nil; + if ($gvars["/"] == null) $gvars["/"] = nil; - TMP_41.$$p = null; + if (separator == null) { + separator = $gvars["/"] + } + TMP_6.$$p = null; + e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator); if (block !== false && block !== nil) { + return self } else { - return self.$enum_for("take_while") - }; - - var result = []; - - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = Opal.yield1(block, param); - - if (value === $breaker) { - result = $breaker.$v; - return $breaker; - } - - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - return $breaker; - } - - result.push(param); + return e.$to_a() }; - - self.$each(); - - return result; - }); - Opal.defn(self, '$to_a', def.$entries); - - Opal.defn(self, '$zip', TMP_42 = function(others) { - var $a, self = this, $iter = TMP_42.$$p, block = $iter || nil; + Opal.defn(self, '$length', function() { + var self = this; - others = $slice.call(arguments, 0); - TMP_42.$$p = null; - return ($a = self.$to_a()).$zip.apply($a, [].concat(others)); + return self.length; }); - })(self) -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/enumerator"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - - Opal.add_stubs(['$require', '$include', '$allocate', '$new', '$to_proc', '$coerce_to', '$nil?', '$empty?', '$class', '$__send__', '$===', '$call', '$enum_for', '$destructure', '$inspect', '$[]', '$raise', '$yield', '$each', '$enumerator_size', '$respond_to?', '$try_convert', '$for']); - self.$require("corelib/enumerable"); - return (function($base, $super) { - function $Enumerator(){}; - var self = $Enumerator = $klass($base, $super, 'Enumerator', $Enumerator); - - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4; - - def.size = def.args = def.object = def.method = nil; - self.$include($scope.get('Enumerable')); - Opal.defs(self, '$for', TMP_1 = function(object, method, args) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$ljust', function(width, padstr) { + var $a, self = this; - args = $slice.call(arguments, 2); - if (method == null) { - method = "each" + if (padstr == null) { + padstr = " " } - TMP_1.$$p = null; + width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); + padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); + if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "zero width padding")}; + if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; - var obj = self.$allocate(); - - obj.object = object; - obj.size = block; - obj.method = method; - obj.args = args; + var index = -1, + result = ""; - return obj; - ; - }); + width -= self.length; - def.$initialize = TMP_2 = function() { - var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil; + while (++index < width) { + result += padstr; + } - TMP_2.$$p = null; - if (block !== false && block !== nil) { - self.object = ($a = ($b = $scope.get('Generator')).$new, $a.$$p = block.$to_proc(), $a).call($b); - self.method = "each"; - self.args = []; - self.size = arguments[0] || nil; - if ((($a = self.size) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.size = $scope.get('Opal').$coerce_to(self.size, $scope.get('Integer'), "to_int") - } else { - return nil - }; - } else { - self.object = arguments[0]; - self.method = arguments[1] || "each"; - self.args = $slice.call(arguments, 2); - return self.size = nil; - }; - }; + return self + result.slice(0, width); + + }); - def.$each = TMP_3 = function(args) { - var $a, $b, $c, self = this, $iter = TMP_3.$$p, block = $iter || nil; + Opal.defn(self, '$lstrip', function() { + var self = this; - args = $slice.call(arguments, 0); - TMP_3.$$p = null; - if ((($a = ($b = block['$nil?'](), $b !== false && $b !== nil ?args['$empty?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - args = $rb_plus(self.args, args); - if ((($a = block['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return ($a = self.$class()).$new.apply($a, [self.object, self.method].concat(args))}; - return ($b = ($c = self.object).$__send__, $b.$$p = block.$to_proc(), $b).apply($c, [self.method].concat(args)); - }; + return self.replace(/^\s*/, ''); + }); - def.$size = function() { - var $a, self = this; + Opal.defn(self, '$match', TMP_7 = function(pattern, pos) { + var $a, $b, self = this, $iter = TMP_7.$$p, block = $iter || nil; - if ((($a = $scope.get('Proc')['$==='](self.size)) !== nil && (!$a.$$is_boolean || $a == true))) { - return ($a = self.size).$call.apply($a, [].concat(self.args)) + TMP_7.$$p = null; + if ((($a = ((($b = $scope.get('String')['$==='](pattern)) !== false && $b !== nil) ? $b : pattern['$respond_to?']("to_str"))) !== nil && (!$a.$$is_boolean || $a == true))) { + pattern = $scope.get('Regexp').$new(pattern.$to_str())}; + if ((($a = $scope.get('Regexp')['$==='](pattern)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return self.size + self.$raise($scope.get('TypeError'), "wrong argument type " + (pattern.$class()) + " (expected Regexp)") }; - }; + return ($a = ($b = pattern).$match, $a.$$p = block.$to_proc(), $a).call($b, self, pos); + }); - def.$with_index = TMP_4 = function(offset) { - var self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$next', function() { + var self = this; - if (offset == null) { - offset = 0 - } - TMP_4.$$p = null; - if (offset !== false && offset !== nil) { - offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int") - } else { - offset = 0 - }; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("with_index", offset) - }; - var result, index = offset; - - self.$each.$$p = function() { - var param = $scope.get('Opal').$destructure(arguments), - value = block(param, index); - - if (value === $breaker) { - result = $breaker.$v; - return $breaker; + var i = self.length; + if (i === 0) { + return ''; + } + var result = self; + var first_alphanum_char_index = self.search(/[a-zA-Z0-9]/); + var carry = false; + var code; + while (i--) { + code = self.charCodeAt(i); + if ((code >= 48 && code <= 57) || + (code >= 65 && code <= 90) || + (code >= 97 && code <= 122)) { + switch (code) { + case 57: + carry = true; + code = 48; + break; + case 90: + carry = true; + code = 65; + break; + case 122: + carry = true; + code = 97; + break; + default: + carry = false; + code += 1; + } + } else { + if (first_alphanum_char_index === -1) { + if (code === 255) { + carry = true; + code = 0; + } else { + carry = false; + code += 1; + } + } else { + carry = true; + } + } + result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i + 1); + if (carry && (i === 0 || i === first_alphanum_char_index)) { + switch (code) { + case 65: + break; + case 97: + break; + default: + code += 1; + } + if (i === 0) { + result = String.fromCharCode(code) + result; + } else { + result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i); + } + carry = false; + } + if (!carry) { + break; } - - index++; } + return result; + + }); - self.$each(); + Opal.defn(self, '$oct', function() { + var self = this; - if (result !== undefined) { - return result; + + var result, + string = self, + radix = 8; + + if (/^\s*_/.test(string)) { + return 0; } - return self.object; + string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/i, function (original, head, flag, tail) { + switch (tail.charAt(0)) { + case '+': + case '-': + return original; + case '0': + if (tail.charAt(1) === 'x' && flag === '0x') { + return original; + } + } + switch (flag) { + case '0b': + radix = 2; + break; + case '0': + case '0o': + radix = 8; + break; + case '0d': + radix = 10; + break; + case '0x': + radix = 16; + break; + } + return head + tail; + }); + + result = parseInt(string.replace(/_(?!_)/g, ''), radix); + return isNaN(result) ? 0 : result; - }; + }); - Opal.defn(self, '$with_object', def.$each_with_object); + Opal.defn(self, '$ord', function() { + var self = this; - def.$inspect = function() { - var $a, self = this, result = nil; + return self.charCodeAt(0); + }); - result = "#<" + (self.$class()) + ": " + (self.object.$inspect()) + ":" + (self.method); - if ((($a = self.args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - result = $rb_plus(result, "(" + (self.args.$inspect()['$[]']($scope.get('Range').$new(1, -2))) + ")") - }; - return $rb_plus(result, ">"); - }; + Opal.defn(self, '$partition', function(sep) { + var self = this; - (function($base, $super) { - function $Generator(){}; - var self = $Generator = $klass($base, $super, 'Generator', $Generator); + + var i, m; - var def = self.$$proto, $scope = self.$$scope, TMP_5, TMP_6; + if (sep.$$is_regexp) { + m = sep.exec(self); + if (m === null) { + i = -1; + } else { + $scope.get('MatchData').$new(sep, m); + sep = m[0]; + i = m.index; + } + } else { + sep = $scope.get('Opal').$coerce_to(sep, $scope.get('String'), "to_str"); + i = self.indexOf(sep); + } - def.block = nil; - self.$include($scope.get('Enumerable')); + if (i === -1) { + return [self, '', '']; + } - def.$initialize = TMP_5 = function() { - var self = this, $iter = TMP_5.$$p, block = $iter || nil; + return [ + self.slice(0, i), + self.slice(i, i + sep.length), + self.slice(i + sep.length) + ]; + + }); - TMP_5.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('LocalJumpError'), "no block given") - }; - return self.block = block; - }; + Opal.defn(self, '$reverse', function() { + var self = this; - return (def.$each = TMP_6 = function(args) { - var $a, $b, self = this, $iter = TMP_6.$$p, block = $iter || nil, yielder = nil; + return self.split('').reverse().join(''); + }); - args = $slice.call(arguments, 0); - TMP_6.$$p = null; - yielder = ($a = ($b = $scope.get('Yielder')).$new, $a.$$p = block.$to_proc(), $a).call($b); - - try { - args.unshift(yielder); + Opal.defn(self, '$rindex', function(search, offset) { + var self = this; - if (Opal.yieldX(self.block, args) === $breaker) { - return $breaker.$v; + + var i, m, r, _m; + + if (offset === undefined) { + offset = self.length; + } else { + offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int"); + if (offset < 0) { + offset += self.length; + if (offset < 0) { + return nil; } } - catch (e) { - if (e === $breaker) { - return $breaker.$v; - } - else { - throw e; + } + + if (search.$$is_regexp) { + m = null; + r = new RegExp(search.source, 'gm' + (search.ignoreCase ? 'i' : '')); + while (true) { + _m = r.exec(self); + if (_m === null || _m.index > offset) { + break; } + m = _m; + r.lastIndex = m.index + 1; } - ; - return self; - }, nil) && 'each'; - })(self, null); + if (m === null) { + $gvars["~"] = nil + i = -1; + } else { + $scope.get('MatchData').$new(r, m); + i = m.index; + } + } else { + search = $scope.get('Opal').$coerce_to(search, $scope.get('String'), "to_str"); + i = self.lastIndexOf(search, offset); + } - (function($base, $super) { - function $Yielder(){}; - var self = $Yielder = $klass($base, $super, 'Yielder', $Yielder); + return i === -1 ? nil : i; + + }); - var def = self.$$proto, $scope = self.$$scope, TMP_7; + Opal.defn(self, '$rjust', function(width, padstr) { + var $a, self = this; - def.block = nil; - def.$initialize = TMP_7 = function() { - var self = this, $iter = TMP_7.$$p, block = $iter || nil; + if (padstr == null) { + padstr = " " + } + width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); + padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); + if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "zero width padding")}; + if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + + var chars = Math.floor(width - self.length), + patterns = Math.floor(chars / padstr.length), + result = Array(patterns + 1).join(padstr), + remaining = chars - result.length; - TMP_7.$$p = null; - return self.block = block; - }; + return result + padstr.slice(0, remaining) + self; + + }); - def.$yield = function(values) { - var self = this; + Opal.defn(self, '$rpartition', function(sep) { + var self = this; - values = $slice.call(arguments, 0); - - var value = Opal.yieldX(self.block, values); + + var i, m, r, _m; - if (value === $breaker) { - throw $breaker; - } + if (sep.$$is_regexp) { + m = null; + r = new RegExp(sep.source, 'gm' + (sep.ignoreCase ? 'i' : '')); - return value; - ; - }; + while (true) { + _m = r.exec(self); + if (_m === null) { + break; + } + m = _m; + r.lastIndex = m.index + 1; + } - return (def['$<<'] = function(values) { - var $a, self = this; + if (m === null) { + i = -1; + } else { + $scope.get('MatchData').$new(r, m); + sep = m[0]; + i = m.index; + } - values = $slice.call(arguments, 0); - ($a = self).$yield.apply($a, [].concat(values)); - return self; - }, nil) && '<<'; - })(self, null); + } else { + sep = $scope.get('Opal').$coerce_to(sep, $scope.get('String'), "to_str"); + i = self.lastIndexOf(sep); + } - return (function($base, $super) { - function $Lazy(){}; - var self = $Lazy = $klass($base, $super, 'Lazy', $Lazy); + if (i === -1) { + return ['', '', self]; + } + + return [ + self.slice(0, i), + self.slice(i, i + sep.length), + self.slice(i + sep.length) + ]; + + }); - var def = self.$$proto, $scope = self.$$scope, TMP_8, TMP_11, TMP_13, TMP_18, TMP_20, TMP_21, TMP_23, TMP_26, TMP_29; + Opal.defn(self, '$rstrip', function() { + var self = this; - def.enumerator = nil; - (function($base, $super) { - function $StopLazyError(){}; - var self = $StopLazyError = $klass($base, $super, 'StopLazyError', $StopLazyError); + return self.replace(/[\s\u0000]*$/, ''); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$scan', TMP_8 = function(pattern) { + var self = this, $iter = TMP_8.$$p, block = $iter || nil; - return nil; - })(self, $scope.get('Exception')); + TMP_8.$$p = null; + + var result = [], + match_data = nil, + match; - def.$initialize = TMP_8 = function(object, size) { - var TMP_9, self = this, $iter = TMP_8.$$p, block = $iter || nil; + if (pattern.$$is_regexp) { + pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); + } else { + pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); + pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + } - if (size == null) { - size = nil + while ((match = pattern.exec(self)) != null) { + match_data = $scope.get('MatchData').$new(pattern, match); + if (block === nil) { + match.length == 1 ? result.push(match[0]) : result.push((match_data).$captures()); + } else { + match.length == 1 ? block(match[0]) : block.call(self, (match_data).$captures()); } - TMP_8.$$p = null; - if ((block !== nil)) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy new without a block") - }; - self.enumerator = object; - return Opal.find_super_dispatcher(self, 'initialize', TMP_8, (TMP_9 = function(yielder, each_args){var self = TMP_9.$$s || this, $a, $b, TMP_10; -if (yielder == null) yielder = nil;each_args = $slice.call(arguments, 1); - try { - return ($a = ($b = object).$each, $a.$$p = (TMP_10 = function(args){var self = TMP_10.$$s || this; -args = $slice.call(arguments, 0); - - args.unshift(yielder); + if (pattern.lastIndex === match.index) { + pattern.lastIndex += 1; + } + } - if (Opal.yieldX(block, args) === $breaker) { - return $breaker; - } - ;}, TMP_10.$$s = self, TMP_10), $a).apply($b, [].concat(each_args)) - } catch ($err) {if (Opal.rescue($err, [$scope.get('Exception')])) { - return nil - }else { throw $err; } - }}, TMP_9.$$s = self, TMP_9)).apply(self, [size]); - }; + $gvars["~"] = match_data - Opal.defn(self, '$force', def.$to_a); + return (block !== nil ? self : result); + + }); - def.$lazy = function() { - var self = this; + Opal.alias(self, 'size', 'length'); - return self; - }; + Opal.alias(self, 'slice', '[]'); - def.$collect = TMP_11 = function() { - var $a, $b, TMP_12, self = this, $iter = TMP_11.$$p, block = $iter || nil; + Opal.defn(self, '$split', function(pattern, limit) { + var $a, self = this; + if ($gvars[";"] == null) $gvars[";"] = nil; - TMP_11.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block") - }; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_12 = function(enum$, args){var self = TMP_12.$$s || this; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var value = Opal.yieldX(block, args); + + if (self.length === 0) { + return []; + } - if (value === $breaker) { - return $breaker; - } + if (limit === undefined) { + limit = 0; + } else { + limit = $scope.get('Opal')['$coerce_to!'](limit, $scope.get('Integer'), "to_int"); + if (limit === 1) { + return [self]; + } + } - enum$.$yield(value); - }, TMP_12.$$s = self, TMP_12), $a).call($b, self, self.$enumerator_size()); - }; + if (pattern === undefined || pattern === nil) { + pattern = ((($a = $gvars[";"]) !== false && $a !== nil) ? $a : " "); + } - def.$collect_concat = TMP_13 = function() { - var $a, $b, TMP_14, self = this, $iter = TMP_13.$$p, block = $iter || nil; + var result = [], + string = self.toString(), + index = 0, + match, + i; - TMP_13.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block") - }; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_14 = function(enum$, args){var self = TMP_14.$$s || this, $a, $b, TMP_15, $c, TMP_16; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var value = Opal.yieldX(block, args); + if (pattern.$$is_regexp) { + pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); + } else { + pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str").$to_s(); + if (pattern === ' ') { + pattern = /\s+/gm; + string = string.replace(/^\s+/, ''); + } else { + pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + } + } - if (value === $breaker) { - return $breaker; - } + result = string.split(pattern); - if ((value)['$respond_to?']("force") && (value)['$respond_to?']("each")) { - ($a = ($b = (value)).$each, $a.$$p = (TMP_15 = function(v){var self = TMP_15.$$s || this; -if (v == null) v = nil; - return enum$.$yield(v)}, TMP_15.$$s = self, TMP_15), $a).call($b) - } - else { - var array = $scope.get('Opal').$try_convert(value, $scope.get('Array'), "to_ary"); + if (result.length === 1 && result[0] === string) { + return result; + } - if (array === nil) { - enum$.$yield(value); - } - else { - ($a = ($c = (value)).$each, $a.$$p = (TMP_16 = function(v){var self = TMP_16.$$s || this; -if (v == null) v = nil; - return enum$.$yield(v)}, TMP_16.$$s = self, TMP_16), $a).call($c); - } - } - ;}, TMP_14.$$s = self, TMP_14), $a).call($b, self, nil); - }; + while ((i = result.indexOf(undefined)) !== -1) { + result.splice(i, 1); + } - def.$drop = function(n) { - var $a, $b, TMP_17, self = this, current_size = nil, set_size = nil, dropped = nil; + if (limit === 0) { + while (result[result.length - 1] === '') { + result.length -= 1; + } + return result; + } - n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - if ($rb_lt(n, 0)) { - self.$raise($scope.get('ArgumentError'), "attempt to drop negative size")}; - current_size = self.$enumerator_size(); - set_size = (function() {if ((($a = $scope.get('Integer')['$==='](current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ($rb_lt(n, current_size)) { - return n - } else { - return current_size + match = pattern.exec(string); + + if (limit < 0) { + if (match !== null && match[0] === '' && pattern.source.indexOf('(?=') === -1) { + for (i = 0; i < match.length; i++) { + result.push(''); } - } else { - return current_size - }; return nil; })(); - dropped = 0; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_17 = function(enum$, args){var self = TMP_17.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - if ($rb_lt(dropped, n)) { - return dropped = $rb_plus(dropped, 1) - } else { - return ($a = enum$).$yield.apply($a, [].concat(args)) - }}, TMP_17.$$s = self, TMP_17), $a).call($b, self, set_size); - }; + } + return result; + } - def.$drop_while = TMP_18 = function() { - var $a, $b, TMP_19, self = this, $iter = TMP_18.$$p, block = $iter || nil, succeeding = nil; + if (match !== null && match[0] === '') { + result.splice(limit - 1, result.length - 1, result.slice(limit - 1).join('')); + return result; + } - TMP_18.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy drop_while without a block") - }; - succeeding = true; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_19 = function(enum$, args){var self = TMP_19.$$s || this, $a, $b; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - if (succeeding !== false && succeeding !== nil) { - - var value = Opal.yieldX(block, args); + i = 0; + while (match !== null) { + i++; + index = pattern.lastIndex; + if (i + 1 === limit) { + break; + } + match = pattern.exec(string); + } - if (value === $breaker) { - return $breaker; - } + result.splice(limit - 1, result.length - 1, string.slice(index)); + return result; + + }); - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - succeeding = false; + Opal.defn(self, '$squeeze', function() { + var self = this, $splat_index = nil; - ($a = enum$).$yield.apply($a, [].concat(args)); - } - - } else { - return ($b = enum$).$yield.apply($b, [].concat(args)) - }}, TMP_19.$$s = self, TMP_19), $a).call($b, self, nil); - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var sets = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + sets[$splat_index] = arguments[$splat_index + 0]; + } + + if (sets.length === 0) { + return self.replace(/(.)\1+/g, '$1'); + } + var char_class = char_class_from_char_sets(sets); + if (char_class === null) { + return self; + } + return self.replace(new RegExp('(' + char_class + ')\\1+', 'g'), '$1'); + + }); - def.$enum_for = TMP_20 = function(method, args) { - var $a, $b, self = this, $iter = TMP_20.$$p, block = $iter || nil; + Opal.defn(self, '$start_with?', function() { + var self = this, $splat_index = nil; - args = $slice.call(arguments, 1); - if (method == null) { - method = "each" + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var prefixes = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + prefixes[$splat_index] = arguments[$splat_index + 0]; + } + + for (var i = 0, length = prefixes.length; i < length; i++) { + var prefix = $scope.get('Opal').$coerce_to(prefixes[i], $scope.get('String'), "to_str").$to_s(); + + if (self.indexOf(prefix) === 0) { + return true; } - TMP_20.$$p = null; - return ($a = ($b = self.$class()).$for, $a.$$p = block.$to_proc(), $a).apply($b, [self, method].concat(args)); - }; + } - def.$find_all = TMP_21 = function() { - var $a, $b, TMP_22, self = this, $iter = TMP_21.$$p, block = $iter || nil; - - TMP_21.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy select without a block") - }; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_22 = function(enum$, args){var self = TMP_22.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var value = Opal.yieldX(block, args); - - if (value === $breaker) { - return $breaker; - } - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - ($a = enum$).$yield.apply($a, [].concat(args)); - } - ;}, TMP_22.$$s = self, TMP_22), $a).call($b, self, nil); - }; - - Opal.defn(self, '$flat_map', def.$collect_concat); - - def.$grep = TMP_23 = function(pattern) { - var $a, $b, TMP_24, $c, TMP_25, self = this, $iter = TMP_23.$$p, block = $iter || nil; - - TMP_23.$$p = null; - if (block !== false && block !== nil) { - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_24 = function(enum$, args){var self = TMP_24.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var param = $scope.get('Opal').$destructure(args), - value = pattern['$==='](param); - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - value = Opal.yield1(block, param); - - if (value === $breaker) { - return $breaker; - } - - enum$.$yield(Opal.yield1(block, param)); - } - ;}, TMP_24.$$s = self, TMP_24), $a).call($b, self, nil) - } else { - return ($a = ($c = $scope.get('Lazy')).$new, $a.$$p = (TMP_25 = function(enum$, args){var self = TMP_25.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var param = $scope.get('Opal').$destructure(args), - value = pattern['$==='](param); - - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - enum$.$yield(param); - } - ;}, TMP_25.$$s = self, TMP_25), $a).call($c, self, nil) - }; - }; - - Opal.defn(self, '$map', def.$collect); + return false; + + }); - Opal.defn(self, '$select', def.$find_all); + Opal.defn(self, '$strip', function() { + var self = this; - def.$reject = TMP_26 = function() { - var $a, $b, TMP_27, self = this, $iter = TMP_26.$$p, block = $iter || nil; + return self.replace(/^\s*/, '').replace(/[\s\u0000]*$/, ''); + }); - TMP_26.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy reject without a block") - }; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_27 = function(enum$, args){var self = TMP_27.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var value = Opal.yieldX(block, args); + Opal.defn(self, '$sub', TMP_9 = function(pattern, replacement) { + var self = this, $iter = TMP_9.$$p, block = $iter || nil; - if (value === $breaker) { - return $breaker; - } + TMP_9.$$p = null; + + if (!pattern.$$is_regexp) { + pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); + pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); + } - if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { - ($a = enum$).$yield.apply($a, [].concat(args)); - } - ;}, TMP_27.$$s = self, TMP_27), $a).call($b, self, nil); - }; + var result = pattern.exec(self); - def.$take = function(n) { - var $a, $b, TMP_28, self = this, current_size = nil, set_size = nil, taken = nil; + if (result === null) { + $gvars["~"] = nil + return self.toString(); + } - n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - if ($rb_lt(n, 0)) { - self.$raise($scope.get('ArgumentError'), "attempt to take negative size")}; - current_size = self.$enumerator_size(); - set_size = (function() {if ((($a = $scope.get('Integer')['$==='](current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ($rb_lt(n, current_size)) { - return n - } else { - return current_size - } - } else { - return current_size - }; return nil; })(); - taken = 0; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_28 = function(enum$, args){var self = TMP_28.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - if ($rb_lt(taken, n)) { - ($a = enum$).$yield.apply($a, [].concat(args)); - return taken = $rb_plus(taken, 1); - } else { - return self.$raise($scope.get('StopLazyError')) - }}, TMP_28.$$s = self, TMP_28), $a).call($b, self, set_size); - }; + $scope.get('MatchData').$new(pattern, result) - def.$take_while = TMP_29 = function() { - var $a, $b, TMP_30, self = this, $iter = TMP_29.$$p, block = $iter || nil; + if (replacement === undefined) { + if (block === nil) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (1 for 2)") + } + return self.slice(0, result.index) + block(result[0]) + self.slice(result.index + result[0].length); + } - TMP_29.$$p = null; - if (block !== false && block !== nil) { - } else { - self.$raise($scope.get('ArgumentError'), "tried to call lazy take_while without a block") - }; - return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_30 = function(enum$, args){var self = TMP_30.$$s || this, $a; -if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); - - var value = Opal.yieldX(block, args); + if (replacement.$$is_hash) { + return self.slice(0, result.index) + (replacement)['$[]'](result[0]).$to_s() + self.slice(result.index + result[0].length); + } - if (value === $breaker) { - return $breaker; - } + replacement = $scope.get('Opal').$coerce_to(replacement, $scope.get('String'), "to_str"); - if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { - ($a = enum$).$yield.apply($a, [].concat(args)); - } - else { - self.$raise($scope.get('StopLazyError')); + replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { + if (slashes.length % 2 === 0) { + return original; + } + switch (command) { + case "+": + for (var i = result.length - 1; i > 0; i--) { + if (result[i] !== undefined) { + return slashes.slice(1) + result[i]; + } } - ;}, TMP_30.$$s = self, TMP_30), $a).call($b, self, nil); - }; + return ''; + case "&": return slashes.slice(1) + result[0]; + case "`": return slashes.slice(1) + self.slice(0, result.index); + case "'": return slashes.slice(1) + self.slice(result.index + result[0].length); + default: return slashes.slice(1) + (result[command] || ''); + } + }).replace(/\\\\/g, '\\'); - Opal.defn(self, '$to_enum', def.$enum_for); + return self.slice(0, result.index) + replacement + self.slice(result.index + result[0].length); + ; + }); - return (def.$inspect = function() { - var self = this; + Opal.alias(self, 'succ', 'next'); - return "#<" + (self.$class()) + ": " + (self.enumerator.$inspect()) + ">"; - }, nil) && 'inspect'; - })(self, self); - })(self, null); -}; + Opal.defn(self, '$sum', function(n) { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/array"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars, $range = Opal.range, $hash2 = Opal.hash2; + if (n == null) { + n = 16 + } + + n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - Opal.add_stubs(['$require', '$include', '$new', '$class', '$raise', '$===', '$to_a', '$respond_to?', '$to_ary', '$coerce_to', '$coerce_to?', '$==', '$to_str', '$clone', '$hash', '$<=>', '$object_id', '$inspect', '$enum_for', '$empty?', '$nil?', '$coerce_to!', '$initialize_clone', '$initialize_dup', '$replace', '$eql?', '$length', '$begin', '$end', '$exclude_end?', '$flatten', '$__id__', '$[]', '$to_s', '$join', '$delete_if', '$to_proc', '$each', '$reverse', '$frozen?', '$rotate', '$!', '$map', '$rand', '$keep_if', '$shuffle!', '$sort', '$times', '$[]=', '$<<', '$at', '$kind_of?', '$last', '$first', '$upto']); - self.$require("corelib/enumerable"); - return (function($base, $super) { - function $Array(){}; - var self = $Array = $klass($base, $super, 'Array', $Array); + var result = 0, + length = self.length, + i = 0; - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14, TMP_15, TMP_16, TMP_17, TMP_18, TMP_19, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_30; + for (; i < length; i++) { + result += self.charCodeAt(i); + } - def.length = nil; - self.$include($scope.get('Enumerable')); + if (n <= 0) { + return result; + } - def.$$is_array = true; + return result & (Math.pow(2, n) - 1); + ; + }); - Opal.defs(self, '$[]', function(objects) { + Opal.defn(self, '$swapcase', function() { var self = this; - objects = $slice.call(arguments, 0); - return objects; - }); + + var str = self.replace(/([a-z]+)|([A-Z]+)/g, function($0,$1,$2) { + return $1 ? $0.toUpperCase() : $0.toLowerCase(); + }); - def.$initialize = function(args) { - var $a, self = this; + if (self.constructor === String) { + return str; + } - args = $slice.call(arguments, 0); - return ($a = self.$class()).$new.apply($a, [].concat(args)); - }; + return self.$class().$new(str); + + }); - Opal.defs(self, '$new', TMP_1 = function(size, obj) { - var $a, self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$to_f', function() { + var self = this; - if (size == null) { - size = nil - } - if (obj == null) { - obj = nil - } - TMP_1.$$p = null; - if ((($a = arguments.length > 2) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..2)")}; - if ((($a = arguments.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - if ((($a = arguments.length === 1) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = $scope.get('Array')['$==='](size)) !== nil && (!$a.$$is_boolean || $a == true))) { - return size.$to_a() - } else if ((($a = size['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { - return size.$to_ary()}}; - size = $scope.get('Opal').$coerce_to(size, $scope.get('Integer'), "to_int"); - if ((($a = size < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "negative array size")}; - var result = []; - - if (block === nil) { - for (var i = 0; i < size; i++) { - result.push(obj); - } + if (self.charAt(0) === '_') { + return 0; } - else { - for (var i = 0, value; i < size; i++) { - value = block(i); - if (value === $breaker) { - return $breaker.$v; - } + var result = parseFloat(self.replace(/_/g, '')); - result[i] = value; - } + if (isNaN(result) || result == Infinity || result == -Infinity) { + return 0; + } + else { + return result; } - - return result; }); - Opal.defs(self, '$try_convert', function(obj) { + Opal.defn(self, '$to_i', function(base) { var self = this; - return $scope.get('Opal')['$coerce_to?'](obj, $scope.get('Array'), "to_ary"); - }); - - def['$&'] = function(other) { - var $a, self = this; - - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; + if (base == null) { + base = 10 + } - var result = [], - seen = {}; - - for (var i = 0, length = self.length; i < length; i++) { - var item = self[i]; + var result, + string = self.toLowerCase(), + radix = $scope.get('Opal').$coerce_to(base, $scope.get('Integer'), "to_int"); - if (!seen[item]) { - for (var j = 0, length2 = other.length; j < length2; j++) { - var item2 = other[j]; + if (radix === 1 || radix < 0 || radix > 36) { + self.$raise($scope.get('ArgumentError'), "invalid radix " + (radix)) + } - if (!seen[item2] && (item)['$=='](item2)) { - seen[item] = true; - result.push(item); - } + if (/^\s*_/.test(string)) { + return 0; + } + + string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/, function (original, head, flag, tail) { + switch (tail.charAt(0)) { + case '+': + case '-': + return original; + case '0': + if (tail.charAt(1) === 'x' && flag === '0x' && (radix === 0 || radix === 16)) { + return original; } } - } + switch (flag) { + case '0b': + if (radix === 0 || radix === 2) { + radix = 2; + return head + tail; + } + break; + case '0': + case '0o': + if (radix === 0 || radix === 8) { + radix = 8; + return head + tail; + } + break; + case '0d': + if (radix === 0 || radix === 10) { + radix = 10; + return head + tail; + } + break; + case '0x': + if (radix === 0 || radix === 16) { + radix = 16; + return head + tail; + } + break; + } + return original + }); - return result; - - }; + result = parseInt(string.replace(/_(?!_)/g, ''), radix); + return isNaN(result) ? 0 : result; + ; + }); - def['$|'] = function(other) { - var $a, self = this; + Opal.defn(self, '$to_proc', function() { + var $a, $b, TMP_10, self = this, sym = nil; - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; - - var result = [], - seen = {}; + sym = self; + return ($a = ($b = self).$proc, $a.$$p = (TMP_10 = function(args){var self = TMP_10.$$s || this, block, $a, $b, obj = nil; +args = $slice.call(arguments, 0); + block = TMP_10.$$p || nil, TMP_10.$$p = null; + if ((($a = args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "no receiver given")}; + obj = args.$shift(); + return ($a = ($b = obj).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, [sym].concat(Opal.to_a(args)));}, TMP_10.$$s = self, TMP_10), $a).call($b); + }); - for (var i = 0, length = self.length; i < length; i++) { - var item = self[i]; + Opal.defn(self, '$to_s', function() { + var self = this; - if (!seen[item]) { - seen[item] = true; - result.push(item); - } - } + return self.toString(); + }); - for (var i = 0, length = other.length; i < length; i++) { - var item = other[i]; + Opal.alias(self, 'to_str', 'to_s'); - if (!seen[item]) { - seen[item] = true; - result.push(item); - } - } - return result; - - }; + Opal.alias(self, 'to_sym', 'intern'); - def['$*'] = function(other) { - var $a, self = this; + Opal.defn(self, '$tr', function(from, to) { + var self = this; - if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.join(other.$to_str())}; - if ((($a = other['$respond_to?']("to_int")) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('TypeError'), "no implicit conversion of " + (other.$class()) + " into Integer") - }; - other = $scope.get('Opal').$coerce_to(other, $scope.get('Integer'), "to_int"); - if ((($a = other < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "negative argument")}; + from = $scope.get('Opal').$coerce_to(from, $scope.get('String'), "to_str").$to_s(); + to = $scope.get('Opal').$coerce_to(to, $scope.get('String'), "to_str").$to_s(); - var result = []; - - for (var i = 0; i < other; i++) { - result = result.concat(self); + if (from.length == 0 || from === to) { + return self; } - return result; - - }; - - def['$+'] = function(other) { - var $a, self = this; + var i, in_range, c, ch, start, end, length; + var subs = {}; + var from_chars = from.split(''); + var from_length = from_chars.length; + var to_chars = to.split(''); + var to_length = to_chars.length; - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; - return self.concat(other); - }; + var inverse = false; + var global_sub = null; + if (from_chars[0] === '^' && from_chars.length > 1) { + inverse = true; + from_chars.shift(); + global_sub = to_chars[to_length - 1] + from_length -= 1; + } - def['$-'] = function(other) { - var $a, self = this; + var from_chars_expanded = []; + var last_from = null; + in_range = false; + for (i = 0; i < from_length; i++) { + ch = from_chars[i]; + if (last_from == null) { + last_from = ch; + from_chars_expanded.push(ch); + } + else if (ch === '-') { + if (last_from === '-') { + from_chars_expanded.push('-'); + from_chars_expanded.push('-'); + } + else if (i == from_length - 1) { + from_chars_expanded.push('-'); + } + else { + in_range = true; + } + } + else if (in_range) { + start = last_from.charCodeAt(0); + end = ch.charCodeAt(0); + if (start > end) { + self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") + } + for (c = start + 1; c < end; c++) { + from_chars_expanded.push(String.fromCharCode(c)); + } + from_chars_expanded.push(ch); + in_range = null; + last_from = null; + } + else { + from_chars_expanded.push(ch); + } + } - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - if ((($a = other.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$clone()}; - - var seen = {}, - result = []; + from_chars = from_chars_expanded; + from_length = from_chars.length; - for (var i = 0, length = other.length; i < length; i++) { - seen[other[i]] = true; + if (inverse) { + for (i = 0; i < from_length; i++) { + subs[from_chars[i]] = true; + } } + else { + if (to_length > 0) { + var to_chars_expanded = []; + var last_to = null; + in_range = false; + for (i = 0; i < to_length; i++) { + ch = to_chars[i]; + if (last_from == null) { + last_from = ch; + to_chars_expanded.push(ch); + } + else if (ch === '-') { + if (last_to === '-') { + to_chars_expanded.push('-'); + to_chars_expanded.push('-'); + } + else if (i == to_length - 1) { + to_chars_expanded.push('-'); + } + else { + in_range = true; + } + } + else if (in_range) { + start = last_from.charCodeAt(0); + end = ch.charCodeAt(0); + if (start > end) { + self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") + } + for (c = start + 1; c < end; c++) { + to_chars_expanded.push(String.fromCharCode(c)); + } + to_chars_expanded.push(ch); + in_range = null; + last_from = null; + } + else { + to_chars_expanded.push(ch); + } + } - for (var i = 0, length = self.length; i < length; i++) { - var item = self[i]; + to_chars = to_chars_expanded; + to_length = to_chars.length; + } - if (!seen[item]) { - result.push(item); + var length_diff = from_length - to_length; + if (length_diff > 0) { + var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); + for (i = 0; i < length_diff; i++) { + to_chars.push(pad_char); + } + } + + for (i = 0; i < from_length; i++) { + subs[from_chars[i]] = to_chars[i]; } } - return result; + var new_str = '' + for (i = 0, length = self.length; i < length; i++) { + ch = self.charAt(i); + var sub = subs[ch]; + if (inverse) { + new_str += (sub == null ? global_sub : ch); + } + else { + new_str += (sub != null ? sub : ch); + } + } + return new_str; - }; + }); - def['$<<'] = function(object) { + Opal.defn(self, '$tr_s', function(from, to) { var self = this; - self.push(object); - return self; - }; - - def['$<=>'] = function(other) { - var $a, self = this; - - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else if ((($a = other['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_ary().$to_a() - } else { - return nil - }; + from = $scope.get('Opal').$coerce_to(from, $scope.get('String'), "to_str").$to_s(); + to = $scope.get('Opal').$coerce_to(to, $scope.get('String'), "to_str").$to_s(); - if (self.$hash() === other.$hash()) { - return 0; - } - - if (self.length != other.length) { - return (self.length > other.length) ? 1 : -1; + if (from.length == 0) { + return self; } - for (var i = 0, length = self.length; i < length; i++) { - var tmp = (self[i])['$<=>'](other[i]); - - if (tmp !== 0) { - return tmp; - } - } - - return 0; - ; - }; - - def['$=='] = function(other) { - var self = this; - - - var recursed = {}; + var i, in_range, c, ch, start, end, length; + var subs = {}; + var from_chars = from.split(''); + var from_length = from_chars.length; + var to_chars = to.split(''); + var to_length = to_chars.length; - function _eqeq(array, other) { - var i, length, a, b; + var inverse = false; + var global_sub = null; + if (from_chars[0] === '^' && from_chars.length > 1) { + inverse = true; + from_chars.shift(); + global_sub = to_chars[to_length - 1] + from_length -= 1; + } - if (!other.$$is_array) { - if ($scope.get('Opal')['$respond_to?'](other, "to_ary")) { - return (other)['$=='](array); - } else { - return false; + var from_chars_expanded = []; + var last_from = null; + in_range = false; + for (i = 0; i < from_length; i++) { + ch = from_chars[i]; + if (last_from == null) { + last_from = ch; + from_chars_expanded.push(ch); + } + else if (ch === '-') { + if (last_from === '-') { + from_chars_expanded.push('-'); + from_chars_expanded.push('-'); + } + else if (i == from_length - 1) { + from_chars_expanded.push('-'); + } + else { + in_range = true; } } - - other = other.$to_a(); - - if (array.length !== other.length) { - return false; + else if (in_range) { + start = last_from.charCodeAt(0); + end = ch.charCodeAt(0); + if (start > end) { + self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") + } + for (c = start + 1; c < end; c++) { + from_chars_expanded.push(String.fromCharCode(c)); + } + from_chars_expanded.push(ch); + in_range = null; + last_from = null; + } + else { + from_chars_expanded.push(ch); } + } - recursed[(array).$object_id()] = true; + from_chars = from_chars_expanded; + from_length = from_chars.length; - for (i = 0, length = array.length; i < length; i++) { - a = array[i]; - b = other[i]; - if (a.$$is_array) { - if (b.$$is_array && b.length !== a.length) { - return false; + if (inverse) { + for (i = 0; i < from_length; i++) { + subs[from_chars[i]] = true; + } + } + else { + if (to_length > 0) { + var to_chars_expanded = []; + var last_to = null; + in_range = false; + for (i = 0; i < to_length; i++) { + ch = to_chars[i]; + if (last_from == null) { + last_from = ch; + to_chars_expanded.push(ch); } - if (!recursed.hasOwnProperty((a).$object_id())) { - if (!_eqeq(a, b)) { - return false; + else if (ch === '-') { + if (last_to === '-') { + to_chars_expanded.push('-'); + to_chars_expanded.push('-'); + } + else if (i == to_length - 1) { + to_chars_expanded.push('-'); + } + else { + in_range = true; } } - } else { - if (!(a)['$=='](b)) { - return false; + else if (in_range) { + start = last_from.charCodeAt(0); + end = ch.charCodeAt(0); + if (start > end) { + self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") + } + for (c = start + 1; c < end; c++) { + to_chars_expanded.push(String.fromCharCode(c)); + } + to_chars_expanded.push(ch); + in_range = null; + last_from = null; + } + else { + to_chars_expanded.push(ch); } } + + to_chars = to_chars_expanded; + to_length = to_chars.length; } - return true; - } + var length_diff = from_length - to_length; + if (length_diff > 0) { + var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); + for (i = 0; i < length_diff; i++) { + to_chars.push(pad_char); + } + } - return _eqeq(self, other); - ; - }; + for (i = 0; i < from_length; i++) { + subs[from_chars[i]] = to_chars[i]; + } + } + var new_str = '' + var last_substitute = null + for (i = 0, length = self.length; i < length; i++) { + ch = self.charAt(i); + var sub = subs[ch] + if (inverse) { + if (sub == null) { + if (last_substitute == null) { + new_str += global_sub; + last_substitute = true; + } + } + else { + new_str += ch; + last_substitute = null; + } + } + else { + if (sub != null) { + if (last_substitute == null || last_substitute !== sub) { + new_str += sub; + last_substitute = sub; + } + } + else { + new_str += ch; + last_substitute = null; + } + } + } + return new_str; + + }); - def['$[]'] = function(index, length) { - var $a, self = this; + Opal.defn(self, '$upcase', function() { + var self = this; - if ((($a = $scope.get('Range')['$==='](index)) !== nil && (!$a.$$is_boolean || $a == true))) { - - var size = self.length, - exclude = index.exclude, - from = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"), - to = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"); + return self.toUpperCase(); + }); - if (from < 0) { - from += size; + Opal.defn(self, '$upto', TMP_11 = function(stop, excl) { + var self = this, $iter = TMP_11.$$p, block = $iter || nil; - if (from < 0) { - return nil; - } - } + if (excl == null) { + excl = false + } + TMP_11.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("upto", stop, excl) + }; + stop = $scope.get('Opal').$coerce_to(stop, $scope.get('String'), "to_str"); + + var a, b, s = self.toString(), value; - if (from > size) { - return nil; - } + if (s.length === 1 && stop.length === 1) { - if (to < 0) { - to += size; + a = s.charCodeAt(0); + b = stop.charCodeAt(0); - if (to < 0) { - return []; + while (a <= b) { + if (excl && a === b) { + break; } - } - if (!exclude) { - to += 1; + value = block(String.fromCharCode(a)); + if (value === $breaker) { return $breaker.$v; } + + a += 1; } - return self.slice(from, to); - ; - } else { - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - - var size = self.length; + } else if (parseInt(s, 10).toString() === s && parseInt(stop, 10).toString() === stop) { - if (index < 0) { - index += size; + a = parseInt(s, 10); + b = parseInt(stop, 10); - if (index < 0) { - return nil; + while (a <= b) { + if (excl && a === b) { + break; } - } - if (length === undefined) { - if (index >= size || index < 0) { - return nil; - } + value = block(a.toString()); + if (value === $breaker) { return $breaker.$v; } - return self[index]; + a += 1; } - else { - length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - if (length < 0 || index > size || index < 0) { - return nil; + } else { + + while (s.length <= stop.length && s <= stop) { + if (excl && s === stop) { + break; } - return self.slice(index, index + length); + value = block(s); + if (value === $breaker) { return $breaker.$v; } + + s = (s).$succ(); } - - }; - }; - def['$[]='] = function(index, value, extra) { - var $a, self = this, data = nil, length = nil; + } + return self; + + }); - if ((($a = $scope.get('Range')['$==='](index)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = $scope.get('Array')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { - data = value.$to_a() - } else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { - data = value.$to_ary().$to_a() - } else { - data = [value] - }; - - var size = self.length, - exclude = index.exclude, - from = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"), - to = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"); - - if (from < 0) { - from += size; - - if (from < 0) { - self.$raise($scope.get('RangeError'), "" + (index.$inspect()) + " out of range"); + + function char_class_from_char_sets(sets) { + function explode_sequences_in_character_set(set) { + var result = '', + i, len = set.length, + curr_char, + skip_next_dash, + char_code_from, + char_code_upto, + char_code; + for (i = 0; i < len; i++) { + curr_char = set.charAt(i); + if (curr_char === '-' && i > 0 && i < (len - 1) && !skip_next_dash) { + char_code_from = set.charCodeAt(i - 1); + char_code_upto = set.charCodeAt(i + 1); + if (char_code_from > char_code_upto) { + self.$raise($scope.get('ArgumentError'), "invalid range \"" + (char_code_from) + "-" + (char_code_upto) + "\" in string transliteration") + } + for (char_code = char_code_from + 1; char_code < char_code_upto + 1; char_code++) { + result += String.fromCharCode(char_code); + } + skip_next_dash = true; + i++; + } else { + skip_next_dash = (curr_char === '\\'); + result += curr_char; } } + return result; + } - if (to < 0) { - to += size; - } - - if (!exclude) { - to += 1; + function intersection(setA, setB) { + if (setA.length === 0) { + return setB; } - - if (from > size) { - for (var i = size; i < from; i++) { - self[i] = nil; + var result = '', + i, len = setA.length, + chr; + for (i = 0; i < len; i++) { + chr = setA.charAt(i); + if (setB.indexOf(chr) !== -1) { + result += chr; } } + return result; + } - if (to < 0) { - self.splice.apply(self, [from, 0].concat(data)); - } - else { - self.splice.apply(self, [from, to - from].concat(data)); - } + var i, len, set, neg, chr, tmp, + pos_intersection = '', + neg_intersection = ''; - return value; - ; + for (i = 0, len = sets.length; i < len; i++) { + set = $scope.get('Opal').$coerce_to(sets[i], $scope.get('String'), "to_str"); + neg = (set.charAt(0) === '^' && set.length > 1); + set = explode_sequences_in_character_set(neg ? set.slice(1) : set); + if (neg) { + neg_intersection = intersection(neg_intersection, set); } else { - if ((($a = extra === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { - length = 1 - } else { - length = value; - value = extra; - if ((($a = $scope.get('Array')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { - data = value.$to_a() - } else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { - data = value.$to_ary().$to_a() - } else { - data = [value] - }; - }; - - var size = self.length, - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"), - length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"), - old; - - if (index < 0) { - old = index; - index += size; + pos_intersection = intersection(pos_intersection, set); + } + } - if (index < 0) { - self.$raise($scope.get('IndexError'), "index " + (old) + " too small for array; minimum " + (-self.length)); + if (pos_intersection.length > 0 && neg_intersection.length > 0) { + tmp = ''; + for (i = 0, len = pos_intersection.length; i < len; i++) { + chr = pos_intersection.charAt(i); + if (neg_intersection.indexOf(chr) === -1) { + tmp += chr; } } + pos_intersection = tmp; + neg_intersection = ''; + } - if (length < 0) { - self.$raise($scope.get('IndexError'), "negative length (" + (length) + ")") - } + if (pos_intersection.length > 0) { + return '[' + $scope.get('Regexp').$escape(pos_intersection) + ']'; + } - if (index > size) { - for (var i = size; i < index; i++) { - self[i] = nil; - } - } + if (neg_intersection.length > 0) { + return '[^' + $scope.get('Regexp').$escape(neg_intersection) + ']'; + } - if (extra === undefined) { - self[index] = value; - } - else { - self.splice.apply(self, [index, length].concat(data)); - } + return null; + } + + })($scope.base, String); + return Opal.cdecl($scope, 'Symbol', $scope.get('String')); +}; - return value; - ; - }; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/enumerable"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - def.$assoc = function(object) { - var self = this; + Opal.add_stubs(['$raise', '$new', '$yield', '$dup', '$enum_for', '$enumerator_size', '$flatten', '$map', '$==', '$destructure', '$respond_to?', '$coerce_to!', '$>', '$*', '$nil?', '$coerce_to', '$try_convert', '$<', '$+', '$-', '$ceil', '$/', '$size', '$===', '$<<', '$[]', '$[]=', '$inspect', '$__send__', '$compare', '$<=>', '$proc', '$call', '$to_a', '$lambda', '$sort!', '$map!', '$first', '$zip']); + return (function($base) { + var $Enumerable, self = $Enumerable = $module($base, 'Enumerable'); + + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_6, TMP_8, TMP_11, TMP_12, TMP_14, TMP_15, TMP_16, TMP_18, TMP_19, TMP_21, TMP_23, TMP_25, TMP_27, TMP_28, TMP_29, TMP_31, TMP_33, TMP_34, TMP_36, TMP_37, TMP_39, TMP_41, TMP_42, TMP_43, TMP_44, TMP_46, TMP_48, TMP_50, TMP_52, TMP_54, TMP_59, TMP_60; + Opal.defn(self, '$all?', TMP_1 = function() { + var $a, self = this, $iter = TMP_1.$$p, block = $iter || nil; + + TMP_1.$$p = null; - for (var i = 0, length = self.length, item; i < length; i++) { - if (item = self[i], item.length && (item[0])['$=='](object)) { - return item; - } + var result = true; + + if (block !== nil) { + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); + + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } + + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + result = false; + return $breaker; + } + }; + } + else { + self.$each.$$p = function(obj) { + if (arguments.length == 1 && (($a = obj) === nil || ($a.$$is_boolean && $a == false))) { + result = false; + return $breaker; + } + }; } - return nil; + self.$each(); + + return result; - }; + }); - def.$at = function(index) { - var self = this; + Opal.defn(self, '$any?', TMP_2 = function() { + var $a, self = this, $iter = TMP_2.$$p, block = $iter || nil; - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); + TMP_2.$$p = null; - if (index < 0) { - index += self.length; - } + var result = false; - if (index < 0 || index >= self.length) { - return nil; + if (block !== nil) { + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); + + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result = true; + return $breaker; + } + }; + } + else { + self.$each.$$p = function(obj) { + if (arguments.length != 1 || (($a = obj) !== nil && (!$a.$$is_boolean || $a == true))) { + result = true; + return $breaker; + } + } } - return self[index]; + self.$each(); + + return result; - }; + }); - def.$bsearch = TMP_2 = function() { - var self = this, $iter = TMP_2.$$p, block = $iter || nil; + Opal.defn(self, '$chunk', TMP_3 = function(state) { + var $a, $b, TMP_4, self = this, $iter = TMP_3.$$p, original_block = $iter || nil; - TMP_2.$$p = null; - if ((block !== nil)) { + TMP_3.$$p = null; + if (original_block !== false && original_block !== nil) { } else { - return self.$enum_for("bsearch") + $scope.get('Kernel').$raise($scope.get('ArgumentError'), "no block given") }; + return ($a = ($b = Opal.get('Enumerator')).$new, $a.$$p = (TMP_4 = function(yielder){var self = TMP_4.$$s || this, $a, $b, TMP_5; +if (yielder == null) yielder = nil; - var min = 0, - max = self.length, - mid, - val, - ret, - smaller = false, - satisfied = nil; + var block, previous = nil, accumulate = []; - while (min < max) { - mid = min + Math.floor((max - min) / 2); - val = self[mid]; - ret = block(val); + if (state == undefined || state === nil) { + block = original_block; + } else { + block = ($a = ($b = $scope.get('Proc')).$new, $a.$$p = (TMP_5 = function(val){var self = TMP_5.$$s || this; +if (val == null) val = nil; + return original_block.$yield(val, state.$dup())}, TMP_5.$$s = self, TMP_5), $a).call($b) + } - if (ret === $breaker) { - return $breaker.$v; + function releaseAccumulate() { + if (accumulate.length > 0) { + yielder.$yield(previous, accumulate) + } } - else if (ret === true) { - satisfied = val; - smaller = true; - } - else if (ret === false || ret === nil) { - smaller = false; - } - else if (ret.$$is_number) { - if (ret === 0) { return val; } - smaller = (ret < 0); - } - else { - self.$raise($scope.get('TypeError'), "wrong argument type " + ((ret).$class()) + " (must be numeric, true, false or nil)") - } - - if (smaller) { max = mid; } else { min = mid + 1; } - } - - return satisfied; - - }; - - def.$cycle = TMP_3 = function(n) { - var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil; - if (n == null) { - n = nil - } - TMP_3.$$p = null; - if ((($a = ((($b = self['$empty?']()) !== false && $b !== nil) ? $b : n['$=='](0))) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("cycle", n) - }; - if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - - while (true) { - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, self[i]); + self.$each.$$p = function(value) { + var key = Opal.yield1(block, value); - if (value === $breaker) { - return $breaker.$v; - } + if (key === $breaker) { + return $breaker; } - } - - } else { - n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); - - if (n <= 0) { - return self; - } - - while (n > 0) { - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, self[i]); - if (value === $breaker) { - return $breaker.$v; + if (key === nil) { + releaseAccumulate(); + accumulate = []; + previous = nil; + } else { + if (previous === nil || previous === key) { + accumulate.push(value); + } else { + releaseAccumulate(); + accumulate = [value]; } - } - n--; + previous = key; + } } - - }; - return self; - }; - - def.$clear = function() { - var self = this; - - self.splice(0, self.length); - return self; - }; - - def.$clone = function() { - var self = this, copy = nil; - - copy = []; - copy.$initialize_clone(self); - return copy; - }; - def.$dup = function() { - var self = this, copy = nil; - - copy = []; - copy.$initialize_dup(self); - return copy; - }; - - def.$initialize_copy = function(other) { - var self = this; + self.$each(); - return self.$replace(other); - }; + releaseAccumulate(); + ;}, TMP_4.$$s = self, TMP_4), $a).call($b); + }); - def.$collect = TMP_4 = function() { - var self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$collect', TMP_6 = function() { + var $a, $b, TMP_7, self = this, $iter = TMP_6.$$p, block = $iter || nil; - TMP_4.$$p = null; + TMP_6.$$p = null; if ((block !== nil)) { } else { - return self.$enum_for("collect") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_7 = function(){var self = TMP_7.$$s || this; + + return self.$enumerator_size()}, TMP_7.$$s = self, TMP_7), $a).call($b, "collect") }; var result = []; - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, self[i]); + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); if (value === $breaker) { - return $breaker.$v; + result = $breaker.$v; + return $breaker; } result.push(value); - } + }; + + self.$each(); return result; - }; + }); - def['$collect!'] = TMP_5 = function() { - var self = this, $iter = TMP_5.$$p, block = $iter || nil; + Opal.defn(self, '$collect_concat', TMP_8 = function() { + var $a, $b, TMP_9, $c, TMP_10, self = this, $iter = TMP_8.$$p, block = $iter || nil; - TMP_5.$$p = null; + TMP_8.$$p = null; if ((block !== nil)) { } else { - return self.$enum_for("collect!") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this; + + return self.$enumerator_size()}, TMP_9.$$s = self, TMP_9), $a).call($b, "collect_concat") }; + return ($a = ($c = self).$map, $a.$$p = (TMP_10 = function(item){var self = TMP_10.$$s || this, $a; +if (item == null) item = nil; + return $a = Opal.yield1(block, item), $a === $breaker ? $a : $a}, TMP_10.$$s = self, TMP_10), $a).call($c).$flatten(1); + }); + + Opal.defn(self, '$count', TMP_11 = function(object) { + var $a, self = this, $iter = TMP_11.$$p, block = $iter || nil; + + TMP_11.$$p = null; - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, self[i]); + var result = 0; + + if (object != null) { + block = function() { + return $scope.get('Opal').$destructure(arguments)['$=='](object); + }; + } + else if (block === nil) { + block = function() { return true; }; + } + + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); if (value === $breaker) { - return $breaker.$v; + result = $breaker.$v; + return $breaker; } - self[i] = value; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result++; + } } + + self.$each(); + + return result; - return self; - }; + }); - def.$combination = TMP_6 = function(n) { - var $a, self = this, $iter = TMP_6.$$p, $yield = $iter || nil, num = nil; + Opal.defn(self, '$cycle', TMP_12 = function(n) { + var $a, $b, TMP_13, self = this, $iter = TMP_12.$$p, block = $iter || nil; - TMP_6.$$p = null; - num = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); - if (($yield !== nil)) { + if (n == null) { + n = nil + } + TMP_12.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this, $a; + + if (n['$=='](nil)) { + if ((($a = self['$respond_to?']("size")) !== nil && (!$a.$$is_boolean || $a == true))) { + return (($scope.get('Float')).$$scope.get('INFINITY')) + } else { + return nil + } + } else { + n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); + if ((($a = $rb_gt(n, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_times(self.$enumerator_size(), n) + } else { + return 0 + }; + }}, TMP_13.$$s = self, TMP_13), $a).call($b, "cycle", n) + }; + if ((($a = n['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return self.$enum_for("combination", num) + n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); + if ((($a = n <= 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; }; - var i, length, stack, chosen, lev, done, next; + var result, + all = [], i, length, value; - if (num === 0) { - ((($a = Opal.yield1($yield, [])) === $breaker) ? $breaker.$v : $a) - } else if (num === 1) { - for (i = 0, length = self.length; i < length; i++) { - ((($a = Opal.yield1($yield, [self[i]])) === $breaker) ? $breaker.$v : $a) + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); + + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } + + all.push(param); } - else if (num === self.length) { - ((($a = Opal.yield1($yield, self.slice())) === $breaker) ? $breaker.$v : $a) + + self.$each(); + + if (result !== undefined) { + return result; } - else if (num >= 0 && num < self.length) { - stack = []; - for (i = 0; i <= num + 1; i++) { - stack.push(0); - } - chosen = []; - lev = 0; - done = false; - stack[0] = -1; + if (all.length === 0) { + return nil; + } - while (!done) { - chosen[lev] = self[stack[lev+1]]; - while (lev < num - 1) { - lev++; - next = stack[lev+1] = stack[lev] + 1; - chosen[lev] = self[next]; + if (n === nil) { + while (true) { + for (i = 0, length = all.length; i < length; i++) { + value = Opal.yield1(block, all[i]); + + if (value === $breaker) { + return $breaker.$v; + } } - ((($a = Opal.yield1($yield, chosen.slice())) === $breaker) ? $breaker.$v : $a) - lev++; - do { - done = (lev === 0); - stack[lev]++; - lev--; - } while ( stack[lev+1] + num === self.length + lev + 1 ); } } - ; - return self; - }; - - def.$compact = function() { - var self = this; + else { + while (n > 1) { + for (i = 0, length = all.length; i < length; i++) { + value = Opal.yield1(block, all[i]); - - var result = []; + if (value === $breaker) { + return $breaker.$v; + } + } - for (var i = 0, length = self.length, item; i < length; i++) { - if ((item = self[i]) !== nil) { - result.push(item); + n--; } } - - return result; - }; + }); - def['$compact!'] = function() { - var self = this; + Opal.defn(self, '$detect', TMP_14 = function(ifnone) { + var $a, self = this, $iter = TMP_14.$$p, block = $iter || nil; + TMP_14.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("detect", ifnone) + }; - var original = self.length; + var result; - for (var i = 0, length = self.length; i < length; i++) { - if (self[i] === nil) { - self.splice(i, 1); + self.$each.$$p = function() { + var params = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, params); - length--; - i--; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - } - return self.length === original ? nil : self; - - }; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result = params; + return $breaker; + } + }; - def.$concat = function(other) { - var $a, self = this; + self.$each(); - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; - - for (var i = 0, length = other.length; i < length; i++) { - self.push(other[i]); + if (result === undefined && ifnone !== undefined) { + if (typeof(ifnone) === 'function') { + result = ifnone(); + } + else { + result = ifnone; + } } + + return result === undefined ? nil : result; - return self; - }; + }); - def.$delete = TMP_7 = function(object) { - var $a, self = this, $iter = TMP_7.$$p, $yield = $iter || nil; + Opal.defn(self, '$drop', function(number) { + var $a, self = this; - TMP_7.$$p = null; + number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); + if ((($a = number < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "attempt to drop negative size")}; - var original = self.length; - - for (var i = 0, length = original; i < length; i++) { - if ((self[i])['$=='](object)) { - self.splice(i, 1); + var result = [], + current = 0; - length--; - i--; + self.$each.$$p = function() { + if (number <= current) { + result.push($scope.get('Opal').$destructure(arguments)); } - } - if (self.length === original) { - if (($yield !== nil)) { - return ((($a = Opal.yieldX($yield, [])) === $breaker) ? $breaker.$v : $a); - } - return nil; - } - return object; - ; - }; + current++; + }; - def.$delete_at = function(index) { - var self = this; + self.$each() + + return result; + + }); + + Opal.defn(self, '$drop_while', TMP_15 = function() { + var $a, self = this, $iter = TMP_15.$$p, block = $iter || nil; + TMP_15.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("drop_while") + }; - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); + var result = [], + dropping = true; - if (index < 0) { - index += self.length; - } + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - if (index < 0 || index >= self.length) { - return nil; - } + if (dropping) { + var value = Opal.yield1(block, param); - var result = self[index]; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } - self.splice(index, 1); + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + dropping = false; + result.push(param); + } + } + else { + result.push(param); + } + }; + + self.$each(); return result; - ; - }; + + }); - def.$delete_if = TMP_8 = function() { - var self = this, $iter = TMP_8.$$p, block = $iter || nil; + Opal.defn(self, '$each_cons', TMP_16 = function(n) { + var $a, $b, TMP_17, self = this, $iter = TMP_16.$$p, block = $iter || nil; - TMP_8.$$p = null; + TMP_16.$$p = null; + if ((($a = arguments.length != 1) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 1)")}; + n = $scope.get('Opal').$try_convert(n, $scope.get('Integer'), "to_int"); + if ((($a = n <= 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "invalid size")}; if ((block !== nil)) { } else { - return self.$enum_for("delete_if") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_17 = function(){var self = TMP_17.$$s || this, $a, $b, enum_size = nil; + + enum_size = self.$enumerator_size(); + if ((($a = enum_size['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else if ((($a = ((($b = enum_size['$=='](0)) !== false && $b !== nil) ? $b : $rb_lt(enum_size, n))) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0 + } else { + return $rb_plus($rb_minus(enum_size, n), 1) + };}, TMP_17.$$s = self, TMP_17), $a).call($b, "each_cons", n) }; - for (var i = 0, length = self.length, value; i < length; i++) { - if ((value = block(self[i])) === $breaker) { - return $breaker.$v; - } + var buffer = [], result = nil; - if (value !== false && value !== nil) { - self.splice(i, 1); + self.$each.$$p = function() { + var element = $scope.get('Opal').$destructure(arguments); + buffer.push(element); + if (buffer.length > n) { + buffer.shift(); + } + if (buffer.length == n) { + var value = Opal.yield1(block, buffer.slice(0, n)); - length--; - i--; + if (value == $breaker) { + result = $breaker.$v; + return $breaker; + } } } - - return self; - }; - def.$drop = function(number) { - var self = this; + self.$each(); - - if (number < 0) { - self.$raise($scope.get('ArgumentError')) - } + return result; + + }); - return self.slice(number); - ; - }; + Opal.defn(self, '$each_entry', TMP_18 = function() { + var self = this, $iter = TMP_18.$$p, block = $iter || nil; - Opal.defn(self, '$dup', def.$clone); + TMP_18.$$p = null; + return self.$raise($scope.get('NotImplementedError')); + }); - def.$each = TMP_9 = function() { - var self = this, $iter = TMP_9.$$p, block = $iter || nil; + Opal.defn(self, '$each_slice', TMP_19 = function(n) { + var $a, $b, TMP_20, self = this, $iter = TMP_19.$$p, block = $iter || nil; - TMP_9.$$p = null; + TMP_19.$$p = null; + n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); + if ((($a = n <= 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "invalid slice size")}; if ((block !== nil)) { } else { - return self.$enum_for("each") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_20 = function(){var self = TMP_20.$$s || this, $a; + + if ((($a = self['$respond_to?']("size")) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($rb_divide(self.$size(), n)).$ceil() + } else { + return nil + }}, TMP_20.$$s = self, TMP_20), $a).call($b, "each_slice", n) }; - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, self[i]); + var result, + slice = [] - if (value == $breaker) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); + + slice.push(param); + + if (slice.length === n) { + if (Opal.yield1(block, slice) === $breaker) { + result = $breaker.$v; + return $breaker; + } + + slice = []; + } + }; + + self.$each(); + + if (result !== undefined) { + return result; + } + + // our "last" group, if smaller than n then won't have been yielded + if (slice.length > 0) { + if (Opal.yield1(block, slice) === $breaker) { return $breaker.$v; } } - - return self; - }; + ; + return nil; + }); - def.$each_index = TMP_10 = function() { - var self = this, $iter = TMP_10.$$p, block = $iter || nil; + Opal.defn(self, '$each_with_index', TMP_21 = function() { + var $a, $b, TMP_22, self = this, $iter = TMP_21.$$p, block = $iter || nil, $splat_index = nil; - TMP_10.$$p = null; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_21.$$p = null; if ((block !== nil)) { } else { - return self.$enum_for("each_index") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_22 = function(){var self = TMP_22.$$s || this; + + return self.$enumerator_size()}, TMP_22.$$s = self, TMP_22), $a).apply($b, ["each_with_index"].concat(Opal.to_a(args))) }; - for (var i = 0, length = self.length; i < length; i++) { - var value = Opal.yield1(block, i); + var result, + index = 0; + + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = block(param, index); if (value === $breaker) { - return $breaker.$v; + result = $breaker.$v; + return $breaker; } + + index++; + }; + + self.$each.apply(self, args); + + if (result !== undefined) { + return result; } return self; - }; - - def['$empty?'] = function() { - var self = this; + }); - return self.length === 0; - }; + Opal.defn(self, '$each_with_object', TMP_23 = function(object) { + var $a, $b, TMP_24, self = this, $iter = TMP_23.$$p, block = $iter || nil; - def['$eql?'] = function(other) { - var self = this; + TMP_23.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_24 = function(){var self = TMP_24.$$s || this; + return self.$enumerator_size()}, TMP_24.$$s = self, TMP_24), $a).call($b, "each_with_object", object) + }; - var recursed = {}; + var result; - function _eql(array, other) { - var i, length, a, b; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = block(param, object); - if (!other.$$is_array) { - return false; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } + }; - other = other.$to_a(); + self.$each(); - if (array.length !== other.length) { - return false; - } + if (result !== undefined) { + return result; + } + + return object; + }); - recursed[(array).$object_id()] = true; + Opal.defn(self, '$entries', function() { + var self = this, $splat_index = nil; - for (i = 0, length = array.length; i < length; i++) { - a = array[i]; - b = other[i]; - if (a.$$is_array) { - if (b.$$is_array && b.length !== a.length) { - return false; - } - if (!recursed.hasOwnProperty((a).$object_id())) { - if (!_eql(a, b)) { - return false; - } - } - } else { - if (!(a)['$eql?'](b)) { - return false; - } - } - } - - return true; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; } - - return _eql(self, other); - - }; - - def.$fetch = TMP_11 = function(index, defaults) { - var self = this, $iter = TMP_11.$$p, block = $iter || nil; - - TMP_11.$$p = null; - var original = index; - - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - - if (index < 0) { - index += self.length; - } + var result = []; - if (index >= 0 && index < self.length) { - return self[index]; - } + self.$each.$$p = function() { + result.push($scope.get('Opal').$destructure(arguments)); + }; - if (block !== nil) { - return block(original); - } + self.$each.apply(self, args); - if (defaults != null) { - return defaults; - } + return result; + + }); - if (self.length === 0) { - self.$raise($scope.get('IndexError'), "index " + (original) + " outside of array bounds: 0...0") - } - else { - self.$raise($scope.get('IndexError'), "index " + (original) + " outside of array bounds: -" + (self.length) + "..." + (self.length)); - } - ; - }; + Opal.alias(self, 'find', 'detect'); - def.$fill = TMP_12 = function(args) { - var $a, self = this, $iter = TMP_12.$$p, block = $iter || nil, one = nil, two = nil, obj = nil, left = nil, right = nil; + Opal.defn(self, '$find_all', TMP_25 = function() { + var $a, $b, TMP_26, self = this, $iter = TMP_25.$$p, block = $iter || nil; - args = $slice.call(arguments, 0); - TMP_12.$$p = null; - if (block !== false && block !== nil) { - if ((($a = args.length > 2) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 0..2)")}; - $a = Opal.to_ary(args), one = ($a[0] == null ? nil : $a[0]), two = ($a[1] == null ? nil : $a[1]); - } else { - if ((($a = args.length == 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)") - } else if ((($a = args.length > 3) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 1..3)")}; - $a = Opal.to_ary(args), obj = ($a[0] == null ? nil : $a[0]), one = ($a[1] == null ? nil : $a[1]), two = ($a[2] == null ? nil : $a[2]); - }; - if ((($a = $scope.get('Range')['$==='](one)) !== nil && (!$a.$$is_boolean || $a == true))) { - if (two !== false && two !== nil) { - self.$raise($scope.get('TypeError'), "length invalid with range")}; - left = $scope.get('Opal').$coerce_to(one.$begin(), $scope.get('Integer'), "to_int"); - if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - left += self.length;}; - if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('RangeError'), "" + (one.$inspect()) + " out of range")}; - right = $scope.get('Opal').$coerce_to(one.$end(), $scope.get('Integer'), "to_int"); - if ((($a = right < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - right += self.length;}; - if ((($a = one['$exclude_end?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - right += 1; - }; - if ((($a = right <= left) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - } else if (one !== false && one !== nil) { - left = $scope.get('Opal').$coerce_to(one, $scope.get('Integer'), "to_int"); - if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - left += self.length;}; - if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - left = 0}; - if (two !== false && two !== nil) { - right = $scope.get('Opal').$coerce_to(two, $scope.get('Integer'), "to_int"); - if ((($a = right == 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - right += left; - } else { - right = self.length - }; + TMP_25.$$p = null; + if ((block !== nil)) { } else { - left = 0; - right = self.length; + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_26 = function(){var self = TMP_26.$$s || this; + + return self.$enumerator_size()}, TMP_26.$$s = self, TMP_26), $a).call($b, "find_all") }; - if ((($a = left > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - - for (var i = self.length; i < right; i++) { - self[i] = nil; - } - ;}; - if ((($a = right > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - self.length = right}; - if (block !== false && block !== nil) { - - for (var length = self.length; left < right; left++) { - var value = block(left); + + var result = []; - if (value === $breaker) { - return $breaker.$v; - } + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - self[left] = value; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - ; - } else { - - for (var length = self.length; left < right; left++) { - self[left] = obj; + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result.push(param); } - ; }; - return self; - }; - - def.$first = function(count) { - var self = this; - - - if (count == null) { - return self.length === 0 ? nil : self[0]; - } - - count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - if (count < 0) { - self.$raise($scope.get('ArgumentError'), "negative array size"); - } + self.$each(); - return self.slice(0, count); + return result; - }; + }); - def.$flatten = function(level) { - var self = this; + Opal.defn(self, '$find_index', TMP_27 = function(object) { + var $a, self = this, $iter = TMP_27.$$p, block = $iter || nil; + TMP_27.$$p = null; + if ((($a = object === undefined && block === nil) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$enum_for("find_index")}; - var object_id = (self).$object_id(); - - function _flatten(array, level) { - var array = (array).$to_a(), - result = [], - i, length, - item, ary; - - for (i = 0, length = array.length; i < length; i++) { - item = array[i]; - - if (!$scope.get('Opal')['$respond_to?'](item, "to_ary")) { - result.push(item); - continue; - } + var result = nil, + index = 0; - ary = (item).$to_ary(); + if (object != null) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - if (ary === nil) { - result.push(item); - continue; + if ((param)['$=='](object)) { + result = index; + return $breaker; } - if (!ary.$$is_array) { - self.$raise($scope.get('TypeError')); - } + index += 1; + }; + } + else if (block !== nil) { + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); - if (object_id === (ary).$object_id()) { - self.$raise($scope.get('ArgumentError')); + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - switch (level) { - case undefined: - result.push.apply(result, _flatten(ary)); - break; - case 0: - result.push(ary); - break; - default: - result.push.apply(result, _flatten(ary, level - 1)); + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result = index; + return $breaker; } - } - return result; - } - if (level !== undefined) { - level = $scope.get('Opal').$coerce_to(level, $scope.get('Integer'), "to_int"); + index += 1; + }; } - return _flatten(self, level); - ; - }; + self.$each(); - def['$flatten!'] = function(level) { - var self = this; + return result; + + }); - - var flattened = self.$flatten(level); + Opal.defn(self, '$first', function(number) { + var $a, self = this, result = nil; - if (self.length == flattened.length) { - for (var i = 0, length = self.length; i < length; i++) { - if (self[i] !== flattened[i]) { - break; - } - } + if ((($a = number === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + result = nil; + + self.$each.$$p = function() { + result = $scope.get('Opal').$destructure(arguments); - if (i == length) { - return nil; - } - } + return $breaker; + }; - self.$replace(flattened); - ; - return self; - }; + self.$each(); + ; + } else { + result = []; + number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); + if ((($a = number < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "attempt to take negative size")}; + if ((($a = number == 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return []}; + + var current = 0; + number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int"); - def.$hash = function() { - var self = this; + self.$each.$$p = function() { + result.push($scope.get('Opal').$destructure(arguments)); + if (number <= ++current) { + return $breaker; + } + }; + + self.$each(); - var hash = ['A'], - item; - for (var i = 0, length = self.length; i < length; i++) { - item = self[i]; - if (item.$$is_array && (self)['$eql?'](item)) { - hash.push('self'); - } else { - hash.push(item.$hash()); - } - } - return hash.join(','); - - }; + }; + return result; + }); - def['$include?'] = function(member) { - var self = this; + Opal.alias(self, 'flat_map', 'collect_concat'); + + Opal.defn(self, '$grep', TMP_28 = function(pattern) { + var $a, self = this, $iter = TMP_28.$$p, block = $iter || nil; + TMP_28.$$p = null; - for (var i = 0, length = self.length; i < length; i++) { - if ((self[i])['$=='](member)) { - return true; - } - } + var result = []; - return false; - - }; + if (block !== nil) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = pattern['$==='](param); - def.$index = TMP_13 = function(object) { - var self = this, $iter = TMP_13.$$p, block = $iter || nil; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + value = Opal.yield1(block, param); - TMP_13.$$p = null; - - if (object != null) { - for (var i = 0, length = self.length; i < length; i++) { - if ((self[i])['$=='](object)) { - return i; - } - } - } - else if (block !== nil) { - for (var i = 0, length = self.length, value; i < length; i++) { - if ((value = block(self[i])) === $breaker) { - return $breaker.$v; - } + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } - if (value !== false && value !== nil) { - return i; + result.push(value); } - } + }; } else { - return self.$enum_for("index"); + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = pattern['$==='](param); + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result.push(param); + } + }; } - return nil; - - }; + self.$each(); - def.$insert = function(index, objects) { - var self = this; + return result; + ; + }); + + Opal.defn(self, '$group_by', TMP_29 = function() { + var $a, $b, TMP_30, $c, $d, self = this, $iter = TMP_29.$$p, block = $iter || nil, hash = nil; + + TMP_29.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_30 = function(){var self = TMP_30.$$s || this; - objects = $slice.call(arguments, 1); + return self.$enumerator_size()}, TMP_30.$$s = self, TMP_30), $a).call($b, "group_by") + }; + hash = $scope.get('Hash').$new(); - index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); + var result; - if (objects.length > 0) { - if (index < 0) { - index += self.length + 1; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - if (index < 0) { - self.$raise($scope.get('IndexError'), "" + (index) + " is out of bounds"); - } - } - if (index > self.length) { - for (var i = self.length; i < index; i++) { - self.push(nil); - } + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - self.splice.apply(self, [index, 0].concat(objects)); + (($a = value, $c = hash, ((($d = $c['$[]']($a)) !== false && $d !== nil) ? $d : $c['$[]=']($a, []))))['$<<'](param); } - ; - return self; - }; - def.$inspect = function() { + self.$each(); + + if (result !== undefined) { + return result; + } + + return hash; + }); + + Opal.defn(self, '$include?', function(obj) { var self = this; - var result = [], - id = self.$__id__(); + var result = false; - for (var i = 0, length = self.length; i < length; i++) { - var item = self['$[]'](i); + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - if ((item).$__id__() === id) { - result.push('[...]'); - } - else { - result.push((item).$inspect()); + if ((param)['$=='](obj)) { + result = true; + return $breaker; } } - return '[' + result.join(', ') + ']'; - ; - }; - - def.$join = function(sep) { - var $a, self = this; - if ($gvars[","] == null) $gvars[","] = nil; + self.$each(); - if (sep == null) { - sep = nil - } - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return ""}; - if ((($a = sep === nil) !== nil && (!$a.$$is_boolean || $a == true))) { - sep = $gvars[","]}; - - var result = []; - var object_id = (self).$object_id(); + return result; + + }); - for (var i = 0, length = self.length; i < length; i++) { - var item = self[i]; + Opal.defn(self, '$inject', TMP_31 = function(object, sym) { + var self = this, $iter = TMP_31.$$p, block = $iter || nil; - if ($scope.get('Opal')['$respond_to?'](item, "to_str")) { - var tmp = (item).$to_str(); + TMP_31.$$p = null; + + var result = object; - if (tmp !== nil) { - result.push((tmp).$to_s()); + if (block !== nil && sym === undefined) { + self.$each.$$p = function() { + var value = $scope.get('Opal').$destructure(arguments); - continue; + if (result === undefined) { + result = value; + return; } - } - if ($scope.get('Opal')['$respond_to?'](item, "to_ary")) { - var tmp = (item).$to_ary(); + value = Opal.yieldX(block, [result, value]); - if (object_id === (tmp).$object_id()) { - self.$raise($scope.get('ArgumentError')); + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - if (tmp !== nil) { - result.push((tmp).$join(sep)); - - continue; + result = value; + }; + } + else { + if (sym === undefined) { + if (!$scope.get('Symbol')['$==='](object)) { + self.$raise($scope.get('TypeError'), "" + (object.$inspect()) + " is not a Symbol"); } - } - if ($scope.get('Opal')['$respond_to?'](item, "to_s")) { - var tmp = (item).$to_s(); + sym = object; + result = undefined; + } - if (tmp !== nil) { - result.push(tmp); + self.$each.$$p = function() { + var value = $scope.get('Opal').$destructure(arguments); - continue; + if (result === undefined) { + result = value; + return; } - } - self.$raise($scope.get('NoMethodError'), "" + ($scope.get('Opal').$inspect(item)) + " doesn't respond to #to_str, #to_ary or #to_s"); + result = (result).$__send__(sym, value); + }; } - if (sep === nil) { - return result.join(''); - } - else { - return result.join($scope.get('Opal')['$coerce_to!'](sep, $scope.get('String'), "to_str").$to_s()); - } + self.$each(); + + return result == undefined ? nil : result; ; - }; + }); + + Opal.defn(self, '$lazy', function() { + var $a, $b, TMP_32, self = this; - def.$keep_if = TMP_14 = function() { - var self = this, $iter = TMP_14.$$p, block = $iter || nil; + return ($a = ($b = (($scope.get('Enumerator')).$$scope.get('Lazy'))).$new, $a.$$p = (TMP_32 = function(enum$, args){var self = TMP_32.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + return ($a = enum$).$yield.apply($a, Opal.to_a(args))}, TMP_32.$$s = self, TMP_32), $a).call($b, self, self.$enumerator_size()); + }); - TMP_14.$$p = null; - if ((block !== nil)) { + Opal.defn(self, '$enumerator_size', function() { + var $a, self = this; + + if ((($a = self['$respond_to?']("size")) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$size() } else { - return self.$enum_for("keep_if") + return nil }; - - for (var i = 0, length = self.length, value; i < length; i++) { - if ((value = block(self[i])) === $breaker) { - return $breaker.$v; - } - - if (value === false || value === nil) { - self.splice(i, 1); + }); - length--; - i--; - } - } - - return self; - }; + Opal.alias(self, 'map', 'collect'); - def.$last = function(count) { - var self = this; + Opal.defn(self, '$max', TMP_33 = function() { + var self = this, $iter = TMP_33.$$p, block = $iter || nil; + TMP_33.$$p = null; - if (count == null) { - return self.length === 0 ? nil : self[self.length - 1]; - } + var result; - count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); + if (block !== nil) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - if (count < 0) { - self.$raise($scope.get('ArgumentError'), "negative array size"); - } + if (result === undefined) { + result = param; + return; + } - if (count > self.length) { - count = self.length; - } + var value = block(param, result); - return self.slice(self.length - count, self.length); - - }; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } - def.$length = function() { - var self = this; + if (value === nil) { + self.$raise($scope.get('ArgumentError'), "comparison failed"); + } - return self.length; - }; + if (value > 0) { + result = param; + } + }; + } + else { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - Opal.defn(self, '$map', def.$collect); + if (result === undefined) { + result = param; + return; + } - Opal.defn(self, '$map!', def['$collect!']); + if ($scope.get('Opal').$compare(param, result) > 0) { + result = param; + } + }; + } - def.$pop = function(count) { - var $a, self = this; + self.$each(); - if ((($a = count === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - return self.pop();}; - count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - if ((($a = count < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "negative array size")}; - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - if ((($a = count > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.splice(0, self.length); - } else { - return self.splice(self.length - count, self.length); - }; - }; + return result === undefined ? nil : result; + + }); - def.$product = TMP_15 = function(args) { - var $a, self = this, $iter = TMP_15.$$p, block = $iter || nil; + Opal.defn(self, '$max_by', TMP_34 = function() { + var $a, $b, TMP_35, self = this, $iter = TMP_34.$$p, block = $iter || nil; - args = $slice.call(arguments, 0); - TMP_15.$$p = null; + TMP_34.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_35 = function(){var self = TMP_35.$$s || this; + + return self.$enumerator_size()}, TMP_35.$$s = self, TMP_35), $a).call($b, "max_by") + }; - var result = (block !== nil) ? null : [], - n = args.length + 1, - counters = new Array(n), - lengths = new Array(n), - arrays = new Array(n), - i, m, subarray, len, resultlen = 1; + var result, + by; - arrays[0] = self; - for (i = 1; i < n; i++) { - arrays[i] = $scope.get('Opal').$coerce_to(args[i - 1], $scope.get('Array'), "to_ary"); - } + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - for (i = 0; i < n; i++) { - len = arrays[i].length; - if (len === 0) { - return result || self; - } - resultlen *= len; - if (resultlen > 2147483647) { - self.$raise($scope.get('RangeError'), "too big to product") + if (result === undefined) { + result = param; + by = value; + return; } - lengths[i] = len; - counters[i] = 0; - } - outer_loop: for (;;) { - subarray = []; - for (i = 0; i < n; i++) { - subarray.push(arrays[i][counters[i]]); - } - if (result) { - result.push(subarray); - } else { - ((($a = Opal.yield1(block, subarray)) === $breaker) ? $breaker.$v : $a) - } - m = n - 1; - counters[m]++; - while (counters[m] === lengths[m]) { - counters[m] = 0; - if (--m < 0) break outer_loop; - counters[m]++; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - } - return result || self; - ; - }; + if ((value)['$<=>'](by) > 0) { + result = param + by = value; + } + }; - def.$push = function(objects) { - var self = this; + self.$each(); - objects = $slice.call(arguments, 0); - - for (var i = 0, length = objects.length; i < length; i++) { - self.push(objects[i]); - } + return result === undefined ? nil : result; - return self; - }; + }); - def.$rassoc = function(object) { - var self = this; + Opal.alias(self, 'member?', 'include?'); + + Opal.defn(self, '$min', TMP_36 = function() { + var self = this, $iter = TMP_36.$$p, block = $iter || nil; + TMP_36.$$p = null; - for (var i = 0, length = self.length, item; i < length; i++) { - item = self[i]; + var result; - if (item.length && item[1] !== undefined) { - if ((item[1])['$=='](object)) { - return item; + if (block !== nil) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); + + if (result === undefined) { + result = param; + return; } - } + + var value = block(param, result); + + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } + + if (value === nil) { + self.$raise($scope.get('ArgumentError'), "comparison failed"); + } + + if (value < 0) { + result = param; + } + }; } + else { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments); - return nil; + if (result === undefined) { + result = param; + return; + } + + if ($scope.get('Opal').$compare(param, result) < 0) { + result = param; + } + }; + } + + self.$each(); + + return result === undefined ? nil : result; - }; + }); - def.$reject = TMP_16 = function() { - var self = this, $iter = TMP_16.$$p, block = $iter || nil; + Opal.defn(self, '$min_by', TMP_37 = function() { + var $a, $b, TMP_38, self = this, $iter = TMP_37.$$p, block = $iter || nil; - TMP_16.$$p = null; - if ((block !== nil)) { + TMP_37.$$p = null; + if (block !== false && block !== nil) { } else { - return self.$enum_for("reject") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_38 = function(){var self = TMP_38.$$s || this; + + return self.$enumerator_size()}, TMP_38.$$s = self, TMP_38), $a).call($b, "min_by") }; - var result = []; + var result, + by; - for (var i = 0, length = self.length, value; i < length; i++) { - if ((value = block(self[i])) === $breaker) { - return $breaker.$v; - } + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - if (value === false || value === nil) { - result.push(self[i]); + if (result === undefined) { + result = param; + by = value; + return; } - } - return result; - - }; - def['$reject!'] = TMP_17 = function() { - var $a, $b, self = this, $iter = TMP_17.$$p, block = $iter || nil, original = nil; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } - TMP_17.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("reject!") - }; - original = self.$length(); - ($a = ($b = self).$delete_if, $a.$$p = block.$to_proc(), $a).call($b); - if (self.$length()['$=='](original)) { - return nil - } else { - return self + if ((value)['$<=>'](by) < 0) { + result = param + by = value; + } }; - }; - def.$replace = function(other) { - var $a, self = this; + self.$each(); - if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_a() - } else { - other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() - }; - - self.splice(0, self.length); - self.push.apply(self, other); + return result === undefined ? nil : result; - return self; - }; + }); - def.$reverse = function() { - var self = this; + Opal.defn(self, '$minmax', TMP_39 = function() { + var $a, $b, $c, TMP_40, self = this, $iter = TMP_39.$$p, block = $iter || nil; - return self.slice(0).reverse(); - }; + TMP_39.$$p = null; + ((($a = block) !== false && $a !== nil) ? $a : block = ($b = ($c = self).$proc, $b.$$p = (TMP_40 = function(a, b){var self = TMP_40.$$s || this; +if (a == null) a = nil;if (b == null) b = nil; + return a['$<=>'](b)}, TMP_40.$$s = self, TMP_40), $b).call($c)); + + var min = nil, max = nil, first_time = true; - def['$reverse!'] = function() { - var self = this; + self.$each.$$p = function() { + var element = $scope.get('Opal').$destructure(arguments); + if (first_time) { + min = max = element; + first_time = false; + } else { + var min_cmp = block.$call(min, element); - return self.reverse(); - }; + if (min_cmp === nil) { + self.$raise($scope.get('ArgumentError'), "comparison failed") + } else if (min_cmp > 0) { + min = element; + } - def.$reverse_each = TMP_18 = function() { - var $a, $b, self = this, $iter = TMP_18.$$p, block = $iter || nil; + var max_cmp = block.$call(max, element); - TMP_18.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("reverse_each") - }; - ($a = ($b = self.$reverse()).$each, $a.$$p = block.$to_proc(), $a).call($b); - return self; - }; + if (max_cmp === nil) { + self.$raise($scope.get('ArgumentError'), "comparison failed") + } else if (max_cmp < 0) { + max = element; + } + } + } - def.$rindex = TMP_19 = function(object) { - var self = this, $iter = TMP_19.$$p, block = $iter || nil; + self.$each(); - TMP_19.$$p = null; + return [min, max]; + + }); + + Opal.defn(self, '$minmax_by', TMP_41 = function() { + var self = this, $iter = TMP_41.$$p, block = $iter || nil; + + TMP_41.$$p = null; + return self.$raise($scope.get('NotImplementedError')); + }); + + Opal.defn(self, '$none?', TMP_42 = function() { + var $a, self = this, $iter = TMP_42.$$p, block = $iter || nil; + + TMP_42.$$p = null; - if (object != null) { - for (var i = self.length - 1; i >= 0; i--) { - if ((self[i])['$=='](object)) { - return i; - } - } - } - else if (block !== nil) { - for (var i = self.length - 1, value; i >= 0; i--) { - if ((value = block(self[i])) === $breaker) { - return $breaker.$v; + var result = true; + + if (block !== nil) { + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); + + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - if (value !== false && value !== nil) { - return i; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result = false; + return $breaker; } } } - else if (object == null) { - return self.$enum_for("rindex"); + else { + self.$each.$$p = function() { + var value = $scope.get('Opal').$destructure(arguments); + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + result = false; + return $breaker; + } + }; } - return nil; + self.$each(); + + return result; - }; + }); - def.$rotate = function(n) { - var self = this; + Opal.defn(self, '$one?', TMP_43 = function() { + var $a, self = this, $iter = TMP_43.$$p, block = $iter || nil; - if (n == null) { - n = 1 - } - n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - - var ary, idx, firstPart, lastPart; - - if (self.length === 1) { - return self.slice(); - } - if (self.length === 0) { - return []; - } - - ary = self.slice(); - idx = n % ary.length; + TMP_43.$$p = null; - firstPart = ary.slice(idx); - lastPart = ary.slice(0, idx); - return firstPart.concat(lastPart); - - }; + var result = false; - def['$rotate!'] = function(cnt) { - var $a, self = this, ary = nil; + if (block !== nil) { + self.$each.$$p = function() { + var value = Opal.yieldX(block, arguments); - if (cnt == null) { - cnt = 1 - } - if ((($a = self['$frozen?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('RuntimeError'), "can't modify frozen Array")}; - - if (self.length === 0 || self.length === 1) { - return self; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + if (result === true) { + result = false; + return $breaker; + } + + result = true; + } + } } - - cnt = $scope.get('Opal').$coerce_to(cnt, $scope.get('Integer'), "to_int"); - ary = self.$rotate(cnt); - return self.$replace(ary); - }; + else { + self.$each.$$p = function() { + var value = $scope.get('Opal').$destructure(arguments); - def.$sample = function(n) { - var $a, $b, TMP_20, self = this; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + if (result === true) { + result = false; + return $breaker; + } - if (n == null) { - n = nil + result = true; + } + } } - if ((($a = ($b = n['$!'](), $b !== false && $b !== nil ?self['$empty?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - if ((($a = (($b = n !== false && n !== nil) ? self['$empty?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - if (n !== false && n !== nil) { - return ($a = ($b = ($range(1, n, false))).$map, $a.$$p = (TMP_20 = function(){var self = TMP_20.$$s || this; - return self['$[]'](self.$rand(self.$length()))}, TMP_20.$$s = self, TMP_20), $a).call($b) - } else { - return self['$[]'](self.$rand(self.$length())) - }; - }; + self.$each(); - def.$select = TMP_21 = function() { - var self = this, $iter = TMP_21.$$p, block = $iter || nil; + return result; + + }); - TMP_21.$$p = null; + Opal.defn(self, '$partition', TMP_44 = function() { + var $a, $b, TMP_45, self = this, $iter = TMP_44.$$p, block = $iter || nil; + + TMP_44.$$p = null; if ((block !== nil)) { } else { - return self.$enum_for("select") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_45 = function(){var self = TMP_45.$$s || this; + + return self.$enumerator_size()}, TMP_45.$$s = self, TMP_45), $a).call($b, "partition") }; - var result = []; + var truthy = [], falsy = [], result; - for (var i = 0, length = self.length, item, value; i < length; i++) { - item = self[i]; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - if ((value = Opal.yield1(block, item)) === $breaker) { - return $breaker.$v; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - if (value !== false && value !== nil) { - result.push(item); + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + truthy.push(param); } - } + else { + falsy.push(param); + } + }; - return result; + self.$each(); + + return [truthy, falsy]; - }; + }); - def['$select!'] = TMP_22 = function() { - var $a, $b, self = this, $iter = TMP_22.$$p, block = $iter || nil; + Opal.alias(self, 'reduce', 'inject'); - TMP_22.$$p = null; + Opal.defn(self, '$reject', TMP_46 = function() { + var $a, $b, TMP_47, self = this, $iter = TMP_46.$$p, block = $iter || nil; + + TMP_46.$$p = null; if ((block !== nil)) { } else { - return self.$enum_for("select!") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_47 = function(){var self = TMP_47.$$s || this; + + return self.$enumerator_size()}, TMP_47.$$s = self, TMP_47), $a).call($b, "reject") }; - var original = self.length; - ($a = ($b = self).$keep_if, $a.$$p = block.$to_proc(), $a).call($b); - return self.length === original ? nil : self; - - }; - - def.$shift = function(count) { - var $a, self = this; - - if ((($a = count === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - return self.shift();}; - count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - if ((($a = count < 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "negative array size")}; - if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - return self.splice(0, count); - }; - - Opal.defn(self, '$size', def.$length); + var result = []; - def.$shuffle = function() { - var self = this; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - return self.$clone()['$shuffle!'](); - }; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; + } - def['$shuffle!'] = function() { - var self = this; + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + result.push(param); + } + }; - - for (var i = self.length - 1; i > 0; i--) { - var tmp = self[i], - j = Math.floor(Math.random() * (i + 1)); + self.$each(); - self[i] = self[j]; - self[j] = tmp; - } + return result; - return self; - }; + }); - Opal.defn(self, '$slice', def['$[]']); + Opal.defn(self, '$reverse_each', TMP_48 = function() { + var $a, $b, TMP_49, self = this, $iter = TMP_48.$$p, block = $iter || nil; - def['$slice!'] = function(index, length) { - var self = this; + TMP_48.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_49 = function(){var self = TMP_49.$$s || this; + return self.$enumerator_size()}, TMP_49.$$s = self, TMP_49), $a).call($b, "reverse_each") + }; - if (index < 0) { - index += self.length; - } + var result = []; - if (length != null) { - return self.splice(index, length); - } + self.$each.$$p = function() { + result.push(arguments); + }; - if (index < 0 || index >= self.length) { - return nil; + self.$each(); + + for (var i = result.length - 1; i >= 0; i--) { + Opal.yieldX(block, result[i]); } - return self.splice(index, 1)[0]; + return result; - }; + }); - def.$sort = TMP_23 = function() { - var $a, self = this, $iter = TMP_23.$$p, block = $iter || nil; + Opal.alias(self, 'select', 'find_all'); - TMP_23.$$p = null; - if ((($a = self.length > 1) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - return self - }; + Opal.defn(self, '$slice_before', TMP_50 = function(pattern) { + var $a, $b, TMP_51, self = this, $iter = TMP_50.$$p, block = $iter || nil; + + TMP_50.$$p = null; + if ((($a = pattern === undefined && block === nil || arguments.length > 1) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 1)")}; + return ($a = ($b = $scope.get('Enumerator')).$new, $a.$$p = (TMP_51 = function(e){var self = TMP_51.$$s || this, $a; +if (e == null) e = nil; - if (!(block !== nil)) { - block = function(a, b) { - return (a)['$<=>'](b); - }; - } + var slice = []; - try { - return self.slice().sort(function(x, y) { - var ret = block(x, y); + if (block !== nil) { + if (pattern === undefined) { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - if (ret === $breaker) { - throw $breaker; - } - else if (ret === nil) { - self.$raise($scope.get('ArgumentError'), "comparison of " + ((x).$inspect()) + " with " + ((y).$inspect()) + " failed"); + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { + e['$<<'](slice); + slice = []; + } + + slice.push(param); + }; } + else { + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = block(param, pattern.$dup()); - return $rb_gt(ret, 0) ? 1 : ($rb_lt(ret, 0) ? -1 : 0); - }); - } - catch (e) { - if (e === $breaker) { - return $breaker.$v; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { + e['$<<'](slice); + slice = []; + } + + slice.push(param); + }; + } } else { - throw e; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = pattern['$==='](param); + + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true)) && slice.length > 0) { + e['$<<'](slice); + slice = []; + } + + slice.push(param); + }; } - } - ; - }; - def['$sort!'] = TMP_24 = function() { - var $a, $b, self = this, $iter = TMP_24.$$p, block = $iter || nil; + self.$each(); - TMP_24.$$p = null; - - var result; + if (slice.length > 0) { + e['$<<'](slice); + } + ;}, TMP_51.$$s = self, TMP_51), $a).call($b); + }); + Opal.defn(self, '$sort', TMP_52 = function() { + var $a, $b, TMP_53, self = this, $iter = TMP_52.$$p, block = $iter || nil, ary = nil; + + TMP_52.$$p = null; + ary = self.$to_a(); if ((block !== nil)) { - result = ($a = ($b = (self.slice())).$sort, $a.$$p = block.$to_proc(), $a).call($b); - } - else { - result = (self.slice()).$sort(); - } + } else { + block = ($a = ($b = self).$lambda, $a.$$p = (TMP_53 = function(a, b){var self = TMP_53.$$s || this; +if (a == null) a = nil;if (b == null) b = nil; + return a['$<=>'](b)}, TMP_53.$$s = self, TMP_53), $a).call($b) + }; + return ary.sort(block); + }); - self.length = 0; - for(var i = 0, length = result.length; i < length; i++) { - self.push(result[i]); - } + Opal.defn(self, '$sort_by', TMP_54 = function() { + var $a, $b, TMP_55, $c, TMP_56, $d, TMP_57, $e, TMP_58, self = this, $iter = TMP_54.$$p, block = $iter || nil, dup = nil; - return self; - ; - }; + TMP_54.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_55 = function(){var self = TMP_55.$$s || this; - def.$take = function(count) { - var self = this; + return self.$enumerator_size()}, TMP_55.$$s = self, TMP_55), $a).call($b, "sort_by") + }; + dup = ($a = ($c = self).$map, $a.$$p = (TMP_56 = function(){var self = TMP_56.$$s || this, arg = nil; - - if (count < 0) { - self.$raise($scope.get('ArgumentError')); - } + arg = $scope.get('Opal').$destructure(arguments); + return [block.$call(arg), arg];}, TMP_56.$$s = self, TMP_56), $a).call($c); + ($a = ($d = dup)['$sort!'], $a.$$p = (TMP_57 = function(a, b){var self = TMP_57.$$s || this; +if (a == null) a = nil;if (b == null) b = nil; + return (a[0])['$<=>'](b[0])}, TMP_57.$$s = self, TMP_57), $a).call($d); + return ($a = ($e = dup)['$map!'], $a.$$p = (TMP_58 = function(i){var self = TMP_58.$$s || this; +if (i == null) i = nil; + return i[1];}, TMP_58.$$s = self, TMP_58), $a).call($e); + }); - return self.slice(0, count); - ; - }; + Opal.defn(self, '$take', function(num) { + var self = this; - def.$take_while = TMP_25 = function() { - var self = this, $iter = TMP_25.$$p, block = $iter || nil; + return self.$first(num); + }); - TMP_25.$$p = null; + Opal.defn(self, '$take_while', TMP_59 = function() { + var $a, self = this, $iter = TMP_59.$$p, block = $iter || nil; + + TMP_59.$$p = null; + if (block !== false && block !== nil) { + } else { + return self.$enum_for("take_while") + }; var result = []; - for (var i = 0, length = self.length, item, value; i < length; i++) { - item = self[i]; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = Opal.yield1(block, param); - if ((value = block(item)) === $breaker) { - return $breaker.$v; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - if (value === false || value === nil) { - return result; + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + return $breaker; } - result.push(item); - } + result.push(param); + }; + + self.$each(); return result; - }; + }); - def.$to_a = function() { - var self = this; + Opal.alias(self, 'to_a', 'entries'); - return self; - }; + Opal.defn(self, '$zip', TMP_60 = function() { + var $a, self = this, $iter = TMP_60.$$p, block = $iter || nil, $splat_index = nil; - Opal.defn(self, '$to_ary', def.$to_a); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var others = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + others[$splat_index] = arguments[$splat_index + 0]; + } + TMP_60.$$p = null; + return ($a = self.$to_a()).$zip.apply($a, Opal.to_a(others)); + }); + })($scope.base) +}; - def.$to_h = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/enumerator"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - - var i, len = self.length, ary, key, val, hash = $hash2([], {}); + Opal.add_stubs(['$require', '$include', '$allocate', '$new', '$to_proc', '$coerce_to', '$nil?', '$empty?', '$+', '$class', '$__send__', '$===', '$call', '$enum_for', '$size', '$destructure', '$inspect', '$[]', '$raise', '$yield', '$each', '$enumerator_size', '$respond_to?', '$try_convert', '$<', '$for']); + self.$require("corelib/enumerable"); + return (function($base, $super) { + function $Enumerator(){}; + var self = $Enumerator = $klass($base, $super, 'Enumerator', $Enumerator); - for (i = 0; i < len; i++) { - ary = $scope.get('Opal')['$coerce_to?'](self[i], $scope.get('Array'), "to_ary"); - if (!ary.$$is_array) { - self.$raise($scope.get('TypeError'), "wrong element type " + ((ary).$class()) + " at " + (i) + " (expected array)") - } - if (ary.length !== 2) { - self.$raise($scope.get('ArgumentError'), "wrong array length at " + (i) + " (expected 2, was " + ((ary).$length()) + ")") - } - key = ary[0]; - val = ary[1]; - hash.$store(key, val); + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4; + + def.size = def.args = def.object = def.method = nil; + self.$include($scope.get('Enumerable')); + + def.$$is_enumerator = true; + + Opal.defs(self, '$for', TMP_1 = function(object, method) { + var self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil; + + var array_size = arguments.length - 2; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 2]; + } + if (method == null) { + method = "each" } + TMP_1.$$p = null; + + var obj = self.$allocate(); - return hash; - ; - }; + obj.object = object; + obj.size = block; + obj.method = method; + obj.args = args; - Opal.defn(self, '$to_s', def.$inspect); + return obj; + ; + }); - def.$transpose = function() { - var $a, $b, TMP_26, self = this, result = nil, max = nil; + Opal.defn(self, '$initialize', TMP_2 = function() { + var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil; - if ((($a = self['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return []}; - result = []; - max = nil; - ($a = ($b = self).$each, $a.$$p = (TMP_26 = function(row){var self = TMP_26.$$s || this, $a, $b, TMP_27; -if (row == null) row = nil; - if ((($a = $scope.get('Array')['$==='](row)) !== nil && (!$a.$$is_boolean || $a == true))) { - row = row.$to_a() + TMP_2.$$p = null; + if (block !== false && block !== nil) { + self.object = ($a = ($b = $scope.get('Generator')).$new, $a.$$p = block.$to_proc(), $a).call($b); + self.method = "each"; + self.args = []; + self.size = arguments[0] || nil; + if ((($a = self.size) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.size = $scope.get('Opal').$coerce_to(self.size, $scope.get('Integer'), "to_int") } else { - row = $scope.get('Opal').$coerce_to(row, $scope.get('Array'), "to_ary").$to_a() + return nil }; - ((($a = max) !== false && $a !== nil) ? $a : max = row.length); - if ((($a = (row.length)['$=='](max)['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('IndexError'), "element size differs (" + (row.length) + " should be " + (max))}; - return ($a = ($b = (row.length)).$times, $a.$$p = (TMP_27 = function(i){var self = TMP_27.$$s || this, $a, $b, $c, entry = nil; -if (i == null) i = nil; - entry = (($a = i, $b = result, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, [])))); - return entry['$<<'](row.$at(i));}, TMP_27.$$s = self, TMP_27), $a).call($b);}, TMP_26.$$s = self, TMP_26), $a).call($b); - return result; - }; - - def.$uniq = function() { - var self = this; + } else { + self.object = arguments[0]; + self.method = arguments[1] || "each"; + self.args = $slice.call(arguments, 2); + return self.size = nil; + }; + }); - - var result = [], - seen = {}; + Opal.defn(self, '$each', TMP_3 = function() { + var $a, $b, $c, self = this, $iter = TMP_3.$$p, block = $iter || nil, $splat_index = nil; - for (var i = 0, length = self.length, item, hash; i < length; i++) { - item = self[i]; - hash = item; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_3.$$p = null; + if ((($a = ($b = block['$nil?'](), $b !== false && $b !== nil ?args['$empty?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + args = $rb_plus(self.args, args); + if ((($a = block['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = self.$class()).$new.apply($a, [self.object, self.method].concat(Opal.to_a(args)))}; + return ($b = ($c = self.object).$__send__, $b.$$p = block.$to_proc(), $b).apply($c, [self.method].concat(Opal.to_a(args))); + }); - if (!seen[hash]) { - seen[hash] = true; + Opal.defn(self, '$size', function() { + var $a, self = this; - result.push(item); - } - } + if ((($a = $scope.get('Proc')['$==='](self.size)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = self.size).$call.apply($a, Opal.to_a(self.args)) + } else { + return self.size + }; + }); - return result; - - }; + Opal.defn(self, '$with_index', TMP_4 = function(offset) { + var $a, $b, TMP_5, self = this, $iter = TMP_4.$$p, block = $iter || nil; - def['$uniq!'] = function() { - var self = this; + if (offset == null) { + offset = 0 + } + TMP_4.$$p = null; + if (offset !== false && offset !== nil) { + offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int") + } else { + offset = 0 + }; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this; + return self.$size()}, TMP_5.$$s = self, TMP_5), $a).call($b, "with_index", offset) + }; - var original = self.length, - seen = {}; + var result, index = offset; - for (var i = 0, length = original, item, hash; i < length; i++) { - item = self[i]; - hash = item; + self.$each.$$p = function() { + var param = $scope.get('Opal').$destructure(arguments), + value = block(param, index); - if (!seen[hash]) { - seen[hash] = true; + if (value === $breaker) { + result = $breaker.$v; + return $breaker; } - else { - self.splice(i, 1); - length--; - i--; - } - } + index++; - return self.length === original ? nil : self; - - }; + return value; + } - def.$unshift = function(objects) { - var self = this; + self.$each(); - objects = $slice.call(arguments, 0); - - for (var i = objects.length - 1; i >= 0; i--) { - self.unshift(objects[i]); + if (result !== undefined) { + return result; } + + return self.object; - return self; - }; + }); - def.$values_at = function(args) { - var $a, $b, TMP_28, self = this, out = nil; + Opal.alias(self, 'with_object', 'each_with_object'); - args = $slice.call(arguments, 0); - out = []; - ($a = ($b = args).$each, $a.$$p = (TMP_28 = function(elem){var self = TMP_28.$$s || this, $a, $b, TMP_29, finish = nil, start = nil, i = nil; -if (elem == null) elem = nil; - if ((($a = elem['$kind_of?']($scope.get('Range'))) !== nil && (!$a.$$is_boolean || $a == true))) { - finish = $scope.get('Opal').$coerce_to(elem.$last(), $scope.get('Integer'), "to_int"); - start = $scope.get('Opal').$coerce_to(elem.$first(), $scope.get('Integer'), "to_int"); - - if (start < 0) { - start = start + self.length; - return nil;; - } - - - if (finish < 0) { - finish = finish + self.length; - } - if (elem['$exclude_end?']()) { - finish--; - } - if (finish < start) { - return nil;; - } - - return ($a = ($b = start).$upto, $a.$$p = (TMP_29 = function(i){var self = TMP_29.$$s || this; -if (i == null) i = nil; - return out['$<<'](self.$at(i))}, TMP_29.$$s = self, TMP_29), $a).call($b, finish); - } else { - i = $scope.get('Opal').$coerce_to(elem, $scope.get('Integer'), "to_int"); - return out['$<<'](self.$at(i)); - }}, TMP_28.$$s = self, TMP_28), $a).call($b); - return out; - }; + Opal.defn(self, '$inspect', function() { + var $a, self = this, result = nil; - return (def.$zip = TMP_30 = function(others) { - var $a, self = this, $iter = TMP_30.$$p, block = $iter || nil; + result = "#<" + (self.$class()) + ": " + (self.object.$inspect()) + ":" + (self.method); + if ((($a = self.args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + result = $rb_plus(result, "(" + (self.args.$inspect()['$[]']($scope.get('Range').$new(1, -2))) + ")") + }; + return $rb_plus(result, ">"); + }); - others = $slice.call(arguments, 0); - TMP_30.$$p = null; - - var result = [], size = self.length, part, o, i, j, jj; + (function($base, $super) { + function $Generator(){}; + var self = $Generator = $klass($base, $super, 'Generator', $Generator); - for (j = 0, jj = others.length; j < jj; j++) { - o = others[j]; - if (!o.$$is_array) { - others[j] = (((($a = $scope.get('Opal')['$coerce_to?'](o, $scope.get('Array'), "to_ary")) !== false && $a !== nil) ? $a : $scope.get('Opal')['$coerce_to!'](o, $scope.get('Enumerator'), "each"))).$to_a(); - } - } + var def = self.$$proto, $scope = self.$$scope, TMP_6, TMP_7; - for (i = 0; i < size; i++) { - part = [self[i]]; + def.block = nil; + self.$include($scope.get('Enumerable')); - for (j = 0, jj = others.length; j < jj; j++) { - o = others[j][i]; + Opal.defn(self, '$initialize', TMP_6 = function() { + var self = this, $iter = TMP_6.$$p, block = $iter || nil; - if (o == null) { - o = nil; - } + TMP_6.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('LocalJumpError'), "no block given") + }; + return self.block = block; + }); - part[j + 1] = o; - } + return (Opal.defn(self, '$each', TMP_7 = function() { + var $a, $b, self = this, $iter = TMP_7.$$p, block = $iter || nil, yielder = nil, $splat_index = nil; - result[i] = part; - } + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_7.$$p = null; + yielder = ($a = ($b = $scope.get('Yielder')).$new, $a.$$p = block.$to_proc(), $a).call($b); + + try { + args.unshift(yielder); - if (block !== nil) { - for (i = 0; i < size; i++) { - block(result[i]); + if (Opal.yieldX(self.block, args) === $breaker) { + return $breaker.$v; + } + } + catch (e) { + if (e === $breaker) { + return $breaker.$v; + } + else { + throw e; + } } + ; + return self; + }), nil) && 'each'; + })($scope.base, null); - return nil; - } + (function($base, $super) { + function $Yielder(){}; + var self = $Yielder = $klass($base, $super, 'Yielder', $Yielder); - return result; - - }, nil) && 'zip'; - })(self, null); -}; + var def = self.$$proto, $scope = self.$$scope, TMP_8; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/array/inheritance"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_times(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + def.block = nil; + Opal.defn(self, '$initialize', TMP_8 = function() { + var self = this, $iter = TMP_8.$$p, block = $iter || nil; - Opal.add_stubs(['$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$clone', '$respond_to?', '$==', '$eql?', '$inspect', '$hash', '$class', '$slice', '$uniq', '$flatten']); - (function($base, $super) { - function $Array(){}; - var self = $Array = $klass($base, $super, 'Array', $Array); + TMP_8.$$p = null; + return self.block = block; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$yield', function() { + var self = this, $splat_index = nil; - return (Opal.defs(self, '$inherited', function(klass) { - var self = this, replace = nil; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var values = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + values[$splat_index] = arguments[$splat_index + 0]; + } + + var value = Opal.yieldX(self.block, values); - replace = $scope.get('Class').$new((($scope.get('Array')).$$scope.get('Wrapper'))); - - klass.$$proto = replace.$$proto; - klass.$$proto.$$class = klass; - klass.$$alloc = replace.$$alloc; - klass.$$parent = (($scope.get('Array')).$$scope.get('Wrapper')); + if (value === $breaker) { + throw $breaker; + } - klass.$allocate = replace.$allocate; - klass.$new = replace.$new; - klass["$[]"] = replace["$[]"]; - - }), nil) && 'inherited' - })(self, null); - return (function($base, $super) { - function $Wrapper(){}; - var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper); + return value; + ; + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5; + return (Opal.defn(self, '$<<', function() { + var $a, self = this, $splat_index = nil; - def.literal = nil; - def.$$is_array = true; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var values = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + values[$splat_index] = arguments[$splat_index + 0]; + } + ($a = self).$yield.apply($a, Opal.to_a(values)); + return self; + }), nil) && '<<'; + })($scope.base, null); - Opal.defs(self, '$allocate', TMP_1 = function(array) { - var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, obj = nil; + return (function($base, $super) { + function $Lazy(){}; + var self = $Lazy = $klass($base, $super, 'Lazy', $Lazy); - if (array == null) { - array = [] - } - TMP_1.$$p = null; - obj = Opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []); - obj.literal = array; - return obj; - }); + var def = self.$$proto, $scope = self.$$scope, TMP_9, TMP_12, TMP_14, TMP_19, TMP_21, TMP_22, TMP_24, TMP_27, TMP_30; - Opal.defs(self, '$new', TMP_2 = function(args) { - var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil, obj = nil; + def.enumerator = nil; + (function($base, $super) { + function $StopLazyError(){}; + var self = $StopLazyError = $klass($base, $super, 'StopLazyError', $StopLazyError); - args = $slice.call(arguments, 0); - TMP_2.$$p = null; - obj = self.$allocate(); - ($a = ($b = obj).$initialize, $a.$$p = block.$to_proc(), $a).apply($b, [].concat(args)); - return obj; - }); + var def = self.$$proto, $scope = self.$$scope; - Opal.defs(self, '$[]', function(objects) { - var self = this; + return nil; + })($scope.base, $scope.get('Exception')); - objects = $slice.call(arguments, 0); - return self.$allocate(objects); - }); + Opal.defn(self, '$initialize', TMP_9 = function(object, size) { + var TMP_10, self = this, $iter = TMP_9.$$p, block = $iter || nil; - def.$initialize = TMP_3 = function(args) { - var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil; + if (size == null) { + size = nil + } + TMP_9.$$p = null; + if ((block !== nil)) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy new without a block") + }; + self.enumerator = object; + return Opal.find_super_dispatcher(self, 'initialize', TMP_9, (TMP_10 = function(yielder, each_args){var self = TMP_10.$$s || this, $a, $b, TMP_11; +if (yielder == null) yielder = nil;each_args = $slice.call(arguments, 1); + try { + return ($a = ($b = object).$each, $a.$$p = (TMP_11 = function(args){var self = TMP_11.$$s || this; +args = $slice.call(arguments, 0); + + args.unshift(yielder); - args = $slice.call(arguments, 0); - TMP_3.$$p = null; - return self.literal = ($a = ($b = $scope.get('Array')).$new, $a.$$p = block.$to_proc(), $a).apply($b, [].concat(args)); - }; + if (Opal.yieldX(block, args) === $breaker) { + return $breaker; + } + ;}, TMP_11.$$s = self, TMP_11), $a).apply($b, Opal.to_a(each_args)) + } catch ($err) {if (Opal.rescue($err, [$scope.get('Exception')])) { + try { + return nil + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }}, TMP_10.$$s = self, TMP_10)).apply(self, [size]); + }); - def.$method_missing = TMP_4 = function(args) { - var $a, $b, self = this, $iter = TMP_4.$$p, block = $iter || nil, result = nil; + Opal.alias(self, 'force', 'to_a'); - args = $slice.call(arguments, 0); - TMP_4.$$p = null; - result = ($a = ($b = self.literal).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, [].concat(args)); - if ((($a = result === self.literal) !== nil && (!$a.$$is_boolean || $a == true))) { - return self - } else { - return result - }; - }; + Opal.defn(self, '$lazy', function() { + var self = this; - def.$initialize_copy = function(other) { - var self = this; + return self; + }); - return self.literal = (other.literal).$clone(); - }; + Opal.defn(self, '$collect', TMP_12 = function() { + var $a, $b, TMP_13, self = this, $iter = TMP_12.$$p, block = $iter || nil; - def['$respond_to?'] = TMP_5 = function(name) {var $zuper = $slice.call(arguments, 0); - var $a, self = this, $iter = TMP_5.$$p, $yield = $iter || nil; + TMP_12.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block") + }; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_13 = function(enum$, args){var self = TMP_13.$$s || this; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var value = Opal.yieldX(block, args); - TMP_5.$$p = null; - return ((($a = Opal.find_super_dispatcher(self, 'respond_to?', TMP_5, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name)); - }; + if (value === $breaker) { + return $breaker; + } - def['$=='] = function(other) { - var self = this; + enum$.$yield(value); + }, TMP_13.$$s = self, TMP_13), $a).call($b, self, self.$enumerator_size()); + }); - return self.literal['$=='](other); - }; + Opal.defn(self, '$collect_concat', TMP_14 = function() { + var $a, $b, TMP_15, self = this, $iter = TMP_14.$$p, block = $iter || nil; - def['$eql?'] = function(other) { - var self = this; + TMP_14.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block") + }; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_15 = function(enum$, args){var self = TMP_15.$$s || this, $a, $b, TMP_16, $c, TMP_17; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var value = Opal.yieldX(block, args); - return self.literal['$eql?'](other); - }; + if (value === $breaker) { + return $breaker; + } - def.$to_a = function() { - var self = this; + if ((value)['$respond_to?']("force") && (value)['$respond_to?']("each")) { + ($a = ($b = (value)).$each, $a.$$p = (TMP_16 = function(v){var self = TMP_16.$$s || this; +if (v == null) v = nil; + return enum$.$yield(v)}, TMP_16.$$s = self, TMP_16), $a).call($b) + } + else { + var array = $scope.get('Opal').$try_convert(value, $scope.get('Array'), "to_ary"); - return self.literal; - }; + if (array === nil) { + enum$.$yield(value); + } + else { + ($a = ($c = (value)).$each, $a.$$p = (TMP_17 = function(v){var self = TMP_17.$$s || this; +if (v == null) v = nil; + return enum$.$yield(v)}, TMP_17.$$s = self, TMP_17), $a).call($c); + } + } + ;}, TMP_15.$$s = self, TMP_15), $a).call($b, self, nil); + }); - def.$to_ary = function() { - var self = this; + Opal.defn(self, '$drop', function(n) { + var $a, $b, TMP_18, self = this, current_size = nil, set_size = nil, dropped = nil; - return self; - }; + n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); + if ((($a = $rb_lt(n, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "attempt to drop negative size")}; + current_size = self.$enumerator_size(); + set_size = (function() {if ((($a = $scope.get('Integer')['$==='](current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $rb_lt(n, current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { + return n + } else { + return current_size + } + } else { + return current_size + }; return nil; })(); + dropped = 0; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_18 = function(enum$, args){var self = TMP_18.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + if ((($a = $rb_lt(dropped, n)) !== nil && (!$a.$$is_boolean || $a == true))) { + return dropped = $rb_plus(dropped, 1) + } else { + return ($a = enum$).$yield.apply($a, Opal.to_a(args)) + }}, TMP_18.$$s = self, TMP_18), $a).call($b, self, set_size); + }); - def.$inspect = function() { - var self = this; + Opal.defn(self, '$drop_while', TMP_19 = function() { + var $a, $b, TMP_20, self = this, $iter = TMP_19.$$p, block = $iter || nil, succeeding = nil; - return self.literal.$inspect(); - }; + TMP_19.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy drop_while without a block") + }; + succeeding = true; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_20 = function(enum$, args){var self = TMP_20.$$s || this, $a, $b; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + if (succeeding !== false && succeeding !== nil) { + + var value = Opal.yieldX(block, args); - def.$hash = function() { - var self = this; + if (value === $breaker) { + return $breaker; + } - return self.literal.$hash(); - }; + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + succeeding = false; - def['$*'] = function(other) { - var self = this; + ($a = enum$).$yield.apply($a, Opal.to_a(args)); + } + + } else { + return ($b = enum$).$yield.apply($b, Opal.to_a(args)) + }}, TMP_20.$$s = self, TMP_20), $a).call($b, self, nil); + }); - - var result = $rb_times(self.literal, other); + Opal.defn(self, '$enum_for', TMP_21 = function(method) { + var $a, $b, self = this, $iter = TMP_21.$$p, block = $iter || nil, $splat_index = nil; - if (result.$$is_array) { - return self.$class().$allocate(result) - } - else { - return result; - } - ; - }; + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + if (method == null) { + method = "each" + } + TMP_21.$$p = null; + return ($a = ($b = self.$class()).$for, $a.$$p = block.$to_proc(), $a).apply($b, [self, method].concat(Opal.to_a(args))); + }); - def['$[]'] = function(index, length) { - var self = this; + Opal.defn(self, '$find_all', TMP_22 = function() { + var $a, $b, TMP_23, self = this, $iter = TMP_22.$$p, block = $iter || nil; - - var result = self.literal.$slice(index, length); + TMP_22.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy select without a block") + }; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_23 = function(enum$, args){var self = TMP_23.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var value = Opal.yieldX(block, args); - if (result.$$is_array && (index.$$is_range || length !== undefined)) { - return self.$class().$allocate(result) - } - else { - return result; - } - ; - }; + if (value === $breaker) { + return $breaker; + } - Opal.defn(self, '$slice', def['$[]']); + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + ($a = enum$).$yield.apply($a, Opal.to_a(args)); + } + ;}, TMP_23.$$s = self, TMP_23), $a).call($b, self, nil); + }); - def.$uniq = function() { - var self = this; + Opal.alias(self, 'flat_map', 'collect_concat'); - return self.$class().$allocate(self.literal.$uniq()); - }; + Opal.defn(self, '$grep', TMP_24 = function(pattern) { + var $a, $b, TMP_25, $c, TMP_26, self = this, $iter = TMP_24.$$p, block = $iter || nil; - def.$flatten = function(level) { - var self = this; + TMP_24.$$p = null; + if (block !== false && block !== nil) { + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_25 = function(enum$, args){var self = TMP_25.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var param = $scope.get('Opal').$destructure(args), + value = pattern['$==='](param); - return self.$class().$allocate(self.literal.$flatten(level)); - }; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + value = Opal.yield1(block, param); - def['$-'] = function(other) { - var self = this; + if (value === $breaker) { + return $breaker; + } - return $rb_minus(self.literal, other); - }; + enum$.$yield(Opal.yield1(block, param)); + } + ;}, TMP_25.$$s = self, TMP_25), $a).call($b, self, nil) + } else { + return ($a = ($c = $scope.get('Lazy')).$new, $a.$$p = (TMP_26 = function(enum$, args){var self = TMP_26.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var param = $scope.get('Opal').$destructure(args), + value = pattern['$==='](param); - return (def['$+'] = function(other) { - var self = this; + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + enum$.$yield(param); + } + ;}, TMP_26.$$s = self, TMP_26), $a).call($c, self, nil) + }; + }); - return $rb_plus(self.literal, other); - }, nil) && '+'; - })($scope.get('Array'), null); -}; + Opal.alias(self, 'map', 'collect'); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/hash"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.alias(self, 'select', 'find_all'); - Opal.add_stubs(['$require', '$include', '$coerce_to?', '$[]', '$merge!', '$allocate', '$raise', '$!', '$==', '$call', '$coerce_to!', '$lambda?', '$abs', '$arity', '$enum_for', '$inspect', '$flatten', '$eql?', '$===', '$clone', '$to_proc', '$alias_method']); - self.$require("corelib/enumerable"); - return (function($base, $super) { - function $Hash(){}; - var self = $Hash = $klass($base, $super, 'Hash', $Hash); + Opal.defn(self, '$reject', TMP_27 = function() { + var $a, $b, TMP_28, self = this, $iter = TMP_27.$$p, block = $iter || nil; - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13; + TMP_27.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy reject without a block") + }; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_28 = function(enum$, args){var self = TMP_28.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var value = Opal.yieldX(block, args); - def.proc = def.none = nil; - self.$include($scope.get('Enumerable')); + if (value === $breaker) { + return $breaker; + } - def.$$is_hash = true; + if ((($a = value) === nil || ($a.$$is_boolean && $a == false))) { + ($a = enum$).$yield.apply($a, Opal.to_a(args)); + } + ;}, TMP_28.$$s = self, TMP_28), $a).call($b, self, nil); + }); - Opal.defs(self, '$[]', function(argv) { - var self = this; + Opal.defn(self, '$take', function(n) { + var $a, $b, TMP_29, self = this, current_size = nil, set_size = nil, taken = nil; - argv = $slice.call(arguments, 0); - - var hash, i, argc = argv.length; + n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); + if ((($a = $rb_lt(n, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "attempt to take negative size")}; + current_size = self.$enumerator_size(); + set_size = (function() {if ((($a = $scope.get('Integer')['$==='](current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $rb_lt(n, current_size)) !== nil && (!$a.$$is_boolean || $a == true))) { + return n + } else { + return current_size + } + } else { + return current_size + }; return nil; })(); + taken = 0; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_29 = function(enum$, args){var self = TMP_29.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + if ((($a = $rb_lt(taken, n)) !== nil && (!$a.$$is_boolean || $a == true))) { + ($a = enum$).$yield.apply($a, Opal.to_a(args)); + return taken = $rb_plus(taken, 1); + } else { + return self.$raise($scope.get('StopLazyError')) + }}, TMP_29.$$s = self, TMP_29), $a).call($b, self, set_size); + }); - if (argc === 1) { - hash = $scope.get('Opal')['$coerce_to?'](argv['$[]'](0), $scope.get('Hash'), "to_hash"); - if (hash !== nil) { - return self.$allocate()['$merge!'](hash); - } + Opal.defn(self, '$take_while', TMP_30 = function() { + var $a, $b, TMP_31, self = this, $iter = TMP_30.$$p, block = $iter || nil; - argv = $scope.get('Opal')['$coerce_to?'](argv['$[]'](0), $scope.get('Array'), "to_ary"); - if (argv === nil) { - self.$raise($scope.get('ArgumentError'), "odd number of arguments for Hash") - } + TMP_30.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to call lazy take_while without a block") + }; + return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_31 = function(enum$, args){var self = TMP_31.$$s || this, $a; +if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1); + + var value = Opal.yieldX(block, args); - argc = argv.length; - hash = self.$allocate(); + if (value === $breaker) { + return $breaker; + } - for (i = 0; i < argc; i++) { - if (!argv[i].$$is_array) continue; - switch(argv[i].length) { - case 1: - hash.$store(argv[i][0], nil); - break; - case 2: - hash.$store(argv[i][0], argv[i][1]); - break; - default: - self.$raise($scope.get('ArgumentError'), "invalid number of elements (" + (argv[i].length) + " for 1..2)") + if ((($a = value) !== nil && (!$a.$$is_boolean || $a == true))) { + ($a = enum$).$yield.apply($a, Opal.to_a(args)); } - } + else { + self.$raise($scope.get('StopLazyError')); + } + ;}, TMP_31.$$s = self, TMP_31), $a).call($b, self, nil); + }); - return hash; - } + Opal.alias(self, 'to_enum', 'enum_for'); - if (argc % 2 !== 0) { - self.$raise($scope.get('ArgumentError'), "odd number of arguments for Hash") - } + return (Opal.defn(self, '$inspect', function() { + var self = this; - hash = self.$allocate(); + return "#<" + (self.$class()) + ": " + (self.enumerator.$inspect()) + ">"; + }), nil) && 'inspect'; + })($scope.base, self); + })($scope.base, null); +}; - for (i = 0; i < argc; i += 2) { - hash.$store(argv[i], argv[i + 1]); - } +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/numeric"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - return hash; - ; - }); + Opal.add_stubs(['$require', '$include', '$instance_of?', '$class', '$Float', '$coerce', '$===', '$raise', '$__send__', '$equal?', '$coerce_to!', '$-@', '$**', '$-', '$*', '$div', '$<', '$ceil', '$to_f', '$denominator', '$to_r', '$==', '$floor', '$/', '$%', '$Complex', '$zero?', '$numerator', '$abs', '$arg', '$round', '$to_i', '$truncate', '$>']); + self.$require("corelib/comparable"); + return (function($base, $super) { + function $Numeric(){}; + var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); - Opal.defs(self, '$allocate', function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - - var hash = new self.$$alloc; + self.$include($scope.get('Comparable')); - hash.map = {}; - hash.smap = {}; - hash.keys = []; - hash.none = nil; - hash.proc = nil; + Opal.defn(self, '$coerce', function(other) { + var $a, self = this; - return hash; - + if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a.$$is_boolean || $a == true))) { + return [other, self]}; + return [self.$Float(other), self.$Float(self)]; }); - def.$initialize = TMP_1 = function(defaults) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$__coerced__', function(method, other) { + var $a, $b, self = this, a = nil, b = nil, $case = nil; - TMP_1.$$p = null; - - self.none = (defaults === undefined ? nil : defaults); - self.proc = block; - - return self; - }; + try { + $b = other.$coerce(self), $a = Opal.to_ary($b), a = ($a[0] == null ? nil : $a[0]), b = ($a[1] == null ? nil : $a[1]), $b + } catch ($err) {if (true) { + try { + $case = method;if ("+"['$===']($case) || "-"['$===']($case) || "*"['$===']($case) || "/"['$===']($case) || "%"['$===']($case) || "&"['$===']($case) || "|"['$===']($case) || "^"['$===']($case) || "**"['$===']($case)) {self.$raise($scope.get('TypeError'), "" + (other.$class()) + " can't be coerce into Numeric")}else if (">"['$===']($case) || ">="['$===']($case) || "<"['$===']($case) || "<="['$===']($case) || "<=>"['$===']($case)) {self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")} + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + return a.$__send__(method, b); + }); - def['$=='] = function(other) { - var self = this; + Opal.defn(self, '$<=>', function(other) { + var $a, self = this; - - if (self === other) { - return true; - } + if ((($a = self['$equal?'](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0}; + return nil; + }); - if (!other.keys || !other.smap || !other.map) { - return false; - } + Opal.defn(self, '$[]', function(bit) { + var self = this, min = nil, max = nil; - if (self.keys.length !== other.keys.length) { - return false; - } + bit = $scope.get('Opal')['$coerce_to!'](bit, $scope.get('Integer'), "to_int"); + min = ((2)['$**'](30))['$-@'](); + max = $rb_minus(((2)['$**'](30)), 1); + return (bit < min || bit > max) ? 0 : (self >> bit) % 2; + }); - var _map = self.map, - smap = self.smap, - _map2 = other.map, - smap2 = other.smap, - map, map2, key, khash, value, value2; + Opal.defn(self, '$+@', function() { + var self = this; - for (var i = 0, length = self.keys.length; i < length; i++) { - key = self.keys[i]; + return self; + }); - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; - } + Opal.defn(self, '$-@', function() { + var self = this; - value = map[khash]; - if (value === undefined) console.log('==', key, self); - value2 = map2[khash]; + return $rb_minus(0, self); + }); - if (value2 === undefined || ((value)['$=='](value2))['$!']()) { - return false; - } - } + Opal.defn(self, '$%', function(other) { + var self = this; - return true; - - }; + return $rb_minus(self, $rb_times(other, self.$div(other))); + }); - def['$[]'] = function(key) { + Opal.defn(self, '$abs', function() { var self = this; - - var map, khash; + if ($rb_lt(self, 0)) { + return self['$-@']() + } else { + return self + }; + }); - if (key.$$is_string) { - map = self.smap; - khash = key; - } else { - map = self.map; - khash = key.$hash(); - } + Opal.defn(self, '$abs2', function() { + var self = this; - if (map === undefined) { console.log(self, '[] --> key:', key, khash, map) } + return $rb_times(self, self); + }); + Opal.defn(self, '$angle', function() { + var self = this; - if (Opal.hasOwnProperty.call(map, khash)) { - return map[khash]; - } + if ($rb_lt(self, 0)) { + return (($scope.get('Math')).$$scope.get('PI')) + } else { + return 0 + }; + }); - var proc = self.proc; + Opal.alias(self, 'arg', 'angle'); - if (proc !== nil) { - return (proc).$call(self, key); - } + Opal.defn(self, '$ceil', function() { + var self = this; - return self.none; - - }; + return self.$to_f().$ceil(); + }); - def['$[]='] = function(key, value) { + Opal.defn(self, '$conj', function() { var self = this; - - var map, khash, value; + return self; + }); - if (key.$$is_string) { - map = self.smap; - khash = key; - } else { - map = self.map; - khash = key.$hash(); - } + Opal.alias(self, 'conjugate', 'conj'); - if (!Opal.hasOwnProperty.call(map, khash)) { - self.keys.push(key); - } + Opal.defn(self, '$denominator', function() { + var self = this; - map[khash] = value; + return self.$to_r().$denominator(); + }); - return value; - - }; + Opal.defn(self, '$div', function(other) { + var self = this; + + if (other['$=='](0)) { + self.$raise($scope.get('ZeroDivisionError'), "divided by o")}; + return ($rb_divide(self, other)).$floor(); + }); - def.$assoc = function(object) { + Opal.defn(self, '$divmod', function(other) { var self = this; - - var keys = self.keys, - map, key, khash; + return [self.$div(other), self['$%'](other)]; + }); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + Opal.defn(self, '$fdiv', function(other) { + var self = this; - if ((key)['$=='](object)) { - if (key.$$is_string) { - map = self.smap; - khash = key; - } else { - map = self.map; - khash = key.$hash(); - } + return $rb_divide(self.$to_f(), other); + }); - return [key, map[khash]]; - } - } + Opal.defn(self, '$floor', function() { + var self = this; - return nil; - - }; + return self.$to_f().$floor(); + }); - def.$clear = function() { + Opal.defn(self, '$i', function() { var self = this; - - self.map = {}; - self.smap = {}; - self.keys = []; - return self; - - }; + return self.$Complex(0, self); + }); - def.$clone = function() { + Opal.defn(self, '$imag', function() { var self = this; - - var _map = {}, - smap = {}, - _map2 = self.map, - smap2 = self.smap, - keys = [], - map, map2, key, khash, value; + return 0; + }); - for (var i = 0, length = self.keys.length; i < length; i++) { - key = self.keys[i]; + Opal.alias(self, 'imaginary', 'imag'); - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; - } + Opal.defn(self, '$integer?', function() { + var self = this; - value = map2[khash]; + return false; + }); - keys.push(key); - map[khash] = value; - } + Opal.alias(self, 'magnitude', 'abs'); - var clone = new self.$$class.$$alloc(); + Opal.alias(self, 'modulo', '%'); - clone.map = _map; - clone.smap = smap; - clone.keys = keys; - clone.none = self.none; - clone.proc = self.proc; + Opal.defn(self, '$nonzero?', function() { + var $a, self = this; - return clone; - - }; + if ((($a = self['$zero?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self + }; + }); - def.$default = function(val) { + Opal.defn(self, '$numerator', function() { var self = this; - - if (val !== undefined && self.proc !== nil) { - return self.proc.$call(self, val); - } - return self.none; - ; - }; + return self.$to_r().$numerator(); + }); - def['$default='] = function(object) { + Opal.alias(self, 'phase', 'arg'); + + Opal.defn(self, '$polar', function() { var self = this; - - self.proc = nil; - return (self.none = object); - - }; + return [self.$abs(), self.$arg()]; + }); - def.$default_proc = function() { + Opal.defn(self, '$quo', function(other) { var self = this; - return self.proc; - }; + return $rb_divide($scope.get('Opal')['$coerce_to!'](self, $scope.get('Rational'), "to_r"), other); + }); - def['$default_proc='] = function(proc) { + Opal.defn(self, '$real', function() { var self = this; - - if (proc !== nil) { - proc = $scope.get('Opal')['$coerce_to!'](proc, $scope.get('Proc'), "to_proc"); + return self; + }); - if (proc['$lambda?']() && proc.$arity().$abs() != 2) { - self.$raise($scope.get('TypeError'), "default_proc takes two arguments"); - } - } - self.none = nil; - return (self.proc = proc); - ; - }; + Opal.defn(self, '$real?', function() { + var self = this; - def.$delete = TMP_2 = function(key) { - var self = this, $iter = TMP_2.$$p, block = $iter || nil; + return true; + }); - TMP_2.$$p = null; - - var result, map, khash; + Opal.defn(self, '$rect', function() { + var self = this; - if (key.$$is_string) { - map = self.smap; - khash = key; - } else { - map = self.map; - khash = key.$hash(); - } + return [self, 0]; + }); - result = map[khash]; + Opal.alias(self, 'rectangular', 'rect'); - if (result != null) { - delete map[khash]; - self.keys.$delete(key); + Opal.defn(self, '$round', function(digits) { + var self = this; - return result; - } + return self.$to_f().$round(digits); + }); - if (block !== nil) { - return block.$call(key); - } - return nil; - - }; + Opal.defn(self, '$to_c', function() { + var self = this; - def.$delete_if = TMP_3 = function() { - var self = this, $iter = TMP_3.$$p, block = $iter || nil; + return self.$Complex(self, 0); + }); - TMP_3.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("delete_if") - }; - - var _map = self.map, - smap = self.smap, - keys = self.keys, - map, key, value, obj, khash; + Opal.defn(self, '$to_int', function() { + var self = this; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + return self.$to_i(); + }); - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); - } - obj = map[khash]; - value = block(key, obj); + Opal.defn(self, '$truncate', function() { + var self = this; - if (value === $breaker) { - return $breaker.$v; - } + return self.$to_f().$truncate(); + }); - if (value !== false && value !== nil) { - keys.splice(i, 1); - delete map[khash]; + Opal.defn(self, '$zero?', function() { + var self = this; - length--; - i--; - } - } + return self['$=='](0); + }); - return self; - - }; + Opal.defn(self, '$positive?', function() { + var self = this; - Opal.defn(self, '$dup', def.$clone); + return $rb_gt(self, 0); + }); - def.$each = TMP_4 = function() { - var self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$negative?', function() { + var self = this; - TMP_4.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("each") - }; - - var _map = self.map, - smap = self.smap, - keys = self.keys, - map, key, khash, value; + return $rb_lt(self, 0); + }); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + Opal.defn(self, '$dup', function() { + var self = this; - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); - } + return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class())); + }); - value = Opal.yield1(block, [key, map[khash]]); + return (Opal.defn(self, '$clone', function() { + var self = this; - if (value === $breaker) { - return $breaker.$v; - } - } + return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class())); + }), nil) && 'clone'; + })($scope.base, null); +}; - return self; - - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/array"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $hash2 = Opal.hash2, $gvars = Opal.gvars; - def.$each_key = TMP_5 = function() { - var self = this, $iter = TMP_5.$$p, block = $iter || nil; + Opal.add_stubs(['$require', '$include', '$raise', '$===', '$to_a', '$respond_to?', '$to_ary', '$coerce_to', '$initialize', '$to_proc', '$coerce_to?', '$join', '$to_str', '$class', '$clone', '$hash', '$<=>', '$==', '$object_id', '$inspect', '$enum_for', '$coerce_to!', '$>', '$*', '$enumerator_size', '$empty?', '$copy_singleton_methods', '$initialize_clone', '$initialize_dup', '$replace', '$size', '$eql?', '$length', '$begin', '$end', '$exclude_end?', '$flatten', '$__id__', '$[]', '$to_s', '$new', '$!', '$delete_if', '$each', '$reverse', '$rotate', '$rand', '$at', '$keep_if', '$shuffle!', '$dup', '$<', '$sort', '$!=', '$times', '$[]=', '$<<', '$kind_of?', '$last', '$first', '$upto']); + self.$require("corelib/enumerable"); + self.$require("corelib/numeric"); + return (function($base, $super) { + function $Array(){}; + var self = $Array = $klass($base, $super, 'Array', $Array); - TMP_5.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("each_key") - }; - - var keys = self.keys, key; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_6, TMP_8, TMP_10, TMP_12, TMP_13, TMP_15, TMP_17, TMP_19, TMP_20, TMP_21, TMP_22, TMP_24, TMP_26, TMP_27, TMP_29, TMP_31, TMP_33, TMP_34, TMP_36, TMP_38, TMP_39, TMP_40, TMP_43, TMP_44, TMP_47; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + def.length = nil; + self.$include($scope.get('Enumerable')); - if (block(key) === $breaker) { - return $breaker.$v; - } - } + def.$$is_array = true; - return self; - - }; + Opal.defs(self, '$[]', function() { + var self = this, $splat_index = nil; - Opal.defn(self, '$each_pair', def.$each); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 0]; + } + return objects; + }); - def.$each_value = TMP_6 = function() { - var self = this, $iter = TMP_6.$$p, block = $iter || nil; + Opal.defn(self, '$initialize', TMP_1 = function(size, obj) { + var $a, self = this, $iter = TMP_1.$$p, block = $iter || nil; - TMP_6.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("each_value") - }; + if (size == null) { + size = nil + } + if (obj == null) { + obj = nil + } + TMP_1.$$p = null; + if ((($a = arguments.length > 2) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..2)")}; - var _map = self.map, - smap = self.smap, - keys = self.keys, key, map, khash; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + if (arguments.length === 0) { + self.splice(0, self.length); + return self; + } + + if ((($a = arguments.length === 1) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $scope.get('Array')['$==='](size)) !== nil && (!$a.$$is_boolean || $a == true))) { + return size.$to_a() + } else if ((($a = size['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { + return size.$to_ary()}}; + size = $scope.get('Opal').$coerce_to(size, $scope.get('Integer'), "to_int"); + if ((($a = size < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "negative array size")}; + + self.splice(0, self.length); + var i, value; - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); + if (block === nil) { + for (i = 0; i < size; i++) { + self.push(obj); } + } + else { + for (i = 0, value; i < size; i++) { + value = block(i); - if (block(map[khash]) === $breaker) { - return $breaker.$v; + if (value === $breaker) { + return $breaker.$v; + } + + self[i] = value; } } return self; - }; + }); - def['$empty?'] = function() { - var self = this; + Opal.defs(self, '$new', TMP_2 = function() { + var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil, $splat_index = nil; - return self.keys.length === 0; - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_2.$$p = null; + return ($a = ($b = []).$initialize, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + }); + + Opal.defs(self, '$try_convert', function(obj) { + var self = this; - Opal.defn(self, '$eql?', def['$==']); + return $scope.get('Opal')['$coerce_to?'](obj, $scope.get('Array'), "to_ary"); + }); - def.$fetch = TMP_7 = function(key, defaults) { - var self = this, $iter = TMP_7.$$p, block = $iter || nil; + Opal.defn(self, '$&', function(other) { + var $a, self = this; - TMP_7.$$p = null; + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; - var map, khash, value; + var result = [], hash = $hash2([], {}), i, length, item; - if (key.$$is_string) { - khash = key; - map = self.smap; - } else { - khash = key.$hash(); - map = self.map; + for (i = 0, length = other.length; i < length; i++) { + Opal.hash_put(hash, other[i], true); } - value = map[khash]; - - if (value != null) { - return value; + for (i = 0, length = self.length; i < length; i++) { + item = self[i]; + if (Opal.hash_delete(hash, item) !== undefined) { + result.push(item); + } } - if (block !== nil) { - var value; + return result; + ; + }); - if ((value = block(key)) === $breaker) { - return $breaker.$v; - } + Opal.defn(self, '$|', function(other) { + var $a, self = this; - return value; - } + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; + + var hash = $hash2([], {}), i, length, item; - if (defaults != null) { - return defaults; + for (i = 0, length = self.length; i < length; i++) { + Opal.hash_put(hash, self[i], true); } - self.$raise($scope.get('KeyError'), "key not found: " + (key.$inspect())); - - }; - - def.$flatten = function(level) { - var self = this; + for (i = 0, length = other.length; i < length; i++) { + Opal.hash_put(hash, other[i], true); + } - - var _map = self.map, - smap = self.smap, - keys = self.keys, - result = [], - map, key, khash, value; + return hash.$keys(); + ; + }); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + Opal.defn(self, '$*', function(other) { + var $a, self = this; - if (key.$$is_string) { - khash = key; - map = smap; + if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$join(other.$to_str())}; + if ((($a = other['$respond_to?']("to_int")) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - khash = key.$hash(); - map = _map; - } - - value = map[khash]; - - result.push(key); + self.$raise($scope.get('TypeError'), "no implicit conversion of " + (other.$class()) + " into Integer") + }; + other = $scope.get('Opal').$coerce_to(other, $scope.get('Integer'), "to_int"); + if ((($a = other < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "negative argument")}; + + var result = []; - if (value.$$is_array) { - if (level == null || level === 1) { - result.push(value); - } - else { - result = result.concat((value).$flatten(level - 1)); - } - } - else { - result.push(value); - } + for (var i = 0; i < other; i++) { + result = result.concat(self); } return result; - }; + }); - def['$has_key?'] = function(key) { - var self = this; + Opal.defn(self, '$+', function(other) { + var $a, self = this; + + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; + return self.concat(other); + }); + + Opal.defn(self, '$-', function(other) { + var $a, self = this; + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return []}; + if ((($a = other.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$clone()}; - var keys = self.keys, - map, khash; + var result = [], hash = $hash2([], {}), i, length, item; - if (key.$$is_string) { - khash = key; - map = self.smap; - } else { - khash = key.$hash(); - map = self.map; + for (i = 0, length = other.length; i < length; i++) { + Opal.hash_put(hash, other[i], true); } - if (Opal.hasOwnProperty.call(map, khash)) { - for (var i = 0, length = keys.length; i < length; i++) { - if (!(key['$eql?'](keys[i]))['$!']()) { - return true; - } + for (i = 0, length = self.length; i < length; i++) { + item = self[i]; + if (Opal.hash_get(hash, item) === undefined) { + result.push(item); } } - return false; - - }; + return result; + ; + }); - def['$has_value?'] = function(value) { + Opal.defn(self, '$<<', function(object) { var self = this; - - var _map = self.map, - smap = self.smap, - keys = self.keys, key, map, khash; + self.push(object); + return self; + }); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + Opal.defn(self, '$<=>', function(other) { + var $a, self = this; - if (key.$$is_string) { - map = smap; - khash = key; + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else if ((($a = other['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_ary().$to_a() } else { - map = _map; - khash = key.$hash(); - } + return nil + }; + + if (self.$hash() === other.$hash()) { + return 0; + } - if ((map[khash])['$=='](value)) { - return true; + var count = Math.min(self.length, other.length); + + for (var i = 0; i < count; i++) { + var tmp = (self[i])['$<=>'](other[i]); + + if (tmp !== 0) { + return tmp; } } - return false; - - }; - - var hash_ids = null; + return (self.length)['$<=>'](other.length); + ; + }); - def.$hash = function() { + Opal.defn(self, '$==', function(other) { var self = this; - var top = (hash_ids === null); - try { - var key, value, - hash = ['Hash'], - keys = self.keys, - id = self.$object_id(), - counter = 0; + var recursed = {}; - if (top) { - hash_ids = {} - } + function _eqeq(array, other) { + var i, length, a, b; - if (hash_ids.hasOwnProperty(id)) { - return 'self'; + if (array === other) + return true; + + if (!other.$$is_array) { + if ($scope.get('Opal')['$respond_to?'](other, "to_ary")) { + return (other)['$=='](array); + } else { + return false; + } } - hash_ids[id] = true; + if (array.constructor !== Array) + array = array.literal; + if (other.constructor !== Array) + other = other.literal; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - value = key.$$is_string ? self.smap[key] : self.map[key.$hash()]; - key = key.$hash(); - value = (typeof(value) === 'undefined') ? '' : value.$hash(); - hash.push([key,value]); + if (array.length !== other.length) { + return false; } - return hash.sort().join(); - } finally { - if (top) { - hash_ids = null; + recursed[(array).$object_id()] = true; + + for (i = 0, length = array.length; i < length; i++) { + a = array[i]; + b = other[i]; + if (a.$$is_array) { + if (b.$$is_array && b.length !== a.length) { + return false; + } + if (!recursed.hasOwnProperty((a).$object_id())) { + if (!_eqeq(a, b)) { + return false; + } + } + } else { + if (!(a)['$=='](b)) { + return false; + } + } } + + return true; } - - }; - Opal.defn(self, '$include?', def['$has_key?']); + return _eqeq(self, other); + ; + }); - def.$index = function(object) { + Opal.defn(self, '$[]', function(index, length) { var self = this; - var _map = self.map, - smap = self.smap, - keys = self.keys, - map, khash, key; + var size = self.length, + exclude, from, to; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + if (index.$$is_range) { + exclude = index.exclude; + from = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"); + to = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"); - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); - } + if (from < 0) { + from += size; - if ((map[khash])['$=='](object)) { - return key; + if (from < 0) { + return nil; + } } - } - - return nil; - - }; - - def.$indexes = function(keys) { - var self = this; - - keys = $slice.call(arguments, 0); - - var result = [], - _map = self.map, - smap = self.smap, - map, key, khash, value; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; + if (from > size) { + return nil; } - value = map[khash]; + if (to < 0) { + to += size; - if (value != null) { - result.push(value); - } - else { - result.push(self.none); + if (to < 0) { + return []; + } } - } - - return result; - - }; - - Opal.defn(self, '$indices', def.$indexes); - - var inspect_ids = null; - - def.$inspect = function() { - var self = this; - - var top = (inspect_ids === null); - try { + if (!exclude) { + to += 1; + } - var key, value, - inspect = [], - keys = self.keys, - id = self.$object_id(), - counter = 0; + return self.slice(from, to); + } + else { + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - if (top) { - inspect_ids = {} - } + if (index < 0) { + index += size; - if (inspect_ids.hasOwnProperty(id)) { - return '{...}'; + if (index < 0) { + return nil; + } } - inspect_ids[id] = true; + if (length === undefined) { + if (index >= size || index < 0) { + return nil; + } - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - value = key.$$is_string ? self.smap[key] : self.map[key.$hash()]; - key = key.$inspect(); - value = value.$inspect(); - inspect.push(key + '=>' + value); + return self[index]; } + else { + length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - return '{' + inspect.join(', ') + '}'; - } finally { + if (length < 0 || index > size || index < 0) { + return nil; + } - if (top) { - inspect_ids = null; + return self.slice(index, index + length); } } - }; + }); - def.$invert = function() { - var self = this; + Opal.defn(self, '$[]=', function(index, value, extra) { + var $a, self = this, data = nil, length = nil; - var result = Opal.hash(), - keys = self.keys, - _map = self.map, - smap = self.smap, - keys2 = result.keys, - _map2 = result.map, - smap2 = result.smap, - map, map2, key, khash, value; + var i, size = self.length; + + if ((($a = $scope.get('Range')['$==='](index)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $scope.get('Array')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { + data = value.$to_a() + } else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { + data = value.$to_ary().$to_a() + } else { + data = [value] + }; + + var exclude = index.exclude, + from = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"), + to = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + if (from < 0) { + from += size; - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); + if (from < 0) { + self.$raise($scope.get('RangeError'), "" + (index.$inspect()) + " out of range"); + } } - value = map[khash]; - keys2.push(value); - - if (value.$$is_string) { - map2 = smap2; - khash = value; - } else { - map2 = _map2; - khash = value.$hash(); + if (to < 0) { + to += size; } - map2[khash] = key; - } - - return result; - - }; - - def.$keep_if = TMP_8 = function() { - var self = this, $iter = TMP_8.$$p, block = $iter || nil; - - TMP_8.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("keep_if") - }; - - var _map = self.map, - smap = self.smap, - keys = self.keys, - map, key, khash, value, keep; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; + if (!exclude) { + to += 1; } - value = map[khash]; - keep = block(key, value); - - if (keep === $breaker) { - return $breaker.$v; + if (from > size) { + for (i = size; i < from; i++) { + self[i] = nil; + } } - if (keep === false || keep === nil) { - keys.splice(i, 1); - delete map[khash]; - - length--; - i--; + if (to < 0) { + self.splice.apply(self, [from, 0].concat(data)); + } + else { + self.splice.apply(self, [from, to - from].concat(data)); } - } - - return self; - - }; - - Opal.defn(self, '$key', def.$index); - - Opal.defn(self, '$key?', def['$has_key?']); - - def.$keys = function() { - var self = this; - - return self.keys.slice(0); - }; - - def.$length = function() { - var self = this; - - return self.keys.length; - }; - - Opal.defn(self, '$member?', def['$has_key?']); - - def.$merge = TMP_9 = function(other) { - var $a, $b, self = this, $iter = TMP_9.$$p, block = $iter || nil, cloned = nil; - TMP_9.$$p = null; - if ((($a = $scope.get('Hash')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return value; + ; } else { - other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash") - }; - cloned = self.$clone(); - ($a = ($b = cloned)['$merge!'], $a.$$p = block.$to_proc(), $a).call($b, other); - return cloned; - }; - - def['$merge!'] = TMP_10 = function(other) { - var self = this, $iter = TMP_10.$$p, block = $iter || nil; - - TMP_10.$$p = null; - - if (! $scope.get('Hash')['$==='](other)) { - other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash"); - } - - var keys = self.keys, - _map = self.map, - smap = self.smap, - keys2 = other.keys, - _map2 = other.map, - smap2 = other.smap, - map, map2, key, khash, value, value2; + if ((($a = extra === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + length = 1 + } else { + length = value; + value = extra; + if ((($a = $scope.get('Array')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { + data = value.$to_a() + } else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a.$$is_boolean || $a == true))) { + data = value.$to_ary().$to_a() + } else { + data = [value] + }; + }; + + var old; - if (block === nil) { - for (var i = 0, length = keys2.length; i < length; i++) { - key = keys2[i]; + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); + length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; - } + if (index < 0) { + old = index; + index += size; - if (map[khash] == null) { - keys.push(key); + if (index < 0) { + self.$raise($scope.get('IndexError'), "index " + (old) + " too small for array; minimum " + (-self.length)); } + } - map[khash] = map2[khash]; + if (length < 0) { + self.$raise($scope.get('IndexError'), "negative length (" + (length) + ")") } - } - else { - for (var i = 0, length = keys2.length; i < length; i++) { - key = keys2[i]; - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; + if (index > size) { + for (i = size; i < index; i++) { + self[i] = nil; } + } - value = map[khash]; - value2 = map2[khash]; - - if (value == null) { - keys.push(key); - map[khash] = value2; - } - else { - map[khash] = block(key, value, value2); - } + if (extra === undefined) { + self[index] = value; + } + else { + self.splice.apply(self, [index, length].concat(data)); } - } - return self; - ; - }; + return value; + + }; + }); - def.$rassoc = function(object) { + Opal.defn(self, '$assoc', function(object) { var self = this; - var keys = self.keys, - _map = self.map, - smap = self.smap, - key, khash, value, map; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i] - - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; - } - - value = map[khash]; - - if ((value)['$=='](object)) { - return [key, value]; + for (var i = 0, length = self.length, item; i < length; i++) { + if (item = self[i], item.length && (item[0])['$=='](object)) { + return item; } } return nil; - }; + }); - def.$reject = TMP_11 = function() { - var self = this, $iter = TMP_11.$$p, block = $iter || nil; + Opal.defn(self, '$at', function(index) { + var self = this; - TMP_11.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("reject") - }; + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - var keys = self.keys, - _map = self.map, - smap = self.smap, - result = Opal.hash(), - _map2 = result.map, - smap2 = result.smap, - keys2 = result.keys, - map, map2, key, khash, object, value; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; - } - - object = map[khash]; - - if ((value = block(key, object)) === $breaker) { - return $breaker.$v; - } + if (index < 0) { + index += self.length; + } - if (value === false || value === nil) { - keys2.push(key); - map2[khash] = object; - } + if (index < 0 || index >= self.length) { + return nil; } - return result; + return self[index]; - }; + }); - def.$replace = function(other) { - var self = this; + Opal.defn(self, '$bsearch', TMP_3 = function() { + var self = this, $iter = TMP_3.$$p, block = $iter || nil; + TMP_3.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("bsearch") + }; - var keys = self.keys = [], - _map = self.map = {}, - smap = self.smap = {}, - _map2 = other.map, - smap2 = other.smap, - key, khash, map, map2; + var min = 0, + max = self.length, + mid, + val, + ret, + smaller = false, + satisfied = nil; - for (var i = 0, length = other.keys.length; i < length; i++) { - key = other.keys[i]; + while (min < max) { + mid = min + Math.floor((max - min) / 2); + val = self[mid]; + ret = block(val); - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; + if (ret === $breaker) { + return $breaker.$v; + } + else if (ret === true) { + satisfied = val; + smaller = true; + } + else if (ret === false || ret === nil) { + smaller = false; + } + else if (ret.$$is_number) { + if (ret === 0) { return val; } + smaller = (ret < 0); + } + else { + self.$raise($scope.get('TypeError'), "wrong argument type " + ((ret).$class()) + " (must be numeric, true, false or nil)") } - keys.push(key); - map[khash] = map2[khash]; + if (smaller) { max = mid; } else { min = mid + 1; } } - return self; + return satisfied; - }; + }); - def.$select = TMP_12 = function() { - var self = this, $iter = TMP_12.$$p, block = $iter || nil; + Opal.defn(self, '$cycle', TMP_4 = function(n) { + var $a, $b, TMP_5, $c, self = this, $iter = TMP_4.$$p, block = $iter || nil; - TMP_12.$$p = null; - if (block !== false && block !== nil) { + if (n == null) { + n = nil + } + TMP_4.$$p = null; + if ((block !== nil)) { } else { - return self.$enum_for("select") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this, $a; + + if (n['$=='](nil)) { + return (($scope.get('Float')).$$scope.get('INFINITY')) + } else { + n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); + if ((($a = $rb_gt(n, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_times(self.$enumerator_size(), n) + } else { + return 0 + }; + }}, TMP_5.$$s = self, TMP_5), $a).call($b, "cycle", n) }; + if ((($a = ((($c = self['$empty?']()) !== false && $c !== nil) ? $c : n['$=='](0))) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; - var keys = self.keys, - _map = self.map, - smap = self.smap, - result = Opal.hash(), - _map2 = result.map, - smap2 = result.smap, - keys2 = result.keys, - map, map2, key, khash, value, object; + var i, length, value; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + if (n === nil) { + while (true) { + for (i = 0, length = self.length; i < length; i++) { + value = Opal.yield1(block, self[i]); - if (key.$$is_string) { - khash = key; - map = smap; - map2 = smap2; - } else { - khash = key.$hash(); - map = _map; - map2 = _map2; + if (value === $breaker) { + return $breaker.$v; + } + } + } + } + else { + n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); + if (n <= 0) { + return self; } - value = map[khash]; - object = block(key, value); + while (n > 0) { + for (i = 0, length = self.length; i < length; i++) { + value = Opal.yield1(block, self[i]); - if (object === $breaker) { - return $breaker.$v; - } + if (value === $breaker) { + return $breaker.$v; + } + } - if (object !== false && object !== nil) { - keys2.push(key); - map2[khash] = value; + n--; } } - - return result; - }; + return self; + }); - def['$select!'] = TMP_13 = function() { - var self = this, $iter = TMP_13.$$p, block = $iter || nil; + Opal.defn(self, '$clear', function() { + var self = this; - TMP_13.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("select!") - }; - - var _map = self.map, - smap = self.smap, - keys = self.keys, - result = nil, - key, khash, value, object, map; + self.splice(0, self.length); + return self; + }); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + Opal.defn(self, '$clone', function() { + var self = this, copy = nil; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; - } + copy = []; + copy.$copy_singleton_methods(self); + copy.$initialize_clone(self); + return copy; + }); - value = map[khash]; - object = block(key, value); + Opal.defn(self, '$dup', function() { + var self = this, copy = nil; - if (object === $breaker) { - return $breaker.$v; - } + copy = []; + copy.$initialize_dup(self); + return copy; + }); - if (object === false || object === nil) { - keys.splice(i, 1); - delete map[khash]; + Opal.defn(self, '$initialize_copy', function(other) { + var self = this; - length--; - i--; - result = self - } - } + return self.$replace(other); + }); - return result; - - }; + Opal.defn(self, '$collect', TMP_6 = function() { + var $a, $b, TMP_7, self = this, $iter = TMP_6.$$p, block = $iter || nil; - def.$shift = function() { - var self = this; + TMP_6.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_7 = function(){var self = TMP_7.$$s || this; + return self.$size()}, TMP_7.$$s = self, TMP_7), $a).call($b, "collect") + }; - var keys = self.keys, - _map = self.map, - smap = self.smap, - map, key, khash, value; + var result = []; - if (keys.length) { - key = keys[0]; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; - } - value = map[khash]; + for (var i = 0, length = self.length; i < length; i++) { + var value = Opal.yield1(block, self[i]); - delete map[khash]; - keys.splice(0, 1); + if (value === $breaker) { + return $breaker.$v; + } - return [key, value]; + result.push(value); } - return nil; + return result; - }; - - Opal.defn(self, '$size', def.$length); + }); - self.$alias_method("store", "[]="); + Opal.defn(self, '$collect!', TMP_8 = function() { + var $a, $b, TMP_9, self = this, $iter = TMP_8.$$p, block = $iter || nil; - def.$to_a = function() { - var self = this; + TMP_8.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this; + return self.$size()}, TMP_9.$$s = self, TMP_9), $a).call($b, "collect!") + }; - var keys = self.keys, - _map = self.map, - smap = self.smap, - result = [], - map, key, khash; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + for (var i = 0, length = self.length; i < length; i++) { + var value = Opal.yield1(block, self[i]); - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; + if (value === $breaker) { + return $breaker.$v; } - result.push([key, map[khash]]); + self[i] = value; } - - return result; - }; - - def.$to_h = function() { - var self = this; + return self; + }); - - if (self.$$class === Opal.Hash) { - return self + + function binomial_coefficient(n, k) { + if (n === k || k === 0) { + return 1; } - var hash = new Opal.Hash.$$alloc, - cloned = self.$clone(); - - hash.map = cloned.map; - hash.smap = cloned.smap; - hash.keys = cloned.keys; - hash.none = cloned.none; - hash.proc = cloned.proc; + if (k > 0 && n > k) { + return binomial_coefficient(n - 1, k - 1) + binomial_coefficient(n - 1, k); + } - return hash; - ; - }; + return 0; + } + - def.$to_hash = function() { - var self = this; + Opal.defn(self, '$combination', TMP_10 = function(n) { + var $a, $b, TMP_11, self = this, $iter = TMP_10.$$p, $yield = $iter || nil, num = nil; - return self; - }; + TMP_10.$$p = null; + num = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int"); + if (($yield !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_11 = function(){var self = TMP_11.$$s || this; - Opal.defn(self, '$to_s', def.$inspect); + return binomial_coefficient(self.length, num);}, TMP_11.$$s = self, TMP_11), $a).call($b, "combination", num) + }; + + var i, length, stack, chosen, lev, done, next; - Opal.defn(self, '$update', def['$merge!']); + if (num === 0) { + ((($a = Opal.yield1($yield, [])) === $breaker) ? $breaker.$v : $a) + } else if (num === 1) { + for (i = 0, length = self.length; i < length; i++) { + ((($a = Opal.yield1($yield, [self[i]])) === $breaker) ? $breaker.$v : $a) + } + } + else if (num === self.length) { + ((($a = Opal.yield1($yield, self.slice())) === $breaker) ? $breaker.$v : $a) + } + else if (num >= 0 && num < self.length) { + stack = []; + for (i = 0; i <= num + 1; i++) { + stack.push(0); + } - Opal.defn(self, '$value?', def['$has_value?']); + chosen = []; + lev = 0; + done = false; + stack[0] = -1; - Opal.defn(self, '$values_at', def.$indexes); + while (!done) { + chosen[lev] = self[stack[lev+1]]; + while (lev < num - 1) { + lev++; + next = stack[lev+1] = stack[lev] + 1; + chosen[lev] = self[next]; + } + ((($a = Opal.yield1($yield, chosen.slice())) === $breaker) ? $breaker.$v : $a) + lev++; + do { + done = (lev === 0); + stack[lev]++; + lev--; + } while ( stack[lev+1] + num === self.length + lev + 1 ); + } + } + ; + return self; + }); - return (def.$values = function() { + Opal.defn(self, '$compact', function() { var self = this; - var _map = self.map, - smap = self.smap, - keys = self.keys, - result = [], - map, khash, key; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + var result = []; - if (key.$$is_string) { - khash = key; - map = smap; - } else { - khash = key.$hash(); - map = _map; + for (var i = 0, length = self.length, item; i < length; i++) { + if ((item = self[i]) !== nil) { + result.push(item); } - - result.push(map[khash]); } return result; - }, nil) && 'values'; - })(self, null); -}; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/string"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_divide(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; + Opal.defn(self, '$compact!', function() { + var self = this; - Opal.add_stubs(['$require', '$include', '$coerce_to?', '$coerce_to', '$raise', '$===', '$format', '$to_s', '$respond_to?', '$to_str', '$<=>', '$==', '$=~', '$new', '$empty?', '$ljust', '$ceil', '$rjust', '$floor', '$to_a', '$each_char', '$to_proc', '$coerce_to!', '$initialize_clone', '$initialize_dup', '$enum_for', '$chomp', '$[]', '$to_i', '$class', '$each_line', '$match', '$captures', '$proc', '$shift', '$__send__', '$succ', '$escape']); - self.$require("corelib/comparable"); - (function($base, $super) { - function $String(){}; - var self = $String = $klass($base, $super, 'String', $String); + + var original = self.length; - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_10; + for (var i = 0, length = self.length; i < length; i++) { + if (self[i] === nil) { + self.splice(i, 1); - def.length = nil; - self.$include($scope.get('Comparable')); + length--; + i--; + } + } - def.$$is_string = true; + return self.length === original ? nil : self; + + }); - def.$__id__ = function() { - var self = this; - - return self.toString(); - }; - - Opal.defn(self, '$object_id', def.$__id__); - - Opal.defs(self, '$try_convert', function(what) { - var self = this; - - return $scope.get('Opal')['$coerce_to?'](what, $scope.get('String'), "to_str"); - }); - - Opal.defs(self, '$new', function(str) { - var self = this; + Opal.defn(self, '$concat', function(other) { + var $a, self = this; - if (str == null) { - str = "" + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; + + for (var i = 0, length = other.length; i < length; i++) { + self.push(other[i]); } - str = $scope.get('Opal').$coerce_to(str, $scope.get('String'), "to_str"); - return new String(str); + + return self; }); - def.$initialize = function(str) { - var self = this; + Opal.defn(self, '$delete', TMP_12 = function(object) { + var $a, self = this, $iter = TMP_12.$$p, $yield = $iter || nil; + TMP_12.$$p = null; - if (str === undefined) { - return self; - } - - return self.$raise($scope.get('NotImplementedError'), "Mutable strings are not supported in Opal."); - }; + var original = self.length; - def['$%'] = function(data) { - var $a, self = this; + for (var i = 0, length = original; i < length; i++) { + if ((self[i])['$=='](object)) { + self.splice(i, 1); - if ((($a = $scope.get('Array')['$==='](data)) !== nil && (!$a.$$is_boolean || $a == true))) { - return ($a = self).$format.apply($a, [self].concat(data)) - } else { - return self.$format(self, data) - }; - }; + length--; + i--; + } + } + + if (self.length === original) { + if (($yield !== nil)) { + return ((($a = Opal.yieldX($yield, [])) === $breaker) ? $breaker.$v : $a); + } + return nil; + } + return object; + ; + }); - def['$*'] = function(count) { + Opal.defn(self, '$delete_at', function(index) { var self = this; - count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); - if (count < 0) { - self.$raise($scope.get('ArgumentError'), "negative argument") + if (index < 0) { + index += self.length; } - if (count === 0) { - return ''; + if (index < 0 || index >= self.length) { + return nil; } - var result = '', - string = self.toString(); - - // All credit for the bit-twiddling magic code below goes to Mozilla - // polyfill implementation of String.prototype.repeat() posted here: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat - - if (string.length * count >= 1 << 28) { - self.$raise($scope.get('RangeError'), "multiply count must not overflow maximum string size") - } + var result = self[index]; - for (;;) { - if ((count & 1) === 1) { - result += string; - } - count >>>= 1; - if (count === 0) { - break; - } - string += string; - } + self.splice(index, 1); return result; ; - }; - - def['$+'] = function(other) { - var self = this; - - other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str"); - return self + other.$to_s(); - }; + }); - def['$<=>'] = function(other) { - var $a, self = this; + Opal.defn(self, '$delete_if', TMP_13 = function() { + var $a, $b, TMP_14, self = this, $iter = TMP_13.$$p, block = $iter || nil; - if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { - other = other.$to_str().$to_s(); - return self > other ? 1 : (self < other ? -1 : 0); + TMP_13.$$p = null; + if ((block !== nil)) { } else { - - var cmp = other['$<=>'](self); + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_14 = function(){var self = TMP_14.$$s || this; - if (cmp === nil) { - return nil; - } - else { - return cmp > 0 ? -1 : (cmp < 0 ? 1 : 0); - } - ; + return self.$size()}, TMP_14.$$s = self, TMP_14), $a).call($b, "delete_if") }; - }; - - def['$<<'] = function(other) { - var self = this; - - return self.$raise($scope.get('NotImplementedError'), "#<< not supported. Mutable String methods are not supported in Opal."); - }; - - def['$=='] = function(other) { - var self = this; - - if (other.$$is_string) { - return self.toString() === other.toString(); - } - if ($scope.get('Opal')['$respond_to?'](other, "to_str")) { - return other['$=='](self); - } - return false; - ; - }; + for (var i = 0, length = self.length, value; i < length; i++) { + if ((value = block(self[i])) === $breaker) { + return $breaker.$v; + } - Opal.defn(self, '$eql?', def['$==']); + if (value !== false && value !== nil) { + self.splice(i, 1); - Opal.defn(self, '$===', def['$==']); + length--; + i--; + } + } + + return self; + }); - def['$=~'] = function(other) { + Opal.defn(self, '$drop', function(number) { var self = this; - if (other.$$is_string) { - self.$raise($scope.get('TypeError'), "type mismatch: String given"); + if (number < 0) { + self.$raise($scope.get('ArgumentError')) } - return other['$=~'](self); + return self.slice(number); ; - }; - - def['$[]'] = function(index, length) { - var self = this; + }); - - var size = self.length; + Opal.defn(self, '$each', TMP_15 = function() { + var $a, $b, TMP_16, self = this, $iter = TMP_15.$$p, block = $iter || nil; - if (index.$$is_range) { - var exclude = index.exclude, - length = $scope.get('Opal').$coerce_to(index.end, $scope.get('Integer'), "to_int"), - index = $scope.get('Opal').$coerce_to(index.begin, $scope.get('Integer'), "to_int"); + TMP_15.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_16 = function(){var self = TMP_16.$$s || this; - if (Math.abs(index) > size) { - return nil; - } + return self.$size()}, TMP_16.$$s = self, TMP_16), $a).call($b, "each") + }; + + for (var i = 0, length = self.length; i < length; i++) { + var value = Opal.yield1(block, self[i]); - if (index < 0) { - index += size; + if (value == $breaker) { + return $breaker.$v; } + } + + return self; + }); - if (length < 0) { - length += size; - } + Opal.defn(self, '$each_index', TMP_17 = function() { + var $a, $b, TMP_18, self = this, $iter = TMP_17.$$p, block = $iter || nil; - if (!exclude) { - length += 1; - } + TMP_17.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_18 = function(){var self = TMP_18.$$s || this; - length = length - index; + return self.$size()}, TMP_18.$$s = self, TMP_18), $a).call($b, "each_index") + }; + + for (var i = 0, length = self.length; i < length; i++) { + var value = Opal.yield1(block, i); - if (length < 0) { - length = 0; + if (value === $breaker) { + return $breaker.$v; } - - return self.substr(index, length); } + + return self; + }); + Opal.defn(self, '$empty?', function() { + var self = this; - if (index.$$is_string) { - if (length != null) { - self.$raise($scope.get('TypeError')) - } - return self.indexOf(index) !== -1 ? index : nil; - } - + return self.length === 0; + }); - if (index.$$is_regexp) { - var match = self.match(index); + Opal.defn(self, '$eql?', function(other) { + var self = this; - if (match === null) { - $gvars["~"] = nil - return nil; - } + + var recursed = {}; - $gvars["~"] = $scope.get('MatchData').$new(index, match) + function _eql(array, other) { + var i, length, a, b; - if (length == null) { - return match[0]; + if (!other.$$is_array) { + return false; } - length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); + other = other.$to_a(); - if (length < 0 && -length < match.length) { - return match[length += match.length]; + if (array.length !== other.length) { + return false; } - if (length >= 0 && length < match.length) { - return match[length]; + recursed[(array).$object_id()] = true; + + for (i = 0, length = array.length; i < length; i++) { + a = array[i]; + b = other[i]; + if (a.$$is_array) { + if (b.$$is_array && b.length !== a.length) { + return false; + } + if (!recursed.hasOwnProperty((a).$object_id())) { + if (!_eql(a, b)) { + return false; + } + } + } else { + if (!(a)['$eql?'](b)) { + return false; + } + } } - return nil; + return true; } + return _eql(self, other); + + }); + + Opal.defn(self, '$fetch', TMP_19 = function(index, defaults) { + var self = this, $iter = TMP_19.$$p, block = $iter || nil; + + TMP_19.$$p = null; + + var original = index; index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); if (index < 0) { - index += size; + index += self.length; } - if (length == null) { - if (index >= size || index < 0) { - return nil; - } - return self.substr(index, 1); + if (index >= 0 && index < self.length) { + return self[index]; } - length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int"); - - if (length < 0) { - return nil; + if (block !== nil) { + return block(original); } - if (index > size || index < 0) { - return nil; + if (defaults != null) { + return defaults; } - return self.substr(index, length); + if (self.length === 0) { + self.$raise($scope.get('IndexError'), "index " + (original) + " outside of array bounds: 0...0") + } + else { + self.$raise($scope.get('IndexError'), "index " + (original) + " outside of array bounds: -" + (self.length) + "..." + (self.length)); + } ; - }; + }); - def.$capitalize = function() { - var self = this; + Opal.defn(self, '$fill', TMP_20 = function() { + var $a, $b, self = this, $iter = TMP_20.$$p, block = $iter || nil, one = nil, two = nil, obj = nil, left = nil, right = nil, $splat_index = nil; - return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase(); - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_20.$$p = null; + + var i, length, value; + + if (block !== false && block !== nil) { + if ((($a = args.length > 2) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 0..2)")}; + $b = args, $a = Opal.to_ary($b), one = ($a[0] == null ? nil : $a[0]), two = ($a[1] == null ? nil : $a[1]), $b; + } else { + if ((($a = args.length == 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)") + } else if ((($a = args.length > 3) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 1..3)")}; + $b = args, $a = Opal.to_ary($b), obj = ($a[0] == null ? nil : $a[0]), one = ($a[1] == null ? nil : $a[1]), two = ($a[2] == null ? nil : $a[2]), $b; + }; + if ((($a = $scope.get('Range')['$==='](one)) !== nil && (!$a.$$is_boolean || $a == true))) { + if (two !== false && two !== nil) { + self.$raise($scope.get('TypeError'), "length invalid with range")}; + left = $scope.get('Opal').$coerce_to(one.$begin(), $scope.get('Integer'), "to_int"); + if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + left += self.length;}; + if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "" + (one.$inspect()) + " out of range")}; + right = $scope.get('Opal').$coerce_to(one.$end(), $scope.get('Integer'), "to_int"); + if ((($a = right < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + right += self.length;}; + if ((($a = one['$exclude_end?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + right += 1; + }; + if ((($a = right <= left) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + } else if (one !== false && one !== nil) { + left = $scope.get('Opal').$coerce_to(one, $scope.get('Integer'), "to_int"); + if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + left += self.length;}; + if ((($a = left < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + left = 0}; + if (two !== false && two !== nil) { + right = $scope.get('Opal').$coerce_to(two, $scope.get('Integer'), "to_int"); + if ((($a = right == 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + right += left; + } else { + right = self.length + }; + } else { + left = 0; + right = self.length; + }; + if ((($a = left > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + + for (i = self.length; i < right; i++) { + self[i] = nil; + } + ;}; + if ((($a = right > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + self.length = right}; + if (block !== false && block !== nil) { + + for (length = self.length; left < right; left++) { + value = block(left); + + if (value === $breaker) { + return $breaker.$v; + } - Opal.defn(self, '$capitalize!', def['$<<']); + self[left] = value; + } + ; + } else { + + for (length = self.length; left < right; left++) { + self[left] = obj; + } + ; + }; + return self; + }); - def.$casecmp = function(other) { + Opal.defn(self, '$first', function(count) { var self = this; - other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str").$to_s(); - var ascii_only = /^[\x00-\x7F]*$/; - if (ascii_only.test(self) && ascii_only.test(other)) { - self = self.toLowerCase(); - other = other.toLowerCase(); + if (count == null) { + return self.length === 0 ? nil : self[0]; } - - return self['$<=>'](other); - }; - def.$center = function(width, padstr) { - var $a, self = this; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - if (padstr == null) { - padstr = " " + if (count < 0) { + self.$raise($scope.get('ArgumentError'), "negative array size"); } - width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); - padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); - if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "zero width padding")}; - if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - - var ljustified = self.$ljust($rb_divide(($rb_plus(width, self.length)), 2).$ceil(), padstr), - rjustified = self.$rjust($rb_divide(($rb_plus(width, self.length)), 2).$floor(), padstr); - return rjustified + ljustified.slice(self.length); - ; - }; + return self.slice(0, count); + + }); - def.$chars = TMP_1 = function() { - var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$flatten', function(level) { + var self = this; - TMP_1.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$each_char().$to_a() - }; - return ($a = ($b = self).$each_char, $a.$$p = block.$to_proc(), $a).call($b); - }; + + function _flatten(array, level) { + var result = [], + i, length, + item, ary; - def.$chomp = function(separator) { - var $a, self = this; - if ($gvars["/"] == null) $gvars["/"] = nil; + array = (array).$to_a(); - if (separator == null) { - separator = $gvars["/"] - } - if ((($a = separator === nil || self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - separator = $scope.get('Opal')['$coerce_to!'](separator, $scope.get('String'), "to_str").$to_s(); - - if (separator === "\n") { - return self.replace(/\r?\n?$/, ''); - } - else if (separator === "") { - return self.replace(/(\r?\n)+$/, ''); - } - else if (self.length > separator.length) { - var tail = self.substr(self.length - separator.length, separator.length); + for (i = 0, length = array.length; i < length; i++) { + item = array[i]; - if (tail === separator) { - return self.substr(0, self.length - separator.length); - } - } - - return self; - }; + if (!$scope.get('Opal')['$respond_to?'](item, "to_ary")) { + result.push(item); + continue; + } - Opal.defn(self, '$chomp!', def['$<<']); + ary = (item).$to_ary(); - def.$chop = function() { - var self = this; + if (ary === nil) { + result.push(item); + continue; + } - - var length = self.length; + if (!ary.$$is_array) { + self.$raise($scope.get('TypeError')); + } - if (length <= 1) { - return ""; - } + if (ary === self) { + self.$raise($scope.get('ArgumentError')); + } - if (self.charAt(length - 1) === "\n" && self.charAt(length - 2) === "\r") { - return self.substr(0, length - 2); + switch (level) { + case undefined: + result.push.apply(result, _flatten(ary)); + break; + case 0: + result.push(ary); + break; + default: + result.push.apply(result, _flatten(ary, level - 1)); + } + } + return result; } - else { - return self.substr(0, length - 1); + + if (level !== undefined) { + level = $scope.get('Opal').$coerce_to(level, $scope.get('Integer'), "to_int"); } - - }; - Opal.defn(self, '$chop!', def['$<<']); + return _flatten(self, level); + + }); - def.$chr = function() { + Opal.defn(self, '$flatten!', function(level) { var self = this; - return self.charAt(0); - }; - - def.$clone = function() { - var self = this, copy = nil; + + var flattened = self.$flatten(level); - copy = self.slice(); - copy.$initialize_clone(self); - return copy; - }; + if (self.length == flattened.length) { + for (var i = 0, length = self.length; i < length; i++) { + if (self[i] !== flattened[i]) { + break; + } + } - def.$dup = function() { - var self = this, copy = nil; + if (i == length) { + return nil; + } + } - copy = self.slice(); - copy.$initialize_dup(self); - return copy; - }; + self.$replace(flattened); + ; + return self; + }); - def.$count = function(sets) { + Opal.defn(self, '$hash', function() { var self = this; - sets = $slice.call(arguments, 0); - if (sets.length === 0) { - self.$raise($scope.get('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") - } - var char_class = char_class_from_char_sets(sets); - if (char_class === null) { - return 0; - } - return self.length - self.replace(new RegExp(char_class, 'g'), '').length; - ; - }; + var top = (Opal.hash_ids == undefined), + result = ['A'], + hash_id = self.$object_id(), + item, i, key; - def.$delete = function(sets) { - var self = this; + try { + if (top) { + Opal.hash_ids = {}; + } - sets = $slice.call(arguments, 0); - - if (sets.length === 0) { - self.$raise($scope.get('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") - } - var char_class = char_class_from_char_sets(sets); - if (char_class === null) { - return self; - } - return self.replace(new RegExp(char_class, 'g'), ''); - ; - }; + if (Opal.hash_ids.hasOwnProperty(hash_id)) { + return 'self'; + } - Opal.defn(self, '$dup', def.$clone); + for (key in Opal.hash_ids) { + if (Opal.hash_ids.hasOwnProperty(key)) { + item = Opal.hash_ids[key]; + if (self['$eql?'](item)) { + return 'self'; + } + } + } - def.$downcase = function() { - var self = this; + Opal.hash_ids[hash_id] = self; - return self.toLowerCase(); - }; + for (i = 0; i < self.length; i++) { + item = self[i]; + result.push(item.$hash()); + } - Opal.defn(self, '$downcase!', def['$<<']); + return result.join(','); + } finally { + if (top) { + delete Opal.hash_ids; + } + } + + }); - def.$each_char = TMP_2 = function() { - var $a, self = this, $iter = TMP_2.$$p, block = $iter || nil; + Opal.defn(self, '$include?', function(member) { + var self = this; - TMP_2.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("each_char") - }; for (var i = 0, length = self.length; i < length; i++) { - ((($a = Opal.yield1(block, self.charAt(i))) === $breaker) ? $breaker.$v : $a); + if ((self[i])['$=='](member)) { + return true; + } } + + return false; - return self; - }; + }); - def.$each_line = TMP_3 = function(separator) { - var $a, self = this, $iter = TMP_3.$$p, $yield = $iter || nil; - if ($gvars["/"] == null) $gvars["/"] = nil; + Opal.defn(self, '$index', TMP_21 = function(object) { + var self = this, $iter = TMP_21.$$p, block = $iter || nil; - if (separator == null) { - separator = $gvars["/"] - } - TMP_3.$$p = null; - if (($yield !== nil)) { - } else { - return self.$enum_for("each_line", separator) - }; + TMP_21.$$p = null; - if (separator === nil) { - ((($a = Opal.yield1($yield, self)) === $breaker) ? $breaker.$v : $a); - return self; - } + var i, length, value; - separator = $scope.get('Opal').$coerce_to(separator, $scope.get('String'), "to_str") + if (object != null) { + for (i = 0, length = self.length; i < length; i++) { + if ((self[i])['$=='](object)) { + return i; + } + } + } + else if (block !== nil) { + for (i = 0, length = self.length; i < length; i++) { + if ((value = block(self[i])) === $breaker) { + return $breaker.$v; + } - if (separator.length === 0) { - for (var a = self.split(/(\n{2,})/), i = 0, n = a.length; i < n; i += 2) { - if (a[i] || a[i + 1]) { - ((($a = Opal.yield1($yield, (a[i] || "") + (a[i + 1] || ""))) === $breaker) ? $breaker.$v : $a); + if (value !== false && value !== nil) { + return i; } } - return self; } + else { + return self.$enum_for("index"); + } + + return nil; + + }); - var chomped = self.$chomp(separator), - trailing = self.length != chomped.length, - splitted = chomped.split(separator); + Opal.defn(self, '$insert', function(index) { + var self = this, $splat_index = nil; - for (var i = 0, length = splitted.length; i < length; i++) { - if (i < length - 1 || trailing) { - ((($a = Opal.yield1($yield, splitted[i] + separator)) === $breaker) ? $breaker.$v : $a); + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 1]; + } + + index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int"); + + if (objects.length > 0) { + if (index < 0) { + index += self.length + 1; + + if (index < 0) { + self.$raise($scope.get('IndexError'), "" + (index) + " is out of bounds"); + } } - else { - ((($a = Opal.yield1($yield, splitted[i])) === $breaker) ? $breaker.$v : $a); + if (index > self.length) { + for (var i = self.length; i < index; i++) { + self.push(nil); + } } + + self.splice.apply(self, [index, 0].concat(objects)); } ; return self; - }; - - def['$empty?'] = function() { - var self = this; - - return self.length === 0; - }; + }); - def['$end_with?'] = function(suffixes) { + Opal.defn(self, '$inspect', function() { var self = this; - suffixes = $slice.call(arguments, 0); - for (var i = 0, length = suffixes.length; i < length; i++) { - var suffix = $scope.get('Opal').$coerce_to(suffixes[i], $scope.get('String'), "to_str").$to_s(); + var result = [], + id = self.$__id__(); - if (self.length >= suffix.length && - self.substr(self.length - suffix.length, suffix.length) == suffix) { - return true; + for (var i = 0, length = self.length; i < length; i++) { + var item = self['$[]'](i); + + if ((item).$__id__() === id) { + result.push('[...]'); + } + else { + result.push((item).$inspect()); } } - - return false; - }; - - Opal.defn(self, '$eql?', def['$==']); - - Opal.defn(self, '$equal?', def['$===']); - def.$gsub = TMP_4 = function(pattern, replacement) { - var self = this, $iter = TMP_4.$$p, block = $iter || nil; + return '[' + result.join(', ') + ']'; + ; + }); - TMP_4.$$p = null; - - var result = '', match_data = nil, index = 0, match, _replacement; + Opal.defn(self, '$join', function(sep) { + var $a, self = this; + if ($gvars[","] == null) $gvars[","] = nil; - if (pattern.$$is_regexp) { - pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); - } else { - pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); - pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + if (sep == null) { + sep = nil } + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return ""}; + if ((($a = sep === nil) !== nil && (!$a.$$is_boolean || $a == true))) { + sep = $gvars[","]}; + + var result = []; + var i, length, item, tmp; - while (true) { - match = pattern.exec(self); + for (i = 0, length = self.length; i < length; i++) { + item = self[i]; - if (match === null) { - $gvars["~"] = nil - result += self.slice(index); - break; - } + if ($scope.get('Opal')['$respond_to?'](item, "to_str")) { + tmp = (item).$to_str(); - match_data = $scope.get('MatchData').$new(pattern, match); + if (tmp !== nil) { + result.push((tmp).$to_s()); - if (replacement === undefined) { - if (block === nil) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (1 for 2)") - } - _replacement = block(match[0]); - } - else if (replacement.$$is_hash) { - _replacement = (replacement)['$[]'](match[0]).$to_s(); - } - else { - if (!replacement.$$is_string) { - replacement = $scope.get('Opal').$coerce_to(replacement, $scope.get('String'), "to_str"); + continue; } - _replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { - if (slashes.length % 2 === 0) { - return original; - } - switch (command) { - case "+": - for (var i = match.length - 1; i > 0; i--) { - if (match[i] !== undefined) { - return slashes.slice(1) + match[i]; - } - } - return ''; - case "&": return slashes.slice(1) + match[0]; - case "`": return slashes.slice(1) + self.slice(0, match.index); - case "'": return slashes.slice(1) + self.slice(match.index + match[0].length); - default: return slashes.slice(1) + (match[command] || ''); - } - }).replace(/\\\\/g, '\\'); } - if (pattern.lastIndex === match.index) { - result += (_replacement + self.slice(index, match.index + 1)) - pattern.lastIndex += 1; - } - else { - result += (self.slice(index, match.index) + _replacement) - } - index = pattern.lastIndex; - } + if ($scope.get('Opal')['$respond_to?'](item, "to_ary")) { + tmp = (item).$to_ary(); - $gvars["~"] = match_data - return result; - - }; + if (tmp === self) { + self.$raise($scope.get('ArgumentError')); + } - Opal.defn(self, '$gsub!', def['$<<']); + if (tmp !== nil) { + result.push((tmp).$join(sep)); - def.$hash = function() { - var self = this; + continue; + } + } - return self.toString(); - }; + if ($scope.get('Opal')['$respond_to?'](item, "to_s")) { + tmp = (item).$to_s(); - def.$hex = function() { - var self = this; + if (tmp !== nil) { + result.push(tmp); - return self.$to_i(16); - }; + continue; + } + } - def['$include?'] = function(other) { - var $a, self = this; + self.$raise($scope.get('NoMethodError').$new("" + ($scope.get('Opal').$inspect(item)) + " doesn't respond to #to_str, #to_ary or #to_s", "to_str")); + } - - if (other.$$is_string) { - return self.indexOf(other) !== -1; + if (sep === nil) { + return result.join(''); } - - if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('TypeError'), "no implicit conversion of " + (other.$class()) + " into String") - }; - return self.indexOf(other.$to_str()) !== -1; - }; + else { + return result.join($scope.get('Opal')['$coerce_to!'](sep, $scope.get('String'), "to_str").$to_s()); + } + ; + }); - def.$index = function(search, offset) { - var self = this; + Opal.defn(self, '$keep_if', TMP_22 = function() { + var $a, $b, TMP_23, self = this, $iter = TMP_22.$$p, block = $iter || nil; - - var index, - match, - regex; + TMP_22.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_23 = function(){var self = TMP_23.$$s || this; - if (offset === undefined) { - offset = 0; - } else { - offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int"); - if (offset < 0) { - offset += self.length; - if (offset < 0) { - return nil; - } + return self.$size()}, TMP_23.$$s = self, TMP_23), $a).call($b, "keep_if") + }; + + for (var i = 0, length = self.length, value; i < length; i++) { + if ((value = block(self[i])) === $breaker) { + return $breaker.$v; } - } - if (search.$$is_regexp) { - regex = new RegExp(search.source, 'gm' + (search.ignoreCase ? 'i' : '')); - while (true) { - match = regex.exec(self); - if (match === null) { - $gvars["~"] = nil; - index = -1; - break; - } - if (match.index >= offset) { - $gvars["~"] = $scope.get('MatchData').$new(regex, match) - index = match.index; - break; - } - regex.lastIndex = match.index + 1; - } - } else { - search = $scope.get('Opal').$coerce_to(search, $scope.get('String'), "to_str"); - if (search.length === 0 && offset > self.length) { - index = -1; - } else { - index = self.indexOf(search, offset); + if (value === false || value === nil) { + self.splice(i, 1); + + length--; + i--; } } - - return index === -1 ? nil : index; - }; + return self; + }); - def.$inspect = function() { + Opal.defn(self, '$last', function(count) { var self = this; - var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - meta = { - '\u0007': '\\a', - '\u001b': '\\e', - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '\v': '\\v', - '"' : '\\"', - '\\': '\\\\' - }, - escaped = self.replace(escapable, function (chr) { - return meta[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16).toUpperCase()).slice(-4); - }); - return '"' + escaped.replace(/\#[\$\@\{]/g, '\\$&') + '"'; - - }; - - def.$intern = function() { - var self = this; - - return self; - }; - - def.$lines = TMP_5 = function(separator) { - var $a, $b, self = this, $iter = TMP_5.$$p, block = $iter || nil, e = nil; - if ($gvars["/"] == null) $gvars["/"] = nil; - - if (separator == null) { - separator = $gvars["/"] + if (count == null) { + return self.length === 0 ? nil : self[self.length - 1]; } - TMP_5.$$p = null; - e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator); - if (block !== false && block !== nil) { - return self - } else { - return e.$to_a() - }; - }; - - def.$length = function() { - var self = this; - - return self.length; - }; - def.$ljust = function(width, padstr) { - var $a, self = this; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); - if (padstr == null) { - padstr = " " + if (count < 0) { + self.$raise($scope.get('ArgumentError'), "negative array size"); } - width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); - padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); - if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "zero width padding")}; - if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; - - var index = -1, - result = ""; - - width -= self.length; - while (++index < width) { - result += padstr; + if (count > self.length) { + count = self.length; } - return self + result.slice(0, width); + return self.slice(self.length - count, self.length); - }; + }); - def.$lstrip = function() { + Opal.defn(self, '$length', function() { var self = this; - return self.replace(/^\s*/, ''); - }; + return self.length; + }); - Opal.defn(self, '$lstrip!', def['$<<']); + Opal.alias(self, 'map', 'collect'); - def.$match = TMP_6 = function(pattern, pos) { - var $a, $b, self = this, $iter = TMP_6.$$p, block = $iter || nil; + Opal.alias(self, 'map!', 'collect!'); - TMP_6.$$p = null; - if ((($a = ((($b = $scope.get('String')['$==='](pattern)) !== false && $b !== nil) ? $b : pattern['$respond_to?']("to_str"))) !== nil && (!$a.$$is_boolean || $a == true))) { - pattern = $scope.get('Regexp').$new(pattern.$to_str())}; - if ((($a = $scope.get('Regexp')['$==='](pattern)) !== nil && (!$a.$$is_boolean || $a == true))) { + Opal.defn(self, '$permutation', TMP_24 = function(num) { + var $a, $b, TMP_25, self = this, $iter = TMP_24.$$p, block = $iter || nil, perm = nil, used = nil; + + TMP_24.$$p = null; + if ((block !== nil)) { } else { - self.$raise($scope.get('TypeError'), "wrong argument type " + (pattern.$class()) + " (expected Regexp)") + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_25 = function(){var self = TMP_25.$$s || this; + + return self.$size()}, TMP_25.$$s = self, TMP_25), $a).call($b, "permutation", num) }; - return ($a = ($b = pattern).$match, $a.$$p = block.$to_proc(), $a).call($b, self, pos); - }; + + var permute, offensive, output; - def.$next = function() { - var self = this; + if (num === undefined) { + num = self.length; + } + else { + num = $scope.get('Opal').$coerce_to(num, $scope.get('Integer'), "to_int") + } - - var i = self.length; - if (i === 0) { - return ''; + if (num < 0 || self.length < num) { + // no permutations, yield nothing } - var result = self; - var first_alphanum_char_index = self.search(/[a-zA-Z0-9]/); - var carry = false; - var code; - while (i--) { - code = self.charCodeAt(i); - if ((code >= 48 && code <= 57) || - (code >= 65 && code <= 90) || - (code >= 97 && code <= 122)) { - switch (code) { - case 57: - carry = true; - code = 48; - break; - case 90: - carry = true; - code = 65; - break; - case 122: - carry = true; - code = 97; - break; - default: - carry = false; - code += 1; - } - } else { - if (first_alphanum_char_index === -1) { - if (code === 255) { - carry = true; - code = 0; - } else { - carry = false; - code += 1; + else if (num === 0) { + // exactly one permutation: the zero-length array + ((($a = Opal.yield1(block, [])) === $breaker) ? $breaker.$v : $a) + } + else if (num === 1) { + // this is a special, easy case + for (var i = 0; i < self.length; i++) { + ((($a = Opal.yield1(block, [self[i]])) === $breaker) ? $breaker.$v : $a) + } + } + else { + // this is the general case + perm = $scope.get('Array').$new(num) + used = $scope.get('Array').$new(self.length, false) + + permute = function(num, perm, index, used, blk) { + self = this; + for(var i = 0; i < self.length; i++){ + if(used['$[]'](i)['$!']()) { + perm[index] = i; + if(index < num - 1) { + used[i] = true; + permute.call(self, num, perm, index + 1, used, blk); + used[i] = false; + } + else { + output = []; + for (var j = 0; j < perm.length; j++) { + output.push(self[perm[j]]); + } + Opal.yield1(blk, output); + } } - } else { - carry = true; } } - result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i + 1); - if (carry && (i === 0 || i === first_alphanum_char_index)) { - switch (code) { - case 65: - break; - case 97: - break; - default: - code += 1; - } - if (i === 0) { - result = String.fromCharCode(code) + result; - } else { - result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i); - } - carry = false; + + if ((block !== nil)) { + // offensive (both definitions) copy. + offensive = self.slice(); + permute.call(offensive, num, perm, 0, used, block); } - if (!carry) { - break; + else { + permute.call(self, num, perm, 0, used, block); } } - return result; - - }; + ; + return self; + }); - Opal.defn(self, '$next!', def['$<<']); + Opal.defn(self, '$pop', function(count) { + var $a, self = this; - def.$oct = function() { - var self = this; + if ((($a = count === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + return self.pop();}; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); + if ((($a = count < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "negative array size")}; + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return []}; + if ((($a = count > self.length) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.splice(0, self.length); + } else { + return self.splice(self.length - count, self.length); + }; + }); + + Opal.defn(self, '$product', TMP_26 = function() { + var $a, self = this, $iter = TMP_26.$$p, block = $iter || nil, $splat_index = nil; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_26.$$p = null; - var result, - string = self, - radix = 8; + var result = (block !== nil) ? null : [], + n = args.length + 1, + counters = new Array(n), + lengths = new Array(n), + arrays = new Array(n), + i, m, subarray, len, resultlen = 1; - if (/^\s*_/.test(string)) { - return 0; + arrays[0] = self; + for (i = 1; i < n; i++) { + arrays[i] = $scope.get('Opal').$coerce_to(args[i - 1], $scope.get('Array'), "to_ary"); } - string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/i, function (original, head, flag, tail) { - switch (tail.charAt(0)) { - case '+': - case '-': - return original; - case '0': - if (tail.charAt(1) === 'x' && flag === '0x') { - return original; - } + for (i = 0; i < n; i++) { + len = arrays[i].length; + if (len === 0) { + return result || self; } - switch (flag) { - case '0b': - radix = 2; - break; - case '0': - case '0o': - radix = 8; - break; - case '0d': - radix = 10; - break; - case '0x': - radix = 16; - break; + resultlen *= len; + if (resultlen > 2147483647) { + self.$raise($scope.get('RangeError'), "too big to product") } - return head + tail; - }); + lengths[i] = len; + counters[i] = 0; + } - result = parseInt(string.replace(/_(?!_)/g, ''), radix); - return isNaN(result) ? 0 : result; - - }; + outer_loop: for (;;) { + subarray = []; + for (i = 0; i < n; i++) { + subarray.push(arrays[i][counters[i]]); + } + if (result) { + result.push(subarray); + } else { + ((($a = Opal.yield1(block, subarray)) === $breaker) ? $breaker.$v : $a) + } + m = n - 1; + counters[m]++; + while (counters[m] === lengths[m]) { + counters[m] = 0; + if (--m < 0) break outer_loop; + counters[m]++; + } + } - def.$ord = function() { - var self = this; + return result || self; + ; + }); - return self.charCodeAt(0); - }; + Opal.defn(self, '$push', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 0]; + } + + for (var i = 0, length = objects.length; i < length; i++) { + self.push(objects[i]); + } + + return self; + }); - def.$partition = function(sep) { + Opal.defn(self, '$rassoc', function(object) { var self = this; - var i, m; + for (var i = 0, length = self.length, item; i < length; i++) { + item = self[i]; - if (sep.$$is_regexp) { - m = sep.exec(self); - if (m === null) { - i = -1; - } else { - $scope.get('MatchData').$new(sep, m); - sep = m[0]; - i = m.index; + if (item.length && item[1] !== undefined) { + if ((item[1])['$=='](object)) { + return item; + } } - } else { - sep = $scope.get('Opal').$coerce_to(sep, $scope.get('String'), "to_str"); - i = self.indexOf(sep); - } - - if (i === -1) { - return [self, '', '']; } - return [ - self.slice(0, i), - self.slice(i, i + sep.length), - self.slice(i + sep.length) - ]; + return nil; - }; - - def.$reverse = function() { - var self = this; - - return self.split('').reverse().join(''); - }; + }); - Opal.defn(self, '$reverse!', def['$<<']); + Opal.defn(self, '$reject', TMP_27 = function() { + var $a, $b, TMP_28, self = this, $iter = TMP_27.$$p, block = $iter || nil; - def.$rindex = function(search, offset) { - var self = this; + TMP_27.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_28 = function(){var self = TMP_28.$$s || this; + return self.$size()}, TMP_28.$$s = self, TMP_28), $a).call($b, "reject") + }; - var i, m, r, _m; + var result = []; - if (offset === undefined) { - offset = self.length; - } else { - offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int"); - if (offset < 0) { - offset += self.length; - if (offset < 0) { - return nil; - } + for (var i = 0, length = self.length, value; i < length; i++) { + if ((value = block(self[i])) === $breaker) { + return $breaker.$v; } - } - if (search.$$is_regexp) { - m = null; - r = new RegExp(search.source, 'gm' + (search.ignoreCase ? 'i' : '')); - while (true) { - _m = r.exec(self); - if (_m === null || _m.index > offset) { - break; - } - m = _m; - r.lastIndex = m.index + 1; - } - if (m === null) { - $gvars["~"] = nil - i = -1; - } else { - $scope.get('MatchData').$new(r, m); - i = m.index; + if (value === false || value === nil) { + result.push(self[i]); } - } else { - search = $scope.get('Opal').$coerce_to(search, $scope.get('String'), "to_str"); - i = self.lastIndexOf(search, offset); } - - return i === -1 ? nil : i; + return result; - }; + }); + + Opal.defn(self, '$reject!', TMP_29 = function() { + var $a, $b, TMP_30, $c, self = this, $iter = TMP_29.$$p, block = $iter || nil, original = nil; + + TMP_29.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_30 = function(){var self = TMP_30.$$s || this; + + return self.$size()}, TMP_30.$$s = self, TMP_30), $a).call($b, "reject!") + }; + original = self.$length(); + ($a = ($c = self).$delete_if, $a.$$p = block.$to_proc(), $a).call($c); + if (self.$length()['$=='](original)) { + return nil + } else { + return self + }; + }); - def.$rjust = function(width, padstr) { + Opal.defn(self, '$replace', function(other) { var $a, self = this; - if (padstr == null) { - padstr = " " - } - width = $scope.get('Opal').$coerce_to(width, $scope.get('Integer'), "to_int"); - padstr = $scope.get('Opal').$coerce_to(padstr, $scope.get('String'), "to_str").$to_s(); - if ((($a = padstr['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "zero width padding")}; - if ((($a = width <= self.length) !== nil && (!$a.$$is_boolean || $a == true))) { - return self}; + if ((($a = $scope.get('Array')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + other = other.$to_a() + } else { + other = $scope.get('Opal').$coerce_to(other, $scope.get('Array'), "to_ary").$to_a() + }; - var chars = Math.floor(width - self.length), - patterns = Math.floor(chars / padstr.length), - result = Array(patterns + 1).join(padstr), - remaining = chars - result.length; - - return result + padstr.slice(0, remaining) + self; + self.splice(0, self.length); + self.push.apply(self, other); - }; + return self; + }); - def.$rpartition = function(sep) { + Opal.defn(self, '$reverse', function() { var self = this; - - var i, m, r, _m; + return self.slice(0).reverse(); + }); - if (sep.$$is_regexp) { - m = null; - r = new RegExp(sep.source, 'gm' + (sep.ignoreCase ? 'i' : '')); + Opal.defn(self, '$reverse!', function() { + var self = this; - while (true) { - _m = r.exec(self); - if (_m === null) { + return self.reverse(); + }); + + Opal.defn(self, '$reverse_each', TMP_31 = function() { + var $a, $b, TMP_32, $c, self = this, $iter = TMP_31.$$p, block = $iter || nil; + + TMP_31.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_32 = function(){var self = TMP_32.$$s || this; + + return self.$size()}, TMP_32.$$s = self, TMP_32), $a).call($b, "reverse_each") + }; + ($a = ($c = self.$reverse()).$each, $a.$$p = block.$to_proc(), $a).call($c); + return self; + }); + + Opal.defn(self, '$rindex', TMP_33 = function(object) { + var self = this, $iter = TMP_33.$$p, block = $iter || nil; + + TMP_33.$$p = null; + + var i, value; + + if (object != null) { + for (i = self.length - 1; i >= 0; i--) { + if (i >= self.length) { break; } - m = _m; - r.lastIndex = m.index + 1; + if ((self[i])['$=='](object)) { + return i; + } } - - if (m === null) { - i = -1; - } else { - $scope.get('MatchData').$new(r, m); - sep = m[0]; - i = m.index; + } + else if (block !== nil) { + for (i = self.length - 1; i >= 0; i--) { + if (i >= self.length) { + break; + } + if ((value = block(self[i])) === $breaker) { + return $breaker.$v; + } + if (value !== false && value !== nil) { + return i; + } } - - } else { - sep = $scope.get('Opal').$coerce_to(sep, $scope.get('String'), "to_str"); - i = self.lastIndexOf(sep); } - - if (i === -1) { - return ['', '', self]; + else if (object == null) { + return self.$enum_for("rindex"); } - return [ - self.slice(0, i), - self.slice(i, i + sep.length), - self.slice(i + sep.length) - ]; + return nil; - }; + }); - def.$rstrip = function() { + Opal.defn(self, '$rotate', function(n) { var self = this; - return self.replace(/[\s\u0000]*$/, ''); - }; - - def.$scan = TMP_7 = function(pattern) { - var self = this, $iter = TMP_7.$$p, block = $iter || nil; - - TMP_7.$$p = null; + if (n == null) { + n = 1 + } + n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); - var result = [], - match_data = nil, - match; + var ary, idx, firstPart, lastPart; - if (pattern.$$is_regexp) { - pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); - } else { - pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); - pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + if (self.length === 1) { + return self.slice(); } - - while ((match = pattern.exec(self)) != null) { - match_data = $scope.get('MatchData').$new(pattern, match); - if (block === nil) { - match.length == 1 ? result.push(match[0]) : result.push((match_data).$captures()); - } else { - match.length == 1 ? block(match[0]) : block.call(self, (match_data).$captures()); - } - if (pattern.lastIndex === match.index) { - pattern.lastIndex += 1; - } + if (self.length === 0) { + return []; } - $gvars["~"] = match_data + ary = self.slice(); + idx = n % ary.length; - return (block !== nil ? self : result); + firstPart = ary.slice(idx); + lastPart = ary.slice(0, idx); + return firstPart.concat(lastPart); - }; + }); - Opal.defn(self, '$size', def.$length); + Opal.defn(self, '$rotate!', function(cnt) { + var self = this, ary = nil; - Opal.defn(self, '$slice', def['$[]']); + if (cnt == null) { + cnt = 1 + } + + if (self.length === 0 || self.length === 1) { + return self; + } + + cnt = $scope.get('Opal').$coerce_to(cnt, $scope.get('Integer'), "to_int"); + ary = self.$rotate(cnt); + return self.$replace(ary); + }); - Opal.defn(self, '$slice!', def['$<<']); + (function($base, $super) { + function $SampleRandom(){}; + var self = $SampleRandom = $klass($base, $super, 'SampleRandom', $SampleRandom); - def.$split = function(pattern, limit) { - var $a, self = this; - if ($gvars[";"] == null) $gvars[";"] = nil; + var def = self.$$proto, $scope = self.$$scope; - - if (self.length === 0) { - return []; - } + def.rng = nil; + Opal.defn(self, '$initialize', function(rng) { + var self = this; - if (limit === undefined) { - limit = 0; - } else { - limit = $scope.get('Opal')['$coerce_to!'](limit, $scope.get('Integer'), "to_int"); - if (limit === 1) { - return [self]; - } - } + return self.rng = rng; + }); - if (pattern === undefined || pattern === nil) { - pattern = ((($a = $gvars[";"]) !== false && $a !== nil) ? $a : " "); - } + return (Opal.defn(self, '$rand', function(size) { + var $a, self = this, random = nil; - var result = [], - string = self.toString(), - index = 0, - match, - i; + random = $scope.get('Opal').$coerce_to(self.rng.$rand(size), $scope.get('Integer'), "to_int"); + if ((($a = random < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "random value must be >= 0")}; + if ((($a = random < size) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('RangeError'), "random value must be less than Array size") + }; + return random; + }), nil) && 'rand'; + })($scope.base, null); - if (pattern.$$is_regexp) { - pattern = new RegExp(pattern.source, 'gm' + (pattern.ignoreCase ? 'i' : '')); - } else { - pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str").$to_s(); - if (pattern === ' ') { - pattern = /\s+/gm; - string = string.replace(/^\s+/, ''); - } else { - pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); + Opal.defn(self, '$sample', function(count, options) { + var $a, $b, self = this, o = nil, rng = nil; + + if ((($a = count === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$at($scope.get('Kernel').$rand(self.length))}; + if ((($a = options === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = (o = $scope.get('Opal')['$coerce_to?'](count, $scope.get('Hash'), "to_hash"))) !== nil && (!$a.$$is_boolean || $a == true))) { + options = o; + count = nil; + } else { + options = nil; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); } - } + } else { + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); + options = $scope.get('Opal').$coerce_to(options, $scope.get('Hash'), "to_hash"); + }; + if ((($a = (($b = count !== false && count !== nil) ? count < 0 : count)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "count must be greater than 0")}; + if (options !== false && options !== nil) { + rng = options['$[]']("random")}; + if ((($a = (($b = rng !== false && rng !== nil) ? rng['$respond_to?']("rand") : rng)) !== nil && (!$a.$$is_boolean || $a == true))) { + rng = $scope.get('SampleRandom').$new(rng) + } else { + rng = $scope.get('Kernel') + }; + if (count !== false && count !== nil) { + } else { + return self[rng.$rand(self.length)] + }; + - result = string.split(pattern); + var abandon, spin, result, i, j, k, targetIndex, oldValue; - if (result.length === 1 && result[0] === string) { - return result; + if (count > self.length) { + count = self.length; } - while ((i = result.indexOf(undefined)) !== -1) { - result.splice(i, 1); - } + switch (count) { + case 0: + return []; + break; + case 1: + return [self[rng.$rand(self.length)]]; + break; + case 2: + i = rng.$rand(self.length); + j = rng.$rand(self.length); + if (i === j) { + j = i === 0 ? i + 1 : i - 1; + } + return [self[i], self[j]]; + break; + default: + if (self.length / count > 3) { + abandon = false; + spin = 0; + + result = $scope.get('Array').$new(count); + i = 1; + + result[0] = rng.$rand(self.length); + while (i < count) { + k = rng.$rand(self.length); + j = 0; + + while (j < i) { + while (k === result[j]) { + spin++; + if (spin > 100) { + abandon = true; + break; + } + k = rng.$rand(self.length); + } + if (abandon) { break; } - if (limit === 0) { - while (result[result.length - 1] === '') { - result.length -= 1; - } - return result; - } + j++; + } - match = pattern.exec(string); + if (abandon) { break; } - if (limit < 0) { - if (match !== null && match[0] === '' && pattern.source.indexOf('(?=') === -1) { - for (i = 0; i < match.length; i++) { - result.push(''); + result[i] = k; + + i++; + } + + if (!abandon) { + i = 0; + while (i < count) { + result[i] = self[result[i]]; + i++; + } + + return result; + } } - } - return result; - } - if (match !== null && match[0] === '') { - result.splice(limit - 1, result.length - 1, result.slice(limit - 1).join('')); - return result; + result = self.slice(); + + for (var c = 0; c < count; c++) { + targetIndex = rng.$rand(self.length); + oldValue = result[c]; + result[c] = result[targetIndex]; + result[targetIndex] = oldValue; + } + + return count === self.length ? result : (result)['$[]'](0, count); } + + }); - i = 0; - while (match !== null) { - i++; - index = pattern.lastIndex; - if (i + 1 === limit) { - break; + Opal.defn(self, '$select', TMP_34 = function() { + var $a, $b, TMP_35, self = this, $iter = TMP_34.$$p, block = $iter || nil; + + TMP_34.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_35 = function(){var self = TMP_35.$$s || this; + + return self.$size()}, TMP_35.$$s = self, TMP_35), $a).call($b, "select") + }; + + var result = []; + + for (var i = 0, length = self.length, item, value; i < length; i++) { + item = self[i]; + + if ((value = Opal.yield1(block, item)) === $breaker) { + return $breaker.$v; + } + + if (value !== false && value !== nil) { + result.push(item); } - match = pattern.exec(string); } - result.splice(limit - 1, result.length - 1, string.slice(index)); return result; - }; + }); - def.$squeeze = function(sets) { - var self = this; + Opal.defn(self, '$select!', TMP_36 = function() { + var $a, $b, TMP_37, $c, self = this, $iter = TMP_36.$$p, block = $iter || nil; + + TMP_36.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_37 = function(){var self = TMP_37.$$s || this; - sets = $slice.call(arguments, 0); + return self.$size()}, TMP_37.$$s = self, TMP_37), $a).call($b, "select!") + }; - if (sets.length === 0) { - return self.replace(/(.)\1+/g, '$1'); - } - var char_class = char_class_from_char_sets(sets); - if (char_class === null) { - return self; - } - return self.replace(new RegExp('(' + char_class + ')\\1+', 'g'), '$1'); + var original = self.length; + ($a = ($c = self).$keep_if, $a.$$p = block.$to_proc(), $a).call($c); + return self.length === original ? nil : self; - }; + }); - Opal.defn(self, '$squeeze!', def['$<<']); + Opal.defn(self, '$shift', function(count) { + var $a, self = this; - def['$start_with?'] = function(prefixes) { - var self = this; + if ((($a = count === undefined) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + return self.shift();}; + count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int"); + if ((($a = count < 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "negative array size")}; + if ((($a = self.length === 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return []}; + return self.splice(0, count); + }); - prefixes = $slice.call(arguments, 0); - - for (var i = 0, length = prefixes.length; i < length; i++) { - var prefix = $scope.get('Opal').$coerce_to(prefixes[i], $scope.get('String'), "to_str").$to_s(); + Opal.alias(self, 'size', 'length'); - if (self.indexOf(prefix) === 0) { - return true; - } - } + Opal.defn(self, '$shuffle', function(rng) { + var self = this; - return false; - - }; + return self.$dup()['$shuffle!'](rng); + }); - def.$strip = function() { + Opal.defn(self, '$shuffle!', function(rng) { var self = this; - return self.replace(/^\s*/, '').replace(/[\s\u0000]*$/, ''); - }; + + var randgen, i = self.length, j, tmp; - Opal.defn(self, '$strip!', def['$<<']); + if (rng !== undefined) { + rng = $scope.get('Opal')['$coerce_to?'](rng, $scope.get('Hash'), "to_hash"); - def.$sub = TMP_8 = function(pattern, replacement) { - var self = this, $iter = TMP_8.$$p, block = $iter || nil; + if (rng !== nil) { + rng = rng['$[]']("random"); - TMP_8.$$p = null; - - if (!pattern.$$is_regexp) { - pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str"); - pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); + if (rng !== nil && rng['$respond_to?']("rand")) { + randgen = rng; + } + } } - var result = pattern.exec(self); - - if (result === null) { - $gvars["~"] = nil - return self.toString(); - } + while (i) { + if (randgen) { + j = randgen.$rand(i).$to_int(); - $scope.get('MatchData').$new(pattern, result) + if (j < 0) { + self.$raise($scope.get('RangeError'), "random number too small " + (j)) + } - if (replacement === undefined) { - if (block === nil) { - self.$raise($scope.get('ArgumentError'), "wrong number of arguments (1 for 2)") + if (j >= i) { + self.$raise($scope.get('RangeError'), "random number too big " + (j)) + } + } + else { + j = Math.floor(Math.random() * i); } - return self.slice(0, result.index) + block(result[0]) + self.slice(result.index + result[0].length); - } - if (replacement.$$is_hash) { - return self.slice(0, result.index) + (replacement)['$[]'](result[0]).$to_s() + self.slice(result.index + result[0].length); + tmp = self[--i]; + self[i] = self[j]; + self[j] = tmp; } - replacement = $scope.get('Opal').$coerce_to(replacement, $scope.get('String'), "to_str"); + return self; + ; + }); - replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { - if (slashes.length % 2 === 0) { - return original; - } - switch (command) { - case "+": - for (var i = result.length - 1; i > 0; i--) { - if (result[i] !== undefined) { - return slashes.slice(1) + result[i]; - } - } - return ''; - case "&": return slashes.slice(1) + result[0]; - case "`": return slashes.slice(1) + self.slice(0, result.index); - case "'": return slashes.slice(1) + self.slice(result.index + result[0].length); - default: return slashes.slice(1) + (result[command] || ''); - } - }).replace(/\\\\/g, '\\'); + Opal.alias(self, 'slice', '[]'); - return self.slice(0, result.index) + replacement + self.slice(result.index + result[0].length); - ; - }; + Opal.defn(self, '$slice!', function(index, length) { + var self = this; - Opal.defn(self, '$sub!', def['$<<']); + + if (index < 0) { + index += self.length; + } - Opal.defn(self, '$succ', def.$next); + if (length != null) { + return self.splice(index, length); + } - Opal.defn(self, '$succ!', def['$<<']); + if (index < 0 || index >= self.length) { + return nil; + } - def.$sum = function(n) { - var self = this; + return self.splice(index, 1)[0]; + + }); - if (n == null) { - n = 16 - } + Opal.defn(self, '$sort', TMP_38 = function() { + var $a, self = this, $iter = TMP_38.$$p, block = $iter || nil; + + TMP_38.$$p = null; + if ((($a = self.length > 1) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return self + }; - n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int"); + if (block === nil) { + block = function(a, b) { + return (a)['$<=>'](b); + }; + } - var result = 0, - length = self.length, - i = 0; + try { + return self.slice().sort(function(x, y) { + var ret = block(x, y); - for (; i < length; i++) { - result += self.charCodeAt(i); - } + if (ret === $breaker) { + throw $breaker; + } + else if (ret === nil) { + self.$raise($scope.get('ArgumentError'), "comparison of " + ((x).$inspect()) + " with " + ((y).$inspect()) + " failed"); + } - if (n <= 0) { - return result; + return $rb_gt(ret, 0) ? 1 : ($rb_lt(ret, 0) ? -1 : 0); + }); + } + catch (e) { + if (e === $breaker) { + return $breaker.$v; + } + else { + throw e; + } } - - return result & (Math.pow(2, n) - 1); ; - }; + }); - def.$swapcase = function() { - var self = this; + Opal.defn(self, '$sort!', TMP_39 = function() { + var $a, $b, self = this, $iter = TMP_39.$$p, block = $iter || nil; + TMP_39.$$p = null; - var str = self.replace(/([a-z]+)|([A-Z]+)/g, function($0,$1,$2) { - return $1 ? $0.toUpperCase() : $0.toLowerCase(); - }); + var result; - if (self.constructor === String) { - return str; + if ((block !== nil)) { + result = ($a = ($b = (self.slice())).$sort, $a.$$p = block.$to_proc(), $a).call($b); + } + else { + result = (self.slice()).$sort(); } - return self.$class().$new(str); - - }; + self.length = 0; + for(var i = 0, length = result.length; i < length; i++) { + self.push(result[i]); + } - Opal.defn(self, '$swapcase!', def['$<<']); + return self; + ; + }); - def.$to_f = function() { + Opal.defn(self, '$take', function(count) { var self = this; - if (self.charAt(0) === '_') { - return 0; + if (count < 0) { + self.$raise($scope.get('ArgumentError')); } - var result = parseFloat(self.replace(/_/g, '')); + return self.slice(0, count); + ; + }); - if (isNaN(result) || result == Infinity || result == -Infinity) { - return 0; - } - else { - return result; + Opal.defn(self, '$take_while', TMP_40 = function() { + var self = this, $iter = TMP_40.$$p, block = $iter || nil; + + TMP_40.$$p = null; + + var result = []; + + for (var i = 0, length = self.length, item, value; i < length; i++) { + item = self[i]; + + if ((value = block(item)) === $breaker) { + return $breaker.$v; + } + + if (value === false || value === nil) { + return result; + } + + result.push(item); } + + return result; - }; + }); - def.$to_i = function(base) { + Opal.defn(self, '$to_a', function() { + var self = this; + + return self; + }); + + Opal.alias(self, 'to_ary', 'to_a'); + + Opal.defn(self, '$to_h', function() { var self = this; - if (base == null) { - base = 10 - } - var result, - string = self.toLowerCase(), - radix = $scope.get('Opal').$coerce_to(base, $scope.get('Integer'), "to_int"); + var i, len = self.length, ary, key, val, hash = $hash2([], {}); - if (radix === 1 || radix < 0 || radix > 36) { - self.$raise($scope.get('ArgumentError'), "invalid radix " + (radix)) + for (i = 0; i < len; i++) { + ary = $scope.get('Opal')['$coerce_to?'](self[i], $scope.get('Array'), "to_ary"); + if (!ary.$$is_array) { + self.$raise($scope.get('TypeError'), "wrong element type " + ((ary).$class()) + " at " + (i) + " (expected array)") + } + if (ary.length !== 2) { + self.$raise($scope.get('ArgumentError'), "wrong array length at " + (i) + " (expected 2, was " + ((ary).$length()) + ")") + } + key = ary[0]; + val = ary[1]; + Opal.hash_put(hash, key, val); } - if (/^\s*_/.test(string)) { - return 0; - } + return hash; + ; + }); - string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/, function (original, head, flag, tail) { - switch (tail.charAt(0)) { - case '+': - case '-': - return original; - case '0': - if (tail.charAt(1) === 'x' && flag === '0x' && (radix === 0 || radix === 16)) { - return original; + Opal.alias(self, 'to_s', 'inspect'); + + Opal.defn(self, '$transpose', function() { + var $a, $b, TMP_41, self = this, result = nil, max = nil; + + if ((($a = self['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return []}; + result = []; + max = nil; + ($a = ($b = self).$each, $a.$$p = (TMP_41 = function(row){var self = TMP_41.$$s || this, $a, $b, TMP_42; +if (row == null) row = nil; + if ((($a = $scope.get('Array')['$==='](row)) !== nil && (!$a.$$is_boolean || $a == true))) { + row = row.$to_a() + } else { + row = $scope.get('Opal').$coerce_to(row, $scope.get('Array'), "to_ary").$to_a() + }; + ((($a = max) !== false && $a !== nil) ? $a : max = row.length); + if ((($a = (row.length)['$!='](max)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('IndexError'), "element size differs (" + (row.length) + " should be " + (max))}; + return ($a = ($b = (row.length)).$times, $a.$$p = (TMP_42 = function(i){var self = TMP_42.$$s || this, $a, $b, $c, entry = nil; +if (i == null) i = nil; + entry = (($a = i, $b = result, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, [])))); + return entry['$<<'](row.$at(i));}, TMP_42.$$s = self, TMP_42), $a).call($b);}, TMP_41.$$s = self, TMP_41), $a).call($b); + return result; + }); + + Opal.defn(self, '$uniq', TMP_43 = function() { + var self = this, $iter = TMP_43.$$p, block = $iter || nil; + + TMP_43.$$p = null; + + var hash = $hash2([], {}), i, length, item, key; + + if (block === nil) { + for (i = 0, length = self.length; i < length; i++) { + item = self[i]; + if (Opal.hash_get(hash, item) === undefined) { + Opal.hash_put(hash, item, item); } } - switch (flag) { - case '0b': - if (radix === 0 || radix === 2) { - radix = 2; - return head + tail; - } - break; - case '0': - case '0o': - if (radix === 0 || radix === 8) { - radix = 8; - return head + tail; - } - break; - case '0d': - if (radix === 0 || radix === 10) { - radix = 10; - return head + tail; - } - break; - case '0x': - if (radix === 0 || radix === 16) { - radix = 16; - return head + tail; + } + else { + for (i = 0, length = self.length; i < length; i++) { + item = self[i]; + key = Opal.yield1(block, item); + if (Opal.hash_get(hash, key) === undefined) { + Opal.hash_put(hash, key, item); } - break; } - return original - }); + } - result = parseInt(string.replace(/_(?!_)/g, ''), radix); - return isNaN(result) ? 0 : result; + return hash.$values(); ; - }; + }); - def.$to_proc = function() { - var $a, $b, TMP_9, self = this, sym = nil; + Opal.defn(self, '$uniq!', TMP_44 = function() { + var self = this, $iter = TMP_44.$$p, block = $iter || nil; - sym = self; - return ($a = ($b = self).$proc, $a.$$p = (TMP_9 = function(args){var self = TMP_9.$$s || this, block, $a, $b, obj = nil; -args = $slice.call(arguments, 0); - block = TMP_9.$$p || nil, TMP_9.$$p = null; - if ((($a = args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "no receiver given")}; - obj = args.$shift(); - return ($a = ($b = obj).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, [sym].concat(args));}, TMP_9.$$s = self, TMP_9), $a).call($b); - }; + TMP_44.$$p = null; + + var original_length = self.length, hash = $hash2([], {}), i, length, item, key; - def.$to_s = function() { - var self = this; + for (i = 0, length = original_length; i < length; i++) { + item = self[i]; + key = (block === nil ? item : Opal.yield1(block, item)); - return self.toString(); - }; + if (Opal.hash_get(hash, key) === undefined) { + Opal.hash_put(hash, key, item); + continue; + } - Opal.defn(self, '$to_str', def.$to_s); + self.splice(i, 1); + length--; + i--; + } - Opal.defn(self, '$to_sym', def.$intern); + return self.length === original_length ? nil : self; + ; + }); - def.$tr = function(from, to) { - var self = this; + Opal.defn(self, '$unshift', function() { + var self = this, $splat_index = nil; - from = $scope.get('Opal').$coerce_to(from, $scope.get('String'), "to_str").$to_s(); - to = $scope.get('Opal').$coerce_to(to, $scope.get('String'), "to_str").$to_s(); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 0]; + } - if (from.length == 0 || from === to) { - return self; + for (var i = objects.length - 1; i >= 0; i--) { + self.unshift(objects[i]); } + + return self; + }); - var subs = {}; - var from_chars = from.split(''); - var from_length = from_chars.length; - var to_chars = to.split(''); - var to_length = to_chars.length; + Opal.defn(self, '$values_at', function() { + var $a, $b, TMP_45, self = this, out = nil, $splat_index = nil; - var inverse = false; - var global_sub = null; - if (from_chars[0] === '^' && from_chars.length > 1) { - inverse = true; - from_chars.shift(); - global_sub = to_chars[to_length - 1] - from_length -= 1; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; } - - var from_chars_expanded = []; - var last_from = null; - var in_range = false; - for (var i = 0; i < from_length; i++) { - var ch = from_chars[i]; - if (last_from == null) { - last_from = ch; - from_chars_expanded.push(ch); - } - else if (ch === '-') { - if (last_from === '-') { - from_chars_expanded.push('-'); - from_chars_expanded.push('-'); - } - else if (i == from_length - 1) { - from_chars_expanded.push('-'); + out = []; + ($a = ($b = args).$each, $a.$$p = (TMP_45 = function(elem){var self = TMP_45.$$s || this, $a, $b, TMP_46, finish = nil, start = nil, i = nil; +if (elem == null) elem = nil; + if ((($a = elem['$kind_of?']($scope.get('Range'))) !== nil && (!$a.$$is_boolean || $a == true))) { + finish = $scope.get('Opal').$coerce_to(elem.$last(), $scope.get('Integer'), "to_int"); + start = $scope.get('Opal').$coerce_to(elem.$first(), $scope.get('Integer'), "to_int"); + + if (start < 0) { + start = start + self.length; + return nil;; } - else { - in_range = true; + + + if (finish < 0) { + finish = finish + self.length; } - } - else if (in_range) { - var start = last_from.charCodeAt(0); - var end = ch.charCodeAt(0); - if (start > end) { - self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") + if (elem['$exclude_end?']()) { + finish--; } - for (var c = start + 1; c < end; c++) { - from_chars_expanded.push(String.fromCharCode(c)); + if (finish < start) { + return nil;; } - from_chars_expanded.push(ch); - in_range = null; - last_from = null; - } - else { - from_chars_expanded.push(ch); - } - } + + return ($a = ($b = start).$upto, $a.$$p = (TMP_46 = function(i){var self = TMP_46.$$s || this; +if (i == null) i = nil; + return out['$<<'](self.$at(i))}, TMP_46.$$s = self, TMP_46), $a).call($b, finish); + } else { + i = $scope.get('Opal').$coerce_to(elem, $scope.get('Integer'), "to_int"); + return out['$<<'](self.$at(i)); + }}, TMP_45.$$s = self, TMP_45), $a).call($b); + return out; + }); - from_chars = from_chars_expanded; - from_length = from_chars.length; + return (Opal.defn(self, '$zip', TMP_47 = function() { + var $a, self = this, $iter = TMP_47.$$p, block = $iter || nil, $splat_index = nil; - if (inverse) { - for (var i = 0; i < from_length; i++) { - subs[from_chars[i]] = true; - } + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var others = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + others[$splat_index] = arguments[$splat_index + 0]; } - else { - if (to_length > 0) { - var to_chars_expanded = []; - var last_to = null; - var in_range = false; - for (var i = 0; i < to_length; i++) { - var ch = to_chars[i]; - if (last_from == null) { - last_from = ch; - to_chars_expanded.push(ch); - } - else if (ch === '-') { - if (last_to === '-') { - to_chars_expanded.push('-'); - to_chars_expanded.push('-'); - } - else if (i == to_length - 1) { - to_chars_expanded.push('-'); - } - else { - in_range = true; - } - } - else if (in_range) { - var start = last_from.charCodeAt(0); - var end = ch.charCodeAt(0); - if (start > end) { - self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") - } - for (var c = start + 1; c < end; c++) { - to_chars_expanded.push(String.fromCharCode(c)); - } - to_chars_expanded.push(ch); - in_range = null; - last_from = null; - } - else { - to_chars_expanded.push(ch); - } - } + TMP_47.$$p = null; + + var result = [], size = self.length, part, o, i, j, jj; - to_chars = to_chars_expanded; - to_length = to_chars.length; + for (j = 0, jj = others.length; j < jj; j++) { + o = others[j]; + if (o.$$is_array) { + continue; } - - var length_diff = from_length - to_length; - if (length_diff > 0) { - var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); - for (var i = 0; i < length_diff; i++) { - to_chars.push(pad_char); + if (o.$$is_enumerator) { + if (o.$size() === Infinity) { + others[j] = o.$take(size); + } else { + others[j] = o.$to_a(); } + continue; } + others[j] = (((($a = $scope.get('Opal')['$coerce_to?'](o, $scope.get('Array'), "to_ary")) !== false && $a !== nil) ? $a : $scope.get('Opal')['$coerce_to!'](o, $scope.get('Enumerator'), "each"))).$to_a(); + } - for (var i = 0; i < from_length; i++) { - subs[from_chars[i]] = to_chars[i]; + for (i = 0; i < size; i++) { + part = [self[i]]; + + for (j = 0, jj = others.length; j < jj; j++) { + o = others[j][i]; + + if (o == null) { + o = nil; + } + + part[j + 1] = o; } + + result[i] = part; } - var new_str = '' - for (var i = 0, length = self.length; i < length; i++) { - var ch = self.charAt(i); - var sub = subs[ch]; - if (inverse) { - new_str += (sub == null ? global_sub : ch); - } - else { - new_str += (sub != null ? sub : ch); + if (block !== nil) { + for (i = 0; i < size; i++) { + block(result[i]); } + + return nil; } - return new_str; + + return result; - }; + }), nil) && 'zip'; + })($scope.base, Array); +}; - Opal.defn(self, '$tr!', def['$<<']); +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/hash"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - def.$tr_s = function(from, to) { - var self = this; + Opal.add_stubs(['$require', '$include', '$coerce_to?', '$[]', '$merge!', '$allocate', '$raise', '$==', '$coerce_to!', '$lambda?', '$abs', '$arity', '$call', '$enum_for', '$size', '$inspect', '$flatten', '$eql?', '$default', '$to_proc', '$dup', '$===', '$default_proc', '$default_proc=', '$default=', '$alias_method']); + self.$require("corelib/enumerable"); + return (function($base, $super) { + function $Hash(){}; + var self = $Hash = $klass($base, $super, 'Hash', $Hash); - from = $scope.get('Opal').$coerce_to(from, $scope.get('String'), "to_str").$to_s(); - to = $scope.get('Opal').$coerce_to(to, $scope.get('String'), "to_str").$to_s(); - - if (from.length == 0) { - return self; - } + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_5, TMP_7, TMP_9, TMP_11, TMP_12, TMP_14, TMP_15, TMP_16, TMP_18, TMP_20, TMP_22; - var subs = {}; - var from_chars = from.split(''); - var from_length = from_chars.length; - var to_chars = to.split(''); - var to_length = to_chars.length; + def.proc = def.none = nil; + self.$include($scope.get('Enumerable')); - var inverse = false; - var global_sub = null; - if (from_chars[0] === '^' && from_chars.length > 1) { - inverse = true; - from_chars.shift(); - global_sub = to_chars[to_length - 1] - from_length -= 1; + def.$$is_hash = true; + + Opal.defs(self, '$[]', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var argv = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + argv[$splat_index] = arguments[$splat_index + 0]; } + + var hash, argc = argv.length, i; - var from_chars_expanded = []; - var last_from = null; - var in_range = false; - for (var i = 0; i < from_length; i++) { - var ch = from_chars[i]; - if (last_from == null) { - last_from = ch; - from_chars_expanded.push(ch); + if (argc === 1) { + hash = $scope.get('Opal')['$coerce_to?'](argv['$[]'](0), $scope.get('Hash'), "to_hash"); + if (hash !== nil) { + return self.$allocate()['$merge!'](hash); } - else if (ch === '-') { - if (last_from === '-') { - from_chars_expanded.push('-'); - from_chars_expanded.push('-'); - } - else if (i == from_length - 1) { - from_chars_expanded.push('-'); - } - else { - in_range = true; - } + + argv = $scope.get('Opal')['$coerce_to?'](argv['$[]'](0), $scope.get('Array'), "to_ary"); + if (argv === nil) { + self.$raise($scope.get('ArgumentError'), "odd number of arguments for Hash") } - else if (in_range) { - var start = last_from.charCodeAt(0); - var end = ch.charCodeAt(0); - if (start > end) { - self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") - } - for (var c = start + 1; c < end; c++) { - from_chars_expanded.push(String.fromCharCode(c)); + + argc = argv.length; + hash = self.$allocate(); + + for (i = 0; i < argc; i++) { + if (!argv[i].$$is_array) continue; + switch(argv[i].length) { + case 1: + hash.$store(argv[i][0], nil); + break; + case 2: + hash.$store(argv[i][0], argv[i][1]); + break; + default: + self.$raise($scope.get('ArgumentError'), "invalid number of elements (" + (argv[i].length) + " for 1..2)") } - from_chars_expanded.push(ch); - in_range = null; - last_from = null; - } - else { - from_chars_expanded.push(ch); } + + return hash; } - from_chars = from_chars_expanded; - from_length = from_chars.length; + if (argc % 2 !== 0) { + self.$raise($scope.get('ArgumentError'), "odd number of arguments for Hash") + } - if (inverse) { - for (var i = 0; i < from_length; i++) { - subs[from_chars[i]] = true; - } + hash = self.$allocate(); + + for (i = 0; i < argc; i += 2) { + hash.$store(argv[i], argv[i + 1]); } - else { - if (to_length > 0) { - var to_chars_expanded = []; - var last_to = null; - var in_range = false; - for (var i = 0; i < to_length; i++) { - var ch = to_chars[i]; - if (last_from == null) { - last_from = ch; - to_chars_expanded.push(ch); - } - else if (ch === '-') { - if (last_to === '-') { - to_chars_expanded.push('-'); - to_chars_expanded.push('-'); - } - else if (i == to_length - 1) { - to_chars_expanded.push('-'); - } - else { - in_range = true; - } - } - else if (in_range) { - var start = last_from.charCodeAt(0); - var end = ch.charCodeAt(0); - if (start > end) { - self.$raise($scope.get('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") - } - for (var c = start + 1; c < end; c++) { - to_chars_expanded.push(String.fromCharCode(c)); - } - to_chars_expanded.push(ch); - in_range = null; - last_from = null; - } - else { - to_chars_expanded.push(ch); - } - } - to_chars = to_chars_expanded; - to_length = to_chars.length; - } + return hash; + ; + }); - var length_diff = from_length - to_length; - if (length_diff > 0) { - var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); - for (var i = 0; i < length_diff; i++) { - to_chars.push(pad_char); - } + Opal.defs(self, '$allocate', function() { + var self = this; + + + var hash = new self.$$alloc(); + + Opal.hash_init(hash); + + hash.none = nil; + hash.proc = nil; + + return hash; + + }); + + Opal.defs(self, '$try_convert', function(obj) { + var self = this; + + return $scope.get('Opal')['$coerce_to?'](obj, $scope.get('Hash'), "to_hash"); + }); + + Opal.defn(self, '$initialize', TMP_1 = function(defaults) { + var self = this, $iter = TMP_1.$$p, block = $iter || nil; + + TMP_1.$$p = null; + + if (defaults !== undefined && block !== nil) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (1 for 0)") + } + self.none = (defaults === undefined ? nil : defaults); + self.proc = block; + ; + return self; + }); + + Opal.defn(self, '$==', function(other) { + var self = this; + + + if (self === other) { + return true; + } + + if (!other.$$is_hash) { + return false; + } + + if (self.$$keys.length !== other.$$keys.length) { + return false; + } + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, other_value; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + other_value = other.$$smap[key]; + } else { + value = key.value; + other_value = Opal.hash_get(other, key.key); } - for (var i = 0; i < from_length; i++) { - subs[from_chars[i]] = to_chars[i]; + if (other_value === undefined || !value['$eql?'](other_value)) { + return false; } } - var new_str = '' - var last_substitute = null - for (var i = 0, length = self.length; i < length; i++) { - var ch = self.charAt(i); - var sub = subs[ch] - if (inverse) { - if (sub == null) { - if (last_substitute == null) { - new_str += global_sub; - last_substitute = true; - } - } - else { - new_str += ch; - last_substitute = null; - } - } - else { - if (sub != null) { - if (last_substitute == null || last_substitute !== sub) { - new_str += sub; - last_substitute = sub; - } + + return true; + + }); + + Opal.defn(self, '$[]', function(key) { + var self = this; + + + var value = Opal.hash_get(self, key); + + if (value !== undefined) { + return value; + } + + return self.$default(key); + + }); + + Opal.defn(self, '$[]=', function(key, value) { + var self = this; + + + Opal.hash_put(self, key, value); + return value; + + }); + + Opal.defn(self, '$assoc', function(object) { + var self = this; + + + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + if ((key)['$=='](object)) { + return [key, self.$$smap[key]]; } - else { - new_str += ch; - last_substitute = null; + } else { + if ((key.key)['$=='](object)) { + return [key.key, key.value]; } } } - return new_str; + + return nil; - }; + }); + + Opal.defn(self, '$clear', function() { + var self = this; - Opal.defn(self, '$tr_s!', def['$<<']); + + Opal.hash_init(self); + return self; + + }); - def.$upcase = function() { + Opal.defn(self, '$clone', function() { var self = this; - return self.toUpperCase(); - }; + + var hash = new self.$$class.$$alloc(); + + Opal.hash_init(hash); + Opal.hash_clone(self, hash); + + return hash; + + }); + + Opal.defn(self, '$default', function(key) { + var self = this; - Opal.defn(self, '$upcase!', def['$<<']); + + if (key !== undefined && self.proc !== nil) { + return self.proc.$call(self, key); + } + return self.none; + ; + }); - def.$freeze = function() { + Opal.defn(self, '$default=', function(object) { var self = this; - return self; - }; + + self.proc = nil; + self.none = object; + + return object; + + }); - def['$frozen?'] = function() { + Opal.defn(self, '$default_proc', function() { var self = this; - return true; - }; + return self.proc; + }); - def.$upto = TMP_10 = function(stop, excl) { - var self = this, $iter = TMP_10.$$p, block = $iter || nil; + Opal.defn(self, '$default_proc=', function(proc) { + var self = this; - if (excl == null) { - excl = false + + if (proc !== nil) { + proc = $scope.get('Opal')['$coerce_to!'](proc, $scope.get('Proc'), "to_proc"); + + if (proc['$lambda?']() && proc.$arity().$abs() !== 2) { + self.$raise($scope.get('TypeError'), "default_proc takes two arguments"); + } } - TMP_10.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("upto", stop, excl) - }; - stop = $scope.get('Opal').$coerce_to(stop, $scope.get('String'), "to_str"); + + self.none = nil; + self.proc = proc; + + return proc; + ; + }); + + Opal.defn(self, '$delete', TMP_2 = function(key) { + var self = this, $iter = TMP_2.$$p, block = $iter || nil; + + TMP_2.$$p = null; - var a, b, s = self.toString(); + var value = Opal.hash_delete(self, key); - if (s.length === 1 && stop.length === 1) { + if (value !== undefined) { + return value; + } - a = s.charCodeAt(0); - b = stop.charCodeAt(0); + if (block !== nil) { + return block.$call(key); + } - while (a <= b) { - if (excl && a === b) { - break; - } - block(String.fromCharCode(a)); - a += 1; - } + return nil; + + }); + + Opal.defn(self, '$delete_if', TMP_3 = function() { + var $a, $b, TMP_4, self = this, $iter = TMP_3.$$p, block = $iter || nil; - } else if (parseInt(s).toString() === s && parseInt(stop).toString() === stop) { + TMP_3.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_4 = function(){var self = TMP_4.$$s || this; - a = parseInt(s); - b = parseInt(stop); + return self.$size()}, TMP_4.$$s = self, TMP_4), $a).call($b, "delete_if") + }; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; - while (a <= b) { - if (excl && a === b) { - break; - } - block(a.toString()); - a += 1; + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; } - } else { + obj = block(key, value); - while (s.length <= stop.length && s <= stop) { - if (excl && s === stop) { - break; - } - block(s); - s = (s).$succ(); + if (obj === $breaker) { + return $breaker.$v; } + if (obj !== false && obj !== nil) { + if (Opal.hash_delete(self, key) !== undefined) { + length--; + i--; + } + } } + return self; - }; + }); - - function char_class_from_char_sets(sets) { - function explode_sequences_in_character_set(set) { - var result = '', - i, len = set.length, - curr_char, - skip_next_dash, - char_code_from, - char_code_upto, - char_code; - for (i = 0; i < len; i++) { - curr_char = set.charAt(i); - if (curr_char === '-' && i > 0 && i < (len - 1) && !skip_next_dash) { - char_code_from = set.charCodeAt(i - 1); - char_code_upto = set.charCodeAt(i + 1); - if (char_code_from > char_code_upto) { - self.$raise($scope.get('ArgumentError'), "invalid range \"" + (char_code_from) + "-" + (char_code_upto) + "\" in string transliteration") - } - for (char_code = char_code_from + 1; char_code < char_code_upto + 1; char_code++) { - result += String.fromCharCode(char_code); - } - skip_next_dash = true; - i++; - } else { - skip_next_dash = (curr_char === '\\'); - result += curr_char; - } - } - return result; - } - - function intersection(setA, setB) { - if (setA.length === 0) { - return setB; - } - var result = '', - i, len = setA.length, - chr; - for (i = 0; i < len; i++) { - chr = setA.charAt(i); - if (setB.indexOf(chr) !== -1) { - result += chr; - } - } - return result; - } + Opal.alias(self, 'dup', 'clone'); - var i, len, set, neg, chr, tmp, - pos_intersection = '', - neg_intersection = ''; + Opal.defn(self, '$each', TMP_5 = function() { + var $a, $b, TMP_6, self = this, $iter = TMP_5.$$p, block = $iter || nil; - for (i = 0, len = sets.length; i < len; i++) { - set = $scope.get('Opal').$coerce_to(sets[i], $scope.get('String'), "to_str"); - neg = (set.charAt(0) === '^' && set.length > 1); - set = explode_sequences_in_character_set(neg ? set.slice(1) : set); - if (neg) { - neg_intersection = intersection(neg_intersection, set); + TMP_5.$$p = null; + if (block !== false && block !== nil) { } else { - pos_intersection = intersection(pos_intersection, set); - } - } + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this; - if (pos_intersection.length > 0 && neg_intersection.length > 0) { - tmp = ''; - for (i = 0, len = pos_intersection.length; i < len; i++) { - chr = pos_intersection.charAt(i); - if (neg_intersection.indexOf(chr) === -1) { - tmp += chr; - } + return self.$size()}, TMP_6.$$s = self, TMP_6), $a).call($b, "each") + }; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; } - pos_intersection = tmp; - neg_intersection = ''; - } - if (pos_intersection.length > 0) { - return '[' + $scope.get('Regexp').$escape(pos_intersection) + ']'; - } + obj = Opal.yield1(block, [key, value]); - if (neg_intersection.length > 0) { - return '[^' + $scope.get('Regexp').$escape(neg_intersection) + ']'; + if (obj === $breaker) { + return $breaker.$v; + } } - return null; - } - - })(self, null); - return Opal.cdecl($scope, 'Symbol', $scope.get('String')); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/string/inheritance"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_times(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; - - Opal.add_stubs(['$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$class', '$clone', '$respond_to?', '$==', '$inspect', '$map', '$split', '$enum_for', '$each_line', '$to_a', '$%']); - (function($base, $super) { - function $String(){}; - var self = $String = $klass($base, $super, 'String', $String); + return self; + + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$each_key', TMP_7 = function() { + var $a, $b, TMP_8, self = this, $iter = TMP_7.$$p, block = $iter || nil; - return (Opal.defs(self, '$inherited', function(klass) { - var self = this, replace = nil; + TMP_7.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_8 = function(){var self = TMP_8.$$s || this; - replace = $scope.get('Class').$new((($scope.get('String')).$$scope.get('Wrapper'))); + return self.$size()}, TMP_8.$$s = self, TMP_8), $a).call($b, "each_key") + }; - klass.$$proto = replace.$$proto; - klass.$$proto.$$class = klass; - klass.$$alloc = replace.$$alloc; - klass.$$parent = (($scope.get('String')).$$scope.get('Wrapper')); + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; - klass.$allocate = replace.$allocate; - klass.$new = replace.$new; + if (block(key.$$is_string ? key : key.key) === $breaker) { + return $breaker.$v; + } + } + + return self; - }), nil) && 'inherited' - })(self, null); - return (function($base, $super) { - function $Wrapper(){}; - var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper); + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_6, TMP_8; + Opal.alias(self, 'each_pair', 'each'); - def.literal = nil; - def.$$is_string = true; + Opal.defn(self, '$each_value', TMP_9 = function() { + var $a, $b, TMP_10, self = this, $iter = TMP_9.$$p, block = $iter || nil; - Opal.defs(self, '$allocate', TMP_1 = function(string) { - var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, obj = nil; + TMP_9.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_10 = function(){var self = TMP_10.$$s || this; - if (string == null) { - string = "" - } - TMP_1.$$p = null; - obj = Opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []); - obj.literal = string; - return obj; - }); + return self.$size()}, TMP_10.$$s = self, TMP_10), $a).call($b, "each_value") + }; + + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; - Opal.defs(self, '$new', TMP_2 = function(args) { - var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil, obj = nil; + if (block(key.$$is_string ? self.$$smap[key] : key.value) === $breaker) { + return $breaker.$v; + } + } - args = $slice.call(arguments, 0); - TMP_2.$$p = null; - obj = self.$allocate(); - ($a = ($b = obj).$initialize, $a.$$p = block.$to_proc(), $a).apply($b, [].concat(args)); - return obj; + return self; + }); - Opal.defs(self, '$[]', function(objects) { + Opal.defn(self, '$empty?', function() { var self = this; - objects = $slice.call(arguments, 0); - return self.$allocate(objects); + return self.$$keys.length === 0; }); - def.$initialize = function(string) { - var self = this; + Opal.alias(self, 'eql?', '=='); - if (string == null) { - string = "" - } - return self.literal = string; - }; + Opal.defn(self, '$fetch', TMP_11 = function(key, defaults) { + var self = this, $iter = TMP_11.$$p, block = $iter || nil; - def.$method_missing = TMP_3 = function(args) { - var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil, result = nil; + TMP_11.$$p = null; + + var value = Opal.hash_get(self, key); - args = $slice.call(arguments, 0); - TMP_3.$$p = null; - result = ($a = ($b = self.literal).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, [].concat(args)); - if ((($a = result.$$is_string != null) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = result == self.literal) !== nil && (!$a.$$is_boolean || $a == true))) { - return self - } else { - return self.$class().$allocate(result) - } - } else { - return result - }; - }; + if (value !== undefined) { + return value; + } - def.$initialize_copy = function(other) { - var self = this; + if (block !== nil) { + value = block(key); - return self.literal = (other.literal).$clone(); - }; + if (value === $breaker) { + return $breaker.$v; + } - def['$respond_to?'] = TMP_4 = function(name) {var $zuper = $slice.call(arguments, 0); - var $a, self = this, $iter = TMP_4.$$p, $yield = $iter || nil; + return value; + } - TMP_4.$$p = null; - return ((($a = Opal.find_super_dispatcher(self, 'respond_to?', TMP_4, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name)); - }; + if (defaults !== undefined) { + return defaults; + } + + return self.$raise($scope.get('KeyError'), "key not found: " + (key.$inspect())); + }); - def['$=='] = function(other) { + Opal.defn(self, '$flatten', function(level) { var self = this; - return self.literal['$=='](other); - }; + if (level == null) { + level = 1 + } + level = $scope.get('Opal')['$coerce_to!'](level, $scope.get('Integer'), "to_int"); + + var result = []; - Opal.defn(self, '$eql?', def['$==']); + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; - Opal.defn(self, '$===', def['$==']); + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } - def.$to_s = function() { - var self = this; + result.push(key); - return self.literal; - }; + if (value.$$is_array) { + if (level === 1) { + result.push(value); + continue; + } - Opal.defn(self, '$to_str', def.$to_s); + result = result.concat((value).$flatten(level - 2)); + continue; + } - def.$inspect = function() { - var self = this; + result.push(value); + } - return self.literal.$inspect(); - }; + return result; + + }); - def['$+'] = function(other) { + Opal.defn(self, '$has_key?', function(key) { var self = this; - return $rb_plus(self.literal, other); - }; + return Opal.hash_get(self, key) !== undefined; + }); - def['$*'] = function(other) { + Opal.defn(self, '$has_value?', function(value) { var self = this; - var result = $rb_times(self.literal, other); + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; - if (result.$$is_string) { - return self.$class().$allocate(result) - } - else { - return result; + if (((key.$$is_string ? self.$$smap[key] : key.value))['$=='](value)) { + return true; + } } - ; - }; - def.$split = function(pattern, limit) { - var $a, $b, TMP_5, self = this; - - return ($a = ($b = self.literal.$split(pattern, limit)).$map, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this; -if (str == null) str = nil; - return self.$class().$allocate(str)}, TMP_5.$$s = self, TMP_5), $a).call($b); - }; + return false; + + }); - def.$replace = function(string) { + Opal.defn(self, '$hash', function() { var self = this; - return self.literal = string; - }; + + var top = (Opal.hash_ids === undefined), + hash_id = self.$object_id(), + result = ['Hash'], + key, item; - def.$each_line = TMP_6 = function(separator) { - var $a, $b, TMP_7, self = this, $iter = TMP_6.$$p, $yield = $iter || nil; - if ($gvars["/"] == null) $gvars["/"] = nil; + try { + if (top) { + Opal.hash_ids = {}; + } - if (separator == null) { - separator = $gvars["/"] - } - TMP_6.$$p = null; - if (($yield !== nil)) { - } else { - return self.$enum_for("each_line", separator) - }; - return ($a = ($b = self.literal).$each_line, $a.$$p = (TMP_7 = function(str){var self = TMP_7.$$s || this, $a; -if (str == null) str = nil; - return $a = Opal.yield1($yield, self.$class().$allocate(str)), $a === $breaker ? $a : $a}, TMP_7.$$s = self, TMP_7), $a).call($b, separator); - }; - - def.$lines = TMP_8 = function(separator) { - var $a, $b, self = this, $iter = TMP_8.$$p, block = $iter || nil, e = nil; - if ($gvars["/"] == null) $gvars["/"] = nil; + if (Opal.hash_ids.hasOwnProperty(hash_id)) { + return 'self'; + } - if (separator == null) { - separator = $gvars["/"] - } - TMP_8.$$p = null; - e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator); - if (block !== false && block !== nil) { - return self - } else { - return e.$to_a() - }; - }; + for (key in Opal.hash_ids) { + if (Opal.hash_ids.hasOwnProperty(key)) { + item = Opal.hash_ids[key]; + if (self['$eql?'](item)) { + return 'self'; + } + } + } - return (def['$%'] = function(data) { - var self = this; + Opal.hash_ids[hash_id] = self; - return self.literal['$%'](data); - }, nil) && '%'; - })($scope.get('String'), null); -}; + for (var i = 0, keys = self.$$keys, length = keys.length; i < length; i++) { + key = keys[i]; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/match_data"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; + if (key.$$is_string) { + result.push([key, self.$$smap[key].$hash()]); + } else { + result.push([key.key_hash, key.value.$hash()]); + } + } - Opal.add_stubs(['$attr_reader', '$[]', '$raise', '$===', '$inspect', '$to_a', '$coerce_to!']); - return (function($base, $super) { - function $MatchData(){}; - var self = $MatchData = $klass($base, $super, 'MatchData', $MatchData); + return result.sort().join(); - var def = self.$$proto, $scope = self.$$scope; + } finally { + if (top) { + delete Opal.hash_ids; + } + } + + }); - def.matches = nil; - self.$attr_reader("post_match", "pre_match", "regexp", "string"); + Opal.alias(self, 'include?', 'has_key?'); - def.$initialize = function(regexp, match_groups) { + Opal.defn(self, '$index', function(object) { var self = this; - $gvars["~"] = self; - self.regexp = regexp; - self.begin = match_groups.index; - self.string = match_groups.input; - self.pre_match = match_groups.input.slice(0, match_groups.index); - self.post_match = match_groups.input.slice(match_groups.index + match_groups[0].length); - self.matches = []; - for (var i = 0, length = match_groups.length; i < length; i++) { - var group = match_groups[i]; + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; - if (group == null) { - self.matches.push(nil); + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; } - else { - self.matches.push(group); + + if ((value)['$=='](object)) { + return key; } } + + return nil; - }; + }); - def['$[]'] = function(args) { - var $a, self = this; + Opal.defn(self, '$indexes', function() { + var self = this, $splat_index = nil; - args = $slice.call(arguments, 0); - return ($a = self.matches)['$[]'].apply($a, [].concat(args)); - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + + var result = []; - def.$offset = function(n) { - var self = this; + for (var i = 0, length = args.length, key, value; i < length; i++) { + key = args[i]; + value = Opal.hash_get(self, key); - - if (n !== 0) { - self.$raise($scope.get('ArgumentError'), "MatchData#offset only supports 0th element") + if (value === undefined) { + result.push(self.$default()); + continue; + } + + result.push(value); } - return [self.begin, self.begin + self.matches[n].length]; - ; - }; - def['$=='] = function(other) { - var $a, $b, $c, $d, self = this; + return result; + + }); - if ((($a = $scope.get('MatchData')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - return false - }; - return ($a = ($b = ($c = ($d = self.string == other.string, $d !== false && $d !== nil ?self.regexp.toString() == other.regexp.toString() : $d), $c !== false && $c !== nil ?self.pre_match == other.pre_match : $c), $b !== false && $b !== nil ?self.post_match == other.post_match : $b), $a !== false && $a !== nil ?self.begin == other.begin : $a); - }; + Opal.alias(self, 'indices', 'indexes'); - Opal.defn(self, '$eql?', def['$==']); + var inspect_ids; - def.$begin = function(n) { + Opal.defn(self, '$inspect', function() { var self = this; - if (n !== 0) { - self.$raise($scope.get('ArgumentError'), "MatchData#begin only supports 0th element") - } - return self.begin; - ; - }; + var top = (inspect_ids === undefined), + hash_id = self.$object_id(), + result = []; - def.$end = function(n) { - var self = this; + try { + if (top) { + inspect_ids = {}; + } - - if (n !== 0) { - self.$raise($scope.get('ArgumentError'), "MatchData#end only supports 0th element") - } - return self.begin + self.matches[n].length; - ; - }; + if (inspect_ids.hasOwnProperty(hash_id)) { + return '{...}'; + } - def.$captures = function() { - var self = this; + inspect_ids[hash_id] = true; - return self.matches.slice(1); - }; + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; - def.$inspect = function() { - var self = this; + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } - - var str = "#' + value.$inspect()); + } - for (var i = 1, length = self.matches.length; i < length; i++) { - str += " " + i + ":" + (self.matches[i]).$inspect(); - } + return '{' + result.join(', ') + '}'; - return str + ">"; - ; - }; + } finally { + if (top) { + inspect_ids = undefined; + } + } + + }); - def.$length = function() { + Opal.defn(self, '$invert', function() { var self = this; - return self.matches.length; - }; + + var hash = Opal.hash(); - Opal.defn(self, '$size', def.$length); + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; - def.$to_a = function() { - var self = this; + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } - return self.matches; - }; + Opal.hash_put(hash, value, key); + } - def.$to_s = function() { - var self = this; + return hash; + + }); - return self.matches[0]; - }; + Opal.defn(self, '$keep_if', TMP_12 = function() { + var $a, $b, TMP_13, self = this, $iter = TMP_12.$$p, block = $iter || nil; - return (def.$values_at = function(args) { - var self = this; + TMP_12.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this; - args = $slice.call(arguments, 0); + return self.$size()}, TMP_13.$$s = self, TMP_13), $a).call($b, "keep_if") + }; - var i, a, index, values = []; - - for (i = 0; i < args.length; i++) { + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; - if (args[i].$$is_range) { - a = (args[i]).$to_a(); - a.unshift(i, 1); - Array.prototype.splice.apply(args, a); + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; } - index = $scope.get('Opal')['$coerce_to!'](args[i], $scope.get('Integer'), "to_int"); + obj = block(key, value); - if (index < 0) { - index += self.matches.length; - if (index < 0) { - values.push(nil); - continue; - } + if (obj === $breaker) { + return $breaker.$v; } - values.push(self.matches[index]); + if (obj === false || obj === nil) { + if (Opal.hash_delete(self, key) !== undefined) { + length--; + i--; + } + } } - return values; + return self; - }, nil) && 'values_at'; - })(self, null) -}; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/numeric"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - function $rb_divide(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.alias(self, 'key', 'index'); - Opal.add_stubs(['$require', '$include', '$coerce', '$===', '$raise', '$class', '$__send__', '$send_coerced', '$coerce_to!', '$-@', '$**', '$respond_to?', '$==', '$enum_for', '$gcd', '$lcm', '$floor', '$%']); - self.$require("corelib/comparable"); - (function($base, $super) { - function $Numeric(){}; - var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); + Opal.alias(self, 'key?', 'has_key?'); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6; + Opal.defn(self, '$keys', function() { + var self = this; - self.$include($scope.get('Comparable')); + + var result = []; - def.$$is_number = true; + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; - def.$__id__ = function() { - var self = this; + if (key.$$is_string) { + result.push(key); + } else { + result.push(key.key); + } + } - return (self * 2) + 1; - }; + return result; + + }); - Opal.defn(self, '$object_id', def.$__id__); + Opal.defn(self, '$length', function() { + var self = this; - def.$coerce = function(other, type) { - var self = this, $case = nil; + return self.$$keys.length; + }); - if (type == null) { - type = "operation" - } - try { - - if (other.$$is_number) { - return [self, other]; - } - else { - return other.$coerce(self); - } - - } catch ($err) {if (true) { - return (function() {$case = type;if ("operation"['$===']($case)) {return self.$raise($scope.get('TypeError'), "" + (other.$class()) + " can't be coerced into Numeric")}else if ("comparison"['$===']($case)) {return self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")}else { return nil }})() - }else { throw $err; } - }; - }; + Opal.alias(self, 'member?', 'has_key?'); - def.$send_coerced = function(method, other) { - var $a, self = this, type = nil, $case = nil, a = nil, b = nil; + Opal.defn(self, '$merge', TMP_14 = function(other) { + var $a, $b, self = this, $iter = TMP_14.$$p, block = $iter || nil; - type = (function() {$case = method;if ("+"['$===']($case) || "-"['$===']($case) || "*"['$===']($case) || "/"['$===']($case) || "%"['$===']($case) || "&"['$===']($case) || "|"['$===']($case) || "^"['$===']($case) || "**"['$===']($case)) {return "operation"}else if (">"['$===']($case) || ">="['$===']($case) || "<"['$===']($case) || "<="['$===']($case) || "<=>"['$===']($case)) {return "comparison"}else { return nil }})(); - $a = Opal.to_ary(self.$coerce(other, type)), a = ($a[0] == null ? nil : $a[0]), b = ($a[1] == null ? nil : $a[1]); - return a.$__send__(method, b); - }; + TMP_14.$$p = null; + return ($a = ($b = self.$dup())['$merge!'], $a.$$p = block.$to_proc(), $a).call($b, other); + }); - def['$+'] = function(other) { - var self = this; + Opal.defn(self, '$merge!', TMP_15 = function(other) { + var self = this, $iter = TMP_15.$$p, block = $iter || nil; + TMP_15.$$p = null; - if (other.$$is_number) { - return self + other; - } - else { - return self.$send_coerced("+", other); + if (!$scope.get('Hash')['$==='](other)) { + other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash"); } - - }; - def['$-'] = function(other) { - var self = this; + var i, other_keys = other.$$keys, length = other_keys.length, key, value, other_value; - - if (other.$$is_number) { - return self - other; - } - else { - return self.$send_coerced("-", other); - } - - }; + if (block === nil) { + for (i = 0; i < length; i++) { + key = other_keys[i]; - def['$*'] = function(other) { - var self = this; + if (key.$$is_string) { + other_value = other.$$smap[key]; + } else { + other_value = key.value; + key = key.key; + } - - if (other.$$is_number) { - return self * other; - } - else { - return self.$send_coerced("*", other); + Opal.hash_put(self, key, other_value); + } + + return self; } - - }; - def['$/'] = function(other) { - var self = this; + for (i = 0; i < length; i++) { + key = other_keys[i]; - - if (other.$$is_number) { - return self / other; - } - else { - return self.$send_coerced("/", other); + if (key.$$is_string) { + other_value = other.$$smap[key]; + } else { + other_value = key.value; + key = key.key; + } + + value = Opal.hash_get(self, key); + + if (value === undefined) { + Opal.hash_put(self, key, other_value); + continue; + } + + Opal.hash_put(self, key, block(key, value, other_value)); } - - }; - def['$%'] = function(other) { + return self; + ; + }); + + Opal.defn(self, '$rassoc', function(object) { var self = this; - if (other.$$is_number) { - if (other < 0 || self < 0) { - return (self % other + other) % other; + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; } - else { - return self % other; + + if ((value)['$=='](object)) { + return [key, value]; } } - else { - return self.$send_coerced("%", other); - } + + return nil; - }; + }); - def['$&'] = function(other) { + Opal.defn(self, '$rehash', function() { var self = this; - if (other.$$is_number) { - return self & other; - } - else { - return self.$send_coerced("&", other); - } + Opal.hash_rehash(self); + return self; - }; + }); - def['$|'] = function(other) { - var self = this; + Opal.defn(self, '$reject', TMP_16 = function() { + var $a, $b, TMP_17, self = this, $iter = TMP_16.$$p, block = $iter || nil; + TMP_16.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_17 = function(){var self = TMP_17.$$s || this; + + return self.$size()}, TMP_17.$$s = self, TMP_17), $a).call($b, "reject") + }; - if (other.$$is_number) { - return self | other; - } - else { - return self.$send_coerced("|", other); + var hash = Opal.hash(); + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + obj = block(key, value); + + if (obj === $breaker) { + return $breaker.$v; + } + + if (obj === false || obj === nil) { + Opal.hash_put(hash, key, value); + } } + + return hash; - }; + }); - def['$^'] = function(other) { - var self = this; + Opal.defn(self, '$reject!', TMP_18 = function() { + var $a, $b, TMP_19, self = this, $iter = TMP_18.$$p, block = $iter || nil; + + TMP_18.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_19 = function(){var self = TMP_19.$$s || this; + return self.$size()}, TMP_19.$$s = self, TMP_19), $a).call($b, "reject!") + }; - if (other.$$is_number) { - return self ^ other; - } - else { - return self.$send_coerced("^", other); + var changes_were_made = false; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + obj = block(key, value); + + if (obj === $breaker) { + return $breaker.$v; + } + + if (obj !== false && obj !== nil) { + if (Opal.hash_delete(self, key) !== undefined) { + changes_were_made = true; + length--; + i--; + } + } } + + return changes_were_made ? self : nil; - }; + }); - def['$<'] = function(other) { - var self = this; + Opal.defn(self, '$replace', function(other) { + var $a, $b, self = this; + other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash"); - if (other.$$is_number) { - return self < other; - } - else { - return self.$send_coerced("<", other); + Opal.hash_init(self); + + for (var i = 0, other_keys = other.$$keys, length = other_keys.length, key, value, other_value; i < length; i++) { + key = other_keys[i]; + + if (key.$$is_string) { + other_value = other.$$smap[key]; + } else { + other_value = key.value; + key = key.key; + } + + Opal.hash_put(self, key, other_value); } - }; + if ((($a = other.$default_proc()) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [other.$default_proc()]), $b = self, $b['$default_proc='].apply($b, $a), $a[$a.length-1]) + } else { + (($a = [other.$default()]), $b = self, $b['$default='].apply($b, $a), $a[$a.length-1]) + }; + return self; + }); - def['$<='] = function(other) { - var self = this; + Opal.defn(self, '$select', TMP_20 = function() { + var $a, $b, TMP_21, self = this, $iter = TMP_20.$$p, block = $iter || nil; + + TMP_20.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_21 = function(){var self = TMP_21.$$s || this; + return self.$size()}, TMP_21.$$s = self, TMP_21), $a).call($b, "select") + }; - if (other.$$is_number) { - return self <= other; - } - else { - return self.$send_coerced("<=", other); + var hash = Opal.hash(); + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + obj = block(key, value); + + if (obj === $breaker) { + return $breaker.$v; + } + + if (obj !== false && obj !== nil) { + Opal.hash_put(hash, key, value); + } } + + return hash; - }; + }); - def['$>'] = function(other) { - var self = this; + Opal.defn(self, '$select!', TMP_22 = function() { + var $a, $b, TMP_23, self = this, $iter = TMP_22.$$p, block = $iter || nil; + TMP_22.$$p = null; + if (block !== false && block !== nil) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_23 = function(){var self = TMP_23.$$s || this; + + return self.$size()}, TMP_23.$$s = self, TMP_23), $a).call($b, "select!") + }; - if (other.$$is_number) { - return self > other; - } - else { - return self.$send_coerced(">", other); + var result = nil; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + obj = block(key, value); + + if (obj === $breaker) { + return $breaker.$v; + } + + if (obj === false || obj === nil) { + if (Opal.hash_delete(self, key) !== undefined) { + length--; + i--; + } + result = self; + } } + + return result; - }; + }); - def['$>='] = function(other) { + Opal.defn(self, '$shift', function() { var self = this; - if (other.$$is_number) { - return self >= other; - } - else { - return self.$send_coerced(">=", other); + var keys = self.$$keys, + key; + + if (keys.length > 0) { + key = keys[0]; + + key = key.$$is_string ? key : key.key; + + return [key, Opal.hash_delete(self, key)]; } + + return self.$default(nil); - }; + }); + + Opal.alias(self, 'size', 'length'); - def['$<=>'] = function(other) { + self.$alias_method("store", "[]="); + + Opal.defn(self, '$to_a', function() { var self = this; - try { - if (other.$$is_number) { - return self > other ? 1 : (self < other ? -1 : 0); - } - else { - return self.$send_coerced("<=>", other); + var result = []; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + result.push([key, value]); } + + return result; - } catch ($err) {if (Opal.rescue($err, [$scope.get('ArgumentError')])) { - return nil - }else { throw $err; } - }; - }; + }); - def['$<<'] = function(count) { + Opal.defn(self, '$to_h', function() { var self = this; - count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int"); - return count > 0 ? self << count : self >> -count; - }; - - def['$>>'] = function(count) { - var self = this; + + if (self.$$class === Opal.Hash) { + return self; + } - count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int"); - return count > 0 ? self >> count : self << -count; - }; + var hash = new Opal.Hash.$$alloc(); - def['$[]'] = function(bit) { - var self = this, min = nil, max = nil; + Opal.hash_init(hash); + Opal.hash_clone(self, hash); - bit = $scope.get('Opal')['$coerce_to!'](bit, $scope.get('Integer'), "to_int"); - min = ((2)['$**'](30))['$-@'](); - max = $rb_minus(((2)['$**'](30)), 1); - return (bit < min || bit > max) ? 0 : (self >> bit) % 2; - }; + return hash; + + }); - def['$+@'] = function() { + Opal.defn(self, '$to_hash', function() { var self = this; - return +self; - }; + return self; + }); - def['$-@'] = function() { - var self = this; + Opal.alias(self, 'to_s', 'inspect'); - return -self; - }; + Opal.alias(self, 'update', 'merge!'); - def['$~'] = function() { - var self = this; + Opal.alias(self, 'value?', 'has_value?'); - return ~self; - }; + Opal.alias(self, 'values_at', 'indexes'); - def['$**'] = function(other) { + return (Opal.defn(self, '$values', function() { var self = this; - if (other.$$is_number) { - return Math.pow(self, other); - } - else { - return self.$send_coerced("**", other); + var result = []; + + for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + result.push(self.$$smap[key]); + } else { + result.push(key.value); + } } + + return result; - }; + }), nil) && 'values'; + })($scope.base, null); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/number"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_le(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); + } + function $rb_ge(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - def['$=='] = function(other) { + Opal.add_stubs(['$require', '$bridge', '$raise', '$class', '$Float', '$respond_to?', '$coerce_to!', '$__coerced__', '$===', '$!', '$>', '$**', '$new', '$<', '$to_f', '$==', '$nan?', '$infinite?', '$enum_for', '$+', '$-', '$gcd', '$lcm', '$/', '$frexp', '$to_i', '$ldexp', '$rationalize', '$*', '$<<', '$to_r', '$-@', '$size', '$<=', '$>=']); + self.$require("corelib/numeric"); + (function($base, $super) { + function $Number(){}; + var self = $Number = $klass($base, $super, 'Number', $Number); + + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11; + + $scope.get('Opal').$bridge(self, Number); + + Number.prototype.$$is_number = true; + + Opal.defn(self, '$coerce', function(other) { var self = this; - if (other.$$is_number) { - return self == Number(other); + if (other === nil) { + self.$raise($scope.get('TypeError'), "can't convert " + (other.$class()) + " into Float"); } - else if (other['$respond_to?']("==")) { - return other['$=='](self); + else if (other.$$is_string) { + return [self.$Float(other), self]; + } + else if (other['$respond_to?']("to_f")) { + return [$scope.get('Opal')['$coerce_to!'](other, $scope.get('Float'), "to_f"), self]; + } + else if (other.$$is_number) { + return [other, self]; } else { - return false; + self.$raise($scope.get('TypeError'), "can't convert " + (other.$class()) + " into Float"); } ; - }; + }); - def.$abs = function() { + Opal.defn(self, '$__id__', function() { var self = this; - return Math.abs(self); - }; - - def.$ceil = function() { - var self = this; + return (self * 2) + 1; + }); - return Math.ceil(self); - }; + Opal.alias(self, 'object_id', '__id__'); - def.$chr = function(encoding) { + Opal.defn(self, '$+', function(other) { var self = this; - return String.fromCharCode(self); - }; + + if (other.$$is_number) { + return self + other; + } + else { + return self.$__coerced__("+", other); + } + + }); - def.$conj = function() { + Opal.defn(self, '$-', function(other) { var self = this; - return self; - }; - - Opal.defn(self, '$conjugate', def.$conj); - - def.$downto = TMP_1 = function(finish) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; - - TMP_1.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("downto", finish) - }; - if (!finish.$$is_number) { - self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (finish.$class()) + " failed") + if (other.$$is_number) { + return self - other; } - for (var i = self; i >= finish; i--) { - if (block(i) === $breaker) { - return $breaker.$v; - } + else { + return self.$__coerced__("-", other); } - ; - return self; - }; - - Opal.defn(self, '$eql?', def['$==']); - - def['$equal?'] = function(other) { - var $a, self = this; - - return ((($a = self['$=='](other)) !== false && $a !== nil) ? $a : isNaN(self) && isNaN(other)); - }; + + }); - def['$even?'] = function() { + Opal.defn(self, '$*', function(other) { var self = this; - return self % 2 === 0; - }; + + if (other.$$is_number) { + return self * other; + } + else { + return self.$__coerced__("*", other); + } + + }); - def.$floor = function() { + Opal.defn(self, '$/', function(other) { var self = this; - return Math.floor(self); - }; - - def.$gcd = function(other) { - var $a, self = this; - - if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('TypeError'), "not an integer") - }; - var min = Math.abs(self), - max = Math.abs(other); - - while (min > 0) { - var tmp = min; - - min = max % min; - max = tmp; + if (other.$$is_number) { + return self / other; + } + else { + return self.$__coerced__("/", other); } - - return max; - }; - - def.$gcdlcm = function(other) { - var self = this; + }); - return [self.$gcd(), self.$lcm()]; - }; + Opal.alias(self, 'fdiv', '/'); - def.$hash = function() { + Opal.defn(self, '$%', function(other) { var self = this; - return 'Numeric:'+self.toString(); - }; + + if (other.$$is_number) { + if (other == -Infinity) { + return other; + } + else if (other == 0) { + self.$raise($scope.get('ZeroDivisionError'), "divided by 0"); + } + else if (other < 0 || self < 0) { + return (self % other + other) % other; + } + else { + return self % other; + } + } + else { + return self.$__coerced__("%", other); + } + + }); - def['$integer?'] = function() { + Opal.defn(self, '$&', function(other) { var self = this; - return self % 1 === 0; - }; - - def['$is_a?'] = TMP_2 = function(klass) {var $zuper = $slice.call(arguments, 0); - var $a, $b, self = this, $iter = TMP_2.$$p, $yield = $iter || nil; - - TMP_2.$$p = null; - if ((($a = (($b = klass['$==']($scope.get('Fixnum'))) ? $scope.get('Integer')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - return Opal.find_super_dispatcher(self, 'is_a?', TMP_2, $iter).apply(self, $zuper); - }; - - Opal.defn(self, '$kind_of?', def['$is_a?']); - - def['$instance_of?'] = TMP_3 = function(klass) {var $zuper = $slice.call(arguments, 0); - var $a, $b, self = this, $iter = TMP_3.$$p, $yield = $iter || nil; - - TMP_3.$$p = null; - if ((($a = (($b = klass['$==']($scope.get('Fixnum'))) ? $scope.get('Integer')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - return Opal.find_super_dispatcher(self, 'instance_of?', TMP_3, $iter).apply(self, $zuper); - }; - - def.$lcm = function(other) { - var $a, self = this; - - if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('TypeError'), "not an integer") - }; - if (self == 0 || other == 0) { - return 0; + if (other.$$is_number) { + return self & other; } else { - return Math.abs(self * other / self.$gcd(other)); + return self.$__coerced__("&", other); } - }; - - Opal.defn(self, '$magnitude', def.$abs); - - Opal.defn(self, '$modulo', def['$%']); + }); - def.$next = function() { + Opal.defn(self, '$|', function(other) { var self = this; - return self + 1; - }; + + if (other.$$is_number) { + return self | other; + } + else { + return self.$__coerced__("|", other); + } + + }); - def['$nonzero?'] = function() { + Opal.defn(self, '$^', function(other) { var self = this; - return self == 0 ? nil : self; - }; + + if (other.$$is_number) { + return self ^ other; + } + else { + return self.$__coerced__("^", other); + } + + }); - def['$odd?'] = function() { + Opal.defn(self, '$<', function(other) { var self = this; - return self % 2 !== 0; - }; + + if (other.$$is_number) { + return self < other; + } + else { + return self.$__coerced__("<", other); + } + + }); - def.$ord = function() { + Opal.defn(self, '$<=', function(other) { var self = this; - return self; - }; + + if (other.$$is_number) { + return self <= other; + } + else { + return self.$__coerced__("<=", other); + } + + }); - def.$pred = function() { + Opal.defn(self, '$>', function(other) { var self = this; - return self - 1; - }; + + if (other.$$is_number) { + return self > other; + } + else { + return self.$__coerced__(">", other); + } + + }); - def.$round = function(ndigits) { + Opal.defn(self, '$>=', function(other) { var self = this; - if (ndigits == null) { - ndigits = 0 - } - var scale = Math.pow(10, ndigits); - return Math.round(self * scale) / scale; + if (other.$$is_number) { + return self >= other; + } + else { + return self.$__coerced__(">=", other); + } - }; + }); - def.$step = TMP_4 = function(limit, step) { - var $a, self = this, $iter = TMP_4.$$p, block = $iter || nil; + Opal.defn(self, '$<=>', function(other) { + var self = this; - if (step == null) { - step = 1 - } - TMP_4.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("step", limit, step) - }; - if ((($a = step == 0) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "step cannot be 0")}; + try { - var value = self; - - if (step > 0) { - while (value <= limit) { - block(value); - value += step; + if (other.$$is_number) { + if (isNaN(self) || isNaN(other)) { + return nil; } + + return self > other ? 1 : (self < other ? -1 : 0); } else { - while (value >= limit) { - block(value); - value += step; - } + return self.$__coerced__("<=>", other); } - return self; - }; - - Opal.defn(self, '$succ', def.$next); - - def.$times = TMP_5 = function() { - var self = this, $iter = TMP_5.$$p, block = $iter || nil; - - TMP_5.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("times") - }; - - for (var i = 0; i < self; i++) { - if (block(i) === $breaker) { - return $breaker.$v; + } catch ($err) {if (Opal.rescue($err, [$scope.get('ArgumentError')])) { + try { + return nil + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; } - } - - return self; - }; + }else { throw $err; } + }; + }); - def.$to_f = function() { + Opal.defn(self, '$<<', function(count) { var self = this; - return self; - }; + count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int"); + return count > 0 ? self << count : self >> -count; + }); - def.$to_i = function() { + Opal.defn(self, '$>>', function(count) { var self = this; - return parseInt(self); - }; - - Opal.defn(self, '$to_int', def.$to_i); + count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int"); + return count > 0 ? self >> count : self << -count; + }); - def.$to_s = function(base) { - var $a, $b, self = this; + Opal.defn(self, '$[]', function(bit) { + var self = this; - if (base == null) { - base = 10 + bit = $scope.get('Opal')['$coerce_to!'](bit, $scope.get('Integer'), "to_int"); + + if (bit < (($scope.get('Integer')).$$scope.get('MIN')) || bit > (($scope.get('Integer')).$$scope.get('MAX'))) { + return 0; } - if ((($a = ((($b = $rb_lt(base, 2)) !== false && $b !== nil) ? $b : $rb_gt(base, 36))) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), "base must be between 2 and 36")}; - return self.toString(base); - }; - - Opal.defn(self, '$inspect', def.$to_s); - - def.$divmod = function(rhs) { - var self = this, q = nil, r = nil; - - q = ($rb_divide(self, rhs)).$floor(); - r = self['$%'](rhs); - return [q, r]; - }; - def.$upto = TMP_6 = function(finish) { - var self = this, $iter = TMP_6.$$p, block = $iter || nil; - - TMP_6.$$p = null; - if (block !== false && block !== nil) { - } else { - return self.$enum_for("upto", finish) - }; - - if (!finish.$$is_number) { - self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (finish.$class()) + " failed") + if (self < 0) { + return (((~self) + 1) >> bit) % 2; } - for (var i = self; i <= finish; i++) { - if (block(i) === $breaker) { - return $breaker.$v; - } + else { + return (self >> bit) % 2; } ; - return self; - }; + }); - def['$zero?'] = function() { + Opal.defn(self, '$+@', function() { var self = this; - return self == 0; - }; + return +self; + }); - def.$size = function() { + Opal.defn(self, '$-@', function() { var self = this; - return 4; - }; + return -self; + }); - def['$nan?'] = function() { + Opal.defn(self, '$~', function() { var self = this; - return isNaN(self); - }; + return ~self; + }); - def['$finite?'] = function() { - var self = this; + Opal.defn(self, '$**', function(other) { + var $a, $b, $c, self = this; - return self != Infinity && self != -Infinity; - }; + if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ((($b = ($scope.get('Integer')['$==='](self))['$!']()) !== false && $b !== nil) ? $b : $rb_gt(other, 0))) !== nil && (!$a.$$is_boolean || $a == true))) { + return Math.pow(self, other); + } else { + return $scope.get('Rational').$new(self, 1)['$**'](other) + } + } else if ((($a = (($b = $rb_lt(self, 0)) ? (((($c = $scope.get('Float')['$==='](other)) !== false && $c !== nil) ? $c : $scope.get('Rational')['$==='](other))) : $rb_lt(self, 0))) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Complex').$new(self, 0)['$**'](other.$to_f()) + } else if ((($a = other.$$is_number != null) !== nil && (!$a.$$is_boolean || $a == true))) { + return Math.pow(self, other); + } else { + return self.$__coerced__("**", other) + }; + }); - def['$infinite?'] = function() { + Opal.defn(self, '$==', function(other) { var self = this; - if (self == Infinity) { - return +1; + if (other.$$is_number) { + return self == Number(other); } - else if (self == -Infinity) { - return -1; + else if (other['$respond_to?']("==")) { + return other['$=='](self); } else { - return nil; + return false; } - - }; + ; + }); - def['$positive?'] = function() { + Opal.defn(self, '$abs', function() { var self = this; - return 1 / self > 0; - }; + return Math.abs(self); + }); - return (def['$negative?'] = function() { + Opal.defn(self, '$abs2', function() { var self = this; - return 1 / self < 0; - }, nil) && 'negative?'; - })(self, null); - Opal.cdecl($scope, 'Fixnum', $scope.get('Numeric')); - (function($base, $super) { - function $Integer(){}; - var self = $Integer = $klass($base, $super, 'Integer', $Integer); - - var def = self.$$proto, $scope = self.$$scope; + return Math.abs(self * self); + }); - return (Opal.defs(self, '$===', function(other) { - var self = this; + Opal.defn(self, '$angle', function() { + var $a, self = this; + if ((($a = self['$nan?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; - if (!other.$$is_number) { - return false; + if (self == 0) { + if (1 / self > 0) { + return 0; + } + else { + return Math.PI; + } + } + else if (self < 0) { + return Math.PI; + } + else { + return 0; } - - return (other % 1) === 0; - }), nil) && '===' - })(self, $scope.get('Numeric')); - return (function($base, $super) { - function $Float(){}; - var self = $Float = $klass($base, $super, 'Float', $Float); - - var def = self.$$proto, $scope = self.$$scope, $a; - - Opal.defs(self, '$===', function(other) { - var self = this; - - return !!other.$$is_number; }); - Opal.cdecl($scope, 'INFINITY', Infinity); - - Opal.cdecl($scope, 'NAN', NaN); - - if ((($a = (typeof(Number.EPSILON) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { - return Opal.cdecl($scope, 'EPSILON', Number.EPSILON) - } else { - return Opal.cdecl($scope, 'EPSILON', 2.2204460492503130808472633361816E-16) - }; - })(self, $scope.get('Numeric')); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/complex"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - - return (function($base, $super) { - function $Complex(){}; - var self = $Complex = $klass($base, $super, 'Complex', $Complex); - - var def = self.$$proto, $scope = self.$$scope; + Opal.alias(self, 'arg', 'angle'); - return nil; - })(self, $scope.get('Numeric')) -}; + Opal.alias(self, 'phase', 'angle'); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/rational"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.defn(self, '$bit_length', function() { + var $a, self = this; - return (function($base, $super) { - function $Rational(){}; - var self = $Rational = $klass($base, $super, 'Rational', $Rational); + if ((($a = $scope.get('Integer')['$==='](self)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('NoMethodError').$new("undefined method `bit_length` for " + (self) + ":Float", "bit_length")) + }; + + if (self === 0 || self === -1) { + return 0; + } - var def = self.$$proto, $scope = self.$$scope; + var result = 0, + value = self < 0 ? ~self : self; - return nil; - })(self, $scope.get('Numeric')) -}; + while (value != 0) { + result += 1; + value >>>= 1; + } -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/proc"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + return result; + + }); - Opal.add_stubs(['$raise']); - return (function($base, $super) { - function $Proc(){}; - var self = $Proc = $klass($base, $super, 'Proc', $Proc); + Opal.defn(self, '$ceil', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2; + return Math.ceil(self); + }); - def.$$is_proc = true; + Opal.defn(self, '$chr', function(encoding) { + var self = this; - def.$$is_lambda = false; + return String.fromCharCode(self); + }); - Opal.defs(self, '$new', TMP_1 = function() { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$denominator', TMP_1 = function() { + var $a, $b, self = this, $iter = TMP_1.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; TMP_1.$$p = null; - if (block !== false && block !== nil) { + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = ((($b = self['$nan?']()) !== false && $b !== nil) ? $b : self['$infinite?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return 1 } else { - self.$raise($scope.get('ArgumentError'), "tried to create a Proc object without a block") + return Opal.find_super_dispatcher(self, 'denominator', TMP_1, $iter).apply(self, $zuper) }; - return block; }); - def.$call = TMP_2 = function(args) { - var self = this, $iter = TMP_2.$$p, block = $iter || nil; + Opal.defn(self, '$downto', TMP_2 = function(stop) { + var $a, $b, TMP_3, self = this, $iter = TMP_2.$$p, block = $iter || nil; - args = $slice.call(arguments, 0); TMP_2.$$p = null; + if ((block !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a; + + if ((($a = $scope.get('Numeric')['$==='](stop)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") + }; + if ((($a = $rb_gt(stop, self)) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0 + } else { + return $rb_plus($rb_minus(self, stop), 1) + };}, TMP_3.$$s = self, TMP_3), $a).call($b, "downto", stop) + }; - if (block !== nil) { - self.$$p = block; + if (!stop.$$is_number) { + self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") + } + for (var i = self; i >= stop; i--) { + if (block(i) === $breaker) { + return $breaker.$v; + } } + ; + return self; + }); - var result; + Opal.alias(self, 'eql?', '=='); - if (self.$$is_lambda) { - result = self.apply(null, args); - } - else { - result = Opal.yieldX(self, args); - } + Opal.defn(self, '$equal?', function(other) { + var $a, self = this; - if (result === $breaker) { - return $breaker.$v; - } + return ((($a = self['$=='](other)) !== false && $a !== nil) ? $a : isNaN(self) && isNaN(other)); + }); - return result; - - }; + Opal.defn(self, '$even?', function() { + var self = this; - Opal.defn(self, '$[]', def.$call); + return self % 2 === 0; + }); - def.$to_proc = function() { + Opal.defn(self, '$floor', function() { var self = this; - return self; - }; - - def['$lambda?'] = function() { - var self = this; + return Math.floor(self); + }); - return !!self.$$is_lambda; - }; + Opal.defn(self, '$gcd', function(other) { + var $a, self = this; - return (def.$arity = function() { - var self = this; + if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "not an integer") + }; + + var min = Math.abs(self), + max = Math.abs(other); - return self.length; - }, nil) && 'arity'; - })(self, null) -}; + while (min > 0) { + var tmp = min; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/method"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + min = max % min; + max = tmp; + } - Opal.add_stubs(['$attr_reader', '$class', '$arity', '$new', '$name']); - (function($base, $super) { - function $Method(){}; - var self = $Method = $klass($base, $super, 'Method', $Method); + return max; + + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + Opal.defn(self, '$gcdlcm', function(other) { + var self = this; - def.method = def.receiver = def.owner = def.name = def.obj = nil; - self.$attr_reader("owner", "receiver", "name"); + return [self.$gcd(), self.$lcm()]; + }); - def.$initialize = function(receiver, method, name) { + Opal.defn(self, '$integer?', function() { var self = this; - self.receiver = receiver; - self.owner = receiver.$class(); - self.name = name; - return self.method = method; - }; + return self % 1 === 0; + }); - def.$arity = function() { - var self = this; + Opal.defn(self, '$is_a?', TMP_4 = function(klass) { + var $a, $b, self = this, $iter = TMP_4.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - return self.method.$arity(); - }; + TMP_4.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = (($b = klass['$==']($scope.get('Fixnum'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Fixnum')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Integer')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : klass['$==']($scope.get('Float')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + return Opal.find_super_dispatcher(self, 'is_a?', TMP_4, $iter).apply(self, $zuper); + }); - def.$call = TMP_1 = function(args) { - var self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.alias(self, 'kind_of?', 'is_a?'); - args = $slice.call(arguments, 0); - TMP_1.$$p = null; - - self.method.$$p = block; + Opal.defn(self, '$instance_of?', TMP_5 = function(klass) { + var $a, $b, self = this, $iter = TMP_5.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - return self.method.apply(self.receiver, args); - ; - }; + TMP_5.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = (($b = klass['$==']($scope.get('Fixnum'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Fixnum')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Integer')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : klass['$==']($scope.get('Float')))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + return Opal.find_super_dispatcher(self, 'instance_of?', TMP_5, $iter).apply(self, $zuper); + }); - Opal.defn(self, '$[]', def.$call); + Opal.defn(self, '$lcm', function(other) { + var $a, self = this; - def.$unbind = function() { - var self = this; + if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "not an integer") + }; + + if (self == 0 || other == 0) { + return 0; + } + else { + return Math.abs(self * other / self.$gcd(other)); + } + + }); - return $scope.get('UnboundMethod').$new(self.owner, self.method, self.name); - }; + Opal.alias(self, 'magnitude', 'abs'); + + Opal.alias(self, 'modulo', '%'); - def.$to_proc = function() { + Opal.defn(self, '$next', function() { var self = this; - return self.method; - }; + return self + 1; + }); - return (def.$inspect = function() { + Opal.defn(self, '$nonzero?', function() { var self = this; - return "#"; - }, nil) && 'inspect'; - })(self, null); - return (function($base, $super) { - function $UnboundMethod(){}; - var self = $UnboundMethod = $klass($base, $super, 'UnboundMethod', $UnboundMethod); + return self == 0 ? nil : self; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$numerator', TMP_6 = function() { + var $a, $b, self = this, $iter = TMP_6.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - def.method = def.name = def.owner = nil; - self.$attr_reader("owner", "name"); + TMP_6.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = ((($b = self['$nan?']()) !== false && $b !== nil) ? $b : self['$infinite?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self + } else { + return Opal.find_super_dispatcher(self, 'numerator', TMP_6, $iter).apply(self, $zuper) + }; + }); - def.$initialize = function(owner, method, name) { + Opal.defn(self, '$odd?', function() { var self = this; - self.owner = owner; - self.method = method; - return self.name = name; - }; + return self % 2 !== 0; + }); - def.$arity = function() { + Opal.defn(self, '$ord', function() { var self = this; - return self.method.$arity(); - }; + return self; + }); - def.$bind = function(object) { + Opal.defn(self, '$pred', function() { var self = this; - return $scope.get('Method').$new(object, self.method, self.name); - }; + return self - 1; + }); - return (def.$inspect = function() { - var self = this; + Opal.defn(self, '$quo', TMP_7 = function(other) { + var $a, self = this, $iter = TMP_7.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - return "#"; - }, nil) && 'inspect'; - })(self, null); -}; + TMP_7.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = $scope.get('Integer')['$==='](self)) !== nil && (!$a.$$is_boolean || $a == true))) { + return Opal.find_super_dispatcher(self, 'quo', TMP_7, $iter).apply(self, $zuper) + } else { + return $rb_divide(self, other) + }; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/range"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_le(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.defn(self, '$rationalize', function(eps) { + var $a, $b, self = this, f = nil, n = nil; - Opal.add_stubs(['$require', '$include', '$attr_reader', '$<=>', '$raise', '$include?', '$enum_for', '$succ', '$!', '$==', '$===', '$exclude_end?', '$eql?', '$begin', '$end', '$abs', '$to_i', '$inspect']); - self.$require("corelib/enumerable"); - return (function($base, $super) { - function $Range(){}; - var self = $Range = $klass($base, $super, 'Range', $Range); + + if (arguments.length > 1) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); + } + ; + if ((($a = $scope.get('Integer')['$==='](self)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Rational').$new(self, 1) + } else if ((($a = self['$infinite?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise($scope.get('FloatDomainError'), "Infinity") + } else if ((($a = self['$nan?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise($scope.get('FloatDomainError'), "NaN") + } else if ((($a = eps == null) !== nil && (!$a.$$is_boolean || $a == true))) { + $b = $scope.get('Math').$frexp(self), $a = Opal.to_ary($b), f = ($a[0] == null ? nil : $a[0]), n = ($a[1] == null ? nil : $a[1]), $b; + f = $scope.get('Math').$ldexp(f, (($scope.get('Float')).$$scope.get('MANT_DIG'))).$to_i(); + n = $rb_minus(n, (($scope.get('Float')).$$scope.get('MANT_DIG'))); + return $scope.get('Rational').$new($rb_times(2, f), (1)['$<<'](($rb_minus(1, n)))).$rationalize($scope.get('Rational').$new(1, (1)['$<<'](($rb_minus(1, n))))); + } else { + return self.$to_r().$rationalize(eps) + }; + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3; + Opal.defn(self, '$round', function(ndigits) { + var $a, $b, self = this, _ = nil, exp = nil; - def.begin = def.exclude = def.end = nil; - self.$include($scope.get('Enumerable')); + if ((($a = $scope.get('Integer')['$==='](self)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ndigits == null) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + if ((($a = ($b = $scope.get('Float')['$==='](ndigits), $b !== false && $b !== nil ?ndigits['$infinite?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "Infinity")}; + ndigits = $scope.get('Opal')['$coerce_to!'](ndigits, $scope.get('Integer'), "to_int"); + if ((($a = $rb_lt(ndigits, (($scope.get('Integer')).$$scope.get('MIN')))) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "out of bounds")}; + if ((($a = ndigits >= 0) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + ndigits = ndigits['$-@'](); + + if (0.415241 * ndigits - 0.125 > self.$size()) { + return 0; + } - def.$$is_range = true; + var f = Math.pow(10, ndigits), + x = Math.floor((Math.abs(x) + f / 2) / f) * f; - self.$attr_reader("begin", "end"); + return self < 0 ? -x : x; + ; + } else { + if ((($a = ($b = self['$nan?'](), $b !== false && $b !== nil ?ndigits == null : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('FloatDomainError'), "NaN")}; + ndigits = $scope.get('Opal')['$coerce_to!'](ndigits || 0, $scope.get('Integer'), "to_int"); + if ((($a = $rb_le(ndigits, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$nan?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "NaN") + } else if ((($a = self['$infinite?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('FloatDomainError'), "Infinity")} + } else if (ndigits['$=='](0)) { + return Math.round(self) + } else if ((($a = ((($b = self['$nan?']()) !== false && $b !== nil) ? $b : self['$infinite?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + $b = $scope.get('Math').$frexp(self), $a = Opal.to_ary($b), _ = ($a[0] == null ? nil : $a[0]), exp = ($a[1] == null ? nil : $a[1]), $b; + if ((($a = $rb_ge(ndigits, $rb_minus(($rb_plus((($scope.get('Float')).$$scope.get('DIG')), 2)), ((function() {if ((($b = $rb_gt(exp, 0)) !== nil && (!$b.$$is_boolean || $b == true))) { + return $rb_divide(exp, 4) + } else { + return $rb_minus($rb_divide(exp, 3), 1) + }; return nil; })())))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self}; + if ((($a = $rb_lt(ndigits, ((function() {if ((($b = $rb_gt(exp, 0)) !== nil && (!$b.$$is_boolean || $b == true))) { + return $rb_plus($rb_divide(exp, 3), 1) + } else { + return $rb_divide(exp, 4) + }; return nil; })())['$-@']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0}; + return Math.round(self * Math.pow(10, ndigits)) / Math.pow(10, ndigits); + }; + }); - def.$initialize = function(first, last, exclude) { - var $a, self = this; + Opal.defn(self, '$step', TMP_8 = function(limit, step) { + var $a, self = this, $iter = TMP_8.$$p, block = $iter || nil; - if (exclude == null) { - exclude = false + if (step == null) { + step = 1 } - if ((($a = first['$<=>'](last)) !== nil && (!$a.$$is_boolean || $a == true))) { + TMP_8.$$p = null; + if (block !== false && block !== nil) { } else { - self.$raise($scope.get('ArgumentError')) + return self.$enum_for("step", limit, step) }; - self.begin = first; - self.end = last; - return self.exclude = exclude; - }; - - def['$=='] = function(other) { - var self = this; - + if ((($a = step == 0) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "step cannot be 0")}; - if (!other.$$is_range) { - return false; + var value = self; + + if (limit === Infinity || limit === -Infinity) { + block(value); + return self; } - return self.exclude === other.exclude && - self.begin == other.begin && - self.end == other.end; + if (step > 0) { + while (value <= limit) { + block(value); + value += step; + } + } + else { + while (value >= limit) { + block(value); + value += step; + } + } - }; - - def['$==='] = function(value) { - var self = this; - - return self['$include?'](value); - }; - - def['$cover?'] = function(value) { - var $a, $b, self = this; + return self; + }); - return (($a = $rb_le(self.begin, value)) ? ((function() {if ((($b = self.exclude) !== nil && (!$b.$$is_boolean || $b == true))) { - return $rb_lt(value, self.end) - } else { - return $rb_le(value, self.end) - }; return nil; })()) : $a); - }; + Opal.alias(self, 'succ', 'next'); - def.$each = TMP_1 = function() { - var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil, current = nil, last = nil; + Opal.defn(self, '$times', TMP_9 = function() { + var self = this, $iter = TMP_9.$$p, block = $iter || nil; - TMP_1.$$p = null; - if ((block !== nil)) { + TMP_9.$$p = null; + if (block !== false && block !== nil) { } else { - return self.$enum_for("each") + return self.$enum_for("times") }; - current = self.begin; - last = self.end; - while ($rb_lt(current, last)) { - if (Opal.yield1(block, current) === $breaker) return $breaker.$v; - current = current.$succ();}; - if ((($a = ($b = self.exclude['$!'](), $b !== false && $b !== nil ?current['$=='](last) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - if (Opal.yield1(block, current) === $breaker) return $breaker.$v}; + + for (var i = 0; i < self; i++) { + if (block(i) === $breaker) { + return $breaker.$v; + } + } + return self; - }; + }); - def['$eql?'] = function(other) { - var $a, $b, self = this; + Opal.defn(self, '$to_f', function() { + var self = this; - if ((($a = $scope.get('Range')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - return false - }; - return ($a = ($b = self.exclude['$==='](other['$exclude_end?']()), $b !== false && $b !== nil ?self.begin['$eql?'](other.$begin()) : $b), $a !== false && $a !== nil ?self.end['$eql?'](other.$end()) : $a); - }; + return self; + }); - def['$exclude_end?'] = function() { + Opal.defn(self, '$to_i', function() { var self = this; - return self.exclude; - }; + return parseInt(self, 10); + }); - Opal.defn(self, '$first', def.$begin); + Opal.alias(self, 'to_int', 'to_i'); - Opal.defn(self, '$include?', def['$cover?']); + Opal.defn(self, '$to_r', function() { + var $a, $b, self = this, f = nil, e = nil; - Opal.defn(self, '$last', def.$end); + if ((($a = $scope.get('Integer')['$==='](self)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Rational').$new(self, 1) + } else { + $b = $scope.get('Math').$frexp(self), $a = Opal.to_ary($b), f = ($a[0] == null ? nil : $a[0]), e = ($a[1] == null ? nil : $a[1]), $b; + f = $scope.get('Math').$ldexp(f, (($scope.get('Float')).$$scope.get('MANT_DIG'))).$to_i(); + e = $rb_minus(e, (($scope.get('Float')).$$scope.get('MANT_DIG'))); + return ($rb_times(f, ((($scope.get('Float')).$$scope.get('RADIX'))['$**'](e)))).$to_r(); + }; + }); - def.$max = TMP_2 = function() {var $zuper = $slice.call(arguments, 0); - var self = this, $iter = TMP_2.$$p, $yield = $iter || nil; + Opal.defn(self, '$to_s', function(base) { + var $a, $b, self = this; - TMP_2.$$p = null; - if (($yield !== nil)) { - return Opal.find_super_dispatcher(self, 'max', TMP_2, $iter).apply(self, $zuper) - } else { - return self.exclude ? self.end - 1 : self.end; - }; - }; + if (base == null) { + base = 10 + } + if ((($a = ((($b = $rb_lt(base, 2)) !== false && $b !== nil) ? $b : $rb_gt(base, 36))) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "base must be between 2 and 36")}; + return self.toString(base); + }); - Opal.defn(self, '$member?', def['$cover?']); + Opal.alias(self, 'truncate', 'to_i'); - def.$min = TMP_3 = function() {var $zuper = $slice.call(arguments, 0); - var self = this, $iter = TMP_3.$$p, $yield = $iter || nil; + Opal.alias(self, 'inspect', 'to_s'); - TMP_3.$$p = null; - if (($yield !== nil)) { - return Opal.find_super_dispatcher(self, 'min', TMP_3, $iter).apply(self, $zuper) + Opal.defn(self, '$divmod', TMP_10 = function(other) { + var $a, $b, self = this, $iter = TMP_10.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; + + TMP_10.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = ((($b = self['$nan?']()) !== false && $b !== nil) ? $b : other['$nan?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise($scope.get('FloatDomainError'), "NaN") + } else if ((($a = self['$infinite?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise($scope.get('FloatDomainError'), "Infinity") } else { - return self.begin + return Opal.find_super_dispatcher(self, 'divmod', TMP_10, $iter).apply(self, $zuper) }; - }; - - Opal.defn(self, '$member?', def['$include?']); + }); - def.$size = function() { - var $a, $b, self = this, _begin = nil, _end = nil, infinity = nil; + Opal.defn(self, '$upto', TMP_11 = function(stop) { + var $a, $b, TMP_12, self = this, $iter = TMP_11.$$p, block = $iter || nil; - _begin = self.begin; - _end = self.end; - if ((($a = self.exclude) !== nil && (!$a.$$is_boolean || $a == true))) { - _end = $rb_minus(_end, 1)}; - if ((($a = ($b = $scope.get('Numeric')['$==='](_begin), $b !== false && $b !== nil ?$scope.get('Numeric')['$==='](_end) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + TMP_11.$$p = null; + if ((block !== nil)) { } else { - return nil - }; - if ($rb_lt(_end, _begin)) { - return 0}; - infinity = (($scope.get('Float')).$$scope.get('INFINITY')); - if ((($a = ((($b = infinity['$=='](_begin.$abs())) !== false && $b !== nil) ? $b : _end.$abs()['$=='](infinity))) !== nil && (!$a.$$is_boolean || $a == true))) { - return infinity}; - return ((Math.abs(_end - _begin) + 1)).$to_i(); - }; - - def.$step = function(n) { - var self = this; + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_12 = function(){var self = TMP_12.$$s || this, $a; - if (n == null) { - n = 1 + if ((($a = $scope.get('Numeric')['$==='](stop)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") + }; + if ((($a = $rb_lt(stop, self)) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0 + } else { + return $rb_plus($rb_minus(stop, self), 1) + };}, TMP_12.$$s = self, TMP_12), $a).call($b, "upto", stop) + }; + + if (!stop.$$is_number) { + self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") } - return self.$raise($scope.get('NotImplementedError')); - }; + for (var i = self; i <= stop; i++) { + if (block(i) === $breaker) { + return $breaker.$v; + } + } + ; + return self; + }); - def.$to_s = function() { + Opal.defn(self, '$zero?', function() { var self = this; - return self.begin.$inspect() + (self.exclude ? '...' : '..') + self.end.$inspect(); - }; - - return Opal.defn(self, '$inspect', def.$to_s); - })(self, null); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/time"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_le(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_divide(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $range = Opal.range; + return self == 0; + }); - Opal.add_stubs(['$require', '$include', '$kind_of?', '$to_i', '$coerce_to', '$between?', '$raise', '$new', '$compact', '$nil?', '$===', '$<=>', '$to_f', '$strftime', '$is_a?', '$zero?', '$wday', '$utc?', '$warn', '$year', '$mon', '$day', '$yday', '$hour', '$min', '$sec', '$rjust', '$ljust', '$zone', '$to_s', '$[]', '$cweek_cyear', '$month', '$isdst', '$private', '$!', '$==', '$ceil']); - self.$require("corelib/comparable"); - return (function($base, $super) { - function $Time(){}; - var self = $Time = $klass($base, $super, 'Time', $Time); + Opal.defn(self, '$size', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return 4; + }); - def.tz_offset = nil; - self.$include($scope.get('Comparable')); + Opal.defn(self, '$nan?', function() { + var self = this; - - var days_of_week = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], - short_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - short_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - long_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - ; + return isNaN(self); + }); - Opal.defs(self, '$at', function(seconds, frac) { + Opal.defn(self, '$finite?', function() { var self = this; - if (frac == null) { - frac = 0 - } - return new Date(seconds * 1000 + frac); + return self != Infinity && self != -Infinity && !isNaN(self); }); - Opal.defs(self, '$new', function(year, month, day, hour, minute, second, utc_offset) { + Opal.defn(self, '$infinite?', function() { var self = this; - switch (arguments.length) { - case 1: - return new Date(year, 0); - - case 2: - return new Date(year, month - 1); - - case 3: - return new Date(year, month - 1, day); - - case 4: - return new Date(year, month - 1, day, hour); - - case 5: - return new Date(year, month - 1, day, hour, minute); - - case 6: - return new Date(year, month - 1, day, hour, minute, second); - - case 7: - return new Date(year, month - 1, day, hour, minute, second); - - default: - return new Date(); + if (self == Infinity) { + return +1; + } + else if (self == -Infinity) { + return -1; + } + else { + return nil; } }); - Opal.defs(self, '$local', function(year, month, day, hour, minute, second, millisecond) { - var $a, self = this; + Opal.defn(self, '$positive?', function() { + var self = this; - if (month == null) { - month = nil - } - if (day == null) { - day = nil - } - if (hour == null) { - hour = nil - } - if (minute == null) { - minute = nil - } - if (second == null) { - second = nil - } - if (millisecond == null) { - millisecond = nil - } - if ((($a = arguments.length === 10) !== nil && (!$a.$$is_boolean || $a == true))) { - - var args = $slice.call(arguments).reverse(); - - second = args[9]; - minute = args[8]; - hour = args[7]; - day = args[6]; - month = args[5]; - year = args[4]; - }; - year = (function() {if ((($a = year['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return year.$to_i() - } else { - return $scope.get('Opal').$coerce_to(year, $scope.get('Integer'), "to_int") - }; return nil; })(); - month = (function() {if ((($a = month['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return month.$to_i() - } else { - return $scope.get('Opal').$coerce_to(((($a = month) !== false && $a !== nil) ? $a : 1), $scope.get('Integer'), "to_int") - }; return nil; })(); - if ((($a = month['$between?'](1, 12)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "month out of range: " + (month)) - }; - day = (function() {if ((($a = day['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return day.$to_i() - } else { - return $scope.get('Opal').$coerce_to(((($a = day) !== false && $a !== nil) ? $a : 1), $scope.get('Integer'), "to_int") - }; return nil; })(); - if ((($a = day['$between?'](1, 31)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "day out of range: " + (day)) - }; - hour = (function() {if ((($a = hour['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return hour.$to_i() - } else { - return $scope.get('Opal').$coerce_to(((($a = hour) !== false && $a !== nil) ? $a : 0), $scope.get('Integer'), "to_int") - }; return nil; })(); - if ((($a = hour['$between?'](0, 24)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "hour out of range: " + (hour)) - }; - minute = (function() {if ((($a = minute['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return minute.$to_i() - } else { - return $scope.get('Opal').$coerce_to(((($a = minute) !== false && $a !== nil) ? $a : 0), $scope.get('Integer'), "to_int") - }; return nil; })(); - if ((($a = minute['$between?'](0, 59)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "minute out of range: " + (minute)) - }; - second = (function() {if ((($a = second['$kind_of?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return second.$to_i() - } else { - return $scope.get('Opal').$coerce_to(((($a = second) !== false && $a !== nil) ? $a : 0), $scope.get('Integer'), "to_int") - }; return nil; })(); - if ((($a = second['$between?'](0, 59)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "second out of range: " + (second)) - }; - return ($a = self).$new.apply($a, [].concat([year, month, day, hour, minute, second].$compact())); + return self == Infinity || 1 / self > 0; }); - Opal.defs(self, '$gm', function(year, month, day, hour, minute, second, utc_offset) { - var $a, self = this; + return (Opal.defn(self, '$negative?', function() { + var self = this; + + return self == -Infinity || 1 / self < 0; + }), nil) && 'negative?'; + })($scope.base, $scope.get('Numeric')); + Opal.cdecl($scope, 'Fixnum', $scope.get('Number')); + (function($base, $super) { + function $Integer(){}; + var self = $Integer = $klass($base, $super, 'Integer', $Integer); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defs(self, '$===', function(other) { + var self = this; - if ((($a = year['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('TypeError'), "missing year (got nil)")}; - if (month > 12 || day > 31 || hour > 24 || minute > 59 || second > 59) { - self.$raise($scope.get('ArgumentError')); + if (!other.$$is_number) { + return false; } - var date = new Date(Date.UTC(year, (month || 1) - 1, (day || 1), (hour || 0), (minute || 0), (second || 0))); - date.tz_offset = 0 - return date; - ; + return (other % 1) === 0; + }); - (function(self) { - var $scope = self.$$scope, def = self.$$proto; + Opal.cdecl($scope, 'MAX', Math.pow(2, 30) - 1); + + return Opal.cdecl($scope, 'MIN', -Math.pow(2, 30)); + })($scope.base, $scope.get('Numeric')); + return (function($base, $super) { + function $Float(){}; + var self = $Float = $klass($base, $super, 'Float', $Float); - self.$$proto.$mktime = self.$$proto.$local; - return self.$$proto.$utc = self.$$proto.$gm; - })(self.$singleton_class()); + var def = self.$$proto, $scope = self.$$scope, $a; - Opal.defs(self, '$now', function() { + Opal.defs(self, '$===', function(other) { var self = this; - return new Date(); + return !!other.$$is_number; }); - def['$+'] = function(other) { - var $a, self = this; + Opal.cdecl($scope, 'INFINITY', Infinity); - if ((($a = $scope.get('Time')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('TypeError'), "time + time?")}; - other = $scope.get('Opal').$coerce_to(other, $scope.get('Integer'), "to_int"); - - var result = new Date(self.getTime() + (other * 1000)); - result.tz_offset = self.tz_offset; + Opal.cdecl($scope, 'MAX', Number.MAX_VALUE); - return result; - - }; + Opal.cdecl($scope, 'MIN', Number.MIN_VALUE); - def['$-'] = function(other) { - var $a, self = this; + Opal.cdecl($scope, 'NAN', NaN); - if ((($a = $scope.get('Time')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - return (self.getTime() - other.getTime()) / 1000}; - other = $scope.get('Opal').$coerce_to(other, $scope.get('Integer'), "to_int"); - - var result = new Date(self.getTime() - (other * 1000)); - result.tz_offset = self.tz_offset; + Opal.cdecl($scope, 'DIG', 15); - return result; - - }; + Opal.cdecl($scope, 'MANT_DIG', 53); - def['$<=>'] = function(other) { - var self = this; + Opal.cdecl($scope, 'RADIX', 2); - return self.$to_f()['$<=>'](other.$to_f()); + if ((($a = (typeof(Number.EPSILON) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + return Opal.cdecl($scope, 'EPSILON', Number.EPSILON) + } else { + return Opal.cdecl($scope, 'EPSILON', 2.2204460492503130808472633361816E-16) }; + })($scope.base, $scope.get('Numeric')); +}; - def['$=='] = function(other) { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/range"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_le(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - return self.$to_f() === other.$to_f(); - }; + Opal.add_stubs(['$require', '$include', '$attr_reader', '$<=>', '$raise', '$include?', '$<=', '$<', '$enum_for', '$upto', '$to_proc', '$succ', '$!', '$==', '$===', '$exclude_end?', '$eql?', '$begin', '$end', '$-', '$abs', '$to_i', '$inspect']); + self.$require("corelib/enumerable"); + return (function($base, $super) { + function $Range(){}; + var self = $Range = $klass($base, $super, 'Range', $Range); - def.$asctime = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3; - return self.$strftime("%a %b %e %H:%M:%S %Y"); - }; + def.begin = def.exclude = def.end = nil; + self.$include($scope.get('Enumerable')); - Opal.defn(self, '$ctime', def.$asctime); + def.$$is_range = true; - def.$day = function() { - var self = this; + self.$attr_reader("begin", "end"); - - if (self.tz_offset === 0) { - return self.getUTCDate(); - } - else { - return self.getDate(); + Opal.defn(self, '$initialize', function(first, last, exclude) { + var $a, self = this; + + if (exclude == null) { + exclude = false } - ; - }; + if ((($a = first['$<=>'](last)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError')) + }; + self.begin = first; + self.end = last; + return self.exclude = exclude; + }); - def.$yday = function() { + Opal.defn(self, '$==', function(other) { var self = this; - // http://javascript.about.com/library/bldayyear.htm - var onejan = new Date(self.getFullYear(), 0, 1); - return Math.ceil((self - onejan) / 86400000); - - }; - - def.$isdst = function() { - var self = this; + if (!other.$$is_range) { + return false; + } - return self.$raise($scope.get('NotImplementedError')); - }; + return self.exclude === other.exclude && + self.begin == other.begin && + self.end == other.end; + + }); - def['$eql?'] = function(other) { - var $a, self = this; + Opal.defn(self, '$===', function(value) { + var self = this; - return ($a = other['$is_a?']($scope.get('Time')), $a !== false && $a !== nil ?(self['$<=>'](other))['$zero?']() : $a); - }; + return self['$include?'](value); + }); - def['$friday?'] = function() { - var self = this; + Opal.defn(self, '$cover?', function(value) { + var $a, $b, self = this; - return self.$wday() == 5; - }; + return ($a = $rb_le(self.begin, value), $a !== false && $a !== nil ?((function() {if ((($b = self.exclude) !== nil && (!$b.$$is_boolean || $b == true))) { + return $rb_lt(value, self.end) + } else { + return $rb_le(value, self.end) + }; return nil; })()) : $a); + }); - def.$hour = function() { - var self = this; + Opal.defn(self, '$each', TMP_1 = function() { + var $a, $b, $c, self = this, $iter = TMP_1.$$p, block = $iter || nil, current = nil, last = nil; + TMP_1.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("each") + }; - if (self.tz_offset === 0) { - return self.getUTCHours(); + var i, limit, value; + + if (self.begin.$$is_number && self.end.$$is_number) { + if (self.begin % 1 !== 0 || self.end % 1 !== 0) { + self.$raise($scope.get('TypeError'), "can't iterate from Float") + } + + for (i = self.begin, limit = self.end + (function() {if ((($a = self.exclude) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0 + } else { + return 1 + }; return nil; })(); i < limit; i++) { + value = block(i); + if (value === $breaker) { return $breaker.$v; } + } + + return self; } - else { - return self.getHours(); + + if (self.begin.$$is_string && self.end.$$is_string) { + value = ($a = ($b = self.begin).$upto, $a.$$p = block.$to_proc(), $a).call($b, self.end, self.exclude); + + // The following is a bit hackish: we know that + // String#upto normally returns self, but may + // return a different value if there's a `break` + // statement in the supplied block. We need to + // propagate this `break` value here, so we + // test for equality with `@begin` string to + // determine the return value: + return value === self.begin ? self : value; } ; - }; + current = self.begin; + last = self.end; + while ((($c = $rb_lt(current, last)) !== nil && (!$c.$$is_boolean || $c == true))) { + if (Opal.yield1(block, current) === $breaker) return $breaker.$v; + current = current.$succ();}; + if ((($a = ($c = self.exclude['$!'](), $c !== false && $c !== nil ?current['$=='](last) : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { + if (Opal.yield1(block, current) === $breaker) return $breaker.$v}; + return self; + }); - def.$inspect = function() { - var $a, self = this; + Opal.defn(self, '$eql?', function(other) { + var $a, $b, self = this; - if ((($a = self['$utc?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$strftime("%Y-%m-%d %H:%M:%S UTC") + if ((($a = $scope.get('Range')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return self.$strftime("%Y-%m-%d %H:%M:%S %z") + return false }; - }; - - Opal.defn(self, '$mday', def.$day); + return ($a = ($b = self.exclude['$==='](other['$exclude_end?']()), $b !== false && $b !== nil ?self.begin['$eql?'](other.$begin()) : $b), $a !== false && $a !== nil ?self.end['$eql?'](other.$end()) : $a); + }); - def.$min = function() { + Opal.defn(self, '$exclude_end?', function() { var self = this; - - if (self.tz_offset === 0) { - return self.getUTCMinutes(); + return self.exclude; + }); + + Opal.alias(self, 'first', 'begin'); + + Opal.alias(self, 'include?', 'cover?'); + + Opal.alias(self, 'last', 'end'); + + Opal.defn(self, '$max', TMP_2 = function() { + var self = this, $iter = TMP_2.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; + + TMP_2.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; } - else { - return self.getMinutes(); + if (($yield !== nil)) { + return Opal.find_super_dispatcher(self, 'max', TMP_2, $iter).apply(self, $zuper) + } else { + return self.exclude ? self.end - 1 : self.end; + }; + }); + + Opal.alias(self, 'member?', 'cover?'); + + Opal.defn(self, '$min', TMP_3 = function() { + var self = this, $iter = TMP_3.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; + + TMP_3.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; } - ; - }; + if (($yield !== nil)) { + return Opal.find_super_dispatcher(self, 'min', TMP_3, $iter).apply(self, $zuper) + } else { + return self.begin + }; + }); + + Opal.alias(self, 'member?', 'include?'); + + Opal.defn(self, '$size', function() { + var $a, $b, self = this, _begin = nil, _end = nil, infinity = nil; + + _begin = self.begin; + _end = self.end; + if ((($a = self.exclude) !== nil && (!$a.$$is_boolean || $a == true))) { + _end = $rb_minus(_end, 1)}; + if ((($a = ($b = $scope.get('Numeric')['$==='](_begin), $b !== false && $b !== nil ?$scope.get('Numeric')['$==='](_end) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return nil + }; + if ((($a = $rb_lt(_end, _begin)) !== nil && (!$a.$$is_boolean || $a == true))) { + return 0}; + infinity = (($scope.get('Float')).$$scope.get('INFINITY')); + if ((($a = ((($b = infinity['$=='](_begin.$abs())) !== false && $b !== nil) ? $b : _end.$abs()['$=='](infinity))) !== nil && (!$a.$$is_boolean || $a == true))) { + return infinity}; + return ((Math.abs(_end - _begin) + 1)).$to_i(); + }); - def.$mon = function() { + Opal.defn(self, '$step', function(n) { var self = this; - - if (self.tz_offset === 0) { - return self.getUTCMonth() + 1; - } - else { - return self.getMonth() + 1; + if (n == null) { + n = 1 } - ; - }; + return self.$raise($scope.get('NotImplementedError')); + }); - def['$monday?'] = function() { + Opal.defn(self, '$to_s', function() { var self = this; - return self.$wday() == 1; - }; + return self.begin.$inspect() + (self.exclude ? '...' : '..') + self.end.$inspect(); + }); - Opal.defn(self, '$month', def.$mon); + return Opal.alias(self, 'inspect', 'to_s'); + })($scope.base, null); +}; - def['$saturday?'] = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/proc"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - return self.$wday() == 6; - }; + Opal.add_stubs(['$raise', '$coerce_to!']); + return (function($base, $super) { + function $Proc(){}; + var self = $Proc = $klass($base, $super, 'Proc', $Proc); - def.$sec = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2; - - if (self.tz_offset === 0) { - return self.getUTCSeconds(); - } - else { - return self.getSeconds(); - } - ; - }; + def.$$is_proc = true; - def.$usec = function() { - var self = this; + def.$$is_lambda = false; - self.$warn("Microseconds are not supported"); - return 0; - }; + Opal.defs(self, '$new', TMP_1 = function() { + var self = this, $iter = TMP_1.$$p, block = $iter || nil; - def.$zone = function() { - var self = this; + TMP_1.$$p = null; + if (block !== false && block !== nil) { + } else { + self.$raise($scope.get('ArgumentError'), "tried to create a Proc object without a block") + }; + return block; + }); - - var string = self.toString(), - result; + Opal.defn(self, '$call', TMP_2 = function() { + var self = this, $iter = TMP_2.$$p, block = $iter || nil, $splat_index = nil; - if (string.indexOf('(') == -1) { - result = string.match(/[A-Z]{3,4}/)[0]; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; } - else { - result = string.match(/\([^)]+\)/)[0].match(/[A-Z]/g).join(''); + TMP_2.$$p = null; + + if (block !== nil) { + self.$$p = block; } - if (result == "GMT" && /(GMT\W*\d{4})/.test(string)) { - return RegExp.$1; + var result; + + if (self.$$is_lambda) { + result = self.apply(null, args); } else { - return result; + result = Opal.yieldX(self, args); } - - }; - def.$getgm = function() { - var self = this; - - - var result = new Date(self.getTime()); - result.tz_offset = 0; + if (result === $breaker) { + return $breaker.$v; + } return result; - }; + }); - def['$gmt?'] = function() { - var self = this; + Opal.alias(self, '[]', 'call'); - return self.tz_offset === 0; - }; + Opal.alias(self, '===', 'call'); - def.$gmt_offset = function() { + Opal.alias(self, 'yield', 'call'); + + Opal.defn(self, '$to_proc', function() { var self = this; - return -self.getTimezoneOffset() * 60; - }; + return self; + }); - def.$strftime = function(format) { + Opal.defn(self, '$lambda?', function() { var self = this; - - return format.replace(/%([\-_#^0]*:{0,2})(\d+)?([EO]*)(.)/g, function(full, flags, width, _, conv) { - var result = "", - width = parseInt(width), - zero = flags.indexOf('0') !== -1, - pad = flags.indexOf('-') === -1, - blank = flags.indexOf('_') !== -1, - upcase = flags.indexOf('^') !== -1, - invert = flags.indexOf('#') !== -1, - colons = (flags.match(':') || []).length; + return !!self.$$is_lambda; + }); - if (zero && blank) { - if (flags.indexOf('0') < flags.indexOf('_')) { - zero = false; - } - else { - blank = false; - } - } + Opal.defn(self, '$arity', function() { + var self = this; - switch (conv) { - case 'Y': - result += self.$year(); - break; + if (self.$$is_curried) { return -1; } + if (self.$$arity) { return self.$$arity }; + return self.length; + }); - case 'C': - zero = !blank; - result += Math.round(self.$year() / 100); - break; + Opal.defn(self, '$source_location', function() { + var self = this; - case 'y': - zero = !blank; - result += (self.$year() % 100); - break; + if (self.$$is_curried) { return nil; } + return nil; + }); - case 'm': - zero = !blank; - result += self.$mon(); - break; + Opal.defn(self, '$binding', function() { + var self = this; - case 'B': - result += long_months[self.$mon() - 1]; - break; + if (self.$$is_curried) { self.$raise($scope.get('ArgumentError'), "Can't create Binding") }; + return nil; + }); - case 'b': - case 'h': - blank = !zero; - result += short_months[self.$mon() - 1]; - break; + Opal.defn(self, '$parameters', function() { + var self = this; - case 'd': - zero = !blank - result += self.$day(); - break; + if (self.$$is_curried) { return [["rest"]]; }; + return nil; + }); - case 'e': - blank = !zero - result += self.$day(); - break; + Opal.defn(self, '$curry', function(arity) { + var self = this; - case 'j': - result += self.$yday(); - break; - - case 'H': - zero = !blank; - result += self.$hour(); - break; - - case 'k': - blank = !zero; - result += self.$hour(); - break; - - case 'I': - zero = !blank; - result += (self.$hour() % 12 || 12); - break; - - case 'l': - blank = !zero; - result += (self.$hour() % 12 || 12); - break; - - case 'P': - result += (self.$hour() >= 12 ? "pm" : "am"); - break; - - case 'p': - result += (self.$hour() >= 12 ? "PM" : "AM"); - break; - - case 'M': - zero = !blank; - result += self.$min(); - break; - - case 'S': - zero = !blank; - result += self.$sec() - break; - - case 'L': - zero = !blank; - width = isNaN(width) ? 3 : width; - result += self.getMilliseconds(); - break; - - case 'N': - width = isNaN(width) ? 9 : width; - result += (self.getMilliseconds().toString()).$rjust(3, "0"); - result = (result).$ljust(width, "0"); - break; - - case 'z': - var offset = self.getTimezoneOffset(), - hours = Math.floor(Math.abs(offset) / 60), - minutes = Math.abs(offset) % 60; - - result += offset < 0 ? "+" : "-"; - result += hours < 10 ? "0" : ""; - result += hours; - - if (colons > 0) { - result += ":"; - } + + if (arity === undefined) { + arity = self.length; + } + else { + arity = $scope.get('Opal')['$coerce_to!'](arity, $scope.get('Integer'), "to_int"); + if (self.$$is_lambda && arity !== self.length) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arity) + " for " + (self.length) + ")") + } + } - result += minutes < 10 ? "0" : ""; - result += minutes; + function curried () { + var args = $slice.call(arguments), + length = args.length, + result; - if (colons > 1) { - result += ":00"; - } + if (length > arity && self.$$is_lambda && !self.$$is_curried) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (length) + " for " + (arity) + ")") + } - break; + if (length >= arity) { + return self.$call.apply(self, args); + } - case 'Z': - result += self.$zone(); - break; + result = function () { + return curried.apply(null, + args.concat($slice.call(arguments))); + } + result.$$is_lambda = self.$$is_lambda; + result.$$is_curried = true; - case 'A': - result += days_of_week[self.$wday()]; - break; + return result; + }; - case 'a': - result += short_days[self.$wday()]; - break; + curried.$$is_lambda = self.$$is_lambda; + curried.$$is_curried = true; + return curried; + + }); - case 'u': - result += (self.$wday() + 1); - break; + Opal.defn(self, '$dup', function() { + var self = this; - case 'w': - result += self.$wday(); - break; + + var original_proc = self.$$original_proc || self, + proc = function () { + return original_proc.apply(this, arguments); + }; - case 'V': - result += self.$cweek_cyear()['$[]'](0).$to_s().$rjust(2, "0"); - break; + for (var prop in self) { + if (self.hasOwnProperty(prop)) { + proc[prop] = self[prop]; + } + } - case 'G': - result += self.$cweek_cyear()['$[]'](1); - break; + return proc; + + }); - case 'g': - result += self.$cweek_cyear()['$[]'](1)['$[]']($range(-2, -1, false)); - break; + return Opal.alias(self, 'clone', 'dup'); + })($scope.base, Function) +}; - case 's': - result += self.$to_i(); - break; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/method"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - case 'n': - result += "\n"; - break; + Opal.add_stubs(['$attr_reader', '$class', '$arity', '$new', '$name']); + (function($base, $super) { + function $Method(){}; + var self = $Method = $klass($base, $super, 'Method', $Method); - case 't': - result += "\t"; - break; + var def = self.$$proto, $scope = self.$$scope, TMP_1; - case '%': - result += "%"; - break; + def.method = def.receiver = def.owner = def.name = nil; + self.$attr_reader("owner", "receiver", "name"); - case 'c': - result += self.$strftime("%a %b %e %T %Y"); - break; + Opal.defn(self, '$initialize', function(receiver, method, name) { + var self = this; - case 'D': - case 'x': - result += self.$strftime("%m/%d/%y"); - break; + self.receiver = receiver; + self.owner = receiver.$class(); + self.name = name; + return self.method = method; + }); - case 'F': - result += self.$strftime("%Y-%m-%d"); - break; + Opal.defn(self, '$arity', function() { + var self = this; - case 'v': - result += self.$strftime("%e-%^b-%4Y"); - break; + return self.method.$arity(); + }); - case 'r': - result += self.$strftime("%I:%M:%S %p"); - break; + Opal.defn(self, '$call', TMP_1 = function() { + var self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil; - case 'R': - result += self.$strftime("%H:%M"); - break; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_1.$$p = null; + + self.method.$$p = block; - case 'T': - case 'X': - result += self.$strftime("%H:%M:%S"); - break; + return self.method.apply(self.receiver, args); + ; + }); - default: - return full; - } + Opal.alias(self, '[]', 'call'); - if (upcase) { - result = result.toUpperCase(); - } + Opal.defn(self, '$unbind', function() { + var self = this; - if (invert) { - result = result.replace(/[A-Z]/, function(c) { c.toLowerCase() }). - replace(/[a-z]/, function(c) { c.toUpperCase() }); - } + return $scope.get('UnboundMethod').$new(self.owner, self.method, self.name); + }); - if (pad && (zero || blank)) { - result = (result).$rjust(isNaN(width) ? 2 : width, blank ? " " : "0"); - } + Opal.defn(self, '$to_proc', function() { + var self = this; - return result; - }); + + var proc = function () { return self.$call.apply(self, $slice.call(arguments)); }; + proc.$$unbound = self.method; + proc.$$is_lambda = true; + return proc; - }; + }); - def['$sunday?'] = function() { + return (Opal.defn(self, '$inspect', function() { var self = this; - return self.$wday() == 0; - }; + return "#"; + }), nil) && 'inspect'; + })($scope.base, null); + return (function($base, $super) { + function $UnboundMethod(){}; + var self = $UnboundMethod = $klass($base, $super, 'UnboundMethod', $UnboundMethod); - def['$thursday?'] = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return self.$wday() == 4; - }; + def.method = def.name = def.owner = nil; + self.$attr_reader("owner", "name"); - def.$to_a = function() { + Opal.defn(self, '$initialize', function(owner, method, name) { var self = this; - return [self.$sec(), self.$min(), self.$hour(), self.$day(), self.$month(), self.$year(), self.$wday(), self.$yday(), self.$isdst(), self.$zone()]; - }; + self.owner = owner; + self.method = method; + return self.name = name; + }); - def.$to_f = function() { + Opal.defn(self, '$arity', function() { var self = this; - return self.getTime() / 1000; - }; + return self.method.$arity(); + }); - def.$to_i = function() { + Opal.defn(self, '$bind', function(object) { var self = this; - return parseInt(self.getTime() / 1000); - }; - - Opal.defn(self, '$to_s', def.$inspect); + return $scope.get('Method').$new(object, self.method, self.name); + }); - def['$tuesday?'] = function() { + return (Opal.defn(self, '$inspect', function() { var self = this; - return self.$wday() == 2; - }; - - Opal.defn(self, '$utc?', def['$gmt?']); - - Opal.defn(self, '$utc_offset', def.$gmt_offset); + return "#"; + }), nil) && 'inspect'; + })($scope.base, null); +}; - def.$wday = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/variables"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $gvars = Opal.gvars, $hash2 = Opal.hash2; - - if (self.tz_offset === 0) { - return self.getUTCDay(); - } - else { - return self.getDay(); - } - ; - }; + Opal.add_stubs(['$new']); + $gvars["&"] = $gvars["~"] = $gvars["`"] = $gvars["'"] = nil; + $gvars.LOADED_FEATURES = $gvars["\""] = Opal.loaded_features; + $gvars.LOAD_PATH = $gvars[":"] = []; + $gvars["/"] = "\n"; + $gvars[","] = nil; + Opal.cdecl($scope, 'ARGV', []); + Opal.cdecl($scope, 'ARGF', $scope.get('Object').$new()); + Opal.cdecl($scope, 'ENV', $hash2([], {})); + $gvars.VERBOSE = false; + $gvars.DEBUG = false; + return $gvars.SAFE = 0; +}; - def['$wednesday?'] = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/mini"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; - return self.$wday() == 3; - }; - - def.$year = function() { - var self = this; - - - if (self.tz_offset === 0) { - return self.getUTCFullYear(); - } - else { - return self.getFullYear(); - } - ; - }; - - self.$private("cweek_cyear"); - - return (def.$cweek_cyear = function() { - var $a, $b, self = this, jan01 = nil, jan01_wday = nil, first_monday = nil, year = nil, offset = nil, week = nil, dec31 = nil, dec31_wday = nil; - - jan01 = $scope.get('Time').$new(self.$year(), 1, 1); - jan01_wday = jan01.$wday(); - first_monday = 0; - year = self.$year(); - if ((($a = (($b = $rb_le(jan01_wday, 4)) ? jan01_wday['$=='](0)['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - offset = $rb_minus(jan01_wday, 1) - } else { - offset = $rb_minus($rb_minus(jan01_wday, 7), 1); - if (offset['$=='](-8)) { - offset = -1}; - }; - week = ($rb_divide(($rb_plus(self.$yday(), offset)), 7.0)).$ceil(); - if ($rb_le(week, 0)) { - return $scope.get('Time').$new($rb_minus(self.$year(), 1), 12, 31).$cweek_cyear() - } else if (week['$=='](53)) { - dec31 = $scope.get('Time').$new(self.$year(), 12, 31); - dec31_wday = dec31.$wday(); - if ((($a = (($b = $rb_le(dec31_wday, 3)) ? dec31_wday['$=='](0)['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - week = 1; - year = $rb_plus(year, 1);};}; - return [week, year]; - }, nil) && 'cweek_cyear'; - })(self, null); + Opal.add_stubs(['$require']); + self.$require("opal/base"); + self.$require("corelib/nil"); + self.$require("corelib/boolean"); + self.$require("corelib/string"); + self.$require("corelib/comparable"); + self.$require("corelib/enumerable"); + self.$require("corelib/enumerator"); + self.$require("corelib/array"); + self.$require("corelib/hash"); + self.$require("corelib/number"); + self.$require("corelib/range"); + self.$require("corelib/proc"); + self.$require("corelib/method"); + self.$require("corelib/regexp"); + return self.$require("corelib/variables"); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/struct"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/array/inheritance"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); } - function $rb_ge(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); } function $rb_plus(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $hash2 = Opal.hash2; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - Opal.add_stubs(['$require', '$include', '$==', '$[]', '$upcase', '$const_set', '$new', '$unshift', '$each', '$define_struct_attribute', '$instance_eval', '$to_proc', '$raise', '$<<', '$members', '$attr_accessor', '$each_with_index', '$instance_variable_set', '$class', '$===', '$-@', '$size', '$include?', '$to_sym', '$instance_variable_get', '$enum_for', '$hash', '$all?', '$length', '$map', '$join', '$inspect', '$each_pair', '$inject', '$[]=', '$flatten', '$to_a']); - self.$require("corelib/enumerable"); + Opal.add_stubs(['$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$clone', '$respond_to?', '$==', '$eql?', '$inspect', '$hash', '$*', '$class', '$slice', '$uniq', '$flatten', '$-', '$+']); + (function($base, $super) { + function $Array(){}; + var self = $Array = $klass($base, $super, 'Array', $Array); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defs(self, '$inherited', function(klass) { + var self = this, replace = nil; + + replace = $scope.get('Class').$new((($scope.get('Array')).$$scope.get('Wrapper'))); + + klass.$$proto = replace.$$proto; + klass.$$proto.$$class = klass; + klass.$$alloc = replace.$$alloc; + klass.$$parent = (($scope.get('Array')).$$scope.get('Wrapper')); + + klass.$allocate = replace.$allocate; + klass.$new = replace.$new; + klass["$[]"] = replace["$[]"]; + + }), nil) && 'inherited' + })($scope.base, null); return (function($base, $super) { - function $Struct(){}; - var self = $Struct = $klass($base, $super, 'Struct', $Struct); + function $Wrapper(){}; + var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_6, TMP_8; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5; - self.$include($scope.get('Enumerable')); + def.literal = nil; + def.$$is_array = true; - Opal.defs(self, '$new', TMP_1 = function(name, args) {var $zuper = $slice.call(arguments, 0); - var $a, $b, $c, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defs(self, '$allocate', TMP_1 = function(array) { + var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, obj = nil; - args = $slice.call(arguments, 1); + if (array == null) { + array = [] + } TMP_1.$$p = null; - if (self['$==']($scope.get('Struct'))) { - } else { - return Opal.find_super_dispatcher(self, 'new', TMP_1, $iter, $Struct).apply(self, $zuper) - }; - if (name['$[]'](0)['$=='](name['$[]'](0).$upcase())) { - return $scope.get('Struct').$const_set(name, ($a = self).$new.apply($a, [].concat(args))) - } else { - args.$unshift(name); - return ($b = ($c = $scope.get('Class')).$new, $b.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, $b, TMP_3, $c; - - ($a = ($b = args).$each, $a.$$p = (TMP_3 = function(arg){var self = TMP_3.$$s || this; -if (arg == null) arg = nil; - return self.$define_struct_attribute(arg)}, TMP_3.$$s = self, TMP_3), $a).call($b); - if (block !== false && block !== nil) { - return ($a = ($c = self).$instance_eval, $a.$$p = block.$to_proc(), $a).call($c) - } else { - return nil - };}, TMP_2.$$s = self, TMP_2), $b).call($c, self); - }; + obj = Opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []); + obj.literal = array; + return obj; }); - Opal.defs(self, '$define_struct_attribute', function(name) { - var self = this; + Opal.defs(self, '$new', TMP_2 = function() { + var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil, obj = nil, $splat_index = nil; - if (self['$==']($scope.get('Struct'))) { - self.$raise($scope.get('ArgumentError'), "you cannot define attributes to the Struct class")}; - self.$members()['$<<'](name); - return self.$attr_accessor(name); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_2.$$p = null; + obj = self.$allocate(); + ($a = ($b = obj).$initialize, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + return obj; }); - Opal.defs(self, '$members', function() { - var $a, self = this; - if (self.members == null) self.members = nil; + Opal.defs(self, '$[]', function() { + var self = this, $splat_index = nil; - if (self['$==']($scope.get('Struct'))) { - self.$raise($scope.get('ArgumentError'), "the Struct class has no members")}; - return ((($a = self.members) !== false && $a !== nil) ? $a : self.members = []); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 0]; + } + return self.$allocate(objects); }); - Opal.defs(self, '$inherited', function(klass) { - var $a, $b, TMP_4, self = this, members = nil; - if (self.members == null) self.members = nil; + Opal.defn(self, '$initialize', TMP_3 = function() { + var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil, $splat_index = nil; - members = self.members; - return ($a = ($b = klass).$instance_eval, $a.$$p = (TMP_4 = function(){var self = TMP_4.$$s || this; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_3.$$p = null; + return self.literal = ($a = ($b = $scope.get('Array')).$new, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + }); - return self.members = members}, TMP_4.$$s = self, TMP_4), $a).call($b); + Opal.defn(self, '$method_missing', TMP_4 = function() { + var $a, $b, self = this, $iter = TMP_4.$$p, block = $iter || nil, result = nil, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_4.$$p = null; + result = ($a = ($b = self.literal).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + if ((($a = result === self.literal) !== nil && (!$a.$$is_boolean || $a == true))) { + return self + } else { + return result + }; }); - (function(self) { - var $scope = self.$$scope, def = self.$$proto; + Opal.defn(self, '$initialize_copy', function(other) { + var self = this; - return self.$$proto['$[]'] = self.$$proto.$new - })(self.$singleton_class()); + return self.literal = (other.literal).$clone(); + }); - def.$initialize = function(args) { - var $a, $b, TMP_5, self = this; + Opal.defn(self, '$respond_to?', TMP_5 = function(name) { + var $a, self = this, $iter = TMP_5.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - args = $slice.call(arguments, 0); - return ($a = ($b = self.$members()).$each_with_index, $a.$$p = (TMP_5 = function(name, index){var self = TMP_5.$$s || this; -if (name == null) name = nil;if (index == null) index = nil; - return self.$instance_variable_set("@" + (name), args['$[]'](index))}, TMP_5.$$s = self, TMP_5), $a).call($b); - }; + TMP_5.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + return ((($a = Opal.find_super_dispatcher(self, 'respond_to?', TMP_5, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name)); + }); - def.$members = function() { + Opal.defn(self, '$==', function(other) { var self = this; - return self.$class().$members(); - }; + return self.literal['$=='](other); + }); - def['$[]'] = function(name) { - var $a, self = this; + Opal.defn(self, '$eql?', function(other) { + var self = this; - if ((($a = $scope.get('Integer')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ($rb_lt(name, self.$members().$size()['$-@']())) { - self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$members().$size()) + ")")}; - if ($rb_ge(name, self.$members().$size())) { - self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")}; - name = self.$members()['$[]'](name); - } else if ((($a = $scope.get('String')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = self.$members()['$include?'](name.$to_sym())) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('NameError'), "no member '" + (name) + "' in struct") - } - } else { - self.$raise($scope.get('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") - }; - return self.$instance_variable_get("@" + (name)); - }; + return self.literal['$eql?'](other); + }); - def['$[]='] = function(name, value) { - var $a, self = this; + Opal.defn(self, '$to_a', function() { + var self = this; - if ((($a = $scope.get('Integer')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ($rb_lt(name, self.$members().$size()['$-@']())) { - self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$members().$size()) + ")")}; - if ($rb_ge(name, self.$members().$size())) { - self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")}; - name = self.$members()['$[]'](name); - } else if ((($a = $scope.get('String')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = self.$members()['$include?'](name.$to_sym())) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('NameError'), "no member '" + (name) + "' in struct") - } - } else { - self.$raise($scope.get('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") - }; - return self.$instance_variable_set("@" + (name), value); - }; + return self.literal; + }); - def.$each = TMP_6 = function() { - var $a, $b, TMP_7, self = this, $iter = TMP_6.$$p, $yield = $iter || nil; + Opal.defn(self, '$to_ary', function() { + var self = this; - TMP_6.$$p = null; - if (($yield !== nil)) { - } else { - return self.$enum_for("each") - }; - ($a = ($b = self.$members()).$each, $a.$$p = (TMP_7 = function(name){var self = TMP_7.$$s || this, $a; -if (name == null) name = nil; - return $a = Opal.yield1($yield, self['$[]'](name)), $a === $breaker ? $a : $a}, TMP_7.$$s = self, TMP_7), $a).call($b); return self; - }; + }); - def.$each_pair = TMP_8 = function() { - var $a, $b, TMP_9, self = this, $iter = TMP_8.$$p, $yield = $iter || nil; + Opal.defn(self, '$inspect', function() { + var self = this; - TMP_8.$$p = null; - if (($yield !== nil)) { - } else { - return self.$enum_for("each_pair") - }; - ($a = ($b = self.$members()).$each, $a.$$p = (TMP_9 = function(name){var self = TMP_9.$$s || this, $a; -if (name == null) name = nil; - return $a = Opal.yieldX($yield, [name, self['$[]'](name)]), $a === $breaker ? $a : $a}, TMP_9.$$s = self, TMP_9), $a).call($b); - return self; - }; + return self.literal.$inspect(); + }); - def['$eql?'] = function(other) { - var $a, $b, $c, TMP_10, self = this; + Opal.defn(self, '$hash', function() { + var self = this; - return ((($a = self.$hash()['$=='](other.$hash())) !== false && $a !== nil) ? $a : ($b = ($c = other.$each_with_index())['$all?'], $b.$$p = (TMP_10 = function(object, index){var self = TMP_10.$$s || this; -if (object == null) object = nil;if (index == null) index = nil; - return self['$[]'](self.$members()['$[]'](index))['$=='](object)}, TMP_10.$$s = self, TMP_10), $b).call($c)); - }; + return self.literal.$hash(); + }); - def.$length = function() { + Opal.defn(self, '$*', function(other) { var self = this; - return self.$members().$length(); - }; + + var result = $rb_times(self.literal, other); - Opal.defn(self, '$size', def.$length); + if (result.$$is_array) { + return self.$class().$allocate(result) + } + else { + return result; + } + ; + }); - def.$to_a = function() { - var $a, $b, TMP_11, self = this; + Opal.defn(self, '$[]', function(index, length) { + var self = this; - return ($a = ($b = self.$members()).$map, $a.$$p = (TMP_11 = function(name){var self = TMP_11.$$s || this; -if (name == null) name = nil; - return self['$[]'](name)}, TMP_11.$$s = self, TMP_11), $a).call($b); - }; + + var result = self.literal.$slice(index, length); - Opal.defn(self, '$values', def.$to_a); + if (result.$$is_array && (index.$$is_range || length !== undefined)) { + return self.$class().$allocate(result) + } + else { + return result; + } + ; + }); - def.$inspect = function() { - var $a, $b, TMP_12, self = this, result = nil; + Opal.alias(self, 'slice', '[]'); - result = "#"); - return result; - }; + Opal.defn(self, '$uniq', function() { + var self = this; - Opal.defn(self, '$to_s', def.$inspect); + return self.$class().$allocate(self.literal.$uniq()); + }); - def.$to_h = function() { - var $a, $b, TMP_13, self = this; + Opal.defn(self, '$flatten', function(level) { + var self = this; - return ($a = ($b = self.$members()).$inject, $a.$$p = (TMP_13 = function(h, name){var self = TMP_13.$$s || this; -if (h == null) h = nil;if (name == null) name = nil; - h['$[]='](name, self['$[]'](name)); - return h;}, TMP_13.$$s = self, TMP_13), $a).call($b, $hash2([], {})); - }; + return self.$class().$allocate(self.literal.$flatten(level)); + }); - return (def.$values_at = function(args) { - var $a, $b, TMP_14, self = this; + Opal.defn(self, '$-', function(other) { + var self = this; - args = $slice.call(arguments, 0); - args = ($a = ($b = args).$map, $a.$$p = (TMP_14 = function(arg){var self = TMP_14.$$s || this; -if (arg == null) arg = nil; - return arg.$$is_range ? arg.$to_a() : arg;}, TMP_14.$$s = self, TMP_14), $a).call($b).$flatten(); - - var result = []; - for (var i = 0, len = args.length; i < len; i++) { - if (!args[i].$$is_number) { - self.$raise($scope.get('TypeError'), "no implicit conversion of " + ((args[i]).$class()) + " into Integer") - } - result.push(self['$[]'](args[i])); - } - return result; - ; - }, nil) && 'values_at'; - })(self, null); + return $rb_minus(self.literal, other); + }); + + return (Opal.defn(self, '$+', function(other) { + var self = this; + + return $rb_plus(self.literal, other); + }), nil) && '+'; + })($scope.get('Array'), null); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/io"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/string/inheritance"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var $a, $b, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module, $gvars = Opal.gvars; - if ($gvars.stdout == null) $gvars.stdout = nil; - if ($gvars.stderr == null) $gvars.stderr = nil; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars; - Opal.add_stubs(['$attr_accessor', '$size', '$write', '$join', '$map', '$String', '$empty?', '$concat', '$chomp', '$getbyte', '$getc', '$raise', '$new', '$write_proc=', '$extend']); + Opal.add_stubs(['$require', '$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$class', '$clone', '$respond_to?', '$==', '$inspect', '$+', '$*', '$map', '$split', '$enum_for', '$each_line', '$to_a', '$%']); + self.$require("corelib/string"); (function($base, $super) { - function $IO(){}; - var self = $IO = $klass($base, $super, 'IO', $IO); + function $String(){}; + var self = $String = $klass($base, $super, 'String', $String); var def = self.$$proto, $scope = self.$$scope; - def.tty = def.closed = nil; - Opal.cdecl($scope, 'SEEK_SET', 0); - - Opal.cdecl($scope, 'SEEK_CUR', 1); - - Opal.cdecl($scope, 'SEEK_END', 2); + return (Opal.defs(self, '$inherited', function(klass) { + var self = this, replace = nil; - def['$tty?'] = function() { - var self = this; + replace = $scope.get('Class').$new((($scope.get('String')).$$scope.get('Wrapper'))); + + klass.$$proto = replace.$$proto; + klass.$$proto.$$class = klass; + klass.$$alloc = replace.$$alloc; + klass.$$parent = (($scope.get('String')).$$scope.get('Wrapper')); - return self.tty; - }; + klass.$allocate = replace.$allocate; + klass.$new = replace.$new; + + }), nil) && 'inherited' + })($scope.base, null); + return (function($base, $super) { + function $Wrapper(){}; + var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper); - def['$closed?'] = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_6, TMP_8; - return self.closed; - }; + def.literal = nil; + def.$$is_string = true; - self.$attr_accessor("write_proc"); + Opal.defs(self, '$allocate', TMP_1 = function(string) { + var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, obj = nil; - def.$write = function(string) { - var self = this; + if (string == null) { + string = "" + } + TMP_1.$$p = null; + obj = Opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []); + obj.literal = string; + return obj; + }); - self.write_proc(string); - return string.$size(); - }; + Opal.defs(self, '$new', TMP_2 = function() { + var $a, $b, self = this, $iter = TMP_2.$$p, block = $iter || nil, obj = nil, $splat_index = nil; - self.$attr_accessor("sync"); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_2.$$p = null; + obj = self.$allocate(); + ($a = ($b = obj).$initialize, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + return obj; + }); - (function($base) { - var self = $module($base, 'Writable'); + Opal.defs(self, '$[]', function() { + var self = this, $splat_index = nil; - var def = self.$$proto, $scope = self.$$scope; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var objects = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + objects[$splat_index] = arguments[$splat_index + 0]; + } + return self.$allocate(objects); + }); - Opal.defn(self, '$<<', function(string) { - var self = this; + Opal.defn(self, '$initialize', function(string) { + var self = this; - self.$write(string); - return self; - }); + if (string == null) { + string = "" + } + return self.literal = string; + }); - Opal.defn(self, '$print', function(args) { - var $a, $b, TMP_1, self = this; - if ($gvars[","] == null) $gvars[","] = nil; + Opal.defn(self, '$method_missing', TMP_3 = function() { + var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil, result = nil, $splat_index = nil; - args = $slice.call(arguments, 0); - self.$write(($a = ($b = args).$map, $a.$$p = (TMP_1 = function(arg){var self = TMP_1.$$s || this; -if (arg == null) arg = nil; - return self.$String(arg)}, TMP_1.$$s = self, TMP_1), $a).call($b).$join($gvars[","])); - return nil; - }); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_3.$$p = null; + result = ($a = ($b = self.literal).$__send__, $a.$$p = block.$to_proc(), $a).apply($b, Opal.to_a(args)); + if ((($a = result.$$is_string != null) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = result == self.literal) !== nil && (!$a.$$is_boolean || $a == true))) { + return self + } else { + return self.$class().$allocate(result) + } + } else { + return result + }; + }); - Opal.defn(self, '$puts', function(args) { - var $a, $b, TMP_2, self = this, newline = nil; - if ($gvars["/"] == null) $gvars["/"] = nil; + Opal.defn(self, '$initialize_copy', function(other) { + var self = this; - args = $slice.call(arguments, 0); - newline = $gvars["/"]; - if ((($a = args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$write($gvars["/"]) - } else { - self.$write(($a = ($b = args).$map, $a.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; -if (arg == null) arg = nil; - return self.$String(arg).$chomp()}, TMP_2.$$s = self, TMP_2), $a).call($b).$concat([nil]).$join(newline)) - }; - return nil; - }); - })(self); + return self.literal = (other.literal).$clone(); + }); - return (function($base) { - var self = $module($base, 'Readable'); + Opal.defn(self, '$respond_to?', TMP_4 = function(name) { + var $a, self = this, $iter = TMP_4.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_4.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + return ((($a = Opal.find_super_dispatcher(self, 'respond_to?', TMP_4, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name)); + }); - Opal.defn(self, '$readbyte', function() { - var self = this; + Opal.defn(self, '$==', function(other) { + var self = this; - return self.$getbyte(); - }); + return self.literal['$=='](other); + }); - Opal.defn(self, '$readchar', function() { - var self = this; + Opal.alias(self, 'eql?', '=='); - return self.$getc(); - }); + Opal.alias(self, '===', '=='); - Opal.defn(self, '$readline', function(sep) { - var self = this; - if ($gvars["/"] == null) $gvars["/"] = nil; + Opal.defn(self, '$to_s', function() { + var self = this; - if (sep == null) { - sep = $gvars["/"] - } - return self.$raise($scope.get('NotImplementedError')); - }); + return self.literal; + }); - Opal.defn(self, '$readpartial', function(integer, outbuf) { - var self = this; + Opal.alias(self, 'to_str', 'to_s'); - if (outbuf == null) { - outbuf = nil - } - return self.$raise($scope.get('NotImplementedError')); - }); - })(self); - })(self, null); - Opal.cdecl($scope, 'STDERR', $gvars.stderr = $scope.get('IO').$new()); - Opal.cdecl($scope, 'STDIN', $gvars.stdin = $scope.get('IO').$new()); - Opal.cdecl($scope, 'STDOUT', $gvars.stdout = $scope.get('IO').$new()); - (($a = [typeof(process) === 'object' ? function(s){process.stdout.write(s)} : function(s){console.log(s)}]), $b = $gvars.stdout, $b['$write_proc='].apply($b, $a), $a[$a.length-1]); - (($a = [typeof(process) === 'object' ? function(s){process.stderr.write(s)} : function(s){console.warn(s)}]), $b = $gvars.stderr, $b['$write_proc='].apply($b, $a), $a[$a.length-1]); - $gvars.stdout.$extend((($scope.get('IO')).$$scope.get('Writable'))); - return $gvars.stderr.$extend((($scope.get('IO')).$$scope.get('Writable'))); -}; + Opal.defn(self, '$inspect', function() { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/main"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + return self.literal.$inspect(); + }); - Opal.add_stubs(['$include']); - Opal.defs(self, '$to_s', function() { - var self = this; + Opal.defn(self, '$+', function(other) { + var self = this; - return "main"; - }); - return (Opal.defs(self, '$include', function(mod) { - var self = this; + return $rb_plus(self.literal, other); + }); - return $scope.get('Object').$include(mod); - }), nil) && 'include'; -}; + Opal.defn(self, '$*', function(other) { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/variables"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $gvars = Opal.gvars, $hash2 = Opal.hash2; + + var result = $rb_times(self.literal, other); - Opal.add_stubs(['$new']); - $gvars["&"] = $gvars["~"] = $gvars["`"] = $gvars["'"] = nil; - $gvars.LOADED_FEATURES = $gvars["\""] = Opal.loaded_features; - $gvars.LOAD_PATH = $gvars[":"] = []; - $gvars["/"] = "\n"; - $gvars[","] = nil; - Opal.cdecl($scope, 'ARGV', []); - Opal.cdecl($scope, 'ARGF', $scope.get('Object').$new()); - Opal.cdecl($scope, 'ENV', $hash2([], {})); - $gvars.VERBOSE = false; - $gvars.DEBUG = false; - $gvars.SAFE = 0; - Opal.cdecl($scope, 'RUBY_PLATFORM', "opal"); - Opal.cdecl($scope, 'RUBY_ENGINE', "opal"); - Opal.cdecl($scope, 'RUBY_VERSION', "2.1.5"); - Opal.cdecl($scope, 'RUBY_ENGINE_VERSION', "0.8.0"); - return Opal.cdecl($scope, 'RUBY_RELEASE_DATE', "2015-07-16"); -}; + if (result.$$is_string) { + return self.$class().$allocate(result) + } + else { + return result; + } + ; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/dir"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + Opal.defn(self, '$split', function(pattern, limit) { + var $a, $b, TMP_5, self = this; - Opal.add_stubs(['$[]']); - return (function($base, $super) { - function $Dir(){}; - var self = $Dir = $klass($base, $super, 'Dir', $Dir); + return ($a = ($b = self.literal.$split(pattern, limit)).$map, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this; +if (str == null) str = nil; + return self.$class().$allocate(str)}, TMP_5.$$s = self, TMP_5), $a).call($b); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$replace', function(string) { + var self = this; - return (function(self) { - var $scope = self.$$scope, def = self.$$proto, TMP_1; + return self.literal = string; + }); - self.$$proto.$chdir = TMP_1 = function(dir) { - var $a, self = this, $iter = TMP_1.$$p, $yield = $iter || nil, prev_cwd = nil; + Opal.defn(self, '$each_line', TMP_6 = function(separator) { + var $a, $b, TMP_7, self = this, $iter = TMP_6.$$p, $yield = $iter || nil; + if ($gvars["/"] == null) $gvars["/"] = nil; - TMP_1.$$p = null; - try { - prev_cwd = Opal.current_dir; - Opal.current_dir = dir; - return $a = Opal.yieldX($yield, []), $a === $breaker ? $a : $a; - } finally { - Opal.current_dir = prev_cwd; - }; + if (separator == null) { + separator = $gvars["/"] + } + TMP_6.$$p = null; + if (($yield !== nil)) { + } else { + return self.$enum_for("each_line", separator) }; - self.$$proto.$pwd = function() { - var self = this; + return ($a = ($b = self.literal).$each_line, $a.$$p = (TMP_7 = function(str){var self = TMP_7.$$s || this, $a; +if (str == null) str = nil; + return $a = Opal.yield1($yield, self.$class().$allocate(str)), $a === $breaker ? $a : $a}, TMP_7.$$s = self, TMP_7), $a).call($b, separator); + }); - return Opal.current_dir || '.'; + Opal.defn(self, '$lines', TMP_8 = function(separator) { + var $a, $b, self = this, $iter = TMP_8.$$p, block = $iter || nil, e = nil; + if ($gvars["/"] == null) $gvars["/"] = nil; + + if (separator == null) { + separator = $gvars["/"] + } + TMP_8.$$p = null; + e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator); + if (block !== false && block !== nil) { + return self + } else { + return e.$to_a() }; - self.$$proto.$getwd = self.$$proto.$pwd; - return (self.$$proto.$home = function() { - var $a, self = this; + }); - return ((($a = $scope.get('ENV')['$[]']("HOME")) !== false && $a !== nil) ? $a : "."); - }, nil) && 'home'; - })(self.$singleton_class()) - })(self, null) + return (Opal.defn(self, '$%', function(data) { + var self = this; + + return self.literal['$%'](data); + }), nil) && '%'; + })($scope.get('String'), null); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["corelib/file"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/string/encoding"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var $a, $b, TMP_4, $c, TMP_6, $d, TMP_8, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $hash2 = Opal.hash2; - Opal.add_stubs(['$join', '$compact', '$split', '$==', '$first', '$[]=', '$home', '$each', '$pop', '$<<', '$[]', '$gsub', '$find', '$=~']); - return (function($base, $super) { - function $File(){}; - var self = $File = $klass($base, $super, 'File', $File); + Opal.add_stubs(['$require', '$+', '$[]', '$new', '$to_proc', '$each', '$const_set', '$sub', '$upcase', '$const_get', '$===', '$==', '$name', '$include?', '$names', '$constants', '$raise', '$attr_accessor', '$attr_reader', '$register', '$length', '$bytes', '$to_a', '$each_byte', '$bytesize', '$enum_for', '$force_encoding', '$dup', '$coerce_to!', '$find', '$nil?', '$getbyte']); + self.$require("corelib/string"); + (function($base, $super) { + function $Encoding(){}; + var self = $Encoding = $klass($base, $super, 'Encoding', $Encoding); - var def = self.$$proto, $scope = self.$$scope; + var def = self.$$proto, $scope = self.$$scope, TMP_1; - Opal.cdecl($scope, 'Separator', Opal.cdecl($scope, 'SEPARATOR', "/")); + def.ascii = def.dummy = def.name = nil; + Opal.defs(self, '$register', TMP_1 = function(name, options) { + var $a, $b, $c, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil, names = nil, encoding = nil; - Opal.cdecl($scope, 'ALT_SEPARATOR', nil); + if (options == null) { + options = $hash2([], {}) + } + TMP_1.$$p = null; + names = $rb_plus([name], (((($a = options['$[]']("aliases")) !== false && $a !== nil) ? $a : []))); + encoding = ($a = ($b = $scope.get('Class')).$new, $a.$$p = block.$to_proc(), $a).call($b, self).$new(name, names, ((($a = options['$[]']("ascii")) !== false && $a !== nil) ? $a : false), ((($a = options['$[]']("dummy")) !== false && $a !== nil) ? $a : false)); + return ($a = ($c = names).$each, $a.$$p = (TMP_2 = function(name){var self = TMP_2.$$s || this; +if (name == null) name = nil; + return self.$const_set(name.$sub("-", "_"), encoding)}, TMP_2.$$s = self, TMP_2), $a).call($c); + }); - Opal.cdecl($scope, 'PATH_SEPARATOR', ":"); + Opal.defs(self, '$find', function(name) {try { - return (function(self) { - var $scope = self.$$scope, def = self.$$proto; + var $a, $b, TMP_3, self = this, upcase = nil; - self.$$proto.$expand_path = function(path, basedir) { - var $a, $b, TMP_1, self = this, parts = nil, new_parts = nil; + upcase = name.$upcase(); + ($a = ($b = self.$constants()).$each, $a.$$p = (TMP_3 = function(const$){var self = TMP_3.$$s || this, $a, $b, encoding = nil; +if (const$ == null) const$ = nil; + encoding = self.$const_get(const$); + if ((($a = $scope.get('Encoding')['$==='](encoding)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return nil; + }; + if ((($a = ((($b = encoding.$name()['$=='](upcase)) !== false && $b !== nil) ? $b : encoding.$names()['$include?'](upcase))) !== nil && (!$a.$$is_boolean || $a == true))) { + Opal.ret(encoding) + } else { + return nil + };}, TMP_3.$$s = self, TMP_3), $a).call($b); + return self.$raise($scope.get('ArgumentError'), "unknown encoding name - " + (name)); + } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } + }); - if (basedir == null) { - basedir = nil - } - path = [basedir, path].$compact().$join($scope.get('SEPARATOR')); - parts = path.$split($scope.get('SEPARATOR')); - new_parts = []; - if (parts.$first()['$==']("~")) { - parts['$[]='](0, $scope.get('Dir').$home())}; - ($a = ($b = parts).$each, $a.$$p = (TMP_1 = function(part){var self = TMP_1.$$s || this; -if (part == null) part = nil; - if (part['$==']("..")) { - return new_parts.$pop() - } else { - return new_parts['$<<'](part) - }}, TMP_1.$$s = self, TMP_1), $a).call($b); - return new_parts.$join($scope.get('SEPARATOR')); - }; - self.$$proto.$dirname = function(path) { - var self = this; + (function(self) { + var $scope = self.$$scope, def = self.$$proto; - return self.$split(path)['$[]']($range(0, -2, false)); - }; - self.$$proto.$basename = function(path) { - var self = this; + return self.$attr_accessor("default_external") + })(Opal.get_singleton_class(self)); - return self.$split(path)['$[]'](-1); - }; - self.$$proto['$exist?'] = function(path) { - var self = this; + self.$attr_reader("name", "names"); - return Opal.modules[path] != null; - }; - self.$$proto['$exists?'] = self.$$proto['$exist?']; - self.$$proto['$directory?'] = function(path) { - var $a, $b, TMP_2, self = this, files = nil, file = nil; + Opal.defn(self, '$initialize', function(name, names, ascii, dummy) { + var self = this; - files = []; - - for (var key in Opal.modules) { - files.push(key) - } - ; - path = path.$gsub((new RegExp("(^." + $scope.get('SEPARATOR') + "+|" + $scope.get('SEPARATOR') + "+$)"))); - file = ($a = ($b = files).$find, $a.$$p = (TMP_2 = function(file){var self = TMP_2.$$s || this; -if (file == null) file = nil; - return file['$=~']((new RegExp("^" + path)))}, TMP_2.$$s = self, TMP_2), $a).call($b); - return file; - }; - self.$$proto.$join = function(paths) { - var self = this; + self.name = name; + self.names = names; + self.ascii = ascii; + return self.dummy = dummy; + }); - paths = $slice.call(arguments, 0); - return paths.$join($scope.get('SEPARATOR')).$gsub((new RegExp("" + $scope.get('SEPARATOR') + "+")), $scope.get('SEPARATOR')); - }; - return (self.$$proto.$split = function(path) { - var self = this; + Opal.defn(self, '$ascii_compatible?', function() { + var self = this; - return path.$split($scope.get('SEPARATOR')); - }, nil) && 'split'; - })(self.$singleton_class()); - })(self, $scope.get('IO')) -}; + return self.ascii; + }); -/* Generated by Opal 0.8.0 */ -(function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + Opal.defn(self, '$dummy?', function() { + var self = this; - Opal.add_stubs(['$require']); - self.$require("corelib/runtime"); - self.$require("corelib/helpers"); - self.$require("corelib/module"); - self.$require("corelib/class"); - self.$require("corelib/basic_object"); - self.$require("corelib/kernel"); - self.$require("corelib/nil_class"); - self.$require("corelib/boolean"); - self.$require("corelib/error"); - self.$require("corelib/regexp"); - self.$require("corelib/comparable"); - self.$require("corelib/enumerable"); - self.$require("corelib/enumerator"); - self.$require("corelib/array"); - self.$require("corelib/array/inheritance"); - self.$require("corelib/hash"); - self.$require("corelib/string"); - self.$require("corelib/string/inheritance"); - self.$require("corelib/match_data"); - self.$require("corelib/numeric"); - self.$require("corelib/complex"); - self.$require("corelib/rational"); - self.$require("corelib/proc"); - self.$require("corelib/method"); - self.$require("corelib/range"); - self.$require("corelib/time"); - self.$require("corelib/struct"); - self.$require("corelib/io"); - self.$require("corelib/main"); - self.$require("corelib/variables"); - self.$require("corelib/dir"); - return self.$require("corelib/file"); -})(Opal); + return self.dummy; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + Opal.defn(self, '$to_s', function() { + var self = this; - Opal.add_stubs(['$require']); - self.$require("corelib/runtime"); - self.$require("corelib/helpers"); - self.$require("corelib/module"); - self.$require("corelib/class"); - self.$require("corelib/basic_object"); - self.$require("corelib/kernel"); - self.$require("corelib/nil_class"); - self.$require("corelib/boolean"); - self.$require("corelib/error"); - self.$require("corelib/regexp"); - self.$require("corelib/comparable"); - self.$require("corelib/enumerable"); - self.$require("corelib/enumerator"); - self.$require("corelib/array"); - self.$require("corelib/array/inheritance"); - self.$require("corelib/hash"); - self.$require("corelib/string"); - self.$require("corelib/string/inheritance"); - self.$require("corelib/match_data"); - self.$require("corelib/numeric"); - self.$require("corelib/complex"); - self.$require("corelib/rational"); - self.$require("corelib/proc"); - self.$require("corelib/method"); - self.$require("corelib/range"); - self.$require("corelib/time"); - self.$require("corelib/struct"); - self.$require("corelib/io"); - self.$require("corelib/main"); - self.$require("corelib/variables"); - self.$require("corelib/dir"); - return self.$require("corelib/file"); -}; + return self.name; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["json"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2, $klass = Opal.klass; + Opal.defn(self, '$inspect', function() { + var $a, self = this; - Opal.add_stubs(['$new', '$push', '$[]=', '$[]', '$create_id', '$json_create', '$attr_accessor', '$create_id=', '$===', '$parse', '$generate', '$from_object', '$to_json', '$responds_to?', '$to_io', '$write', '$to_s', '$to_a', '$strftime']); - (function($base) { - var self = $module($base, 'JSON'); + return "#"; + }); - var def = self.$$proto, $scope = self.$$scope, $a, $b; + Opal.defn(self, '$each_byte', function() { + var self = this; - - var $parse = JSON.parse, - $hasOwn = Opal.hasOwnProperty; + return self.$raise($scope.get('NotImplementedError')); + }); - function to_opal(value, options) { - switch (typeof value) { - case 'string': - return value; + Opal.defn(self, '$getbyte', function() { + var self = this; - case 'number': - return value; + return self.$raise($scope.get('NotImplementedError')); + }); - case 'boolean': - return !!value; + Opal.defn(self, '$bytesize', function() { + var self = this; - case 'null': - return nil; + return self.$raise($scope.get('NotImplementedError')); + }); - case 'object': - if (!value) return nil; + (function($base, $super) { + function $EncodingError(){}; + var self = $EncodingError = $klass($base, $super, 'EncodingError', $EncodingError); - if (value.$$is_array) { - var arr = (options.array_class).$new(); + var def = self.$$proto, $scope = self.$$scope; - for (var i = 0, ii = value.length; i < ii; i++) { - (arr).$push(to_opal(value[i], options)); - } - - return arr; - } - else { - var hash = (options.object_class).$new(); + return nil; + })($scope.base, $scope.get('StandardError')); - for (var k in value) { - if ($hasOwn.call(value, k)) { - (hash)['$[]='](k, to_opal(value[k], options)); - } - } + return (function($base, $super) { + function $CompatibilityError(){}; + var self = $CompatibilityError = $klass($base, $super, 'CompatibilityError', $CompatibilityError); - var klass; - if ((klass = (hash)['$[]']($scope.get('JSON').$create_id())) != nil) { - klass = Opal.cget(klass); - return (klass).$json_create(hash); - } - else { - return hash; - } - } - } - }; - + var def = self.$$proto, $scope = self.$$scope; - (function(self) { - var $scope = self.$$scope, def = self.$$proto; + return nil; + })($scope.base, $scope.get('EncodingError')); + })($scope.base, null); + ($a = ($b = $scope.get('Encoding')).$register, $a.$$p = (TMP_4 = function(){var self = TMP_4.$$s || this, TMP_5; - return self.$attr_accessor("create_id") - })(self.$singleton_class()); + Opal.def(self, '$each_byte', TMP_5 = function(string) { + var $a, self = this, $iter = TMP_5.$$p, block = $iter || nil; - (($a = ["json_class"]), $b = self, $b['$create_id='].apply($b, $a), $a[$a.length-1]); + TMP_5.$$p = null; + + for (var i = 0, length = string.length; i < length; i++) { + var code = string.charCodeAt(i); - Opal.defs(self, '$[]', function(value, options) { - var $a, self = this; + if (code <= 0x7f) { + ((($a = Opal.yield1(block, code)) === $breaker) ? $breaker.$v : $a); + } + else { + var encoded = encodeURIComponent(string.charAt(i)).substr(1).split('%'); - if (options == null) { - options = $hash2([], {}) + for (var j = 0, encoded_length = encoded.length; j < encoded_length; j++) { + ((($a = Opal.yield1(block, parseInt(encoded[j], 16))) === $breaker) ? $breaker.$v : $a); + } + } } - if ((($a = $scope.get('String')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$parse(value, options) - } else { - return self.$generate(value, options) - }; + }); - - Opal.defs(self, '$parse', function(source, options) { + return (Opal.def(self, '$bytesize', function() { var self = this; - if (options == null) { - options = $hash2([], {}) + return self.$bytes().$length(); + }), nil) && 'bytesize';}, TMP_4.$$s = self, TMP_4), $a).call($b, "UTF-8", $hash2(["aliases", "ascii"], {"aliases": ["CP65001"], "ascii": true})); + ($a = ($c = $scope.get('Encoding')).$register, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this, TMP_7; + + Opal.def(self, '$each_byte', TMP_7 = function(string) { + var $a, self = this, $iter = TMP_7.$$p, block = $iter || nil; + + TMP_7.$$p = null; + + for (var i = 0, length = string.length; i < length; i++) { + var code = string.charCodeAt(i); + + ((($a = Opal.yield1(block, code & 0xff)) === $breaker) ? $breaker.$v : $a); + ((($a = Opal.yield1(block, code >> 8)) === $breaker) ? $breaker.$v : $a); } - return self.$from_object($parse(source), options); + }); - - Opal.defs(self, '$parse!', function(source, options) { + return (Opal.def(self, '$bytesize', function() { var self = this; - if (options == null) { - options = $hash2([], {}) + return self.$bytes().$length(); + }), nil) && 'bytesize';}, TMP_6.$$s = self, TMP_6), $a).call($c, "UTF-16LE"); + ($a = ($d = $scope.get('Encoding')).$register, $a.$$p = (TMP_8 = function(){var self = TMP_8.$$s || this, TMP_9; + + Opal.def(self, '$each_byte', TMP_9 = function(string) { + var $a, self = this, $iter = TMP_9.$$p, block = $iter || nil; + + TMP_9.$$p = null; + + for (var i = 0, length = string.length; i < length; i++) { + ((($a = Opal.yield1(block, string.charCodeAt(i) & 0xff)) === $breaker) ? $breaker.$v : $a); } - return self.$parse(source, options); + }); + return (Opal.def(self, '$bytesize', function() { + var self = this; - Opal.defs(self, '$from_object', function(js_object, options) { - var $a, $b, $c, self = this; + return self.$bytes().$length(); + }), nil) && 'bytesize';}, TMP_8.$$s = self, TMP_8), $a).call($d, "ASCII-8BIT", $hash2(["aliases", "ascii"], {"aliases": ["BINARY"], "ascii": true})); + return (function($base, $super) { + function $String(){}; + var self = $String = $klass($base, $super, 'String', $String); - if (options == null) { - options = $hash2([], {}) - } - ($a = "object_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.get('Hash')))); - ($a = "array_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.get('Array')))); - return to_opal(js_object, options.smap); + var def = self.$$proto, $scope = self.$$scope, TMP_10; + + def.encoding = nil; + String.prototype.encoding = (($scope.get('Encoding')).$$scope.get('UTF_16LE')); + + Opal.defn(self, '$bytes', function() { + var self = this; + + return self.$each_byte().$to_a(); }); - Opal.defs(self, '$generate', function(obj, options) { + Opal.defn(self, '$bytesize', function() { var self = this; - if (options == null) { - options = $hash2([], {}) - } - return obj.$to_json(options); + return self.encoding.$bytesize(self); }); - Opal.defs(self, '$dump', function(obj, io, limit) { - var $a, self = this, string = nil; + Opal.defn(self, '$each_byte', TMP_10 = function() { + var $a, $b, self = this, $iter = TMP_10.$$p, block = $iter || nil; - if (io == null) { - io = nil - } - if (limit == null) { - limit = nil - } - string = self.$generate(obj); - if (io !== false && io !== nil) { - if ((($a = io['$responds_to?']("to_io")) !== nil && (!$a.$$is_boolean || $a == true))) { - io = io.$to_io()}; - io.$write(string); - return io; + TMP_10.$$p = null; + if ((block !== nil)) { } else { - return string + return self.$enum_for("each_byte") }; + ($a = ($b = self.encoding).$each_byte, $a.$$p = block.$to_proc(), $a).call($b, self); + return self; }); - })(self); - (function($base, $super) { - function $Object(){}; - var self = $Object = $klass($base, $super, 'Object', $Object); - - var def = self.$$proto, $scope = self.$$scope; - return (Opal.defn(self, '$to_json', function() { + Opal.defn(self, '$encode', function(encoding) { var self = this; - return self.$to_s().$to_json(); - }), nil) && 'to_json' - })(self, null); - (function($base) { - var self = $module($base, 'Enumerable'); - - var def = self.$$proto, $scope = self.$$scope; + return self.$dup().$force_encoding(encoding); + }); - Opal.defn(self, '$to_json', function() { + Opal.defn(self, '$encoding', function() { var self = this; - return self.$to_a().$to_json(); - }) - })(self); - (function($base, $super) { - function $Array(){}; - var self = $Array = $klass($base, $super, 'Array', $Array); - - var def = self.$$proto, $scope = self.$$scope; + return self.encoding; + }); - return (def.$to_json = function() { - var self = this; + Opal.defn(self, '$force_encoding', function(encoding) { + var $a, self = this; + encoding = $scope.get('Opal')['$coerce_to!'](encoding, $scope.get('String'), "to_str"); + encoding = $scope.get('Encoding').$find(encoding); + if (encoding['$=='](self.encoding)) { + return self}; + if ((($a = encoding['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), "unknown encoding name - " + (encoding))}; - var result = []; - - for (var i = 0, length = self.length; i < length; i++) { - result.push((self[i]).$to_json()); - } + var result = new String(self); + result.encoding = encoding; - return '[' + result.join(', ') + ']'; + return result; - }, nil) && 'to_json' - })(self, null); - (function($base, $super) { - function $Boolean(){}; - var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); - - var def = self.$$proto, $scope = self.$$scope; + }); - return (def.$to_json = function() { + return (Opal.defn(self, '$getbyte', function(idx) { var self = this; - return (self == true) ? 'true' : 'false'; - }, nil) && 'to_json' - })(self, null); - (function($base, $super) { - function $Hash(){}; - var self = $Hash = $klass($base, $super, 'Hash', $Hash); + return self.encoding.$getbyte(self, idx); + }), nil) && 'getbyte'; + })($scope.base, null); +}; - var def = self.$$proto, $scope = self.$$scope; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/math"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - return (def.$to_json = function() { - var self = this; + Opal.add_stubs(['$new', '$raise', '$Float', '$type_error', '$Integer', '$module_function', '$checked', '$float!', '$===', '$gamma', '$-', '$integer!', '$/', '$infinite?']); + return (function($base) { + var $Math, self = $Math = $module($base, 'Math'); - - var inspect = [], - keys = self.keys, - _map = self.map, - smap = self.smap, - map, khash; + var def = self.$$proto, $scope = self.$$scope, $a; - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; + Opal.cdecl($scope, 'E', Math.E); - if (key.$$is_string) { - map = smap; - khash = key; - } else { - map = _map; - khash = key.$hash(); - } + Opal.cdecl($scope, 'PI', Math.PI); - inspect.push((key).$to_s().$to_json() + ':' + (map[khash]).$to_json()); - } + Opal.cdecl($scope, 'DomainError', $scope.get('Class').$new($scope.get('StandardError'))); - return '{' + inspect.join(', ') + '}'; - ; - }, nil) && 'to_json' - })(self, null); - (function($base, $super) { - function $NilClass(){}; - var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); + Opal.defs(self, '$checked', function(method) { + var self = this, $splat_index = nil; - var def = self.$$proto, $scope = self.$$scope; + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + + if (isNaN(args[0]) || (args.length == 2 && isNaN(args[1]))) { + return NaN; + } - return (def.$to_json = function() { - var self = this; + var result = Math[method].apply(null, args); - return "null"; - }, nil) && 'to_json' - })(self, null); - (function($base, $super) { - function $Numeric(){}; - var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); + if (isNaN(result)) { + self.$raise($scope.get('DomainError'), "Numerical argument is out of domain - \"" + (method) + "\""); + } - var def = self.$$proto, $scope = self.$$scope; + return result; + + }); - return (def.$to_json = function() { + Opal.defs(self, '$float!', function(value) { var self = this; - return self.toString(); - }, nil) && 'to_json' - })(self, null); - (function($base, $super) { - function $String(){}; - var self = $String = $klass($base, $super, 'String', $String); + try { + return self.$Float(value) + } catch ($err) {if (Opal.rescue($err, [$scope.get('ArgumentError')])) { + try { + return self.$raise($scope.get('Opal').$type_error(value, $scope.get('Float'))) + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defs(self, '$integer!', function(value) { + var self = this; - return Opal.defn(self, '$to_json', def.$inspect) - })(self, null); - (function($base, $super) { - function $Time(){}; - var self = $Time = $klass($base, $super, 'Time', $Time); + try { + return self.$Integer(value) + } catch ($err) {if (Opal.rescue($err, [$scope.get('ArgumentError')])) { + try { + return self.$raise($scope.get('Opal').$type_error(value, $scope.get('Integer'))) + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + }); - var def = self.$$proto, $scope = self.$$scope; + self.$module_function(); - return (def.$to_json = function() { + Opal.defn(self, '$acos', function(x) { var self = this; - return self.$strftime("%FT%T%z").$to_json(); - }, nil) && 'to_json' - })(self, null); - return (function($base, $super) { - function $Date(){}; - var self = $Date = $klass($base, $super, 'Date', $Date); + return $scope.get('Math').$checked("acos", $scope.get('Math')['$float!'](x)); + }); - var def = self.$$proto, $scope = self.$$scope; + if ((($a = (typeof(Math.acosh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.acosh = function(x) { + return Math.log(x + Math.sqrt(x * x - 1)); + } + + }; - def.$to_json = function() { + Opal.defn(self, '$acosh', function(x) { var self = this; - return self.$to_s().$to_json(); + return $scope.get('Math').$checked("acosh", $scope.get('Math')['$float!'](x)); + }); + + Opal.defn(self, '$asin', function(x) { + var self = this; + + return $scope.get('Math').$checked("asin", $scope.get('Math')['$float!'](x)); + }); + + if ((($a = (typeof(Math.asinh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.asinh = function(x) { + return Math.log(x + Math.sqrt(x * x + 1)) + } + ; }; - return (def.$as_json = function() { + Opal.defn(self, '$asinh', function(x) { var self = this; - return self.$to_s(); - }, nil) && 'as_json'; - })(self, null); -}; + return $scope.get('Math').$checked("asinh", $scope.get('Math')['$float!'](x)); + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map/offset"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + Opal.defn(self, '$atan', function(x) { + var self = this; - Opal.add_stubs(['$include', '$first', '$===', '$attr_reader', '$new', '$line', '$column', '$raise', '$class', '$zero?', '$==']); - return (function($base) { - var self = $module($base, 'SourceMap'); + return $scope.get('Math').$checked("atan", $scope.get('Math')['$float!'](x)); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$atan2', function(y, x) { + var self = this; - (function($base, $super) { - function $Offset(){}; - var self = $Offset = $klass($base, $super, 'Offset', $Offset); + return $scope.get('Math').$checked("atan2", $scope.get('Math')['$float!'](y), $scope.get('Math')['$float!'](x)); + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + if ((($a = (typeof(Math.atanh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.atanh = function(x) { + return 0.5 * Math.log((1 + x) / (1 - x)); + } + + }; - self.$include($scope.get('Comparable')); + Opal.defn(self, '$atanh', function(x) { + var self = this; - Opal.defs(self, '$new', TMP_1 = function(args) { - var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, $case = nil; + return $scope.get('Math').$checked("atanh", $scope.get('Math')['$float!'](x)); + }); - args = $slice.call(arguments, 0); - TMP_1.$$p = null; - return (function() {$case = args.$first();if ($scope.get('Offset')['$===']($case)) {return args.$first()}else if ($scope.get('Array')['$===']($case)) {return Opal.find_super_dispatcher(self, 'new', TMP_1, null, $Offset).apply(self, [].concat(args.$first()))}else {return Opal.find_super_dispatcher(self, 'new', TMP_1, null, $Offset).apply(self, [].concat(args))}})(); - }); + if ((($a = (typeof(Math.cbrt) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.cbrt = function(x) { + if (x == 0) { + return 0; + } - def.$initialize = function(line, column) { - var $a, self = this; + if (x < 0) { + return -Math.cbrt(-x); + } - return $a = [line, column], self.line = $a[0], self.column = $a[1]; - }; + var r = x, + ex = 0; - self.$attr_reader("line"); + while (r < 0.125) { + r *= 8; + ex--; + } - self.$attr_reader("column"); + while (r > 1.0) { + r *= 0.125; + ex++; + } - def['$+'] = function(other) { - var self = this, $case = nil; + r = (-0.46946116 * r + 1.072302) * r + 0.3812513; - return (function() {$case = other;if ($scope.get('Offset')['$===']($case)) {return $scope.get('Offset').$new($rb_plus(self.$line(), other.$line()), $rb_plus(self.$column(), other.$column()))}else if ($scope.get('Integer')['$===']($case)) {return $scope.get('Offset').$new($rb_plus(self.$line(), other), self.$column())}else {return self.$raise($scope.get('ArgumentError'), "can't convert " + (other) + " into " + (self.$class()))}})(); - }; + while (ex < 0) { + r *= 0.5; + ex++; + } - def['$<=>'] = function(other) { - var $a, self = this, $case = nil, diff = nil; + while (ex > 0) { + r *= 2; + ex--; + } - return (function() {$case = other;if ($scope.get('Offset')['$===']($case)) {diff = $rb_minus(self.$line(), other.$line()); - if ((($a = diff['$zero?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return $rb_minus(self.$column(), other.$column()) - } else { - return diff - };}else {return self.$raise($scope.get('ArgumentError'), "can't convert " + (other.$class()) + " into " + (self.$class()))}})(); - }; + r = (2.0 / 3.0) * r + (1.0 / 3.0) * x / (r * r); + r = (2.0 / 3.0) * r + (1.0 / 3.0) * x / (r * r); + r = (2.0 / 3.0) * r + (1.0 / 3.0) * x / (r * r); + r = (2.0 / 3.0) * r + (1.0 / 3.0) * x / (r * r); - def.$to_s = function() { - var self = this; + return r; + } + + }; - if (self.$column()['$=='](0)) { - return "" + (self.$line()) - } else { - return "" + (self.$line()) + ":" + (self.$column()) - }; - }; + Opal.defn(self, '$cbrt', function(x) { + var self = this; - return (def.$inspect = function() { - var self = this; + return $scope.get('Math').$checked("cbrt", $scope.get('Math')['$float!'](x)); + }); - return "#<" + (self.$class()) + " line=" + (self.$line()) + ", column=" + (self.$column()) + ">"; - }, nil) && 'inspect'; - })(self, null) - })(self) -}; + Opal.defn(self, '$cos', function(x) { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map/mapping"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + return $scope.get('Math').$checked("cos", $scope.get('Math')['$float!'](x)); + }); - Opal.add_stubs(['$require', '$line', '$generated', '$column', '$<<', '$source', '$original', '$name', '$class', '$inspect', '$new']); - self.$require("source_map/offset"); - return (function($base) { - var self = $module($base, 'SourceMap'); + if ((($a = (typeof(Math.cosh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.cosh = function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; + } + + }; - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$cosh', function(x) { + var self = this; - (function($base, $super) { - function $Mapping(){}; - var self = $Mapping = $klass($base, $super, 'Mapping', $Mapping); + return $scope.get('Math').$checked("cosh", $scope.get('Math')['$float!'](x)); + }); - var def = self.$$proto, $scope = self.$$scope; + if ((($a = (typeof(Math.erf) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.erf = function(x) { + var A1 = 0.254829592, + A2 = -0.284496736, + A3 = 1.421413741, + A4 = -1.453152027, + A5 = 1.061405429, + P = 0.3275911; - def.$to_s = function() { - var $a, self = this, str = nil; + var sign = 1; - str = "" + (self.$generated().$line()) + ":" + (self.$generated().$column()); - str['$<<']("->" + (self.$source()) + "@" + (self.$original().$line()) + ":" + (self.$original().$column())); - if ((($a = self.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { - str['$<<']("#" + (self.$name()))}; - return str; - }; + if (x < 0) { + sign = -1; + } - return (def.$inspect = function() { - var $a, self = this, str = nil; + x = Math.abs(x); - str = "#<" + (self.$class()) + " source=" + (self.$source().$inspect()); - str['$<<'](" generated=" + (self.$generated()) + ", original=" + (self.$original())); - if ((($a = self.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { - str['$<<'](" name=" + (self.$name().$inspect()))}; - str['$<<'](">"); - return str; - }, nil) && 'inspect'; - })(self, $scope.get('Struct').$new("source", "generated", "original", "name")) - })(self); -}; + var t = 1.0 / (1.0 + P * x); + var y = 1.0 - (((((A5 * t + A4) * t) + A3) * t + A2) * t + A1) * t * Math.exp(-x * x); -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map/vlq"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $range = Opal.range, $hash2 = Opal.hash2; + return sign * y; + } + + }; - Opal.add_stubs(['$<<', '$split', '$inject', '$[]=', '$[]', '$each', '$-@', '$&', '$>>', '$|', '$join', '$any?', '$shift', '$raise', '$==', '$map', '$encode', '$each_with_index', '$decode']); - return (function($base) { - var self = $module($base, 'SourceMap'); + Opal.defn(self, '$erf', function(x) { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return $scope.get('Math').$checked("erf", $scope.get('Math')['$float!'](x)); + }); - (function($base) { - var self = $module($base, 'VLQ'); + if ((($a = (typeof(Math.erfc) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.erfc = function(x) { + var z = Math.abs(x), + t = 1.0 / (0.5 * z + 1.0); - var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1; + var A1 = t * 0.17087277 + -0.82215223, + A2 = t * A1 + 1.48851587, + A3 = t * A2 + -1.13520398, + A4 = t * A3 + 0.27886807, + A5 = t * A4 + -0.18628806, + A6 = t * A5 + 0.09678418, + A7 = t * A6 + 0.37409196, + A8 = t * A7 + 1.00002368, + A9 = t * A8, + A10 = -z * z - 1.26551223 + A9; - Opal.cdecl($scope, 'VLQ_BASE_SHIFT', 5); + var a = t * Math.exp(A10); - Opal.cdecl($scope, 'VLQ_BASE', (1)['$<<']($scope.get('VLQ_BASE_SHIFT'))); + if (x < 0.0) { + return 2.0 - a; + } + else { + return a; + } + } + + }; - Opal.cdecl($scope, 'VLQ_BASE_MASK', $rb_minus($scope.get('VLQ_BASE'), 1)); + Opal.defn(self, '$erfc', function(x) { + var self = this; - Opal.cdecl($scope, 'VLQ_CONTINUATION_BIT', $scope.get('VLQ_BASE')); + return $scope.get('Math').$checked("erfc", $scope.get('Math')['$float!'](x)); + }); - Opal.cdecl($scope, 'BASE64_DIGITS', "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".$split("")); + Opal.defn(self, '$exp', function(x) { + var self = this; - Opal.cdecl($scope, 'BASE64_VALUES', ($a = ($b = ($range(0, 64, true))).$inject, $a.$$p = (TMP_1 = function(h, i){var self = TMP_1.$$s || this; -if (h == null) h = nil;if (i == null) i = nil; - h['$[]=']($scope.get('BASE64_DIGITS')['$[]'](i), i); - return h;}, TMP_1.$$s = self, TMP_1), $a).call($b, $hash2([], {}))); + return $scope.get('Math').$checked("exp", $scope.get('Math')['$float!'](x)); + }); - Opal.defs(self, '$encode', function(ary) { - var $a, $b, TMP_2, self = this, result = nil; + Opal.defn(self, '$frexp', function(x) { + var self = this; - result = []; - ($a = ($b = ary).$each, $a.$$p = (TMP_2 = function(n){var self = TMP_2.$$s || this, $a, vlq = nil, digit = nil; -if (n == null) n = nil; - vlq = (function() {if ($rb_lt(n, 0)) { - return $rb_plus(((n['$-@']())['$<<'](1)), 1) - } else { - return n['$<<'](1) - }; return nil; })(); - while ($rb_gt(vlq, 0)) { - digit = vlq['$&']($scope.get('VLQ_BASE_MASK')); - vlq = vlq['$>>']($scope.get('VLQ_BASE_SHIFT')); - if ($rb_gt(vlq, 0)) { - digit = digit['$|']($scope.get('VLQ_CONTINUATION_BIT'))}; - result['$<<']($scope.get('BASE64_DIGITS')['$[]'](digit));};}, TMP_2.$$s = self, TMP_2), $a).call($b); - return result.$join(); - }); + x = $scope.get('Math')['$float!'](x); + + if (isNaN(x)) { + return [NaN, 0]; + } - Opal.defs(self, '$decode', function(str) { - var $a, $b, self = this, result = nil, chars = nil, vlq = nil, shift = nil, continuation = nil, char$ = nil, digit = nil; + var ex = Math.floor(Math.log(Math.abs(x)) / Math.log(2)) + 1, + frac = x / Math.pow(2, ex); - result = []; - chars = str.$split(""); - while ((($b = chars['$any?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - vlq = 0; - shift = 0; - continuation = true; - while (continuation !== false && continuation !== nil) { - char$ = chars.$shift(); - if (char$ !== false && char$ !== nil) { - } else { - self.$raise($scope.get('ArgumentError')) - }; - digit = $scope.get('BASE64_VALUES')['$[]'](char$); - if ((digit['$&']($scope.get('VLQ_CONTINUATION_BIT')))['$=='](0)) { - continuation = false}; - digit = digit['$&']($scope.get('VLQ_BASE_MASK')); - vlq = $rb_plus(vlq, digit['$<<'](shift)); - shift = $rb_plus(shift, $scope.get('VLQ_BASE_SHIFT'));}; - result['$<<'](((function() {if (vlq['$&'](1)['$=='](1)) { - return (vlq['$>>'](1))['$-@']() - } else { - return vlq['$>>'](1) - }; return nil; })()));}; - return result; - }); + return [frac, ex]; + + }); - Opal.defs(self, '$encode_mappings', function(ary) { - var $a, $b, TMP_3, self = this; + Opal.defn(self, '$gamma', function(n) { + var self = this; - return ($a = ($b = ary).$map, $a.$$p = (TMP_3 = function(group){var self = TMP_3.$$s || this, $a, $b, TMP_4; -if (group == null) group = nil; - return ($a = ($b = group).$map, $a.$$p = (TMP_4 = function(segment){var self = TMP_4.$$s || this; -if (segment == null) segment = nil; - return self.$encode(segment)}, TMP_4.$$s = self, TMP_4), $a).call($b).$join(",")}, TMP_3.$$s = self, TMP_3), $a).call($b).$join(";"); - }); + n = $scope.get('Math')['$float!'](n); + + var i, t, x, value, result, twoN, threeN, fourN, fiveN; - Opal.defs(self, '$decode_mappings', function(str) { - var $a, $b, TMP_5, self = this, mappings = nil; + var G = 4.7421875; - mappings = []; - ($a = ($b = str.$split(";")).$each_with_index, $a.$$p = (TMP_5 = function(group, index){var self = TMP_5.$$s || this, $a, $b, TMP_6; -if (group == null) group = nil;if (index == null) index = nil; - mappings['$[]='](index, []); - return ($a = ($b = group.$split(",")).$each, $a.$$p = (TMP_6 = function(segment){var self = TMP_6.$$s || this; -if (segment == null) segment = nil; - return mappings['$[]'](index)['$<<'](self.$decode(segment))}, TMP_6.$$s = self, TMP_6), $a).call($b);}, TMP_5.$$s = self, TMP_5), $a).call($b); - return mappings; - }); - })(self) - })(self) -}; + var P = [ + 0.99999999999999709182, + 57.156235665862923517, + -59.597960355475491248, + 14.136097974741747174, + -0.49191381609762019978, + 0.33994649984811888699e-4, + 0.46523628927048575665e-4, + -0.98374475304879564677e-4, + 0.15808870322491248884e-3, + -0.21026444172410488319e-3, + 0.21743961811521264320e-3, + -0.16431810653676389022e-3, + 0.84418223983852743293e-4, + -0.26190838401581408670e-4, + 0.36899182659531622704e-5 + ]; -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map/map"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_ge(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); - } - function $rb_divide(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; - Opal.add_stubs(['$require', '$include', '$from_hash', '$parse', '$[]', '$decode_vlq_mappings', '$new', '$each_with_index', '$each', '$size', '$<<', '$decode_mappings', '$attr_reader', '$to_proc', '$build_vlq_string', '$compact', '$uniq', '$map', '$eql?', '$is_a?', '$class', '$==', '$mappings', '$filename', '$dup', '$any?', '$line', '$generated', '$last', '$source', '$original', '$name', '$empty?', '$bsearch', '$to_s', '$sources', '$names', '$inspect', '$protected', '$group_by', '$to_a', '$column', '$max', '$keys', '$encode_mappings']); - self.$require("json"); - self.$require("source_map/offset"); - self.$require("source_map/mapping"); - self.$require("source_map/vlq"); - return (function($base) { - var self = $module($base, 'SourceMap'); + if (isNaN(n)) { + return NaN; + } - var def = self.$$proto, $scope = self.$$scope; + if (n === 0 && 1 / n < 0) { + return -Infinity; + } - (function($base, $super) { - function $Map(){}; - var self = $Map = $klass($base, $super, 'Map', $Map); + if (n === -1 || n === -Infinity) { + self.$raise($scope.get('DomainError'), "Numerical argument is out of domain - \"gamma\""); + } - var def = self.$$proto, $scope = self.$$scope, TMP_3; + if ($scope.get('Integer')['$==='](n)) { + if (n <= 0) { + return isFinite(n) ? Infinity : NaN; + } - def.mappings = def.string = def.sources = def.names = nil; - self.$include($scope.get('Enumerable')); + if (n > 171) { + return Infinity; + } - Opal.defs(self, '$from_json', function(json) { - var self = this; + value = n - 2; + result = n - 1; - return self.$from_hash($scope.get('JSON').$parse(json)); - }); + while (value > 1) { + result *= value; + value--; + } - Opal.defs(self, '$from_hash', function(hash) { - var self = this, str = nil, sources = nil, names = nil, mappings = nil; + if (result == 0) { + result = 1; + } - str = hash['$[]']("mappings"); - sources = hash['$[]']("sources"); - names = hash['$[]']("names"); - mappings = self.$decode_vlq_mappings(str, sources, names); - return self.$new(mappings, hash['$[]']("file")); - }); + return result; + } - Opal.defs(self, '$decode_vlq_mappings', function(str, sources, names) { - var $a, $b, TMP_1, self = this, mappings = nil, source_id = nil, original_line = nil, original_column = nil, name_id = nil; + if (n < 0.5) { + return Math.PI / (Math.sin(Math.PI * n) * $scope.get('Math').$gamma($rb_minus(1, n))); + } - if (sources == null) { - sources = [] - } - if (names == null) { - names = [] - } - mappings = []; - source_id = 0; - original_line = 1; - original_column = 0; - name_id = 0; - ($a = ($b = $scope.get('VLQ').$decode_mappings(str)).$each_with_index, $a.$$p = (TMP_1 = function(group, index){var self = TMP_1.$$s || this, $a, $b, TMP_2, generated_column = nil, generated_line = nil; -if (group == null) group = nil;if (index == null) index = nil; - generated_column = 0; - generated_line = $rb_plus(index, 1); - return ($a = ($b = group).$each, $a.$$p = (TMP_2 = function(segment){var self = TMP_2.$$s || this, $a, generated = nil, source = nil, original = nil, name = nil; -if (segment == null) segment = nil; - generated_column = $rb_plus(generated_column, segment['$[]'](0)); - generated = $scope.get('Offset').$new(generated_line, generated_column); - if ($rb_ge(segment.$size(), 4)) { - source_id = $rb_plus(source_id, segment['$[]'](1)); - original_line = $rb_plus(original_line, segment['$[]'](2)); - original_column = $rb_plus(original_column, segment['$[]'](3)); - source = sources['$[]'](source_id); - original = $scope.get('Offset').$new(original_line, original_column); - } else { - return nil; - }; - if ((($a = segment['$[]'](4)) !== nil && (!$a.$$is_boolean || $a == true))) { - name_id = $rb_plus(name_id, segment['$[]'](4)); - name = names['$[]'](name_id);}; - return mappings['$<<']($scope.get('Mapping').$new(source, generated, original, name));}, TMP_2.$$s = self, TMP_2), $a).call($b);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return mappings; - }); + if (n >= 171.35) { + return Infinity; + } - def.$initialize = function(mappings, filename) { - var $a, self = this; + if (n > 85.0) { + twoN = n * n; + threeN = twoN * n; + fourN = threeN * n; + fiveN = fourN * n; - if (mappings == null) { - mappings = [] - } - if (filename == null) { - filename = nil - } - return $a = [mappings, filename], self.mappings = $a[0], self.filename = $a[1]; - }; + return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) * + (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - + 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + + 5246819 / (75246796800 * fiveN * n)); + } - self.$attr_reader("filename"); + n -= 1; + x = P[0]; - def.$size = function() { - var self = this; + for (i = 1; i < P.length; ++i) { + x += P[i] / (n + i); + } - return self.mappings.$size(); - }; + t = n + G + 0.5; - def['$[]'] = function(i) { - var self = this; + return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x; + + }); - return self.mappings['$[]'](i); - }; + if ((($a = (typeof(Math.hypot) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.hypot = function(x, y) { + return Math.sqrt(x * x + y * y) + } + ; + }; - def.$each = TMP_3 = function() { - var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil; + Opal.defn(self, '$hypot', function(x, y) { + var self = this; - TMP_3.$$p = null; - return ($a = ($b = self.mappings).$each, $a.$$p = block.$to_proc(), $a).call($b); - }; + return $scope.get('Math').$checked("hypot", $scope.get('Math')['$float!'](x), $scope.get('Math')['$float!'](y)); + }); - def.$to_s = function() { - var $a, self = this; + Opal.defn(self, '$ldexp', function(mantissa, exponent) { + var self = this; - return ((($a = self.string) !== false && $a !== nil) ? $a : self.string = self.$build_vlq_string()); - }; + mantissa = $scope.get('Math')['$float!'](mantissa); + exponent = $scope.get('Math')['$integer!'](exponent); + + if (isNaN(exponent)) { + self.$raise($scope.get('RangeError'), "float NaN out of range of integer"); + } - def.$sources = function() { - var $a, $b, $c, self = this; + return mantissa * Math.pow(2, exponent); + ; + }); - return ((($a = self.sources) !== false && $a !== nil) ? $a : self.sources = ($b = ($c = self.mappings).$map, $b.$$p = "source".$to_proc(), $b).call($c).$uniq().$compact()); - }; + Opal.defn(self, '$lgamma', function(n) { + var self = this; - def.$names = function() { - var $a, $b, $c, self = this; + + if (n == -1) { + return [Infinity, 1]; + } + else { + return [Math.log(Math.abs($scope.get('Math').$gamma(n))), $scope.get('Math').$gamma(n) < 0 ? -1 : 1]; + } + ; + }); - return ((($a = self.names) !== false && $a !== nil) ? $a : self.names = ($b = ($c = self.mappings).$map, $b.$$p = "name".$to_proc(), $b).call($c).$uniq().$compact()); + Opal.defn(self, '$log', function(x, base) { + var $a, self = this; + + if ((($a = $scope.get('String')['$==='](x)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('Opal').$type_error(x, $scope.get('Float')))}; + if ((($a = base == null) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Math').$checked("log", $scope.get('Math')['$float!'](x)) + } else { + if ((($a = $scope.get('String')['$==='](base)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('Opal').$type_error(base, $scope.get('Float')))}; + return $rb_divide($scope.get('Math').$checked("log", $scope.get('Math')['$float!'](x)), $scope.get('Math').$checked("log", $scope.get('Math')['$float!'](base))); }; + }); - def['$=='] = function(other) { - var self = this; + if ((($a = (typeof(Math.log10) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.log10 = function(x) { + return Math.log(x) / Math.LN10; + } + + }; - return self['$eql?'](other); - }; + Opal.defn(self, '$log10', function(x) { + var $a, self = this; - def['$eql?'] = function(other) { - var $a, $b, self = this; + if ((($a = $scope.get('String')['$==='](x)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('Opal').$type_error(x, $scope.get('Float')))}; + return $scope.get('Math').$checked("log10", $scope.get('Math')['$float!'](x)); + }); - return ($a = ($b = other['$is_a?'](self.$class()), $b !== false && $b !== nil ?self.$mappings()['$=='](other.$mappings()) : $b), $a !== false && $a !== nil ?self.$filename()['$=='](other.$filename()) : $a); - }; + if ((($a = (typeof(Math.log2) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.log2 = function(x) { + return Math.log(x) / Math.LN2; + } + + }; - def['$+'] = function(other) { - var $a, $b, TMP_4, self = this, mappings = nil, offset = nil; + Opal.defn(self, '$log2', function(x) { + var $a, self = this; - mappings = self.mappings.$dup(); - offset = (function() {if ((($a = self.mappings['$any?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return $rb_plus(self.mappings.$last().$generated().$line(), 1) - } else { - return 0 - }; return nil; })(); - ($a = ($b = other).$each, $a.$$p = (TMP_4 = function(m){var self = TMP_4.$$s || this; -if (m == null) m = nil; - return mappings['$<<']($scope.get('Mapping').$new(m.$source(), $rb_plus(m.$generated(), offset), m.$original(), m.$name()))}, TMP_4.$$s = self, TMP_4), $a).call($b); - return self.$class().$new(mappings, other.$filename()); - }; + if ((($a = $scope.get('String')['$==='](x)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('Opal').$type_error(x, $scope.get('Float')))}; + return $scope.get('Math').$checked("log2", $scope.get('Math')['$float!'](x)); + }); - def['$|'] = function(other) { - var $a, $b, TMP_5, self = this, mappings = nil; + Opal.defn(self, '$sin', function(x) { + var self = this; - if ((($a = self.$mappings()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return other.$dup()}; - mappings = []; - ($a = ($b = other).$each, $a.$$p = (TMP_5 = function(m){var self = TMP_5.$$s || this, om = nil; -if (m == null) m = nil; - om = self.$bsearch(m.$original()); - if (om !== false && om !== nil) { - } else { - return nil; - }; - return mappings['$<<']($scope.get('Mapping').$new(om.$source(), m.$generated(), om.$original(), om.$name()));}, TMP_5.$$s = self, TMP_5), $a).call($b); - return self.$class().$new(mappings, other.$filename()); - }; + return $scope.get('Math').$checked("sin", $scope.get('Math')['$float!'](x)); + }); - def.$bsearch = function(offset, from, to) { - var self = this, mid = nil; + if ((($a = (typeof(Math.sinh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.sinh = function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; + } + + }; - if (from == null) { - from = 0 - } - if (to == null) { - to = $rb_minus(self.$size(), 1) - } - mid = $rb_divide(($rb_plus(from, to)), 2); - if ($rb_gt(from, to)) { - return (function() {if ($rb_lt(from, 1)) { - return nil - } else { - return self['$[]']($rb_minus(from, 1)) - }; return nil; })()}; - if (offset['$=='](self['$[]'](mid).$generated())) { - return self['$[]'](mid) - } else if ($rb_lt(offset, self['$[]'](mid).$generated())) { - return self.$bsearch(offset, from, $rb_minus(mid, 1)) - } else if ($rb_gt(offset, self['$[]'](mid).$generated())) { - return self.$bsearch(offset, $rb_plus(mid, 1), to) - } else { - return nil - }; - }; + Opal.defn(self, '$sinh', function(x) { + var self = this; - def.$as_json = function() { - var self = this; + return $scope.get('Math').$checked("sinh", $scope.get('Math')['$float!'](x)); + }); - return $hash2(["version", "file", "mappings", "sources", "names"], {"version": 3, "file": self.$filename(), "mappings": self.$to_s(), "sources": self.$sources(), "names": self.$names()}); - }; + Opal.defn(self, '$sqrt', function(x) { + var self = this; - def.$inspect = function() { - var $a, $b, self = this, str = nil; + return $scope.get('Math').$checked("sqrt", $scope.get('Math')['$float!'](x)); + }); - str = "#<" + (self.$class()); - if ((($a = self.$filename()) !== nil && (!$a.$$is_boolean || $a == true))) { - str['$<<'](" filename=" + (self.$filename().$inspect()))}; - if ((($a = self.$mappings()['$any?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - str['$<<'](" mappings=" + (($a = ($b = self.$mappings()).$map, $a.$$p = "to_s".$to_proc(), $a).call($b).$inspect()))}; - str['$<<'](">"); - return str; - }; + Opal.defn(self, '$tan', function(x) { + var $a, self = this; - self.$protected(); + x = $scope.get('Math')['$float!'](x); + if ((($a = x['$infinite?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return (($scope.get('Float')).$$scope.get('NAN'))}; + return $scope.get('Math').$checked("tan", $scope.get('Math')['$float!'](x)); + }); - self.$attr_reader("mappings"); + if ((($a = (typeof(Math.tanh) !== "undefined")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + + Math.tanh = function(x) { + if (x == Infinity) { + return 1; + } + else if (x == -Infinity) { + return -1; + } + else { + return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x)); + } + } + + }; - return (def.$build_vlq_string = function() { - var $a, $b, TMP_6, $c, TMP_7, $d, self = this, source_id = nil, source_line = nil, source_column = nil, name_id = nil, by_lines = nil, sources_index = nil, names_index = nil, ary = nil; + Opal.defn(self, '$tanh', function(x) { + var self = this; - source_id = 0; - source_line = 1; - source_column = 0; - name_id = 0; - by_lines = ($a = ($b = self.mappings).$group_by, $a.$$p = (TMP_6 = function(m){var self = TMP_6.$$s || this; -if (m == null) m = nil; - return m.$generated().$line()}, TMP_6.$$s = self, TMP_6), $a).call($b); - sources_index = $scope.get('Hash')['$[]'](self.$sources().$each_with_index().$to_a()); - names_index = $scope.get('Hash')['$[]'](self.$names().$each_with_index().$to_a()); - ary = ($a = ($c = ($range(1, (((($d = by_lines.$keys().$max()) !== false && $d !== nil) ? $d : 1)), false))).$map, $a.$$p = (TMP_7 = function(line){var self = TMP_7.$$s || this, $a, $b, TMP_8, $c, generated_column = nil; -if (line == null) line = nil; - generated_column = 0; - return ($a = ($b = (((($c = by_lines['$[]'](line)) !== false && $c !== nil) ? $c : []))).$map, $a.$$p = (TMP_8 = function(mapping){var self = TMP_8.$$s || this, $a, group = nil; -if (mapping == null) mapping = nil; - group = []; - group['$<<']($rb_minus(mapping.$generated().$column(), generated_column)); - group['$<<']($rb_minus(sources_index['$[]'](mapping.$source()), source_id)); - group['$<<']($rb_minus(mapping.$original().$line(), source_line)); - group['$<<']($rb_minus(mapping.$original().$column(), source_column)); - if ((($a = mapping.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { - group['$<<']($rb_minus(names_index['$[]'](mapping.$name()), name_id))}; - generated_column = mapping.$generated().$column(); - source_id = sources_index['$[]'](mapping.$source()); - source_line = mapping.$original().$line(); - source_column = mapping.$original().$column(); - if ((($a = mapping.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { - name_id = names_index['$[]'](mapping.$name())}; - return group;}, TMP_8.$$s = self, TMP_8), $a).call($b);}, TMP_7.$$s = self, TMP_7), $a).call($c); - return $scope.get('VLQ').$encode_mappings(ary); - }, nil) && 'build_vlq_string'; - })(self, null) - })(self); + return $scope.get('Math').$checked("tanh", $scope.get('Math')['$float!'](x)); + }); + })($scope.base) }; -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map/version"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - - return (function($base) { - var self = $module($base, 'SourceMap'); - - var def = self.$$proto, $scope = self.$$scope; - - Opal.cdecl($scope, 'VERSION', "0.0.2") - })(self) -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["source_map"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; - - Opal.add_stubs(['$require']); - self.$require("source_map/map"); - self.$require("source_map/mapping"); - self.$require("source_map/offset"); - self.$require("source_map/version"); - return self.$require("source_map/vlq"); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/source_map"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/complex"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } function $rb_plus(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } function $rb_minus(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; - Opal.add_stubs(['$require', '$attr_reader', '$file', '$map', '$line', '$column', '$code', '$new', '$count', '$size', '$rindex', '$any?', '$compact', '$as_json', '$to_s']); - self.$require("source_map"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.add_stubs(['$require', '$===', '$real?', '$raise', '$new', '$*', '$cos', '$sin', '$attr_reader', '$class', '$==', '$real', '$imag', '$Complex', '$-@', '$+', '$__coerced__', '$-', '$nan?', '$/', '$conj', '$abs2', '$quo', '$polar', '$exp', '$log', '$>', '$!=', '$divmod', '$**', '$hypot', '$atan2', '$lcm', '$denominator', '$to_s', '$numerator', '$abs', '$arg', '$rationalize', '$to_f', '$to_i', '$to_r', '$inspect', '$positive?', '$infinite?']); + self.$require("corelib/numeric"); + (function($base, $super) { + function $Complex(){}; + var self = $Complex = $klass($base, $super, 'Complex', $Complex); var def = self.$$proto, $scope = self.$$scope; - (function($base, $super) { - function $SourceMap(){}; - var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); + def.real = def.imag = nil; + Opal.defs(self, '$rect', function(real, imag) { + var $a, $b, $c, $d, self = this; - var def = self.$$proto, $scope = self.$$scope; + if (imag == null) { + imag = 0 + } + if ((($a = ($b = ($c = ($d = $scope.get('Numeric')['$==='](real), $d !== false && $d !== nil ?real['$real?']() : $d), $c !== false && $c !== nil ?$scope.get('Numeric')['$==='](imag) : $c), $b !== false && $b !== nil ?imag['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "not a real") + }; + return self.$new(real, imag); + }); - def.map = def.fragments = nil; - self.$attr_reader("fragments"); + (function(self) { + var $scope = self.$$scope, def = self.$$proto; - self.$attr_reader("file"); + return Opal.alias(self, 'rectangular', 'rect') + })(Opal.get_singleton_class(self)); - def.$initialize = function(fragments, file) { - var self = this; + Opal.defs(self, '$polar', function(r, theta) { + var $a, $b, $c, $d, self = this; - self.fragments = fragments; - return self.file = file; + if (theta == null) { + theta = 0 + } + if ((($a = ($b = ($c = ($d = $scope.get('Numeric')['$==='](r), $d !== false && $d !== nil ?r['$real?']() : $d), $c !== false && $c !== nil ?$scope.get('Numeric')['$==='](theta) : $c), $b !== false && $b !== nil ?theta['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "not a real") }; + return self.$new($rb_times(r, $scope.get('Math').$cos(theta)), $rb_times(r, $scope.get('Math').$sin(theta))); + }); - def.$map = function() { - var $a, $b, $c, TMP_1, self = this, source_file = nil, generated_line = nil, generated_column = nil, mappings = nil, zero_offset = nil; - - return ((($a = self.map) !== false && $a !== nil) ? $a : self.map = (function() {source_file = $rb_plus(self.$file(), ".rb"); - $b = [1, 0], generated_line = $b[0], generated_column = $b[1]; - mappings = ($b = ($c = self.fragments).$map, $b.$$p = (TMP_1 = function(fragment){var self = TMP_1.$$s || this, $a, $b, mapping = nil, source_line = nil, source_column = nil, source_code = nil, source_offset = nil, generated_offset = nil, new_lines = nil; -if (fragment == null) fragment = nil; - mapping = nil; - source_line = fragment.$line(); - source_column = fragment.$column(); - source_code = fragment.$code(); - if ((($a = (($b = source_line !== false && source_line !== nil) ? source_column : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - source_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(source_line, source_column); - generated_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(generated_line, generated_column); - mapping = ((Opal.get('SourceMap')).$$scope.get('Mapping')).$new(source_file, generated_offset, source_offset);}; - new_lines = source_code.$count("\n"); - generated_line = $rb_plus(generated_line, new_lines); - if ($rb_gt(new_lines, 0)) { - generated_column = $rb_minus(source_code.$size(), ($rb_plus(source_code.$rindex("\n"), 1))) - } else { - generated_column = $rb_plus(generated_column, source_code.$size()) - }; - return mapping;}, TMP_1.$$s = self, TMP_1), $b).call($c); - if ((($b = mappings['$any?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - zero_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(0, 0); - mappings = [((Opal.get('SourceMap')).$$scope.get('Mapping')).$new(source_file, zero_offset, zero_offset)]; - }; - return ((Opal.get('SourceMap')).$$scope.get('Map')).$new(mappings.$compact());})()); - }; + self.$attr_reader("real", "imag"); - def.$as_json = function() { - var self = this; + Opal.defn(self, '$initialize', function(real, imag) { + var self = this; - return self.$map().$as_json(); - }; + if (imag == null) { + imag = 0 + } + self.real = real; + return self.imag = imag; + }); - def.$to_s = function() { - var self = this; + Opal.defn(self, '$coerce', function(other) { + var $a, $b, self = this; - return self.$map().$to_s(); + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return [other, self] + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return [$scope.get('Complex').$new(other, 0), self] + } else { + return self.$raise($scope.get('TypeError'), "" + (other.$class()) + " can't be coerced into Complex") }; + }); - return (def.$magic_comment = function(map_path) { - var self = this; + Opal.defn(self, '$==', function(other) { + var $a, $b, self = this; - return "\n//# sourceMappingURL=file://" + (map_path); - }, nil) && 'magic_comment'; - })(self, null) - })(self); -}; + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return (($a = self.real['$=='](other.$real())) ? self.imag['$=='](other.$imag()) : self.real['$=='](other.$real())) + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return (($a = self.real['$=='](other)) ? self.imag['$=='](0) : self.real['$=='](other)) + } else { + return other['$=='](self) + }; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal-source-maps"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + Opal.defn(self, '$-@', function() { + var self = this; - Opal.add_stubs(['$require']); - self.$require("source_map"); - return self.$require("opal/source_map"); -}; + return self.$Complex(self.real['$-@'](), self.imag['$-@']()); + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["set"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; + Opal.defn(self, '$+', function(other) { + var $a, $b, self = this; - Opal.add_stubs(['$include', '$new', '$nil?', '$===', '$raise', '$each', '$add', '$call', '$merge', '$class', '$respond_to?', '$subtract', '$dup', '$join', '$to_a', '$equal?', '$instance_of?', '$==', '$instance_variable_get', '$is_a?', '$size', '$all?', '$include?', '$[]=', '$enum_for', '$[]', '$<<', '$replace', '$delete', '$select', '$each_key', '$to_proc', '$empty?', '$eql?', '$instance_eval', '$clear', '$keys']); - (function($base, $super) { - function $Set(){}; - var self = $Set = $klass($base, $super, 'Set', $Set); + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_plus(self.real, other.$real()), $rb_plus(self.imag, other.$imag())) + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_plus(self.real, other), self.imag) + } else { + return self.$__coerced__("+", other) + }; + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_4, TMP_7, TMP_9, TMP_12; + Opal.defn(self, '$-', function(other) { + var $a, $b, self = this; - def.hash = nil; - self.$include($scope.get('Enumerable')); + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_minus(self.real, other.$real()), $rb_minus(self.imag, other.$imag())) + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_minus(self.real, other), self.imag) + } else { + return self.$__coerced__("-", other) + }; + }); - Opal.defs(self, '$[]', function(ary) { - var self = this; + Opal.defn(self, '$*', function(other) { + var $a, $b, self = this; - ary = $slice.call(arguments, 0); - return self.$new(ary); + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_minus($rb_times(self.real, other.$real()), $rb_times(self.imag, other.$imag())), $rb_plus($rb_times(self.real, other.$imag()), $rb_times(self.imag, other.$real()))) + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex($rb_times(self.real, other), $rb_times(self.imag, other)) + } else { + return self.$__coerced__("*", other) + }; }); - def.$initialize = TMP_1 = function(enum$) { - var $a, $b, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$/', function(other) { + var $a, $b, $c, $d, $e, self = this; - if (enum$ == null) { - enum$ = nil - } - TMP_1.$$p = null; - self.hash = $scope.get('Hash').$new(); - if ((($a = enum$['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - if ((($a = $scope.get('Enumerable')['$==='](enum$)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ((($b = ((($c = ((($d = (($e = $scope.get('Number')['$==='](self.real), $e !== false && $e !== nil ?self.real['$nan?']() : $e))) !== false && $d !== nil) ? $d : (($e = $scope.get('Number')['$==='](self.imag), $e !== false && $e !== nil ?self.imag['$nan?']() : $e)))) !== false && $c !== nil) ? $c : (($d = $scope.get('Number')['$==='](other.$real()), $d !== false && $d !== nil ?other.$real()['$nan?']() : $d)))) !== false && $b !== nil) ? $b : (($c = $scope.get('Number')['$==='](other.$imag()), $c !== false && $c !== nil ?other.$imag()['$nan?']() : $c)))) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Complex').$new((($scope.get('Float')).$$scope.get('NAN')), (($scope.get('Float')).$$scope.get('NAN'))) + } else { + return $rb_divide($rb_times(self, other.$conj()), other.$abs2()) + } + } else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil ?other['$real?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Complex(self.real.$quo(other), self.imag.$quo(other)) } else { - self.$raise($scope.get('ArgumentError'), "value must be enumerable") + return self.$__coerced__("/", other) }; - if (block !== false && block !== nil) { - return ($a = ($b = enum$).$each, $a.$$p = (TMP_2 = function(item){var self = TMP_2.$$s || this; -if (item == null) item = nil; - return self.$add(block.$call(item))}, TMP_2.$$s = self, TMP_2), $a).call($b) + }); + + Opal.defn(self, '$**', function(other) { + var $a, $b, $c, $d, $e, self = this, r = nil, theta = nil, ore = nil, oim = nil, nr = nil, ntheta = nil, x = nil, z = nil, n = nil, div = nil, mod = nil; + + if (other['$=='](0)) { + return $scope.get('Complex').$new(1, 0)}; + if ((($a = $scope.get('Complex')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + $b = self.$polar(), $a = Opal.to_ary($b), r = ($a[0] == null ? nil : $a[0]), theta = ($a[1] == null ? nil : $a[1]), $b; + ore = other.$real(); + oim = other.$imag(); + nr = $scope.get('Math').$exp($rb_minus($rb_times(ore, $scope.get('Math').$log(r)), $rb_times(oim, theta))); + ntheta = $rb_plus($rb_times(theta, ore), $rb_times(oim, $scope.get('Math').$log(r))); + return $scope.get('Complex').$polar(nr, ntheta); + } else if ((($a = $scope.get('Integer')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $rb_gt(other, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + x = self; + z = x; + n = $rb_minus(other, 1); + while ((($b = n['$!='](0)) !== nil && (!$b.$$is_boolean || $b == true))) { + while ((($c = ($e = n.$divmod(2), $d = Opal.to_ary($e), div = ($d[0] == null ? nil : $d[0]), mod = ($d[1] == null ? nil : $d[1]), $e, mod['$=='](0))) !== nil && (!$c.$$is_boolean || $c == true))) { + x = self.$Complex($rb_minus($rb_times(x.$real(), x.$real()), $rb_times(x.$imag(), x.$imag())), $rb_times($rb_times(2, x.$real()), x.$imag())); + n = div;}; + z = $rb_times(z, x); + n = $rb_minus(n, 1);}; + return z; + } else { + return ($rb_divide($scope.get('Rational').$new(1, 1), self))['$**'](other['$-@']()) + } + } else if ((($a = ((($b = $scope.get('Float')['$==='](other)) !== false && $b !== nil) ? $b : $scope.get('Rational')['$==='](other))) !== nil && (!$a.$$is_boolean || $a == true))) { + $b = self.$polar(), $a = Opal.to_ary($b), r = ($a[0] == null ? nil : $a[0]), theta = ($a[1] == null ? nil : $a[1]), $b; + return $scope.get('Complex').$polar(r['$**'](other), $rb_times(theta, other)); } else { - return self.$merge(enum$) + return self.$__coerced__("**", other) }; - }; - - def.$dup = function() { - var self = this, result = nil; + }); - result = self.$class().$new(); - return result.$merge(self); - }; + Opal.defn(self, '$abs', function() { + var self = this; - def['$-'] = function(enum$) { - var $a, self = this; + return $scope.get('Math').$hypot(self.real, self.imag); + }); - if ((($a = enum$['$respond_to?']("each")) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise($scope.get('ArgumentError'), "value must be enumerable") - }; - return self.$dup().$subtract(enum$); - }; + Opal.defn(self, '$abs2', function() { + var self = this; - Opal.defn(self, '$difference', def['$-']); + return $rb_plus($rb_times(self.real, self.real), $rb_times(self.imag, self.imag)); + }); - def.$inspect = function() { + Opal.defn(self, '$angle', function() { var self = this; - return "#"; - }; + return $scope.get('Math').$atan2(self.imag, self.real); + }); - def['$=='] = function(other) { - var $a, $b, TMP_3, self = this; + Opal.alias(self, 'arg', 'angle'); - if ((($a = self['$equal?'](other)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true - } else if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.hash['$=='](other.$instance_variable_get("@hash")) - } else if ((($a = ($b = other['$is_a?']($scope.get('Set')), $b !== false && $b !== nil ?self.$size()['$=='](other.$size()) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return ($a = ($b = other)['$all?'], $a.$$p = (TMP_3 = function(o){var self = TMP_3.$$s || this; - if (self.hash == null) self.hash = nil; -if (o == null) o = nil; - return self.hash['$include?'](o)}, TMP_3.$$s = self, TMP_3), $a).call($b) - } else { - return false - }; - }; + Opal.defn(self, '$conj', function() { + var self = this; + + return self.$Complex(self.real, self.imag['$-@']()); + }); + + Opal.alias(self, 'conjugate', 'conj'); - def.$add = function(o) { + Opal.defn(self, '$denominator', function() { var self = this; - self.hash['$[]='](o, true); - return self; - }; + return self.real.$denominator().$lcm(self.imag.$denominator()); + }); - Opal.defn(self, '$<<', def.$add); + Opal.alias(self, 'divide', '/'); - def.$classify = TMP_4 = function() { - var $a, $b, TMP_5, $c, TMP_6, self = this, $iter = TMP_4.$$p, block = $iter || nil, result = nil; + Opal.defn(self, '$eql?', function(other) { + var $a, $b, self = this; - TMP_4.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("classify") - }; - result = ($a = ($b = $scope.get('Hash')).$new, $a.$$p = (TMP_5 = function(h, k){var self = TMP_5.$$s || this; -if (h == null) h = nil;if (k == null) k = nil; - return h['$[]='](k, self.$class().$new())}, TMP_5.$$s = self, TMP_5), $a).call($b); - ($a = ($c = self).$each, $a.$$p = (TMP_6 = function(item){var self = TMP_6.$$s || this, $a; -if (item == null) item = nil; - return result['$[]'](((($a = Opal.yield1(block, item)) === $breaker) ? $breaker.$v : $a)).$add(item)}, TMP_6.$$s = self, TMP_6), $a).call($c); - return result; - }; + return ($a = ($b = $scope.get('Complex')['$==='](other), $b !== false && $b !== nil ?self.real.$class()['$=='](self.imag.$class()) : $b), $a !== false && $a !== nil ?self['$=='](other) : $a); + }); - def['$collect!'] = TMP_7 = function() { - var $a, $b, TMP_8, self = this, $iter = TMP_7.$$p, block = $iter || nil, result = nil; + Opal.defn(self, '$fdiv', function(other) { + var $a, self = this; - TMP_7.$$p = null; - if ((block !== nil)) { + if ((($a = $scope.get('Numeric')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return self.$enum_for("collect!") + self.$raise($scope.get('TypeError'), "" + (other.$class()) + " can't be coerced into Complex") }; - result = self.$class().$new(); - ($a = ($b = self).$each, $a.$$p = (TMP_8 = function(item){var self = TMP_8.$$s || this, $a; -if (item == null) item = nil; - return result['$<<'](((($a = Opal.yield1(block, item)) === $breaker) ? $breaker.$v : $a))}, TMP_8.$$s = self, TMP_8), $a).call($b); - return self.$replace(result); - }; + return $rb_divide(self, other); + }); + + Opal.defn(self, '$hash', function() { + var self = this; + + return "Complex:" + (self.real) + ":" + (self.imag); + }); - Opal.defn(self, '$map!', def['$collect!']); + Opal.alias(self, 'imaginary', 'imag'); - def.$delete = function(o) { + Opal.defn(self, '$inspect', function() { var self = this; - self.hash.$delete(o); - return self; - }; + return "(" + (self.$to_s()) + ")"; + }); - def['$delete?'] = function(o) { - var $a, self = this; + Opal.alias(self, 'magnitude', 'abs'); - if ((($a = self['$include?'](o)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$delete(o); - return self; - } else { - return nil - }; - }; + Opal.defn(self, '$numerator', function() { + var self = this, d = nil; - def.$delete_if = TMP_9 = function() {try { + d = self.$denominator(); + return self.$Complex($rb_times(self.real.$numerator(), ($rb_divide(d, self.real.$denominator()))), $rb_times(self.imag.$numerator(), ($rb_divide(d, self.imag.$denominator())))); + }); - var $a, $b, TMP_10, $c, $d, TMP_11, self = this, $iter = TMP_9.$$p, $yield = $iter || nil; + Opal.alias(self, 'phase', 'arg'); - TMP_9.$$p = null; - ((($a = ($yield !== nil)) !== false && $a !== nil) ? $a : Opal.ret(self.$enum_for("delete_if"))); - ($a = ($b = ($c = ($d = self).$select, $c.$$p = (TMP_11 = function(o){var self = TMP_11.$$s || this, $a; -if (o == null) o = nil; - return $a = Opal.yield1($yield, o), $a === $breaker ? $a : $a}, TMP_11.$$s = self, TMP_11), $c).call($d)).$each, $a.$$p = (TMP_10 = function(o){var self = TMP_10.$$s || this; - if (self.hash == null) self.hash = nil; -if (o == null) o = nil; - return self.hash.$delete(o)}, TMP_10.$$s = self, TMP_10), $a).call($b); - return self; - } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } - }; - - def['$add?'] = function(o) { - var $a, self = this; - - if ((($a = self['$include?'](o)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.$add(o) - }; - }; - - def.$each = TMP_12 = function() { - var $a, $b, self = this, $iter = TMP_12.$$p, block = $iter || nil; - - TMP_12.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("each") - }; - ($a = ($b = self.hash).$each_key, $a.$$p = block.$to_proc(), $a).call($b); - return self; - }; - - def['$empty?'] = function() { + Opal.defn(self, '$polar', function() { var self = this; - return self.hash['$empty?'](); - }; + return [self.$abs(), self.$arg()]; + }); - def['$eql?'] = function(other) { - var $a, $b, TMP_13, self = this; + Opal.alias(self, 'quo', '/'); - return self.hash['$eql?'](($a = ($b = other).$instance_eval, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this; - if (self.hash == null) self.hash = nil; + Opal.defn(self, '$rationalize', function(eps) { + var $a, self = this; - return self.hash}, TMP_13.$$s = self, TMP_13), $a).call($b)); - }; + + if (arguments.length > 1) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); + } + ; + if ((($a = self.imag['$!='](0)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('RangeError'), "can't' convert " + (self) + " into Rational")}; + return self.$real().$rationalize(eps); + }); - def.$clear = function() { + Opal.defn(self, '$real?', function() { var self = this; - self.hash.$clear(); - return self; - }; + return false; + }); - def['$include?'] = function(o) { + Opal.defn(self, '$rect', function() { var self = this; - return self.hash['$include?'](o); - }; - - Opal.defn(self, '$member?', def['$include?']); - - def.$merge = function(enum$) { - var $a, $b, TMP_14, self = this; + return [self.real, self.imag]; + }); - ($a = ($b = enum$).$each, $a.$$p = (TMP_14 = function(item){var self = TMP_14.$$s || this; -if (item == null) item = nil; - return self.$add(item)}, TMP_14.$$s = self, TMP_14), $a).call($b); - return self; - }; + Opal.alias(self, 'rectangular', 'rect'); - def.$replace = function(enum$) { + Opal.defn(self, '$to_f', function() { var self = this; - self.$clear(); - self.$merge(enum$); - return self; - }; + if (self.imag['$=='](0)) { + } else { + self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Float") + }; + return self.real.$to_f(); + }); - def.$size = function() { + Opal.defn(self, '$to_i', function() { var self = this; - return self.hash.$size(); - }; - - Opal.defn(self, '$length', def.$size); - - def.$subtract = function(enum$) { - var $a, $b, TMP_15, self = this; - - ($a = ($b = enum$).$each, $a.$$p = (TMP_15 = function(item){var self = TMP_15.$$s || this; -if (item == null) item = nil; - return self.$delete(item)}, TMP_15.$$s = self, TMP_15), $a).call($b); - return self; - }; + if (self.imag['$=='](0)) { + } else { + self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Integer") + }; + return self.real.$to_i(); + }); - def['$|'] = function(enum$) { - var $a, self = this; + Opal.defn(self, '$to_r', function() { + var self = this; - if ((($a = enum$['$respond_to?']("each")) !== nil && (!$a.$$is_boolean || $a == true))) { + if (self.imag['$=='](0)) { } else { - self.$raise($scope.get('ArgumentError'), "value must be enumerable") + self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Rational") }; - return self.$dup().$merge(enum$); - }; - - Opal.defn(self, '$+', def['$|']); + return self.real.$to_r(); + }); - Opal.defn(self, '$union', def['$|']); + Opal.defn(self, '$to_s', function() { + var $a, $b, $c, self = this, result = nil; - return (def.$to_a = function() { - var self = this; + result = self.real.$inspect(); + if ((($a = ((($b = (($c = $scope.get('Number')['$==='](self.imag), $c !== false && $c !== nil ?self.imag['$nan?']() : $c))) !== false && $b !== nil) ? $b : self.imag['$positive?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + result = $rb_plus(result, "+") + } else { + result = $rb_plus(result, "-") + }; + result = $rb_plus(result, self.imag.$abs().$inspect()); + if ((($a = ($b = $scope.get('Number')['$==='](self.imag), $b !== false && $b !== nil ?(((($c = self.imag['$nan?']()) !== false && $c !== nil) ? $c : self.imag['$infinite?']())) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + result = $rb_plus(result, "*")}; + return $rb_plus(result, "i"); + }); - return self.hash.$keys(); - }, nil) && 'to_a'; - })(self, null); + return Opal.cdecl($scope, 'I', self.$new(0, 1)); + })($scope.base, $scope.get('Numeric')); return (function($base) { - var self = $module($base, 'Enumerable'); + var $Kernel, self = $Kernel = $module($base, 'Kernel'); - var def = self.$$proto, $scope = self.$$scope, TMP_16; + var def = self.$$proto, $scope = self.$$scope; - Opal.defn(self, '$to_set', TMP_16 = function(klass, args) { - var $a, $b, self = this, $iter = TMP_16.$$p, block = $iter || nil; + Opal.defn(self, '$Complex', function(real, imag) { + var self = this; - args = $slice.call(arguments, 1); - if (klass == null) { - klass = $scope.get('Set') + if (imag == null) { + imag = nil } - TMP_16.$$p = null; - return ($a = ($b = klass).$new, $a.$$p = block.$to_proc(), $a).apply($b, [self].concat(args)); + if (imag !== false && imag !== nil) { + return $scope.get('Complex').$new(real, imag) + } else { + return $scope.get('Complex').$new(real, 0) + }; }) - })(self); + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser/sexp"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/rational"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_le(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; - Opal.add_stubs(['$attr_reader', '$attr_accessor', '$[]', '$[]=', '$send', '$to_proc', '$<<', '$push', '$new', '$dup', '$is_a?', '$==', '$array', '$join', '$map', '$inspect', '$line']); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.add_stubs(['$require', '$to_i', '$==', '$raise', '$<', '$-@', '$new', '$gcd', '$/', '$nil?', '$===', '$reduce', '$to_r', '$equal?', '$!', '$coerce_to!', '$attr_reader', '$to_f', '$numerator', '$denominator', '$<=>', '$-', '$*', '$__coerced__', '$+', '$Rational', '$>', '$**', '$abs', '$ceil', '$with_precision', '$floor', '$to_s', '$<=', '$truncate', '$send', '$convert']); + self.$require("corelib/numeric"); + (function($base, $super) { + function $Rational(){}; + var self = $Rational = $klass($base, $super, 'Rational', $Rational); var def = self.$$proto, $scope = self.$$scope; - (function($base, $super) { - function $Sexp(){}; - var self = $Sexp = $klass($base, $super, 'Sexp', $Sexp); + def.num = def.den = nil; + Opal.defs(self, '$reduce', function(num, den) { + var $a, self = this, gcd = nil; + + num = num.$to_i(); + den = den.$to_i(); + if (den['$=='](0)) { + self.$raise($scope.get('ZeroDivisionError'), "divided by 0") + } else if ((($a = $rb_lt(den, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + num = num['$-@'](); + den = den['$-@'](); + } else if (den['$=='](1)) { + return self.$new(num, den)}; + gcd = num.$gcd(den); + return self.$new($rb_divide(num, gcd), $rb_divide(den, gcd)); + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + Opal.defs(self, '$convert', function(num, den) { + var $a, $b, $c, self = this; - def.array = def.source = nil; - self.$attr_reader("array"); + if ((($a = ((($b = num['$nil?']()) !== false && $b !== nil) ? $b : den['$nil?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('TypeError'), "cannot convert nil into Rational")}; + if ((($a = ($b = $scope.get('Integer')['$==='](num), $b !== false && $b !== nil ?$scope.get('Integer')['$==='](den) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$reduce(num, den)}; + if ((($a = ((($b = ((($c = $scope.get('Float')['$==='](num)) !== false && $c !== nil) ? $c : $scope.get('String')['$==='](num))) !== false && $b !== nil) ? $b : $scope.get('Complex')['$==='](num))) !== nil && (!$a.$$is_boolean || $a == true))) { + num = num.$to_r()}; + if ((($a = ((($b = ((($c = $scope.get('Float')['$==='](den)) !== false && $c !== nil) ? $c : $scope.get('String')['$==='](den))) !== false && $b !== nil) ? $b : $scope.get('Complex')['$==='](den))) !== nil && (!$a.$$is_boolean || $a == true))) { + den = den.$to_r()}; + if ((($a = ($b = den['$equal?'](1), $b !== false && $b !== nil ?($scope.get('Integer')['$==='](num))['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Opal')['$coerce_to!'](num, $scope.get('Rational'), "to_r") + } else if ((($a = ($b = $scope.get('Numeric')['$==='](num), $b !== false && $b !== nil ?$scope.get('Numeric')['$==='](den) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_divide(num, den) + } else { + return self.$reduce(num, den) + }; + }); - self.$attr_accessor("source"); + self.$attr_reader("numerator", "denominator"); - def.$initialize = function(args) { - var self = this; + Opal.defn(self, '$initialize', function(num, den) { + var self = this; - return self.array = args; - }; + self.num = num; + return self.den = den; + }); - def.$type = function() { - var self = this; + Opal.defn(self, '$numerator', function() { + var self = this; - return self.array['$[]'](0); - }; + return self.num; + }); - def['$type='] = function(type) { - var self = this; + Opal.defn(self, '$denominator', function() { + var self = this; - return self.array['$[]='](0, type); - }; + return self.den; + }); - def.$children = function() { - var self = this; + Opal.defn(self, '$coerce', function(other) { + var self = this, $case = nil; - return self.array['$[]']($range(1, -1, false)); - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {return [other, self]}else if ($scope.get('Integer')['$===']($case)) {return [other.$to_r(), self]}else if ($scope.get('Float')['$===']($case)) {return [other, self.$to_f()]}else { return nil }})(); + }); - def.$method_missing = TMP_1 = function(sym, args) { - var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; + Opal.defn(self, '$==', function(other) { + var $a, self = this, $case = nil; - args = $slice.call(arguments, 1); - TMP_1.$$p = null; - return ($a = ($b = self.array).$send, $a.$$p = block.$to_proc(), $a).apply($b, [sym].concat(args)); - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {return (($a = self.num['$=='](other.$numerator())) ? self.den['$=='](other.$denominator()) : self.num['$=='](other.$numerator()))}else if ($scope.get('Integer')['$===']($case)) {return (($a = self.num['$=='](other)) ? self.den['$=='](1) : self.num['$=='](other))}else if ($scope.get('Float')['$===']($case)) {return self.$to_f()['$=='](other)}else {return other['$=='](self)}})(); + }); - def['$<<'] = function(other) { - var self = this; + Opal.defn(self, '$<=>', function(other) { + var self = this, $case = nil; - self.array['$<<'](other); - return self; - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {return $rb_minus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator()))['$<=>'](0)}else if ($scope.get('Integer')['$===']($case)) {return $rb_minus(self.num, $rb_times(self.den, other))['$<=>'](0)}else if ($scope.get('Float')['$===']($case)) {return self.$to_f()['$<=>'](other)}else {return self.$__coerced__("<=>", other)}})(); + }); - def.$push = function(parts) { - var $a, self = this; + Opal.defn(self, '$+', function(other) { + var self = this, $case = nil, num = nil, den = nil; - parts = $slice.call(arguments, 0); - ($a = self.array).$push.apply($a, [].concat(parts)); - return self; - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {num = $rb_plus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator())); + den = $rb_times(self.den, other.$denominator()); + return self.$Rational(num, den);}else if ($scope.get('Integer')['$===']($case)) {return self.$Rational($rb_plus(self.num, $rb_times(other, self.den)), self.den)}else if ($scope.get('Float')['$===']($case)) {return $rb_plus(self.$to_f(), other)}else {return self.$__coerced__("+", other)}})(); + }); - def.$to_ary = function() { - var self = this; + Opal.defn(self, '$-', function(other) { + var self = this, $case = nil, num = nil, den = nil; - return self.array; - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {num = $rb_minus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator())); + den = $rb_times(self.den, other.$denominator()); + return self.$Rational(num, den);}else if ($scope.get('Integer')['$===']($case)) {return self.$Rational($rb_minus(self.num, $rb_times(other, self.den)), self.den)}else if ($scope.get('Float')['$===']($case)) {return $rb_minus(self.$to_f(), other)}else {return self.$__coerced__("-", other)}})(); + }); - def.$dup = function() { - var self = this; + Opal.defn(self, '$*', function(other) { + var self = this, $case = nil, num = nil, den = nil; - return $scope.get('Sexp').$new(self.array.$dup()); - }; + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {num = $rb_times(self.num, other.$numerator()); + den = $rb_times(self.den, other.$denominator()); + return self.$Rational(num, den);}else if ($scope.get('Integer')['$===']($case)) {return self.$Rational($rb_times(self.num, other), self.den)}else if ($scope.get('Float')['$===']($case)) {return $rb_times(self.$to_f(), other)}else {return self.$__coerced__("*", other)}})(); + }); - def['$=='] = function(other) { - var $a, self = this; + Opal.defn(self, '$/', function(other) { + var self = this, $case = nil, num = nil, den = nil; - if ((($a = other['$is_a?']($scope.get('Sexp'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.array['$=='](other.$array()) + return (function() {$case = other;if ($scope.get('Rational')['$===']($case)) {num = $rb_times(self.num, other.$denominator()); + den = $rb_times(self.den, other.$numerator()); + return self.$Rational(num, den);}else if ($scope.get('Integer')['$===']($case)) {if (other['$=='](0)) { + return $rb_divide(self.$to_f(), 0.0) + } else { + return self.$Rational(self.num, $rb_times(self.den, other)) + }}else if ($scope.get('Float')['$===']($case)) {return $rb_divide(self.$to_f(), other)}else {return self.$__coerced__("/", other)}})(); + }); + + Opal.defn(self, '$**', function(other) { + var $a, $b, self = this, $case = nil; + + return (function() {$case = other;if ($scope.get('Integer')['$===']($case)) {if ((($a = (($b = self['$=='](0)) ? $rb_lt(other, 0) : self['$=='](0))) !== nil && (!$a.$$is_boolean || $a == true))) { + return (($scope.get('Float')).$$scope.get('INFINITY')) + } else if ((($a = $rb_gt(other, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Rational(self.num['$**'](other), self.den['$**'](other)) + } else if ((($a = $rb_lt(other, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Rational(self.den['$**'](other['$-@']()), self.num['$**'](other['$-@']())) + } else { + return self.$Rational(1, 1) + }}else if ($scope.get('Float')['$===']($case)) {return self.$to_f()['$**'](other)}else if ($scope.get('Rational')['$===']($case)) {if (other['$=='](0)) { + return self.$Rational(1, 1) + } else if (other.$denominator()['$=='](1)) { + if ((($a = $rb_lt(other, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$Rational(self.den['$**'](other.$numerator().$abs()), self.num['$**'](other.$numerator().$abs())) } else { - return self.array['$=='](other) - }; - }; + return self.$Rational(self.num['$**'](other.$numerator()), self.den['$**'](other.$numerator())) + } + } else if ((($a = (($b = self['$=='](0)) ? $rb_lt(other, 0) : self['$=='](0))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise($scope.get('ZeroDivisionError'), "divided by 0") + } else { + return self.$to_f()['$**'](other) + }}else {return self.$__coerced__("**", other)}})(); + }); - Opal.defn(self, '$eql?', def['$==']); + Opal.defn(self, '$abs', function() { + var self = this; - def.$line = function() { - var $a, self = this; + return self.$Rational(self.num.$abs(), self.den.$abs()); + }); - return ($a = self.source, $a !== false && $a !== nil ?self.source['$[]'](0) : $a); + Opal.defn(self, '$ceil', function(precision) { + var self = this; + + if (precision == null) { + precision = 0 + } + if (precision['$=='](0)) { + return (($rb_divide(self.num['$-@'](), self.den))['$-@']()).$ceil() + } else { + return self.$with_precision("ceil", precision) }; + }); - def.$column = function() { - var $a, self = this; + Opal.alias(self, 'divide', '/'); - return ($a = self.source, $a !== false && $a !== nil ?self.source['$[]'](1) : $a); + Opal.defn(self, '$floor', function(precision) { + var self = this; + + if (precision == null) { + precision = 0 + } + if (precision['$=='](0)) { + return (($rb_divide(self.num['$-@'](), self.den))['$-@']()).$floor() + } else { + return self.$with_precision("floor", precision) }; + }); - def.$inspect = function() { - var $a, $b, TMP_2, self = this; + Opal.defn(self, '$hash', function() { + var self = this; - return "(" + (($a = ($b = self.array).$map, $a.$$p = (TMP_2 = function(e){var self = TMP_2.$$s || this; -if (e == null) e = nil; - return e.$inspect()}, TMP_2.$$s = self, TMP_2), $a).call($b).$join(", ")) + ")"; - }; + return "Rational:" + (self.num) + ":" + (self.den); + }); - def.$pretty_inspect = function() { - var $a, $b, TMP_3, self = this; + Opal.defn(self, '$inspect', function() { + var self = this; - return "(" + ((function() {if ((($a = self.$line()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "" + (self.$line()) + " " - } else { - return "" - }; return nil; })()) + (($a = ($b = self.array).$map, $a.$$p = (TMP_3 = function(e){var self = TMP_3.$$s || this; -if (e == null) e = nil; - return e.$inspect()}, TMP_3.$$s = self, TMP_3), $a).call($b).$join(", ")) + ")"; - }; + return "(" + (self.$to_s()) + ")"; + }); - return Opal.defn(self, '$to_s', def.$inspect); - })(self, null) - })(self) -}; + Opal.alias(self, 'quo', '/'); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/regexp_anchors"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + Opal.defn(self, '$rationalize', function(eps) { + var self = this; - Opal.add_stubs(['$==']); - return (function($base) { - var self = $module($base, 'Opal'); + + if (arguments.length > 1) { + self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); + } - var def = self.$$proto, $scope = self.$$scope; + if (eps == null) { + return self; + } - Opal.cdecl($scope, 'REGEXP_START', (function() {if ($scope.get('RUBY_ENGINE')['$==']("opal")) { - return "^"}; return nil; })()); + var e = eps.$abs(), + a = $rb_minus(self, e), + b = $rb_plus(self, e); - Opal.cdecl($scope, 'REGEXP_END', (function() {if ($scope.get('RUBY_ENGINE')['$==']("opal")) { - return "$"}; return nil; })()); - })(self) -}; + var p0 = 0, + p1 = 1, + q0 = 1, + q1 = 0, + p2, q2; -/* Generated by Opal 0.8.0 */ -Opal.modules["strscan"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + var c, k, t; - Opal.add_stubs(['$attr_reader', '$length', '$pos=']); - return (function($base, $super) { - function $StringScanner(){}; - var self = $StringScanner = $klass($base, $super, 'StringScanner', $StringScanner); + while (true) { + c = (a).$ceil(); - var def = self.$$proto, $scope = self.$$scope; + if ($rb_le(c, b)) { + break; + } - def.pos = def.string = def.working = def.prev_pos = def.matched = def.match = nil; - self.$attr_reader("pos"); + k = c - 1; + p2 = k * p1 + p0; + q2 = k * q1 + q0; + t = $rb_divide(1, ($rb_minus(b, k))); + b = $rb_divide(1, ($rb_minus(a, k))); + a = t; - self.$attr_reader("matched"); + p0 = p1; + q0 = q1; + p1 = p2; + q1 = q2; + } - def.$initialize = function(string) { - var self = this; + return self.$Rational(c * p1 + p0, c * q1 + q0); + ; + }); - self.string = string; - self.pos = 0; - self.matched = nil; - self.working = string; - return self.match = []; - }; + Opal.defn(self, '$round', function(precision) { + var $a, self = this, num = nil, den = nil, approx = nil; - self.$attr_reader("string"); + if (precision == null) { + precision = 0 + } + if (precision['$=='](0)) { + } else { + return self.$with_precision("round", precision) + }; + if (self.num['$=='](0)) { + return 0}; + if (self.den['$=='](1)) { + return self.num}; + num = $rb_plus($rb_times(self.num.$abs(), 2), self.den); + den = $rb_times(self.den, 2); + approx = ($rb_divide(num, den)).$truncate(); + if ((($a = $rb_lt(self.num, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return approx['$-@']() + } else { + return approx + }; + }); - def['$beginning_of_line?'] = function() { + Opal.defn(self, '$to_f', function() { var self = this; - return self.pos === 0 || self.string.charAt(self.pos - 1) === "\n"; - }; - - Opal.defn(self, '$bol?', def['$beginning_of_line?']); + return $rb_divide(self.num, self.den); + }); - def.$scan = function(regex) { + Opal.defn(self, '$to_i', function() { var self = this; - - var regex = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)), - result = regex.exec(self.working); - - if (result == null) { - return self.matched = nil; - } - else if (typeof(result) === 'object') { - self.prev_pos = self.pos; - self.pos += result[0].length; - self.working = self.working.substring(result[0].length); - self.matched = result[0]; - self.match = result; + return self.$truncate(); + }); - return result[0]; - } - else if (typeof(result) === 'string') { - self.pos += result.length; - self.working = self.working.substring(result.length); + Opal.defn(self, '$to_r', function() { + var self = this; - return result; - } - else { - return nil; - } - ; - }; + return self; + }); - def['$[]'] = function(idx) { + Opal.defn(self, '$to_s', function() { var self = this; - - var match = self.match; + return "" + (self.num) + "/" + (self.den); + }); - if (idx < 0) { - idx += match.length; - } + Opal.defn(self, '$truncate', function(precision) { + var $a, self = this; - if (idx < 0 || idx >= match.length) { - return nil; + if (precision == null) { + precision = 0 } + if (precision['$=='](0)) { + if ((($a = $rb_lt(self.num, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$ceil() + } else { + return self.$floor() + } + } else { + return self.$with_precision("truncate", precision) + }; + }); - if (match[idx] == null) { - return nil; - } + return (Opal.defn(self, '$with_precision', function(method, precision) { + var $a, self = this, p = nil, s = nil; - return match[idx]; - ; - }; + if ((($a = $scope.get('Integer')['$==='](precision)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('TypeError'), "not an Integer") + }; + p = (10)['$**'](precision); + s = $rb_times(self, p); + if ((($a = $rb_lt(precision, 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($rb_divide(s.$send(method), p)).$to_i() + } else { + return self.$Rational(s.$send(method), p) + }; + }), nil) && 'with_precision'; + })($scope.base, $scope.get('Numeric')); + return (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); - def.$check = function(regex) { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - - var regexp = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)), - result = regexp.exec(self.working); + Opal.defn(self, '$Rational', function(numerator, denominator) { + var self = this; - if (result == null) { - return self.matched = nil; + if (denominator == null) { + denominator = 1 } + return $scope.get('Rational').$convert(numerator, denominator); + }) + })($scope.base); +}; - return self.matched = result[0]; - ; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/time"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_le(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $range = Opal.range; - def.$peek = function(length) { - var self = this; + Opal.add_stubs(['$require', '$include', '$===', '$raise', '$coerce_to!', '$respond_to?', '$to_str', '$to_i', '$new', '$<=>', '$to_f', '$nil?', '$>', '$<', '$strftime', '$year', '$month', '$day', '$+', '$round', '$/', '$-', '$copy_instance_variables', '$initialize_dup', '$is_a?', '$zero?', '$wday', '$utc?', '$mon', '$yday', '$hour', '$min', '$sec', '$rjust', '$ljust', '$zone', '$to_s', '$[]', '$cweek_cyear', '$isdst', '$<=', '$!=', '$==', '$ceil']); + self.$require("corelib/comparable"); + return (function($base, $super) { + function $Time(){}; + var self = $Time = $klass($base, $super, 'Time', $Time); - return self.working.substring(0, length); - }; + var def = self.$$proto, $scope = self.$$scope; - def['$eos?'] = function() { - var self = this; + self.$include($scope.get('Comparable')); - return self.working.length === 0; - }; + + var days_of_week = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + short_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + short_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + long_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + ; - def.$skip = function(re) { + Opal.defs(self, '$at', function(seconds, frac) { var self = this; - re = new RegExp('^' + re.source) - var result = re.exec(self.working); + var result; - if (result == null) { - return self.matched = nil; - } - else { - var match_str = result[0]; - var match_len = match_str.length; - self.matched = match_str; - self.prev_pos = self.pos; - self.pos += match_len; - self.working = self.working.substring(match_len); - return match_len; + if ($scope.get('Time')['$==='](seconds)) { + if (frac !== undefined) { + self.$raise($scope.get('TypeError'), "can't convert Time into an exact number") + } + result = new Date(seconds.getTime()); + result.is_utc = seconds.is_utc; + return result; } - ; - }; - def.$get_byte = function() { - var self = this; + if (!seconds.$$is_number) { + seconds = $scope.get('Opal')['$coerce_to!'](seconds, $scope.get('Integer'), "to_int"); + } - - var result = nil; - if (self.pos < self.string.length) { - self.prev_pos = self.pos; - self.pos += 1; - result = self.matched = self.working.substring(0, 1); - self.working = self.working.substring(1); + if (frac === undefined) { + return new Date(seconds * 1000); } - else { - self.matched = nil; + + if (!frac.$$is_number) { + frac = $scope.get('Opal')['$coerce_to!'](frac, $scope.get('Integer'), "to_int"); } - return result; + return new Date(seconds * 1000 + (frac / 1000)); ; - }; + }); - Opal.defn(self, '$getch', def.$get_byte); + + function time_params(year, month, day, hour, min, sec) { + if (year.$$is_string) { + year = parseInt(year, 10); + } else { + year = $scope.get('Opal')['$coerce_to!'](year, $scope.get('Integer'), "to_int"); + } + + if (month === nil) { + month = 1; + } else if (!month.$$is_number) { + if ((month)['$respond_to?']("to_str")) { + month = (month).$to_str(); + switch (month.toLowerCase()) { + case 'jan': month = 1; break; + case 'feb': month = 2; break; + case 'mar': month = 3; break; + case 'apr': month = 4; break; + case 'may': month = 5; break; + case 'jun': month = 6; break; + case 'jul': month = 7; break; + case 'aug': month = 8; break; + case 'sep': month = 9; break; + case 'oct': month = 10; break; + case 'nov': month = 11; break; + case 'dec': month = 12; break; + default: month = (month).$to_i(); + } + } else { + month = $scope.get('Opal')['$coerce_to!'](month, $scope.get('Integer'), "to_int"); + } + } - def['$pos='] = function(pos) { - var self = this; + if (month < 1 || month > 12) { + self.$raise($scope.get('ArgumentError'), "month out of range: " + (month)) + } + month = month - 1; - - if (pos < 0) { - pos += self.string.$length(); + if (day === nil) { + day = 1; + } else if (day.$$is_string) { + day = parseInt(day, 10); + } else { + day = $scope.get('Opal')['$coerce_to!'](day, $scope.get('Integer'), "to_int"); } - ; - self.pos = pos; - return self.working = self.string.slice(pos); - }; - def.$reset = function() { - var self = this; + if (day < 1 || day > 31) { + self.$raise($scope.get('ArgumentError'), "day out of range: " + (day)) + } - self.working = self.string; - self.matched = nil; - return self.pos = 0; - }; + if (hour === nil) { + hour = 0; + } else if (hour.$$is_string) { + hour = parseInt(hour, 10); + } else { + hour = $scope.get('Opal')['$coerce_to!'](hour, $scope.get('Integer'), "to_int"); + } - def.$rest = function() { - var self = this; + if (hour < 0 || hour > 24) { + self.$raise($scope.get('ArgumentError'), "hour out of range: " + (hour)) + } - return self.working; - }; + if (min === nil) { + min = 0; + } else if (min.$$is_string) { + min = parseInt(min, 10); + } else { + min = $scope.get('Opal')['$coerce_to!'](min, $scope.get('Integer'), "to_int"); + } - def['$rest?'] = function() { - var self = this; + if (min < 0 || min > 59) { + self.$raise($scope.get('ArgumentError'), "min out of range: " + (min)) + } - return self.working.length !== 0; - }; + if (sec === nil) { + sec = 0; + } else if (!sec.$$is_number) { + if (sec.$$is_string) { + sec = parseInt(sec, 10); + } else { + sec = $scope.get('Opal')['$coerce_to!'](sec, $scope.get('Integer'), "to_int"); + } + } - def.$terminate = function() { - var $a, $b, self = this; + if (sec < 0 || sec > 60) { + self.$raise($scope.get('ArgumentError'), "sec out of range: " + (sec)) + } - self.match = nil; - return (($a = [self.string.$length()]), $b = self, $b['$pos='].apply($b, $a), $a[$a.length-1]); - }; + return [year, month, day, hour, min, sec]; + } + ; - return (def.$unscan = function() { + Opal.defs(self, '$new', function(year, month, day, hour, min, sec, utc_offset) { var self = this; - self.pos = self.prev_pos; - self.prev_pos = nil; - self.match = nil; - return self; - }, nil) && 'unscan'; - })(self, null) -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser/keywords"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; - - Opal.add_stubs(['$attr_accessor', '$map', '$new', '$each', '$[]=', '$name', '$[]']); - return (function($base) { - var self = $module($base, 'Opal'); - - var def = self.$$proto, $scope = self.$$scope; - - (function($base) { - var self = $module($base, 'Keywords'); - - var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1; + if (month == null) { + month = nil + } + if (day == null) { + day = nil + } + if (hour == null) { + hour = nil + } + if (min == null) { + min = nil + } + if (sec == null) { + sec = nil + } + if (utc_offset == null) { + utc_offset = nil + } + + var args, result; - (function($base, $super) { - function $KeywordTable(){}; - var self = $KeywordTable = $klass($base, $super, 'KeywordTable', $KeywordTable); + if (year === undefined) { + return new Date(); + } - var def = self.$$proto, $scope = self.$$scope; + if (utc_offset !== nil) { + self.$raise($scope.get('ArgumentError'), "Opal does not support explicitly specifying UTC offset for Time") + } - self.$attr_accessor("name", "id", "state"); + args = time_params(year, month, day, hour, min, sec); + year = args[0]; + month = args[1]; + day = args[2]; + hour = args[3]; + min = args[4]; + sec = args[5]; - return (def.$initialize = function(name, id, state) { - var self = this; + result = new Date(year, month, day, hour, min, 0, sec * 1000); + if (year < 100) { + result.setFullYear(year); + } + return result; + + }); - self.name = name; - self.id = id; - return self.state = state; - }, nil) && 'initialize'; - })(self, null); + Opal.defs(self, '$local', function(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) { + var self = this; - Opal.cdecl($scope, 'KEYWORDS', ($a = ($b = [["__LINE__", ["k__LINE__", "k__LINE__"], "expr_end"], ["__FILE__", ["k__FILE__", "k__FILE__"], "expr_end"], ["alias", ["kALIAS", "kALIAS"], "expr_fname"], ["and", ["kAND", "kAND"], "expr_beg"], ["begin", ["kBEGIN", "kBEGIN"], "expr_beg"], ["break", ["kBREAK", "kBREAK"], "expr_mid"], ["case", ["kCASE", "kCASE"], "expr_beg"], ["class", ["kCLASS", "kCLASS"], "expr_class"], ["def", ["kDEF", "kDEF"], "expr_fname"], ["defined?", ["kDEFINED", "kDEFINED"], "expr_arg"], ["do", ["kDO", "kDO"], "expr_beg"], ["else", ["kELSE", "kELSE"], "expr_beg"], ["elsif", ["kELSIF", "kELSIF"], "expr_beg"], ["end", ["kEND", "kEND"], "expr_end"], ["ensure", ["kENSURE", "kENSURE"], "expr_beg"], ["false", ["kFALSE", "kFALSE"], "expr_end"], ["for", ["kFOR", "kFOR"], "expr_beg"], ["if", ["kIF", "kIF_MOD"], "expr_beg"], ["in", ["kIN", "kIN"], "expr_beg"], ["module", ["kMODULE", "kMODULE"], "expr_beg"], ["nil", ["kNIL", "kNIL"], "expr_end"], ["next", ["kNEXT", "kNEXT"], "expr_mid"], ["not", ["kNOT", "kNOT"], "expr_beg"], ["or", ["kOR", "kOR"], "expr_beg"], ["redo", ["kREDO", "kREDO"], "expr_end"], ["rescue", ["kRESCUE", "kRESCUE_MOD"], "expr_mid"], ["return", ["kRETURN", "kRETURN"], "expr_mid"], ["self", ["kSELF", "kSELF"], "expr_end"], ["super", ["kSUPER", "kSUPER"], "expr_arg"], ["then", ["kTHEN", "kTHEN"], "expr_beg"], ["true", ["kTRUE", "kTRUE"], "expr_end"], ["undef", ["kUNDEF", "kUNDEF"], "expr_fname"], ["unless", ["kUNLESS", "kUNLESS_MOD"], "expr_beg"], ["until", ["kUNTIL", "kUNTIL_MOD"], "expr_beg"], ["when", ["kWHEN", "kWHEN"], "expr_beg"], ["while", ["kWHILE", "kWHILE_MOD"], "expr_beg"], ["yield", ["kYIELD", "kYIELD"], "expr_arg"]]).$map, $a.$$p = (TMP_1 = function(decl){var self = TMP_1.$$s || this, $a; -if (decl == null) decl = nil; - return ($a = $scope.get('KeywordTable')).$new.apply($a, [].concat(decl))}, TMP_1.$$s = self, TMP_1), $a).call($b)); + if (month == null) { + month = nil + } + if (day == null) { + day = nil + } + if (hour == null) { + hour = nil + } + if (min == null) { + min = nil + } + if (sec == null) { + sec = nil + } + if (millisecond == null) { + millisecond = nil + } + if (_dummy1 == null) { + _dummy1 = nil + } + if (_dummy2 == null) { + _dummy2 = nil + } + if (_dummy3 == null) { + _dummy3 = nil + } + + var args, result; - Opal.defs(self, '$map', function() { - var $a, $b, TMP_2, self = this; - if (self.map == null) self.map = nil; + if (arguments.length === 10) { + args = $slice.call(arguments); + year = args[5]; + month = args[4]; + day = args[3]; + hour = args[2]; + min = args[1]; + sec = args[0]; + } - if ((($a = self.map) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.map = $hash2([], {}); - ($a = ($b = $scope.get('KEYWORDS')).$each, $a.$$p = (TMP_2 = function(k){var self = TMP_2.$$s || this; - if (self.map == null) self.map = nil; -if (k == null) k = nil; - return self.map['$[]='](k.$name(), k)}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; - return self.map; - }); + args = time_params(year, month, day, hour, min, sec); + year = args[0]; + month = args[1]; + day = args[2]; + hour = args[3]; + min = args[4]; + sec = args[5]; - Opal.defs(self, '$keyword', function(kw) { - var self = this; + result = new Date(year, month, day, hour, min, 0, sec * 1000); + if (year < 100) { + result.setFullYear(year); + } + return result; + + }); - return self.$map()['$[]'](kw); - }); - })(self) - })(self) -}; + Opal.defs(self, '$gm', function(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser/lexer"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; + if (month == null) { + month = nil + } + if (day == null) { + day = nil + } + if (hour == null) { + hour = nil + } + if (min == null) { + min = nil + } + if (sec == null) { + sec = nil + } + if (millisecond == null) { + millisecond = nil + } + if (_dummy1 == null) { + _dummy1 = nil + } + if (_dummy2 == null) { + _dummy2 = nil + } + if (_dummy3 == null) { + _dummy3 = nil + } + + var args, result; - Opal.add_stubs(['$require', '$|', '$attr_reader', '$attr_accessor', '$new', '$yylex', '$yylval', '$has_local?', '$scope', '$parser', '$to_sym', '$<<', '$&', '$>>', '$!', '$==', '$include?', '$arg?', '$space?', '$check', '$after_operator?', '$scan', '$length', '$matched', '$pos=', '$pos', '$new_strterm', '$merge', '$yylval=', '$to_f', '$gsub', '$scanner', '$to_i', '$raise', '$peek', '$chr', '$%', '$[]', '$escape', '$peek_variable_name', '$bol?', '$eos?', '$read_escape', '$join', '$count', '$strterm', '$[]=', '$pushback', '$strterm=', '$add_string_content', '$line=', '$line', '$label_state?', '$end_with?', '$=~', '$keyword', '$state', '$name', '$id', '$cond?', '$cmdarg?', '$here_document', '$parse_string', '$skip', '$empty?', '$new_op_asgn', '$set_arg_state', '$spcarg?', '$beg?', '$===', '$new_strterm2', '$cond_push', '$cmdarg_push', '$cond_lexpop', '$cmdarg_lexpop', '$end?', '$heredoc_identifier', '$sub', '$inspect', '$process_numeric', '$process_identifier', '$size', '$pop', '$last']); - self.$require("opal/regexp_anchors"); - self.$require("strscan"); - self.$require("opal/parser/keywords"); - return (function($base) { - var self = $module($base, 'Opal'); + if (arguments.length === 10) { + args = $slice.call(arguments); + year = args[5]; + month = args[4]; + day = args[3]; + hour = args[2]; + min = args[1]; + sec = args[0]; + } - var def = self.$$proto, $scope = self.$$scope; + args = time_params(year, month, day, hour, min, sec); + year = args[0]; + month = args[1]; + day = args[2]; + hour = args[3]; + min = args[4]; + sec = args[5]; - (function($base, $super) { - function $Lexer(){}; - var self = $Lexer = $klass($base, $super, 'Lexer', $Lexer); + result = new Date(Date.UTC(year, month, day, hour, min, 0, sec * 1000)); + if (year < 100) { + result.setUTCFullYear(year); + } + result.is_utc = true; + return result; + + }); - var def = self.$$proto, $scope = self.$$scope; + (function(self) { + var $scope = self.$$scope, def = self.$$proto; - def.scanner = def.tok_line = def.tok_column = def.column = def.line = def.cond = def.cmdarg = def.lex_state = def.space_seen = def.yylval = def.scanner_stack = def.start_of_lambda = def.file = nil; - Opal.cdecl($scope, 'STR_FUNC_ESCAPE', 1); + Opal.alias(self, 'mktime', 'local'); + return Opal.alias(self, 'utc', 'gm'); + })(Opal.get_singleton_class(self)); - Opal.cdecl($scope, 'STR_FUNC_EXPAND', 2); + Opal.defs(self, '$now', function() { + var self = this; - Opal.cdecl($scope, 'STR_FUNC_REGEXP', 4); + return self.$new(); + }); - Opal.cdecl($scope, 'STR_FUNC_QWORDS', 8); + Opal.defn(self, '$+', function(other) { + var $a, self = this; - Opal.cdecl($scope, 'STR_FUNC_SYMBOL', 16); + if ((($a = $scope.get('Time')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('TypeError'), "time + time?")}; + + if (!other.$$is_number) { + other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Integer'), "to_int"); + } + var result = new Date(self.getTime() + (other * 1000)); + result.is_utc = self.is_utc; + return result; + ; + }); - Opal.cdecl($scope, 'STR_FUNC_INDENT', 32); + Opal.defn(self, '$-', function(other) { + var $a, self = this; - Opal.cdecl($scope, 'STR_FUNC_XQUOTE', 64); + if ((($a = $scope.get('Time')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return (self.getTime() - other.getTime()) / 1000}; + + if (!other.$$is_number) { + other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Integer'), "to_int"); + } + var result = new Date(self.getTime() - (other * 1000)); + result.is_utc = self.is_utc; + return result; + ; + }); - Opal.cdecl($scope, 'STR_SQUOTE', 0); + Opal.defn(self, '$<=>', function(other) { + var $a, self = this, r = nil; - Opal.cdecl($scope, 'STR_DQUOTE', $scope.get('STR_FUNC_EXPAND')); + if ((($a = $scope.get('Time')['$==='](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$to_f()['$<=>'](other.$to_f()) + } else { + r = other['$<=>'](self); + if ((($a = r['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else if ((($a = $rb_gt(r, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return -1 + } else if ((($a = $rb_lt(r, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return 1 + } else { + return 0 + }; + }; + }); - Opal.cdecl($scope, 'STR_XQUOTE', $scope.get('STR_FUNC_EXPAND')['$|']($scope.get('STR_FUNC_XQUOTE'))); + Opal.defn(self, '$==', function(other) { + var self = this; - Opal.cdecl($scope, 'STR_REGEXP', $scope.get('STR_FUNC_REGEXP')['$|']($scope.get('STR_FUNC_ESCAPE'))['$|']($scope.get('STR_FUNC_EXPAND'))); + return self.$to_f() === other.$to_f(); + }); - Opal.cdecl($scope, 'STR_SWORD', $scope.get('STR_FUNC_QWORDS')); + Opal.defn(self, '$asctime', function() { + var self = this; - Opal.cdecl($scope, 'STR_DWORD', $scope.get('STR_FUNC_QWORDS')['$|']($scope.get('STR_FUNC_EXPAND'))); + return self.$strftime("%a %b %e %H:%M:%S %Y"); + }); - Opal.cdecl($scope, 'STR_SSYM', $scope.get('STR_FUNC_SYMBOL')); + Opal.alias(self, 'ctime', 'asctime'); - Opal.cdecl($scope, 'STR_DSYM', $scope.get('STR_FUNC_SYMBOL')['$|']($scope.get('STR_FUNC_EXPAND'))); + Opal.defn(self, '$day', function() { + var self = this; - self.$attr_reader("line", "column"); + return self.is_utc ? self.getUTCDate() : self.getDate(); + }); - self.$attr_reader("scope"); + Opal.defn(self, '$yday', function() { + var self = this, start_of_year = nil, start_of_day = nil, one_day = nil; - self.$attr_reader("eof_content"); + start_of_year = $scope.get('Time').$new(self.$year()).$to_i(); + start_of_day = $scope.get('Time').$new(self.$year(), self.$month(), self.$day()).$to_i(); + one_day = 86400; + return $rb_plus(($rb_divide(($rb_minus(start_of_day, start_of_year)), one_day)).$round(), 1); + }); - self.$attr_accessor("lex_state"); + Opal.defn(self, '$isdst', function() { + var self = this; - self.$attr_accessor("strterm"); + + var jan = new Date(self.getFullYear(), 0, 1), + jul = new Date(self.getFullYear(), 6, 1); + return self.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); + + }); - self.$attr_accessor("scanner"); + Opal.alias(self, 'dst?', 'isdst'); - self.$attr_accessor("yylval"); + Opal.defn(self, '$dup', function() { + var self = this, copy = nil; - self.$attr_accessor("parser"); + copy = new Date(self.getTime()); + copy.$copy_instance_variables(self); + copy.$initialize_dup(self); + return copy; + }); - def.$initialize = function(source, file) { - var self = this; + Opal.defn(self, '$eql?', function(other) { + var $a, self = this; - self.lex_state = "expr_beg"; - self.cond = 0; - self.cmdarg = 0; - self.line = 1; - self.tok_line = 1; - self.column = 0; - self.tok_column = 0; - self.file = file; - self.scanner = $scope.get('StringScanner').$new(source); - self.scanner_stack = [self.scanner]; - self.case_stmt = nil; - return self.start_of_lambda = nil; - }; + return ($a = other['$is_a?']($scope.get('Time')), $a !== false && $a !== nil ?(self['$<=>'](other))['$zero?']() : $a); + }); - def.$next_token = function() { - var self = this, token = nil, value = nil, location = nil; + Opal.defn(self, '$friday?', function() { + var self = this; - token = self.$yylex(); - value = self.$yylval(); - location = [self.tok_line, self.tok_column]; - self.tok_column = self.column; - self.tok_line = self.line; - return [token, [value, location]]; - }; + return self.$wday() == 5; + }); - def['$has_local?'] = function(local) { - var self = this; + Opal.defn(self, '$hash', function() { + var self = this; - return self.$parser().$scope()['$has_local?'](local.$to_sym()); - }; + return 'Time:' + self.getTime(); + }); - def.$cond_push = function(n) { - var self = this; + Opal.defn(self, '$hour', function() { + var self = this; - return self.cond = (self.cond['$<<'](1))['$|']((n['$&'](1))); - }; + return self.is_utc ? self.getUTCHours() : self.getHours(); + }); - def.$cond_pop = function() { - var self = this; + Opal.defn(self, '$inspect', function() { + var $a, self = this; - return self.cond = self.cond['$>>'](1); + if ((($a = self['$utc?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$strftime("%Y-%m-%d %H:%M:%S UTC") + } else { + return self.$strftime("%Y-%m-%d %H:%M:%S %z") }; + }); - def.$cond_lexpop = function() { - var self = this; + Opal.alias(self, 'mday', 'day'); - return self.cond = (self.cond['$>>'](1))['$|']((self.cond['$&'](1))); - }; + Opal.defn(self, '$min', function() { + var self = this; - def['$cond?'] = function() { - var self = this; + return self.is_utc ? self.getUTCMinutes() : self.getMinutes(); + }); - return (self.cond['$&'](1))['$=='](0)['$!'](); - }; + Opal.defn(self, '$mon', function() { + var self = this; - def.$cmdarg_push = function(n) { - var self = this; + return (self.is_utc ? self.getUTCMonth() : self.getMonth()) + 1; + }); - return self.cmdarg = (self.cmdarg['$<<'](1))['$|']((n['$&'](1))); - }; + Opal.defn(self, '$monday?', function() { + var self = this; - def.$cmdarg_pop = function() { - var self = this; + return self.$wday() == 1; + }); - return self.cmdarg = self.cmdarg['$>>'](1); - }; + Opal.alias(self, 'month', 'mon'); - def.$cmdarg_lexpop = function() { - var self = this; + Opal.defn(self, '$saturday?', function() { + var self = this; - return self.cmdarg = (self.cmdarg['$>>'](1))['$|']((self.cmdarg['$&'](1))); - }; + return self.$wday() == 6; + }); - def['$cmdarg?'] = function() { - var self = this; + Opal.defn(self, '$sec', function() { + var self = this; - return (self.cmdarg['$&'](1))['$=='](0)['$!'](); - }; + return self.is_utc ? self.getUTCSeconds() : self.getSeconds(); + }); - def['$arg?'] = function() { - var self = this; + Opal.defn(self, '$succ', function() { + var self = this; - return ["expr_arg", "expr_cmdarg"]['$include?'](self.lex_state); - }; + + var result = new Date(self.getTime() + 1000); + result.is_utc = self.is_utc; + return result; + + }); - def['$end?'] = function() { - var self = this; + Opal.defn(self, '$usec', function() { + var self = this; - return ["expr_end", "expr_endarg", "expr_endfn"]['$include?'](self.lex_state); - }; + return self.getMilliseconds() * 1000; + }); - def['$beg?'] = function() { - var self = this; + Opal.defn(self, '$zone', function() { + var self = this; - return ["expr_beg", "expr_value", "expr_mid", "expr_class"]['$include?'](self.lex_state); - }; + + var string = self.toString(), + result; - def['$after_operator?'] = function() { - var self = this; + if (string.indexOf('(') == -1) { + result = string.match(/[A-Z]{3,4}/)[0]; + } + else { + result = string.match(/\([^)]+\)/)[0].match(/[A-Z]/g).join(''); + } - return ["expr_fname", "expr_dot"]['$include?'](self.lex_state); - }; + if (result == "GMT" && /(GMT\W*\d{4})/.test(string)) { + return RegExp.$1; + } + else { + return result; + } + + }); - def['$label_state?'] = function() { - var $a, self = this; + Opal.defn(self, '$getgm', function() { + var self = this; - return ((($a = ["expr_beg", "expr_endfn"]['$include?'](self.lex_state)) !== false && $a !== nil) ? $a : self['$arg?']()); - }; + + var result = new Date(self.getTime()); + result.is_utc = true; + return result; + + }); - def['$spcarg?'] = function() { - var $a, $b, self = this; + Opal.alias(self, 'getutc', 'getgm'); - return ($a = ($b = self['$arg?'](), $b !== false && $b !== nil ?self.space_seen : $b), $a !== false && $a !== nil ?self['$space?']()['$!']() : $a); - }; + Opal.defn(self, '$gmtime', function() { + var self = this; - def['$space?'] = function() { - var self = this; + + self.is_utc = true; + return self; + + }); - return self.scanner.$check(/\s/); - }; + Opal.alias(self, 'utc', 'gmtime'); - def.$set_arg_state = function() { - var $a, self = this; + Opal.defn(self, '$gmt?', function() { + var self = this; - return self.lex_state = (function() {if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "expr_arg" - } else { - return "expr_beg" - }; return nil; })(); - }; + return self.is_utc === true; + }); - def.$scan = function(regexp) { - var $a, self = this, result = nil; + Opal.defn(self, '$gmt_offset', function() { + var self = this; - if ((($a = result = self.scanner.$scan(regexp)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.column = $rb_plus(self.column, result.$length()); - self.yylval = $rb_plus(self.yylval, self.scanner.$matched());}; - return result; - }; + return -self.getTimezoneOffset() * 60; + }); - def.$skip = function(regexp) { - var $a, self = this, result = nil; + Opal.defn(self, '$strftime', function(format) { + var self = this; - if ((($a = result = self.scanner.$scan(regexp)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.column = $rb_plus(self.column, result.$length()); - self.tok_column = self.column;}; - return result; - }; + + return format.replace(/%([\-_#^0]*:{0,2})(\d+)?([EO]*)(.)/g, function(full, flags, width, _, conv) { + var result = "", + zero = flags.indexOf('0') !== -1, + pad = flags.indexOf('-') === -1, + blank = flags.indexOf('_') !== -1, + upcase = flags.indexOf('^') !== -1, + invert = flags.indexOf('#') !== -1, + colons = (flags.match(':') || []).length; - def.$check = function(regexp) { - var self = this; + width = parseInt(width, 10); - return self.scanner.$check(regexp); - }; + if (zero && blank) { + if (flags.indexOf('0') < flags.indexOf('_')) { + zero = false; + } + else { + blank = false; + } + } - def.$pushback = function(n) { - var $a, self = this; + switch (conv) { + case 'Y': + result += self.$year(); + break; - return ($a = self.scanner, $a['$pos=']($rb_minus($a.$pos(), n))); - }; + case 'C': + zero = !blank; + result += Math.round(self.$year() / 100); + break; - def.$matched = function() { - var self = this; + case 'y': + zero = !blank; + result += (self.$year() % 100); + break; - return self.scanner.$matched(); - }; + case 'm': + zero = !blank; + result += self.$mon(); + break; - def['$line='] = function(line) { - var self = this; + case 'B': + result += long_months[self.$mon() - 1]; + break; - self.column = self.tok_column = 0; - return self.line = self.tok_line = line; - }; + case 'b': + case 'h': + blank = !zero; + result += short_months[self.$mon() - 1]; + break; - def.$new_strterm = function(func, term, paren) { - var self = this; + case 'd': + zero = !blank + result += self.$day(); + break; - return $hash2(["type", "func", "term", "paren"], {"type": "string", "func": func, "term": term, "paren": paren}); - }; + case 'e': + blank = !zero + result += self.$day(); + break; - def.$new_strterm2 = function(func, term, paren) { - var self = this; + case 'j': + result += self.$yday(); + break; - term = self.$new_strterm(func, term, paren); - return term.$merge($hash2(["balance", "nesting"], {"balance": true, "nesting": 0})); - }; + case 'H': + zero = !blank; + result += self.$hour(); + break; - def.$new_op_asgn = function(value) { - var $a, $b, self = this; + case 'k': + blank = !zero; + result += self.$hour(); + break; - (($a = [value]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tOP_ASGN"; - }; + case 'I': + zero = !blank; + result += (self.$hour() % 12 || 12); + break; - def.$process_numeric = function() { - var $a, $b, self = this; + case 'l': + blank = !zero; + result += (self.$hour() % 12 || 12); + break; - self.lex_state = "expr_end"; - if ((($a = self.$scan(/[\d_]+\.[\d_]+\b|[\d_]+(\.[\d_]+)?[eE][-+]?[\d_]+\b/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_f()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tFLOAT"; - } else if ((($a = self.$scan(/([^0][\d_]*|0)\b/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_i()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tINTEGER"; - } else if ((($a = self.$scan(/0[bB](0|1|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$to_i(2)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tINTEGER"; - } else if ((($a = self.$scan(/0[xX](\d|[a-f]|[A-F]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$to_i(16)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tINTEGER"; - } else if ((($a = self.$scan(/0[oO]?([0-7]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$to_i(8)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tINTEGER"; - } else if ((($a = self.$scan(/0[dD]([0-9]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_i()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tINTEGER"; - } else { - return self.$raise("Lexing error on numeric type: `" + (self.$scanner().$peek(5)) + "`") - }; - }; + case 'P': + result += (self.$hour() >= 12 ? "pm" : "am"); + break; - def.$read_escape = function() { - var $a, self = this; + case 'p': + result += (self.$hour() >= 12 ? "PM" : "AM"); + break; - if ((($a = self.$scan(/\\/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\\" - } else if ((($a = self.$scan(/n/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\n" - } else if ((($a = self.$scan(/t/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\t" - } else if ((($a = self.$scan(/r/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\r" - } else if ((($a = self.$scan(/f/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\f" - } else if ((($a = self.$scan(/v/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\v" - } else if ((($a = self.$scan(/a/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\u0007" - } else if ((($a = self.$scan(/b/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\b" - } else if ((($a = self.$scan(/e/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\u001b" - } else if ((($a = self.$scan(/s/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return " " - } else if ((($a = self.$scan(/[0-7]{1,3}/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return (self.$matched().$to_i(8)['$%'](256)).$chr() - } else if ((($a = self.$scan(/x([0-9a-fA-F]{1,2})/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$scanner()['$[]'](1).$to_i(16).$chr() - } else if ((($a = self.$scan(/u([0-9a-zA-Z]{1,4})/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$scanner()['$[]'](1).$to_i(16).$chr((($scope.get('Encoding')).$$scope.get('UTF_8'))) - } else { - return self.$scan(/./) - }; - }; + case 'M': + zero = !blank; + result += self.$min(); + break; - def.$peek_variable_name = function() { - var $a, self = this; + case 'S': + zero = !blank; + result += self.$sec() + break; - if ((($a = self.$check(/[@$]/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "tSTRING_DVAR" - } else if ((($a = self.$scan(/\{/)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "tSTRING_DBEG" - } else { - return nil - }; - }; + case 'L': + zero = !blank; + width = isNaN(width) ? 3 : width; + result += self.getMilliseconds(); + break; - def.$here_document = function(str_parse) { - var $a, $b, $c, self = this, eos_regx = nil, expand = nil, escape = nil, str_buffer = nil, tok = nil, reg = nil, complete_str = nil; + case 'N': + width = isNaN(width) ? 9 : width; + result += (self.getMilliseconds().toString()).$rjust(3, "0"); + result = (result).$ljust(width, "0"); + break; - eos_regx = (new RegExp("[ \\t]*" + $scope.get('Regexp').$escape(str_parse['$[]']("term")) + "(\\r*\\n|$)")); - expand = true; - escape = str_parse['$[]']("func")['$==']($scope.get('STR_SQUOTE'))['$!'](); - if ((($a = self.$check(eos_regx)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$scan((new RegExp("[ \\t]*" + $scope.get('Regexp').$escape(str_parse['$[]']("term"))))); - if ((($a = str_parse['$[]']("scanner")) !== nil && (!$a.$$is_boolean || $a == true))) { - self.scanner_stack['$<<'](str_parse['$[]']("scanner")); - self.scanner = str_parse['$[]']("scanner");}; - return "tSTRING_END";}; - str_buffer = []; - if ((($a = self.$scan(/#/)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = tok = self.$peek_variable_name()) !== nil && (!$a.$$is_boolean || $a == true))) { - return tok}; - str_buffer['$<<']("#");}; - while (!((($b = ($c = self.$check(eos_regx), $c !== false && $c !== nil ?self.$scanner()['$bol?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true)))) { - if ((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$raise("reached EOF while in heredoc")}; - if ((($b = self.$scan(/\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { - str_buffer['$<<'](self.$scanner().$matched()) - } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$check(/#(?=[\$\@\{])/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - break; - } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - str_buffer['$<<'](((function() {if (escape !== false && escape !== nil) { - return self.$read_escape() - } else { - return self.$scanner().$matched() - }; return nil; })())) - } else { - reg = $scope.get('Regexp').$new("[^#\u0000\\\\\n]+|."); - self.$scan(reg); - str_buffer['$<<'](self.$scanner().$matched()); - };}; - complete_str = str_buffer.$join(""); - self.line = $rb_plus(self.line, complete_str.$count("\n")); - (($a = [complete_str]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tSTRING_CONTENT"; - }; + case 'z': + var offset = self.getTimezoneOffset(), + hours = Math.floor(Math.abs(offset) / 60), + minutes = Math.abs(offset) % 60; - def.$parse_string = function() { - var $a, $b, self = this, str_parse = nil, func = nil, space = nil, qwords = nil, expand = nil, regexp = nil, str_buffer = nil, complete_str = nil; + result += offset < 0 ? "+" : "-"; + result += hours < 10 ? "0" : ""; + result += hours; - str_parse = self.$strterm(); - func = str_parse['$[]']("func"); - space = false; - qwords = (func['$&']($scope.get('STR_FUNC_QWORDS')))['$=='](0)['$!'](); - expand = (func['$&']($scope.get('STR_FUNC_EXPAND')))['$=='](0)['$!'](); - regexp = (func['$&']($scope.get('STR_FUNC_REGEXP')))['$=='](0)['$!'](); - if ((($a = (($b = qwords !== false && qwords !== nil) ? self.$scan(/\s+/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - space = true}; - str_buffer = []; - if ((($a = self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("term"))))) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = (($b = qwords !== false && qwords !== nil) ? str_parse['$[]']("done_last_space")['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - str_parse['$[]=']("done_last_space", true); - self.$pushback(1); - (($a = [" "]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tSPACE";}; - if ((($a = str_parse['$[]']("balance")) !== nil && (!$a.$$is_boolean || $a == true))) { - if (str_parse['$[]']("nesting")['$=='](0)) { - if (regexp !== false && regexp !== nil) { - (($a = [self.$scan(/\w+/)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tREGEXP_END";}; - return "tSTRING_END"; - } else { - str_buffer['$<<'](self.$scanner().$matched()); - ($a = "nesting", $b = str_parse, $b['$[]=']($a, $rb_minus($b['$[]']($a), 1))); - (($a = [str_parse]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); + if (colons > 0) { + result += ":"; } - } else if (regexp !== false && regexp !== nil) { - self.lex_state = "expr_end"; - (($a = [self.$scan(/\w+/)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tREGEXP_END"; - } else { - if ((($a = str_parse['$[]']("scanner")) !== nil && (!$a.$$is_boolean || $a == true))) { - self.scanner_stack['$<<'](str_parse['$[]']("scanner")); - self.scanner = str_parse['$[]']("scanner");}; - return "tSTRING_END"; - };}; - if (space !== false && space !== nil) { - (($a = [" "]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tSPACE";}; - if ((($a = ($b = str_parse['$[]']("balance"), $b !== false && $b !== nil ?self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("paren")))) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - str_buffer['$<<'](self.$scanner().$matched()); - ($a = "nesting", $b = str_parse, $b['$[]=']($a, $rb_plus($b['$[]']($a), 1))); - } else if ((($a = self.$check(/#[@$]/)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$scan(/#/); - if (expand !== false && expand !== nil) { - return "tSTRING_DVAR" - } else { - str_buffer['$<<'](self.$scanner().$matched()) - }; - } else if ((($a = self.$scan(/#\{/)) !== nil && (!$a.$$is_boolean || $a == true))) { - if (expand !== false && expand !== nil) { - return "tSTRING_DBEG" - } else { - str_buffer['$<<'](self.$scanner().$matched()) - } - } else if ((($a = self.$scan(/\#/)) !== nil && (!$a.$$is_boolean || $a == true))) { - str_buffer['$<<']("#")}; - self.$add_string_content(str_buffer, str_parse); - complete_str = str_buffer.$join(""); - self.line = $rb_plus(self.line, complete_str.$count("\n")); - (($a = [complete_str]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tSTRING_CONTENT"; - }; - def.$add_string_content = function(str_buffer, str_parse) { - var $a, $b, $c, self = this, func = nil, end_str_re = nil, qwords = nil, expand = nil, regexp = nil, escape = nil, xquote = nil, c = nil, handled = nil, reg = nil; + result += minutes < 10 ? "0" : ""; + result += minutes; - func = str_parse['$[]']("func"); - end_str_re = $scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("term"))); - qwords = (func['$&']($scope.get('STR_FUNC_QWORDS')))['$=='](0)['$!'](); - expand = (func['$&']($scope.get('STR_FUNC_EXPAND')))['$=='](0)['$!'](); - regexp = (func['$&']($scope.get('STR_FUNC_REGEXP')))['$=='](0)['$!'](); - escape = (func['$&']($scope.get('STR_FUNC_ESCAPE')))['$=='](0)['$!'](); - xquote = (func['$==']($scope.get('STR_XQUOTE'))); - while (!((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true)))) { - c = nil; - handled = true; - if ((($b = self.$check(end_str_re)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = ($c = str_parse['$[]']("balance"), $c !== false && $c !== nil ?(str_parse['$[]']("nesting")['$=='](0)['$!']()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$scan(end_str_re); - c = self.$scanner().$matched(); - ($b = "nesting", $c = str_parse, $c['$[]=']($b, $rb_minus($c['$[]']($b), 1))); - } else { - break; - } - } else if ((($b = ($c = str_parse['$[]']("balance"), $c !== false && $c !== nil ?self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("paren")))) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - ($b = "nesting", $c = str_parse, $c['$[]=']($b, $rb_plus($c['$[]']($b), 1))); - c = self.$scanner().$matched(); - } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$pushback(1); - break;; - } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$check(/#(?=[\$\@\{])/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - break; - } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$pushback(1); - break;; - } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if (xquote !== false && xquote !== nil) { - c = $rb_plus("\\", self.$scan(/./)) - } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\n/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - str_buffer['$<<']("\n"); - continue;; - } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$scan(/\n/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - continue; - } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - c = " " - } else if (regexp !== false && regexp !== nil) { - if ((($b = self.$scan(/(.)/)) !== nil && (!$b.$$is_boolean || $b == true))) { - c = $rb_plus("\\", self.$scanner().$matched())} - } else if (expand !== false && expand !== nil) { - c = self.$read_escape() - } else if ((($b = self.$scan(/\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { - } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if (escape !== false && escape !== nil) { - c = "\\\\" - } else { - c = self.$scanner().$matched() + if (colons > 1) { + result += ":00"; } - } else if ((($b = self.$scan(end_str_re)) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - str_buffer['$<<']("\\") - } - } else { - handled = false - }; - if (handled !== false && handled !== nil) { - } else { - reg = (function() {if (qwords !== false && qwords !== nil) { - return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + "#\u0000\n \\\\]+|.") - } else if ((($b = str_parse['$[]']("balance")) !== nil && (!$b.$$is_boolean || $b == true))) { - return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + ($scope.get('Regexp').$escape(str_parse['$[]']("paren"))) + "#\u0000\\\\]+|.") - } else { - return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + "#\u0000\\\\]+|.") - }; return nil; })(); - self.$scan(reg); - c = self.$scanner().$matched(); - }; - ((($b = c) !== false && $b !== nil) ? $b : c = self.$scanner().$matched()); - str_buffer['$<<'](c);}; - if ((($a = self.$scanner()['$eos?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$raise("reached EOF while in string") - } else { - return nil - }; - }; - def.$heredoc_identifier = function() { - var $a, $b, self = this, escape_method = nil, heredoc = nil, end_of_line = nil; + break; - if ((($a = self.$scan(/(-?)(['"])?(\w+)\2?/)) !== nil && (!$a.$$is_boolean || $a == true))) { - escape_method = (function() {if ((($a = (self.scanner['$[]'](2)['$==']("'"))) !== nil && (!$a.$$is_boolean || $a == true))) { - return $scope.get('STR_SQUOTE') - } else { - return $scope.get('STR_DQUOTE') - }; return nil; })(); - heredoc = self.scanner['$[]'](3); - (($a = [self.$new_strterm(escape_method, heredoc, heredoc)]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); - self.$strterm()['$[]=']("type", "heredoc"); - end_of_line = self.$scan(/.*\n/); - if ((($a = end_of_line['$==']("\n")['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$strterm()['$[]=']("scanner", $scope.get('StringScanner').$new(end_of_line))}; - ($a = self, $a['$line=']($rb_plus($a.$line(), 1))); - (($a = [heredoc]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tSTRING_BEG"; - } else { - return nil - }; - }; + case 'Z': + result += self.$zone(); + break; - def.$process_identifier = function(matched, cmd_start) { - var $a, $b, $c, self = this, last_state = nil, result = nil, kw = nil, old_state = nil; + case 'A': + result += days_of_week[self.$wday()]; + break; - last_state = self.lex_state; - if ((($a = ($b = ($c = self['$label_state?'](), $c !== false && $c !== nil ?self.$check(/::/)['$!']() : $c), $b !== false && $b !== nil ?self.$scan(/:/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_beg"; - (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return "tLABEL";}; - if (matched['$==']("defined?")) { - if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_end"; - return "tIDENTIFIER";}; - self.lex_state = "expr_arg"; - return "kDEFINED";}; - if ((($a = matched['$end_with?']("?", "!")) !== nil && (!$a.$$is_boolean || $a == true))) { - result = "tIDENTIFIER" - } else if (self.lex_state['$==']("expr_fname")) { - if ((($a = ($b = self.$check(/\=\>/)['$!'](), $b !== false && $b !== nil ?self.$scan(/\=/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - result = "tIDENTIFIER"; - matched = $rb_plus(matched, self.$scanner().$matched());} - } else if ((($a = matched['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[A-Z]")))) !== nil && (!$a.$$is_boolean || $a == true))) { - result = "tCONSTANT" - } else { - result = "tIDENTIFIER" - }; - if ((($a = ($b = self.lex_state['$==']("expr_dot")['$!'](), $b !== false && $b !== nil ?kw = $scope.get('Keywords').$keyword(matched) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - old_state = self.lex_state; - self.lex_state = kw.$state(); - if (old_state['$==']("expr_fname")) { - (($a = [kw.$name()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return kw.$id()['$[]'](0);}; - if (self.lex_state['$==']("expr_beg")) { - cmd_start = true}; - if (matched['$==']("do")) { - if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_end"; - return "tIDENTIFIER";}; - if ((($a = self.start_of_lambda) !== nil && (!$a.$$is_boolean || $a == true))) { - self.start_of_lambda = false; - self.lex_state = "expr_beg"; - return "kDO_LAMBDA"; - } else if ((($a = self['$cond?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_beg"; - return "kDO_COND"; - } else if ((($a = ($b = self['$cmdarg?'](), $b !== false && $b !== nil ?self.lex_state['$==']("expr_cmdarg")['$!']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_beg"; - return "kDO_BLOCK"; - } else if (self.lex_state['$==']("expr_endarg")) { - return "kDO_BLOCK" - } else { - self.lex_state = "expr_beg"; - return "kDO"; - }; - } else if ((($a = ((($b = old_state['$==']("expr_beg")) !== false && $b !== nil) ? $b : old_state['$==']("expr_value"))) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return kw.$id()['$[]'](0); - } else { - if ((($a = kw.$id()['$[]'](0)['$=='](kw.$id()['$[]'](1))['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_beg"}; - (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); - return kw.$id()['$[]'](1); - };}; - if ((($a = ["expr_beg", "expr_dot", "expr_mid", "expr_arg", "expr_cmdarg"]['$include?'](self.lex_state)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = (function() {if (cmd_start !== false && cmd_start !== nil) { - return "expr_cmdarg" - } else { - return "expr_arg" - }; return nil; })() - } else if (self.lex_state['$==']("expr_fname")) { - self.lex_state = "expr_endfn" - } else { - self.lex_state = "expr_end" - }; - if ((($a = ($b = ["expr_dot", "expr_fname"]['$include?'](last_state)['$!'](), $b !== false && $b !== nil ?self['$has_local?'](matched) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.lex_state = "expr_end"}; - return (function() {if ((($a = matched['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[A-Z]")))) !== nil && (!$a.$$is_boolean || $a == true))) { - return "tCONSTANT" - } else { - return "tIDENTIFIER" - }; return nil; })(); + case 'a': + result += short_days[self.$wday()]; + break; + + case 'u': + result += (self.$wday() + 1); + break; + + case 'w': + result += self.$wday(); + break; + + case 'V': + result += self.$cweek_cyear()['$[]'](0).$to_s().$rjust(2, "0"); + break; + + case 'G': + result += self.$cweek_cyear()['$[]'](1); + break; + + case 'g': + result += self.$cweek_cyear()['$[]'](1)['$[]']($range(-2, -1, false)); + break; + + case 's': + result += self.$to_i(); + break; + + case 'n': + result += "\n"; + break; + + case 't': + result += "\t"; + break; + + case '%': + result += "%"; + break; + + case 'c': + result += self.$strftime("%a %b %e %T %Y"); + break; + + case 'D': + case 'x': + result += self.$strftime("%m/%d/%y"); + break; + + case 'F': + result += self.$strftime("%Y-%m-%d"); + break; + + case 'v': + result += self.$strftime("%e-%^b-%4Y"); + break; + + case 'r': + result += self.$strftime("%I:%M:%S %p"); + break; + + case 'R': + result += self.$strftime("%H:%M"); + break; + + case 'T': + case 'X': + result += self.$strftime("%H:%M:%S"); + break; + + default: + return full; + } + + if (upcase) { + result = result.toUpperCase(); + } + + if (invert) { + result = result.replace(/[A-Z]/, function(c) { c.toLowerCase() }). + replace(/[a-z]/, function(c) { c.toUpperCase() }); + } + + if (pad && (zero || blank)) { + result = (result).$rjust(isNaN(width) ? 2 : width, blank ? " " : "0"); + } + + return result; + }); + + }); + + Opal.defn(self, '$sunday?', function() { + var self = this; + + return self.$wday() == 0; + }); + + Opal.defn(self, '$thursday?', function() { + var self = this; + + return self.$wday() == 4; + }); + + Opal.defn(self, '$to_a', function() { + var self = this; + + return [self.$sec(), self.$min(), self.$hour(), self.$day(), self.$month(), self.$year(), self.$wday(), self.$yday(), self.$isdst(), self.$zone()]; + }); + + Opal.defn(self, '$to_f', function() { + var self = this; + + return self.getTime() / 1000; + }); + + Opal.defn(self, '$to_i', function() { + var self = this; + + return parseInt(self.getTime() / 1000, 10); + }); + + Opal.alias(self, 'to_s', 'inspect'); + + Opal.defn(self, '$tuesday?', function() { + var self = this; + + return self.$wday() == 2; + }); + + Opal.alias(self, 'tv_sec', 'sec'); + + Opal.alias(self, 'tv_usec', 'usec'); + + Opal.alias(self, 'utc?', 'gmt?'); + + Opal.alias(self, 'gmtoff', 'gmt_offset'); + + Opal.alias(self, 'utc_offset', 'gmt_offset'); + + Opal.defn(self, '$wday', function() { + var self = this; + + return self.is_utc ? self.getUTCDay() : self.getDay(); + }); + + Opal.defn(self, '$wednesday?', function() { + var self = this; + + return self.$wday() == 3; + }); + + Opal.defn(self, '$year', function() { + var self = this; + + return self.is_utc ? self.getUTCFullYear() : self.getFullYear(); + }); + + return (Opal.defn(self, '$cweek_cyear', function() { + var $a, $b, self = this, jan01 = nil, jan01_wday = nil, first_monday = nil, year = nil, offset = nil, week = nil, dec31 = nil, dec31_wday = nil; + + jan01 = $scope.get('Time').$new(self.$year(), 1, 1); + jan01_wday = jan01.$wday(); + first_monday = 0; + year = self.$year(); + if ((($a = ($b = $rb_le(jan01_wday, 4), $b !== false && $b !== nil ?jan01_wday['$!='](0) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + offset = $rb_minus(jan01_wday, 1) + } else { + offset = $rb_minus($rb_minus(jan01_wday, 7), 1); + if (offset['$=='](-8)) { + offset = -1}; }; + week = ($rb_divide(($rb_plus(self.$yday(), offset)), 7.0)).$ceil(); + if ((($a = $rb_le(week, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('Time').$new($rb_minus(self.$year(), 1), 12, 31).$cweek_cyear() + } else if (week['$=='](53)) { + dec31 = $scope.get('Time').$new(self.$year(), 12, 31); + dec31_wday = dec31.$wday(); + if ((($a = ($b = $rb_le(dec31_wday, 3), $b !== false && $b !== nil ?dec31_wday['$!='](0) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + week = 1; + year = $rb_plus(year, 1);};}; + return [week, year]; + }), nil) && 'cweek_cyear'; + })($scope.base, Date); +}; - return (def.$yylex = function() {try { +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/struct"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_ge(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $hash2 = Opal.hash2; - var $a, $b, $c, $d, self = this, cmd_start = nil, c = nil, token = nil, line_count = nil, result = nil, str_type = nil, paren = nil, term = nil, $case = nil, func = nil, start_word = nil, end_word = nil, matched = nil, sign = nil, utype = nil; + Opal.add_stubs(['$require', '$include', '$==', '$[]', '$upcase', '$const_set', '$new', '$unshift', '$each', '$define_struct_attribute', '$class_eval', '$to_proc', '$allocate', '$initialize', '$raise', '$<<', '$members', '$define_method', '$instance_eval', '$each_with_index', '$[]=', '$class', '$hash', '$===', '$<', '$-@', '$size', '$>=', '$coerce_to!', '$include?', '$to_sym', '$instance_of?', '$__id__', '$eql?', '$enum_for', '$length', '$map', '$+', '$join', '$inspect', '$each_pair', '$inject', '$flatten', '$to_a']); + self.$require("corelib/enumerable"); + return (function($base, $super) { + function $Struct(){}; + var self = $Struct = $klass($base, $super, 'Struct', $Struct); - self.yylval = ""; - self.space_seen = false; - cmd_start = false; - c = ""; - if ((($a = self.$strterm()) !== nil && (!$a.$$is_boolean || $a == true))) { - if (self.$strterm()['$[]']("type")['$==']("heredoc")) { - token = self.$here_document(self.$strterm()) - } else { - token = self.$parse_string() - }; - if ((($a = ((($b = token['$==']("tSTRING_END")) !== false && $b !== nil) ? $b : token['$==']("tREGEXP_END"))) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [nil]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); - self.lex_state = "expr_end";}; - return token;}; - while ((($b = true) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$skip(/\ |\t|\r/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.space_seen = true; - continue;; - } else if ((($b = self.$skip(/(\n|#)/)) !== nil && (!$b.$$is_boolean || $b == true))) { - c = self.$scanner().$matched(); - if (c['$==']("#")) { - self.$skip(/(.*)/) - } else { - ($b = self, $b['$line=']($rb_plus($b.$line(), 1))) - }; - self.$skip(/(\n+)/); - if ((($b = self.$scanner().$matched()) !== nil && (!$b.$$is_boolean || $b == true))) { - ($b = self, $b['$line=']($rb_plus($b.$line(), self.$scanner().$matched().$length())))}; - if ((($b = ["expr_beg", "expr_dot"]['$include?'](self.lex_state)) !== nil && (!$b.$$is_boolean || $b == true))) { - continue;}; - if ((($b = self.$skip(/([\ \t\r\f\v]*)\./)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scanner()['$[]'](1)['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - self.space_seen = true - }; - self.$pushback(1); - if ((($b = self.$check(/\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - continue; - };}; - cmd_start = true; - self.lex_state = "expr_beg"; - (($b = ["\\n"]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return "tNL"; - } else if ((($b = self.$scan(/\;/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tSEMI"; - } else if ((($b = self.$check(/\*/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\*\*\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("**"); - } else if ((($b = self.$scan(/\*\*/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tPOW"; - } else if ((($b = self.$scan(/\*\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("*"); - } else { - self.$scan(/\*/); - if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg"; - return "tSTAR2"; - } else if ((($b = ($c = self.space_seen, $c !== false && $c !== nil ?self.$check(/\S/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tSTAR"; - } else if ((($b = ["expr_beg", "expr_mid"]['$include?'](self.lex_state)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tSTAR"; - } else { - self.lex_state = "expr_beg"; - return "tSTAR2"; - }; - } - } else if ((($b = self.$scan(/\!/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg"; - if ((($b = self.$scan(/@/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return ["tBANG", "!"]}; - } else { - self.lex_state = "expr_beg" - }; - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tNEQ" - } else if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tNMATCH"}; - return "tBANG"; - } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = (($c = self.lex_state['$==']("expr_beg")) ? self.space_seen['$!']() : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = ($c = self.$scan(/begin/), $c !== false && $c !== nil ?self['$space?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$scan(/(.*)/); - line_count = 0; - while ((($c = true) !== nil && (!$c.$$is_boolean || $c == true))) { - if ((($c = self.$scanner()['$eos?']()) !== nil && (!$c.$$is_boolean || $c == true))) { - self.$raise("embedded document meets end of file")}; - if ((($c = ($d = self.$scan(/\=end/), $d !== false && $d !== nil ?self['$space?']() : $d)) !== nil && (!$c.$$is_boolean || $c == true))) { - self.line = $rb_plus(self.line, line_count); - return self.$yylex();}; - if ((($c = self.$scan(/\n/)) !== nil && (!$c.$$is_boolean || $c == true))) { - line_count = $rb_plus(line_count, 1); - continue;;}; - self.$scan(/(.*)/);};}}; - self.$set_arg_state(); - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tEQQ"}; - return "tEQ";}; - if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tMATCH" - } else if ((($b = self.$scan(/\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tASSOC"}; - return "tEQL"; - } else if ((($b = self.$scan(/\"/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_DQUOTE'), "\"", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tSTRING_BEG"; - } else if ((($b = self.$scan(/\'/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_SQUOTE'), "'", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tSTRING_BEG"; - } else if ((($b = self.$scan(/\`/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_XQUOTE'), "`", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tXSTRING_BEG"; - } else if ((($b = self.$scan(/\&/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\&/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$new_op_asgn("&&")}; - return "tANDOP"; - } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("&");}; - if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tAMPER" - } else if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tAMPER" - } else { - result = "tAMPER2" - }; - self.$set_arg_state(); - return result; - } else if ((($b = self.$scan(/\|/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\|/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$new_op_asgn("||")}; - return "tOROP"; - } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$new_op_asgn("|")}; - self.$set_arg_state(); - return "tPIPE"; - } else if ((($b = self.$scan(/\%[QqWwixrs]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - str_type = self.$scanner().$matched()['$[]'](1, 1); - paren = term = self.$scan(/./); - $case = term;if ("("['$===']($case)) {term = ")"}else if ("["['$===']($case)) {term = "]"}else if ("{"['$===']($case)) {term = "}"}else if ("<"['$===']($case)) {term = ">"}else {paren = "\x00"}; - $b = Opal.to_ary((function() {$case = str_type;if ("Q"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_DQUOTE')]}else if ("q"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_SQUOTE')]}else if ("W"['$===']($case)) {self.$skip(/\s*/); - return ["tWORDS_BEG", $scope.get('STR_DWORD')];}else if ("w"['$===']($case) || "i"['$===']($case)) {self.$skip(/\s*/); - return ["tAWORDS_BEG", $scope.get('STR_SWORD')];}else if ("x"['$===']($case)) {return ["tXSTRING_BEG", $scope.get('STR_XQUOTE')]}else if ("r"['$===']($case)) {return ["tREGEXP_BEG", $scope.get('STR_REGEXP')]}else if ("s"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_SQUOTE')]}else { return nil }})()), token = ($b[0] == null ? nil : $b[0]), func = ($b[1] == null ? nil : $b[1]); - (($b = [self.$new_strterm2(func, term, paren)]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return token; - } else if ((($b = self.$scan(/\//)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_REGEXP'), "/", "/")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tREGEXP_BEG"; - } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("/");}; - if ((($b = self['$arg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = ($c = self.$check(/\s/)['$!'](), $c !== false && $c !== nil ?self.space_seen : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_REGEXP'), "/", "/")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tREGEXP_BEG";}}; - if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg" - } else { - self.lex_state = "expr_beg" - }; - return "tDIVIDE"; - } else if ((($b = self.$scan(/\%/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("%"); - } else if ((($b = self.$check(/[^\s]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = ((($c = self.lex_state['$==']("expr_beg")) !== false && $c !== nil) ? $c : ((($d = self.lex_state['$==']("expr_arg")) ? self.space_seen : $d)))) !== nil && (!$b.$$is_boolean || $b == true))) { - start_word = self.$scan(/./); - end_word = ((($b = $hash2(["(", "[", "{"], {"(": ")", "[": "]", "{": "}"})['$[]'](start_word)) !== false && $b !== nil) ? $b : start_word); - (($b = [self.$new_strterm2($scope.get('STR_DQUOTE'), end_word, start_word)]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); - return "tSTRING_BEG";}}; - self.$set_arg_state(); - return "tPERCENT"; - } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\r?\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.space_seen = true; - continue;;}; - self.$raise($scope.get('SyntaxError'), "backslash must appear before newline :" + (self.file) + ":" + (self.line)); - } else if ((($b = self.$scan(/\(/)) !== nil && (!$b.$$is_boolean || $b == true))) { - result = self.$scanner().$matched(); - if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tLPAREN" - } else if ((($b = ($c = self.space_seen, $c !== false && $c !== nil ?self['$arg?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tLPAREN_ARG" - } else { - result = "tLPAREN2" - }; - self.lex_state = "expr_beg"; - self.$cond_push(0); - self.$cmdarg_push(0); - return result; - } else if ((($b = self.$scan(/\)/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$cond_lexpop(); - self.$cmdarg_lexpop(); - self.lex_state = "expr_end"; - return "tRPAREN"; - } else if ((($b = self.$scan(/\[/)) !== nil && (!$b.$$is_boolean || $b == true))) { - result = self.$scanner().$matched(); - if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg"; - if ((($b = self.$scan(/\]=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tASET" - } else if ((($b = self.$scan(/\]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return "tAREF" - } else { - self.$raise("Unexpected '[' token") - }; - } else if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tLBRACK" - } else if ((($b = ($c = self['$arg?'](), $c !== false && $c !== nil ?self.space_seen : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tLBRACK" + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_8, TMP_11; + + self.$include($scope.get('Enumerable')); + + Opal.defs(self, '$new', TMP_1 = function(name) { + var $a, $b, $c, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil, $zuper = nil, $zuper_index = nil; + + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + TMP_1.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if (self['$==']($scope.get('Struct'))) { + } else { + return Opal.find_super_dispatcher(self, 'new', TMP_1, $iter, $Struct).apply(self, $zuper) + }; + if (name['$[]'](0)['$=='](name['$[]'](0).$upcase())) { + return $scope.get('Struct').$const_set(name, ($a = self).$new.apply($a, Opal.to_a(args))) + } else { + args.$unshift(name); + return ($b = ($c = $scope.get('Class')).$new, $b.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, $b, TMP_3, $c; + + ($a = ($b = args).$each, $a.$$p = (TMP_3 = function(arg){var self = TMP_3.$$s || this; +if (arg == null) arg = nil; + return self.$define_struct_attribute(arg)}, TMP_3.$$s = self, TMP_3), $a).call($b); + if (block !== false && block !== nil) { + ($a = ($c = self).$class_eval, $a.$$p = block.$to_proc(), $a).call($c)}; + return (function(self) { + var $scope = self.$$scope, def = self.$$proto; + + Opal.defn(self, '$new', function() { + var $a, self = this, instance = nil, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + instance = self.$allocate(); + instance.$$data = {};; + ($a = instance).$initialize.apply($a, Opal.to_a(args)); + return instance; + }); + return Opal.alias(self, '[]', 'new'); + })(Opal.get_singleton_class(self));}, TMP_2.$$s = self, TMP_2), $b).call($c, self); + }; + }); + + Opal.defs(self, '$define_struct_attribute', function(name) { + var $a, $b, TMP_4, $c, TMP_5, self = this; + + if (self['$==']($scope.get('Struct'))) { + self.$raise($scope.get('ArgumentError'), "you cannot define attributes to the Struct class")}; + self.$members()['$<<'](name); + ($a = ($b = self).$define_method, $a.$$p = (TMP_4 = function(){var self = TMP_4.$$s || this; + + return self.$$data[name];}, TMP_4.$$s = self, TMP_4), $a).call($b, name); + return ($a = ($c = self).$define_method, $a.$$p = (TMP_5 = function(value){var self = TMP_5.$$s || this; +if (value == null) value = nil; + return self.$$data[name] = value;}, TMP_5.$$s = self, TMP_5), $a).call($c, "" + (name) + "="); + }); + + Opal.defs(self, '$members', function() { + var $a, self = this; + if (self.members == null) self.members = nil; + + if (self['$==']($scope.get('Struct'))) { + self.$raise($scope.get('ArgumentError'), "the Struct class has no members")}; + return ((($a = self.members) !== false && $a !== nil) ? $a : self.members = []); + }); + + Opal.defs(self, '$inherited', function(klass) { + var $a, $b, TMP_6, self = this, members = nil; + if (self.members == null) self.members = nil; + + members = self.members; + return ($a = ($b = klass).$instance_eval, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this; + + return self.members = members}, TMP_6.$$s = self, TMP_6), $a).call($b); + }); + + Opal.defn(self, '$initialize', function() { + var $a, $b, TMP_7, self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = ($b = self.$members()).$each_with_index, $a.$$p = (TMP_7 = function(name, index){var self = TMP_7.$$s || this; +if (name == null) name = nil;if (index == null) index = nil; + return self['$[]='](name, args['$[]'](index))}, TMP_7.$$s = self, TMP_7), $a).call($b); + }); + + Opal.defn(self, '$members', function() { + var self = this; + + return self.$class().$members(); + }); + + Opal.defn(self, '$hash', function() { + var self = this; + + return $scope.get('Hash').$new(self.$$data).$hash(); + }); + + Opal.defn(self, '$[]', function(name) { + var $a, self = this; + + if ((($a = $scope.get('Integer')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $rb_lt(name, self.$members().$size()['$-@']())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$members().$size()) + ")")}; + if ((($a = $rb_ge(name, self.$members().$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")}; + name = self.$members()['$[]'](name); + } else if ((($a = $scope.get('String')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + + if(!self.$$data.hasOwnProperty(name)) { + self.$raise($scope.get('NameError').$new("no member '" + (name) + "' in struct", name)) + } + ; + } else { + self.$raise($scope.get('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") + }; + name = $scope.get('Opal')['$coerce_to!'](name, $scope.get('String'), "to_str"); + return self.$$data[name]; + }); + + Opal.defn(self, '$[]=', function(name, value) { + var $a, self = this; + + if ((($a = $scope.get('Integer')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = $rb_lt(name, self.$members().$size()['$-@']())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$members().$size()) + ")")}; + if ((($a = $rb_ge(name, self.$members().$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")}; + name = self.$members()['$[]'](name); + } else if ((($a = $scope.get('String')['$==='](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self.$members()['$include?'](name.$to_sym())) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('NameError').$new("no member '" + (name) + "' in struct", name)) + } + } else { + self.$raise($scope.get('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") + }; + name = $scope.get('Opal')['$coerce_to!'](name, $scope.get('String'), "to_str"); + return self.$$data[name] = value; + }); + + Opal.defn(self, '$==', function(other) { + var $a, self = this; + + if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return false + }; + + var recursed1 = {}, recursed2 = {}; + + function _eqeq(struct, other) { + var key, a, b; + + recursed1[(struct).$__id__()] = true; + recursed2[(other).$__id__()] = true; + + for (key in struct.$$data) { + a = struct.$$data[key]; + b = other.$$data[key]; + + if ($scope.get('Struct')['$==='](a)) { + if (!recursed1.hasOwnProperty((a).$__id__()) || !recursed2.hasOwnProperty((b).$__id__())) { + if (!_eqeq(a, b)) { + return false; + } + } + } else { + if (!(a)['$=='](b)) { + return false; + } + } + } + + return true; + } + + return _eqeq(self, other); + ; + }); + + Opal.defn(self, '$eql?', function(other) { + var $a, self = this; + + if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return false + }; + + var recursed1 = {}, recursed2 = {}; + + function _eqeq(struct, other) { + var key, a, b; + + recursed1[(struct).$__id__()] = true; + recursed2[(other).$__id__()] = true; + + for (key in struct.$$data) { + a = struct.$$data[key]; + b = other.$$data[key]; + + if ($scope.get('Struct')['$==='](a)) { + if (!recursed1.hasOwnProperty((a).$__id__()) || !recursed2.hasOwnProperty((b).$__id__())) { + if (!_eqeq(a, b)) { + return false; + } + } + } else { + if (!(a)['$eql?'](b)) { + return false; + } + } + } + + return true; + } + + return _eqeq(self, other); + ; + }); + + Opal.defn(self, '$each', TMP_8 = function() { + var $a, $b, TMP_9, $c, TMP_10, self = this, $iter = TMP_8.$$p, $yield = $iter || nil; + + TMP_8.$$p = null; + if (($yield !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this; + + return self.$size()}, TMP_9.$$s = self, TMP_9), $a).call($b, "each") + }; + ($a = ($c = self.$members()).$each, $a.$$p = (TMP_10 = function(name){var self = TMP_10.$$s || this, $a; +if (name == null) name = nil; + return $a = Opal.yield1($yield, self['$[]'](name)), $a === $breaker ? $a : $a}, TMP_10.$$s = self, TMP_10), $a).call($c); + return self; + }); + + Opal.defn(self, '$each_pair', TMP_11 = function() { + var $a, $b, TMP_12, $c, TMP_13, self = this, $iter = TMP_11.$$p, $yield = $iter || nil; + + TMP_11.$$p = null; + if (($yield !== nil)) { + } else { + return ($a = ($b = self).$enum_for, $a.$$p = (TMP_12 = function(){var self = TMP_12.$$s || this; + + return self.$size()}, TMP_12.$$s = self, TMP_12), $a).call($b, "each_pair") + }; + ($a = ($c = self.$members()).$each, $a.$$p = (TMP_13 = function(name){var self = TMP_13.$$s || this, $a; +if (name == null) name = nil; + return $a = Opal.yield1($yield, [name, self['$[]'](name)]), $a === $breaker ? $a : $a}, TMP_13.$$s = self, TMP_13), $a).call($c); + return self; + }); + + Opal.defn(self, '$length', function() { + var self = this; + + return self.$members().$length(); + }); + + Opal.alias(self, 'size', 'length'); + + Opal.defn(self, '$to_a', function() { + var $a, $b, TMP_14, self = this; + + return ($a = ($b = self.$members()).$map, $a.$$p = (TMP_14 = function(name){var self = TMP_14.$$s || this; +if (name == null) name = nil; + return self['$[]'](name)}, TMP_14.$$s = self, TMP_14), $a).call($b); + }); + + Opal.alias(self, 'values', 'to_a'); + + Opal.defn(self, '$inspect', function() { + var $a, $b, TMP_15, self = this, result = nil; + + result = "#"); + return result; + }); + + Opal.alias(self, 'to_s', 'inspect'); + + Opal.defn(self, '$to_h', function() { + var $a, $b, TMP_16, self = this; + + return ($a = ($b = self.$members()).$inject, $a.$$p = (TMP_16 = function(h, name){var self = TMP_16.$$s || this; +if (h == null) h = nil;if (name == null) name = nil; + h['$[]='](name, self['$[]'](name)); + return h;}, TMP_16.$$s = self, TMP_16), $a).call($b, $hash2([], {})); + }); + + return (Opal.defn(self, '$values_at', function() { + var $a, $b, TMP_17, self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + args = ($a = ($b = args).$map, $a.$$p = (TMP_17 = function(arg){var self = TMP_17.$$s || this; +if (arg == null) arg = nil; + return arg.$$is_range ? arg.$to_a() : arg;}, TMP_17.$$s = self, TMP_17), $a).call($b).$flatten(); + + var result = []; + for (var i = 0, len = args.length; i < len; i++) { + if (!args[i].$$is_number) { + self.$raise($scope.get('TypeError'), "no implicit conversion of " + ((args[i]).$class()) + " into Integer") + } + result.push(self['$[]'](args[i])); + } + return result; + ; + }), nil) && 'values_at'; + })($scope.base, null); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/io"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var $a, $b, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module, $gvars = Opal.gvars; + + Opal.add_stubs(['$attr_accessor', '$size', '$write', '$join', '$map', '$String', '$empty?', '$concat', '$chomp', '$getbyte', '$getc', '$raise', '$new', '$write_proc=', '$extend']); + (function($base, $super) { + function $IO(){}; + var self = $IO = $klass($base, $super, 'IO', $IO); + + var def = self.$$proto, $scope = self.$$scope; + + def.tty = def.closed = nil; + Opal.cdecl($scope, 'SEEK_SET', 0); + + Opal.cdecl($scope, 'SEEK_CUR', 1); + + Opal.cdecl($scope, 'SEEK_END', 2); + + Opal.defn(self, '$tty?', function() { + var self = this; + + return self.tty; + }); + + Opal.defn(self, '$closed?', function() { + var self = this; + + return self.closed; + }); + + self.$attr_accessor("write_proc"); + + Opal.defn(self, '$write', function(string) { + var self = this; + + self.write_proc(string); + return string.$size(); + }); + + self.$attr_accessor("sync", "tty"); + + Opal.defn(self, '$flush', function() { + var self = this; + + return nil; + }); + + (function($base) { + var $Writable, self = $Writable = $module($base, 'Writable'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$<<', function(string) { + var self = this; + + self.$write(string); + return self; + }); + + Opal.defn(self, '$print', function() { + var $a, $b, TMP_1, self = this, $splat_index = nil; + if ($gvars[","] == null) $gvars[","] = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + self.$write(($a = ($b = args).$map, $a.$$p = (TMP_1 = function(arg){var self = TMP_1.$$s || this; +if (arg == null) arg = nil; + return self.$String(arg)}, TMP_1.$$s = self, TMP_1), $a).call($b).$join($gvars[","])); + return nil; + }); + + Opal.defn(self, '$puts', function() { + var $a, $b, TMP_2, self = this, newline = nil, $splat_index = nil; + if ($gvars["/"] == null) $gvars["/"] = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + newline = $gvars["/"]; + if ((($a = args['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$write($gvars["/"]) + } else { + self.$write(($a = ($b = args).$map, $a.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; +if (arg == null) arg = nil; + return self.$String(arg).$chomp()}, TMP_2.$$s = self, TMP_2), $a).call($b).$concat([nil]).$join(newline)) + }; + return nil; + }); + })($scope.base); + + return (function($base) { + var $Readable, self = $Readable = $module($base, 'Readable'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$readbyte', function() { + var self = this; + + return self.$getbyte(); + }); + + Opal.defn(self, '$readchar', function() { + var self = this; + + return self.$getc(); + }); + + Opal.defn(self, '$readline', function(sep) { + var self = this; + if ($gvars["/"] == null) $gvars["/"] = nil; + + if (sep == null) { + sep = $gvars["/"] + } + return self.$raise($scope.get('NotImplementedError')); + }); + + Opal.defn(self, '$readpartial', function(integer, outbuf) { + var self = this; + + if (outbuf == null) { + outbuf = nil + } + return self.$raise($scope.get('NotImplementedError')); + }); + })($scope.base); + })($scope.base, null); + Opal.cdecl($scope, 'STDERR', $gvars.stderr = $scope.get('IO').$new()); + Opal.cdecl($scope, 'STDIN', $gvars.stdin = $scope.get('IO').$new()); + Opal.cdecl($scope, 'STDOUT', $gvars.stdout = $scope.get('IO').$new()); + (($a = [typeof(process) === 'object' ? function(s){process.stdout.write(s)} : function(s){console.log(s)}]), $b = $scope.get('STDOUT'), $b['$write_proc='].apply($b, $a), $a[$a.length-1]); + (($a = [typeof(process) === 'object' ? function(s){process.stderr.write(s)} : function(s){console.warn(s)}]), $b = $scope.get('STDERR'), $b['$write_proc='].apply($b, $a), $a[$a.length-1]); + $scope.get('STDOUT').$extend((($scope.get('IO')).$$scope.get('Writable'))); + return $scope.get('STDERR').$extend((($scope.get('IO')).$$scope.get('Writable'))); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/main"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + + Opal.add_stubs(['$include']); + Opal.defs(self, '$to_s', function() { + var self = this; + + return "main"; + }); + return (Opal.defs(self, '$include', function(mod) { + var self = this; + + return $scope.get('Object').$include(mod); + }), nil) && 'include'; +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/dir"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + + Opal.add_stubs(['$[]']); + return (function($base, $super) { + function $Dir(){}; + var self = $Dir = $klass($base, $super, 'Dir', $Dir); + + var def = self.$$proto, $scope = self.$$scope; + + return (function(self) { + var $scope = self.$$scope, def = self.$$proto, TMP_1; + + Opal.defn(self, '$chdir', TMP_1 = function(dir) { + var $a, self = this, $iter = TMP_1.$$p, $yield = $iter || nil, prev_cwd = nil; + + TMP_1.$$p = null; + try { + prev_cwd = Opal.current_dir; + Opal.current_dir = dir; + return $a = Opal.yieldX($yield, []), $a === $breaker ? $a : $a; + } finally { + Opal.current_dir = prev_cwd; + }; + }); + Opal.defn(self, '$pwd', function() { + var self = this; + + return Opal.current_dir || '.'; + }); + Opal.alias(self, 'getwd', 'pwd'); + return (Opal.defn(self, '$home', function() { + var $a, self = this; + + return ((($a = $scope.get('ENV')['$[]']("HOME")) !== false && $a !== nil) ? $a : "."); + }), nil) && 'home'; + })(Opal.get_singleton_class(self)) + })($scope.base, null) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/file"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $range = Opal.range; + + Opal.add_stubs(['$join', '$compact', '$split', '$==', '$first', '$[]=', '$home', '$each', '$pop', '$<<', '$[]', '$gsub', '$find', '$=~']); + return (function($base, $super) { + function $File(){}; + var self = $File = $klass($base, $super, 'File', $File); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.cdecl($scope, 'Separator', Opal.cdecl($scope, 'SEPARATOR', "/")); + + Opal.cdecl($scope, 'ALT_SEPARATOR', nil); + + Opal.cdecl($scope, 'PATH_SEPARATOR', ":"); + + return (function(self) { + var $scope = self.$$scope, def = self.$$proto; + + Opal.defn(self, '$expand_path', function(path, basedir) { + var $a, $b, TMP_1, self = this, parts = nil, new_parts = nil; + + if (basedir == null) { + basedir = nil + } + path = [basedir, path].$compact().$join($scope.get('SEPARATOR')); + parts = path.$split($scope.get('SEPARATOR')); + new_parts = []; + if (parts.$first()['$==']("~")) { + parts['$[]='](0, $scope.get('Dir').$home())}; + ($a = ($b = parts).$each, $a.$$p = (TMP_1 = function(part){var self = TMP_1.$$s || this; +if (part == null) part = nil; + if (part['$==']("..")) { + return new_parts.$pop() } else { - result = "tLBRACK2" - }; - self.lex_state = "expr_beg"; - self.$cond_push(0); - self.$cmdarg_push(0); - return result; - } else if ((($b = self.$scan(/\]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$cond_lexpop(); - self.$cmdarg_lexpop(); - self.lex_state = "expr_end"; - return "tRBRACK"; - } else if ((($b = self.$scan(/\}/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$cond_lexpop(); - self.$cmdarg_lexpop(); - self.lex_state = "expr_end"; - return "tRCURLY"; - } else if ((($b = self.$scan(/\.\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tDOT3"; - } else if ((($b = self.$scan(/\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tDOT2"; - } else if ((($b = self.$scan(/\./)) !== nil && (!$b.$$is_boolean || $b == true))) { - if (self.lex_state['$==']("expr_fname")) { + return new_parts['$<<'](part) + }}, TMP_1.$$s = self, TMP_1), $a).call($b); + return new_parts.$join($scope.get('SEPARATOR')); + }); + Opal.alias(self, 'realpath', 'expand_path'); + Opal.defn(self, '$dirname', function(path) { + var self = this; + + return self.$split(path)['$[]']($range(0, -2, false)); + }); + Opal.defn(self, '$basename', function(path) { + var self = this; + + return self.$split(path)['$[]'](-1); + }); + Opal.defn(self, '$exist?', function(path) { + var self = this; + + return Opal.modules[path] != null; + }); + Opal.alias(self, 'exists?', 'exist?'); + Opal.defn(self, '$directory?', function(path) { + var $a, $b, TMP_2, self = this, files = nil, file = nil; + + files = []; + + for (var key in Opal.modules) { + files.push(key) + } + ; + path = path.$gsub((new RegExp("(^." + $scope.get('SEPARATOR') + "+|" + $scope.get('SEPARATOR') + "+$)"))); + file = ($a = ($b = files).$find, $a.$$p = (TMP_2 = function(file){var self = TMP_2.$$s || this; +if (file == null) file = nil; + return file['$=~']((new RegExp("^" + path)))}, TMP_2.$$s = self, TMP_2), $a).call($b); + return file; + }); + Opal.defn(self, '$join', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var paths = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + paths[$splat_index] = arguments[$splat_index + 0]; + } + return paths.$join($scope.get('SEPARATOR')).$gsub((new RegExp("" + $scope.get('SEPARATOR') + "+")), $scope.get('SEPARATOR')); + }); + return (Opal.defn(self, '$split', function(path) { + var self = this; + + return path.$split($scope.get('SEPARATOR')); + }), nil) && 'split'; + })(Opal.get_singleton_class(self)); + })($scope.base, $scope.get('IO')) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/process"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + + Opal.add_stubs(['$to_f', '$now', '$new']); + (function($base, $super) { + function $Process(){}; + var self = $Process = $klass($base, $super, 'Process', $Process); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.cdecl($scope, 'CLOCK_REALTIME', 0); + + Opal.cdecl($scope, 'CLOCK_MONOTONIC', 1); + + Opal.defs(self, '$pid', function() { + var self = this; + + return 0; + }); + + Opal.defs(self, '$times', function() { + var self = this, t = nil; + + t = $scope.get('Time').$now().$to_f(); + return (($scope.get('Benchmark')).$$scope.get('Tms')).$new(t, t, t, t, t); + }); + + return (Opal.defs(self, '$clock_gettime', function(clock_id, unit) { + var self = this; + + if (unit == null) { + unit = nil + } + return $scope.get('Time').$now().$to_f(); + }), nil) && 'clock_gettime'; + })($scope.base, null); + (function($base, $super) { + function $Signal(){}; + var self = $Signal = $klass($base, $super, 'Signal', $Signal); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defs(self, '$trap', function() { + var self = this; + + return nil; + }), nil) && 'trap' + })($scope.base, null); + return (function($base, $super) { + function $GC(){}; + var self = $GC = $klass($base, $super, 'GC', $GC); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defs(self, '$start', function() { + var self = this; + + return nil; + }), nil) && 'start' + })($scope.base, null); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["corelib/unsupported"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; + + Opal.add_stubs(['$warn', '$raise', '$%', '$module_function']); + + var warnings = {}; + + function warn(string) { + if (warnings[string]) { + return; + } + + warnings[string] = true; + self.$warn(string); + } + + (function($base, $super) { + function $String(){}; + var self = $String = $klass($base, $super, 'String', $String); + + var def = self.$$proto, $scope = self.$$scope; + + var ERROR = "String#%s not supported. Mutable String methods are not supported in Opal."; + + Opal.defn(self, '$<<', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("<<")); + }); + + Opal.defn(self, '$capitalize!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("capitalize!")); + }); + + Opal.defn(self, '$chomp!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("chomp!")); + }); + + Opal.defn(self, '$chop!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("chop!")); + }); + + Opal.defn(self, '$downcase!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("downcase!")); + }); + + Opal.defn(self, '$gsub!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("gsub!")); + }); + + Opal.defn(self, '$lstrip!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("lstrip!")); + }); + + Opal.defn(self, '$next!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("next!")); + }); + + Opal.defn(self, '$reverse!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("reverse!")); + }); + + Opal.defn(self, '$slice!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("slice!")); + }); + + Opal.defn(self, '$squeeze!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("squeeze!")); + }); + + Opal.defn(self, '$strip!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("strip!")); + }); + + Opal.defn(self, '$sub!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("sub!")); + }); + + Opal.defn(self, '$succ!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("succ!")); + }); + + Opal.defn(self, '$swapcase!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("swapcase!")); + }); + + Opal.defn(self, '$tr!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("tr!")); + }); + + Opal.defn(self, '$tr_s!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("tr_s!")); + }); + + return (Opal.defn(self, '$upcase!', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("upcase!")); + }), nil) && 'upcase!'; + })($scope.base, null); + (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); + + var def = self.$$proto, $scope = self.$$scope; + + var ERROR = "Object freezing is not supported by Opal"; + + Opal.defn(self, '$freeze', function() { + var $a, self = this; + + if ((($a = OPAL_CONFIG.freezing) !== nil && (!$a.$$is_boolean || $a == true))) { + warn(ERROR); + } else { + self.$raise($scope.get('NotImplementedError'), ERROR) + }; + return self; + }); + + Opal.defn(self, '$frozen?', function() { + var $a, self = this; + + if ((($a = OPAL_CONFIG.freezing) !== nil && (!$a.$$is_boolean || $a == true))) { + warn(ERROR); + } else { + self.$raise($scope.get('NotImplementedError'), ERROR) + }; + return false; + }); + })($scope.base); + (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); + + var def = self.$$proto, $scope = self.$$scope; + + var ERROR = "Object tainting is not supported by Opal"; + + Opal.defn(self, '$taint', function() { + var $a, self = this; + + if ((($a = OPAL_CONFIG.tainting) !== nil && (!$a.$$is_boolean || $a == true))) { + warn(ERROR); + } else { + self.$raise($scope.get('NotImplementedError'), ERROR) + }; + return self; + }); + + Opal.defn(self, '$untaint', function() { + var $a, self = this; + + if ((($a = OPAL_CONFIG.tainting) !== nil && (!$a.$$is_boolean || $a == true))) { + warn(ERROR); + } else { + self.$raise($scope.get('NotImplementedError'), ERROR) + }; + return self; + }); + + Opal.defn(self, '$tainted?', function() { + var $a, self = this; + + if ((($a = OPAL_CONFIG.tainting) !== nil && (!$a.$$is_boolean || $a == true))) { + warn(ERROR); + } else { + self.$raise($scope.get('NotImplementedError'), ERROR) + }; + return false; + }); + })($scope.base); + (function($base) { + var $Marshal, self = $Marshal = $module($base, 'Marshal'); + + var def = self.$$proto, $scope = self.$$scope; + + var ERROR = "Marshalling is not supported by Opal"; + + self.$module_function(); + + Opal.defn(self, '$dump', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), ERROR); + }); + + Opal.defn(self, '$load', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), ERROR); + }); + + Opal.defn(self, '$restore', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), ERROR); + }); + })($scope.base); + (function($base, $super) { + function $Module(){}; + var self = $Module = $klass($base, $super, 'Module', $Module); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$public', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var methods = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + methods[$splat_index] = arguments[$splat_index + 0]; + } + + if (methods.length === 0) { + self.$$module_function = false; + } + + return nil; + + }); + + Opal.alias(self, 'private', 'public'); + + Opal.alias(self, 'protected', 'public'); + + Opal.alias(self, 'nesting', 'public'); + + Opal.defn(self, '$private_class_method', function() { + var self = this; + + return self; + }); + + Opal.alias(self, 'public_class_method', 'private_class_method'); + + Opal.defn(self, '$private_method_defined?', function(obj) { + var self = this; + + return false; + }); + + Opal.defn(self, '$private_constant', function() { + var self = this; + + return nil; + }); + + Opal.alias(self, 'protected_method_defined?', 'private_method_defined?'); + + Opal.alias(self, 'public_instance_methods', 'instance_methods'); + + return Opal.alias(self, 'public_method_defined?', 'method_defined?'); + })($scope.base, null); + (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$private_methods', function() { + var self = this; + + return []; + }); + + Opal.alias(self, 'private_instance_methods', 'private_methods'); + })($scope.base); + return (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$eval', function() { + var self = this; + + return self.$raise($scope.get('NotImplementedError'), "To use Kernel#eval, you must first require 'opal-parser'. " + ("See https://github.com/opal/opal/blob/" + ($scope.get('RUBY_ENGINE_VERSION')) + "/docs/opal_parser.md for details.")); + }) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +(function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + + Opal.add_stubs(['$require']); + self.$require("opal/base"); + self.$require("opal/mini"); + self.$require("corelib/array/inheritance"); + self.$require("corelib/string/inheritance"); + self.$require("corelib/string/encoding"); + self.$require("corelib/math"); + self.$require("corelib/complex"); + self.$require("corelib/rational"); + self.$require("corelib/time"); + self.$require("corelib/struct"); + self.$require("corelib/io"); + self.$require("corelib/main"); + self.$require("corelib/dir"); + self.$require("corelib/file"); + self.$require("corelib/process"); + return self.$require("corelib/unsupported"); +})(Opal); + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + + Opal.add_stubs(['$require']); + self.$require("opal/base"); + self.$require("opal/mini"); + self.$require("corelib/array/inheritance"); + self.$require("corelib/string/inheritance"); + self.$require("corelib/string/encoding"); + self.$require("corelib/math"); + self.$require("corelib/complex"); + self.$require("corelib/rational"); + self.$require("corelib/time"); + self.$require("corelib/struct"); + self.$require("corelib/io"); + self.$require("corelib/main"); + self.$require("corelib/dir"); + self.$require("corelib/file"); + self.$require("corelib/process"); + return self.$require("corelib/unsupported"); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["json"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2, $klass = Opal.klass; + + Opal.add_stubs(['$new', '$push', '$[]=', '$[]', '$create_id', '$json_create', '$attr_accessor', '$create_id=', '$===', '$parse', '$generate', '$from_object', '$merge', '$to_json', '$responds_to?', '$to_io', '$write', '$to_s', '$to_a', '$strftime']); + (function($base) { + var $JSON, self = $JSON = $module($base, 'JSON'); + + var def = self.$$proto, $scope = self.$$scope, $a, $b; + + + var $parse = JSON.parse, + $hasOwn = Opal.hasOwnProperty; + + function to_opal(value, options) { + var klass, arr, hash, i, ii, k; + + switch (typeof value) { + case 'string': + return value; + + case 'number': + return value; + + case 'boolean': + return !!value; + + case 'null': + return nil; + + case 'object': + if (!value) return nil; + + if (value.$$is_array) { + arr = (options.array_class).$new(); + + for (i = 0, ii = value.length; i < ii; i++) { + (arr).$push(to_opal(value[i], options)); + } + + return arr; + } + else { + hash = (options.object_class).$new(); + + for (k in value) { + if ($hasOwn.call(value, k)) { + (hash)['$[]='](k, to_opal(value[k], options)); + } + } + + if (!options.parse && (klass = (hash)['$[]']($scope.get('JSON').$create_id())) != nil) { + klass = Opal.get(klass); + return (klass).$json_create(hash); + } + else { + return hash; + } + } + } + }; + + + (function(self) { + var $scope = self.$$scope, def = self.$$proto; + + return self.$attr_accessor("create_id") + })(Opal.get_singleton_class(self)); + + (($a = ["json_class"]), $b = self, $b['$create_id='].apply($b, $a), $a[$a.length-1]); + + Opal.defs(self, '$[]', function(value, options) { + var $a, self = this; + + if (options == null) { + options = $hash2([], {}) + } + if ((($a = $scope.get('String')['$==='](value)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$parse(value, options) + } else { + return self.$generate(value, options) + }; + }); + + Opal.defs(self, '$parse', function(source, options) { + var self = this; + + if (options == null) { + options = $hash2([], {}) + } + return self.$from_object($parse(source), options.$merge($hash2(["parse"], {"parse": true}))); + }); + + Opal.defs(self, '$parse!', function(source, options) { + var self = this; + + if (options == null) { + options = $hash2([], {}) + } + return self.$parse(source, options); + }); + + Opal.defs(self, '$load', function(source, options) { + var self = this; + + if (options == null) { + options = $hash2([], {}) + } + return self.$from_object($parse(source), options); + }); + + Opal.defs(self, '$from_object', function(js_object, options) { + var $a, $b, $c, self = this; + + if (options == null) { + options = $hash2([], {}) + } + ($a = "object_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.get('Hash')))); + ($a = "array_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.get('Array')))); + return to_opal(js_object, options.$$smap); + }); + + Opal.defs(self, '$generate', function(obj, options) { + var self = this; + + if (options == null) { + options = $hash2([], {}) + } + return obj.$to_json(options); + }); + + Opal.defs(self, '$dump', function(obj, io, limit) { + var $a, self = this, string = nil; + + if (io == null) { + io = nil + } + if (limit == null) { + limit = nil + } + string = self.$generate(obj); + if (io !== false && io !== nil) { + if ((($a = io['$responds_to?']("to_io")) !== nil && (!$a.$$is_boolean || $a == true))) { + io = io.$to_io()}; + io.$write(string); + return io; + } else { + return string + }; + }); + })($scope.base); + (function($base, $super) { + function $Object(){}; + var self = $Object = $klass($base, $super, 'Object', $Object); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + return self.$to_s().$to_json(); + }), nil) && 'to_json' + })($scope.base, null); + (function($base) { + var $Enumerable, self = $Enumerable = $module($base, 'Enumerable'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$to_json', function() { + var self = this; + + return self.$to_a().$to_json(); + }) + })($scope.base); + (function($base, $super) { + function $Array(){}; + var self = $Array = $klass($base, $super, 'Array', $Array); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + + var result = []; + + for (var i = 0, length = self.length; i < length; i++) { + result.push((self[i]).$to_json()); + } + + return '[' + result.join(', ') + ']'; + + }), nil) && 'to_json' + })($scope.base, null); + (function($base, $super) { + function $Boolean(){}; + var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + return (self == true) ? 'true' : 'false'; + }), nil) && 'to_json' + })($scope.base, null); + (function($base, $super) { + function $Hash(){}; + var self = $Hash = $klass($base, $super, 'Hash', $Hash); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + + var result = []; + + for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { + key = keys[i]; + + if (key.$$is_string) { + value = self.$$smap[key]; + } else { + value = key.value; + key = key.key; + } + + result.push((key).$to_s().$to_json() + ':' + (value).$to_json()); + } + + return '{' + result.join(', ') + '}'; + ; + }), nil) && 'to_json' + })($scope.base, null); + (function($base, $super) { + function $NilClass(){}; + var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + return "null"; + }), nil) && 'to_json' + })($scope.base, null); + (function($base, $super) { + function $Numeric(){}; + var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + return self.toString(); + }), nil) && 'to_json' + })($scope.base, null); + (function($base, $super) { + function $String(){}; + var self = $String = $klass($base, $super, 'String', $String); + + var def = self.$$proto, $scope = self.$$scope; + + return Opal.alias(self, 'to_json', 'inspect') + })($scope.base, null); + (function($base, $super) { + function $Time(){}; + var self = $Time = $klass($base, $super, 'Time', $Time); + + var def = self.$$proto, $scope = self.$$scope; + + return (Opal.defn(self, '$to_json', function() { + var self = this; + + return self.$strftime("%FT%T%z").$to_json(); + }), nil) && 'to_json' + })($scope.base, null); + return (function($base, $super) { + function $Date(){}; + var self = $Date = $klass($base, $super, 'Date', $Date); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$to_json', function() { + var self = this; + + return self.$to_s().$to_json(); + }); + + return (Opal.defn(self, '$as_json', function() { + var self = this; + + return self.$to_s(); + }), nil) && 'as_json'; + })($scope.base, null); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map/offset"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + + Opal.add_stubs(['$include', '$first', '$===', '$attr_reader', '$new', '$+', '$line', '$column', '$raise', '$class', '$-', '$zero?', '$==']); + return (function($base) { + var $SourceMap, self = $SourceMap = $module($base, 'SourceMap'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base, $super) { + function $Offset(){}; + var self = $Offset = $klass($base, $super, 'Offset', $Offset); + + var def = self.$$proto, $scope = self.$$scope, TMP_1; + + self.$include($scope.get('Comparable')); + + Opal.defs(self, '$new', TMP_1 = function() { + var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, $case = nil, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + TMP_1.$$p = null; + return (function() {$case = args.$first();if ($scope.get('Offset')['$===']($case)) {return args.$first()}else if ($scope.get('Array')['$===']($case)) {return Opal.find_super_dispatcher(self, 'new', TMP_1, null, $Offset).apply(self, Opal.to_a(args.$first()))}else {return Opal.find_super_dispatcher(self, 'new', TMP_1, null, $Offset).apply(self, Opal.to_a(args))}})(); + }); + + Opal.defn(self, '$initialize', function(line, column) { + var $a, self = this; + + return $a = [line, column], self.line = $a[0], self.column = $a[1], $a; + }); + + self.$attr_reader("line"); + + self.$attr_reader("column"); + + Opal.defn(self, '$+', function(other) { + var self = this, $case = nil; + + return (function() {$case = other;if ($scope.get('Offset')['$===']($case)) {return $scope.get('Offset').$new($rb_plus(self.$line(), other.$line()), $rb_plus(self.$column(), other.$column()))}else if ($scope.get('Integer')['$===']($case)) {return $scope.get('Offset').$new($rb_plus(self.$line(), other), self.$column())}else {return self.$raise($scope.get('ArgumentError'), "can't convert " + (other) + " into " + (self.$class()))}})(); + }); + + Opal.defn(self, '$<=>', function(other) { + var $a, self = this, $case = nil, diff = nil; + + return (function() {$case = other;if ($scope.get('Offset')['$===']($case)) {diff = $rb_minus(self.$line(), other.$line()); + if ((($a = diff['$zero?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_minus(self.$column(), other.$column()) + } else { + return diff + };}else {return self.$raise($scope.get('ArgumentError'), "can't convert " + (other.$class()) + " into " + (self.$class()))}})(); + }); + + Opal.defn(self, '$to_s', function() { + var self = this; + + if (self.$column()['$=='](0)) { + return "" + (self.$line()) + } else { + return "" + (self.$line()) + ":" + (self.$column()) + }; + }); + + return (Opal.defn(self, '$inspect', function() { + var self = this; + + return "#<" + (self.$class()) + " line=" + (self.$line()) + ", column=" + (self.$column()) + ">"; + }), nil) && 'inspect'; + })($scope.base, null) + })($scope.base) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map/mapping"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + + Opal.add_stubs(['$require', '$line', '$generated', '$column', '$<<', '$source', '$original', '$name', '$class', '$inspect', '$new']); + self.$require("source_map/offset"); + return (function($base) { + var $SourceMap, self = $SourceMap = $module($base, 'SourceMap'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base, $super) { + function $Mapping(){}; + var self = $Mapping = $klass($base, $super, 'Mapping', $Mapping); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$to_s', function() { + var $a, self = this, str = nil; + + str = "" + (self.$generated().$line()) + ":" + (self.$generated().$column()); + str['$<<']("->" + (self.$source()) + "@" + (self.$original().$line()) + ":" + (self.$original().$column())); + if ((($a = self.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { + str['$<<']("#" + (self.$name()))}; + return str; + }); + + return (Opal.defn(self, '$inspect', function() { + var $a, self = this, str = nil; + + str = "#<" + (self.$class()) + " source=" + (self.$source().$inspect()); + str['$<<'](" generated=" + (self.$generated()) + ", original=" + (self.$original())); + if ((($a = self.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { + str['$<<'](" name=" + (self.$name().$inspect()))}; + str['$<<'](">"); + return str; + }), nil) && 'inspect'; + })($scope.base, $scope.get('Struct').$new("source", "generated", "original", "name")) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map/vlq"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $range = Opal.range, $hash2 = Opal.hash2; + + Opal.add_stubs(['$<<', '$-', '$split', '$inject', '$[]=', '$[]', '$each', '$<', '$+', '$-@', '$>', '$&', '$>>', '$|', '$join', '$any?', '$shift', '$raise', '$==', '$map', '$encode', '$each_with_index', '$decode']); + return (function($base) { + var $SourceMap, self = $SourceMap = $module($base, 'SourceMap'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base) { + var $VLQ, self = $VLQ = $module($base, 'VLQ'); + + var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1; + + Opal.cdecl($scope, 'VLQ_BASE_SHIFT', 5); + + Opal.cdecl($scope, 'VLQ_BASE', (1)['$<<']($scope.get('VLQ_BASE_SHIFT'))); + + Opal.cdecl($scope, 'VLQ_BASE_MASK', $rb_minus($scope.get('VLQ_BASE'), 1)); + + Opal.cdecl($scope, 'VLQ_CONTINUATION_BIT', $scope.get('VLQ_BASE')); + + Opal.cdecl($scope, 'BASE64_DIGITS', "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".$split("")); + + Opal.cdecl($scope, 'BASE64_VALUES', ($a = ($b = ($range(0, 64, true))).$inject, $a.$$p = (TMP_1 = function(h, i){var self = TMP_1.$$s || this; +if (h == null) h = nil;if (i == null) i = nil; + h['$[]=']($scope.get('BASE64_DIGITS')['$[]'](i), i); + return h;}, TMP_1.$$s = self, TMP_1), $a).call($b, $hash2([], {}))); + + Opal.defs(self, '$encode', function(ary) { + var $a, $b, TMP_2, self = this, result = nil; + + result = []; + ($a = ($b = ary).$each, $a.$$p = (TMP_2 = function(n){var self = TMP_2.$$s || this, $a, $b, vlq = nil, digit = nil; +if (n == null) n = nil; + vlq = (function() {if ((($a = $rb_lt(n, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_plus(((n['$-@']())['$<<'](1)), 1) } else { - self.lex_state = "expr_dot" - }; - return "tDOT"; - } else if ((($b = self.$scan(/\:\:/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tCOLON3"; - } else if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tCOLON3";}; - self.lex_state = "expr_dot"; - return "tCOLON2"; - } else if ((($b = self.$scan(/\:/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = ((($c = self['$end?']()) !== false && $c !== nil) ? $c : self.$check(/\s/))) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$check(/\w/)) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - self.lex_state = "expr_beg"; - return "tCOLON"; - }; - self.lex_state = "expr_fname"; - return "tSYMBEG";}; - if ((($b = self.$scan(/\'/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_SSYM'), "'", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]) - } else if ((($b = self.$scan(/\"/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [self.$new_strterm($scope.get('STR_DSYM'), "\"", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1])}; - self.lex_state = "expr_fname"; - return "tSYMBEG"; - } else if ((($b = self.$scan(/\^\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn("^"); - } else if ((($b = self.$scan(/\^/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tCARET"; - } else if ((($b = self.$check(/\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg" + return n['$<<'](1) + }; return nil; })(); + while ((($b = $rb_gt(vlq, 0)) !== nil && (!$b.$$is_boolean || $b == true))) { + digit = vlq['$&']($scope.get('VLQ_BASE_MASK')); + vlq = vlq['$>>']($scope.get('VLQ_BASE_SHIFT')); + if ((($b = $rb_gt(vlq, 0)) !== nil && (!$b.$$is_boolean || $b == true))) { + digit = digit['$|']($scope.get('VLQ_CONTINUATION_BIT'))}; + result['$<<']($scope.get('BASE64_DIGITS')['$[]'](digit));};}, TMP_2.$$s = self, TMP_2), $a).call($b); + return result.$join(); + }); + + Opal.defs(self, '$decode', function(str) { + var $a, $b, self = this, result = nil, chars = nil, vlq = nil, shift = nil, continuation = nil, char$ = nil, digit = nil; + + result = []; + chars = str.$split(""); + while ((($b = chars['$any?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + vlq = 0; + shift = 0; + continuation = true; + while (continuation !== false && continuation !== nil) { + char$ = chars.$shift(); + if (char$ !== false && char$ !== nil) { + } else { + self.$raise($scope.get('ArgumentError')) + }; + digit = $scope.get('BASE64_VALUES')['$[]'](char$); + if ((digit['$&']($scope.get('VLQ_CONTINUATION_BIT')))['$=='](0)) { + continuation = false}; + digit = digit['$&']($scope.get('VLQ_BASE_MASK')); + vlq = $rb_plus(vlq, digit['$<<'](shift)); + shift = $rb_plus(shift, $scope.get('VLQ_BASE_SHIFT'));}; + result['$<<'](((function() {if (vlq['$&'](1)['$=='](1)) { + return (vlq['$>>'](1))['$-@']() + } else { + return vlq['$>>'](1) + }; return nil; })()));}; + return result; + }); + + Opal.defs(self, '$encode_mappings', function(ary) { + var $a, $b, TMP_3, self = this; + + return ($a = ($b = ary).$map, $a.$$p = (TMP_3 = function(group){var self = TMP_3.$$s || this, $a, $b, TMP_4; +if (group == null) group = nil; + return ($a = ($b = group).$map, $a.$$p = (TMP_4 = function(segment){var self = TMP_4.$$s || this; +if (segment == null) segment = nil; + return self.$encode(segment)}, TMP_4.$$s = self, TMP_4), $a).call($b).$join(",")}, TMP_3.$$s = self, TMP_3), $a).call($b).$join(";"); + }); + + Opal.defs(self, '$decode_mappings', function(str) { + var $a, $b, TMP_5, self = this, mappings = nil; + + mappings = []; + ($a = ($b = str.$split(";")).$each_with_index, $a.$$p = (TMP_5 = function(group, index){var self = TMP_5.$$s || this, $a, $b, TMP_6; +if (group == null) group = nil;if (index == null) index = nil; + mappings['$[]='](index, []); + return ($a = ($b = group.$split(",")).$each, $a.$$p = (TMP_6 = function(segment){var self = TMP_6.$$s || this; +if (segment == null) segment = nil; + return mappings['$[]'](index)['$<<'](self.$decode(segment))}, TMP_6.$$s = self, TMP_6), $a).call($b);}, TMP_5.$$s = self, TMP_5), $a).call($b); + return mappings; + }); + })($scope.base) + })($scope.base) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map/map"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_ge(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + } + function $rb_divide(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs / rhs : lhs['$/'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; + + Opal.add_stubs(['$require', '$include', '$from_hash', '$parse', '$[]', '$decode_vlq_mappings', '$new', '$each_with_index', '$+', '$each', '$>=', '$size', '$<<', '$decode_mappings', '$attr_reader', '$to_proc', '$build_vlq_string', '$compact', '$uniq', '$map', '$eql?', '$is_a?', '$class', '$==', '$mappings', '$filename', '$dup', '$any?', '$line', '$generated', '$last', '$source', '$original', '$name', '$empty?', '$bsearch', '$/', '$>', '$<', '$-', '$to_s', '$sources', '$names', '$inspect', '$protected', '$group_by', '$to_a', '$column', '$max', '$keys', '$encode_mappings']); + self.$require("json"); + self.$require("source_map/offset"); + self.$require("source_map/mapping"); + self.$require("source_map/vlq"); + return (function($base) { + var $SourceMap, self = $SourceMap = $module($base, 'SourceMap'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base, $super) { + function $Map(){}; + var self = $Map = $klass($base, $super, 'Map', $Map); + + var def = self.$$proto, $scope = self.$$scope, TMP_3; + + def.mappings = def.string = def.sources = def.names = nil; + self.$include($scope.get('Enumerable')); + + Opal.defs(self, '$from_json', function(json) { + var self = this; + + return self.$from_hash($scope.get('JSON').$parse(json)); + }); + + Opal.defs(self, '$from_hash', function(hash) { + var self = this, str = nil, sources = nil, names = nil, mappings = nil; + + str = hash['$[]']("mappings"); + sources = hash['$[]']("sources"); + names = hash['$[]']("names"); + mappings = self.$decode_vlq_mappings(str, sources, names); + return self.$new(mappings, hash['$[]']("file")); + }); + + Opal.defs(self, '$decode_vlq_mappings', function(str, sources, names) { + var $a, $b, TMP_1, self = this, mappings = nil, source_id = nil, original_line = nil, original_column = nil, name_id = nil; + + if (sources == null) { + sources = [] + } + if (names == null) { + names = [] + } + mappings = []; + source_id = 0; + original_line = 1; + original_column = 0; + name_id = 0; + ($a = ($b = $scope.get('VLQ').$decode_mappings(str)).$each_with_index, $a.$$p = (TMP_1 = function(group, index){var self = TMP_1.$$s || this, $a, $b, TMP_2, generated_column = nil, generated_line = nil; +if (group == null) group = nil;if (index == null) index = nil; + generated_column = 0; + generated_line = $rb_plus(index, 1); + return ($a = ($b = group).$each, $a.$$p = (TMP_2 = function(segment){var self = TMP_2.$$s || this, $a, generated = nil, source = nil, original = nil, name = nil; +if (segment == null) segment = nil; + generated_column = $rb_plus(generated_column, segment['$[]'](0)); + generated = $scope.get('Offset').$new(generated_line, generated_column); + if ((($a = $rb_ge(segment.$size(), 4)) !== nil && (!$a.$$is_boolean || $a == true))) { + source_id = $rb_plus(source_id, segment['$[]'](1)); + original_line = $rb_plus(original_line, segment['$[]'](2)); + original_column = $rb_plus(original_column, segment['$[]'](3)); + source = sources['$[]'](source_id); + original = $scope.get('Offset').$new(original_line, original_column); } else { - if (self.lex_state['$==']("expr_class")) { - cmd_start = true}; - self.lex_state = "expr_beg"; + return nil; }; - return "tCMP"; - } else if ((($b = self.$scan(/\<\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tLEQ"; - } else if ((($b = self.$scan(/\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\>\>\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$new_op_asgn(">>") - } else if ((($b = self.$scan(/\>\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tRSHFT"; - } else if ((($b = self.$scan(/\>\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tGEQ"; - } else if ((($b = self.$scan(/\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tGT";} - } else if ((($b = self.$scan(/->/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - self.start_of_lambda = true; - return "tLAMBDA"; - } else if ((($b = self.$scan(/[+-]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - matched = self.$scanner().$matched(); - $b = Opal.to_ary((function() {if (matched['$==']("+")) { - return ["tPLUS", "tUPLUS"] + if ((($a = segment['$[]'](4)) !== nil && (!$a.$$is_boolean || $a == true))) { + name_id = $rb_plus(name_id, segment['$[]'](4)); + name = names['$[]'](name_id);}; + return mappings['$<<']($scope.get('Mapping').$new(source, generated, original, name));}, TMP_2.$$s = self, TMP_2), $a).call($b);}, TMP_1.$$s = self, TMP_1), $a).call($b); + return mappings; + }); + + Opal.defn(self, '$initialize', function(mappings, filename) { + var $a, self = this; + + if (mappings == null) { + mappings = [] + } + if (filename == null) { + filename = nil + } + return $a = [mappings, filename], self.mappings = $a[0], self.filename = $a[1], $a; + }); + + self.$attr_reader("filename"); + + Opal.defn(self, '$size', function() { + var self = this; + + return self.mappings.$size(); + }); + + Opal.defn(self, '$[]', function(i) { + var self = this; + + return self.mappings['$[]'](i); + }); + + Opal.defn(self, '$each', TMP_3 = function() { + var $a, $b, self = this, $iter = TMP_3.$$p, block = $iter || nil; + + TMP_3.$$p = null; + return ($a = ($b = self.mappings).$each, $a.$$p = block.$to_proc(), $a).call($b); + }); + + Opal.defn(self, '$to_s', function() { + var $a, self = this; + + return ((($a = self.string) !== false && $a !== nil) ? $a : self.string = self.$build_vlq_string()); + }); + + Opal.defn(self, '$sources', function() { + var $a, $b, $c, self = this; + + return ((($a = self.sources) !== false && $a !== nil) ? $a : self.sources = ($b = ($c = self.mappings).$map, $b.$$p = "source".$to_proc(), $b).call($c).$uniq().$compact()); + }); + + Opal.defn(self, '$names', function() { + var $a, $b, $c, self = this; + + return ((($a = self.names) !== false && $a !== nil) ? $a : self.names = ($b = ($c = self.mappings).$map, $b.$$p = "name".$to_proc(), $b).call($c).$uniq().$compact()); + }); + + Opal.defn(self, '$==', function(other) { + var self = this; + + return self['$eql?'](other); + }); + + Opal.defn(self, '$eql?', function(other) { + var $a, $b, self = this; + + return ($a = ($b = other['$is_a?'](self.$class()), $b !== false && $b !== nil ?self.$mappings()['$=='](other.$mappings()) : $b), $a !== false && $a !== nil ?self.$filename()['$=='](other.$filename()) : $a); + }); + + Opal.defn(self, '$+', function(other) { + var $a, $b, TMP_4, self = this, mappings = nil, offset = nil; + + mappings = self.mappings.$dup(); + offset = (function() {if ((($a = self.mappings['$any?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_plus(self.mappings.$last().$generated().$line(), 1) + } else { + return 0 + }; return nil; })(); + ($a = ($b = other).$each, $a.$$p = (TMP_4 = function(m){var self = TMP_4.$$s || this; +if (m == null) m = nil; + return mappings['$<<']($scope.get('Mapping').$new(m.$source(), $rb_plus(m.$generated(), offset), m.$original(), m.$name()))}, TMP_4.$$s = self, TMP_4), $a).call($b); + return self.$class().$new(mappings, other.$filename()); + }); + + Opal.defn(self, '$|', function(other) { + var $a, $b, TMP_5, self = this, mappings = nil; + + if ((($a = self.$mappings()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return other.$dup()}; + mappings = []; + ($a = ($b = other).$each, $a.$$p = (TMP_5 = function(m){var self = TMP_5.$$s || this, om = nil; +if (m == null) m = nil; + om = self.$bsearch(m.$original()); + if (om !== false && om !== nil) { } else { - return ["tMINUS", "tUMINUS"] - }; return nil; })()), sign = ($b[0] == null ? nil : $b[0]), utype = ($b[1] == null ? nil : $b[1]); - if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_mid"; - (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - if ((($b = ($c = self.$scanner().$peek(1)['$=~'](/\d/), $c !== false && $c !== nil ?Opal.ret((function() {if (utype['$==']("tUMINUS")) { - return "-@NUM" - } else { - return "+@NUM" - }; return nil; })()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - return utype - }; - } else if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_arg"; - if ((($b = self.$scan(/@/)) !== nil && (!$b.$$is_boolean || $b == true))) { - (($b = [$rb_plus(matched, "@")]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return "tIDENTIFIER";}; - (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return sign;}; - if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return self.$new_op_asgn(matched);}; - if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_mid"; - (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return utype;}; - self.lex_state = "expr_beg"; - (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return sign; - } else if ((($b = self.$scan(/\?/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self['$end?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tEH";}; - if ((($b = self.$check(/\ |\t|\r|\s/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tEH"; - } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - (($b = [self.$read_escape()]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return "tSTRING";}; - self.lex_state = "expr_end"; - (($b = [self.$scan(/./)]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return "tSTRING"; - } else if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$set_arg_state(); - return "tTILDE"; - } else if ((($b = self.$check(/\$/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.$scan(/\$([1-9]\d*)/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - (($b = [self.$scanner().$matched().$sub("$", "")]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return "tNTH_REF"; - } else if ((($b = self.$scan(/(\$_)(\w+)/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tGVAR"; - } else if ((($b = self.$scan(/\$[\+\'\`\&!@\"~*$?\/\\:;=.,<>_]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tGVAR"; - } else if ((($b = self.$scan(/\$\w+/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tGVAR"; + return nil; + }; + return mappings['$<<']($scope.get('Mapping').$new(om.$source(), m.$generated(), om.$original(), om.$name()));}, TMP_5.$$s = self, TMP_5), $a).call($b); + return self.$class().$new(mappings, other.$filename()); + }); + + Opal.defn(self, '$bsearch', function(offset, from, to) { + var $a, self = this, mid = nil; + + if (from == null) { + from = 0 + } + if (to == null) { + to = $rb_minus(self.$size(), 1) + } + mid = $rb_divide(($rb_plus(from, to)), 2); + if ((($a = $rb_gt(from, to)) !== nil && (!$a.$$is_boolean || $a == true))) { + return (function() {if ((($a = $rb_lt(from, 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil } else { - self.$raise("Bad gvar name: " + (self.$scanner().$peek(5).$inspect())) - } - } else if ((($b = self.$scan(/\$\w+/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tGVAR"; - } else if ((($b = self.$scan(/\@\@\w*/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tCVAR"; - } else if ((($b = self.$scan(/\@\w*/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_end"; - return "tIVAR"; - } else if ((($b = self.$scan(/\,/)) !== nil && (!$b.$$is_boolean || $b == true))) { - self.lex_state = "expr_beg"; - return "tCOMMA"; - } else if ((($b = self.$scan(/\{/)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = self.start_of_lambda) !== nil && (!$b.$$is_boolean || $b == true))) { - self.start_of_lambda = false; - self.lex_state = "expr_beg"; - return "tLAMBEG"; - } else if ((($b = ((($c = self['$arg?']()) !== false && $c !== nil) ? $c : self.lex_state['$==']("expr_end"))) !== nil && (!$b.$$is_boolean || $b == true))) { - result = "tLCURLY" - } else if (self.lex_state['$==']("expr_endarg")) { - result = "LBRACE_ARG" + return self['$[]']($rb_minus(from, 1)) + }; return nil; })()}; + if (offset['$=='](self['$[]'](mid).$generated())) { + return self['$[]'](mid) + } else if ((($a = $rb_lt(offset, self['$[]'](mid).$generated())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$bsearch(offset, from, $rb_minus(mid, 1)) + } else if ((($a = $rb_gt(offset, self['$[]'](mid).$generated())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$bsearch(offset, $rb_plus(mid, 1), to) + } else { + return nil + }; + }); + + Opal.defn(self, '$as_json', function() { + var self = this; + + return $hash2(["version", "file", "mappings", "sources", "names"], {"version": 3, "file": self.$filename(), "mappings": self.$to_s(), "sources": self.$sources(), "names": self.$names()}); + }); + + Opal.defn(self, '$inspect', function() { + var $a, $b, self = this, str = nil; + + str = "#<" + (self.$class()); + if ((($a = self.$filename()) !== nil && (!$a.$$is_boolean || $a == true))) { + str['$<<'](" filename=" + (self.$filename().$inspect()))}; + if ((($a = self.$mappings()['$any?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + str['$<<'](" mappings=" + (($a = ($b = self.$mappings()).$map, $a.$$p = "to_s".$to_proc(), $a).call($b).$inspect()))}; + str['$<<'](">"); + return str; + }); + + self.$protected(); + + self.$attr_reader("mappings"); + + return (Opal.defn(self, '$build_vlq_string', function() { + var $a, $b, TMP_6, $c, TMP_7, $d, self = this, source_id = nil, source_line = nil, source_column = nil, name_id = nil, by_lines = nil, sources_index = nil, names_index = nil, ary = nil; + + source_id = 0; + source_line = 1; + source_column = 0; + name_id = 0; + by_lines = ($a = ($b = self.mappings).$group_by, $a.$$p = (TMP_6 = function(m){var self = TMP_6.$$s || this; +if (m == null) m = nil; + return m.$generated().$line()}, TMP_6.$$s = self, TMP_6), $a).call($b); + sources_index = $scope.get('Hash')['$[]'](self.$sources().$each_with_index().$to_a()); + names_index = $scope.get('Hash')['$[]'](self.$names().$each_with_index().$to_a()); + ary = ($a = ($c = ($range(1, (((($d = by_lines.$keys().$max()) !== false && $d !== nil) ? $d : 1)), false))).$map, $a.$$p = (TMP_7 = function(line){var self = TMP_7.$$s || this, $a, $b, TMP_8, $c, generated_column = nil; +if (line == null) line = nil; + generated_column = 0; + return ($a = ($b = (((($c = by_lines['$[]'](line)) !== false && $c !== nil) ? $c : []))).$map, $a.$$p = (TMP_8 = function(mapping){var self = TMP_8.$$s || this, $a, group = nil; +if (mapping == null) mapping = nil; + group = []; + group['$<<']($rb_minus(mapping.$generated().$column(), generated_column)); + group['$<<']($rb_minus(sources_index['$[]'](mapping.$source()), source_id)); + group['$<<']($rb_minus(mapping.$original().$line(), source_line)); + group['$<<']($rb_minus(mapping.$original().$column(), source_column)); + if ((($a = mapping.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { + group['$<<']($rb_minus(names_index['$[]'](mapping.$name()), name_id))}; + generated_column = mapping.$generated().$column(); + source_id = sources_index['$[]'](mapping.$source()); + source_line = mapping.$original().$line(); + source_column = mapping.$original().$column(); + if ((($a = mapping.$name()) !== nil && (!$a.$$is_boolean || $a == true))) { + name_id = names_index['$[]'](mapping.$name())}; + return group;}, TMP_8.$$s = self, TMP_8), $a).call($b);}, TMP_7.$$s = self, TMP_7), $a).call($c); + return $scope.get('VLQ').$encode_mappings(ary); + }), nil) && 'build_vlq_string'; + })($scope.base, null) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map/version"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + + return (function($base) { + var $SourceMap, self = $SourceMap = $module($base, 'SourceMap'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.cdecl($scope, 'VERSION', "0.0.2") + })($scope.base) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["source_map"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + + Opal.add_stubs(['$require']); + self.$require("source_map/map"); + self.$require("source_map/mapping"); + self.$require("source_map/offset"); + self.$require("source_map/version"); + return self.$require("source_map/vlq"); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/source_map"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + + Opal.add_stubs(['$require', '$attr_reader', '$+', '$file', '$map', '$line', '$column', '$code', '$new', '$count', '$>', '$-', '$size', '$rindex', '$any?', '$compact', '$as_json', '$to_s']); + self.$require("source_map"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base, $super) { + function $SourceMap(){}; + var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); + + var def = self.$$proto, $scope = self.$$scope; + + def.map = def.fragments = nil; + self.$attr_reader("fragments"); + + self.$attr_reader("file"); + + Opal.defn(self, '$initialize', function(fragments, file) { + var self = this; + + self.fragments = fragments; + return self.file = file; + }); + + Opal.defn(self, '$map', function() { + var $a, $b, $c, TMP_1, self = this, source_file = nil, generated_line = nil, generated_column = nil, mappings = nil, zero_offset = nil; + + return ((($a = self.map) !== false && $a !== nil) ? $a : self.map = (function() {source_file = $rb_plus(self.$file(), ".rb"); + $b = [1, 0], generated_line = $b[0], generated_column = $b[1], $b; + mappings = ($b = ($c = self.fragments).$map, $b.$$p = (TMP_1 = function(fragment){var self = TMP_1.$$s || this, $a, $b, mapping = nil, source_line = nil, source_column = nil, source_code = nil, source_offset = nil, generated_offset = nil, new_lines = nil; +if (fragment == null) fragment = nil; + mapping = nil; + source_line = fragment.$line(); + source_column = fragment.$column(); + source_code = fragment.$code(); + if ((($a = (($b = source_line !== false && source_line !== nil) ? source_column : source_line)) !== nil && (!$a.$$is_boolean || $a == true))) { + source_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(source_line, source_column); + generated_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(generated_line, generated_column); + mapping = ((Opal.get('SourceMap')).$$scope.get('Mapping')).$new(source_file, generated_offset, source_offset);}; + new_lines = source_code.$count("\n"); + generated_line = $rb_plus(generated_line, new_lines); + if ((($a = $rb_gt(new_lines, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + generated_column = $rb_minus(source_code.$size(), ($rb_plus(source_code.$rindex("\n"), 1))) } else { - result = "tLBRACE" + generated_column = $rb_plus(generated_column, source_code.$size()) }; - self.lex_state = "expr_beg"; - self.$cond_push(0); - self.$cmdarg_push(0); - return result; - } else if ((($b = ($c = self.$scanner()['$bol?'](), $c !== false && $c !== nil ?self.$skip(/\__END__(\n|$)/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - while ((($c = true) !== nil && (!$c.$$is_boolean || $c == true))) { - if ((($c = self.$scanner()['$eos?']()) !== nil && (!$c.$$is_boolean || $c == true))) { - self.eof_content = self.$yylval(); - return false;}; - self.$scan(/(.*)/); - self.$scan(/\n/);} - } else if ((($b = self.$check(/[0-9]/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$process_numeric() - } else if ((($b = self.$scan(/(\w)+[\?\!]?/)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$process_identifier(self.$scanner().$matched(), cmd_start)}; - if ((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - if (self.scanner_stack.$size()['$=='](1)) { - (($b = [false]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); - return false; - } else { - self.scanner_stack.$pop(); - self.scanner = self.scanner_stack.$last(); - return self.$yylex(); - }}; - self.$raise("Unexpected content in parsing stream `" + (self.$scanner().$peek(5)) + "` :" + (self.file) + ":" + (self.line));}; - } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } - }, nil) && 'yylex'; - })(self, null) - })(self); + return mapping;}, TMP_1.$$s = self, TMP_1), $b).call($c); + if ((($b = mappings['$any?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + zero_offset = ((Opal.get('SourceMap')).$$scope.get('Offset')).$new(0, 0); + mappings = [((Opal.get('SourceMap')).$$scope.get('Mapping')).$new(source_file, zero_offset, zero_offset)]; + }; + return ((Opal.get('SourceMap')).$$scope.get('Map')).$new(mappings.$compact());})()); + }); + + Opal.defn(self, '$as_json', function() { + var self = this; + + return self.$map().$as_json(); + }); + + Opal.defn(self, '$to_s', function() { + var self = this; + + return self.$map().$to_s(); + }); + + return (Opal.defn(self, '$magic_comment', function(map_path) { + var self = this; + + return "\n//# sourceMappingURL=file://" + (map_path); + }), nil) && 'magic_comment'; + })($scope.base, null) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal-source-maps"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + + Opal.add_stubs(['$require']); + self.$require("source_map"); + return self.$require("opal/source_map"); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["set"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_le(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs <= rhs : lhs['$<='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; + + Opal.add_stubs(['$include', '$new', '$nil?', '$===', '$raise', '$each', '$add', '$call', '$merge', '$class', '$respond_to?', '$subtract', '$dup', '$join', '$to_a', '$equal?', '$instance_of?', '$==', '$instance_variable_get', '$is_a?', '$size', '$all?', '$include?', '$[]=', '$enum_for', '$[]', '$<<', '$replace', '$delete', '$select', '$each_key', '$to_proc', '$empty?', '$eql?', '$instance_eval', '$clear', '$<', '$<=', '$keys']); + (function($base, $super) { + function $Set(){}; + var self = $Set = $klass($base, $super, 'Set', $Set); + + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_4, TMP_7, TMP_9, TMP_12; + + def.hash = nil; + self.$include($scope.get('Enumerable')); + + Opal.defs(self, '$[]', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var ary = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + ary[$splat_index] = arguments[$splat_index + 0]; + } + return self.$new(ary); + }); + + Opal.defn(self, '$initialize', TMP_1 = function(enum$) { + var $a, $b, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil; + + if (enum$ == null) { + enum$ = nil + } + TMP_1.$$p = null; + self.hash = $scope.get('Hash').$new(); + if ((($a = enum$['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + if ((($a = $scope.get('Enumerable')['$==='](enum$)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError'), "value must be enumerable") + }; + if (block !== false && block !== nil) { + return ($a = ($b = enum$).$each, $a.$$p = (TMP_2 = function(item){var self = TMP_2.$$s || this; +if (item == null) item = nil; + return self.$add(block.$call(item))}, TMP_2.$$s = self, TMP_2), $a).call($b) + } else { + return self.$merge(enum$) + }; + }); + + Opal.defn(self, '$dup', function() { + var self = this, result = nil; + + result = self.$class().$new(); + return result.$merge(self); + }); + + Opal.defn(self, '$-', function(enum$) { + var $a, self = this; + + if ((($a = enum$['$respond_to?']("each")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError'), "value must be enumerable") + }; + return self.$dup().$subtract(enum$); + }); + + Opal.alias(self, 'difference', '-'); + + Opal.defn(self, '$inspect', function() { + var self = this; + + return "#"; + }); + + Opal.defn(self, '$==', function(other) { + var $a, $b, TMP_3, self = this; + + if ((($a = self['$equal?'](other)) !== nil && (!$a.$$is_boolean || $a == true))) { + return true + } else if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.hash['$=='](other.$instance_variable_get("@hash")) + } else if ((($a = ($b = other['$is_a?']($scope.get('Set')), $b !== false && $b !== nil ?self.$size()['$=='](other.$size()) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = ($b = other)['$all?'], $a.$$p = (TMP_3 = function(o){var self = TMP_3.$$s || this; + if (self.hash == null) self.hash = nil; +if (o == null) o = nil; + return self.hash['$include?'](o)}, TMP_3.$$s = self, TMP_3), $a).call($b) + } else { + return false + }; + }); + + Opal.defn(self, '$add', function(o) { + var self = this; + + self.hash['$[]='](o, true); + return self; + }); + + Opal.alias(self, '<<', 'add'); + + Opal.defn(self, '$classify', TMP_4 = function() { + var $a, $b, TMP_5, $c, TMP_6, self = this, $iter = TMP_4.$$p, block = $iter || nil, result = nil; + + TMP_4.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("classify") + }; + result = ($a = ($b = $scope.get('Hash')).$new, $a.$$p = (TMP_5 = function(h, k){var self = TMP_5.$$s || this; +if (h == null) h = nil;if (k == null) k = nil; + return h['$[]='](k, self.$class().$new())}, TMP_5.$$s = self, TMP_5), $a).call($b); + ($a = ($c = self).$each, $a.$$p = (TMP_6 = function(item){var self = TMP_6.$$s || this, $a; +if (item == null) item = nil; + return result['$[]'](((($a = Opal.yield1(block, item)) === $breaker) ? $breaker.$v : $a)).$add(item)}, TMP_6.$$s = self, TMP_6), $a).call($c); + return result; + }); + + Opal.defn(self, '$collect!', TMP_7 = function() { + var $a, $b, TMP_8, self = this, $iter = TMP_7.$$p, block = $iter || nil, result = nil; + + TMP_7.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("collect!") + }; + result = self.$class().$new(); + ($a = ($b = self).$each, $a.$$p = (TMP_8 = function(item){var self = TMP_8.$$s || this, $a; +if (item == null) item = nil; + return result['$<<'](((($a = Opal.yield1(block, item)) === $breaker) ? $breaker.$v : $a))}, TMP_8.$$s = self, TMP_8), $a).call($b); + return self.$replace(result); + }); + + Opal.alias(self, 'map!', 'collect!'); + + Opal.defn(self, '$delete', function(o) { + var self = this; + + self.hash.$delete(o); + return self; + }); + + Opal.defn(self, '$delete?', function(o) { + var $a, self = this; + + if ((($a = self['$include?'](o)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$delete(o); + return self; + } else { + return nil + }; + }); + + Opal.defn(self, '$delete_if', TMP_9 = function() {try { + + var $a, $b, TMP_10, $c, $d, TMP_11, self = this, $iter = TMP_9.$$p, $yield = $iter || nil; + + TMP_9.$$p = null; + ((($a = ($yield !== nil)) !== false && $a !== nil) ? $a : Opal.ret(self.$enum_for("delete_if"))); + ($a = ($b = ($c = ($d = self).$select, $c.$$p = (TMP_11 = function(o){var self = TMP_11.$$s || this, $a; +if (o == null) o = nil; + return $a = Opal.yield1($yield, o), $a === $breaker ? $a : $a}, TMP_11.$$s = self, TMP_11), $c).call($d)).$each, $a.$$p = (TMP_10 = function(o){var self = TMP_10.$$s || this; + if (self.hash == null) self.hash = nil; +if (o == null) o = nil; + return self.hash.$delete(o)}, TMP_10.$$s = self, TMP_10), $a).call($b); + return self; + } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } + }); + + Opal.defn(self, '$add?', function(o) { + var $a, self = this; + + if ((($a = self['$include?'](o)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.$add(o) + }; + }); + + Opal.defn(self, '$each', TMP_12 = function() { + var $a, $b, self = this, $iter = TMP_12.$$p, block = $iter || nil; + + TMP_12.$$p = null; + if ((block !== nil)) { + } else { + return self.$enum_for("each") + }; + ($a = ($b = self.hash).$each_key, $a.$$p = block.$to_proc(), $a).call($b); + return self; + }); + + Opal.defn(self, '$empty?', function() { + var self = this; + + return self.hash['$empty?'](); + }); + + Opal.defn(self, '$eql?', function(other) { + var $a, $b, TMP_13, self = this; + + return self.hash['$eql?'](($a = ($b = other).$instance_eval, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this; + if (self.hash == null) self.hash = nil; + + return self.hash}, TMP_13.$$s = self, TMP_13), $a).call($b)); + }); + + Opal.defn(self, '$clear', function() { + var self = this; + + self.hash.$clear(); + return self; + }); + + Opal.defn(self, '$include?', function(o) { + var self = this; + + return self.hash['$include?'](o); + }); + + Opal.alias(self, 'member?', 'include?'); + + Opal.defn(self, '$merge', function(enum$) { + var $a, $b, TMP_14, self = this; + + ($a = ($b = enum$).$each, $a.$$p = (TMP_14 = function(item){var self = TMP_14.$$s || this; +if (item == null) item = nil; + return self.$add(item)}, TMP_14.$$s = self, TMP_14), $a).call($b); + return self; + }); + + Opal.defn(self, '$replace', function(enum$) { + var self = this; + + self.$clear(); + self.$merge(enum$); + return self; + }); + + Opal.defn(self, '$size', function() { + var self = this; + + return self.hash.$size(); + }); + + Opal.alias(self, 'length', 'size'); + + Opal.defn(self, '$subtract', function(enum$) { + var $a, $b, TMP_15, self = this; + + ($a = ($b = enum$).$each, $a.$$p = (TMP_15 = function(item){var self = TMP_15.$$s || this; +if (item == null) item = nil; + return self.$delete(item)}, TMP_15.$$s = self, TMP_15), $a).call($b); + return self; + }); + + Opal.defn(self, '$|', function(enum$) { + var $a, self = this; + + if ((($a = enum$['$respond_to?']("each")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise($scope.get('ArgumentError'), "value must be enumerable") + }; + return self.$dup().$merge(enum$); + }); + + Opal.defn(self, '$superset?', function(set) { + var $a, $b, TMP_16, self = this; + + ((($a = set['$is_a?']($scope.get('Set'))) !== false && $a !== nil) ? $a : self.$raise($scope.get('ArgumentError'), "value must be a set")); + if ((($a = $rb_lt(self.$size(), set.$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + return false}; + return ($a = ($b = set)['$all?'], $a.$$p = (TMP_16 = function(o){var self = TMP_16.$$s || this; +if (o == null) o = nil; + return self['$include?'](o)}, TMP_16.$$s = self, TMP_16), $a).call($b); + }); + + Opal.alias(self, '>=', 'superset?'); + + Opal.defn(self, '$proper_superset?', function(set) { + var $a, $b, TMP_17, self = this; + + ((($a = set['$is_a?']($scope.get('Set'))) !== false && $a !== nil) ? $a : self.$raise($scope.get('ArgumentError'), "value must be a set")); + if ((($a = $rb_le(self.$size(), set.$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + return false}; + return ($a = ($b = set)['$all?'], $a.$$p = (TMP_17 = function(o){var self = TMP_17.$$s || this; +if (o == null) o = nil; + return self['$include?'](o)}, TMP_17.$$s = self, TMP_17), $a).call($b); + }); + + Opal.alias(self, '>', 'proper_superset?'); + + Opal.defn(self, '$subset?', function(set) { + var $a, $b, TMP_18, self = this; + + ((($a = set['$is_a?']($scope.get('Set'))) !== false && $a !== nil) ? $a : self.$raise($scope.get('ArgumentError'), "value must be a set")); + if ((($a = $rb_lt(set.$size(), self.$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + return false}; + return ($a = ($b = self)['$all?'], $a.$$p = (TMP_18 = function(o){var self = TMP_18.$$s || this; +if (o == null) o = nil; + return set['$include?'](o)}, TMP_18.$$s = self, TMP_18), $a).call($b); + }); + + Opal.alias(self, '<=', 'subset?'); + + Opal.defn(self, '$proper_subset?', function(set) { + var $a, $b, TMP_19, self = this; + + ((($a = set['$is_a?']($scope.get('Set'))) !== false && $a !== nil) ? $a : self.$raise($scope.get('ArgumentError'), "value must be a set")); + if ((($a = $rb_le(set.$size(), self.$size())) !== nil && (!$a.$$is_boolean || $a == true))) { + return false}; + return ($a = ($b = self)['$all?'], $a.$$p = (TMP_19 = function(o){var self = TMP_19.$$s || this; +if (o == null) o = nil; + return set['$include?'](o)}, TMP_19.$$s = self, TMP_19), $a).call($b); + }); + + Opal.alias(self, '<', 'proper_subset?'); + + Opal.alias(self, '+', '|'); + + Opal.alias(self, 'union', '|'); + + return (Opal.defn(self, '$to_a', function() { + var self = this; + + return self.hash.$keys(); + }), nil) && 'to_a'; + })($scope.base, null); + return (function($base) { + var $Enumerable, self = $Enumerable = $module($base, 'Enumerable'); + + var def = self.$$proto, $scope = self.$$scope, TMP_20; + + Opal.defn(self, '$to_set', TMP_20 = function(klass) { + var $a, $b, self = this, $iter = TMP_20.$$p, block = $iter || nil, $splat_index = nil; + + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + if (klass == null) { + klass = $scope.get('Set') + } + TMP_20.$$p = null; + return ($a = ($b = klass).$new, $a.$$p = block.$to_proc(), $a).apply($b, [self].concat(Opal.to_a(args))); + }) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser/sexp"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + + Opal.add_stubs(['$attr_reader', '$attr_accessor', '$[]', '$[]=', '$send', '$to_proc', '$<<', '$push', '$concat', '$new', '$dup', '$is_a?', '$==', '$array', '$join', '$map', '$inspect', '$line']); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base, $super) { + function $Sexp(){}; + var self = $Sexp = $klass($base, $super, 'Sexp', $Sexp); + + var def = self.$$proto, $scope = self.$$scope, TMP_1; + + def.array = def.source = nil; + self.$attr_reader("array"); + + self.$attr_accessor("source"); + + Opal.defn(self, '$initialize', function(args) { + var self = this; + + return self.array = args; + }); + + Opal.defn(self, '$type', function() { + var self = this; + + return self.array['$[]'](0); + }); + + Opal.defn(self, '$type=', function(type) { + var self = this; + + return self.array['$[]='](0, type); + }); + + Opal.defn(self, '$children', function() { + var self = this; + + return self.array['$[]']($range(1, -1, false)); + }); + + Opal.defn(self, '$method_missing', TMP_1 = function(sym) { + var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil, $splat_index = nil; + + var array_size = arguments.length - 1; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 1]; + } + TMP_1.$$p = null; + return ($a = ($b = self.array).$send, $a.$$p = block.$to_proc(), $a).apply($b, [sym].concat(Opal.to_a(args))); + }); + + Opal.defn(self, '$<<', function(other) { + var self = this; + + self.array['$<<'](other); + return self; + }); + + Opal.defn(self, '$push', function() { + var $a, self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var parts = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + parts[$splat_index] = arguments[$splat_index + 0]; + } + ($a = self.array).$push.apply($a, Opal.to_a(parts)); + return self; + }); + + Opal.defn(self, '$concat', function(children) { + var self = this; + + self.array.$concat(children); + return self; + }); + + Opal.defn(self, '$to_ary', function() { + var self = this; + + return self.array; + }); + + Opal.defn(self, '$dup', function() { + var self = this; + + return $scope.get('Sexp').$new(self.array.$dup()); + }); + + Opal.defn(self, '$==', function(other) { + var $a, self = this; + + if ((($a = other['$is_a?']($scope.get('Sexp'))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.array['$=='](other.$array()) + } else { + return self.array['$=='](other) + }; + }); + + Opal.alias(self, 'eql?', '=='); + + Opal.defn(self, '$line', function() { + var $a, self = this; + + return ($a = self.source, $a !== false && $a !== nil ?self.source['$[]'](0) : $a); + }); + + Opal.defn(self, '$column', function() { + var $a, self = this; + + return ($a = self.source, $a !== false && $a !== nil ?self.source['$[]'](1) : $a); + }); + + Opal.defn(self, '$inspect', function() { + var $a, $b, TMP_2, self = this; + + return "(" + (($a = ($b = self.array).$map, $a.$$p = (TMP_2 = function(e){var self = TMP_2.$$s || this; +if (e == null) e = nil; + return e.$inspect()}, TMP_2.$$s = self, TMP_2), $a).call($b).$join(", ")) + ")"; + }); + + Opal.defn(self, '$pretty_inspect', function() { + var $a, $b, TMP_3, self = this; + + return "(" + ((function() {if ((($a = self.$line()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "" + (self.$line()) + " " + } else { + return "" + }; return nil; })()) + (($a = ($b = self.array).$map, $a.$$p = (TMP_3 = function(e){var self = TMP_3.$$s || this; +if (e == null) e = nil; + return e.$inspect()}, TMP_3.$$s = self, TMP_3), $a).call($b).$join(", ")) + ")"; + }); + + return Opal.alias(self, 'to_s', 'inspect'); + })($scope.base, null) + })($scope.base) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/regexp_anchors"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + + Opal.add_stubs(['$==']); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.cdecl($scope, 'REGEXP_START', (function() {if ($scope.get('RUBY_ENGINE')['$==']("opal")) { + return "^"}; return nil; })()); + + Opal.cdecl($scope, 'REGEXP_END', (function() {if ($scope.get('RUBY_ENGINE')['$==']("opal")) { + return "$"}; return nil; })()); + })($scope.base) }; -/* Generated by Opal 0.8.0 */ -Opal.modules["racc/parser"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_times(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); - } - function $rb_ge(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; +/* Generated by Opal 0.9.2 */ +Opal.modules["strscan"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; + + Opal.add_stubs(['$attr_reader', '$anchor', '$scan_until', '$length', '$size', '$rest', '$pos=', '$private']); + return (function($base, $super) { + function $StringScanner(){}; + var self = $StringScanner = $klass($base, $super, 'StringScanner', $StringScanner); + + var def = self.$$proto, $scope = self.$$scope; + + def.pos = def.string = def.working = def.matched = def.prev_pos = def.match = nil; + self.$attr_reader("pos"); + + self.$attr_reader("matched"); + + Opal.defn(self, '$initialize', function(string) { + var self = this; + + self.string = string; + self.pos = 0; + self.matched = nil; + self.working = string; + return self.match = []; + }); + + self.$attr_reader("string"); + + Opal.defn(self, '$beginning_of_line?', function() { + var self = this; + + return self.pos === 0 || self.string.charAt(self.pos - 1) === "\n"; + }); + + Opal.alias(self, 'bol?', 'beginning_of_line?'); + + Opal.defn(self, '$scan', function(pattern) { + var self = this; + + pattern = self.$anchor(pattern); + + var result = pattern.exec(self.working); + + if (result == null) { + return self.matched = nil; + } + else if (typeof(result) === 'object') { + self.prev_pos = self.pos; + self.pos += result[0].length; + self.working = self.working.substring(result[0].length); + self.matched = result[0]; + self.match = result; + + return result[0]; + } + else if (typeof(result) === 'string') { + self.pos += result.length; + self.working = self.working.substring(result.length); + + return result; + } + else { + return nil; + } + ; + }); + + Opal.defn(self, '$scan_until', function(pattern) { + var self = this; + + pattern = self.$anchor(pattern); + + var pos = self.pos, + working = self.working, + result; + + while (true) { + result = pattern.exec(working); + pos += 1; + working = working.substr(1); + + if (result == null) { + if (working.length === 0) { + return self.matched = nil; + } + + continue; + } + + self.matched = self.string.substr(self.pos, pos - self.pos - 1 + result[0].length); + self.prev_pos = pos - 1; + self.pos = pos; + self.working = working.substr(result[0].length); + + return self.matched; + } + ; + }); + + Opal.defn(self, '$[]', function(idx) { + var self = this; + + + var match = self.match; + + if (idx < 0) { + idx += match.length; + } + + if (idx < 0 || idx >= match.length) { + return nil; + } + + if (match[idx] == null) { + return nil; + } + + return match[idx]; + ; + }); + + Opal.defn(self, '$check', function(pattern) { + var self = this; + + pattern = self.$anchor(pattern); + + var result = pattern.exec(self.working); + + if (result == null) { + return self.matched = nil; + } + + return self.matched = result[0]; + ; + }); + + Opal.defn(self, '$check_until', function(pattern) { + var self = this; + + + var prev_pos = self.prev_pos, + pos = self.pos; + + var result = self.$scan_until(pattern); + + if (result !== nil) { + self.matched = result.substr(-1); + self.working = self.string.substr(pos); + } + + self.prev_pos = prev_pos; + self.pos = pos; + + return result; + ; + }); + + Opal.defn(self, '$peek', function(length) { + var self = this; + + return self.working.substring(0, length); + }); + + Opal.defn(self, '$eos?', function() { + var self = this; + + return self.working.length === 0; + }); + + Opal.defn(self, '$exist?', function(pattern) { + var self = this; + + + var result = pattern.exec(self.working); + + if (result == null) { + return nil; + } + else if (result.index == 0) { + return 0; + } + else { + return result.index + 1; + } + ; + }); + + Opal.defn(self, '$skip', function(pattern) { + var self = this; - Opal.add_stubs(['$class', '$_racc_do_parse_rb', '$_racc_setup', '$[]', '$!', '$==', '$next_token', '$racc_read_token', '$nil?', '$puts', '$push', '$<<', '$racc_shift', '$-@', '$last', '$pop', '$__send__', '$raise', '$racc_reduce', '$inspect', '$racc_next_state', '$racc_token2str', '$racc_print_stacks', '$empty?', '$map', '$racc_print_states', '$each_index', '$each']); - return (function($base) { - var self = $module($base, 'Racc'); + pattern = self.$anchor(pattern); + + var result = pattern.exec(self.working); - var def = self.$$proto, $scope = self.$$scope; + if (result == null) { + return self.matched = nil; + } + else { + var match_str = result[0]; + var match_len = match_str.length; - (function($base, $super) { - function $Parser(){}; - var self = $Parser = $klass($base, $super, 'Parser', $Parser); + self.matched = match_str; + self.prev_pos = self.pos; + self.pos += match_len; + self.working = self.working.substring(match_len); - var def = self.$$proto, $scope = self.$$scope; + return match_len; + } + ; + }); - def.yydebug = nil; - def.$_racc_setup = function() { - var self = this; + Opal.defn(self, '$skip_until', function(pattern) { + var self = this; - return ((self.$class()).$$scope.get('Racc_arg')); - }; + + var result = self.$scan_until(pattern); - def.$do_parse = function() { - var self = this; + if (result === nil) { + return nil; + } + else { + self.matched = result.substr(-1); - return self.$_racc_do_parse_rb(self.$_racc_setup(), false); - }; + return result.length; + } + ; + }); - def.$_racc_do_parse_rb = function(arg, in_debug) { - var $a, $b, $c, $d, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, goto_table = nil, goto_check = nil, goto_default = nil, goto_pointer = nil, nt_base = nil, reduce_table = nil, token_table = nil, shift_n = nil, reduce_n = nil, use_result = nil, racc_state = nil, racc_tstack = nil, racc_vstack = nil, racc_t = nil, racc_tok = nil, racc_val = nil, racc_read_next = nil, racc_user_yyerror = nil, racc_error_status = nil, token = nil, act = nil, i = nil, nerr = nil, custate = nil, curstate = nil, reduce_i = nil, reduce_len = nil, reduce_to = nil, method_id = nil, tmp_t = nil, tmp_v = nil, reduce_call_result = nil, k1 = nil; + Opal.defn(self, '$get_byte', function() { + var self = this; - action_table = arg['$[]'](0); - action_check = arg['$[]'](1); - action_default = arg['$[]'](2); - action_pointer = arg['$[]'](3); - goto_table = arg['$[]'](4); - goto_check = arg['$[]'](5); - goto_default = arg['$[]'](6); - goto_pointer = arg['$[]'](7); - nt_base = arg['$[]'](8); - reduce_table = arg['$[]'](9); - token_table = arg['$[]'](10); - shift_n = arg['$[]'](11); - reduce_n = arg['$[]'](12); - use_result = arg['$[]'](13); - racc_state = [0]; - racc_tstack = []; - racc_vstack = []; - racc_t = nil; - racc_tok = nil; - racc_val = nil; - racc_read_next = true; - racc_user_yyerror = false; - racc_error_status = 0; - token = nil; - act = nil; - i = nil; - nerr = nil; - custate = nil; - while ((($b = true) !== nil && (!$b.$$is_boolean || $b == true))) { - i = action_pointer['$[]'](racc_state['$[]'](-1)); - if (i !== false && i !== nil) { - if (racc_read_next !== false && racc_read_next !== nil) { - if ((($b = racc_t['$=='](0)['$!']()) !== nil && (!$b.$$is_boolean || $b == true))) { - token = self.$next_token(); - racc_tok = token['$[]'](0); - racc_val = token['$[]'](1); - if (racc_tok['$=='](false)) { - racc_t = 0 - } else { - racc_t = token_table['$[]'](racc_tok); - if (racc_t !== false && racc_t !== nil) { - } else { - racc_t = 1 - }; - }; - if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$racc_read_token(racc_t, racc_tok, racc_val)}; - racc_read_next = false;}}; - i = $rb_plus(i, racc_t); - if ((($b = ((($c = ((($d = ($rb_lt(i, 0))) !== false && $d !== nil) ? $d : ((act = action_table['$[]'](i)))['$nil?']())) !== false && $c !== nil) ? $c : (action_check['$[]'](i)['$=='](racc_state['$[]'](-1))['$!']()))) !== nil && (!$b.$$is_boolean || $b == true))) { - act = action_default['$[]'](racc_state['$[]'](-1))}; - } else { - act = action_default['$[]'](racc_state['$[]'](-1)) - }; - if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$puts("(act: " + (act) + ", shift_n: " + (shift_n) + ", reduce_n: " + (reduce_n) + ")")}; - if ((($b = (($c = $rb_gt(act, 0)) ? $rb_lt(act, shift_n) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - if ($rb_gt(racc_error_status, 0)) { - if ((($b = racc_t['$=='](1)['$!']()) !== nil && (!$b.$$is_boolean || $b == true))) { - racc_error_status = $rb_minus(racc_error_status, 1)}}; - racc_vstack.$push(racc_val); - curstate = act; - racc_state['$<<'](act); - racc_read_next = true; - if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { - racc_tstack.$push(racc_t); - self.$racc_shift(racc_t, racc_tstack, racc_vstack);}; - } else if ((($b = (($c = $rb_lt(act, 0)) ? $rb_gt(act, reduce_n['$-@']()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - reduce_i = $rb_times(act, -3); - reduce_len = reduce_table['$[]'](reduce_i); - reduce_to = reduce_table['$[]']($rb_plus(reduce_i, 1)); - method_id = reduce_table['$[]']($rb_plus(reduce_i, 2)); - tmp_t = racc_tstack.$last(reduce_len); - tmp_v = racc_vstack.$last(reduce_len); - racc_state.$pop(reduce_len); - racc_vstack.$pop(reduce_len); - racc_tstack.$pop(reduce_len); - if (use_result !== false && use_result !== nil) { - reduce_call_result = self.$__send__(method_id, tmp_v, nil, tmp_v['$[]'](0)); - racc_vstack.$push(reduce_call_result); - } else { - self.$raise("not using result??") - }; - racc_tstack.$push(reduce_to); - if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$racc_reduce(tmp_t, reduce_to, racc_tstack, racc_vstack)}; - k1 = $rb_minus(reduce_to, nt_base); - if ((($b = ((reduce_i = goto_pointer['$[]'](k1)))['$=='](nil)['$!']()) !== nil && (!$b.$$is_boolean || $b == true))) { - reduce_i = $rb_plus(reduce_i, racc_state['$[]'](-1)); - if ((($b = ($c = ($d = ($rb_ge(reduce_i, 0)), $d !== false && $d !== nil ?(((curstate = goto_table['$[]'](reduce_i)))['$=='](nil)['$!']()) : $d), $c !== false && $c !== nil ?(goto_check['$[]'](reduce_i)['$=='](k1)) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { - racc_state.$push(curstate) - } else { - racc_state.$push(goto_default['$[]'](k1)) - }; - } else { - racc_state.$push(goto_default['$[]'](k1)) - }; - } else if (act['$=='](shift_n)) { - return racc_vstack['$[]'](0) - } else if (act['$=='](reduce_n['$-@']())) { - self.$raise($scope.get('SyntaxError'), "unexpected '" + (racc_tok.$inspect()) + "'") - } else { - self.$raise("Rac: unknown action: " + (act)) - }; - if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { - self.$racc_next_state(racc_state['$[]'](-1), racc_state)};}; - }; + + var result = nil; - def.$racc_read_token = function(t, tok, val) { - var self = this; + if (self.pos < self.string.length) { + self.prev_pos = self.pos; + self.pos += 1; + result = self.matched = self.working.substring(0, 1); + self.working = self.working.substring(1); + } + else { + self.matched = nil; + } - self.$puts("read " + (tok) + "(" + (self.$racc_token2str(t)) + ") " + (val.$inspect())); - return self.$puts("\n"); - }; + return result; + ; + }); - def.$racc_shift = function(tok, tstack, vstack) { - var self = this; + Opal.alias(self, 'getch', 'get_byte'); - self.$puts("shift " + (self.$racc_token2str(tok))); - self.$racc_print_stacks(tstack, vstack); - return self.$puts("\n"); - }; + Opal.defn(self, '$match?', function(pattern) { + var self = this; - def.$racc_reduce = function(toks, sim, tstack, vstack) { - var $a, $b, TMP_1, self = this; + pattern = self.$anchor(pattern); + + var result = pattern.exec(self.working); - self.$puts("reduce " + ((function() {if ((($a = toks['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "" - } else { - return ($a = ($b = toks).$map, $a.$$p = (TMP_1 = function(t){var self = TMP_1.$$s || this; -if (t == null) t = nil; - return self.$racc_token2str(t)}, TMP_1.$$s = self, TMP_1), $a).call($b) - }; return nil; })())); - self.$puts(" --> " + (self.$racc_token2str(sim))); - return self.$racc_print_stacks(tstack, vstack); - }; + if (result == null) { + return nil; + } + else { + self.prev_pos = self.pos; + + return result[0].length; + } + ; + }); + + Opal.defn(self, '$pos=', function(pos) { + var self = this; + + + if (pos < 0) { + pos += self.string.$length(); + } + ; + self.pos = pos; + return self.working = self.string.slice(pos); + }); + + Opal.defn(self, '$post_match', function() { + var self = this; + + + if (self.matched === nil) { + return nil; + } + + return self.string.substr(self.pos); + ; + }); + + Opal.defn(self, '$pre_match', function() { + var self = this; + + + if (self.matched === nil) { + return nil; + } + + return self.string.substr(0, self.prev_pos); + ; + }); + + Opal.defn(self, '$reset', function() { + var self = this; + + self.working = self.string; + self.matched = nil; + return self.pos = 0; + }); + + Opal.defn(self, '$rest', function() { + var self = this; + + return self.working; + }); - def.$racc_next_state = function(curstate, state) { - var self = this; + Opal.defn(self, '$rest?', function() { + var self = this; - self.$puts("goto " + (curstate)); - self.$racc_print_states(state); - return self.$puts("\n"); - }; + return self.working.length !== 0; + }); - def.$racc_token2str = function(tok) { - var self = this; + Opal.defn(self, '$rest_size', function() { + var self = this; - return ((self.$class()).$$scope.get('Racc_token_to_s_table'))['$[]'](tok); - }; + return self.$rest().$size(); + }); - def.$racc_print_stacks = function(t, v) { - var $a, $b, TMP_2, self = this; + Opal.defn(self, '$terminate', function() { + var $a, $b, self = this; - self.$puts(" ["); - ($a = ($b = t).$each_index, $a.$$p = (TMP_2 = function(i){var self = TMP_2.$$s || this; -if (i == null) i = nil; - return self.$puts(" (" + (self.$racc_token2str(t['$[]'](i))) + " " + (v['$[]'](i).$inspect()) + ")")}, TMP_2.$$s = self, TMP_2), $a).call($b); - return self.$puts(" ]"); - }; + self.match = nil; + return (($a = [self.string.$length()]), $b = self, $b['$pos='].apply($b, $a), $a[$a.length-1]); + }); - return (def.$racc_print_states = function(s) { - var $a, $b, TMP_3, self = this; + Opal.defn(self, '$unscan', function() { + var self = this; - self.$puts(" ["); - ($a = ($b = s).$each, $a.$$p = (TMP_3 = function(st){var self = TMP_3.$$s || this; -if (st == null) st = nil; - return self.$puts(" " + (st))}, TMP_3.$$s = self, TMP_3), $a).call($b); - return self.$puts(" ]"); - }, nil) && 'racc_print_states'; - })(self, null) - })(self) + self.pos = self.prev_pos; + self.prev_pos = nil; + self.match = nil; + return self; + }); + + self.$private(); + + return (Opal.defn(self, '$anchor', function(pattern) { + var self = this; + + return new RegExp('^(?:' + pattern.toString().substr(1, pattern.toString().length - 2) + ')'); + }), nil) && 'anchor'; + })($scope.base, null) }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser/grammar"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser/keywords"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash = Opal.hash; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; - Opal.add_stubs(['$require', '$new', '$each', '$empty?', '$[]=', '$to_i', '$split', '$new_compstmt', '$[]', '$new_block', '$<<', '$new_body', '$lex_state=', '$lexer', '$new_alias', '$s', '$to_sym', '$value', '$new_if', '$new_while', '$new_until', '$new_rescue_mod', '$new_assign', '$new_op_asgn', '$op_to_setter', '$new_unary_call', '$new_return', '$new_break', '$new_next', '$new_call', '$new_super', '$new_yield', '$new_assignable', '$new_attrasgn', '$new_colon2', '$new_colon3', '$new_const', '$new_sym', '$new_op_asgn1', '$new_irange', '$new_erange', '$new_binary_call', '$new_int', '$new_float', '$include?', '$type', '$==', '$-@', '$to_f', '$new_not', '$new_and', '$new_or', '$new_hash', '$add_block_pass', '$cmdarg_push', '$cmdarg_pop', '$new_block_pass', '$new_splat', '$line', '$new_paren', '$new_array', '$new_nil', '$cond_push', '$cond_pop', '$new_class', '$new_sclass', '$new_module', '$push_scope', '$new_def', '$pop_scope', '$new_iter', '$new_ident', '$new_block_args', '$push', '$intern', '$first', '$nil?', '$new_str', '$str_append', '$new_xstr', '$new_regexp', '$concat', '$new_str_content', '$strterm', '$strterm=', '$new_evstr', '$cond_lexpop', '$cmdarg_lexpop', '$new_gvar', '$new_ivar', '$new_cvar', '$new_dsym', '$negate_num', '$new_self', '$new_true', '$new_false', '$new___FILE__', '$new___LINE__', '$new_var_ref', '$new_kwrestarg', '$new_kwoptarg', '$new_kwarg', '$new_args_tail', '$new_args', '$add_local', '$scope', '$raise']); - self.$require("racc/parser.rb"); + Opal.add_stubs(['$attr_accessor', '$map', '$new', '$each', '$[]=', '$name', '$[]']); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; - (function($base, $super) { - function $Parser(){}; - var self = $Parser = $klass($base, $super, 'Parser', $Parser); - - var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1, $c, TMP_3, $d, TMP_5, $e, TMP_7, clist = nil, racc_action_table = nil, arr = nil, idx = nil, racc_action_check = nil, racc_action_pointer = nil, racc_action_default = nil, racc_goto_table = nil, racc_goto_check = nil, racc_goto_pointer = nil, racc_goto_default = nil, racc_reduce_table = nil, racc_reduce_n = nil, racc_shift_n = nil, racc_token_table = nil, racc_nt_base = nil, racc_use_result_var = nil; + (function($base) { + var $Keywords, self = $Keywords = $module($base, 'Keywords'); - clist = ["63,64,65,8,51,566,-89,-83,57,58,270,203,204,61,73,59,60,62,23,24,66", "67,74,-523,785,639,767,22,28,27,90,89,91,92,543,609,17,572,270,573,768", "265,7,41,6,9,94,93,566,84,50,86,85,87,-64,88,95,96,638,81,82,-94,38", "39,-88,535,587,790,537,573,-95,203,204,-525,-83,-90,-440,101,566,566", "-90,676,100,-440,36,-90,-91,30,-523,-92,52,-75,781,54,-92,32,269,608", "-92,40,101,-93,566,265,265,100,780,18,399,-523,-81,-83,79,73,75,76,77", "78,101,-83,565,74,80,100,269,708,63,64,65,56,51,-440,53,225,57,58,37", "83,542,61,-91,59,60,62,256,257,66,67,203,204,708,341,340,255,28,27,90", "89,91,92,305,101,217,565,-525,-86,100,-526,-80,41,708,586,94,93,-87", "84,50,86,85,87,259,88,95,96,-82,81,82,620,38,39,101,101,101,565,565", "100,100,100,-90,-91,-90,-91,-84,-90,-91,-85,-525,-92,225,-92,208,522", "-92,212,778,101,52,565,873,54,100,254,270,-277,101,40,707,-447,-84,100", "-277,-82,-84,216,-447,-526,-92,305,79,73,75,76,77,78,-83,-437,735,74", "80,101,790,707,-437,639,100,56,850,732,53,735,-94,388,37,83,63,64,65", "8,51,101,732,707,57,58,100,203,204,61,-277,59,60,62,23,24,66,67,638", "265,412,341,340,22,28,27,90,89,91,92,-82,-84,17,597,341,340,597,-89", "7,41,269,9,94,93,597,84,50,86,85,87,-449,88,95,96,597,81,82,733,38,39", "409,796,787,797,-278,411,410,-82,-84,597,733,-278,203,204,888,-82,-84", "446,549,735,36,-443,552,30,597,-278,52,602,-443,54,732,32,-278,599,598", "40,599,598,600,-88,518,519,751,18,599,598,604,522,79,73,75,76,77,78", "599,598,595,74,80,-278,338,337,341,340,639,56,-95,635,53,599,598,610", "37,83,63,64,65,8,51,639,-278,101,57,58,599,598,100,61,-86,59,60,62,23", "24,66,67,-94,638,733,809,790,22,28,27,90,89,91,92,101,101,17,-271,638", "100,100,615,7,41,-271,9,94,93,-449,84,50,86,85,87,583,88,95,96,483,81", "82,799,38,39,800,225,229,234,235,236,231,233,241,242,237,238,-277,218", "219,-277,101,239,240,-277,36,100,-277,30,-526,-80,52,-526,-271,54,619", "32,222,-88,228,40,224,223,220,221,232,230,226,18,227,582,801,202,79", "73,75,76,77,78,583,552,-448,74,80,200,243,581,-227,-448,101,56,201,-277", "53,100,-277,-82,37,83,63,64,65,8,51,-90,842,843,57,58,844,95,96,61,-87", "59,60,62,23,24,66,67,-95,535,804,757,537,22,28,27,90,89,91,92,919,582", "17,-448,341,340,199,920,7,41,481,9,94,93,770,84,50,86,85,87,525,88,95", "96,790,81,82,526,38,39,575,442,-81,225,-448,-442,225,576,443,-271,-89", "-448,-442,813,888,514,-271,-445,814,735,36,-446,515,30,-445,918,52,385", "-446,54,732,32,816,-279,222,40,490,222,224,223,-279,224,223,18,490,444", "445,592,79,73,75,76,77,78,593,574,444,74,80,-448,338,337,341,340,-271", "56,535,447,53,537,513,-258,37,83,63,64,65,8,51,-444,448,535,57,58,534", "-525,-444,61,-279,59,60,62,23,24,66,67,203,204,733,397,398,22,28,27", "90,89,91,92,809,790,17,-278,298,299,818,615,7,41,-278,9,94,93,753,84", "50,86,85,87,-279,88,95,96,213,81,82,-279,38,39,479,225,229,234,235,236", "231,233,241,242,237,238,-324,218,219,262,481,239,240,-324,36,483,263", "30,203,204,52,711,-278,54,573,32,222,826,228,40,224,223,220,221,232", "230,226,18,227,-279,703,828,79,73,75,76,77,78,690,831,832,74,80,834", "243,836,63,64,65,56,51,-324,53,-440,57,58,37,83,838,61,-440,59,60,62", "256,257,66,67,103,104,105,106,107,255,288,292,90,89,91,92,700,840,217", "698,338,337,341,340,490,41,688,-259,94,93,305,84,50,86,85,87,-63,88", "95,96,507,81,82,684,38,39,683,225,229,234,235,236,231,233,241,242,237", "238,682,218,219,297,508,239,240,296,208,509,676,212,851,852,52,853,854", "54,528,644,222,252,228,40,224,223,220,221,232,230,226,216,227,856,857", "676,79,73,75,76,77,78,516,859,668,74,80,-257,243,863,-227,666,-75,56", "690,665,53,868,274,870,37,83,63,64,65,8,51,663,244,305,57,58,655,654", "876,61,878,59,60,62,23,24,66,67,103,104,105,106,107,22,28,27,90,89,91", "92,879,305,17,305,338,337,341,340,7,41,265,9,94,93,225,84,50,86,85,87", "225,88,95,96,225,81,82,225,38,39,892,225,229,234,235,236,231,233,241", "242,237,238,-260,218,219,523,524,239,240,265,36,894,618,30,-257,198", "52,-526,552,54,617,32,222,904,228,40,224,223,220,221,232,230,226,18", "227,905,197,196,79,73,75,76,77,78,195,910,831,74,80,912,243,636,836", "836,838,56,225,614,53,611,607,603,37,83,63,64,65,8,51,921,305,108,57", "58,579,578,927,61,577,59,60,62,23,24,66,67,103,104,105,106,107,22,28", "27,90,89,91,92,401,554,17,333,331,330,682,332,7,41,97,9,94,93,562,84", "50,86,85,87,561,88,95,96,552,81,82,550,38,39,937,225,229,234,235,236", "231,233,241,242,237,238,836,218,219,939,940,239,240,549,36,546,483,30", "539,538,52,,,54,,32,222,,228,40,224,223,220,221,232,230,226,18,227,", ",,79,73,75,76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58,37,83,", "61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,554,217,333", "331,330,,332,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225", "229,234,235,236,231,233,241,242,237,238,,218,219,,,239,240,,208,,,212", ",,52,,,54,,644,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79", "73,75,76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58,37,83,,61,,59", "60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,554,217,333,331,330", ",332,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,745,,333,331,330", "735,332,,,,,,557,,,,732,,,,560,,,899,,,212,225,,52,,,54,,,,,,335,730", ",,,,,,338,337,341,340,,79,73,75,76,77,78,,222,,74,80,224,223,220,221", ",,56,,,53,,,,293,83,63,64,65,8,51,,,733,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,242,237", "238,,218,219,,,239,240,,36,,,30,,,52,,,54,,32,222,,228,40,224,223,220", "221,232,230,226,18,227,,,,79,73,75,76,77,78,,,,74,80,,243,,63,64,65", "56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81", "82,,38,39,,225,229,234,235,236,231,233,241,242,237,238,,218,219,,,239", "240,,208,,,212,,,52,,,54,,,222,252,228,40,224,223,220,221,232,230,226", "216,227,,,,79,73,75,76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58", "37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217", ",,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,229,234", "235,236,231,233,241,242,237,238,,218,219,,,239,240,,208,,,212,,,52,", ",54,,,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79,73,75,76", "77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,242,237", "238,,218,219,,,239,240,,208,,,212,213,,52,,,54,,,222,,228,40,224,223", "220,221,232,230,226,18,227,,,,79,73,75,76,77,78,,,,74,80,,243,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,225,229,234,235,236,231,233,241,242,237,238,,218,219,,,239,240,", "208,,,212,,,52,,,54,,,222,,228,40,224,223,220,221,232,230,226,216,227", ",,,79,73,75,76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58,37,83", ",61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,", ",41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,229,234,235", "236,231,233,241,242,237,238,,218,219,,,239,240,,208,,,212,,,52,,,54", ",,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79,73,75,76,77", "78,,,,74,80,,243,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,", "59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94", "93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231", "233,241,242,237,238,,218,219,,,239,240,,36,,,30,,,52,,,54,,32,222,,228", "40,224,223,220,221,232,230,226,18,227,,,,79,73,75,76,77,78,,,,74,80", ",243,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,", ",,,255,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259", "88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,242,237,238", ",218,219,,,239,240,,208,,,212,,,52,,,54,,254,222,252,228,40,224,223", "220,221,232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,243,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81", "82,,38,39,,225,229,234,235,236,231,233,241,242,237,238,,218,219,,,239", "240,,208,,,212,,,52,,,54,,254,222,252,228,40,224,223,220,221,232,230", "226,216,227,,,,79,73,75,76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,", "57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27,90,89,91,92,", ",217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,225", "229,234,235,236,231,233,241,242,237,238,,218,219,,,239,240,,208,,,212", ",,52,,,54,,254,222,252,228,40,224,223,220,221,232,230,226,216,227,,", ",79,73,75,76,77,78,,,,74,80,,243,,,,,56,,,53,,,,37,83,63,64,65,8,51", ",,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17", ",,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,229", "234,235,236,231,233,241,242,237,238,,218,219,,,239,240,,36,,,30,,,52", ",,54,,32,222,,228,40,224,223,220,221,232,230,226,18,227,,,,79,73,75", "76,77,78,,,,74,80,,243,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,554,17,333,331,330,225,332,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,554,,333,331,330,,332", "222,,557,,224,223,220,221,,,560,,,208,,,212,225,,52,,,54,,,,,,40,,,557", ",239,240,,18,,,806,,79,73,75,76,77,78,,222,,74,80,224,223,220,221,,", "56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40", ",,324,,333,331,330,18,332,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65", "56,51,,53,,57,58,37,83,,61,335,59,60,62,256,257,66,67,338,337,341,340", ",255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,242,237,238,,-546", "-546,,,239,240,,208,,,212,,,52,,,54,,254,222,,228,40,224,223,220,221", "232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37", "83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27", "90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,225,,,,,,,,,,,,,,,,239,240,,36,,,278,,,52,,,54,,32,222,,228", "40,224,223,220,221,,,226,18,227,,,,79,73,75,76,77,78,,,,74,80,,,,63", "64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288", "292,90,89,91,92,,,217,,,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,324,,333,331,330,,332,,,,,,,,,,,,,,,,,286,,,283,,,52,,,54,,282,,", ",335,,,,,,,,338,337,341,340,,79,73,75,76,77,78,772,,,74,80,,,,63,64", "65,56,51,,53,,57,58,293,83,,61,,59,60,62,256,257,66,67,,,,,,255,288", "292,90,89,91,92,,,217,,,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,745,,333,331,330,735,332,,,,,,,,,,732,,,,,,,286,,,212,,,52,,,54,", ",,,,335,,,,,,,,338,337,341,340,,79,73,75,76,77,78,,,,74,80,,,,295,,", "56,,,53,,,,293,83,63,64,65,,51,,,733,57,58,,,,61,,59,60,62,256,257,66", "67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,,,237,238,,", ",,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224,223,220,221,232,230", "226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57", "58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,", "217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,-546", "-546,-546,-546,231,233,,,-546,-546,,,,,,239,240,,208,,,212,,,52,,,54", ",,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79,73,75,76,77", "78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257", "66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,,237", "238,,,,,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224,223,220,221", "232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51", ",53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225", ",,,,,,,,,,,,,,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224,223,220", "221,,,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225", "-546,-546,-546,-546,231,233,,,-546,-546,,,,,,239,240,,208,,,212,,,52", ",,54,,,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79,73,75,76", "77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,225,229,234,235,236,231,233,241,242", "237,238,,-546,-546,,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224", "223,220,221,232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,63", "64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288", "292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,,38,39,,225,-546,-546,-546,-546,231,233,,,-546,-546,,,,,,239,240", ",208,,,212,,,52,,,54,,,222,,228,40,224,223,220,221,232,230,226,216,227", ",,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,-546,-546,-546", "-546,231,233,,,-546,-546,,,,,,239,240,,208,,,212,,,52,,,54,,,222,,228", "40,224,223,220,221,232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80", ",,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,225,,,,,,,,,,,,,,,,239,240,,36,,,30,,,52", ",,54,,32,222,,228,40,224,223,220,221,,,226,18,227,,,,79,73,75,76,77", "78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257", "66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,225,-546,-546,-546,-546,231,233,,,-546", "-546,,,,,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224,223,220,221", "232,230,226,216,227,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51", ",53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92", ",,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,", ",,,,,,,,,,,,,,239,240,,208,,,212,,,52,,,54,,,222,,228,40,224,223,220", "221,,,226,18,227,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,225", "-546,-546,-546,-546,231,233,,,-546,-546,,,,,,239,240,,208,,,212,,,52", ",,54,,254,222,,228,40,224,223,220,221,232,230,226,216,227,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,259,88,95,96,,81,82,,38,39,,225,,,,,,,,,,,,,,,,239,240,,208", ",,212,,,52,,,54,,,222,,228,40,224,223,220,221,,,,216,,,,,79,73,75,76", "77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,", "59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94", "93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,225,,,,,,,,,,,,,,,,239,240", ",36,,,30,,,52,,,54,,32,222,,228,40,224,223,220,221,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61", ",59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94", "93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,", "30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63", "64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27", "90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,", "38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,", "79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,", "52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65", "56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89", "91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73", "75,76,77,78,,,,74,80,101,,,,,100,56,,,53,,,,37,83,63,64,65,,51,,,,57", "58,,,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217", ",,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,324,,333,331,330", ",332,,,,,,,,,,,,,,,,,353,,,30,,,52,,,54,,32,,,,335,319,,,,,,,338,337", "341,340,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,293", "83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,", ",,,,289,,,94,93,,84,50,86,85,358,,88,95,96,,81,82,745,,333,331,330,735", "332,,,,,,,,,,732,,,,364,,,359,,,212,,,52,,,54,,,,,,335,,,,,,,,338,337", "341,340,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,293,83,63,64,65", "8,51,,,733,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,", ",,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,", ",,,,,,,,,,,,,,,208,,,212,,,52,,,54,,254,,,,40,,,,,,,,216,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52", ",,54,,418,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65", "56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82", "324,,333,331,330,,332,,,,,,,,,,,,,,,,,286,,,283,,,52,,,54,,,,,,335,", "545,,,,,,338,337,341,340,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,293,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,745", ",333,331,330,735,332,,,,,,,,,,732,,,,,,,286,,,283,,,52,,,54,,,,,,335", "730,,,,,,,338,337,341,340,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53", ",,,293,83,63,64,65,8,51,,,733,57,58,,,,61,,59,60,62,23,24,66,67,,,,", ",22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,", ",,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65", "8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92", ",,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,", ",,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76", "77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,", "52,,,54,,,,252,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,", ",,22,28,27,90,89,91,92,,,17,,,,,,7,41,6,9,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40", ",,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,401,56,,,53,,,,37,83,63", "64,65,,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17", ",,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40", ",,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64", "65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,", ",,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61", ",59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,6,9,94", "93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,", "30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63", "64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288", "292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,644,,252,,40", ",,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63", "64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89", "91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73", "75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62", "256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,", "52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,", ",53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,", ",22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,", ",,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37", "83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,418,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74", "80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,", ",22,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,418,,,,40", ",,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57", "58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,217,", ",,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,", ",,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66", "67,,,,,,255,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87", "259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", "254,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,", ",37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18", ",,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80", ",,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22", "28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,", "81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,", "216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83", ",61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,", "94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208", ",,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,", "63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,", ",79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,", "59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,", ",94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208", ",,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,", ",63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216", ",,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,217,,,,,,,41,,,94", "93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,", ",212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,", "63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216", ",,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,756,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74", "80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,", ",,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40", ",,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63", "64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89", "91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73", "75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,450,52", ",,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52", ",,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212", ",,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,", ",,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80", ",,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,", "255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,", ",,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58", "37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217", ",,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66", "67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,", "53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91", "92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,", ",,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52", ",,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212", ",,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,", ",,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80", ",,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,", "255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,", ",,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58", "37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217", ",,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66", "67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,", "53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91", "92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,", ",,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52", ",,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212", ",,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,", ",,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80", ",,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,", "255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,", ",,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58", "37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217", ",,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66", "67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,", "53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91", "92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,", ",,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,", ",,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,254,,,,40,,,,,,,,216,,,,,79,73", "75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62", "256,257,66,67,,,,,,255,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84", "50,86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212", ",,52,,,54,,254,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63", "64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288", "292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216", ",,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51", ",,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17", ",,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,", ",,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77", "78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257", "66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54", ",,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51", ",53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89", "91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,", ",,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41", ",9,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,", ",36,,,30,,,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80", ",,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32", ",,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53", ",57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92", ",,217,,,,,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,,,,,,,,,,", ",,,,,,,,,,,,694,,,212,,,52,,,54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78", ",,,74,80,,,,63,64,65,56,51,,53,,57,58,293,83,,61,,59,60,62,256,257,66", "67,,,,,,255,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87", "259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", "254,,252,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27,90,89", "91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,499,,,54,,254,,252,,40,,,,,,,,216", ",,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,28,27,90,89,91,92,,,217,,,,,,,41,,", "94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,", ",208,,,212,,503,52,,,54,,254,,252,,40,,,,,,,,216,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30", ",,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,", ",,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40,,,", ",,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37", "83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,", ",,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,", ",,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,278", ",,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,644,,,,40,,,,,,,", "216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83", ",61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,", "94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208", ",,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,", "63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255", "288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,", ",216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37", "83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,", ",,,,289,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,", ",,,,286,,,212,,,52,,,54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80", ",,,511,,,56,,,53,,,,293,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,278,,,52,,,54", ",32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51", ",53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89", "91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73", "75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62", "256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,", "52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65", "56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,28,27,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,254,,,,40,,,,,,,,216", ",,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61", ",59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,289", ",,94,93,,84,50,86,85,87,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,286", ",,283,,,52,,,54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,,,,293,83,63,64,65,8,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,", ",,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,,54,,32,,,,40", ",,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,401,56,,,53,,,,37,83,63", "64,65,,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,208,,,212,,659,52,,,54,,,,252,,40,,,,,,,,18,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212", ",,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292", "90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,259,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,252,,40,,,,,,,", "216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83", ",61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,", ",41,,,94,93,,84,50,86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,", ",,,,,,,208,,,212,,,52,,,54,,644,,252,,40,,,,,,,,216,,,,,79,73,75,76", "77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,289,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,286,,,283,,,52,,,54", ",,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,", "57,58,293,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92", ",,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,", ",,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76", "77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256", "257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52", ",,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90", "89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,216,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,28,27,90,89,91,92,,,217,,,,,,,41,,,94,93,", "84,50,86,85,87,259,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,", "212,,,52,,,54,,254,,,,40,,,,,,,,216,,,,,79,73,75,76,77,78,,,,74,80,", ",,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,256,257,66,67,,,,,,255", "288,292,90,89,91,92,,,217,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,", ",216,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37", "83,,61,,59,60,62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,", ",,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,", ",,,,,,,208,,,212,528,,52,,,54,,,,,,40,,,,,,,,216,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,,,,37,83,63,64,65,8,51,,,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", ",84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30", ",,52,,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64", "65,56,51,,53,,57,58,37,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90", "89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79", "73,75,76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60", "62,256,257,66,67,,,,,,255,288,292,90,89,91,92,,,217,,,,,,,289,,,94,93", ",84,50,86,85,358,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,359,,,212,", ",52,,,54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,63,64,65,56", "51,,53,,57,58,293,83,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,,41,,,94,93,,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,,,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,63,64,65,56,51,,53,,57,58,37,83,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,208,,,212,,,52,,,54,", ",,,,40,,,,,,,,18,,,,-277,79,73,75,76,77,78,-277,-277,-277,74,80,,-277", "-277,,-277,,56,,,53,,,,37,83,,,,,,,,,,-277,-277,,-277,-277,-277,-277", "-277,,,,,,,,,,,,,,,,,,,,,,,,-277,-277,-277,-277,-277,-277,-277,-277", "-277,-277,-277,-277,-277,-277,,,-277,-277,-277,,628,,,,-277,,,,,,,-277", ",-277,,-277,-277,-277,-277,-277,-277,-277,,-277,,-277,,,,,,,,,,,,,-277", "-277,,-85,,-277,-277,,-277,,,-93,,-277,-277,-277,,,-277,-277,-277,,-277", ",,,,,,,,,-277,-277,,,,,,,,,-277,-277,,-277,-277,-277,-277,-277,,,,,", ",,,,,,,,,,,,,,,,,,-277,-277,-277,-277,-277,-277,-277,-277,-277,-277", "-277,-277,-277,-277,,,-277,-277,-277,,628,-277,,,-277,,,-277,,-277,", "-277,,-277,,-277,-277,-277,-277,-277,-277,-277,,-277,,-277,,,,,,,,,", ",,,-277,-277,-277,-277,,-277,-437,,-277,,,-93,,-437,-437,-437,,,-437", "-437,-437,,-437,,,,,,,,-437,,-437,-437,-437,,,,,,,,-437,-437,,-437,-437", "-437,-437,-437,,,,,,,,,,,,,,,,,,,,,,,,-437,-437,-437,-437,-437,-437", "-437,-437,-437,-437,-437,-437,-437,-437,,,-437,-437,-437,,-437,-437", ",,-437,,,-437,,-437,,-437,,-437,,-437,-437,-437,-437,-437,-437,-437", ",-437,,-437,,,,,,,,,,,,,-437,-437,-437,-437,,-437,-529,-437,-437,,,-437", ",-529,-529,-529,,,,-529,-529,,-529,,,,,,,,,-529,,,,,,,,,,,-529,-529", ",-529,-529,-529,-529,-529,,,,,,,,,,,,,,,,,,,,,,,,-529,-529,-529,-529", "-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,,,-529,-529,-529,", "625,,,,-529,,,,,,,-529,,-529,,-529,-529,-529,-529,-529,-529,-529,,-529", "-529,-529,,,,,,,,,,,,,-529,-529,,-83,,-529,-529,,-529,,,-91,,-529,-529", "-529,,,-529,-529,-529,,-529,,,,,,,,,-529,-529,-529,,,,,,,,,-529,-529", ",-529,-529,-529,-529,-529,,,,,,,,,,,,,,,,,,,,,,,,-529,-529,-529,-529", "-529,-529,-529,-529,-529,-529,-529,-529,-529,-529,,,-529,-529,-529,", "769,-529,,,-529,,,-529,,-529,,-529,,-529,,-529,-529,-529,-529,-529,-529", "-529,,-529,-529,-529,,,,,,,,,,,,,-529,-529,-529,-529,,-529,-440,,-529", ",,-91,,-440,-440,-440,,,-440,-440,-440,,-440,,,,,,,,-440,,-440,-440", "-440,,,,,,,,-440,-440,,-440,-440,-440,-440,-440,,,,,,,,,,,,,,,,,,,,", ",,,-440,-440,-440,-440,-440,-440,-440,-440,-440,-440,-440,-440,-440", "-440,,,-440,-440,-440,,-440,-440,,,-440,,,-440,,-440,,-440,,-440,,-440", "-440,-440,-440,-440,-440,-440,,-440,,-440,,,,,,,,,,,,,-440,-440,-440", "-440,,-440,-373,-440,-440,,,-440,,-373,-373,-373,,,-373,-373,-373,,-373", ",,,,,,,,-373,-373,-373,,,,,,,,,-373,-373,,-373,-373,-373,-373,-373,", ",,,,,,,,,,,,,,,,,,,,,,-373,-373,-373,-373,-373,-373,-373,-373,-373,-373", "-373,-373,-373,-373,,,-373,-373,-373,,,-373,,265,-373,,,-373,,-373,", "-373,,-373,,-373,-373,-373,-373,-373,-373,-373,,-373,-373,-373,,,,,", ",,,,,,,-373,-373,-373,-373,-530,-373,,,-373,,,-530,-530,-530,,,-530", "-530,-530,,-530,,,,,,,,,-530,-530,-530,-530,,,,,,,,-530,-530,,-530,-530", "-530,-530,-530,,,,,,,,,,,,,,,,,,,,,,,,-530,-530,-530,-530,-530,-530", "-530,-530,-530,-530,-530,-530,-530,-530,,,-530,-530,-530,,,-530,,,-530", ",,-530,,-530,,-530,,-530,,-530,-530,-530,-530,-530,-530,-530,,-530,-530", "-530,,,,,,,,,,,,,-530,-530,-530,-530,-545,-530,,-530,-530,,,-545,-545", "-545,,,-545,-545,-545,,-545,,,,,,,,,-545,-545,-545,,,,,,,,,-545,-545", ",-545,-545,-545,-545,-545,,,,,,,,,,,,,,,,,,,,,,,,-545,-545,-545,-545", "-545,-545,-545,-545,-545,-545,-545,-545,-545,-545,,,-545,-545,-545,", ",-545,,265,-545,,,-545,,-545,,-545,,-545,,-545,-545,-545,-545,-545,-545", "-545,,-545,-545,-545,,,,,,,,,,,,,-545,-545,-545,-545,-531,-545,,,-545", ",,-531,-531,-531,,,-531,-531,-531,,-531,,,,,,,,,-531,-531,-531,-531", ",,,,,,,-531,-531,,-531,-531,-531,-531,-531,,,,,,,,,,,,,,,,,,,,,,,,-531", "-531,-531,-531,-531,-531,-531,-531,-531,-531,-531,-531,-531,-531,,,-531", "-531,-531,,,-531,,,-531,,,-531,,-531,,-531,,-531,,-531,-531,-531,-531", "-531,-531,-531,,-531,-531,-531,,,,,,,,,,,,,-531,-531,-531,-531,-285", "-531,,-531,-531,,,-285,-285,-285,,,-285,-285,-285,,-285,,,,,,,,,,-285", "-285,,,,,,,,,-285,-285,,-285,-285,-285,-285,-285,,,,,,,,,,,,,,,,,,,", ",,,,-285,-285,-285,-285,-285,-285,-285,-285,-285,-285,-285,-285,-285", "-285,,,-285,-285,-285,,,-285,,274,-285,,,-285,,-285,,-285,,-285,,-285", "-285,-285,-285,-285,-285,-285,,-285,,-285,,,,,,,,,,,,,-285,-285,-285", "-285,-272,-285,,,-285,,,-272,-272,-272,,,-272,-272,-272,,-272,,,,,,", ",,,-272,-272,-272,,,,,,,,-272,-272,,-272,-272,-272,-272,-272,,,,,,,", ",,,,,,,,,,,,,,,,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272", "-272,-272,-272,,,-272,-272,-272,,,-272,,,-272,,,-272,,-272,,-272,,-272", ",-272,-272,-272,-272,-272,-272,-272,,-272,,-272,,,,,,,,,,,,,-272,-272", "-272,-272,-545,-272,,-272,-272,,,-545,-545,-545,,,-545,-545,-545,,-545", ",,,,,,,,,-545,,,,,,,,,,-545,-545,,-545,-545,-545,-545,-545,,,,,,,,,", ",,,-545,,,,,,,-545,-545,-545,,,-545,-545,-545,,-545,,,,,,-545,,,,-545", ",,-545,,,,,265,-545,-545,-545,,-545,-545,-545,-545,-545,,,,,,,,,,,,", "-545,,,,,,,,,,,,,-545,,-545,,,-545,,,,-545,,,,,,,-545,,,,,265,-545,", ",,,,,,,,,,,,,,,,,,,-545,,,,,,,,,,,,,-545,,-545,,,-545,156,167,157,180", "153,173,163,162,188,191,178,161,160,155,181,189,190,165,154,168,172", "174,166,159,,,,175,182,177,176,169,179,164,152,171,170,183,184,185,186", "187,151,158,149,150,147,148,,111,113,,,112,,,,,,,,,142,143,,139,121", "122,123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135", ",120,141,138,137,133,134,128,126,118,140,119,,,146,192,,,,,,,,,,80,156", "167,157,180,153,173,163,162,188,191,178,161,160,155,181,189,190,165", "154,168,172,174,166,159,,,,175,182,177,176,169,179,164,152,171,170,183", "184,185,186,187,151,158,149,150,147,148,,111,113,110,,112,,,,,,,,,142", "143,,139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,", ",,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,,,146,192", ",,,,,,,,,80,156,167,157,180,153,173,163,162,188,191,178,161,160,155", "181,189,190,165,154,168,172,174,166,159,,,,175,182,177,176,169,179,164", "152,171,170,183,184,185,186,187,151,158,149,150,147,148,,111,113,,,112", ",,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145,131", "132,,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119", ",,146,192,,,,,,,,,,80,156,167,157,180,153,173,163,162,188,191,178,161", "160,155,181,189,190,165,154,168,172,174,166,159,,,,175,182,177,176,169", "179,164,152,171,170,183,184,185,186,187,151,158,149,150,147,148,,111", "113,,,112,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125,,,", "144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126", "118,140,119,,,146,192,,,,,,,,,,80,156,167,157,180,153,173,163,162,188", "191,178,161,160,155,181,189,190,165,154,168,172,174,166,159,,,,175,182", "177,176,169,179,164,152,171,170,183,184,185,186,187,151,158,149,150", "147,148,,111,113,,,112,,,,,,,,,142,143,,139,121,122,123,130,127,129", ",,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133", "134,128,126,118,140,119,,,146,156,167,157,180,153,173,163,162,188,191", "178,161,160,155,181,189,190,165,154,168,172,174,166,159,,,,175,182,177", "176,169,179,164,152,171,170,183,184,185,186,187,151,158,149,150,147", "148,,111,113,395,394,112,,396,,,,,,,142,143,,139,121,122,123,130,127", "129,,,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138,137", "133,134,128,126,118,140,119,,,146,156,167,157,180,153,173,163,162,188", "191,178,161,160,155,181,189,190,165,154,168,172,174,166,159,,,,175,182", "177,176,169,179,164,152,171,170,183,184,185,186,187,151,158,149,150", "147,148,,111,113,395,394,112,,396,,,,,,,142,143,,139,121,122,123,130", "127,129,,,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138", "137,133,134,128,126,118,140,119,,,146,156,167,157,180,153,173,163,162", "188,191,178,161,160,155,181,189,190,165,154,168,172,174,166,159,,,,175", "182,177,373,372,374,371,152,171,170,183,184,185,186,187,151,158,149", "150,369,370,,367,113,86,85,368,,88,,,,,,,142,143,,139,121,122,123,130", "127,129,,,124,125,,,,144,145,131,132,,,,,,378,,,,,,,136,135,,120,141", "138,137,133,134,128,126,118,140,119,631,436,146,,632,,,,,,,,,142,143", ",139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,,,,,", ",,136,135,,120,141,138,137,133,134,128,126,118,140,119,487,430,146,", "488,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145", "131,132,,,,,,265,,,,,,,136,135,,120,141,138,137,133,134,128,126,118", "140,119,722,436,146,,720,,,,,,,,,142,143,,139,121,122,123,130,127,129", ",,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133", "134,128,126,118,140,119,629,430,146,,630,,,,,,,,,142,143,,139,121,122", "123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,265,,,,,,,136,135", ",120,141,138,137,133,134,128,126,118,140,119,717,436,146,,718,,,,,,", ",,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132", ",,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,715", "430,146,,716,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125", ",,,144,145,131,132,,,,,,265,,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,932,430,146,,933,,,,,,,,,142,143,,139,121,122,123,130", "127,129,,,124,125,,,,144,145,131,132,,,,,,265,,,,,,,136,135,,120,141", "138,137,133,134,128,126,118,140,119,934,436,146,,935,,,,,,,,,142,143", ",139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,,,,,", ",,136,135,,120,141,138,137,133,134,128,126,118,140,119,487,430,146,", "488,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145", "131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140", "119,487,430,146,,488,,,,,,,,,142,143,,139,121,122,123,130,127,129,,", "124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133", "134,128,126,118,140,119,631,436,146,,632,,,,,,,,,142,143,,139,121,122", "123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,,,,,,,,136,135,,120", "141,138,137,133,134,128,126,118,140,119,432,436,146,,434,,,,,,,,,142", "143,,139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,", ",,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,673,436,146", ",674,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145", "131,132,,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140", "119,670,430,146,,671,,,,,,,,,142,143,,139,121,122,123,130,127,129,,", "124,125,,,,144,145,131,132,,,,,,265,,,,,,,136,135,,120,141,138,137,133", "134,128,126,118,140,119,426,430,146,,427,,,,,,,,,142,143,,139,121,122", "123,130,127,129,,,124,125,,,,144,145,131,132,,,,,,265,,,,,,,136,135", ",120,141,138,137,133,134,128,126,118,140,119,722,436,146,,865,,,,,,", ",,142,143,,139,121,122,123,130,127,129,,,124,125,,,,144,145,131,132", ",,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,629", "430,146,,630,,,,,,,,,142,143,,139,121,122,123,130,127,129,,,124,125", ",,,144,145,131,132,,,,,,265,,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,,,146"]; + var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1; - racc_action_table = arr = Opal.get('Array').$new(23792, nil); + (function($base, $super) { + function $KeywordTable(){}; + var self = $KeywordTable = $klass($base, $super, 'KeywordTable', $KeywordTable); - idx = 0; + var def = self.$$proto, $scope = self.$$scope; - ($a = ($b = clist).$each, $a.$$p = (TMP_1 = function(str){var self = TMP_1.$$s || this, $a, $b, TMP_2; -if (str == null) str = nil; - return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_2 = function(i){var self = TMP_2.$$s || this, $a; -if (i == null) i = nil; - if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - arr['$[]='](idx, i.$to_i()) - }; - return idx = $rb_plus(idx, 1);}, TMP_2.$$s = self, TMP_2), $a).call($b)}, TMP_1.$$s = self, TMP_1), $a).call($b); + self.$attr_accessor("name", "id", "state"); - clist = ["0,0,0,0,0,345,816,673,0,0,55,727,727,0,71,0,0,0,0,0,0,0,71,358,669,477", "629,0,0,0,0,0,0,0,318,389,0,349,26,349,630,672,0,0,0,0,0,0,344,0,0,0", "0,0,665,0,0,0,477,0,0,577,0,0,351,685,363,907,685,907,354,594,594,673", "673,629,358,3,862,869,715,667,3,358,0,932,934,0,358,630,0,665,660,0", "933,0,55,389,716,0,727,718,815,26,675,727,657,0,97,358,816,673,0,0,0", "0,0,0,345,673,345,0,0,345,26,817,918,918,918,0,918,358,0,678,918,918", "0,0,318,918,717,918,918,918,918,918,918,918,307,307,568,831,831,918", "918,918,918,918,918,918,594,344,918,344,934,577,344,718,351,918,569", "363,918,918,354,918,918,918,918,918,918,918,918,918,715,918,918,427", "918,918,363,862,869,862,869,363,862,869,932,934,932,934,716,932,934", "718,717,933,679,933,918,445,933,918,653,815,918,815,815,918,815,918", "290,935,817,918,817,369,427,817,935,670,671,918,369,935,427,307,918", "918,918,918,918,918,717,367,836,918,918,568,681,568,367,501,568,918", "770,836,918,828,445,78,918,918,916,916,916,916,916,569,828,569,916,916", "569,680,680,916,935,916,916,916,916,916,916,916,501,290,193,836,836", "916,916,916,916,916,916,916,670,671,916,605,828,828,382,770,916,916", "290,916,916,916,386,916,916,916,916,916,207,916,916,916,380,916,916", "836,916,916,110,686,680,687,516,110,110,670,671,391,828,516,449,449", "834,670,671,209,690,834,916,373,692,916,384,921,916,384,373,916,834", "916,921,605,605,916,382,382,382,207,293,293,605,916,386,386,386,297", "916,916,916,916,916,916,380,380,380,916,916,516,834,834,834,834,500", "916,209,449,916,391,391,391,916,916,908,908,908,908,908,490,921,731", "908,908,384,384,731,908,297,908,908,908,908,908,908,908,297,500,834", "922,922,908,908,908,908,908,908,908,725,348,908,900,490,725,348,416", "908,908,900,908,908,908,35,908,908,908,908,908,693,908,908,908,643,908", "908,693,908,908,694,416,416,416,416,416,416,416,416,416,416,416,674", "416,416,720,275,416,416,674,908,275,720,908,674,35,908,720,900,908,426", "908,416,35,416,908,416,416,416,416,416,416,416,908,416,693,695,14,908", "908,908,908,908,908,361,696,897,908,908,13,416,361,416,897,587,908,13", "674,908,587,720,426,908,908,903,903,903,903,903,426,749,749,903,903", "749,749,749,903,14,903,903,903,903,903,903,903,14,311,699,618,311,903", "903,903,903,903,903,903,898,361,903,897,552,552,13,898,903,903,641,903", "903,903,633,903,903,903,903,903,300,903,903,903,704,903,903,300,903", "903,352,206,618,454,284,372,453,352,206,287,618,284,372,710,912,285", "287,371,712,912,903,370,285,903,371,898,903,77,370,903,912,903,714,785", "454,903,626,453,454,454,785,453,453,903,621,300,208,376,903,903,903", "903,903,903,376,352,206,903,903,284,912,912,912,912,287,903,314,210", "903,314,285,616,903,903,896,896,896,896,896,374,211,310,896,896,310", "722,374,896,785,896,896,896,896,896,896,896,343,343,912,83,83,896,896", "896,896,896,896,896,702,702,896,579,37,37,723,634,896,896,579,896,896", "896,609,896,896,896,896,896,940,896,896,896,217,896,896,940,896,896", "249,634,634,634,634,634,634,634,634,634,634,634,42,634,634,25,250,634", "634,42,896,253,25,896,15,15,896,571,579,896,570,896,634,734,634,896", "634,634,634,634,634,634,634,896,634,940,564,738,896,896,896,896,896", "896,801,739,741,896,896,742,634,743,894,894,894,896,894,42,896,368,894", "894,896,896,745,894,368,894,894,894,894,894,894,894,664,664,664,664", "664,894,894,894,894,894,894,894,559,748,894,555,801,801,801,801,264", "894,544,755,894,894,41,894,894,894,894,894,277,894,894,894,279,894,894", "531,894,894,530,656,656,656,656,656,656,656,656,656,656,656,529,656", "656,36,280,656,656,34,894,281,520,894,773,774,894,777,779,894,517,894", "656,894,656,894,656,656,656,656,656,656,656,894,656,782,783,784,894", "894,894,894,894,894,286,788,512,894,894,791,656,792,656,510,507,894", "546,506,894,807,288,810,894,894,877,877,877,877,877,502,20,289,877,877", "496,495,819,877,822,877,877,877,877,877,877,877,276,276,276,276,276", "877,877,877,877,877,877,877,823,824,877,492,546,546,546,546,877,877", "292,877,877,877,458,877,877,877,877,877,457,877,877,877,456,877,877", "455,877,877,846,476,476,476,476,476,476,476,476,476,476,476,847,476", "476,298,299,476,476,433,877,855,425,877,421,12,877,865,866,877,419,877", "476,871,476,877,476,476,476,476,476,476,476,877,476,872,11,10,877,877", "877,877,877,877,9,880,882,877,877,885,476,476,886,887,888,877,302,413", "877,407,388,385,877,877,874,874,874,874,874,899,309,6,874,874,359,355", "909,874,353,874,874,874,874,874,874,874,5,5,5,5,5,874,874,874,874,874", "874,874,350,560,874,560,560,560,917,560,874,874,1,874,874,874,342,874", "874,874,874,874,339,874,874,874,327,874,874,326,874,874,926,766,766", "766,766,766,766,766,766,766,766,766,928,766,766,929,931,766,766,324", "874,323,315,874,313,312,874,,,874,,874,766,,766,874,766,766,766,766", "766,766,766,874,766,,,,874,874,874,874,874,874,,,,874,874,,766,,873", "873,873,874,873,,874,,873,873,874,874,,873,,873,873,873,873,873,873", "873,,,,,,873,873,873,873,873,873,873,,806,873,806,806,806,,806,,873", ",,873,873,,873,873,873,873,873,,873,873,873,,873,873,,873,873,,849,849", "849,849,849,849,849,849,849,849,849,,849,849,,,849,849,,873,,,873,,", "873,,,873,,873,849,,849,873,849,849,849,849,849,849,849,873,849,,,,873", "873,873,873,873,873,,,,873,873,,849,,863,863,863,873,863,,873,,863,863", "873,873,,863,,863,863,863,863,863,863,863,,,,,,863,863,863,863,863,863", "863,,557,863,557,557,557,,557,,863,,,863,863,,863,863,863,863,863,,863", "863,863,,863,863,891,,891,891,891,891,891,,,,,,557,,,,891,,,,557,,,863", ",,863,472,,863,,,863,,,,,,891,891,,,,,,,891,891,891,891,,863,863,863", "863,863,863,,472,,863,863,472,472,472,472,,,863,,,863,,,,863,863,859", "859,859,859,859,,,891,859,859,,,,859,,859,859,859,859,859,859,859,,", ",,,859,859,859,859,859,859,859,,,859,,,,,,859,859,,859,859,859,,859", "859,859,859,859,,859,859,859,,859,859,,859,859,,439,439,439,439,439", "439,439,439,439,439,439,,439,439,,,439,439,,859,,,859,,,859,,,859,,859", "439,,439,859,439,439,439,439,439,439,439,859,439,,,,859,859,859,859", "859,859,,,,859,859,,439,,854,854,854,859,854,,859,,854,854,859,859,", "854,,854,854,854,854,854,854,854,,,,,,854,854,854,854,854,854,854,,", "854,,,,,,,854,,,854,854,,854,854,854,854,854,854,854,854,854,,854,854", ",854,854,,247,247,247,247,247,247,247,247,247,247,247,,247,247,,,247", "247,,854,,,854,,,854,,,854,,,247,854,247,854,247,247,247,247,247,247", "247,854,247,,,,854,854,854,854,854,854,,,,854,854,,247,,850,850,850", "854,850,,854,,850,850,854,854,,850,,850,850,850,850,850,850,850,,,,", ",850,850,850,850,850,850,850,,,850,,,,,,,850,,,850,850,,850,850,850", "850,850,,850,850,850,,850,850,,850,850,,527,527,527,527,527,527,527", "527,527,527,527,,527,527,,,527,527,,850,,,850,,,850,,,850,,,527,,527", "850,527,527,527,527,527,527,527,850,527,,,,850,850,850,850,850,850,", ",,850,850,,527,,17,17,17,850,17,,850,,17,17,850,850,,17,,17,17,17,17", "17,17,17,,,,,,17,17,17,17,17,17,17,,,17,,,,,,,17,,,17,17,,17,17,17,17", "17,,17,17,17,,17,17,,17,17,,424,424,424,424,424,424,424,424,424,424", "424,,424,424,,,424,424,,17,,,17,17,,17,,,17,,,424,,424,17,424,424,424", "424,424,424,424,17,424,,,,17,17,17,17,17,17,,,,17,17,,424,,18,18,18", "17,18,,17,,18,18,17,17,,18,,18,18,18,18,18,18,18,,,,,,18,18,18,18,18", "18,18,,,18,,,,,,,18,,,18,18,,18,18,18,18,18,,18,18,18,,18,18,,18,18", ",764,764,764,764,764,764,764,764,764,764,764,,764,764,,,764,764,,18", ",,18,,,18,,,18,,,764,,764,18,764,764,764,764,764,764,764,18,764,,,,18", "18,18,18,18,18,,,,18,18,,764,,838,838,838,18,838,,18,,838,838,18,18", ",838,,838,838,838,838,838,838,838,,,,,,838,838,838,838,838,838,838,", ",838,,,,,,,838,,,838,838,,838,838,838,838,838,,838,838,838,,838,838", ",838,838,,761,761,761,761,761,761,761,761,761,761,761,,761,761,,,761", "761,,838,,,838,,,838,,,838,,,761,,761,838,761,761,761,761,761,761,761", "838,761,,,,838,838,838,838,838,838,,,,838,838,,761,,,,,838,,,838,,,", "838,838,812,812,812,812,812,,,,812,812,,,,812,,812,812,812,812,812,812", "812,,,,,,812,812,812,812,812,812,812,,,812,,,,,,812,812,,812,812,812", ",812,812,812,812,812,,812,812,812,,812,812,,812,812,,677,677,677,677", "677,677,677,677,677,677,677,,677,677,,,677,677,,812,,,812,,,812,,,812", ",812,677,,677,812,677,677,677,677,677,677,677,812,677,,,,812,812,812", "812,812,812,,,,812,812,,677,,22,22,22,812,22,,812,,22,22,812,812,,22", ",22,22,22,22,22,22,22,,,,,,22,22,22,22,22,22,22,,,22,,,,,,,22,,,22,22", ",22,22,22,22,22,22,22,22,22,,22,22,,22,22,,19,19,19,19,19,19,19,19,19", "19,19,,19,19,,,19,19,,22,,,22,,,22,,,22,,22,19,22,19,22,19,19,19,19", "19,19,19,22,19,,,,22,22,22,22,22,22,,,,22,22,,19,,23,23,23,22,23,,22", ",23,23,22,22,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23", ",,,,,,23,,,23,23,,23,23,23,23,23,23,23,23,23,,23,23,,23,23,,754,754", "754,754,754,754,754,754,754,754,754,,754,754,,,754,754,,23,,,23,,,23", ",,23,,23,754,23,754,23,754,754,754,754,754,754,754,23,754,,,,23,23,23", "23,23,23,,,,23,23,,754,,24,24,24,23,24,,23,,24,24,23,23,,24,,24,24,24", "24,24,24,24,,,,,,24,24,24,24,24,24,24,,,24,,,,,,,24,,,24,24,,24,24,24", "24,24,24,24,24,24,,24,24,,24,24,,759,759,759,759,759,759,759,759,759", "759,759,,759,759,,,759,759,,24,,,24,,,24,,,24,,24,759,24,759,24,759", "759,759,759,759,759,759,24,759,,,,24,24,24,24,24,24,,,,24,24,,759,,", ",,24,,,24,,,,24,24,811,811,811,811,811,,,,811,811,,,,811,,811,811,811", "811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,,811,811", ",811,811,811,,811,811,811,811,811,,811,811,811,,811,811,,811,811,,771", "771,771,771,771,771,771,771,771,771,771,,771,771,,,771,771,,811,,,811", ",,811,,,811,,811,771,,771,811,771,771,771,771,771,771,771,811,771,,", ",811,811,811,811,811,811,,,,811,811,,771,,809,809,809,811,809,,811,", "809,809,811,811,,809,,809,809,809,809,809,809,809,,,,,,809,809,809,809", "809,809,809,,335,809,335,335,335,473,335,,809,,,809,809,,809,809,809", "809,809,,809,809,809,,809,809,,809,809,700,,700,700,700,,700,473,,335", ",473,473,473,473,,,335,,,809,,,809,461,,809,,,809,,,,,,809,,,700,,461", "461,,809,,,700,,809,809,809,809,809,809,,461,,809,809,461,461,461,461", ",,809,,,809,,,,809,809,790,790,790,790,790,,,,790,790,,,,790,,790,790", "790,790,790,790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,,,790", "790,,790,790,790,,790,790,790,790,790,,790,790,790,,790,790,,790,790", ",,,,,,,,,,,,,,,,,,,,790,,,790,,,790,,,790,,790,,,,790,,,550,,550,550", "550,790,550,,,,790,790,790,790,790,790,,,,790,790,,,,780,780,780,790", "780,,790,,780,780,790,790,,780,550,780,780,780,780,780,780,780,550,550", "550,550,,780,780,780,780,780,780,780,,,780,,,,,,,780,,,780,780,,780", "780,780,780,780,,780,780,780,,780,780,,780,780,,451,451,451,451,451", "451,451,451,451,451,451,,451,451,,,451,451,,780,,,780,,,780,,,780,,780", "451,,451,780,451,451,451,451,451,451,451,780,451,,,,780,780,780,780", "780,780,,,,780,780,,,,,,,780,,,780,,,,780,780,30,30,30,30,30,,,,30,30", ",,,30,,30,30,30,30,30,30,30,,,,,,30,30,30,30,30,30,30,,,30,,,,,,30,30", ",30,30,30,,30,30,30,30,30,,30,30,30,,30,30,,30,30,,464,,,,,,,,,,,,,", ",,464,464,,30,,,30,,,30,,,30,,30,464,,464,30,464,464,464,464,,,464,30", "464,,,,30,30,30,30,30,30,,,,30,30,,,,31,31,31,30,31,,30,,31,31,30,30", ",31,,31,31,31,31,31,31,31,,,,,,31,31,31,31,31,31,31,,,31,,,,,,,31,,", "31,31,,31,31,31,31,31,,31,31,31,,31,31,638,,638,638,638,,638,,,,,,,", ",,,,,,,,,31,,,31,,,31,,,31,,31,,,,638,,,,,,,,638,638,638,638,,31,31", "31,31,31,31,638,,,31,31,,,,32,32,32,31,32,,31,,32,32,31,31,,32,,32,32", "32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,,32,32", "32,32,32,,32,32,32,,32,32,832,,832,832,832,832,832,,,,,,,,,,832,,,,", ",,32,,,32,,,32,,,32,,,,,,832,,,,,,,,832,832,832,832,,32,32,32,32,32", "32,,,,32,32,,,,32,,,32,,,32,,,,32,32,769,769,769,,769,,,832,769,769", ",,,769,,769,769,769,769,769,769,769,,,,,,769,769,769,769,769,769,769", ",,769,,,,,,,769,,,769,769,,769,769,769,769,769,,769,769,769,,769,769", ",769,769,,474,474,474,474,474,474,474,,,474,474,,,,,,474,474,,769,,", "769,,,769,,,769,,,474,,474,769,474,474,474,474,474,474,474,769,474,", ",,769,769,769,769,769,769,,,,769,769,,,,768,768,768,769,768,,769,,768", "768,769,769,,768,,768,768,768,768,768,768,768,,,,,,768,768,768,768,768", "768,768,,,768,,,,,,,768,,,768,768,,768,768,768,768,768,,768,768,768", ",768,768,,768,768,,471,471,471,471,471,471,471,,,471,471,,,,,,471,471", ",768,,,768,,,768,,,768,,,471,,471,768,471,471,471,471,471,471,471,768", "471,,,,768,768,768,768,768,768,,,,768,768,,,,767,767,767,768,767,,768", ",767,767,768,768,,767,,767,767,767,767,767,767,767,,,,,,767,767,767", "767,767,767,767,,,767,,,,,,,767,,,767,767,,767,767,767,767,767,,767", "767,767,,767,767,,767,767,,475,475,475,475,475,475,475,475,,475,475", ",,,,,475,475,,767,,,767,,,767,,,767,,,475,,475,767,475,475,475,475,475", "475,475,767,475,,,,767,767,767,767,767,767,,,,767,767,,,,757,757,757", "767,757,,767,,757,757,767,767,,757,,757,757,757,757,757,757,757,,,,", ",757,757,757,757,757,757,757,,,757,,,,,,,757,,,757,757,,757,757,757", "757,757,,757,757,757,,757,757,,757,757,,463,,,,,,,,,,,,,,,,463,463,", "757,,,757,,,757,,,757,,,463,,463,757,463,463,463,463,,,463,757,463,", ",,757,757,757,757,757,757,,,,757,757,,,,38,38,38,757,38,,757,,38,38", "757,757,,38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,", ",,,38,,,38,38,,38,38,38,38,38,,38,38,38,,38,38,,38,38,,470,470,470,470", "470,470,470,,,470,470,,,,,,470,470,,38,,,38,,,38,,,38,,,470,,470,38", "470,470,470,470,470,470,470,38,470,,,,38,38,38,38,38,38,,,,38,38,,,", "39,39,39,38,39,,38,,39,39,38,38,,39,,39,39,39,39,39,39,39,,,,,,39,39", "39,39,39,39,39,,,39,,,,,,,39,,,39,39,,39,39,39,39,39,,39,39,39,,39,39", ",39,39,,452,452,452,452,452,452,452,452,452,452,452,,452,452,,,452,452", ",39,,,39,,,39,,,39,,,452,,452,39,452,452,452,452,452,452,452,39,452", ",,,39,39,39,39,39,39,,,,39,39,,,,40,40,40,39,40,,39,,40,40,39,39,,40", ",40,40,40,40,40,40,40,,,,,,40,40,40,40,40,40,40,,,40,,,,,,,40,,,40,40", ",40,40,40,40,40,,40,40,40,,40,40,,40,40,,468,468,468,468,468,468,468", ",,468,468,,,,,,468,468,,40,,,40,,,40,,,40,,,468,,468,40,468,468,468", "468,468,468,468,40,468,,,,40,40,40,40,40,40,,,,40,40,,,,756,756,756", "40,756,,40,,756,756,40,40,,756,,756,756,756,756,756,756,756,,,,,,756", "756,756,756,756,756,756,,,756,,,,,,,756,,,756,756,,756,756,756,756,756", ",756,756,756,,756,756,,756,756,,467,467,467,467,467,467,467,,,467,467", ",,,,,467,467,,756,,,756,,,756,,,756,,,467,,467,756,467,467,467,467,467", "467,467,756,467,,,,756,756,756,756,756,756,,,,756,756,,,,,,,756,,,756", ",,,756,756,750,750,750,750,750,,,,750,750,,,,750,,750,750,750,750,750", "750,750,,,,,,750,750,750,750,750,750,750,,,750,,,,,,750,750,,750,750", "750,,750,750,750,750,750,,750,750,750,,750,750,,750,750,,466,,,,,,,", ",,,,,,,,466,466,,750,,,750,,,750,,,750,,750,466,,466,750,466,466,466", "466,,,466,750,466,,,,750,750,750,750,750,750,,,,750,750,,,,736,736,736", "750,736,,750,,736,736,750,750,,736,,736,736,736,736,736,736,736,,,,", ",736,736,736,736,736,736,736,,,736,,,,,,,736,,,736,736,,736,736,736", "736,736,,736,736,736,,736,736,,736,736,,462,462,462,462,462,462,462", ",,462,462,,,,,,462,462,,736,,,736,,,736,,,736,,,462,,462,736,462,462", "462,462,462,462,462,736,462,,,,736,736,736,736,736,736,,,,736,736,,", ",52,52,52,736,52,,736,,52,52,736,736,,52,,52,52,52,52,52,52,52,,,,,", "52,52,52,52,52,52,52,,,52,,,,,,,52,,,52,52,,52,52,52,52,52,,52,52,52", ",52,52,,52,52,,465,,,,,,,,,,,,,,,,465,465,,52,,,52,,,52,,,52,,,465,", "465,52,465,465,465,465,,,465,52,465,,,,52,52,52,52,52,52,,,,52,52,,", ",53,53,53,52,53,,52,,53,53,52,52,,53,,53,53,53,53,53,53,53,,,,,,53,53", "53,53,53,53,53,,,53,,,,,,,53,,,53,53,,53,53,53,53,53,53,53,53,53,,53", "53,,53,53,,469,469,469,469,469,469,469,,,469,469,,,,,,469,469,,53,,", "53,,,53,,,53,,53,469,,469,53,469,469,469,469,469,469,469,53,469,,,,53", "53,53,53,53,53,,,,53,53,,,,54,54,54,53,54,,53,,54,54,53,53,,54,,54,54", "54,54,54,54,54,,,,,,54,54,54,54,54,54,54,,,54,,,,,,,54,,,54,54,,54,54", "54,54,54,54,54,54,54,,54,54,,54,54,,459,,,,,,,,,,,,,,,,459,459,,54,", ",54,,,54,,,54,,,459,,459,54,459,459,459,459,,,,54,,,,,54,54,54,54,54", "54,,,,54,54,,,,,,,54,,,54,,,,54,54,729,729,729,729,729,,,,729,729,,", ",729,,729,729,729,729,729,729,729,,,,,,729,729,729,729,729,729,729,", ",729,,,,,,729,729,,729,729,729,,729,729,729,729,729,,729,729,729,,729", "729,,729,729,,460,,,,,,,,,,,,,,,,460,460,,729,,,729,,,729,,,729,,729", "460,,460,729,460,460,460,460,,,,729,,,,,729,729,729,729,729,729,,,,729", "729,,,,,,,729,,,729,,,,729,729,728,728,728,728,728,,,,728,728,,,,728", ",728,728,728,728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728", ",,,,,728,728,,728,728,728,,728,728,728,728,728,,728,728,728,,728,728", ",728,728,,,,,,,,,,,,,,,,,,,,,728,,,728,,,728,,,728,,728,,,,728,,,,,", ",,728,,,,,728,728,728,728,728,728,,,,728,728,,,,57,57,57,728,57,,728", ",57,57,728,728,,57,,57,57,57,57,57,57,57,,,,,,57,57,57,57,57,57,57,", ",57,,,,,,,57,,,57,57,,57,57,57,57,57,,57,57,57,,57,57,,57,57,,,,,,,", ",,,,,,,,,,,,,57,,,57,,,57,,,57,,,,,,57,,,,,,,,57,,,,,57,57,57,57,57", "57,,,,57,57,,,,58,58,58,57,58,,57,,58,58,57,57,,58,,58,58,58,58,58,58", "58,,,,,,58,58,58,58,58,58,58,,,58,,,,,,,58,,,58,58,,58,58,58,58,58,", "58,58,58,,58,58,,58,58,,,,,,,,,,,,,,,,,,,,,58,,,58,,,58,,,58,,,,,,58", ",,,,,,,58,,,,,58,58,58,58,58,58,,,,58,58,,,,61,61,61,58,61,,58,,61,61", "58,58,,61,,61,61,61,61,61,61,61,,,,,,61,61,61,61,61,61,61,,,61,,,,,", ",61,,,61,61,,61,61,61,61,61,,61,61,61,,61,61,,61,61,,,,,,,,,,,,,,,,", ",,,,61,,,61,,,61,,,61,,,,,,61,,,,,,,,61,,,,,61,61,61,61,61,61,,,,61", "61,61,,,,,61,61,,,61,,,,61,61,62,62,62,,62,,,,62,62,,,,62,,62,62,62", "62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,,62,62,62", "62,62,,62,62,62,,62,62,56,,56,56,56,,56,,,,,,,,,,,,,,,,,62,,,62,,,62", ",,62,,62,,,,56,56,,,,,,,56,56,56,56,,62,62,62,62,62,62,,,,62,62,,,,63", "63,63,62,63,,62,,63,63,62,62,,63,,63,63,63,63,63,63,63,,,,,,63,63,63", "63,63,63,63,,,63,,,,,,,63,,,63,63,,63,63,63,63,63,,63,63,63,,63,63,730", ",730,730,730,730,730,,,,,,,,,,730,,,,63,,,63,,,63,,,63,,,63,,,,,,730", ",,,,,,,730,730,730,730,,63,63,63,63,63,63,,,,63,63,,,,,,,63,,,63,,,", "63,63,724,724,724,724,724,,,730,724,724,,,,724,,724,724,724,724,724", "724,724,,,,,,724,724,724,724,724,724,724,,,724,,,,,,724,724,,724,724", "724,,724,724,724,724,724,,724,724,724,,724,724,,724,724,,,,,,,,,,,,", ",,,,,,,,724,,,724,,,724,,,724,,724,,,,724,,,,,,,,724,,,,,724,724,724", "724,724,724,,,,724,724,,,,719,719,719,724,719,,724,,719,719,724,724", ",719,,719,719,719,719,719,719,719,,,,,,719,719,719,719,719,719,719,", ",719,,,,,,,719,,,719,719,,719,719,719,719,719,,719,719,719,,719,719", ",719,719,,,,,,,,,,,,,,,,,,,,,719,,,719,,,719,,,719,,,,,,719,,,,,,,,719", ",,,,719,719,719,719,719,719,,,,719,719,,,,713,713,713,719,713,,719,", "713,713,719,719,,713,,713,713,713,713,713,713,713,,,,,,713,713,713,713", "713,713,713,,,713,,,,,,,713,,,713,713,,713,713,713,713,713,,713,713", "713,,713,713,,713,713,,,,,,,,,,,,,,,,,,,,,713,,,713,,,713,,,713,,713", ",,,713,,,,,,,,713,,,,,713,713,713,713,713,713,,,,713,713,,,,682,682", "682,713,682,,713,,682,682,713,713,,682,,682,682,682,682,682,682,682", ",,,,,682,682,682,682,682,682,682,,,682,,,,,,,682,,,682,682,,682,682", "682,682,682,,682,682,682,,682,682,,682,682,,,,,,,,,,,,,,,,,,,,,682,", ",682,,,682,,,682,,682,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682", ",,,682,682,,,,676,676,676,682,676,,682,,676,676,682,682,,676,,676,676", "676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676", ",,676,676,,676,676,676,676,676,,676,676,676,,676,676,319,,319,319,319", ",319,,,,,,,,,,,,,,,,,676,,,676,,,676,,,676,,,,,,319,,319,,,,,,319,319", "319,319,,676,676,676,676,676,676,,,,676,676,,,,666,666,666,676,666,", "676,,666,666,676,676,,666,,666,666,666,666,666,666,666,,,,,,666,666", "666,666,666,666,666,,,666,,,,,,,666,,,666,666,,666,666,666,666,666,", "666,666,666,,666,666,590,,590,590,590,590,590,,,,,,,,,,590,,,,,,,666", ",,666,,,666,,,666,,,,,,590,590,,,,,,,590,590,590,590,,666,666,666,666", "666,666,,,,666,666,,,,,,,666,,,666,,,,666,666,662,662,662,662,662,,", "590,662,662,,,,662,,662,662,662,662,662,662,662,,,,,,662,662,662,662", "662,662,662,,,662,,,,,,662,662,,662,662,662,,662,662,662,662,662,,662", "662,662,,662,662,,662,662,,,,,,,,,,,,,,,,,,,,,662,,,662,,,662,,,662", ",662,,,,662,,,,,,,,662,,,,,662,662,662,662,662,662,,,,662,662,,,,,,", "662,,,662,,,,662,662,661,661,661,661,661,,,,661,661,,,,661,,661,661", "661,661,661,661,661,,,,,,661,661,661,661,661,661,661,,,661,,,,,,661", "661,,661,661,661,,661,661,661,661,661,,661,661,661,,661,661,,661,661", ",,,,,,,,,,,,,,,,,,,,661,,,661,,,661,,,661,,661,,,,661,,,,,,,,661,,,", ",661,661,661,661,661,661,,,,661,661,,,,655,655,655,661,655,,661,,655", "655,661,661,,655,,655,655,655,655,655,655,655,,,,,,655,655,655,655,655", "655,655,,,655,,,,,,,655,,,655,655,,655,655,655,655,655,655,655,655,655", ",655,655,,655,655,,,,,,,,,,,,,,,,,,,,,655,,,655,,,655,,,655,,,,655,", "655,,,,,,,,655,,,,,655,655,655,655,655,655,,,,655,655,,,,,,,655,,,655", ",,,655,655,99,99,99,99,99,,,,99,99,,,,99,,99,99,99,99,99,99,99,,,,,", "99,99,99,99,99,99,99,,,99,,,,,,99,99,99,99,99,99,,99,99,99,99,99,,99", "99,99,,99,99,,99,99,,,,,,,,,,,,,,,,,,,,,99,,,99,,,99,,,99,,99,,,,99", ",,,,,,,99,,,,,99,99,99,99,99,99,,,,99,99,,,,,,99,99,,,99,,,,99,99,103", "103,103,,103,,,,103,103,,,,103,,103,103,103,103,103,103,103,,,,,,103", "103,103,103,103,103,103,,,103,,,,,,,103,,,103,103,,103,103,103,103,103", ",103,103,103,,103,103,,103,103,,,,,,,,,,,,,,,,,,,,,103,,,103,,,103,", ",103,,,,,,103,,,,,,,,103,,,,,103,103,103,103,103,103,,,,103,103,,,,104", "104,104,103,104,,103,,104,104,103,103,,104,,104,104,104,104,104,104", "104,,,,,,104,104,104,104,104,104,104,,,104,,,,,,,104,,,104,104,,104", "104,104,104,104,,104,104,104,,104,104,,104,104,,,,,,,,,,,,,,,,,,,,,104", ",,104,,,104,,,104,,,,,,104,,,,,,,,104,,,,,104,104,104,104,104,104,,", ",104,104,,,,105,105,105,104,105,,104,,105,105,104,104,,105,,105,105", "105,105,105,105,105,,,,,,105,105,105,105,105,105,105,,,105,,,,,,,105", ",,105,105,,105,105,105,105,105,,105,105,105,,105,105,,105,105,,,,,,", ",,,,,,,,,,,,,,105,,,105,,,105,,,105,,,,,,105,,,,,,,,105,,,,,105,105", "105,105,105,105,,,,105,105,,,,106,106,106,105,106,,105,,106,106,105", "105,,106,,106,106,106,106,106,106,106,,,,,,106,106,106,106,106,106,106", ",,106,,,,,,,106,,,106,106,,106,106,106,106,106,,106,106,106,,106,106", ",106,106,,,,,,,,,,,,,,,,,,,,,106,,,106,,,106,,,106,,,,,,106,,,,,,,,106", ",,,,106,106,106,106,106,106,,,,106,106,,,,,,,106,,,106,,,,106,106,107", "107,107,107,107,,,,107,107,,,,107,,107,107,107,107,107,107,107,,,,,", "107,107,107,107,107,107,107,,,107,,,,,,107,107,,107,107,107,,107,107", "107,107,107,,107,107,107,,107,107,,107,107,,,,,,,,,,,,,,,,,,,,,107,", ",107,,,107,,,107,,107,,,,107,,,,,,,,107,,,,,107,107,107,107,107,107", ",,,107,107,,,,,,,107,,,107,,,,107,107,108,108,108,108,108,,,,108,108", ",,,108,,108,108,108,108,108,108,108,,,,,,108,108,108,108,108,108,108", ",,108,,,,,,108,108,108,108,108,108,,108,108,108,108,108,,108,108,108", ",108,108,,108,108,,,,,,,,,,,,,,,,,,,,,108,,,108,,,108,,,108,,108,,,", "108,,,,,,,,108,,,,,108,108,108,108,108,108,,,,108,108,,,,654,654,654", "108,654,,108,,654,654,108,108,,654,,654,654,654,654,654,654,654,,,,", ",654,654,654,654,654,654,654,,,654,,,,,,,654,,,654,654,,654,654,654", "654,654,654,654,654,654,,654,654,,654,654,,,,,,,,,,,,,,,,,,,,,654,,", "654,,,654,,,654,,654,,654,,654,,,,,,,,654,,,,,654,654,654,654,654,654", ",,,654,654,,,,,,,654,,,654,,,,654,654,651,651,651,651,651,,,,651,651", ",,,651,,651,651,651,651,651,651,651,,,,,,651,651,651,651,651,651,651", ",,651,,,,,,651,651,,651,651,651,,651,651,651,651,651,,651,651,651,,651", "651,,651,651,,,,,,,,,,,,,,,,,,,,,651,,,651,,,651,,,651,,651,,,,651,", ",,,,,,651,,,,,651,651,651,651,651,651,,,,651,651,,,,644,644,644,651", "644,,651,,644,644,651,651,,644,,644,644,644,644,644,644,644,,,,,,644", "644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,,644,644,644,644,644", ",644,644,644,,644,644,,644,644,,,,,,,,,,,,,,,,,,,,,644,,,644,,,644,", ",644,,,,,,644,,,,,,,,644,,,,,644,644,644,644,644,644,,,,644,644,,,,", ",,644,,,644,,,,644,644,195,195,195,195,195,,,,195,195,,,,195,,195,195", "195,195,195,195,195,,,,,,195,195,195,195,195,195,195,,,195,,,,,,195", "195,,195,195,195,,195,195,195,195,195,,195,195,195,,195,195,,195,195", ",,,,,,,,,,,,,,,,,,,,195,,,195,,,195,,,195,,195,,,,195,,,,,,,,195,,,", ",195,195,195,195,195,195,,,,195,195,,,,196,196,196,195,196,,195,,196", "196,195,195,,196,,196,196,196,196,196,196,196,,,,,,196,196,196,196,196", "196,196,,,196,,,,,,,196,,,196,196,,196,196,196,196,196,,196,196,196", ",196,196,,196,196,,,,,,,,,,,,,,,,,,,,,196,,,196,,,196,,,196,,196,,,", "196,,,,,,,,196,,,,,196,196,196,196,196,196,,,,196,196,,,,197,197,197", "196,197,,196,,197,197,196,196,,197,,197,197,197,197,197,197,197,,,,", ",197,197,197,197,197,197,197,,,197,,,,,,,197,,,197,197,,197,197,197", "197,197,,197,197,197,,197,197,,197,197,,,,,,,,,,,,,,,,,,,,,197,,,197", ",,197,,,197,,197,,,,197,,,,,,,,197,,,,,197,197,197,197,197,197,,,,197", "197,,,,198,198,198,197,198,,197,,198,198,197,197,,198,,198,198,198,198", "198,198,198,,,,,,198,198,198,198,198,198,198,,,198,,,,,,,198,,,198,198", ",198,198,198,198,198,,198,198,198,,198,198,,198,198,,,,,,,,,,,,,,,,", ",,,,198,,,198,,,198,,,198,,,,,,198,,,,,,,,198,,,,,198,198,198,198,198", "198,,,,198,198,,,,199,199,199,198,199,,198,,199,199,198,198,,199,,199", "199,199,199,199,199,199,,,,,,199,199,199,199,199,199,199,,,199,,,,,", ",199,,,199,199,,199,199,199,199,199,199,199,199,199,,199,199,,199,199", ",,,,,,,,,,,,,,,,,,,,199,,,199,,,199,,,199,,199,,,,199,,,,,,,,199,,,", ",199,199,199,199,199,199,,,,199,199,,,,,,,199,,,199,,,,199,199,640,640", "640,640,640,,,,640,640,,,,640,,640,640,640,640,640,640,640,,,,,,640", "640,640,640,640,640,640,,,640,,,,,,640,640,,640,640,640,,640,640,640", "640,640,,640,640,640,,640,640,,640,640,,,,,,,,,,,,,,,,,,,,,640,,,640", ",,640,,,640,,640,,,,640,,,,,,,,640,,,,,640,640,640,640,640,640,,,,640", "640,,,,636,636,636,640,636,,640,,636,636,640,640,,636,,636,636,636,636", "636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636,,,636,636", ",636,636,636,636,636,,636,636,636,,636,636,,636,636,,,,,,,,,,,,,,,,", ",,,,636,,,636,,,636,,,636,,,,,,636,,,,,,,,636,,,,,636,636,636,636,636", "636,,,,636,636,,,,202,202,202,636,202,,636,,202,202,636,636,,202,,202", "202,202,202,202,202,202,,,,,,202,202,202,202,202,202,202,,,202,,,,,", ",202,,,202,202,,202,202,202,202,202,,202,202,202,,202,202,,202,202,", ",,,,,,,,,,,,,,,,,,,202,,,202,,,202,,,202,,,,,,202,,,,,,,,202,,,,,202", "202,202,202,202,202,,,,202,202,,,,203,203,203,202,203,,202,,203,203", "202,202,,203,,203,203,203,203,203,203,203,,,,,,203,203,203,203,203,203", "203,,,203,,,,,,,203,,,203,203,,203,203,203,203,203,,203,203,203,,203", "203,,203,203,,,,,,,,,,,,,,,,,,,,,203,,,203,,,203,,,203,,,,,,203,,,,", ",,,203,,,,,203,203,203,203,203,203,,,,203,203,,,,204,204,204,203,204", ",203,,204,204,203,203,,204,,204,204,204,204,204,204,204,,,,,,204,204", "204,204,204,204,204,,,204,,,,,,,204,,,204,204,,204,204,204,204,204,", "204,204,204,,204,204,,204,204,,,,,,,,,,,,,,,,,,,,,204,,,204,,,204,,", "204,,,,,,204,,,,,,,,204,,,,,204,204,204,204,204,204,,,,204,204,,,,628", "628,628,204,628,,204,,628,628,204,204,,628,,628,628,628,628,628,628", "628,,,,,,628,628,628,628,628,628,628,,,628,,,,,,,628,,,628,628,,628", "628,628,628,628,,628,628,628,,628,628,,628,628,,,,,,,,,,,,,,,,,,,,,628", ",,628,,,628,,,628,,,,,,628,,,,,,,,628,,,,,628,628,628,628,628,628,,", ",628,628,,,,625,625,625,628,625,,628,,625,625,628,628,,625,,625,625", "625,625,625,625,625,,,,,,625,625,625,625,625,625,625,,,625,,,,,,,625", ",,625,625,,625,625,625,625,625,,625,625,625,,625,625,,625,625,,,,,,", ",,,,,,,,,,,,,,625,,,625,,,625,,,625,,,,,,625,,,,,,,,625,,,,,625,625", "625,625,625,625,,,,625,625,,,,620,620,620,625,620,,625,,620,620,625", "625,,620,,620,620,620,620,620,620,620,,,,,,620,620,620,620,620,620,620", ",,620,,,,,,,620,,,620,620,,620,620,620,620,620,,620,620,620,,620,620", ",620,620,,,,,,,,,,,,,,,,,,,,,620,,,620,,,620,,,620,,,,,,620,,,,,,,,620", ",,,,620,620,620,620,620,620,,,,620,620,,,,619,619,619,620,619,,620,", "619,619,620,620,,619,,619,619,619,619,619,619,619,,,,,,619,619,619,619", "619,619,619,,,619,,,,,,,619,,,619,619,,619,619,619,619,619,,619,619", "619,,619,619,,619,619,,,,,,,,,,,,,,,,,,,,,619,,,619,,,619,,,619,,,,", ",619,,,,,,,,619,,,,,619,619,619,619,619,619,,,,619,619,,,,617,617,617", "619,617,,619,,617,617,619,619,,617,,617,617,617,617,617,617,617,,,,", ",617,617,617,617,617,617,617,,,617,,,,,,,617,,,617,617,,617,617,617", "617,617,,617,617,617,,617,617,,617,617,,,,,,,,,,,,,,,,,,,,,617,,,617", ",,617,,,617,,617,,,,617,,,,,,,,617,,,,,617,617,617,617,617,617,,,,617", "617,,,,615,615,615,617,615,,617,,615,615,617,617,,615,,615,615,615,615", "615,615,615,,,,,,615,615,615,615,615,615,615,,,615,,,,,,,615,,,615,615", ",615,615,615,615,615,,615,615,615,,615,615,,615,615,,,,,,,,,,,,,,,,", ",,,,615,,,615,,,615,,,615,,,,,,615,,,,,,,,615,,,,,615,615,615,615,615", "615,,,,615,615,,,,,,,615,,,615,,,,615,615,212,212,212,212,212,,,,212", "212,,,,212,,212,212,212,212,212,212,212,,,,,,212,212,212,212,212,212", "212,,,212,,,,,,212,212,,212,212,212,,212,212,212,212,212,,212,212,212", ",212,212,,212,212,,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,,,212,,212,,,", "212,,,,,,,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,213,213,213", "212,213,,212,,213,213,212,212,,213,,213,213,213,213,213,213,213,,,,", ",213,213,213,213,213,213,213,,,213,,,,,,,213,,,213,213,,213,213,213", "213,213,,213,213,213,,213,213,,213,213,,,,,,,,,,,,,,,,,,,,,213,,,213", ",213,213,,,213,,,,,,213,,,,,,,,213,,,,,213,213,213,213,213,213,,,,213", "213,,,,216,216,216,213,216,,213,,216,216,213,213,,216,,216,216,216,216", "216,216,216,,,,,,216,216,216,216,216,216,216,,,216,,,,,,,216,,,216,216", ",216,216,216,216,216,,216,216,216,,216,216,,216,216,,,,,,,,,,,,,,,,", ",,,,216,,,216,,,216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216", "216,,,,216,216,,,,346,346,346,216,346,,216,,346,346,216,216,,346,,346", "346,346,346,346,346,346,,,,,,346,346,346,346,346,346,346,,,346,,,,,", ",346,,,346,346,,346,346,346,346,346,,346,346,346,,346,346,,346,346,", ",,,,,,,,,,,,,,,,,,,346,,,346,,,346,,,346,,,,,,346,,,,,,,,346,,,,,346", "346,346,346,346,346,,,,346,346,,,,218,218,218,346,218,,346,,218,218", "346,346,,218,,218,218,218,218,218,218,218,,,,,,218,218,218,218,218,218", "218,,,218,,,,,,,218,,,218,218,,218,218,218,218,218,,218,218,218,,218", "218,,218,218,,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,,,218,,,,,,218,,,,", ",,,218,,,,,218,218,218,218,218,218,,,,218,218,,,,219,219,219,218,219", ",218,,219,219,218,218,,219,,219,219,219,219,219,219,219,,,,,,219,219", "219,219,219,219,219,,,219,,,,,,,219,,,219,219,,219,219,219,219,219,", "219,219,219,,219,219,,219,219,,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,,", "219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219,219,,,,220", "220,220,219,220,,219,,220,220,219,219,,220,,220,220,220,220,220,220", "220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,,220", "220,220,220,220,,220,220,220,,220,220,,220,220,,,,,,,,,,,,,,,,,,,,,220", ",,220,,,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220,220,220,,", ",220,220,,,,221,221,221,220,221,,220,,221,221,220,220,,221,,221,221", "221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221", ",,221,221,,221,221,221,221,221,,221,221,221,,221,221,,221,221,,,,,,", ",,,,,,,,,,,,,,221,,,221,,,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221", "221,221,221,221,,,,221,221,,,,222,222,222,221,222,,221,,222,222,221", "221,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222,222,222,222", ",,222,,,,,,,222,,,222,222,,222,222,222,222,222,,222,222,222,,222,222", ",222,222,,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,,,222,,,,,,222,,,,,,,,222", ",,,,222,222,222,222,222,222,,,,222,222,,,,223,223,223,222,223,,222,", "223,223,222,222,,223,,223,223,223,223,223,223,223,,,,,,223,223,223,223", "223,223,223,,,223,,,,,,,223,,,223,223,,223,223,223,223,223,,223,223", "223,,223,223,,223,223,,,,,,,,,,,,,,,,,,,,,223,,,223,,,223,,,223,,,,", ",223,,,,,,,,223,,,,,223,223,223,223,223,223,,,,223,223,,,,224,224,224", "223,224,,223,,224,224,223,223,,224,,224,224,224,224,224,224,224,,,,", ",224,224,224,224,224,224,224,,,224,,,,,,,224,,,224,224,,224,224,224", "224,224,,224,224,224,,224,224,,224,224,,,,,,,,,,,,,,,,,,,,,224,,,224", ",,224,,,224,,,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224,224", ",,,225,225,225,224,225,,224,,225,225,224,224,,225,,225,225,225,225,225", "225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225,,,225,225,", "225,225,225,225,225,,225,225,225,,225,225,,225,225,,,,,,,,,,,,,,,,,", ",,,225,,,225,,,225,,,225,,,,,,225,,,,,,,,225,,,,,225,225,225,225,225", "225,,,,225,225,,,,226,226,226,225,226,,225,,226,226,225,225,,226,,226", "226,226,226,226,226,226,,,,,,226,226,226,226,226,226,226,,,226,,,,,", ",226,,,226,226,,226,226,226,226,226,,226,226,226,,226,226,,226,226,", ",,,,,,,,,,,,,,,,,,,226,,,226,,,226,,,226,,,,,,226,,,,,,,,226,,,,,226", "226,226,226,226,226,,,,226,226,,,,227,227,227,226,227,,226,,227,227", "226,226,,227,,227,227,227,227,227,227,227,,,,,,227,227,227,227,227,227", "227,,,227,,,,,,,227,,,227,227,,227,227,227,227,227,,227,227,227,,227", "227,,227,227,,,,,,,,,,,,,,,,,,,,,227,,,227,,,227,,,227,,,,,,227,,,,", ",,,227,,,,,227,227,227,227,227,227,,,,227,227,,,,228,228,228,227,228", ",227,,228,228,227,227,,228,,228,228,228,228,228,228,228,,,,,,228,228", "228,228,228,228,228,,,228,,,,,,,228,,,228,228,,228,228,228,228,228,", "228,228,228,,228,228,,228,228,,,,,,,,,,,,,,,,,,,,,228,,,228,,,228,,", "228,,,,,,228,,,,,,,,228,,,,,228,228,228,228,228,228,,,,228,228,,,,229", "229,229,228,229,,228,,229,229,228,228,,229,,229,229,229,229,229,229", "229,,,,,,229,229,229,229,229,229,229,,,229,,,,,,,229,,,229,229,,229", "229,229,229,229,,229,229,229,,229,229,,229,229,,,,,,,,,,,,,,,,,,,,,229", ",,229,,,229,,,229,,,,,,229,,,,,,,,229,,,,,229,229,229,229,229,229,,", ",229,229,,,,230,230,230,229,230,,229,,230,230,229,229,,230,,230,230", "230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230,,,,,,,230", ",,230,230,,230,230,230,230,230,,230,230,230,,230,230,,230,230,,,,,,", ",,,,,,,,,,,,,,230,,,230,,,230,,,230,,,,,,230,,,,,,,,230,,,,,230,230", "230,230,230,230,,,,230,230,,,,231,231,231,230,231,,230,,231,231,230", "230,,231,,231,231,231,231,231,231,231,,,,,,231,231,231,231,231,231,231", ",,231,,,,,,,231,,,231,231,,231,231,231,231,231,,231,231,231,,231,231", ",231,231,,,,,,,,,,,,,,,,,,,,,231,,,231,,,231,,,231,,,,,,231,,,,,,,,231", ",,,,231,231,231,231,231,231,,,,231,231,,,,232,232,232,231,232,,231,", "232,232,231,231,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232", "232,232,232,,,232,,,,,,,232,,,232,232,,232,232,232,232,232,,232,232", "232,,232,232,,232,232,,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,,,232,,,,", ",232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232,232,,,,233,233,233", "232,233,,232,,233,233,232,232,,233,,233,233,233,233,233,233,233,,,,", ",233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,,233,233,233", "233,233,,233,233,233,,233,233,,233,233,,,,,,,,,,,,,,,,,,,,,233,,,233", ",,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233", ",,,234,234,234,233,234,,233,,234,234,233,233,,234,,234,234,234,234,234", "234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,", "234,234,234,234,234,,234,234,234,,234,234,,234,234,,,,,,,,,,,,,,,,,", ",,,234,,,234,,,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234", "234,,,,234,234,,,,235,235,235,234,235,,234,,235,235,234,234,,235,,235", "235,235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,", ",235,,,235,235,,235,235,235,235,235,,235,235,235,,235,235,,235,235,", ",,,,,,,,,,,,,,,,,,,235,,,235,,,235,,,235,,,,,,235,,,,,,,,235,,,,,235", "235,235,235,235,235,,,,235,235,,,,236,236,236,235,236,,235,,236,236", "235,235,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236", "236,,,236,,,,,,,236,,,236,236,,236,236,236,236,236,,236,236,236,,236", "236,,236,236,,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,,,236,,,,,,236,,,,", ",,,236,,,,,236,236,236,236,236,236,,,,236,236,,,,237,237,237,236,237", ",236,,237,237,236,236,,237,,237,237,237,237,237,237,237,,,,,,237,237", "237,237,237,237,237,,,237,,,,,,,237,,,237,237,,237,237,237,237,237,", "237,237,237,,237,237,,237,237,,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,,", "237,,,,,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,238", "238,238,237,238,,237,,238,238,237,237,,238,,238,238,238,238,238,238", "238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238,238,,238", "238,238,238,238,,238,238,238,,238,238,,238,238,,,,,,,,,,,,,,,,,,,,,238", ",,238,,,238,,,238,,,,,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,", ",238,238,,,,239,239,239,238,239,,238,,239,239,238,238,,239,,239,239", "239,239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239", ",,239,239,,239,239,239,239,239,,239,239,239,,239,239,,239,239,,,,,,", ",,,,,,,,,,,,,,239,,,239,,,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239", "239,239,239,239,,,,239,239,,,,240,240,240,239,240,,239,,240,240,239", "239,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240", ",,240,,,,,,,240,,,240,240,,240,240,240,240,240,,240,240,240,,240,240", ",240,240,,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,,,240,,,,,,240,,,,,,,,240", ",,,,240,240,240,240,240,240,,,,240,240,,,,241,241,241,240,241,,240,", "241,241,240,240,,241,,241,241,241,241,241,241,241,,,,,,241,241,241,241", "241,241,241,,,241,,,,,,,241,,,241,241,,241,241,241,241,241,,241,241", "241,,241,241,,241,241,,,,,,,,,,,,,,,,,,,,,241,,,241,,,241,,,241,,,,", ",241,,,,,,,,241,,,,,241,241,241,241,241,241,,,,241,241,,,,242,242,242", "241,242,,241,,242,242,241,241,,242,,242,242,242,242,242,242,242,,,,", ",242,242,242,242,242,242,242,,,242,,,,,,,242,,,242,242,,242,242,242", "242,242,,242,242,242,,242,242,,242,242,,,,,,,,,,,,,,,,,,,,,242,,,242", ",,242,,,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242", ",,,243,243,243,242,243,,242,,243,243,242,242,,243,,243,243,243,243,243", "243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,,,243,,,243,243,", "243,243,243,243,243,,243,243,243,,243,243,,243,243,,,,,,,,,,,,,,,,,", ",,,243,,,243,,,243,,,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243", "243,,,,243,243,,,,586,586,586,243,586,,243,,586,586,243,243,,586,,586", "586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,", ",586,,,586,586,,586,586,586,586,586,,586,586,586,,586,586,,586,586,", ",,,,,,,,,,,,,,,,,,,586,,,586,,,586,,,586,,,,,,586,,,,,,,,586,,,,,586", "586,586,586,586,586,,,,586,586,,,,582,582,582,586,582,,586,,582,582", "586,586,,582,,582,582,582,582,582,582,582,,,,,,582,582,582,582,582,582", "582,,,582,,,,,,,582,,,582,582,,582,582,582,582,582,582,582,582,582,", "582,582,,582,582,,,,,,,,,,,,,,,,,,,,,582,,,582,,,582,,,582,,582,,,,582", ",,,,,,,582,,,,,582,582,582,582,582,582,,,,582,582,,,,574,574,574,582", "574,,582,,574,574,582,582,,574,,574,574,574,574,574,574,574,,,,,,574", "574,574,574,574,574,574,,,574,,,,,,,574,,,574,574,,574,574,574,574,574", "574,574,574,574,,574,574,,574,574,,,,,,,,,,,,,,,,,,,,,574,,,574,,,574", ",,574,,574,,,,574,,,,,,,,574,,,,,574,574,574,574,574,574,,,,574,574", ",,,252,252,252,574,252,,574,,252,252,574,574,,252,,252,252,252,252,252", "252,252,,,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,", "252,252,252,252,252,,252,252,252,,252,252,,252,252,,,,,,,,,,,,,,,,,", ",,,252,,,252,,,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252", "252,,,,252,252,,,,,,,252,,,252,,,,252,252,572,572,572,572,572,,,,572", "572,,,,572,,572,572,572,572,572,572,572,,,,,,572,572,572,572,572,572", "572,,,572,,,,,,572,572,,572,572,572,,572,572,572,572,572,,572,572,572", ",572,572,,572,572,,,,,,,,,,,,,,,,,,,,,572,,,572,,,572,,,572,,572,,,", "572,,,,,,,,572,,,,,572,572,572,572,572,572,,,,572,572,,,,254,254,254", "572,254,,572,,254,254,572,572,,254,,254,254,254,254,254,254,254,,,,", ",254,254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,,254,254,254", "254,254,,254,254,254,,254,254,,254,254,,,,,,,,,,,,,,,,,,,,,254,,,254", ",,254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254", ",,,259,259,259,254,259,,254,,259,259,254,254,,259,,259,259,259,259,259", "259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,", "259,259,259,259,259,,259,259,259,,259,259,,259,259,,,,,,,,,,,,,,,,,", ",,,259,,,259,,,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259", "259,,,,259,259,,,,,,,259,,,259,,,,259,259,567,567,567,567,567,,,,567", "567,,,,567,,567,567,567,567,567,567,567,,,,,,567,567,567,567,567,567", "567,,,567,,,,,,567,567,,567,567,567,,567,567,567,567,567,,567,567,567", ",567,567,,567,567,,,,,,,,,,,,,,,,,,,,,567,,,567,,,567,,,567,,567,,,", "567,,,,,,,,567,,,,,567,567,567,567,567,567,,,,567,567,,,,,,,567,,,567", ",,,567,567,563,563,563,563,563,,,,563,563,,,,563,,563,563,563,563,563", "563,563,,,,,,563,563,563,563,563,563,563,,,563,,,,,,563,563,,563,563", "563,,563,563,563,563,563,,563,563,563,,563,563,,563,563,,,,,,,,,,,,", ",,,,,,,,563,,,563,,,563,,,563,,563,,,,563,,,,,,,,563,,,,,563,563,563", "563,563,563,,,,563,563,,,,549,549,549,563,549,,563,,549,549,563,563", ",549,,549,549,549,549,549,549,549,,,,,,549,549,549,549,549,549,549,", ",549,,,,,,,549,,,549,549,,549,549,549,549,549,,549,549,549,,549,549", ",,,,,,,,,,,,,,,,,,,,,,,549,,,549,,,549,,,549,,,,,,,,,,,,,,,,,,,549,549", "549,549,549,549,,,,549,549,,,,265,265,265,549,265,,549,,265,265,549", "549,,265,,265,265,265,265,265,265,265,,,,,,265,265,265,265,265,265,265", ",,265,,,,,,,265,,,265,265,,265,265,265,265,265,265,265,265,265,,265", "265,,265,265,,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,,,265,,265,,265,,265", ",,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265,,,,266,266,266,265", "266,,265,,266,266,265,265,,266,,266,266,266,266,266,266,266,,,,,,266", "266,266,266,266,266,266,,,266,,,,,,,266,,,266,266,,266,266,266,266,266", "266,266,266,266,,266,266,,266,266,,,,,,,,,,,,,,,,,,,,,266,,,266,,,266", ",,266,,266,,266,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266,266", ",,,274,274,274,266,274,,266,,274,274,266,266,,274,,274,274,274,274,274", "274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274,,,274,274,", "274,274,274,274,274,274,274,274,274,,274,274,,274,274,,,,,,,,,,,,,,", ",,,,,,274,,,274,,274,274,,,274,,274,,274,,274,,,,,,,,274,,,,,274,274", "274,274,274,274,,,,274,274,,,,,,,274,,,274,,,,274,274,543,543,543,543", "543,,,,543,543,,,,543,,543,543,543,543,543,543,543,,,,,,543,543,543", "543,543,543,543,,,543,,,,,,543,543,,543,543,543,,543,543,543,543,543", ",543,543,543,,543,543,,543,543,,,,,,,,,,,,,,,,,,,,,543,,,543,,,543,", ",543,,543,,,,543,,,,,,,,543,,,,,543,543,543,543,543,543,,,,543,543,", ",,,,,543,,,543,,,,543,543,542,542,542,542,542,,,,542,542,,,,542,,542", "542,542,542,542,542,542,,,,,,542,542,542,542,542,542,542,,,542,,,,,", "542,542,,542,542,542,,542,542,542,542,542,,542,542,542,,542,542,,542", "542,,,,,,,,,,,,,,,,,,,,,542,,,542,,,542,,,542,,542,,,,542,,,,,,,,542", ",,,,542,542,542,542,542,542,,,,542,542,,,,537,537,537,542,537,,542,", "537,537,542,542,,537,,537,537,537,537,537,537,537,,,,,,537,537,537,537", "537,537,537,,,537,,,,,,,537,,,537,537,,537,537,537,537,537,537,537,537", "537,,537,537,,537,537,,,,,,,,,,,,,,,,,,,,,537,,,537,,,537,,,537,,,,", ",537,,,,,,,,537,,,,,537,537,537,537,537,537,,,,537,537,,,,,,,537,,,537", ",,,537,537,278,278,278,278,278,,,,278,278,,,,278,,278,278,278,278,278", "278,278,,,,,,278,278,278,278,278,278,278,,,278,,,,,,278,278,,278,278", "278,,278,278,278,278,278,,278,278,278,,278,278,,278,278,,,,,,,,,,,,", ",,,,,,,,278,,,278,,,278,,,278,,278,,,,278,,,,,,,,278,,,,,278,278,278", "278,278,278,,,,278,278,,,,534,534,534,278,534,,278,,534,534,278,278", ",534,,534,534,534,534,534,534,534,,,,,,534,534,534,534,534,534,534,", ",534,,,,,,,534,,,534,534,,534,534,534,534,534,534,534,534,534,,534,534", ",534,534,,,,,,,,,,,,,,,,,,,,,534,,,534,,,534,,,534,,534,,,,534,,,,,", ",,534,,,,,534,534,534,534,534,534,,,,534,534,,,,528,528,528,534,528", ",534,,528,528,534,534,,528,,528,528,528,528,528,528,528,,,,,,528,528", "528,528,528,528,528,,,528,,,,,,,528,,,528,528,,528,528,528,528,528,", "528,528,528,,528,528,,528,528,,,,,,,,,,,,,,,,,,,,,528,,,528,,,528,,", "528,,,,,,528,,,,,,,,528,,,,,528,528,528,528,528,528,,,,528,528,,,,524", "524,524,528,524,,528,,524,524,528,528,,524,,524,524,524,524,524,524", "524,,,,,,524,524,524,524,524,524,524,,,524,,,,,,,524,,,524,524,,524", "524,524,524,524,,524,524,524,,524,524,,524,524,,,,,,,,,,,,,,,,,,,,,524", ",,524,,,524,,,524,,,,,,524,,,,,,,,524,,,,,524,524,524,524,524,524,,", ",524,524,,,,282,282,282,524,282,,524,,282,282,524,524,,282,,282,282", "282,282,282,282,282,,,,,,282,282,282,282,282,282,282,,,282,,,,,,,282", ",,282,282,,282,282,282,282,282,,282,282,282,,282,282,,,,,,,,,,,,,,,", ",,,,,,,,282,,,282,,,282,,,282,,,,,,,,,,,,,,,,,,,282,282,282,282,282", "282,,,,282,282,,,,282,,,282,,,282,,,,282,282,283,283,283,283,283,,,", "283,283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283", "283,283,,,283,,,,,,283,283,,283,283,283,,283,283,283,283,283,,283,283", "283,,283,283,,283,283,,,,,,,,,,,,,,,,,,,,,283,,,283,,,283,,,283,,283", ",,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283,283,,,,523,523", "523,283,523,,283,,523,523,283,283,,523,,523,523,523,523,523,523,523", ",,,,,523,523,523,523,523,523,523,,,523,,,,,,,523,,,523,523,,523,523", "523,523,523,,523,523,523,,523,523,,523,523,,,,,,,,,,,,,,,,,,,,,523,", ",523,,,523,,,523,,,,,,523,,,,,,,,523,,,,,523,523,523,523,523,523,,,", "523,523,,,,522,522,522,523,522,,523,,522,522,523,523,,522,,522,522,522", "522,522,522,522,,,,,,522,522,522,522,522,522,522,,,522,,,,,,,522,,,522", "522,,522,522,522,522,522,,522,522,522,,522,522,,522,522,,,,,,,,,,,,", ",,,,,,,,522,,,522,,,522,,,522,,,,,,522,,,,,,,,522,,,,,522,522,522,522", "522,522,,,,522,522,,,,513,513,513,522,513,,522,,513,513,522,522,,513", ",513,513,513,513,513,513,513,,,,,,513,513,513,513,513,513,513,,,513", ",,,,,,513,,,513,513,,513,513,513,513,513,513,513,513,513,,513,513,,513", "513,,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,,,513,,513,,,,513,,,,,,,,513", ",,,,513,513,513,513,513,513,,,,513,513,,,,511,511,511,513,511,,513,", "511,511,513,513,,511,,511,511,511,511,511,511,511,,,,,,511,511,511,511", "511,511,511,,,511,,,,,,,511,,,511,511,,511,511,511,511,511,,511,511", "511,,511,511,,,,,,,,,,,,,,,,,,,,,,,,511,,,511,,,511,,,511,,,,,,,,,,", ",,,,,,,,511,511,511,511,511,511,,,,511,511,,,,,,,511,,,511,,,,511,511", "505,505,505,505,505,,,,505,505,,,,505,,505,505,505,505,505,505,505,", ",,,,505,505,505,505,505,505,505,,,505,,,,,,505,505,,505,505,505,,505", "505,505,505,505,,505,505,505,,505,505,,505,505,,,,,,,,,,,,,,,,,,,,,505", ",,505,,,505,,,505,,505,,,,505,,,,,,,,505,,,,,505,505,505,505,505,505", ",,,505,505,,,,,,505,505,,,505,,,,505,505,499,499,499,,499,,,,499,499", ",,,499,,499,499,499,499,499,499,499,,,,,,499,499,499,499,499,499,499", ",,499,,,,,,,499,,,499,499,,499,499,499,499,499,,499,499,499,,499,499", ",499,499,,,,,,,,,,,,,,,,,,,,,499,,,499,,499,499,,,499,,,,499,,499,,", ",,,,,499,,,,,499,499,499,499,499,499,,,,499,499,,,,483,483,483,499,483", ",499,,483,483,499,499,,483,,483,483,483,483,483,483,483,,,,,,483,483", "483,483,483,483,483,,,483,,,,,,,483,,,483,483,,483,483,483,483,483,", "483,483,483,,483,483,,483,483,,,,,,,,,,,,,,,,,,,,,483,,,483,,,483,,", "483,,,,,,483,,,,,,,,483,,,,,483,483,483,483,483,483,,,,483,483,,,,481", "481,481,483,481,,483,,481,481,483,483,,481,,481,481,481,481,481,481", "481,,,,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481,481,,481", "481,481,481,481,481,481,481,481,,481,481,,481,481,,,,,,,,,,,,,,,,,,", ",,481,,,481,,,481,,,481,,,,481,,481,,,,,,,,481,,,,,481,481,481,481,481", "481,,,,481,481,,,,479,479,479,481,479,,481,,479,479,481,481,,479,,479", "479,479,479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,", ",479,,,479,479,,479,479,479,479,479,479,479,479,479,,479,479,,479,479", ",,,,,,,,,,,,,,,,,,,,479,,,479,,,479,,,479,,479,,479,,479,,,,,,,,479", ",,,,479,479,479,479,479,479,,,,479,479,,,,295,295,295,479,295,,479,", "295,295,479,479,,295,,295,295,295,295,295,295,295,,,,,,295,295,295,295", "295,295,295,,,295,,,,,,,295,,,295,295,,295,295,295,295,295,,295,295", "295,,295,295,,,,,,,,,,,,,,,,,,,,,,,,295,,,295,,,295,,,295,,,,,,,,,,", ",,,,,,,,295,295,295,295,295,295,,,,295,295,,,,448,448,448,295,448,,295", ",448,448,295,295,,448,,448,448,448,448,448,448,448,,,,,,448,448,448", "448,448,448,448,,,448,,,,,,,448,,,448,448,,448,448,448,448,448,,448", "448,448,,448,448,,448,448,,,,,,,,,,,,,,,,,,,,,448,,,448,,,448,,,448", ",,,,,448,,,,,,,,448,,,,,448,448,448,448,448,448,,,,448,448,,,,447,447", "447,448,447,,448,,447,447,448,448,,447,,447,447,447,447,447,447,447", ",,,,,447,447,447,447,447,447,447,,,447,,,,,,,447,,,447,447,,447,447", "447,447,447,,447,447,447,,447,447,,447,447,,,,,,,,,,,,,,,,,,,,,447,", ",447,,,447,,,447,,,,,,447,,,,,,,,447,,,,,447,447,447,447,447,447,,,", "447,447,,,,446,446,446,447,446,,447,,446,446,447,447,,446,,446,446,446", "446,446,446,446,,,,,,446,446,446,446,446,446,446,,,446,,,,,,,446,,,446", "446,,446,446,446,446,446,,446,446,446,,446,446,,446,446,,,,,,,,,,,,", ",,,,,,,,446,,,446,,,446,,,446,,,,,,446,,,,,,,,446,,,,,446,446,446,446", "446,446,,,,446,446,,,,444,444,444,446,444,,446,,444,444,446,446,,444", ",444,444,444,444,444,444,444,,,,,,444,444,444,444,444,444,444,,,444", ",,,,,,444,,,444,444,,444,444,444,444,444,444,444,444,444,,444,444,,444", "444,,,,,,,,,,,,,,,,,,,,,444,,,444,,,444,,,444,,444,,,,444,,,,,,,,444", ",,,,444,444,444,444,444,444,,,,444,444,,,,418,418,418,444,418,,444,", "418,418,444,444,,418,,418,418,418,418,418,418,418,,,,,,418,418,418,418", "418,418,418,,,418,,,,,,,418,,,418,418,,418,418,418,418,418,,418,418", "418,,418,418,,418,418,,,,,,,,,,,,,,,,,,,,,418,,,418,,,418,,,418,,,,", ",418,,,,,,,,418,,,,,418,418,418,418,418,418,,,,418,418,,,,304,304,304", "418,304,,418,,304,304,418,418,,304,,304,304,304,304,304,304,304,,,,", ",304,304,304,304,304,304,304,,,304,,,,,,,304,,,304,304,,304,304,304", "304,304,,304,304,304,,304,304,,304,304,,,,,,,,,,,,,,,,,,,,,304,,,304", "304,,304,,,304,,,,,,304,,,,,,,,304,,,,,304,304,304,304,304,304,,,,304", "304,,,,,,,304,,,304,,,,304,304,306,306,306,306,306,,,,306,306,,,,306", ",306,306,306,306,306,306,306,,,,,,306,306,306,306,306,306,306,,,306", ",,,,,306,306,,306,306,306,,306,306,306,306,306,,306,306,306,,306,306", ",306,306,,,,,,,,,,,,,,,,,,,,,306,,,306,,,306,,,306,,306,,,,306,,,,,", ",,306,,,,,306,306,306,306,306,306,,,,306,306,,,,378,378,378,306,378", ",306,,378,378,306,306,,378,,378,378,378,378,378,378,378,,,,,,378,378", "378,378,378,378,378,,,378,,,,,,,378,,,378,378,,378,378,378,378,378,", "378,378,378,,378,378,,378,378,,,,,,,,,,,,,,,,,,,,,378,,,378,,,378,,", "378,,,,,,378,,,,,,,,378,,,,,378,378,378,378,378,378,,,,378,378,,,,366", "366,366,378,366,,378,,366,366,378,378,,366,,366,366,366,366,366,366", "366,,,,,,366,366,366,366,366,366,366,,,366,,,,,,,366,,,366,366,,366", "366,366,366,366,,366,366,366,,366,366,,,,,,,,,,,,,,,,,,,,,,,,366,,,366", ",,366,,,366,,,,,,,,,,,,,,,,,,,366,366,366,366,366,366,,,,366,366,,,", "347,347,347,366,347,,366,,347,347,366,366,,347,,347,347,347,347,347", "347,347,,,,,,347,347,347,347,347,347,347,,,347,,,,,,,347,,,347,347,", "347,347,347,347,347,,347,347,347,,347,347,,347,347,,,,,,,,,,,,,,,,,", ",,,347,,,347,,,347,,,347,,,,,,347,,,,,,,,347,,,,,347,347,347,347,347", "347,,,,347,347,,,,588,588,588,347,588,,347,,588,588,347,347,,588,,588", "588,588,588,588,588,588,,,,,,588,588,588,588,588,588,588,,,588,,,,,", ",588,,,588,588,,588,588,588,588,588,,588,588,588,,588,588,,588,588,", ",,,,,,,,,,,,,,,,,,,588,,,588,,,588,,,588,,,,,,588,,,,,,,,588,,,,434", "588,588,588,588,588,588,434,434,434,588,588,,434,434,,434,,588,,,588", ",,,588,588,,,,,,,,,,434,434,,434,434,434,434,434,,,,,,,,,,,,,,,,,,,", ",,,,434,434,434,434,434,434,434,434,434,434,434,434,434,434,,,434,434", "434,,434,,,,434,,,,,,,434,,434,,434,434,434,434,434,434,434,,434,,434", ",,,,,,,,,,,,434,434,,434,,434,632,,434,,,434,,632,632,632,,,632,632", "632,,632,,,,,,,,,,632,632,,,,,,,,,632,632,,632,632,632,632,632,,,,,", ",,,,,,,,,,,,,,,,,,632,632,632,632,632,632,632,632,632,632,632,632,632", "632,,,632,632,632,,632,632,,,632,,,632,,632,,632,,632,,632,632,632,632", "632,632,632,,632,,632,,,,,,,,,,,,,632,632,632,632,,632,84,,632,,,632", ",84,84,84,,,84,84,84,,84,,,,,,,,84,,84,84,84,,,,,,,,84,84,,84,84,84", "84,84,,,,,,,,,,,,,,,,,,,,,,,,84,84,84,84,84,84,84,84,84,84,84,84,84", "84,,,84,84,84,,84,84,,,84,,,84,,84,,84,,84,,84,84,84,84,84,84,84,,84", ",84,,,,,,,,,,,,,84,84,84,84,,84,432,84,84,,,84,,432,432,432,,,,432,432", ",432,,,,,,,,,432,,,,,,,,,,,432,432,,432,432,432,432,432,,,,,,,,,,,,", ",,,,,,,,,,,432,432,432,432,432,432,432,432,432,432,432,432,432,432,", ",432,432,432,,432,,,,432,,,,,,,432,,432,,432,432,432,432,432,432,432", ",432,432,432,,,,,,,,,,,,,432,432,,432,,432,631,,432,,,432,,631,631,631", ",,631,631,631,,631,,,,,,,,,631,631,631,,,,,,,,,631,631,,631,631,631", "631,631,,,,,,,,,,,,,,,,,,,,,,,,631,631,631,631,631,631,631,631,631,631", "631,631,631,631,,,631,631,631,,631,631,,,631,,,631,,631,,631,,631,,631", "631,631,631,631,631,631,,631,631,631,,,,,,,,,,,,,631,631,631,631,,631", "87,,631,,,631,,87,87,87,,,87,87,87,,87,,,,,,,,87,,87,87,87,,,,,,,,87", "87,,87,87,87,87,87,,,,,,,,,,,,,,,,,,,,,,,,87,87,87,87,87,87,87,87,87", "87,87,87,87,87,,,87,87,87,,87,87,,,87,,,87,,87,,87,,87,,87,87,87,87", "87,87,87,,87,,87,,,,,,,,,,,,,87,87,87,87,,87,27,87,87,,,87,,27,27,27", ",,27,27,27,,27,,,,,,,,,27,27,27,,,,,,,,,27,27,,27,27,27,27,27,,,,,,", ",,,,,,,,,,,,,,,,,27,27,27,27,27,27,27,27,27,27,27,27,27,27,,,27,27,27", ",,27,,27,27,,,27,,27,,27,,27,,27,27,27,27,27,27,27,,27,27,27,,,,,,,", ",,,,,27,27,27,27,436,27,,,27,,,436,436,436,,,436,436,436,,436,,,,,,", ",,436,436,436,436,,,,,,,,436,436,,436,436,436,436,436,,,,,,,,,,,,,,", ",,,,,,,,,436,436,436,436,436,436,436,436,436,436,436,436,436,436,,,436", "436,436,,,436,,,436,,,436,,436,,436,,436,,436,436,436,436,436,436,436", ",436,436,436,,,,,,,,,,,,,436,436,436,436,428,436,,436,436,,,428,428", "428,,,428,428,428,,428,,,,,,,,,428,428,428,,,,,,,,,428,428,,428,428", "428,428,428,,,,,,,,,,,,,,,,,,,,,,,,428,428,428,428,428,428,428,428,428", "428,428,428,428,428,,,428,428,428,,,428,,428,428,,,428,,428,,428,,428", ",428,428,428,428,428,428,428,,428,428,428,,,,,,,,,,,,,428,428,428,428", "437,428,,,428,,,437,437,437,,,437,437,437,,437,,,,,,,,,437,437,437,437", ",,,,,,,437,437,,437,437,437,437,437,,,,,,,,,,,,,,,,,,,,,,,,437,437,437", "437,437,437,437,437,437,437,437,437,437,437,,,437,437,437,,,437,,,437", ",,437,,437,,437,,437,,437,437,437,437,437,437,437,,437,437,437,,,,,", ",,,,,,,437,437,437,437,28,437,,437,437,,,28,28,28,,,28,28,28,,28,,,", ",,,,,,28,28,,,,,,,,,28,28,,28,28,28,28,28,,,,,,,,,,,,,,,,,,,,,,,,28", "28,28,28,28,28,28,28,28,28,28,28,28,28,,,28,28,28,,,28,,28,28,,,28,", "28,,28,,28,,28,28,28,28,28,28,28,,28,,28,,,,,,,,,,,,,28,28,28,28,50", "28,,,28,,,50,50,50,,,50,50,50,,50,,,,,,,,,,50,50,50,,,,,,,,50,50,,50", "50,50,50,50,,,,,,,,,,,,,,,,,,,,,,,,50,50,50,50,50,50,50,50,50,50,50", "50,50,50,,,50,50,50,,,50,,,50,,,50,,50,,50,,50,,50,50,50,50,50,50,50", ",50,,50,,,,,,,,,,,,,50,50,50,50,486,50,,50,50,,,486,486,486,,,486,486", "486,,486,,,,,,,,,,486,,,,,,,,,,486,486,,486,486,486,486,486,,,,,,,,", ",,,,489,,,,,,,489,489,489,,,489,489,489,,489,,,,,,486,,,,489,,,486,", ",,,486,486,489,489,,489,489,489,489,489,,,,,,,,,,,,,486,,,,,,,,,,,,", "486,,486,,,486,,,,489,,,,,,,489,,,,,489,489,,,,,,,,,,,,,,,,,,,,,489", ",,,,,,,,,,,,489,,489,,,489,408,408,408,408,408,408,408,408,408,408,408", "408,408,408,408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408", "408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408", ",408,408,,,408,,,,,,,,,408,408,,408,408,408,408,408,408,408,,,408,408", ",,,408,408,408,408,,,,,,,,,,,,,408,408,,408,408,408,408,408,408,408", "408,408,408,408,,,408,408,,,,,,,,,,408,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7", "7,7,7,7,7,7,7,7,7,,,,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,,7,7", "7,,7,,,,,,,,,7,7,,7,7,7,7,7,7,7,,,7,7,,,,7,7,7,7,,,,,,,,,,,,,7,7,,7", "7,7,7,7,7,7,7,7,7,7,,,7,7,,,,,,,,,,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", "8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,,", "8,,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,8,8,,8,8,8", "8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,8,412,412,412,412,412,412,412,412,412", "412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,,,,412,412", "412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412", "412,412,,412,412,,,412,,,,,,,,,412,412,,412,412,412,412,412,412,412", ",,412,412,,,,412,412,412,412,,,,,,,,,,,,,412,412,,412,412,412,412,412", "412,412,412,412,412,412,,,412,412,,,,,,,,,,412,747,747,747,747,747,747", "747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747", "747,,,,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747", "747,747,747,747,747,,747,747,,,747,,,,,,,,,747,747,,747,747,747,747", "747,747,747,,,747,747,,,,747,747,747,747,,,,,,,,,,,,,747,747,,747,747", "747,747,747,747,747,747,747,747,747,,,747,79,79,79,79,79,79,79,79,79", "79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,,,,79,79,79,79,79,79,79", "79,79,79,79,79,79,79,79,79,79,79,79,79,79,,79,79,79,79,79,,79,,,,,,", "79,79,,79,79,79,79,79,79,79,,,79,79,,,,79,79,79,79,,,,,,,,,,,,,79,79", ",79,79,79,79,79,79,79,79,79,79,79,,,79,192,192,192,192,192,192,192,192", "192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,,,,192", "192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192", "192,192,192,,192,192,192,192,192,,192,,,,,,,192,192,,192,192,192,192", "192,192,192,,,192,192,,,,192,192,192,192,,,,,,,,,,,,,192,192,,192,192", "192,192,192,192,192,192,192,192,192,,,192,65,65,65,65,65,65,65,65,65", "65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,,,,65,65,65,65,65,65,65", "65,65,65,65,65,65,65,65,65,65,65,65,65,65,,65,65,65,65,65,,65,,,,,,", "65,65,,65,65,65,65,65,65,65,,,65,65,,,,65,65,65,65,,,,,,65,,,,,,,65", "65,,65,65,65,65,65,65,65,65,65,65,65,443,443,65,,443,,,,,,,,,443,443", ",443,443,443,443,443,443,443,,,443,443,,,,443,443,443,443,,,,,,,,,,", ",,443,443,,443,443,443,443,443,443,443,443,443,443,443,583,583,443,", "583,,,,,,,,,583,583,,583,583,583,583,583,583,583,,,583,583,,,,583,583", "583,583,,,,,,583,,,,,,,583,583,,583,583,583,583,583,583,583,583,583", "583,583,581,581,583,,581,,,,,,,,,581,581,,581,581,581,581,581,581,581", ",,581,581,,,,581,581,581,581,,,,,,,,,,,,,581,581,,581,581,581,581,581", "581,581,581,581,581,581,442,442,581,,442,,,,,,,,,442,442,,442,442,442", "442,442,442,442,,,442,442,,,,442,442,442,442,,,,,,442,,,,,,,442,442", ",442,442,442,442,442,442,442,442,442,442,442,576,576,442,,576,,,,,,", ",,576,576,,576,576,576,576,576,576,576,,,576,576,,,,576,576,576,576", ",,,,,,,,,,,,576,576,,576,576,576,576,576,576,576,576,576,576,576,575", "575,576,,575,,,,,,,,,575,575,,575,575,575,575,575,575,575,,,575,575", ",,,575,575,575,575,,,,,,575,,,,,,,575,575,,575,575,575,575,575,575,575", "575,575,575,575,919,919,575,,919,,,,,,,,,919,919,,919,919,919,919,919", "919,919,,,919,919,,,,919,919,919,919,,,,,,919,,,,,,,919,919,,919,919", "919,919,919,919,919,919,919,919,919,920,920,919,,920,,,,,,,,,920,920", ",920,920,920,920,920,920,920,,,920,920,,,,920,920,920,920,,,,,,,,,,", ",,920,920,,920,920,920,920,920,920,920,920,920,920,920,262,262,920,", "262,,,,,,,,,262,262,,262,262,262,262,262,262,262,,,262,262,,,,262,262", "262,262,,,,,,,,,,,,,262,262,,262,262,262,262,262,262,262,262,262,262", "262,263,263,262,,263,,,,,,,,,263,263,,263,263,263,263,263,263,263,,", "263,263,,,,263,263,263,263,,,,,,,,,,,,,263,263,,263,263,263,263,263", "263,263,263,263,263,263,526,526,263,,526,,,,,,,,,526,526,,526,526,526", "526,526,526,526,,,526,526,,,,526,526,526,526,,,,,,,,,,,,,526,526,,526", "526,526,526,526,526,526,526,526,526,526,201,201,526,,201,,,,,,,,,201", "201,,201,201,201,201,201,201,201,,,201,201,,,,201,201,201,201,,,,,,", ",,,,,,201,201,,201,201,201,201,201,201,201,201,201,201,201,515,515,201", ",515,,,,,,,,,515,515,,515,515,515,515,515,515,515,,,515,515,,,,515,515", "515,515,,,,,,,,,,,,,515,515,,515,515,515,515,515,515,515,515,515,515", "515,514,514,515,,514,,,,,,,,,514,514,,514,514,514,514,514,514,514,,", "514,514,,,,514,514,514,514,,,,,,514,,,,,,,514,514,,514,514,514,514,514", "514,514,514,514,514,514,200,200,514,,200,,,,,,,,,200,200,,200,200,200", "200,200,200,200,,,200,200,,,,200,200,200,200,,,,,,200,,,,,,,200,200", ",200,200,200,200,200,200,200,200,200,200,200,799,799,200,,799,,,,,,", ",,799,799,,799,799,799,799,799,799,799,,,799,799,,,,799,799,799,799", ",,,,,,,,,,,,799,799,,799,799,799,799,799,799,799,799,799,799,799,525", "525,799,,525,,,,,,,,,525,525,,525,525,525,525,525,525,525,,,525,525", ",,,525,525,525,525,,,,,,525,,,,,,,525,525,,525,525,525,525,525,525,525", "525,525,525,525,,,525"]; + return (Opal.defn(self, '$initialize', function(name, id, state) { + var self = this; - racc_action_check = arr = Opal.get('Array').$new(23792, nil); + self.name = name; + self.id = id; + return self.state = state; + }), nil) && 'initialize'; + })($scope.base, null); - idx = 0; + Opal.cdecl($scope, 'KEYWORDS', ($a = ($b = [["__LINE__", ["k__LINE__", "k__LINE__"], "expr_end"], ["__FILE__", ["k__FILE__", "k__FILE__"], "expr_end"], ["alias", ["kALIAS", "kALIAS"], "expr_fname"], ["and", ["kAND", "kAND"], "expr_beg"], ["begin", ["kBEGIN", "kBEGIN"], "expr_beg"], ["break", ["kBREAK", "kBREAK"], "expr_mid"], ["case", ["kCASE", "kCASE"], "expr_beg"], ["class", ["kCLASS", "kCLASS"], "expr_class"], ["def", ["kDEF", "kDEF"], "expr_fname"], ["defined?", ["kDEFINED", "kDEFINED"], "expr_arg"], ["do", ["kDO", "kDO"], "expr_beg"], ["else", ["kELSE", "kELSE"], "expr_beg"], ["elsif", ["kELSIF", "kELSIF"], "expr_beg"], ["end", ["kEND", "kEND"], "expr_end"], ["ensure", ["kENSURE", "kENSURE"], "expr_beg"], ["false", ["kFALSE", "kFALSE"], "expr_end"], ["for", ["kFOR", "kFOR"], "expr_beg"], ["if", ["kIF", "kIF_MOD"], "expr_beg"], ["in", ["kIN", "kIN"], "expr_beg"], ["module", ["kMODULE", "kMODULE"], "expr_beg"], ["nil", ["kNIL", "kNIL"], "expr_end"], ["next", ["kNEXT", "kNEXT"], "expr_mid"], ["not", ["kNOT", "kNOT"], "expr_beg"], ["or", ["kOR", "kOR"], "expr_beg"], ["redo", ["kREDO", "kREDO"], "expr_end"], ["rescue", ["kRESCUE", "kRESCUE_MOD"], "expr_mid"], ["return", ["kRETURN", "kRETURN"], "expr_mid"], ["self", ["kSELF", "kSELF"], "expr_end"], ["super", ["kSUPER", "kSUPER"], "expr_arg"], ["then", ["kTHEN", "kTHEN"], "expr_beg"], ["true", ["kTRUE", "kTRUE"], "expr_end"], ["undef", ["kUNDEF", "kUNDEF"], "expr_fname"], ["unless", ["kUNLESS", "kUNLESS_MOD"], "expr_beg"], ["until", ["kUNTIL", "kUNTIL_MOD"], "expr_beg"], ["when", ["kWHEN", "kWHEN"], "expr_beg"], ["while", ["kWHILE", "kWHILE_MOD"], "expr_beg"], ["yield", ["kYIELD", "kYIELD"], "expr_arg"]]).$map, $a.$$p = (TMP_1 = function(decl){var self = TMP_1.$$s || this, $a; +if (decl == null) decl = nil; + return ($a = $scope.get('KeywordTable')).$new.apply($a, Opal.to_a(decl))}, TMP_1.$$s = self, TMP_1), $a).call($b)); - ($a = ($c = clist).$each, $a.$$p = (TMP_3 = function(str){var self = TMP_3.$$s || this, $a, $b, TMP_4; -if (str == null) str = nil; - return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_4 = function(i){var self = TMP_4.$$s || this, $a; -if (i == null) i = nil; - if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - arr['$[]='](idx, i.$to_i()) - }; - return idx = $rb_plus(idx, 1);}, TMP_4.$$s = self, TMP_4), $a).call($b)}, TMP_3.$$s = self, TMP_3), $a).call($c); + Opal.defs(self, '$map', function() { + var $a, $b, TMP_2, self = this; + if (self.map == null) self.map = nil; - racc_action_pointer = [-2, 1124, nil, -48, nil, 1063, 976, 21953, 22076, 949, 917, 916, 944, 447, 426, 730, nil, 1846, 1972, 2362, 921, nil, 2362, 2488, 2614, 679, 13, 20871, 21387, nil, 3280, 3406, 3532, nil, 759, 363, 828, 655, 4174, 4300, 4426, 727, 676, nil, nil, nil, nil, nil, nil, nil, 21516, nil, 4942, 5068, 5194, -15, 5998, 5596, 5722, nil, nil, 5848, 5986, 6112, nil, 22658, nil, nil, nil, nil, nil, -101, nil, nil, nil, nil, nil, 502, 132, 22434, nil, nil, nil, 642, 20347, nil, nil, 20740, nil, nil, nil, nil, nil, nil, nil, nil, nil, 108, nil, 7420, nil, nil, nil, 7558, 7684, 7810, 7936, 8074, 8212, nil, 275, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 22546, 160, nil, 8740, 8866, 8992, 9118, 9244, 23558, 23378, 9634, 9760, 9886, nil, 527, 231, 595, 258, 535, 597, 10780, 10906, nil, nil, 11032, 646, 11284, 11410, 11536, 11662, 11788, 11914, 12040, 12166, 12292, 12418, 12544, 12670, 12796, 12922, 13048, 13174, 13300, 13426, 13552, 13678, 13804, 13930, 14056, 14182, 14308, 14434, nil, nil, nil, 1594, nil, 614, 630, nil, 14938, 675, 15202, nil, nil, nil, nil, 15328, nil, nil, 23198, 23258, 750, 15856, 15982, nil, nil, nil, nil, nil, nil, nil, 16108, 357, 925, 767, 16648, 771, 793, 761, 17152, 17290, 530, 541, 867, 535, 848, 824, 197, nil, 896, 307, nil, 18574, nil, 288, 954, 955, 516, nil, 1005, nil, 19330, nil, 19468, 112, nil, 961, 560, 438, 1075, 1056, 545, 1078, nil, nil, 6, 6766, nil, nil, nil, 1037, 1027, nil, 1013, 1010, nil, nil, nil, nil, nil, nil, nil, 2864, nil, nil, nil, 1083, nil, nil, 1077, 664, 36, -7, 11158, 19846, 312, 23, 984, 40, 526, 1039, 46, 1067, nil, nil, -2, 1035, nil, 442, nil, 65, nil, nil, 19720, 167, 733, 149, 547, 543, 531, 271, 605, nil, 573, nil, 19594, nil, 262, nil, 244, nil, 292, 955, 252, nil, 954, -25, nil, 277, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 963, 21830, nil, nil, nil, 22199, 961, nil, nil, 400, nil, 19204, 908, nil, 902, nil, nil, 1846, 934, 409, 100, 21129, nil, nil, nil, 20478, 935, 20085, nil, 21000, 21258, nil, 1468, nil, nil, 22898, 22718, 19078, 124, 18952, 18826, 18700, 304, nil, 3142, 4300, 543, 540, 936, 933, 929, 923, 5194, 5332, 2901, 4816, 4048, 3280, 4942, 4690, 4552, 4426, 5068, 4174, 3796, 1353, 2853, 3670, 3922, 940, -50, nil, 18448, nil, 18322, nil, 18196, nil, nil, 21645, nil, nil, 21701, 332, nil, 854, nil, nil, 825, 824, nil, nil, 18070, 317, 178, 856, nil, nil, 17932, 844, 804, nil, nil, 803, 17794, 833, 17668, 23498, 23438, 254, 808, nil, nil, 762, nil, 17542, 17416, 17026, 23678, 23318, 1720, 16900, 873, 859, 774, nil, nil, 16774, nil, nil, 16510, nil, nil, nil, nil, 16384, 16246, 757, nil, 883, nil, nil, 15730, 3069, nil, 479, nil, nil, 750, nil, 1316, nil, 710, 1064, nil, nil, 15604, 776, nil, nil, 15466, 124, 144, 756, 760, 15076, nil, 14812, 23018, 22958, 37, nil, 637, nil, 22838, 14686, 22778, nil, nil, 14560, 405, 19972, nil, 6892, nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 241, nil, nil, nil, 597, nil, nil, nil, nil, nil, 10642, 547, 10516, 478, 10390, 10264, 552, nil, nil, nil, 10138, 544, nil, 10012, -61, -47, 20609, 20216, 494, 676, nil, 9508, nil, 3418, nil, 9382, 456, nil, 372, 8602, nil, nil, nil, nil, nil, nil, 8476, nil, 123, 8338, 7282, 802, -22, nil, nil, 1, 7156, 7018, nil, 787, -37, 6880, -47, nil, -70, 207, 208, -49, -17, 400, 14, 6754, 2236, 66, 141, 239, 236, 6628, nil, nil, -60, 217, 322, nil, nil, 210, nil, 222, 378, 411, 384, 393, nil, nil, 473, 2893, nil, 699, nil, 584, nil, nil, nil, nil, nil, 608, nil, 613, 6502, 542, 56, 74, 116, 77, 6376, 403, nil, 599, 624, 6250, 311, nil, -25, 5470, 5332, 6124, 284, nil, nil, 724, nil, 4816, nil, 661, 669, nil, 670, 673, 675, nil, 680, nil, 22322, 748, 493, 4690, nil, nil, nil, 2488, 721, 4552, 4048, nil, 2614, nil, 2098, nil, nil, 1972, nil, 1078, 3922, 3796, 3670, 169, 2752, nil, 784, 884, nil, nil, 783, nil, 768, 3142, nil, 801, 905, 787, 559, nil, nil, 915, nil, 3016, 799, 841, nil, nil, nil, nil, nil, nil, 23618, nil, 745, nil, nil, nil, nil, 1190, 928, nil, 2878, 930, 2752, 2236, nil, nil, 90, -18, 99, nil, 945, nil, nil, 947, 967, 852, nil, nil, nil, 203, nil, nil, 52, 3544, nil, 291, nil, 190, nil, 2098, nil, nil, nil, nil, nil, nil, nil, 894, 890, nil, 1204, 1720, nil, nil, nil, 1594, 899, nil, nil, nil, 1468, nil, nil, 66, 1330, nil, 943, 906, nil, nil, 67, nil, 1030, 1042, 1204, 1078, nil, nil, 940, nil, nil, 970, nil, 934, nil, nil, 937, 940, 941, 934, nil, nil, 1342, nil, nil, 802, nil, 676, 444, 496, 1030, 361, nil, nil, 538, nil, nil, nil, 53, 400, 1083, nil, nil, 567, nil, nil, nil, 262, 1113, 124, 23078, 23138, 275, 414, nil, nil, nil, 1135, nil, 1028, 1150, nil, 1066, 73, 82, 74, 145, nil, nil, nil, nil, 654]; + if ((($a = self.map) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.map = $hash2([], {}); + ($a = ($b = $scope.get('KEYWORDS')).$each, $a.$$p = (TMP_2 = function(k){var self = TMP_2.$$s || this; + if (self.map == null) self.map = nil; +if (k == null) k = nil; + return self.map['$[]='](k.$name(), k)}, TMP_2.$$s = self, TMP_2), $a).call($b); + }; + return self.map; + }); - racc_action_default = [-3, -546, -1, -534, -4, -6, -546, -546, -546, -546, -546, -546, -546, -546, -271, -36, -37, -546, -546, -42, -44, -45, -282, -320, -321, -49, -249, -249, -249, -61, -10, -65, -72, -74, -546, -448, -546, -546, -546, -546, -546, -536, -226, -264, -265, -266, -267, -268, -269, -270, -524, -273, -546, -545, -516, -290, -545, -546, -546, -295, -298, -534, -546, -546, -312, -546, -322, -323, -391, -392, -393, -394, -395, -545, -398, -545, -545, -545, -545, -545, -425, -431, -432, -546, -522, -438, -439, -523, -441, -442, -443, -444, -445, -446, -447, -450, -451, -546, -2, -535, -541, -542, -543, -546, -546, -546, -546, -546, -3, -13, -546, -100, -101, -102, -103, -104, -105, -106, -109, -110, -111, -112, -113, -114, -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -546, -18, -107, -10, -546, -546, -546, -545, -546, -546, -546, -546, -546, -40, -546, -448, -546, -271, -546, -546, -10, -546, -41, -218, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -362, -364, -46, -227, -242, -256, -256, -246, -546, -257, -546, -282, -320, -321, -518, -546, -47, -48, -546, -546, -53, -545, -546, -289, -367, -374, -376, -59, -372, -60, -546, -534, -11, -61, -10, -546, -546, -66, -69, -10, -80, -546, -546, -87, -285, -536, -546, -324, -373, -546, -71, -546, -76, -278, -433, -434, -546, -203, -204, -219, -546, -537, -10, -536, -228, -536, -538, -538, -546, -546, -538, -546, -291, -292, -546, -546, -335, -336, -343, -545, -482, -350, -545, -545, -361, -481, -483, -484, -485, -486, -487, -546, -500, -505, -506, -508, -509, -510, -546, -43, -546, -546, -546, -546, -534, -546, -535, -448, -546, -546, -271, -546, -489, -490, -96, -546, -98, -546, -271, -546, -309, -448, -546, -100, -101, -138, -139, -155, -160, -167, -170, -315, -546, -514, -546, -396, -546, -411, -546, -413, -546, -546, -546, -403, -546, -546, -409, -546, -424, -426, -427, -428, -429, -435, -436, 941, -5, -544, -19, -20, -21, -22, -23, -546, -546, -15, -16, -17, -546, -546, -25, -33, -183, -257, -546, -546, -26, -34, -35, -27, -185, -546, -525, -526, -249, -369, -527, -528, -525, -249, -526, -371, -527, -528, -32, -192, -38, -39, -546, -546, -545, -278, -546, -546, -546, -546, -288, -193, -194, -195, -196, -197, -198, -199, -200, -205, -206, -207, -208, -209, -210, -211, -212, -213, -214, -215, -216, -217, -220, -221, -222, -223, -546, -545, -243, -546, -244, -546, -254, -546, -258, -521, -249, -525, -526, -249, -545, -54, -536, -237, -238, -256, -256, -250, -251, -546, -545, -545, -546, -284, -9, -535, -546, -62, -276, -77, -67, -546, -546, -545, -546, -546, -86, -546, -433, -434, -73, -78, -546, -546, -546, -546, -546, -224, -546, -383, -546, -546, -229, -230, -540, -539, -232, -540, -280, -281, -517, -332, -10, -10, -546, -334, -546, -352, -359, -546, -356, -357, -546, -360, -482, -546, -491, -546, -493, -495, -499, -507, -511, -10, -325, -326, -327, -10, -546, -546, -546, -546, -10, -378, -545, -546, -546, -278, -304, -96, -97, -546, -545, -546, -307, -452, -546, -546, -546, -313, -480, -317, -532, -533, -536, -397, -412, -415, -416, -418, -399, -414, -400, -401, -402, -546, -405, -407, -408, -546, -430, -7, -14, -108, -24, -546, -263, -546, -279, -546, -546, -55, -235, -236, -368, -546, -57, -370, -546, -525, -526, -525, -526, -546, -183, -287, -546, -346, -546, -348, -10, -256, -255, -259, -546, -519, -520, -50, -365, -51, -366, -10, -233, -546, -239, -241, -42, -546, -248, -252, -546, -10, -10, -283, -12, -62, -546, -70, -75, -546, -525, -526, -545, -529, -85, -546, -546, -191, -201, -202, -546, -545, -545, -274, -275, -538, -546, -546, -333, -344, -546, -351, -545, -345, -546, -545, -545, -501, -488, -546, -546, -498, -545, -328, -545, -296, -329, -330, -331, -299, -546, -302, -546, -546, -546, -525, -526, -529, -277, -546, -96, -99, -529, -546, -10, -546, -454, -546, -10, -10, -480, -546, -457, -458, -460, -461, -463, -464, -513, -513, -469, -471, -471, -471, -479, -482, -503, -546, -546, -546, -10, -404, -406, -410, -184, -261, -546, -546, -29, -187, -30, -188, -56, -31, -189, -58, -190, -546, -546, -546, -279, -225, -347, -546, -546, -245, -260, -546, -234, -256, -546, -253, -546, -546, -68, -81, -79, -286, -545, -341, -10, -384, -545, -385, -386, -231, -337, -338, -358, -546, -278, -546, -354, -355, -492, -494, -497, -546, -339, -546, -546, -10, -10, -301, -303, -546, -279, -546, -279, -546, -453, -310, -546, -546, -536, -456, -459, -462, -546, -467, -468, -546, -546, -475, -546, -477, -546, -478, -546, -318, -515, -417, -420, -421, -422, -423, -546, -262, -28, -186, -546, -349, -363, -52, -240, -256, -375, -377, -8, -10, -390, -342, -546, -546, -388, -277, -545, -496, -293, -546, -294, -546, -546, -546, -10, -305, -308, -10, -314, -316, -546, -465, -513, -512, -470, -471, -471, -471, -546, -504, -502, -480, -419, -247, -546, -389, -10, -88, -546, -546, -95, -387, -353, -10, -297, -300, -259, -545, -10, -546, -455, -466, -546, -473, -474, -476, -10, -383, -545, -546, -546, -94, -545, -379, -380, -381, -546, -311, -471, -546, -382, -546, -525, -526, -529, -93, -340, -306, -472, -319, -89]; + Opal.defs(self, '$keyword', function(kw) { + var self = this; - clist = ["26,304,375,556,248,248,248,214,428,433,328,312,320,571,520,102,393,26", "26,5,363,98,26,26,26,530,563,567,281,729,26,109,194,480,689,309,548", "291,291,551,553,415,422,681,117,117,344,345,741,744,348,807,26,26,99", "533,536,26,26,540,697,26,580,891,788,306,645,2,291,291,486,489,491,102", "294,596,264,271,273,349,555,606,889,114,114,346,279,810,249,249,249", "811,402,403,404,405,705,709,347,26,250,250,250,26,26,26,26,26,26,277", "642,812,642,829,830,692,13,719,5,696,382,384,645,908,391,648,406,5,650", "393,658,724,314,206,206,588,877,366,206,206,206,114,728,246,260,261", "13,285,285,590,833,835,837,747,591,114,318,425,541,743,889,376,695,858", "584,355,400,193,206,206,640,268,272,206,206,407,357,206,352,361,245", "309,477,651,500,414,420,423,741,744,501,438,923,661,662,26,26,26,26", "26,713,792,26,26,26,862,379,380,317,12,386,605,26,26,316,13,389,841", "749,206,206,206,206,13,13,556,750,824,701,882,667,881,313,377,710,497", "885,660,408,12,645,652,805,492,1,,,248,248,517,428,433,,,,,248,911,280", ",,,419,419,,26,26,531,114,532,,936,,328,26,544,,437,26,480,,,,26,721", "642,642,102,291,689,924,,521,504,913,914,915,,,743,752,291,699,,,,26", ",12,,,13,206,206,206,206,12,12,206,206,206,,672,589,510,,505,,13,206", "916,495,249,672,506,568,569,938,,512,249,,697,496,250,875,26,26,,741", "744,,250,,,,,277,,,102,,277,,,,570,,556,,866,,291,,,585,,,26,,,206,206", "672,,784,494,498,,,206,672,,,13,502,,321,285,13,,886,633,887,12,798", ",,802,803,,285,,,381,,383,383,387,390,383,12,13,413,775,,309,,,762,795", "930,612,,765,268,613,272,14,645,280,,,819,26,117,,822,823,117,,,653", "740,,,,,,,743,,206,206,,,,,14,287,287,669,,,867,,,,621,,,928,361,626", "114,642,,12,114,,,,12,,206,309,,874,,26,354,362,,,,26,280,,521,,,280", ",26,,12,,291,,437,,,,,664,642,,793,26,,,,714,,,,647,14,,649,723,,26", "26,896,14,14,,,,,903,,,748,291,309,641,,,206,,775,26,309,,,26,,,,925", "26,623,26,725,,,627,902,706,706,26,,,,26,,26,,,437,328,740,773,,909", ",,726,,,437,,,,493,,758,760,,,685,,763,206,,,,26,26,13,,,,26,,285,,206", ",623,,14,623,929,,,893,,26,,,,206,,,,,,14,26,437,,,,,437,13,13,,26,26", "521,547,693,,547,547,,,,291,786,,,,,,13,,,291,13,839,,,,13,,206,883", ",,883,740,,740,206,740,,,206,,206,,,,817,,,,,,12,,14,,,26,287,14,,,26", ",,672,26,26,,,779,287,,206,206,820,,821,,206,,825,14,,848,,419,,26,12", "12,,740,,13,26,,,,,,,,,,13,,622,686,687,12,,,740,12,13,13,815,,12,285", ",880,,,,,,26,702,285,,,704,,,869,,712,,35,,362,,,,,26,,26,26,,,,,623", "637,,627,,,114,,,,622,,706,622,637,35,284,284,206,,,,,13,637,637,,13", "13,855,,,12,,,,,,,,10,,26,12,,,,351,365,13,365,774,291,12,12,,206,26", "437,931,26,,777,,,,,,,,10,,782,783,,,,,,26,,,,309,35,,26,,,13,,26,35", "35,,,,,,26,,26,356,,,,315,,206,,13,13,,,,,12,,,,12,12,,,,,14,,,,,,287", ",,,,,,10,,,12,,,,,10,10,,,,,,,,,,13,,,846,898,14,14,,,,,,362,,,13,,", "13,,,437,35,,12,,14,,,,14,,,,,14,,13,622,35,,,,861,13,12,12,789,794", "13,,,,,,,,13,547,206,,547,547,,871,872,,,789,,789,,,,,,,10,,,,,,,,,", ",,,417,421,,12,10,,,,,,,,,14,,35,,,12,284,35,12,895,,14,,,,,,,,284,", "14,14,,907,,287,12,205,,35,,,,12,,287,,,12,,,,482,,484,917,12,,,485", "860,,922,,864,,10,926,,,,10,307,,,,,343,343,,,343,,,,,,,,,,,,14,10,", ",14,14,365,,,,,,,,,,,,,,,,,,,845,14,,,,343,343,343,343,,,,,,,,,,,,547", ",,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,,,,,,789,14,14,,,,,,,,,,,,,789", ",,,,,,,,,,,,,,,,,,,,,,,616,,,,,440,441,,,,14,,,,900,449,,,,,35,,,,,14", "284,,14,,,,,,,,,,,,,,,,,,,14,,,,,,,14,,,35,35,14,,643,,315,365,646,", "14,215,,,,247,247,247,10,,,35,,,657,35,,,,,35,301,302,303,,,,,,,,,,", ",,247,247,,,,,,,,10,10,,,643,,,315,,,,,,,,,,,,,,10,,,,10,,,,,10,,,,", ",343,343,,,,,,35,,,,,,,,,,,35,,,,,,,,,,35,35,,,594,284,,,,,,,,,,284", ",,,,,,,755,,,,,,,,,,,10,,,,,,,,,,,10,,,,,776,,,,,10,10,,,,643,315,,35", ",,,35,35,,416,247,424,247,,,439,,,,,,,,,,,,791,35,215,,451,452,453,454", "455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471", "472,473,474,475,476,10,417,,,10,10,,307,247,,247,35,,,,247,,,,,,247", "247,,827,,10,,,,247,,35,35,,,680,,,,,,,,847,,,,,,,,,,,,,,,,527,,,,,", "10,,417,,,,,,,,,,,,35,,,,897,,,10,10,,,,,,343,35,727,,35,,,,,,,,,,,", ",,,,,,,35,,,,,,,35,,890,,,35,,,,,,10,,35,,901,,,315,,,,,,,,10,,,10,", ",,,,,,906,,,,,,,,,,,10,,247,,,,,10,,,906,,10,,,,,,,,10,,,,,,,,247,,439", "634,424,,,,,,,,,,,,,,,,,,,,,,,343,,,,,,,,247,,247,,247,,,,,,,,,,,,,", ",,656,,,,,,,,,,,,,,247,,,,,,,,,677,678,679,,,,,,,,,,247,,,247,,,,,,", ",,,,,,,,,,,,,,,,,343,,,,,,,,,,,,,247,,,,,,,,247,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,754,,247,,759,761,,,,,764,,,766,,,,,,,,771,,,,,,,,247,,", ",,,,,,,247,247,,,,,,,,,,,,,,,,,,,,,,,,,,,247,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,247,,,,,,,,,,,,,,,,,,,,,,,247,,,,,,,,,,,,,,,,,,,,247,849,,,,", ",,,,,759,761,764,,,,,,,,,,,247,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,247,,,,,,,,,,,,849,,,,247,,,,,,,,,,,,,,,,,,,247", ",,,,,,,,,,,,,,,,,,,,247,,,,,,,,,,,,,,,,,,,,,,,,247"]; + return self.$map()['$[]'](kw); + }); + })($scope.base) + })($scope.base) +}; - racc_goto_table = arr = Opal.get('Array').$new(2256, nil); +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser/lexer"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; - idx = 0; + Opal.add_stubs(['$require', '$|', '$attr_reader', '$attr_accessor', '$new', '$yylex', '$yylval', '$has_local?', '$scope', '$parser', '$to_sym', '$<<', '$&', '$>>', '$!=', '$include?', '$arg?', '$!', '$space?', '$check', '$after_operator?', '$scan', '$+', '$length', '$matched', '$pos=', '$-', '$pos', '$new_strterm', '$merge', '$yylval=', '$to_f', '$gsub', '$scanner', '$to_i', '$raise', '$peek', '$chr', '$%', '$[]', '$escape', '$peek_variable_name', '$bol?', '$eos?', '$read_escape', '$join', '$count', '$strterm', '$[]=', '$pushback', '$==', '$cond?', '$strterm=', '$add_string_content', '$line=', '$line', '$label_state?', '$end_with?', '$=~', '$keyword', '$state', '$name', '$id', '$cmdarg?', '$here_document', '$parse_string', '$skip', '$empty?', '$new_op_asgn', '$set_arg_state', '$spcarg?', '$beg?', '$===', '$new_strterm2', '$cond_push', '$cmdarg_push', '$cond_lexpop', '$cmdarg_lexpop', '$end?', '$heredoc_identifier', '$sub', '$inspect', '$process_numeric', '$process_identifier', '$size', '$pop', '$last']); + self.$require("opal/regexp_anchors"); + self.$require("strscan"); + self.$require("opal/parser/keywords"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - ($a = ($d = clist).$each, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this, $a, $b, TMP_6; -if (str == null) str = nil; - return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_6 = function(i){var self = TMP_6.$$s || this, $a; -if (i == null) i = nil; - if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - arr['$[]='](idx, i.$to_i()) - }; - return idx = $rb_plus(idx, 1);}, TMP_6.$$s = self, TMP_6), $a).call($b)}, TMP_5.$$s = self, TMP_5), $a).call($d); + var def = self.$$proto, $scope = self.$$scope; - clist = ["37,51,47,145,29,29,29,18,33,33,107,22,104,80,43,83,47,37,37,7,46,4,37", "37,37,8,77,77,41,84,37,14,14,61,106,29,109,52,52,109,109,24,24,10,50", "50,16,16,110,141,16,78,37,37,6,55,55,37,37,55,147,37,45,101,11,87,154", "2,52,52,33,33,35,83,42,129,34,34,34,4,148,129,151,48,48,88,39,11,54", "54,54,89,16,16,16,16,79,79,90,37,56,56,56,37,37,37,37,37,37,38,62,91", "62,142,142,111,21,92,7,111,126,126,154,93,126,60,7,7,60,47,62,94,56", "21,21,95,96,97,21,21,21,48,98,31,31,31,21,21,21,99,143,143,143,100,86", "48,102,22,103,111,151,85,105,12,82,81,5,15,21,21,36,57,57,21,21,2,19", "21,21,21,112,29,113,36,115,18,18,18,110,141,116,18,117,36,36,37,37,37", "37,37,118,119,37,37,37,120,124,125,76,20,127,128,37,37,74,21,130,131", "132,21,21,21,21,21,21,145,133,135,145,137,43,139,73,72,80,64,144,63", "27,20,154,59,149,58,1,,,29,29,51,33,33,,,,,29,142,9,,,,54,54,,37,37", "51,48,51,,78,,107,37,104,,48,37,61,,,,37,45,62,62,83,52,106,11,,41,4", "143,143,143,,,111,129,52,148,,,,37,,20,,,21,21,21,21,21,20,20,21,21", "21,,33,46,42,,6,,21,21,84,54,54,33,39,16,16,143,,39,54,,147,56,56,79", "37,37,,110,141,,56,,,,,38,,,83,,38,,,,4,,145,,111,,52,,,83,,,37,,,21", "21,33,,43,31,31,,,21,33,,,21,31,,53,21,21,,111,22,111,20,109,,,109,109", ",21,,,53,,53,53,53,53,53,20,21,9,61,,29,,,35,55,10,14,,35,57,14,57,23", "154,9,,,8,37,50,,8,8,50,,,51,108,,,,,,,111,,21,21,,,,,23,23,23,22,,", "145,,,,34,,,111,21,34,48,62,,20,48,,,,20,,21,29,,77,,37,23,23,,,,37", "9,,41,,,9,,37,,20,,52,,48,,,,,7,62,,24,37,,,,22,,,,34,23,,34,22,,37", "37,77,23,23,,,,,77,,,51,52,29,56,,,21,,61,37,29,,,37,,,,80,37,57,37", "16,,,57,109,83,83,37,,,,37,,37,,,48,107,108,104,,8,,,83,,,48,,,,53,", "18,18,,,56,,18,21,,,,37,37,21,,,,37,,21,,21,,57,,23,57,8,,,61,,37,,", ",21,,,,,,23,37,48,,,,,48,21,21,,37,37,41,53,21,,53,53,,,,52,41,,,,,", "21,,,52,21,47,,,,21,,21,108,,,108,108,,108,21,108,,,21,,21,,,,16,,,", ",,20,,23,,,37,23,23,,,37,,,33,37,37,,,56,23,,21,21,83,,83,,21,,83,23", ",18,,54,,37,20,20,,108,,21,37,,,,,,,,,,21,,53,9,9,20,,,108,20,21,21", "54,,20,21,,51,,,,,,37,9,21,,,9,,,16,,9,,44,,23,,,,,37,,37,37,,,,,57", "53,,57,,,48,,,,53,,83,53,53,44,44,44,21,,,,,21,53,53,,21,21,54,,,20", ",,,,,,,17,,37,20,,,,44,44,21,44,9,52,20,20,,21,37,48,22,37,,9,,,,,,", ",17,,9,9,,,,,,37,,,,29,44,,37,,,21,,37,44,44,,,,,,37,,37,17,,,,25,,21", ",21,21,,,,,20,,,,20,20,,,,,23,,,,,,23,,,,,,,17,,,20,,,,,17,17,,,,,,", ",,,21,,,9,21,23,23,,,,,,23,,,21,,,21,,,48,44,,20,,23,,,,23,,,,,23,,21", "53,44,,,,9,21,20,20,53,53,21,,,,,,,,21,53,21,,53,53,,9,9,,,53,,53,,", ",,,,17,,,,,,,,,,,,,25,25,,20,17,,,,,,,,,23,,44,,,20,44,44,20,9,,23,", ",,,,,,44,,23,23,,9,,23,20,26,,44,,,,20,,23,,,20,,,,25,,25,9,20,,,25", "53,,9,,53,,17,9,,,,17,26,,,,,26,26,,,26,,,,,,,,,,,,23,17,,,23,23,44", ",,,,,,,,,,,,,,,,,,23,23,,,,26,26,26,26,,,,,,,,,,,,53,,,,,,,,,,,,,,,", ",,,,,23,,,,,,,,,,,,,,,,,,,,53,23,23,,,,,,,,,,,,,53,,,,,,,,,,,,,,,,,", ",,,,,,25,,,,,26,26,,,,23,,,,23,26,,,,,44,,,,,23,44,,23,,,,,,,,,,,,,", ",,,,,23,,,,,,,23,,,44,44,23,,25,,25,44,25,,23,28,,,,28,28,28,17,,,44", ",,25,44,,,,,44,28,28,28,,,,,,,,,,,,,28,28,,,,,,,,17,17,,,25,,,25,,,", ",,,,,,,,,,17,,,,17,,,,,17,,,,,,26,26,,,,,,44,,,,,,,,,,,44,,,,,,,,,,44", "44,,,26,44,,,,,,,,,,44,,,,,,,,25,,,,,,,,,,,17,,,,,,,,,,,17,,,,,25,,", ",,17,17,,,,25,25,,44,,,,44,44,,28,28,28,28,,,28,,,,,,,,,,,,25,44,28", ",28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28", "28,28,28,17,25,,,17,17,,26,28,,28,44,,,,28,,,,,,28,28,,25,,17,,,,28", ",44,44,,,26,,,,,,,,25,,,,,,,,,,,,,,,,28,,,,,,17,,25,,,,,,,,,,,,44,,", ",44,,,17,17,,,,,,26,44,26,,44,,,,,,,,,,,,,,,,,,,44,,,,,,,44,,25,,,44", ",,,,,17,,44,,17,,,25,,,,,,,,17,,,17,,,,,,,,25,,,,,,,,,,,17,,28,,,,,17", ",,25,,17,,,,,,,,17,,,,,,,,28,,28,28,28,,,,,,,,,,,,,,,,,,,,,,,26,,,,", ",,,28,,28,,28,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,28,,,,,,,,,28,28,28,,,", ",,,,,,28,,,28,,,,,,,,,,,,,,,,,,,,,,,,26,,,,,,,,,,,,,28,,,,,,,,28,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,28,,28,28,,,,,28,,,28,,,,,,,,28,,,", ",,,,28,,,,,,,,,,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,28,28,,", ",,,,,,,28,28,28,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,28,,,,28,,,,,,,,,,,,,,,,,,,28,,,,,,", ",,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,28"]; + (function($base, $super) { + function $Lexer(){}; + var self = $Lexer = $klass($base, $super, 'Lexer', $Lexer); - racc_goto_check = arr = Opal.get('Array').$new(2256, nil); + var def = self.$$proto, $scope = self.$$scope; - idx = 0; + def.scanner = def.tok_line = def.tok_column = def.column = def.line = def.cond = def.cmdarg = def.lex_state = def.space_seen = def.yylval = def.scanner_stack = def.start_of_lambda = def.file = nil; + Opal.cdecl($scope, 'STR_FUNC_ESCAPE', 1); - ($a = ($e = clist).$each, $a.$$p = (TMP_7 = function(str){var self = TMP_7.$$s || this, $a, $b, TMP_8; -if (str == null) str = nil; - return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_8 = function(i){var self = TMP_8.$$s || this, $a; -if (i == null) i = nil; - if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - arr['$[]='](idx, i.$to_i()) - }; - return idx = $rb_plus(idx, 1);}, TMP_8.$$s = self, TMP_8), $a).call($b)}, TMP_7.$$s = self, TMP_7), $a).call($e); + Opal.cdecl($scope, 'STR_FUNC_EXPAND', 2); - racc_goto_pointer = [nil, 244, 67, nil, 18, 67, 51, 19, -281, 228, -486, -617, -625, nil, 24, 159, -11, 857, -11, 114, 209, 116, -42, 438, -155, 869, 1089, 129, 1337, -18, nil, 121, nil, -192, 50, -192, -307, 0, 79, 56, nil, -3, 42, -281, 802, -297, -43, -63, 76, nil, 37, -40, 6, 341, 66, -255, 78, 145, -22, -251, -361, -217, -369, -262, -31, nil, nil, nil, nil, nil, nil, nil, 168, 178, 159, nil, 152, -318, -651, -472, -336, 103, -199, 12, -561, 96, -222, 14, 26, -614, 38, -598, -461, -752, -453, -229, -685, 73, -447, -226, -438, -776, 100, -160, -44, -388, -512, -46, -137, -287, -542, -431, 160, -62, nil, -85, -80, -715, -373, -481, -587, nil, nil, nil, 135, 134, 45, 133, -175, -305, 138, -532, -380, -373, nil, -503, nil, -599, nil, -597, nil, -541, -625, -591, -596, -332, nil, -490, -255, -458, nil, -752, nil, nil, -415]; + Opal.cdecl($scope, 'STR_FUNC_REGEXP', 4); - racc_goto_default = [nil, nil, nil, 3, nil, 4, 350, 276, nil, 529, nil, 808, nil, 275, nil, nil, nil, 210, 16, 11, 211, 300, nil, 209, nil, 253, 15, nil, 19, 20, 21, nil, 25, 675, nil, nil, nil, 290, 29, nil, 31, 34, 33, nil, 207, 360, nil, 116, 431, 115, 69, nil, 42, 308, 310, nil, 311, 429, nil, nil, 624, 478, 251, nil, nil, 266, 43, 44, 45, 46, 47, 48, 49, nil, 267, 55, nil, nil, nil, nil, nil, nil, nil, 564, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 323, 322, 691, 325, nil, 326, 327, nil, nil, 435, nil, nil, nil, nil, nil, nil, 68, 70, 71, 72, nil, nil, nil, nil, 601, nil, nil, nil, nil, 392, 731, 734, 739, 736, 737, 738, 884, nil, nil, 742, 334, 329, 336, nil, 558, 559, 746, 339, 342, 258]; + Opal.cdecl($scope, 'STR_FUNC_QWORDS', 8); - racc_reduce_table = [0, 0, "racc_error", 1, 141, "_reduce_none", 2, 142, "_reduce_2", 0, 143, "_reduce_3", 1, 143, "_reduce_4", 3, 143, "_reduce_5", 1, 145, "_reduce_none", 4, 145, "_reduce_7", 4, 148, "_reduce_8", 2, 149, "_reduce_9", 0, 153, "_reduce_10", 1, 153, "_reduce_11", 3, 153, "_reduce_12", 0, 167, "_reduce_13", 4, 147, "_reduce_14", 3, 147, "_reduce_15", 3, 147, "_reduce_none", 3, 147, "_reduce_17", 2, 147, "_reduce_18", 3, 147, "_reduce_19", 3, 147, "_reduce_20", 3, 147, "_reduce_21", 3, 147, "_reduce_22", 3, 147, "_reduce_23", 4, 147, "_reduce_none", 3, 147, "_reduce_25", 3, 147, "_reduce_26", 3, 147, "_reduce_27", 6, 147, "_reduce_none", 5, 147, "_reduce_29", 5, 147, "_reduce_none", 5, 147, "_reduce_none", 3, 147, "_reduce_none", 3, 147, "_reduce_33", 3, 147, "_reduce_34", 3, 147, "_reduce_35", 1, 147, "_reduce_none", 1, 166, "_reduce_none", 3, 166, "_reduce_38", 3, 166, "_reduce_39", 2, 166, "_reduce_40", 2, 166, "_reduce_41", 1, 166, "_reduce_none", 1, 156, "_reduce_none", 1, 158, "_reduce_none", 1, 158, "_reduce_none", 2, 158, "_reduce_46", 2, 158, "_reduce_47", 2, 158, "_reduce_48", 1, 170, "_reduce_none", 4, 170, "_reduce_none", 4, 170, "_reduce_none", 4, 175, "_reduce_none", 2, 169, "_reduce_53", 3, 169, "_reduce_none", 4, 169, "_reduce_55", 5, 169, "_reduce_none", 4, 169, "_reduce_57", 5, 169, "_reduce_none", 2, 169, "_reduce_59", 2, 169, "_reduce_60", 1, 159, "_reduce_61", 3, 159, "_reduce_62", 1, 179, "_reduce_63", 3, 179, "_reduce_64", 1, 178, "_reduce_65", 2, 178, "_reduce_66", 3, 178, "_reduce_67", 5, 178, "_reduce_none", 2, 178, "_reduce_69", 4, 178, "_reduce_none", 2, 178, "_reduce_71", 1, 178, "_reduce_72", 3, 178, "_reduce_none", 1, 181, "_reduce_74", 3, 181, "_reduce_75", 2, 180, "_reduce_76", 3, 180, "_reduce_77", 1, 183, "_reduce_none", 3, 183, "_reduce_none", 1, 182, "_reduce_80", 4, 182, "_reduce_81", 3, 182, "_reduce_82", 3, 182, "_reduce_none", 3, 182, "_reduce_none", 3, 182, "_reduce_none", 2, 182, "_reduce_none", 1, 182, "_reduce_none", 1, 157, "_reduce_88", 4, 157, "_reduce_89", 3, 157, "_reduce_90", 3, 157, "_reduce_91", 3, 157, "_reduce_92", 3, 157, "_reduce_93", 2, 157, "_reduce_94", 1, 157, "_reduce_none", 1, 185, "_reduce_none", 2, 186, "_reduce_97", 1, 186, "_reduce_98", 3, 186, "_reduce_99", 1, 187, "_reduce_none", 1, 187, "_reduce_none", 1, 187, "_reduce_none", 1, 187, "_reduce_103", 1, 187, "_reduce_104", 1, 154, "_reduce_105", 1, 154, "_reduce_none", 1, 155, "_reduce_107", 3, 155, "_reduce_108", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 3, 168, "_reduce_183", 5, 168, "_reduce_184", 3, 168, "_reduce_185", 6, 168, "_reduce_186", 5, 168, "_reduce_187", 5, 168, "_reduce_none", 5, 168, "_reduce_none", 5, 168, "_reduce_none", 4, 168, "_reduce_none", 3, 168, "_reduce_none", 3, 168, "_reduce_193", 3, 168, "_reduce_194", 3, 168, "_reduce_195", 3, 168, "_reduce_196", 3, 168, "_reduce_197", 3, 168, "_reduce_198", 3, 168, "_reduce_199", 3, 168, "_reduce_200", 4, 168, "_reduce_201", 4, 168, "_reduce_202", 2, 168, "_reduce_203", 2, 168, "_reduce_204", 3, 168, "_reduce_205", 3, 168, "_reduce_206", 3, 168, "_reduce_207", 3, 168, "_reduce_208", 3, 168, "_reduce_209", 3, 168, "_reduce_210", 3, 168, "_reduce_211", 3, 168, "_reduce_212", 3, 168, "_reduce_213", 3, 168, "_reduce_214", 3, 168, "_reduce_215", 3, 168, "_reduce_216", 3, 168, "_reduce_217", 2, 168, "_reduce_218", 2, 168, "_reduce_219", 3, 168, "_reduce_220", 3, 168, "_reduce_221", 3, 168, "_reduce_222", 3, 168, "_reduce_223", 3, 168, "_reduce_224", 5, 168, "_reduce_225", 1, 168, "_reduce_none", 1, 165, "_reduce_none", 1, 162, "_reduce_228", 2, 162, "_reduce_229", 2, 162, "_reduce_230", 4, 162, "_reduce_231", 2, 162, "_reduce_232", 3, 197, "_reduce_233", 2, 199, "_reduce_none", 1, 200, "_reduce_235", 1, 200, "_reduce_none", 1, 198, "_reduce_237", 1, 198, "_reduce_none", 2, 198, "_reduce_239", 4, 198, "_reduce_240", 2, 198, "_reduce_241", 1, 171, "_reduce_242", 2, 171, "_reduce_243", 2, 171, "_reduce_244", 4, 171, "_reduce_245", 1, 171, "_reduce_246", 4, 203, "_reduce_none", 1, 203, "_reduce_none", 0, 205, "_reduce_249", 2, 174, "_reduce_250", 1, 204, "_reduce_none", 2, 204, "_reduce_252", 3, 204, "_reduce_253", 2, 202, "_reduce_254", 2, 201, "_reduce_255", 0, 201, "_reduce_256", 1, 194, "_reduce_257", 2, 194, "_reduce_258", 3, 194, "_reduce_259", 4, 194, "_reduce_260", 3, 164, "_reduce_261", 4, 164, "_reduce_262", 2, 164, "_reduce_263", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 0, 227, "_reduce_273", 4, 192, "_reduce_274", 4, 192, "_reduce_275", 3, 192, "_reduce_276", 3, 192, "_reduce_277", 2, 192, "_reduce_278", 4, 192, "_reduce_279", 3, 192, "_reduce_280", 3, 192, "_reduce_281", 1, 192, "_reduce_282", 4, 192, "_reduce_283", 3, 192, "_reduce_284", 1, 192, "_reduce_285", 5, 192, "_reduce_286", 4, 192, "_reduce_287", 3, 192, "_reduce_288", 2, 192, "_reduce_289", 1, 192, "_reduce_none", 2, 192, "_reduce_291", 2, 192, "_reduce_292", 6, 192, "_reduce_293", 6, 192, "_reduce_294", 0, 228, "_reduce_295", 0, 229, "_reduce_296", 7, 192, "_reduce_297", 0, 230, "_reduce_298", 0, 231, "_reduce_299", 7, 192, "_reduce_300", 5, 192, "_reduce_301", 4, 192, "_reduce_302", 5, 192, "_reduce_303", 0, 232, "_reduce_304", 0, 233, "_reduce_305", 9, 192, "_reduce_306", 0, 234, "_reduce_307", 6, 192, "_reduce_308", 0, 235, "_reduce_309", 0, 236, "_reduce_310", 8, 192, "_reduce_311", 0, 237, "_reduce_312", 0, 238, "_reduce_313", 6, 192, "_reduce_314", 0, 239, "_reduce_315", 6, 192, "_reduce_316", 0, 240, "_reduce_317", 0, 241, "_reduce_318", 9, 192, "_reduce_319", 1, 192, "_reduce_320", 1, 192, "_reduce_321", 1, 192, "_reduce_322", 1, 192, "_reduce_none", 1, 161, "_reduce_none", 1, 217, "_reduce_none", 1, 217, "_reduce_none", 1, 217, "_reduce_none", 2, 217, "_reduce_none", 1, 219, "_reduce_none", 1, 219, "_reduce_none", 1, 219, "_reduce_none", 2, 216, "_reduce_332", 3, 242, "_reduce_333", 2, 242, "_reduce_334", 1, 242, "_reduce_none", 1, 242, "_reduce_none", 3, 243, "_reduce_337", 3, 243, "_reduce_338", 1, 218, "_reduce_339", 5, 218, "_reduce_340", 1, 151, "_reduce_none", 2, 151, "_reduce_342", 1, 245, "_reduce_343", 3, 245, "_reduce_344", 3, 246, "_reduce_345", 1, 176, "_reduce_none", 2, 176, "_reduce_347", 1, 176, "_reduce_348", 3, 176, "_reduce_349", 1, 247, "_reduce_350", 2, 249, "_reduce_351", 1, 249, "_reduce_352", 6, 244, "_reduce_353", 4, 244, "_reduce_354", 4, 244, "_reduce_355", 2, 244, "_reduce_356", 2, 244, "_reduce_357", 4, 244, "_reduce_358", 2, 244, "_reduce_359", 2, 244, "_reduce_360", 1, 244, "_reduce_361", 0, 253, "_reduce_362", 5, 252, "_reduce_363", 2, 172, "_reduce_364", 4, 172, "_reduce_none", 4, 172, "_reduce_none", 2, 215, "_reduce_367", 4, 215, "_reduce_368", 3, 215, "_reduce_369", 4, 215, "_reduce_370", 3, 215, "_reduce_371", 2, 215, "_reduce_372", 1, 215, "_reduce_373", 0, 255, "_reduce_374", 5, 214, "_reduce_375", 0, 256, "_reduce_376", 5, 214, "_reduce_377", 0, 258, "_reduce_378", 6, 220, "_reduce_379", 1, 257, "_reduce_380", 1, 257, "_reduce_none", 6, 150, "_reduce_382", 0, 150, "_reduce_383", 1, 259, "_reduce_384", 1, 259, "_reduce_none", 1, 259, "_reduce_none", 2, 260, "_reduce_387", 1, 260, "_reduce_388", 2, 152, "_reduce_389", 1, 152, "_reduce_none", 1, 206, "_reduce_none", 1, 206, "_reduce_none", 1, 206, "_reduce_none", 1, 207, "_reduce_394", 1, 263, "_reduce_none", 2, 263, "_reduce_396", 3, 264, "_reduce_397", 1, 264, "_reduce_398", 3, 208, "_reduce_399", 3, 209, "_reduce_400", 3, 210, "_reduce_401", 3, 210, "_reduce_402", 1, 267, "_reduce_403", 3, 267, "_reduce_404", 1, 268, "_reduce_405", 2, 268, "_reduce_406", 3, 211, "_reduce_407", 3, 211, "_reduce_408", 1, 270, "_reduce_409", 3, 270, "_reduce_410", 1, 265, "_reduce_411", 2, 265, "_reduce_412", 1, 266, "_reduce_413", 2, 266, "_reduce_414", 1, 269, "_reduce_415", 0, 272, "_reduce_416", 3, 269, "_reduce_417", 0, 273, "_reduce_418", 4, 269, "_reduce_419", 1, 271, "_reduce_420", 1, 271, "_reduce_421", 1, 271, "_reduce_422", 1, 271, "_reduce_none", 2, 190, "_reduce_424", 1, 190, "_reduce_425", 1, 274, "_reduce_none", 1, 274, "_reduce_none", 1, 274, "_reduce_none", 1, 274, "_reduce_none", 3, 262, "_reduce_430", 1, 261, "_reduce_431", 1, 261, "_reduce_432", 2, 261, "_reduce_433", 2, 261, "_reduce_434", 2, 261, "_reduce_435", 2, 261, "_reduce_436", 1, 184, "_reduce_437", 1, 184, "_reduce_438", 1, 184, "_reduce_439", 1, 184, "_reduce_440", 1, 184, "_reduce_441", 1, 184, "_reduce_442", 1, 184, "_reduce_443", 1, 184, "_reduce_444", 1, 184, "_reduce_445", 1, 184, "_reduce_446", 1, 184, "_reduce_447", 1, 212, "_reduce_448", 1, 160, "_reduce_449", 1, 163, "_reduce_450", 1, 163, "_reduce_none", 1, 222, "_reduce_452", 3, 222, "_reduce_453", 2, 222, "_reduce_454", 4, 224, "_reduce_455", 2, 224, "_reduce_456", 1, 276, "_reduce_none", 1, 276, "_reduce_none", 2, 277, "_reduce_459", 1, 277, "_reduce_460", 1, 278, "_reduce_461", 2, 279, "_reduce_462", 1, 279, "_reduce_463", 1, 280, "_reduce_464", 3, 280, "_reduce_465", 4, 281, "_reduce_466", 2, 281, "_reduce_467", 2, 281, "_reduce_468", 1, 281, "_reduce_469", 2, 283, "_reduce_470", 0, 283, "_reduce_471", 6, 275, "_reduce_472", 4, 275, "_reduce_473", 4, 275, "_reduce_474", 2, 275, "_reduce_475", 4, 275, "_reduce_476", 2, 275, "_reduce_477", 2, 275, "_reduce_478", 1, 275, "_reduce_479", 0, 275, "_reduce_480", 1, 285, "_reduce_none", 1, 285, "_reduce_482", 1, 286, "_reduce_483", 1, 286, "_reduce_484", 1, 286, "_reduce_485", 1, 286, "_reduce_486", 1, 287, "_reduce_487", 3, 287, "_reduce_488", 1, 221, "_reduce_none", 1, 221, "_reduce_none", 1, 289, "_reduce_491", 3, 289, "_reduce_none", 1, 290, "_reduce_493", 3, 290, "_reduce_494", 1, 288, "_reduce_none", 4, 288, "_reduce_none", 3, 288, "_reduce_none", 2, 288, "_reduce_none", 1, 288, "_reduce_none", 1, 250, "_reduce_500", 3, 250, "_reduce_501", 3, 291, "_reduce_502", 1, 284, "_reduce_503", 3, 284, "_reduce_504", 1, 292, "_reduce_none", 1, 292, "_reduce_none", 2, 251, "_reduce_507", 1, 251, "_reduce_508", 1, 293, "_reduce_none", 1, 293, "_reduce_none", 2, 248, "_reduce_511", 2, 282, "_reduce_512", 0, 282, "_reduce_513", 1, 225, "_reduce_514", 4, 225, "_reduce_515", 0, 213, "_reduce_516", 2, 213, "_reduce_517", 1, 196, "_reduce_518", 3, 196, "_reduce_519", 3, 294, "_reduce_520", 2, 294, "_reduce_521", 1, 177, "_reduce_none", 1, 177, "_reduce_none", 1, 177, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 254, "_reduce_none", 1, 254, "_reduce_none", 1, 254, "_reduce_none", 1, 226, "_reduce_none", 1, 226, "_reduce_none", 0, 144, "_reduce_none", 1, 144, "_reduce_none", 0, 191, "_reduce_none", 1, 191, "_reduce_none", 0, 195, "_reduce_none", 1, 195, "_reduce_none", 1, 195, "_reduce_none", 1, 223, "_reduce_none", 1, 223, "_reduce_none", 1, 146, "_reduce_none", 2, 146, "_reduce_none", 0, 193, "_reduce_545"]; + Opal.cdecl($scope, 'STR_FUNC_SYMBOL', 16); - racc_reduce_n = 546; + Opal.cdecl($scope, 'STR_FUNC_INDENT', 32); - racc_shift_n = 941; + Opal.cdecl($scope, 'STR_FUNC_XQUOTE', 64); - racc_token_table = $hash(false, 0, "error", 1, "kCLASS", 2, "kMODULE", 3, "kDEF", 4, "kUNDEF", 5, "kBEGIN", 6, "kRESCUE", 7, "kENSURE", 8, "kEND", 9, "kIF", 10, "kUNLESS", 11, "kTHEN", 12, "kELSIF", 13, "kELSE", 14, "kCASE", 15, "kWHEN", 16, "kWHILE", 17, "kUNTIL", 18, "kFOR", 19, "kBREAK", 20, "kNEXT", 21, "kREDO", 22, "kRETRY", 23, "kIN", 24, "kDO", 25, "kDO_COND", 26, "kDO_BLOCK", 27, "kDO_LAMBDA", 28, "kRETURN", 29, "kYIELD", 30, "kSUPER", 31, "kSELF", 32, "kNIL", 33, "kTRUE", 34, "kFALSE", 35, "kAND", 36, "kOR", 37, "kNOT", 38, "kIF_MOD", 39, "kUNLESS_MOD", 40, "kWHILE_MOD", 41, "kUNTIL_MOD", 42, "kRESCUE_MOD", 43, "kALIAS", 44, "kDEFINED", 45, "klBEGIN", 46, "klEND", 47, "k__LINE__", 48, "k__FILE__", 49, "k__ENCODING__", 50, "tIDENTIFIER", 51, "tFID", 52, "tGVAR", 53, "tIVAR", 54, "tCONSTANT", 55, "tLABEL", 56, "tCVAR", 57, "tNTH_REF", 58, "tBACK_REF", 59, "tSTRING_CONTENT", 60, "tINTEGER", 61, "tFLOAT", 62, "tREGEXP_END", 63, "tUPLUS", 64, "tUMINUS", 65, "tUMINUS_NUM", 66, "tPOW", 67, "tCMP", 68, "tEQ", 69, "tEQQ", 70, "tNEQ", 71, "tGEQ", 72, "tLEQ", 73, "tANDOP", 74, "tOROP", 75, "tMATCH", 76, "tNMATCH", 77, "tDOT", 78, "tDOT2", 79, "tDOT3", 80, "tAREF", 81, "tASET", 82, "tLSHFT", 83, "tRSHFT", 84, "tCOLON2", 85, "tCOLON3", 86, "tOP_ASGN", 87, "tASSOC", 88, "tLPAREN", 89, "tLPAREN2", 90, "tRPAREN", 91, "tLPAREN_ARG", 92, "ARRAY_BEG", 93, "tRBRACK", 94, "tLBRACE", 95, "tLBRACE_ARG", 96, "tSTAR", 97, "tSTAR2", 98, "tAMPER", 99, "tAMPER2", 100, "tTILDE", 101, "tPERCENT", 102, "tDIVIDE", 103, "tPLUS", 104, "tMINUS", 105, "tLT", 106, "tGT", 107, "tPIPE", 108, "tBANG", 109, "tCARET", 110, "tLCURLY", 111, "tRCURLY", 112, "tBACK_REF2", 113, "tSYMBEG", 114, "tSTRING_BEG", 115, "tXSTRING_BEG", 116, "tREGEXP_BEG", 117, "tWORDS_BEG", 118, "tAWORDS_BEG", 119, "tSTRING_DBEG", 120, "tSTRING_DVAR", 121, "tSTRING_END", 122, "tSTRING", 123, "tSYMBOL", 124, "tNL", 125, "tEH", 126, "tCOLON", 127, "tCOMMA", 128, "tSPACE", 129, "tSEMI", 130, "tLAMBDA", 131, "tLAMBEG", 132, "tLBRACK2", 133, "tLBRACK", 134, "tDSTAR", 135, "tEQL", 136, "tLOWEST", 137, "-@NUM", 138, "+@NUM", 139); + Opal.cdecl($scope, 'STR_SQUOTE', 0); - racc_nt_base = 140; + Opal.cdecl($scope, 'STR_DQUOTE', $scope.get('STR_FUNC_EXPAND')); - racc_use_result_var = true; + Opal.cdecl($scope, 'STR_XQUOTE', $scope.get('STR_FUNC_EXPAND')['$|']($scope.get('STR_FUNC_XQUOTE'))); - Opal.cdecl($scope, 'Racc_arg', [racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var]); + Opal.cdecl($scope, 'STR_REGEXP', $scope.get('STR_FUNC_REGEXP')['$|']($scope.get('STR_FUNC_ESCAPE'))['$|']($scope.get('STR_FUNC_EXPAND'))); - Opal.cdecl($scope, 'Racc_token_to_s_table', ["$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "ARRAY_BEG", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tAWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tLBRACK2", "tLBRACK", "tDSTAR", "tEQL", "tLOWEST", "\"-@NUM\"", "\"+@NUM\"", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "aref_args", "backref", "mrhs", "arg_value", "expr", "@1", "arg", "command", "block_command", "call_args", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_var", "operation", "mlhs_basic", "mlhs_entry", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "variable", "cname", "cpath", "fname", "op", "reswords", "symbol", "opt_nl", "primary", "none", "args", "trailer", "assocs", "paren_args", "opt_call_args", "rparen", "opt_paren_args", "opt_block_arg", "block_arg", "call_args2", "open_args", "@2", "literal", "strings", "xstring", "regexp", "words", "awords", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "dot_or_colon", "@3", "@4", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "f_larglist", "lambda_body", "block_param", "f_block_optarg", "f_block_opt", "block_args_tail", "f_block_arg", "opt_block_args_tail", "f_arg", "f_rest_arg", "do_block", "@18", "operation3", "@19", "@20", "cases", "@21", "exc_list", "exc_var", "numeric", "dsym", "string", "string1", "string_contents", "xstring_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@22", "@23", "sym", "f_args", "kwrest_mark", "f_kwrest", "f_label", "f_kw", "f_kwarg", "args_tail", "opt_f_block_arg", "opt_args_tail", "f_optarg", "f_norm_arg", "f_bad_arg", "f_arg_item", "f_margs", "f_marg", "f_marg_list", "f_opt", "restarg_mark", "blkarg_mark", "assoc"]); + Opal.cdecl($scope, 'STR_SWORD', $scope.get('STR_FUNC_QWORDS')); - Opal.cdecl($scope, 'Racc_debug_parser', false); + Opal.cdecl($scope, 'STR_DWORD', $scope.get('STR_FUNC_QWORDS')['$|']($scope.get('STR_FUNC_EXPAND'))); - def.$_reduce_2 = function(val, _values, result) { - var self = this; + Opal.cdecl($scope, 'STR_SSYM', $scope.get('STR_FUNC_SYMBOL')); - result = self.$new_compstmt(val['$[]'](0)); - return result; - }; + Opal.cdecl($scope, 'STR_DSYM', $scope.get('STR_FUNC_SYMBOL')['$|']($scope.get('STR_FUNC_EXPAND'))); - def.$_reduce_3 = function(val, _values, result) { - var self = this; + self.$attr_reader("line", "column"); - result = self.$new_block(); - return result; - }; + self.$attr_reader("scope"); - def.$_reduce_4 = function(val, _values, result) { - var self = this; + self.$attr_reader("eof_content"); - result = self.$new_block(val['$[]'](0)); - return result; - }; + self.$attr_accessor("lex_state"); - def.$_reduce_5 = function(val, _values, result) { - var self = this; + self.$attr_accessor("strterm"); - val['$[]'](0)['$<<'](val['$[]'](2)); - result = val['$[]'](0); - return result; - }; + self.$attr_accessor("scanner"); - def.$_reduce_7 = function(val, _values, result) { - var self = this; + self.$attr_accessor("yylval"); - result = val['$[]'](2); - return result; - }; + self.$attr_accessor("parser"); - def.$_reduce_8 = function(val, _values, result) { + Opal.defn(self, '$initialize', function(source, file) { var self = this; - result = self.$new_body(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)); - return result; - }; + self.lex_state = "expr_beg"; + self.cond = 0; + self.cmdarg = 0; + self.line = 1; + self.tok_line = 1; + self.column = 0; + self.tok_column = 0; + self.file = file; + self.scanner = $scope.get('StringScanner').$new(source); + self.scanner_stack = [self.scanner]; + self.case_stmt = nil; + return self.start_of_lambda = nil; + }); - def.$_reduce_9 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$next_token', function() { + var self = this, token = nil, value = nil, location = nil; - result = self.$new_compstmt(val['$[]'](0)); - return result; - }; + token = self.$yylex(); + value = self.$yylval(); + location = [self.tok_line, self.tok_column]; + self.tok_column = self.column; + self.tok_line = self.line; + return [token, [value, location]]; + }); - def.$_reduce_10 = function(val, _values, result) { + Opal.defn(self, '$has_local?', function(local) { var self = this; - result = self.$new_block(); - return result; - }; + return self.$parser().$scope()['$has_local?'](local.$to_sym()); + }); - def.$_reduce_11 = function(val, _values, result) { + Opal.defn(self, '$cond_push', function(n) { var self = this; - result = self.$new_block(val['$[]'](0)); - return result; - }; + return self.cond = (self.cond['$<<'](1))['$|']((n['$&'](1))); + }); - def.$_reduce_12 = function(val, _values, result) { + Opal.defn(self, '$cond_pop', function() { var self = this; - val['$[]'](0)['$<<'](val['$[]'](2)); - result = val['$[]'](0); - return result; - }; + return self.cond = self.cond['$>>'](1); + }); - def.$_reduce_13 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$cond_lexpop', function() { + var self = this; - (($a = ["expr_fname"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); - return result; - }; + return self.cond = (self.cond['$>>'](1))['$|']((self.cond['$&'](1))); + }); - def.$_reduce_14 = function(val, _values, result) { + Opal.defn(self, '$cond?', function() { var self = this; - result = self.$new_alias(val['$[]'](0), val['$[]'](1), val['$[]'](3)); - return result; - }; + return (self.cond['$&'](1))['$!='](0); + }); - def.$_reduce_15 = function(val, _values, result) { + Opal.defn(self, '$cmdarg_push', function(n) { var self = this; - result = self.$s("valias", self.$value(val['$[]'](1)).$to_sym(), self.$value(val['$[]'](2)).$to_sym()); - return result; - }; + return self.cmdarg = (self.cmdarg['$<<'](1))['$|']((n['$&'](1))); + }); - def.$_reduce_17 = function(val, _values, result) { + Opal.defn(self, '$cmdarg_pop', function() { var self = this; - result = self.$s("valias", self.$value(val['$[]'](1)).$to_sym(), self.$value(val['$[]'](2)).$to_sym()); - return result; - }; + return self.cmdarg = self.cmdarg['$>>'](1); + }); - def.$_reduce_18 = function(val, _values, result) { + Opal.defn(self, '$cmdarg_lexpop', function() { var self = this; - result = val['$[]'](1); - return result; - }; + return self.cmdarg = (self.cmdarg['$>>'](1))['$|']((self.cmdarg['$&'](1))); + }); - def.$_reduce_19 = function(val, _values, result) { + Opal.defn(self, '$cmdarg?', function() { var self = this; - result = self.$new_if(val['$[]'](1), val['$[]'](2), val['$[]'](0), nil); - return result; - }; + return (self.cmdarg['$&'](1))['$!='](0); + }); - def.$_reduce_20 = function(val, _values, result) { + Opal.defn(self, '$arg?', function() { var self = this; - result = self.$new_if(val['$[]'](1), val['$[]'](2), nil, val['$[]'](0)); - return result; - }; + return ["expr_arg", "expr_cmdarg"]['$include?'](self.lex_state); + }); - def.$_reduce_21 = function(val, _values, result) { + Opal.defn(self, '$end?', function() { var self = this; - result = self.$new_while(val['$[]'](1), val['$[]'](2), val['$[]'](0)); - return result; - }; + return ["expr_end", "expr_endarg", "expr_endfn"]['$include?'](self.lex_state); + }); - def.$_reduce_22 = function(val, _values, result) { + Opal.defn(self, '$beg?', function() { var self = this; - result = self.$new_until(val['$[]'](1), val['$[]'](2), val['$[]'](0)); - return result; - }; + return ["expr_beg", "expr_value", "expr_mid", "expr_class"]['$include?'](self.lex_state); + }); - def.$_reduce_23 = function(val, _values, result) { + Opal.defn(self, '$after_operator?', function() { var self = this; - result = self.$new_rescue_mod(val['$[]'](1), val['$[]'](0), val['$[]'](2)); - return result; - }; + return ["expr_fname", "expr_dot"]['$include?'](self.lex_state); + }); - def.$_reduce_25 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$label_state?', function() { + var $a, self = this; - result = self.$new_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)); - return result; - }; + return ((($a = ["expr_beg", "expr_endfn"]['$include?'](self.lex_state)) !== false && $a !== nil) ? $a : self['$arg?']()); + }); - def.$_reduce_26 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$spcarg?', function() { + var $a, $b, self = this; - result = self.$s("masgn", val['$[]'](0), self.$s("to_ary", val['$[]'](2))); - return result; - }; + return ($a = ($b = self['$arg?'](), $b !== false && $b !== nil ?self.space_seen : $b), $a !== false && $a !== nil ?self['$space?']()['$!']() : $a); + }); - def.$_reduce_27 = function(val, _values, result) { + Opal.defn(self, '$space?', function() { var self = this; - result = self.$new_op_asgn(val['$[]'](1), val['$[]'](0), val['$[]'](2)); - return result; - }; + return self.scanner.$check(/\s/); + }); - def.$_reduce_29 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$set_arg_state', function() { + var $a, self = this; - result = self.$s("op_asgn2", val['$[]'](0), self.$op_to_setter(val['$[]'](2)), self.$value(val['$[]'](3)).$to_sym(), val['$[]'](4)); - return result; - }; + return self.lex_state = (function() {if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "expr_arg" + } else { + return "expr_beg" + }; return nil; })(); + }); - def.$_reduce_33 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$scan', function(regexp) { + var $a, self = this, result = nil; - result = self.$new_assign(val['$[]'](0), val['$[]'](1), self.$s("svalue", val['$[]'](2))); + if ((($a = result = self.scanner.$scan(regexp)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.column = $rb_plus(self.column, result.$length()); + self.yylval = $rb_plus(self.yylval, self.scanner.$matched());}; return result; - }; + }); - def.$_reduce_34 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$skip', function(regexp) { + var $a, self = this, result = nil; - result = self.$s("masgn", val['$[]'](0), self.$s("to_ary", val['$[]'](2))); + if ((($a = result = self.scanner.$scan(regexp)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.column = $rb_plus(self.column, result.$length()); + self.tok_column = self.column;}; return result; - }; + }); - def.$_reduce_35 = function(val, _values, result) { + Opal.defn(self, '$check', function(regexp) { var self = this; - result = self.$s("masgn", val['$[]'](0), val['$[]'](2)); - return result; - }; + return self.scanner.$check(regexp); + }); - def.$_reduce_38 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$pushback', function(n) { + var $a, self = this; - result = self.$s("and", val['$[]'](0), val['$[]'](2)); - return result; - }; + return ($a = self.scanner, $a['$pos=']($rb_minus($a.$pos(), n))); + }); - def.$_reduce_39 = function(val, _values, result) { + Opal.defn(self, '$matched', function() { var self = this; - result = self.$s("or", val['$[]'](0), val['$[]'](2)); - return result; - }; + return self.scanner.$matched(); + }); - def.$_reduce_40 = function(val, _values, result) { + Opal.defn(self, '$line=', function(line) { var self = this; - result = self.$new_unary_call(["!", []], val['$[]'](1)); - return result; - }; + self.column = self.tok_column = 0; + return self.line = self.tok_line = line; + }); - def.$_reduce_41 = function(val, _values, result) { + Opal.defn(self, '$new_strterm', function(func, term, paren) { var self = this; - result = self.$new_unary_call(val['$[]'](0), val['$[]'](1)); - return result; - }; + return $hash2(["type", "func", "term", "paren"], {"type": "string", "func": func, "term": term, "paren": paren}); + }); - def.$_reduce_46 = function(val, _values, result) { + Opal.defn(self, '$new_strterm2', function(func, term, paren) { var self = this; - result = self.$new_return(val['$[]'](0), val['$[]'](1)); - return result; - }; + term = self.$new_strterm(func, term, paren); + return term.$merge($hash2(["balance", "nesting"], {"balance": true, "nesting": 0})); + }); - def.$_reduce_47 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$new_op_asgn', function(value) { + var $a, $b, self = this; - result = self.$new_break(val['$[]'](0), val['$[]'](1)); - return result; - }; + (($a = [value]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + self.lex_state = "expr_beg"; + return "tOP_ASGN"; + }); - def.$_reduce_48 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$process_numeric', function() { + var $a, $b, self = this; - result = self.$new_next(val['$[]'](0), val['$[]'](1)); - return result; - }; + self.lex_state = "expr_end"; + if ((($a = self.$scan(/[\d_]+\.[\d_]+\b|[\d_]+(\.[\d_]+)?[eE][-+]?[\d_]+\b/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_f()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tFLOAT"; + } else if ((($a = self.$scan(/([^0][\d_]*|0)\b/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_i()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tINTEGER"; + } else if ((($a = self.$scan(/0[bB](0|1|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$to_i(2)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tINTEGER"; + } else if ((($a = self.$scan(/0[xX](\d|[a-f]|[A-F]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$to_i(16)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tINTEGER"; + } else if ((($a = self.$scan(/0[oO]?([0-7]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$to_i(8)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tINTEGER"; + } else if ((($a = self.$scan(/0[dD]([0-9]|_)+/)) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [self.$scanner().$matched().$gsub(/_/, "").$to_i()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tINTEGER"; + } else { + return self.$raise("Lexing error on numeric type: `" + (self.$scanner().$peek(5)) + "`") + }; + }); - def.$_reduce_53 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$read_escape', function() { + var $a, self = this; - result = self.$new_call(nil, val['$[]'](0), val['$[]'](1)); - return result; - }; + if ((($a = self.$scan(/\\/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\\" + } else if ((($a = self.$scan(/n/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\n" + } else if ((($a = self.$scan(/t/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\t" + } else if ((($a = self.$scan(/r/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\r" + } else if ((($a = self.$scan(/f/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\f" + } else if ((($a = self.$scan(/v/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\v" + } else if ((($a = self.$scan(/a/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\u0007" + } else if ((($a = self.$scan(/b/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\b" + } else if ((($a = self.$scan(/e/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\u001b" + } else if ((($a = self.$scan(/s/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return " " + } else if ((($a = self.$scan(/[0-7]{1,3}/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return (self.$matched().$to_i(8)['$%'](256)).$chr() + } else if ((($a = self.$scan(/x([0-9a-fA-F]{1,2})/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$scanner()['$[]'](1).$to_i(16).$chr() + } else if ((($a = self.$scan(/u([0-9a-zA-Z]{1,4})/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$scanner()['$[]'](1).$to_i(16).$chr((($scope.get('Encoding')).$$scope.get('UTF_8'))) + } else { + return self.$scan(/./) + }; + }); - def.$_reduce_55 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$peek_variable_name', function() { + var $a, self = this; - result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); - return result; - }; + if ((($a = self.$check(/[@$]/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "tSTRING_DVAR" + } else if ((($a = self.$scan(/\{/)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "tSTRING_DBEG" + } else { + return nil + }; + }); - def.$_reduce_57 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$here_document', function(str_parse) { + var $a, $b, $c, self = this, eos_regx = nil, expand = nil, escape = nil, str_buffer = nil, tok = nil, reg = nil, complete_str = nil; - result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); - return result; - }; + eos_regx = (new RegExp("[ \\t]*" + $scope.get('Regexp').$escape(str_parse['$[]']("term")) + "(\\r*\\n|$)")); + expand = true; + escape = str_parse['$[]']("func")['$!=']($scope.get('STR_SQUOTE')); + if ((($a = self.$check(eos_regx)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scan((new RegExp("[ \\t]*" + $scope.get('Regexp').$escape(str_parse['$[]']("term"))))); + if ((($a = str_parse['$[]']("scanner")) !== nil && (!$a.$$is_boolean || $a == true))) { + self.scanner_stack['$<<'](str_parse['$[]']("scanner")); + self.scanner = str_parse['$[]']("scanner");}; + return "tSTRING_END";}; + str_buffer = []; + if ((($a = self.$scan(/#/)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = tok = self.$peek_variable_name()) !== nil && (!$a.$$is_boolean || $a == true))) { + return tok}; + str_buffer['$<<']("#");}; + while (!((($b = ($c = self.$check(eos_regx), $c !== false && $c !== nil ?self.$scanner()['$bol?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true)))) { + if ((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$raise("reached EOF while in heredoc")}; + if ((($b = self.$scan(/\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { + str_buffer['$<<'](self.$scanner().$matched()) + } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$check(/#(?=[\$\@\{])/) : expand)) !== nil && (!$b.$$is_boolean || $b == true))) { + break; + } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { + str_buffer['$<<'](((function() {if (escape !== false && escape !== nil) { + return self.$read_escape() + } else { + return self.$scanner().$matched() + }; return nil; })())) + } else { + reg = $scope.get('Regexp').$new("[^#\u0000\\\\\n]+|."); + self.$scan(reg); + str_buffer['$<<'](self.$scanner().$matched()); + };}; + complete_str = str_buffer.$join(""); + self.line = $rb_plus(self.line, complete_str.$count("\n")); + (($a = [complete_str]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tSTRING_CONTENT"; + }); - def.$_reduce_59 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$parse_string', function() { + var $a, $b, self = this, str_parse = nil, func = nil, space = nil, qwords = nil, expand = nil, regexp = nil, str_buffer = nil, complete_str = nil; - result = self.$new_super(val['$[]'](0), val['$[]'](1)); - return result; - }; + str_parse = self.$strterm(); + func = str_parse['$[]']("func"); + space = false; + qwords = (func['$&']($scope.get('STR_FUNC_QWORDS')))['$!='](0); + expand = (func['$&']($scope.get('STR_FUNC_EXPAND')))['$!='](0); + regexp = (func['$&']($scope.get('STR_FUNC_REGEXP')))['$!='](0); + if ((($a = (($b = qwords !== false && qwords !== nil) ? self.$scan(/\s+/) : qwords)) !== nil && (!$a.$$is_boolean || $a == true))) { + space = true}; + str_buffer = []; + if ((($a = self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("term"))))) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = (($b = qwords !== false && qwords !== nil) ? str_parse['$[]']("done_last_space")['$!']() : qwords)) !== nil && (!$a.$$is_boolean || $a == true))) { + str_parse['$[]=']("done_last_space", true); + self.$pushback(1); + (($a = [" "]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tSPACE";}; + if ((($a = str_parse['$[]']("balance")) !== nil && (!$a.$$is_boolean || $a == true))) { + if (str_parse['$[]']("nesting")['$=='](0)) { + if (regexp !== false && regexp !== nil) { + (($a = [self.$scan(/\w+/)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tREGEXP_END";}; + return (function() {if ((($a = ($b = self['$cond?']()['$!'](), $b !== false && $b !== nil ?self.$scan(/:[^:]/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "tLABEL_END" + } else { + return "tSTRING_END" + }; return nil; })(); + } else { + str_buffer['$<<'](self.$scanner().$matched()); + ($a = "nesting", $b = str_parse, $b['$[]=']($a, $rb_minus($b['$[]']($a), 1))); + (($a = [str_parse]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); + } + } else if (regexp !== false && regexp !== nil) { + self.lex_state = "expr_end"; + (($a = [self.$scan(/\w+/)]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tREGEXP_END"; + } else { + if ((($a = str_parse['$[]']("scanner")) !== nil && (!$a.$$is_boolean || $a == true))) { + self.scanner_stack['$<<'](str_parse['$[]']("scanner")); + self.scanner = str_parse['$[]']("scanner");}; + return (function() {if ((($a = ($b = self['$cond?']()['$!'](), $b !== false && $b !== nil ?self.$scan(/:[^:]/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "tLABEL_END" + } else { + return "tSTRING_END" + }; return nil; })(); + };}; + if (space !== false && space !== nil) { + (($a = [" "]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tSPACE";}; + if ((($a = ($b = str_parse['$[]']("balance"), $b !== false && $b !== nil ?self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("paren")))) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + str_buffer['$<<'](self.$scanner().$matched()); + ($a = "nesting", $b = str_parse, $b['$[]=']($a, $rb_plus($b['$[]']($a), 1))); + } else if ((($a = self.$check(/#[@$]/)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scan(/#/); + if (expand !== false && expand !== nil) { + return "tSTRING_DVAR" + } else { + str_buffer['$<<'](self.$scanner().$matched()) + }; + } else if ((($a = self.$scan(/#\{/)) !== nil && (!$a.$$is_boolean || $a == true))) { + if (expand !== false && expand !== nil) { + return "tSTRING_DBEG" + } else { + str_buffer['$<<'](self.$scanner().$matched()) + } + } else if ((($a = self.$scan(/\#/)) !== nil && (!$a.$$is_boolean || $a == true))) { + str_buffer['$<<']("#")}; + self.$add_string_content(str_buffer, str_parse); + complete_str = str_buffer.$join(""); + self.line = $rb_plus(self.line, complete_str.$count("\n")); + (($a = [complete_str]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tSTRING_CONTENT"; + }); - def.$_reduce_60 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$add_string_content', function(str_buffer, str_parse) { + var $a, $b, $c, self = this, func = nil, end_str_re = nil, qwords = nil, expand = nil, regexp = nil, escape = nil, xquote = nil, c = nil, handled = nil, reg = nil; - result = self.$new_yield(val['$[]'](1)); - return result; - }; + func = str_parse['$[]']("func"); + end_str_re = $scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("term"))); + qwords = (func['$&']($scope.get('STR_FUNC_QWORDS')))['$!='](0); + expand = (func['$&']($scope.get('STR_FUNC_EXPAND')))['$!='](0); + regexp = (func['$&']($scope.get('STR_FUNC_REGEXP')))['$!='](0); + escape = (func['$&']($scope.get('STR_FUNC_ESCAPE')))['$!='](0); + xquote = (func['$==']($scope.get('STR_XQUOTE'))); + while (!((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true)))) { + c = nil; + handled = true; + if ((($b = self.$check(end_str_re)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = ($c = str_parse['$[]']("balance"), $c !== false && $c !== nil ?(str_parse['$[]']("nesting")['$!='](0)) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$scan(end_str_re); + c = self.$scanner().$matched(); + ($b = "nesting", $c = str_parse, $c['$[]=']($b, $rb_minus($c['$[]']($b), 1))); + } else { + break; + } + } else if ((($b = ($c = str_parse['$[]']("balance"), $c !== false && $c !== nil ?self.$scan($scope.get('Regexp').$new($scope.get('Regexp').$escape(str_parse['$[]']("paren")))) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + ($b = "nesting", $c = str_parse, $c['$[]=']($b, $rb_plus($c['$[]']($b), 1))); + c = self.$scanner().$matched(); + } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : qwords)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$pushback(1); + break;; + } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$check(/#(?=[\$\@\{])/) : expand)) !== nil && (!$b.$$is_boolean || $b == true))) { + break; + } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : qwords)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$pushback(1); + break;; + } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if (xquote !== false && xquote !== nil) { + c = $rb_plus("\\", self.$scan(/./)) + } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\n/) : qwords)) !== nil && (!$b.$$is_boolean || $b == true))) { + str_buffer['$<<']("\n"); + continue;; + } else if ((($b = (($c = expand !== false && expand !== nil) ? self.$scan(/\n/) : expand)) !== nil && (!$b.$$is_boolean || $b == true))) { + continue; + } else if ((($b = (($c = qwords !== false && qwords !== nil) ? self.$scan(/\s/) : qwords)) !== nil && (!$b.$$is_boolean || $b == true))) { + c = " " + } else if (regexp !== false && regexp !== nil) { + if ((($b = self.$scan(/(.)/)) !== nil && (!$b.$$is_boolean || $b == true))) { + c = $rb_plus("\\", self.$scanner().$matched())} + } else if (expand !== false && expand !== nil) { + c = self.$read_escape() + } else if ((($b = self.$scan(/\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if (escape !== false && escape !== nil) { + c = "\\\\" + } else { + c = self.$scanner().$matched() + } + } else if ((($b = self.$scan(end_str_re)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + str_buffer['$<<']("\\") + } + } else { + handled = false + }; + if (handled !== false && handled !== nil) { + } else { + reg = (function() {if (qwords !== false && qwords !== nil) { + return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + "#\u0000\n \\\\]+|.") + } else if ((($b = str_parse['$[]']("balance")) !== nil && (!$b.$$is_boolean || $b == true))) { + return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + ($scope.get('Regexp').$escape(str_parse['$[]']("paren"))) + "#\u0000\\\\]+|.") + } else { + return $scope.get('Regexp').$new("[^" + ($scope.get('Regexp').$escape(str_parse['$[]']("term"))) + "#\u0000\\\\]+|.") + }; return nil; })(); + self.$scan(reg); + c = self.$scanner().$matched(); + }; + ((($b = c) !== false && $b !== nil) ? $b : c = self.$scanner().$matched()); + str_buffer['$<<'](c);}; + if ((($a = self.$scanner()['$eos?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$raise("reached EOF while in string") + } else { + return nil + }; + }); - def.$_reduce_61 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$heredoc_identifier', function() { + var $a, $b, self = this, escape_method = nil, heredoc = nil, end_of_line = nil; - result = val['$[]'](0); - return result; - }; + if ((($a = self.$scan(/(-?)(['"])?(\w+)\2?/)) !== nil && (!$a.$$is_boolean || $a == true))) { + escape_method = (function() {if ((($a = (self.scanner['$[]'](2)['$==']("'"))) !== nil && (!$a.$$is_boolean || $a == true))) { + return $scope.get('STR_SQUOTE') + } else { + return $scope.get('STR_DQUOTE') + }; return nil; })(); + heredoc = self.scanner['$[]'](3); + (($a = [self.$new_strterm(escape_method, heredoc, heredoc)]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); + self.$strterm()['$[]=']("type", "heredoc"); + end_of_line = self.$scan(/.*\n/); + if ((($a = end_of_line['$!=']("\n")) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$strterm()['$[]=']("scanner", $scope.get('StringScanner').$new(end_of_line))}; + ($a = self, $a['$line=']($rb_plus($a.$line(), 1))); + (($a = [heredoc]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tSTRING_BEG"; + } else { + return nil + }; + }); - def.$_reduce_62 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$process_identifier', function(matched, cmd_start) { + var $a, $b, $c, self = this, last_state = nil, result = nil, kw = nil, old_state = nil; - result = val['$[]'](1); - return result; - }; + last_state = self.lex_state; + if ((($a = ($b = ($c = self['$label_state?'](), $c !== false && $c !== nil ?self.$check(/::/)['$!']() : $c), $b !== false && $b !== nil ?self.$scan(/:/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_beg"; + (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return "tLABEL";}; + if (matched['$==']("defined?")) { + if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_end"; + return "tIDENTIFIER";}; + self.lex_state = "expr_arg"; + return "kDEFINED";}; + if ((($a = matched['$end_with?']("?", "!")) !== nil && (!$a.$$is_boolean || $a == true))) { + result = "tIDENTIFIER" + } else if (self.lex_state['$==']("expr_fname")) { + if ((($a = ($b = self.$check(/\=\>/)['$!'](), $b !== false && $b !== nil ?self.$scan(/\=/) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + result = "tIDENTIFIER"; + matched = $rb_plus(matched, self.$scanner().$matched());} + } else if ((($a = matched['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[A-Z]")))) !== nil && (!$a.$$is_boolean || $a == true))) { + result = "tCONSTANT" + } else { + result = "tIDENTIFIER" + }; + if ((($a = ($b = self.lex_state['$!=']("expr_dot"), $b !== false && $b !== nil ?kw = $scope.get('Keywords').$keyword(matched) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + old_state = self.lex_state; + self.lex_state = kw.$state(); + if (old_state['$==']("expr_fname")) { + (($a = [kw.$name()]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return kw.$id()['$[]'](0);}; + if (self.lex_state['$==']("expr_beg")) { + cmd_start = true}; + if (matched['$==']("do")) { + if ((($a = self['$after_operator?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_end"; + return "tIDENTIFIER";}; + if ((($a = self.start_of_lambda) !== nil && (!$a.$$is_boolean || $a == true))) { + self.start_of_lambda = false; + self.lex_state = "expr_beg"; + return "kDO_LAMBDA"; + } else if ((($a = self['$cond?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_beg"; + return "kDO_COND"; + } else if ((($a = ($b = self['$cmdarg?'](), $b !== false && $b !== nil ?self.lex_state['$!=']("expr_cmdarg") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_beg"; + return "kDO_BLOCK"; + } else if (self.lex_state['$==']("expr_endarg")) { + return "kDO_BLOCK" + } else { + self.lex_state = "expr_beg"; + return "kDO"; + }; + } else if ((($a = ((($b = old_state['$==']("expr_beg")) !== false && $b !== nil) ? $b : old_state['$==']("expr_value"))) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return kw.$id()['$[]'](0); + } else { + if ((($a = kw.$id()['$[]'](0)['$!='](kw.$id()['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_beg"}; + (($a = [matched]), $b = self, $b['$yylval='].apply($b, $a), $a[$a.length-1]); + return kw.$id()['$[]'](1); + };}; + if ((($a = ["expr_beg", "expr_dot", "expr_mid", "expr_arg", "expr_cmdarg"]['$include?'](self.lex_state)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = (function() {if (cmd_start !== false && cmd_start !== nil) { + return "expr_cmdarg" + } else { + return "expr_arg" + }; return nil; })() + } else if (self.lex_state['$==']("expr_fname")) { + self.lex_state = "expr_endfn" + } else { + self.lex_state = "expr_end" + }; + if ((($a = ($b = ["expr_dot", "expr_fname"]['$include?'](last_state)['$!'](), $b !== false && $b !== nil ?self['$has_local?'](matched) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.lex_state = "expr_end"}; + return (function() {if ((($a = matched['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[A-Z]")))) !== nil && (!$a.$$is_boolean || $a == true))) { + return "tCONSTANT" + } else { + return "tIDENTIFIER" + }; return nil; })(); + }); - def.$_reduce_63 = function(val, _values, result) { - var self = this; + return (Opal.defn(self, '$yylex', function() {try { - result = val['$[]'](0); - return result; - }; + var $a, $b, $c, $d, $e, self = this, cmd_start = nil, c = nil, token = nil, line_count = nil, result = nil, str_type = nil, paren = nil, term = nil, $case = nil, func = nil, start_word = nil, end_word = nil, matched = nil, sign = nil, utype = nil; - def.$_reduce_64 = function(val, _values, result) { - var self = this; + self.yylval = ""; + self.space_seen = false; + cmd_start = false; + c = ""; + if ((($a = self.$strterm()) !== nil && (!$a.$$is_boolean || $a == true))) { + if (self.$strterm()['$[]']("type")['$==']("heredoc")) { + token = self.$here_document(self.$strterm()) + } else { + token = self.$parse_string() + }; + if ((($a = ((($b = ((($c = token['$==']("tSTRING_END")) !== false && $c !== nil) ? $c : token['$==']("tREGEXP_END"))) !== false && $b !== nil) ? $b : token['$==']("tLABEL_END"))) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [nil]), $b = self, $b['$strterm='].apply($b, $a), $a[$a.length-1]); + self.lex_state = "expr_end";}; + return token;}; + while ((($b = true) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$skip(/\ |\t|\r/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.space_seen = true; + continue;; + } else if ((($b = self.$skip(/(\n|#)/)) !== nil && (!$b.$$is_boolean || $b == true))) { + c = self.$scanner().$matched(); + if (c['$==']("#")) { + self.$skip(/(.*)/) + } else { + ($b = self, $b['$line=']($rb_plus($b.$line(), 1))) + }; + self.$skip(/(\n+)/); + if ((($b = self.$scanner().$matched()) !== nil && (!$b.$$is_boolean || $b == true))) { + ($b = self, $b['$line=']($rb_plus($b.$line(), self.$scanner().$matched().$length())))}; + if ((($b = ["expr_beg", "expr_dot"]['$include?'](self.lex_state)) !== nil && (!$b.$$is_boolean || $b == true))) { + continue;}; + if ((($b = self.$skip(/([\ \t\r\f\v]*)\./)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scanner()['$[]'](1)['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + self.space_seen = true + }; + self.$pushback(1); + if ((($b = self.$check(/\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + continue; + };}; + cmd_start = true; + self.lex_state = "expr_beg"; + (($b = ["\\n"]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return "tNL"; + } else if ((($b = self.$scan(/\;/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tSEMI"; + } else if ((($b = self.$check(/\*/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\*\*\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("**") + } else if ((($b = self.$scan(/\*\*/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tPOW"; + } else if ((($b = self.$scan(/\*\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("*") + } else { + self.$scan(/\*/); + if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg"; + return "tSTAR2"; + } else if ((($b = ($c = self.space_seen, $c !== false && $c !== nil ?self.$check(/\S/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tSTAR"; + } else if ((($b = ["expr_beg", "expr_mid"]['$include?'](self.lex_state)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tSTAR"; + } else { + self.lex_state = "expr_beg"; + return "tSTAR2"; + }; + } + } else if ((($b = self.$scan(/\!/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg"; + if ((($b = self.$scan(/@/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return ["tBANG", "!"]}; + } else { + self.lex_state = "expr_beg" + }; + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tNEQ" + } else if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tNMATCH"}; + return "tBANG"; + } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = (($c = self.lex_state['$==']("expr_beg")) ? self.space_seen['$!']() : self.lex_state['$==']("expr_beg"))) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = ($c = self.$scan(/begin/), $c !== false && $c !== nil ?self['$space?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$scan(/(.*)/); + line_count = 0; + while ((($c = true) !== nil && (!$c.$$is_boolean || $c == true))) { + if ((($c = self.$scanner()['$eos?']()) !== nil && (!$c.$$is_boolean || $c == true))) { + self.$raise("embedded document meets end of file")}; + if ((($c = ($d = self.$scan(/\=end/), $d !== false && $d !== nil ?self['$space?']() : $d)) !== nil && (!$c.$$is_boolean || $c == true))) { + self.line = $rb_plus(self.line, line_count); + return self.$yylex();}; + if ((($c = self.$scan(/\n/)) !== nil && (!$c.$$is_boolean || $c == true))) { + line_count = $rb_plus(line_count, 1); + continue;;}; + self.$scan(/(.*)/);};}}; + self.$set_arg_state(); + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tEQQ"}; + return "tEQ";}; + if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tMATCH" + } else if ((($b = self.$scan(/\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tASSOC"}; + return "tEQL"; + } else if ((($b = self.$scan(/\"/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_DQUOTE'), "\"", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tSTRING_BEG"; + } else if ((($b = self.$scan(/\'/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_SQUOTE'), "'", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tSTRING_BEG"; + } else if ((($b = self.$scan(/\`/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_XQUOTE'), "`", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tXSTRING_BEG"; + } else if ((($b = self.$scan(/\&/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\&/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("&&")}; + return "tANDOP"; + } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("&")}; + if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tAMPER" + } else if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tAMPER" + } else { + result = "tAMPER2" + }; + self.$set_arg_state(); + return result; + } else if ((($b = self.$scan(/\|/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\|/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("||")}; + return "tOROP"; + } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("|")}; + self.$set_arg_state(); + return "tPIPE"; + } else if ((($b = self.$scan(/\%[QqWwixrs]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + str_type = self.$scanner().$matched()['$[]'](1, 1); + paren = term = self.$scan(/./); + $case = term;if ("("['$===']($case)) {term = ")"}else if ("["['$===']($case)) {term = "]"}else if ("{"['$===']($case)) {term = "}"}else if ("<"['$===']($case)) {term = ">"}else {paren = "\x00"}; + $c = (function() {$case = str_type;if ("Q"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_DQUOTE')]}else if ("q"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_SQUOTE')]}else if ("W"['$===']($case)) {self.$skip(/\s*/); + return ["tWORDS_BEG", $scope.get('STR_DWORD')];}else if ("w"['$===']($case) || "i"['$===']($case)) {self.$skip(/\s*/); + return ["tAWORDS_BEG", $scope.get('STR_SWORD')];}else if ("x"['$===']($case)) {return ["tXSTRING_BEG", $scope.get('STR_XQUOTE')]}else if ("r"['$===']($case)) {return ["tREGEXP_BEG", $scope.get('STR_REGEXP')]}else if ("s"['$===']($case)) {return ["tSTRING_BEG", $scope.get('STR_SQUOTE')]}else { return nil }})(), $b = Opal.to_ary($c), token = ($b[0] == null ? nil : $b[0]), func = ($b[1] == null ? nil : $b[1]), $c; + (($b = [self.$new_strterm2(func, term, paren)]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return token; + } else if ((($b = self.$scan(/\//)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_REGEXP'), "/", "/")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tREGEXP_BEG"; + } else if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("/")}; + if ((($b = self['$arg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = ($c = self.$check(/\s/)['$!'](), $c !== false && $c !== nil ?self.space_seen : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_REGEXP'), "/", "/")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tREGEXP_BEG";}}; + if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg" + } else { + self.lex_state = "expr_beg" + }; + return "tDIVIDE"; + } else if ((($b = self.$scan(/\%/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("%") + } else if ((($b = self.$check(/[^\s]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = ((($c = ((($d = self.lex_state['$==']("expr_beg")) !== false && $d !== nil) ? $d : ((($e = self.lex_state['$==']("expr_arg")) ? self.space_seen : self.lex_state['$==']("expr_arg"))))) !== false && $c !== nil) ? $c : self.lex_state['$==']("expr_mid"))) !== nil && (!$b.$$is_boolean || $b == true))) { + start_word = self.$scan(/./); + end_word = ((($b = $hash2(["(", "[", "{", "<"], {"(": ")", "[": "]", "{": "}", "<": ">"})['$[]'](start_word)) !== false && $b !== nil) ? $b : start_word); + (($b = [self.$new_strterm2($scope.get('STR_DQUOTE'), end_word, start_word)]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]); + return "tSTRING_BEG";}}; + self.$set_arg_state(); + return "tPERCENT"; + } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\r?\n/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.space_seen = true; + continue;;}; + self.$raise($scope.get('SyntaxError'), "backslash must appear before newline :" + (self.file) + ":" + (self.line)); + } else if ((($b = self.$scan(/\(/)) !== nil && (!$b.$$is_boolean || $b == true))) { + result = self.$scanner().$matched(); + if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tLPAREN" + } else if ((($b = ($c = self.space_seen, $c !== false && $c !== nil ?self['$arg?']() : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tLPAREN_ARG" + } else { + result = "tLPAREN2" + }; + self.lex_state = "expr_beg"; + self.$cond_push(0); + self.$cmdarg_push(0); + return result; + } else if ((($b = self.$scan(/\)/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$cond_lexpop(); + self.$cmdarg_lexpop(); + self.lex_state = "expr_end"; + return "tRPAREN"; + } else if ((($b = self.$scan(/\[/)) !== nil && (!$b.$$is_boolean || $b == true))) { + result = self.$scanner().$matched(); + if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg"; + if ((($b = self.$scan(/\]=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tASET" + } else if ((($b = self.$scan(/\]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return "tAREF" + } else { + self.$raise("Unexpected '[' token") + }; + } else if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tLBRACK" + } else if ((($b = ($c = self['$arg?'](), $c !== false && $c !== nil ?self.space_seen : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tLBRACK" + } else { + result = "tLBRACK2" + }; + self.lex_state = "expr_beg"; + self.$cond_push(0); + self.$cmdarg_push(0); + return result; + } else if ((($b = self.$scan(/\]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$cond_lexpop(); + self.$cmdarg_lexpop(); + self.lex_state = "expr_end"; + return "tRBRACK"; + } else if ((($b = self.$scan(/\}/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$cond_lexpop(); + self.$cmdarg_lexpop(); + self.lex_state = "expr_end"; + return "tRCURLY"; + } else if ((($b = self.$scan(/\.\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tDOT3"; + } else if ((($b = self.$scan(/\.\./)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tDOT2"; + } else if ((($b = ($c = self.lex_state['$!=']("expr_fname"), $c !== false && $c !== nil ?self.$scan(/\.JS\[/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + self.$cond_push(0); + self.$cmdarg_push(0); + return "tJSLBRACK"; + } else if ((($b = ($c = self.lex_state['$!=']("expr_fname"), $c !== false && $c !== nil ?self.$scan(/\.JS\./) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_dot"; + return "tJSDOT"; + } else if ((($b = self.$scan(/\./)) !== nil && (!$b.$$is_boolean || $b == true))) { + if (self.lex_state['$==']("expr_fname")) { + } else { + self.lex_state = "expr_dot" + }; + return "tDOT"; + } else if ((($b = self.$scan(/\:\:/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tCOLON3"; + } else if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tCOLON3";}; + self.lex_state = "expr_dot"; + return "tCOLON2"; + } else if ((($b = self.$scan(/\:/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = ((($c = self['$end?']()) !== false && $c !== nil) ? $c : self.$check(/\s/))) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$check(/\w/)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + self.lex_state = "expr_beg"; + return "tCOLON"; + }; + self.lex_state = "expr_fname"; + return "tSYMBEG";}; + if ((($b = self.$scan(/\'/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_SSYM'), "'", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1]) + } else if ((($b = self.$scan(/\"/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [self.$new_strterm($scope.get('STR_DSYM'), "\"", "\x00")]), $c = self, $c['$strterm='].apply($c, $b), $b[$b.length-1])}; + self.lex_state = "expr_fname"; + return "tSYMBEG"; + } else if ((($b = self.$scan(/\^\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn("^") + } else if ((($b = self.$scan(/\^/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tCARET"; + } else if ((($b = self.$check(//)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg" + } else { + if (self.lex_state['$==']("expr_class")) { + cmd_start = true}; + self.lex_state = "expr_beg"; + }; + return "tCMP"; + } else if ((($b = self.$scan(/<\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tLEQ"; + } else if ((($b = self.$scan(//)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\>\>\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn(">>") + } else if ((($b = self.$scan(/\>\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tRSHFT"; + } else if ((($b = self.$scan(/\>\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tGEQ"; + } else if ((($b = self.$scan(/\>/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tGT";} + } else if ((($b = self.$scan(/->/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + self.start_of_lambda = true; + return "tLAMBDA"; + } else if ((($b = self.$scan(/[+-]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + matched = self.$scanner().$matched(); + $c = (function() {if (matched['$==']("+")) { + return ["tPLUS", "tUPLUS"] + } else { + return ["tMINUS", "tUMINUS"] + }; return nil; })(), $b = Opal.to_ary($c), sign = ($b[0] == null ? nil : $b[0]), utype = ($b[1] == null ? nil : $b[1]), $c; + if ((($b = self['$beg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_mid"; + (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + if ((($b = ($c = self.$scanner().$peek(1)['$=~'](/\d/), $c !== false && $c !== nil ?Opal.ret((function() {if (utype['$==']("tUMINUS")) { + return "-@NUM" + } else { + return "+@NUM" + }; return nil; })()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + return utype + }; + } else if ((($b = self['$after_operator?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_arg"; + if ((($b = self.$scan(/@/)) !== nil && (!$b.$$is_boolean || $b == true))) { + (($b = [$rb_plus(matched, "@")]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return "tIDENTIFIER";}; + (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return sign;}; + if ((($b = self.$scan(/\=/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$new_op_asgn(matched)}; + if ((($b = self['$spcarg?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_mid"; + (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + if ((($b = ($c = self.$scanner().$peek(1)['$=~'](/\d/), $c !== false && $c !== nil ?Opal.ret((function() {if (utype['$==']("tUMINUS")) { + return "-@NUM" + } else { + return "+@NUM" + }; return nil; })()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + return utype + };}; + self.lex_state = "expr_beg"; + (($b = [matched]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return sign; + } else if ((($b = self.$scan(/\?/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self['$end?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tEH";}; + if ((($b = self.$check(/\ |\t|\r|\s/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tEH"; + } else if ((($b = self.$scan(/\\/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + (($b = [self.$read_escape()]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return "tSTRING";}; + self.lex_state = "expr_end"; + (($b = [self.$scan(/./)]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return "tSTRING"; + } else if ((($b = self.$scan(/\~/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$set_arg_state(); + return "tTILDE"; + } else if ((($b = self.$check(/\$/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.$scan(/\$([1-9]\d*)/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + (($b = [self.$scanner().$matched().$sub("$", "")]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return "tNTH_REF"; + } else if ((($b = self.$scan(/(\$_)(\w+)/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tGVAR"; + } else if ((($b = self.$scan(/\$[\+\'\`\&!@\"~*$?\/\\:;=.,<>_]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tGVAR"; + } else if ((($b = self.$scan(/\$\w+/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tGVAR"; + } else { + self.$raise("Bad gvar name: " + (self.$scanner().$peek(5).$inspect())) + } + } else if ((($b = self.$scan(/\$\w+/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tGVAR"; + } else if ((($b = self.$scan(/\@\@\w*/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tCVAR"; + } else if ((($b = self.$scan(/\@\w*/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_end"; + return "tIVAR"; + } else if ((($b = self.$scan(/\,/)) !== nil && (!$b.$$is_boolean || $b == true))) { + self.lex_state = "expr_beg"; + return "tCOMMA"; + } else if ((($b = self.$scan(/\{/)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = self.start_of_lambda) !== nil && (!$b.$$is_boolean || $b == true))) { + self.start_of_lambda = false; + self.lex_state = "expr_beg"; + self.$cond_push(0); + self.$cmdarg_push(0); + return "tLAMBEG"; + } else if ((($b = ((($c = self['$arg?']()) !== false && $c !== nil) ? $c : self.lex_state['$==']("expr_end"))) !== nil && (!$b.$$is_boolean || $b == true))) { + result = "tLCURLY" + } else if (self.lex_state['$==']("expr_endarg")) { + result = "LBRACE_ARG" + } else { + result = "tLBRACE" + }; + self.lex_state = "expr_beg"; + self.$cond_push(0); + self.$cmdarg_push(0); + return result; + } else if ((($b = ($c = self.$scanner()['$bol?'](), $c !== false && $c !== nil ?self.$skip(/\__END__(\n|$)/) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + while ((($c = true) !== nil && (!$c.$$is_boolean || $c == true))) { + if ((($c = self.$scanner()['$eos?']()) !== nil && (!$c.$$is_boolean || $c == true))) { + self.eof_content = self.$yylval(); + return false;}; + self.$scan(/(.*)/); + self.$scan(/\n/);} + } else if ((($b = self.$check(/[0-9]/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$process_numeric() + } else if ((($b = self.$scan(/(\w)+(\?|(\!(?!=)))?/)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$process_identifier(self.$scanner().$matched(), cmd_start)}; + if ((($b = self.$scanner()['$eos?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + if (self.scanner_stack.$size()['$=='](1)) { + (($b = [false]), $c = self, $c['$yylval='].apply($c, $b), $b[$b.length-1]); + return false; + } else { + self.scanner_stack.$pop(); + self.scanner = self.scanner_stack.$last(); + return self.$yylex(); + }}; + self.$raise("Unexpected content in parsing stream `" + (self.$scanner().$peek(5)) + "` :" + (self.file) + ":" + (self.line));}; + } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } + }), nil) && 'yylex'; + })($scope.base, null) + })($scope.base); +}; - result = val['$[]'](1); - return result; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["racc/parser"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_ge(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - def.$_reduce_65 = function(val, _values, result) { - var self = this; + Opal.add_stubs(['$class', '$_racc_do_parse_rb', '$_racc_setup', '$[]', '$!=', '$next_token', '$==', '$racc_read_token', '$+', '$<', '$nil?', '$puts', '$>', '$-', '$push', '$<<', '$racc_shift', '$-@', '$*', '$last', '$pop', '$__send__', '$raise', '$racc_reduce', '$>=', '$inspect', '$racc_next_state', '$racc_token2str', '$racc_print_stacks', '$empty?', '$map', '$racc_print_states', '$each_index', '$each']); + return (function($base) { + var $Racc, self = $Racc = $module($base, 'Racc'); - result = val['$[]'](0); - return result; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$_reduce_66 = function(val, _values, result) { - var self = this; + (function($base, $super) { + function $Parser(){}; + var self = $Parser = $klass($base, $super, 'Parser', $Parser); - result = val['$[]'](0)['$<<'](val['$[]'](1)); - return result; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$_reduce_67 = function(val, _values, result) { + def.yydebug = nil; + Opal.defn(self, '$_racc_setup', function() { var self = this; - result = val['$[]'](0)['$<<'](self.$s("splat", val['$[]'](2))); - return result; - }; + return ((self.$class()).$$scope.get('Racc_arg')); + }); - def.$_reduce_69 = function(val, _values, result) { + Opal.defn(self, '$do_parse', function() { var self = this; - result = val['$[]'](0)['$<<'](self.$s("splat")); - return result; - }; + return self.$_racc_do_parse_rb(self.$_racc_setup(), false); + }); - def.$_reduce_71 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_racc_do_parse_rb', function(arg, in_debug) { + var $a, $b, $c, $d, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, goto_table = nil, goto_check = nil, goto_default = nil, goto_pointer = nil, nt_base = nil, reduce_table = nil, token_table = nil, shift_n = nil, reduce_n = nil, use_result = nil, racc_state = nil, racc_tstack = nil, racc_vstack = nil, racc_t = nil, racc_tok = nil, racc_val = nil, racc_read_next = nil, racc_user_yyerror = nil, racc_error_status = nil, token = nil, act = nil, i = nil, nerr = nil, custate = nil, curstate = nil, reduce_i = nil, reduce_len = nil, reduce_to = nil, method_id = nil, tmp_t = nil, tmp_v = nil, reduce_call_result = nil, k1 = nil; - result = self.$s("array", self.$s("splat", val['$[]'](1))); - return result; - }; + action_table = arg['$[]'](0); + action_check = arg['$[]'](1); + action_default = arg['$[]'](2); + action_pointer = arg['$[]'](3); + goto_table = arg['$[]'](4); + goto_check = arg['$[]'](5); + goto_default = arg['$[]'](6); + goto_pointer = arg['$[]'](7); + nt_base = arg['$[]'](8); + reduce_table = arg['$[]'](9); + token_table = arg['$[]'](10); + shift_n = arg['$[]'](11); + reduce_n = arg['$[]'](12); + use_result = arg['$[]'](13); + racc_state = [0]; + racc_tstack = []; + racc_vstack = []; + racc_t = nil; + racc_tok = nil; + racc_val = nil; + racc_read_next = true; + racc_user_yyerror = false; + racc_error_status = 0; + token = nil; + act = nil; + i = nil; + nerr = nil; + custate = nil; + while ((($b = true) !== nil && (!$b.$$is_boolean || $b == true))) { + i = action_pointer['$[]'](racc_state['$[]'](-1)); + if (i !== false && i !== nil) { + if (racc_read_next !== false && racc_read_next !== nil) { + if ((($b = racc_t['$!='](0)) !== nil && (!$b.$$is_boolean || $b == true))) { + token = self.$next_token(); + racc_tok = token['$[]'](0); + racc_val = token['$[]'](1); + if (racc_tok['$=='](false)) { + racc_t = 0 + } else { + racc_t = token_table['$[]'](racc_tok); + if (racc_t !== false && racc_t !== nil) { + } else { + racc_t = 1 + }; + }; + if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$racc_read_token(racc_t, racc_tok, racc_val)}; + racc_read_next = false;}}; + i = $rb_plus(i, racc_t); + if ((($b = ((($c = ((($d = ($rb_lt(i, 0))) !== false && $d !== nil) ? $d : ((act = action_table['$[]'](i)))['$nil?']())) !== false && $c !== nil) ? $c : (action_check['$[]'](i)['$!='](racc_state['$[]'](-1))))) !== nil && (!$b.$$is_boolean || $b == true))) { + act = action_default['$[]'](racc_state['$[]'](-1))}; + } else { + act = action_default['$[]'](racc_state['$[]'](-1)) + }; + if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$puts("(act: " + (act) + ", shift_n: " + (shift_n) + ", reduce_n: " + (reduce_n) + ")")}; + if ((($b = ($c = $rb_gt(act, 0), $c !== false && $c !== nil ?$rb_lt(act, shift_n) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = $rb_gt(racc_error_status, 0)) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = racc_t['$!='](1)) !== nil && (!$b.$$is_boolean || $b == true))) { + racc_error_status = $rb_minus(racc_error_status, 1)}}; + racc_vstack.$push(racc_val); + curstate = act; + racc_state['$<<'](act); + racc_read_next = true; + if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { + racc_tstack.$push(racc_t); + self.$racc_shift(racc_t, racc_tstack, racc_vstack);}; + } else if ((($b = ($c = $rb_lt(act, 0), $c !== false && $c !== nil ?$rb_gt(act, reduce_n['$-@']()) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + reduce_i = $rb_times(act, -3); + reduce_len = reduce_table['$[]'](reduce_i); + reduce_to = reduce_table['$[]']($rb_plus(reduce_i, 1)); + method_id = reduce_table['$[]']($rb_plus(reduce_i, 2)); + tmp_t = racc_tstack.$last(reduce_len); + tmp_v = racc_vstack.$last(reduce_len); + racc_state.$pop(reduce_len); + racc_vstack.$pop(reduce_len); + racc_tstack.$pop(reduce_len); + if (use_result !== false && use_result !== nil) { + reduce_call_result = self.$__send__(method_id, tmp_v, nil, tmp_v['$[]'](0)); + racc_vstack.$push(reduce_call_result); + } else { + self.$raise("not using result??") + }; + racc_tstack.$push(reduce_to); + if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$racc_reduce(tmp_t, reduce_to, racc_tstack, racc_vstack)}; + k1 = $rb_minus(reduce_to, nt_base); + if ((($b = ((reduce_i = goto_pointer['$[]'](k1)))['$!='](nil)) !== nil && (!$b.$$is_boolean || $b == true))) { + reduce_i = $rb_plus(reduce_i, racc_state['$[]'](-1)); + if ((($b = ($c = ($d = ($rb_ge(reduce_i, 0)), $d !== false && $d !== nil ?(((curstate = goto_table['$[]'](reduce_i)))['$!='](nil)) : $d), $c !== false && $c !== nil ?(goto_check['$[]'](reduce_i)['$=='](k1)) : $c)) !== nil && (!$b.$$is_boolean || $b == true))) { + racc_state.$push(curstate) + } else { + racc_state.$push(goto_default['$[]'](k1)) + }; + } else { + racc_state.$push(goto_default['$[]'](k1)) + }; + } else if (act['$=='](shift_n)) { + return racc_vstack['$[]'](0) + } else if (act['$=='](reduce_n['$-@']())) { + self.$raise($scope.get('SyntaxError'), "unexpected '" + (racc_tok.$inspect()) + "'") + } else { + self.$raise("Rac: unknown action: " + (act)) + }; + if ((($b = self.yydebug) !== nil && (!$b.$$is_boolean || $b == true))) { + self.$racc_next_state(racc_state['$[]'](-1), racc_state)};}; + }); - def.$_reduce_72 = function(val, _values, result) { + Opal.defn(self, '$racc_read_token', function(t, tok, val) { var self = this; - result = self.$s("array", self.$s("splat")); - return result; - }; + self.$puts("read " + (tok) + "(" + (self.$racc_token2str(t)) + ") " + (val.$inspect())); + return self.$puts("\n"); + }); - def.$_reduce_74 = function(val, _values, result) { + Opal.defn(self, '$racc_shift', function(tok, tstack, vstack) { var self = this; - result = val['$[]'](0); - return result; - }; + self.$puts("shift " + (self.$racc_token2str(tok))); + self.$racc_print_stacks(tstack, vstack); + return self.$puts("\n"); + }); - def.$_reduce_75 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$racc_reduce', function(toks, sim, tstack, vstack) { + var $a, $b, TMP_1, self = this; - result = val['$[]'](1); - return result; - }; + self.$puts("reduce " + ((function() {if ((($a = toks['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "" + } else { + return ($a = ($b = toks).$map, $a.$$p = (TMP_1 = function(t){var self = TMP_1.$$s || this; +if (t == null) t = nil; + return self.$racc_token2str(t)}, TMP_1.$$s = self, TMP_1), $a).call($b) + }; return nil; })())); + self.$puts(" --> " + (self.$racc_token2str(sim))); + return self.$racc_print_stacks(tstack, vstack); + }); - def.$_reduce_76 = function(val, _values, result) { + Opal.defn(self, '$racc_next_state', function(curstate, state) { var self = this; - result = self.$s("array", val['$[]'](0)); - return result; - }; + self.$puts("goto " + (curstate)); + self.$racc_print_states(state); + return self.$puts("\n"); + }); - def.$_reduce_77 = function(val, _values, result) { + Opal.defn(self, '$racc_token2str', function(tok) { var self = this; - result = val['$[]'](0)['$<<'](val['$[]'](1)); - return result; - }; + return ((self.$class()).$$scope.get('Racc_token_to_s_table'))['$[]'](tok); + }); - def.$_reduce_80 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$racc_print_stacks', function(t, v) { + var $a, $b, TMP_2, self = this; - result = self.$new_assignable(val['$[]'](0)); - return result; - }; + self.$puts(" ["); + ($a = ($b = t).$each_index, $a.$$p = (TMP_2 = function(i){var self = TMP_2.$$s || this; +if (i == null) i = nil; + return self.$puts(" (" + (self.$racc_token2str(t['$[]'](i))) + " " + (v['$[]'](i).$inspect()) + ")")}, TMP_2.$$s = self, TMP_2), $a).call($b); + return self.$puts(" ]"); + }); - def.$_reduce_81 = function(val, _values, result) { - var $a, self = this, args = nil; + return (Opal.defn(self, '$racc_print_states', function(s) { + var $a, $b, TMP_3, self = this; - args = (function() {if ((($a = val['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { - return val['$[]'](2) - } else { - return [] - }; return nil; })(); - result = self.$s("attrasgn", val['$[]'](0), "[]=", ($a = self).$s.apply($a, ["arglist"].concat(args))); - return result; - }; + self.$puts(" ["); + ($a = ($b = s).$each, $a.$$p = (TMP_3 = function(st){var self = TMP_3.$$s || this; +if (st == null) st = nil; + return self.$puts(" " + (st))}, TMP_3.$$s = self, TMP_3), $a).call($b); + return self.$puts(" ]"); + }), nil) && 'racc_print_states'; + })($scope.base, null) + })($scope.base) +}; - def.$_reduce_82 = function(val, _values, result) { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser/grammar"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash = Opal.hash; - result = self.$new_call(val['$[]'](0), val['$[]'](2), []); - return result; - }; + Opal.add_stubs(['$require', '$new', '$each', '$empty?', '$[]=', '$to_i', '$+', '$split', '$new_compstmt', '$[]', '$new_block', '$<<', '$new_body', '$lex_state=', '$lexer', '$new_alias', '$s', '$to_sym', '$value', '$new_if', '$new_while', '$new_until', '$new_rescue_mod', '$new_assign', '$new_op_asgn', '$op_to_setter', '$new_unary_call', '$new_return', '$new_break', '$new_next', '$new_call', '$new_js_call', '$new_super', '$new_yield', '$concat', '$children', '$new_assignable', '$new_js_attrasgn', '$new_attrasgn', '$new_colon2', '$new_colon3', '$new_const', '$new_sym', '$new_op_asgn1', '$raise', '$new_irange', '$new_erange', '$new_binary_call', '$new_int', '$new_float', '$include?', '$type', '$==', '$-@', '$to_f', '$new_and', '$new_or', '$cond_push', '$cond_pop', '$new_hash', '$add_block_pass', '$cmdarg_push', '$cmdarg_pop', '$new_block_pass', '$new_splat', '$line', '$new_paren', '$new_array', '$new_nil', '$new_class', '$new_sclass', '$new_module', '$push_scope', '$new_def', '$pop_scope', '$new_iter', '$new_ident', '$new_block_args', '$push', '$intern', '$nil?', '$new_str', '$str_append', '$new_xstr', '$new_regexp', '$new_str_content', '$strterm', '$strterm=', '$new_evstr', '$cond_lexpop', '$cmdarg_lexpop', '$new_gvar', '$new_ivar', '$new_cvar', '$new_dsym', '$negate_num', '$new_self', '$new_true', '$new_false', '$new___FILE__', '$new___LINE__', '$new_var_ref', '$new_kwrestarg', '$new_kwoptarg', '$new_kwarg', '$new_args_tail', '$new_args', '$add_local', '$scope', '$source']); + self.$require("racc/parser.rb"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - def.$_reduce_88 = function(val, _values, result) { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - result = self.$new_assignable(val['$[]'](0)); - return result; - }; + (function($base, $super) { + function $Parser(){}; + var self = $Parser = $klass($base, $super, 'Parser', $Parser); - def.$_reduce_89 = function(val, _values, result) { - var self = this; + var def = self.$$proto, $scope = self.$$scope, $a, $b, TMP_1, $c, TMP_3, $d, TMP_5, $e, TMP_7, clist = nil, racc_action_table = nil, arr = nil, idx = nil, racc_action_check = nil, racc_action_pointer = nil, racc_action_default = nil, racc_goto_table = nil, racc_goto_check = nil, racc_goto_pointer = nil, racc_goto_default = nil, racc_reduce_table = nil, racc_reduce_n = nil, racc_shift_n = nil, racc_token_table = nil, racc_nt_base = nil, racc_use_result_var = nil; - result = self.$new_attrasgn(val['$[]'](0), "[]=", val['$[]'](2)); - return result; - }; + clist = ["63,64,65,-95,51,-95,274,732,57,58,205,206,578,61,274,59,60,62,258,259", "66,67,795,622,-100,205,206,257,292,296,90,89,91,92,73,610,219,794,884", "-68,555,-85,74,293,656,815,94,93,84,50,86,85,87,-101,88,95,96,578,81", "82,101,205,206,-91,-98,100,600,205,206,-99,-96,101,-98,605,-93,-80,100", "655,269,817,606,578,269,357,621,578,30,-96,-95,52,273,54,578,32,612", "611,-93,101,273,584,-101,585,100,776,101,-86,731,-85,-100,100,79,73", "75,76,77,78,-95,-96,-95,74,80,-95,699,101,-98,577,-91,56,100,-91,53", "63,64,65,-540,51,297,83,-450,57,58,-97,554,-85,61,-450,59,60,62,258", "259,66,67,-85,309,-92,205,206,257,292,296,90,89,91,92,-91,-89,219,101", "599,577,-90,-87,100,293,-91,-85,94,93,84,50,86,85,362,-97,88,95,96,101", "81,82,722,101,100,577,908,101,100,577,656,820,100,585,101,227,577,656", "-93,100,-93,652,-101,-93,-101,363,782,-101,214,-539,-100,52,-100,54", "-99,-100,839,820,656,-96,732,-96,-90,655,-96,783,-98,227,-98,-88,655", "-98,79,73,75,76,77,78,732,309,-539,74,80,-97,-87,-97,-86,-89,-97,56", "-92,655,53,63,64,65,-95,51,297,83,547,57,58,549,205,206,61,-86,59,60", "62,258,259,66,67,-94,-462,-88,820,455,257,292,296,90,89,91,92,-540,-90", "219,274,-540,712,534,-539,-88,41,883,826,94,93,84,50,86,85,87,827,88", "95,96,-87,81,82,-89,38,39,-92,101,610,731,547,615,100,549,-90,-99,-93", "-99,760,-101,-99,-88,561,-86,-90,101,210,731,757,214,100,-88,52,-100", "54,564,-87,-94,-453,-89,40,309,-92,-460,269,-453,-87,269,218,-89,-460", "830,-92,79,73,75,76,77,78,-86,345,344,74,80,273,-459,923,612,611,-86", "56,760,-459,53,63,64,65,-458,51,37,83,757,57,58,-458,610,831,61,610", "59,60,62,258,259,66,67,547,758,760,546,564,257,292,296,90,89,91,92,757", "610,219,342,341,345,344,610,534,41,302,303,94,93,84,50,86,85,87,-455", "88,95,96,610,81,82,-455,38,39,413,529,530,345,344,415,414,612,611,608", "612,611,613,758,265,266,205,206,-456,-91,210,-462,267,214,664,-456,52", "547,54,-100,549,612,611,608,40,203,450,612,611,617,758,101,218,451,345", "344,100,79,73,75,76,77,78,612,611,623,74,80,834,-457,923,-85,634,633", "56,760,-457,53,63,64,65,-93,51,37,83,757,57,58,345,344,820,61,843,59", "60,62,258,259,66,67,453,204,452,839,820,257,292,296,90,89,91,92,-89", "-87,219,342,341,345,344,401,402,41,-98,-96,94,93,84,50,86,85,87,844", "88,95,96,227,81,82,531,38,39,-92,846,227,526,537,707,526,523,706,705", "-101,538,535,758,524,566,847,337,335,334,210,336,101,214,536,224,52", "100,54,226,225,222,223,224,40,-290,-290,226,225,222,223,101,218,-290", "227,699,100,79,73,75,76,77,78,-539,101,849,74,80,453,100,452,522,416", "525,56,227,540,53,63,64,65,227,51,37,83,224,57,58,309,226,225,61,857", "59,60,62,258,259,66,67,-290,403,-290,859,862,257,28,27,90,89,91,92,224", "863,219,865,226,225,867,628,869,41,688,871,94,93,84,50,86,85,87,262", "88,95,96,-269,81,82,686,38,39,227,231,236,237,238,233,235,243,244,239", "240,392,389,220,221,-80,685,241,242,683,210,550,675,214,674,309,52,551", "54,886,256,224,887,230,40,226,225,222,223,234,232,228,218,229,888,714", "889,79,260,75,76,77,78,891,892,699,74,80,492,245,714,-236,894,558,56", "-267,898,53,63,64,65,561,51,37,83,227,57,58,903,309,905,61,301,59,60", "62,258,259,66,67,342,341,345,344,227,257,28,27,90,89,91,92,227,227,219", "342,341,345,344,628,911,41,913,914,94,93,84,50,86,85,87,262,88,95,96", "309,81,82,562,38,39,227,231,236,237,238,233,235,243,244,239,240,564", "573,220,221,574,927,241,242,-270,210,300,405,214,269,246,52,930,54,632", "256,224,973,230,40,226,225,222,223,234,232,228,218,229,-540,564,867", "79,260,75,76,77,78,526,955,940,74,80,941,245,631,956,-267,198,56,946", "862,53,-259,-259,-259,948,-259,37,83,867,-259,-259,867,869,630,-259", "590,-259,-259,-259,-259,-259,-259,-259,103,104,105,106,107,-259,-259", "-259,-259,-259,-259,-259,197,566,-259,337,335,334,954,336,589,-259,196", "975,-259,-259,-259,-259,-259,-259,-259,-259,-259,-259,-259,627,-259", "-259,957,-259,-259,227,231,236,237,238,233,235,243,244,239,240,976,195", "220,221,108,963,241,242,591,-259,705,624,-259,269,620,-259,97,-259,616", "-259,224,-259,230,-259,226,225,222,223,234,232,228,-259,229,592,499", "499,-259,-259,-259,-259,-259,-259,499,499,-268,-259,-259,492,245,-67", "-236,797,798,-259,778,516,-259,63,64,65,8,51,-259,-259,490,57,58,490", "492,488,61,517,59,60,62,23,24,66,67,103,104,105,106,107,22,28,27,90", "89,91,92,873,874,17,215,875,95,96,807,7,41,6,9,94,93,84,50,86,85,87", "457,88,95,96,456,81,82,518,38,39,227,231,236,237,238,233,235,243,244", "239,240,809,810,220,221,527,454,241,242,735,36,585,699,30,814,727,52", "278,54,269,32,224,724,230,40,226,225,222,223,234,232,228,18,229,269", ",,79,73,75,76,77,78,203,201,,74,80,,245,799,202,,,56,,,53,63,64,65,", "51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,103,104,105,106,107,257", "28,27,90,89,91,92,,,219,,,,199,,200,41,,,94,93,84,50,86,85,87,262,88", "95,96,,81,82,,38,39,227,231,236,237,238,233,235,243,244,239,240,,,220", "221,,,241,242,,210,,,214,,,52,,54,,256,224,,230,40,226,225,222,223,234", "232,228,218,229,,,,79,260,75,76,77,78,526,596,,74,80,,245,,829,,,56", ",,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,17,,,,595,,525,41,,,94,93,84,50,86,85,87,,88,95,96", ",81,82,,38,39,227,231,236,237,238,233,235,243,244,239,240,,,220,221", ",,241,242,,210,,,214,,,52,,54,,,224,,230,40,226,225,222,223,234,232", "228,18,229,,,,79,73,75,76,77,78,-335,-335,,74,80,,245,,-335,,,56,,,53", "63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27", "90,89,91,92,,,17,,,,-335,,-335,41,,,94,93,84,50,86,85,87,,88,95,96,", "81,82,,38,39,227,231,236,237,238,233,235,243,244,239,240,,,220,221,", ",241,242,,210,,,214,,,52,,54,,,224,,230,40,226,225,222,223,234,232,228", "18,229,,,,79,73,75,76,77,78,526,587,,74,80,,245,,588,,,56,,,53,-542", "-542,-542,,-542,37,83,,-542,-542,,,,-542,,-542,-542,-542,-542,-542,-542", "-542,,,,,,-542,-542,-542,-542,-542,-542,-542,,,-542,,,,586,,589,-542", ",,-542,-542,-542,-542,-542,-542,-542,-542,-542,-542,-542,,-542,-542", ",-542,-542,227,231,236,237,238,233,235,243,244,239,240,,,220,221,,,241", "242,,-542,,,-542,-542,,-542,,-542,,-542,224,-542,230,-542,226,225,222", "223,234,232,228,-542,229,,,,-542,-542,-542,-542,-542,-542,526,596,,-542", "-542,,245,,594,,,-542,,,-542,-541,-541,-541,,-541,-542,-542,,-541,-541", ",,,-541,,-541,-541,-541,-541,-541,-541,-541,,,,,,-541,-541,-541,-541", "-541,-541,-541,,,-541,,,,595,,525,-541,,,-541,-541,-541,-541,-541,-541", "-541,-541,-541,-541,-541,,-541,-541,,-541,-541,227,231,236,237,238,233", "235,243,244,239,240,,,220,221,,,241,242,,-541,,,-541,-541,,-541,,-541", ",-541,224,-541,230,-541,226,225,222,223,234,232,228,-541,229,,,,-541", "-541,-541,-541,-541,-541,-288,-288,,-541,-541,,245,,-288,,,-541,,,-541", "-259,-259,-259,,-259,-541,-541,,-259,-259,,,,-259,,-259,-259,-259,-259", "-259,-259,-259,,,,,,-259,-259,-259,-259,-259,-259,-259,,,-259,,,,-288", ",-288,-259,,,-259,-259,-259,-259,-259,-259,-259,-259,-259,-259,-259", ",-259,-259,,-259,-259,227,231,236,237,238,233,235,243,244,239,240,,", "220,221,,,241,242,,-259,,,-259,269,,-259,,-259,,-259,224,-259,230,-259", "226,225,222,223,234,232,228,-259,229,,,,-259,-259,-259,-259,-259,-259", "-287,-287,,-259,-259,,245,,-287,,,-259,,-540,-259,63,64,65,,51,-259", "-259,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,-287,,-287,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38", "39,227,231,236,237,238,233,235,243,244,239,240,,,220,221,,,241,242,", "210,,,214,,,52,,54,,,224,,230,40,226,225,222,223,234,232,228,218,229", ",,,79,73,75,76,77,78,,,,74,80,,245,,,,,56,,,53,63,64,65,8,51,37,83,", "57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,", ",,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,231,236,237", "238,233,235,243,244,239,240,,,220,221,,,241,242,,36,,,30,,,52,,54,,32", "224,,230,40,226,225,222,223,234,232,228,18,229,,,,79,73,75,76,77,78", ",,,74,80,,245,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50", "86,85,87,,88,95,96,,81,82,,38,39,227,231,236,237,238,233,235,243,244", "239,240,,,220,221,,,241,242,,36,,,30,,,52,,54,,32,224,,230,40,226,225", "222,223,234,232,228,18,229,,,,79,73,75,76,77,78,,,,74,80,,245,,,,,56", ",,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22", "28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,", "81,82,,38,39,227,231,236,237,238,233,235,243,244,239,240,,,220,221,", ",241,242,,36,,,30,,,52,,54,,32,224,,230,40,226,225,222,223,234,232,228", "18,229,,,,79,73,75,76,77,78,,,,74,80,,245,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,231", "236,237,238,233,235,243,244,239,240,,,220,221,,,241,242,,36,,,30,,,52", ",54,,32,224,,230,40,226,225,222,223,234,232,228,18,229,,,,79,73,75,76", "77,78,,,,74,80,,245,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,231,236,237,238,233,235", "243,244,239,240,,,220,221,,,241,242,,210,,,214,,,52,,54,,661,224,254", "230,40,226,225,222,223,234,232,228,218,229,,,,79,73,75,76,77,78,,,,74", "80,,245,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85", "87,,88,95,96,,81,82,,38,39,227,231,236,237,238,233,235,243,244,239,240", ",,220,221,,,241,242,,36,,,30,,,52,,54,,32,224,,230,40,226,225,222,223", "234,232,228,18,229,,,,79,73,75,76,77,78,,,,74,80,,245,,,,,56,,,53,63", "64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90", "89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38", "39,227,231,236,237,238,233,235,243,244,239,240,,,220,221,,,241,242,", "36,,,30,,,52,,54,,32,224,,230,40,226,225,222,223,234,232,228,18,229", ",,,79,73,75,76,77,78,,,,74,80,,245,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219", ",,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,566,,337,335", "334,,336,,,,,,,,,328,,337,335,334,210,336,,214,,,52,,54,,661,,,,40,", ",566,569,337,335,334,218,336,,572,,79,73,75,76,77,78,339,,,74,80,,,342", "341,345,344,56,,,53,63,64,65,800,51,37,83,569,57,58,-537,,,61,572,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,566,219,337,335,334", ",336,,293,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,-453,-453,,227,,", ",,-453,,,,569,-537,,,,,,836,241,242,935,,,214,,,52,,54,,,-537,224,,230", ",226,225,222,223,,,228,,229,,,79,73,75,76,77,78,-453,,-453,74,80,,,", ",,,56,,,53,63,64,65,,51,297,83,,57,58,,,,61,,59,60,62,23,24,66,67,,", ",,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95", "96,227,81,82,,38,39,,,,,,,,,,,,241,242,,,328,,337,335,334,210,336,,214", "215,224,52,230,54,226,225,222,223,,40,228,,229,,,,,18,,,,,79,73,75,76", "77,78,339,323,,74,80,,,342,341,345,344,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,", ",41,,,94,93,84,50,86,85,87,,88,95,96,227,81,82,,38,39,,,,,,,,,,,,241", "242,,,328,,337,335,334,210,336,,214,,224,52,230,54,226,225,222,223,", "40,228,,229,,,,,218,,,,,79,73,75,76,77,78,339,,557,74,80,,,342,341,345", "344,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,", ",,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,328,,337,335,334,36,336,,30,,,52", ",54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,339,,,74,80,,,342,341", "345,344,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66", "67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87", "262,88,95,96,,81,82,,38,39,227,-560,-560,-560,-560,233,235,,,-560,-560", ",,,,,,241,242,,210,,,214,,,52,,54,,,224,254,230,40,226,225,222,223,234", "232,228,218,229,,,,79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89", "91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38", "39,227,231,236,237,238,233,235,,,239,240,,,,,,,241,242,,210,,,214,,", "52,,54,,256,224,254,230,40,226,225,222,223,234,232,228,218,229,,,,79", "260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,", "61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41", ",,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,227,231,236,237,238", "233,235,243,,239,240,,,,,,,241,242,,210,,,214,,,52,,54,,256,224,254", "230,40,226,225,222,223,234,232,228,218,229,,,,79,260,75,76,77,78,,,", "74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259", "66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85", "87,262,88,95,96,,81,82,,38,39,227,-560,-560,-560,-560,233,235,,,-560", "-560,,,,,,,241,242,,210,,,214,,,52,,54,,256,224,254,230,40,226,225,222", "223,234,232,228,218,229,,,,79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53", "63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292", "296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81", "82,,38,39,227,231,236,237,238,233,235,243,244,239,240,,,-560,-560,,", "241,242,,210,,,214,,,52,,54,,,224,,230,40,226,225,222,223,234,232,228", "218,229,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37", "83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92", ",,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,231", "236,237,238,233,235,243,244,239,240,,,-560,-560,,,241,242,,210,,,214", ",,52,,54,,,224,,230,40,226,225,222,223,234,232,228,218,229,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,-259,-259,-259,,-259,37,83,,-259", "-259,,,,-259,,-259,-259,-259,-259,-259,-259,-259,,,,,,-259,-259,-259", "-259,-259,-259,-259,,,-259,,,,,,,-259,,,-259,-259,-259,-259,-259,-259", "-259,-259,-259,-259,-259,,-259,-259,,-259,-259,227,-560,-560,-560,-560", "233,235,,,-560,-560,,,,,,,241,242,,-259,,,-259,269,,-259,,-259,,-259", "224,-259,230,-259,226,225,222,223,234,232,228,-259,229,,,,-259,-259", "-259,-259,-259,-259,,,,-259,-259,,,,,,,-259,,,-259,63,64,65,8,51,-259", "-259,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,", "17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,-560", "-560,-560,-560,233,235,,,-560,-560,,,,,,,241,242,,36,,,282,,,52,,54", ",32,224,,230,40,226,225,222,223,234,232,228,18,229,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,293,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,770,,337,335,334,760,336,,,,,,,,,757,", ",,,,,290,,,287,227,,52,,54,,286,,,,,,339,755,,,,241,242,342,341,345", "344,79,73,75,76,77,78,,,224,74,80,,226,225,222,223,,56,,,53,63,64,65", ",51,297,83,,57,58,,,,61,758,59,60,62,258,259,66,67,,,,,,257,292,296", "90,89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87,,88,95,96,227,81", "82,,770,,337,335,334,760,336,,,,,,,241,242,757,,,,,,,290,,,214,,224", "52,230,54,226,225,222,223,,,228,339,229,,,,,,342,341,345,344,79,73,75", "76,77,78,,,,74,80,,,,299,,,56,,,53,63,64,65,,51,297,83,,57,58,,,,61", "758,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,", "41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,-560,-560,-560", "-560,233,235,,,-560,-560,,,,,,,241,242,,210,,,214,,,52,,54,,,224,,230", "40,226,225,222,223,234,232,228,218,229,,,,79,73,75,76,77,78,,,,74,80", ",,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67", ",,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,", "88,95,96,,81,82,,38,39,227,-560,-560,-560,-560,233,235,,,-560,-560,", ",,,,,241,242,,210,,,214,,,52,,54,,,224,,230,40,226,225,222,223,234,232", "228,218,229,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,,", ",,,,,,,,,,,,,,241,242,,36,,,30,,,52,,54,,32,224,,230,40,226,225,222", "223,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,227,,", ",,,,,,,,,,,,,,241,242,,36,,,30,,,52,,54,,32,224,,230,40,226,225,222", "223,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,", ",,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54", ",32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63", "64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90", "89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93", "84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,260,75,76,77,78,,,,74,80,", ",,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67", ",,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262", "88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40", ",,,,,,,218,,,,,79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,", ",94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,", ",,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,", ",,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,", "18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,", "57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,", ",,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,", ",,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74", "80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66", "67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,101,,,,,100,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,", ",,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76", "77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60", "62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,293,,,94,93", "84,50,86,85,362,,88,95,96,,81,82,,770,,337,335,334,760,336,,,,,,,,,757", ",,,368,,,363,,,214,,,52,,54,,,,,,,,339,755,,,,,,342,341,345,344,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,297,83,,57,58,,,,61", "758,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,", "41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,", ",,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74", "80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66", "67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,", "40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,", "52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,", "53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257", "292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,", "218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83", ",57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,", ",,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,", ",,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,", ",,74,80,,,,,,,56,,,53,-536,-536,-536,,-536,37,83,,-536,-536,,,,-536", ",-536,-536,-536,-536,-536,-536,-536,,-536,,,,-536,-536,-536,-536,-536", "-536,-536,,,-536,,,,,,,-536,,,-536,-536,-536,-536,-536,-536,-536,-536", "-536,-536,-536,,-536,-536,,-536,-536,,,,,,,,,,,,,,,,,,,,,-536,,,-536", "-536,,-536,,-536,,-536,,-536,,-536,,,,,,,,-536,,-536,,,-536,-536,-536", "-536,-536,-536,,,,-536,-536,,,,,,,-536,,,-536,-537,-537,-537,,-537,-536", "-536,,-537,-537,,,,-537,,-537,-537,-537,-537,-537,-537,-537,,-537,,", ",-537,-537,-537,-537,-537,-537,-537,,,-537,,,,,,,-537,,,-537,-537,-537", "-537,-537,-537,-537,-537,-537,-537,-537,,-537,-537,,-537,-537,,,,,,", ",,,,,,,,,,,,,,-537,,,-537,-537,,-537,,-537,,-537,,-537,,-537,,,,,,,", "-537,,-537,,,-537,-537,-537,-537,-537,-537,,,,-537,-537,,,,,,,-537,", ",-537,63,64,65,,51,-537,-537,,57,58,,,,61,,59,60,62,258,259,66,67,,", ",,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,6,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,", ",,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76", "77,78,,,,74,80,,,,,,405,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,", "52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53", "63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27", "90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93", "84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214", ",,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,", ",53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,", "79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58", ",,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41", ",9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,", "36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80", ",,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,6,9,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,", ",,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,", ",,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54", ",32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63", "64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90", "89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61", ",59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30", ",,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28", "27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,422,,,,40,,,,,,,,218", ",,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,", ",41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,", ",,,210,,,214,,,52,,54,,422,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,", ",74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,", "40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89", "91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,", "79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58", ",,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,", ",41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,", ",,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,260,75,76,77,78", ",,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23", "24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,", ",,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89", "91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79", "73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61", ",59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41", ",,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,422,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80", ",,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,", ",,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86", "85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54", ",,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64", "65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90", "89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,770", ",337,335,334,760,336,,,,,,,,,757,,,,,,,290,,,287,,,52,,54,,,,,,,,339", ",,,,,,342,341,345,344,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64", "65,,51,297,83,,57,58,,,,61,758,59,60,62,258,259,66,67,,,,,,257,292,296", "90,89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87,,88,95,96,,81,82", ",,,,,,,,,,,,,,,,,,,,,,,290,,,287,,,52,,54,,,,,,,,,,,,,,,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,297,83,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", "84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,", ",52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22", "28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,", "81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18", ",,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219", ",,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,", ",,,,,,,,,,,210,,,214,,,52,,54,,,,254,,40,,,,,,,,218,,,,,79,260,75,76", "77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60", "62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93", "84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,661,,254,,40,,,,,,,,218,,,,,79,260,75,76,77,78,,,,74,80", ",,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,", ",,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37", "83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17", ",,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,", ",,,,,,,,210,,,214,,459,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78", ",,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258", "259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52", ",54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53", "63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27", "90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82", ",38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,", "79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,", ",,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,", ",,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,", ",,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74", "80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66", "67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,", "40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89", "91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,", ",94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,", ",,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,", ",,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,", ",56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,", ",,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", "84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,", ",52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257", "292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,", "218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83", ",57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,", "219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,", ",,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,", "52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,", "53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257", "292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96", ",81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,", "218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83", ",57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,", ",,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,", ",,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,", ",,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,", "40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65", ",51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89", "91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,254,,40,,,,,,,,218,", ",,,79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,", ",,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,210,,,214,,,508,,54,,256,,254,,40,,,,,,,,218,,,,,79,260,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59", "60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93", "84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,", "214,,512,52,,54,,256,,254,,40,,,,,,,,218,,,,,79,260,75,76,77,78,,,,74", "80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24,66", "67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,", "88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40", ",,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,", ",,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,781,,,,40,,,,,,,,218,,,,,79,73", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,", ",94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,", ",,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,", ",,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,282,,,52,,54,,32,,,,40,,,", ",,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37", "83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17", ",,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,", ",,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,", ",,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,23,24", "66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,", "40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,", "51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79", "260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,", "61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,", "293,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,290", ",,214,,,52,,54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,520,", ",56,,,53,63,64,65,8,51,297,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,", ",,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95", "96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,282,,,52,,54,,32,,,,40,,,", ",,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37", "83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,", ",219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,", ",,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,260", "75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94", "93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,260,75,76,77,78,,,,74,80", ",,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67", ",,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,", ",,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51", "37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,", ",17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,", ",,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62", "23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50", "86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54", ",32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63", "64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296", "90,89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87,,88,95,96,,81,82", ",,,,,,,,,,,,,,,,,,,,,,,718,,,214,,,52,,54,,,,,,,,,,,,,,,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,297,83,,57,58,,,,61,,59", "60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93", "84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,", ",52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56", ",,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22", "28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,", "81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18", ",,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219", ",,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,", ",,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,260,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84", "50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214", ",,52,,54,,661,,254,,40,,,,,,,,218,,,,,79,260,75,76,77,78,,,,74,80,,", ",,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67", ",,,,,257,292,296,90,89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87", ",88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,290,,,287,,,52,,54,,,,,,,,,", ",,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,297,83", ",57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,", ",,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,", ",,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,", "74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259", "66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85", "87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,", ",,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64", "65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90", "89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38", "39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79", "73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61", ",59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41", ",,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210", ",,214,,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,", ",,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,", ",,,,257,292,296,90,89,91,92,,,219,,,,,,,293,,,94,93,84,50,86,85,87,", "88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,290,,,287,,,52,,54,,,,,,,,,,", ",,,,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,297,83", ",57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,", "219,,,,,,,41,,,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,", ",,,,,,,,,,,,210,,,214,540,,52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76", "77,78,,,,74,80,,,,,,,56,,,53,63,64,65,8,51,37,83,,57,58,,,,61,,59,60", "62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,7,41,,9,94,93,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,36,,,30,,,52", ",54,,32,,,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53", "63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28", "27,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81", "82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218", ",,,,79,260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57", "58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,", ",,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,", ",,,,,,,,,210,,,214,,,52,,54,,256,,,,40,,,,,,,,218,,,,,79,260,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,293,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,,,,,,,,,,,,,,,,,,,,,,,290,,,287,,,52,", "54,,,,,,,,,,,,,,,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64", "65,8,51,297,83,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89", "91,92,,,17,,,,,,7,41,,9,94,93,84,50,86,85,87,,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,36,,,30,,,52,,54,,32,,,,40,,,,,,,,18,,,,,79,73,75", "76,77,78,,,,74,80,,,,,,405,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,", "59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93", "84,50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214", ",679,52,,54,,,,254,,40,,,,,,,,18,,,,,79,73,75,76,77,78,,,,74,80,,,,", ",,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,", ",,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,,88", "95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,,,40,", ",,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51", "37,83,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91", "92,,,219,,,,,,,41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39", ",,,,,,,,,,,,,,,,,,,,210,,,214,,,52,,54,,,,254,,40,,,,,,,,218,,,,,79", "260,75,76,77,78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,", "61,,59,60,62,258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,", "41,,,94,93,84,50,86,85,87,262,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,", ",,,,,210,,,214,,,52,,54,,661,,254,,40,,,,,,,,218,,,,,79,260,75,76,77", "78,,,,74,80,,,,,,,56,,,53,63,64,65,,51,37,83,,57,58,,,,61,,59,60,62", "258,259,66,67,,,,,,257,292,296,90,89,91,92,,,219,,,,,,,41,,,94,93,84", "50,86,85,87,,88,95,96,,81,82,,38,39,,,,,,,,,,,,,,,,,,,,,210,,,214,,", "52,,54,,,,,,40,,,,,,,,218,,,,,79,73,75,76,77,78,,,,74,80,,,,,,-287,56", ",,53,,,-287,-287,-287,37,83,-287,-287,-287,,-287,,,,,,,,,,-287,-287", ",,,,,,,,-287,-287,,-287,-287,-287,-287,-287,,,,,,,,,,,,,,,,,,,,,,-287", "-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287", ",,-287,-287,-287,,642,-287,,,-287,,-287,,-287,,-287,,-287,,-287,-287", "-287,-287,-287,-287,-287,,-287,,-287,,,,,,,,,,,,,-287,-287,-287,-287", ",-287,,-287,-287,,-287,,,-99,-287,-287,-287,,,,-287,-287,,-287,,,,,", ",,,,,,,,,,,,,,-287,-287,,-287,-287,-287,-287,-287,,,,,,,,,,,,,,,,,,", ",,,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287,-287", "-287,-287,,,-287,-287,-287,,642,,,,-287,,,,,,-287,,-287,,-287,-287,-287", "-287,-287,-287,-287,,-287,,-287,,,,,,,,,,,,,-287,-287,,-90,,-287,,-543", "-287,,-287,,,-99,-543,-543,-543,,,-543,-543,-543,,-543,,,,,,,,,-543", "-543,-543,,,,,,,,,-543,-543,,-543,-543,-543,-543,-543,,,,,,,,,,,,,,", ",,,,,,,-543,-543,-543,-543,-543,-543,-543,-543,-543,-543,-543,-543,-543", "-543,-543,,,-543,-543,-543,,796,-543,,,-543,,-543,,-543,,-543,,-543", ",-543,-543,-543,-543,-543,-543,-543,,-543,-543,-543,,,,,,,,,,,,,-543", "-543,-543,-543,,-543,,-543,-543,,-543,,,-97,-543,-543,-543,,,,-543,-543", ",-543,,,,,,,,,-543,,,,,,,,,,,-543,-543,,-543,-543,-543,-543,-543,,,", ",,,,,,,,,,,,,,,,,,-543,-543,-543,-543,-543,-543,-543,-543,-543,-543", "-543,-543,-543,-543,-543,,,-543,-543,-543,,639,,,,-543,,,,,,-543,,-543", ",-543,-543,-543,-543,-543,-543,-543,,-543,-543,-543,,,,,,,,,,,,,-543", "-543,,-88,,-543,,-282,-543,,-543,,,-97,-282,-282,-282,,,-282,-282,-282", ",-282,,,,,,,,,,-282,-282,-282,,,,,,,,-282,-282,,-282,-282,-282,-282", "-282,,,,,,,,,,,,,,,,,,,,,,-282,-282,-282,-282,-282,-282,-282,-282,-282", "-282,-282,-282,-282,-282,-282,,,-282,-282,-282,,,-282,,,-282,,-282,", "-282,,-282,,-282,,-282,-282,-282,-282,-282,-282,-282,,-282,,-282,,,", ",,,,,,,,,-282,-282,-282,-282,-296,-282,,-282,-282,,-282,-296,-296,-296", ",,-296,-296,-296,,-296,,,,,,,,,,-296,-296,,,,,,,,,-296,-296,,-296,-296", "-296,-296,-296,,,,,,,,,,,,,,,,,,,,,,-296,-296,-296,-296,-296,-296,-296", "-296,-296,-296,-296,-296,-296,-296,-296,,,-296,-296,-296,,,-296,,278", "-296,,-296,,-296,,-296,,-296,,-296,-296,-296,-296,-296,-296,-296,,-296", ",-296,,,,,,,,,,,,,-296,-296,-296,-296,-559,-296,,,-296,,-296,-559,-559", "-559,,,-559,-559,-559,,-559,,,,,,,,,,-559,,,,,,,,,,-559,-559,,-559,-559", "-559,-559,-559,,,,,,,,,,,,-559,,,,,,,-559,-559,-559,,,-559,-559,-559", ",-559,,,,,-559,-559,,,,-559,,,-559,,,,,269,-559,-559,-559,,-559,-559", "-559,-559,-559,,,,,,,,,,,,-559,,,,,,,,,,,,,-559,,-559,,,-559,,,-559", "-559,,-559,,,,,-559,,-559,-559,-559,269,-559,-559,-559,-559,,-559,,", ",,,,,,,-559,,,,,-559,,,,,-559,-559,,-559,-559,-559,-559,-559,-559,,-559", ",,-559,444,435,,,445,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124", "125,-559,-559,,,144,145,131,132,-559,,,,,269,-559,,,,,136,135,,120,141", "138,137,133,134,128,126,118,140,119,,-559,146,,,,,,,,,,,,-559,,-559", ",,-559,156,167,157,180,153,173,163,162,188,191,178,161,160,155,181,189", "190,165,154,168,172,174,166,159,,,,175,182,177,176,169,179,164,152,171", "170,183,184,185,186,187,151,158,149,150,147,148,111,113,110,,112,,,", ",,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131,132", ",,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,,,146", "192,,,,,,,,,,80,156,167,157,180,153,173,163,162,188,191,178,161,160", "155,181,189,190,165,154,168,172,174,166,159,,,,175,182,177,176,169,179", "164,152,171,170,183,184,185,186,187,151,158,149,150,147,148,111,113", ",,112,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144", "145,131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118", "140,119,,,146,192,,,,,,,,,,80,156,167,157,180,153,173,163,162,188,191", "178,161,160,155,181,189,190,165,154,168,172,174,166,159,,,,175,182,177", "176,169,179,164,152,171,170,183,184,185,186,187,151,158,149,150,147", "148,111,113,,,112,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124", "125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134", "128,126,118,140,119,,,146,192,,,,,,,,,,80,156,167,157,180,153,173,163", "162,188,191,178,161,160,155,181,189,190,165,154,168,172,174,166,159", ",,,175,182,177,176,169,179,164,152,171,170,183,184,185,186,187,151,158", "149,150,147,148,111,113,,,112,,,,,,,,,142,143,139,121,122,123,130,127", "129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138,137", "133,134,128,126,118,140,119,,,146,192,,,,,,,,,,80,156,167,157,180,153", "173,163,162,188,191,178,161,160,155,181,189,190,165,154,168,172,174", "166,159,,,,175,182,177,176,169,179,164,152,171,170,183,184,185,186,187", "151,158,149,150,147,148,111,113,399,398,112,,400,,,,,,,142,143,139,121", "122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135", ",120,141,138,137,133,134,128,126,118,140,119,,,146,156,167,157,180,153", "173,163,162,188,191,178,161,160,155,181,189,190,165,154,168,172,174", "166,159,,,,175,182,177,176,169,179,164,152,171,170,183,184,185,186,187", "151,158,149,150,147,148,111,113,399,398,112,,400,,,,,,,142,143,139,121", "122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135", ",120,141,138,137,133,134,128,126,118,140,119,,,146,156,167,157,180,153", "173,163,162,188,191,178,161,160,155,181,189,190,165,154,168,172,174", "166,159,,,,175,182,177,377,376,378,375,152,171,170,183,184,185,186,187", "151,158,149,150,373,374,371,113,86,85,372,,88,,,,,,,142,143,139,121", "122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,382,,,,,,136", "135,,120,141,138,137,133,134,128,126,118,140,119,,,146,156,167,157,180", "153,173,163,162,188,191,178,161,160,155,181,189,190,165,154,168,172", "174,166,159,,,,175,182,177,176,169,179,164,152,171,170,183,184,185,186", "187,151,158,149,150,147,148,111,113,,,112,,,,,,,,,142,143,139,121,122", "123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120", "141,138,137,133,134,128,126,118,140,119,444,435,146,,445,,,,,,,,,142", "143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,269", ",,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119,437,441,146", ",439,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145", "131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140", "119,444,435,146,,445,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124", "125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134", "128,126,118,140,119,647,441,146,,648,,,,,,,,,142,143,139,121,122,123", "130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141", "138,137,133,134,128,126,118,140,119,741,441,146,,742,,,,,,,,,142,143", "139,121,122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,", ",136,135,,120,141,138,137,133,134,128,126,118,140,119,739,435,146,,740", ",,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131", "132,,,,,,269,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119", "645,435,146,,646,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125", ",,,,144,145,131,132,,,,,,269,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,444,435,146,,445,,,,,,,,,142,143,139,121,122,123,130", "127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138", "137,133,134,128,126,118,140,119,690,435,146,,691,,,,,,,,,142,143,139", "121,122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,269,,,,,", "136,135,,120,141,138,137,133,134,128,126,118,140,119,747,441,146,,745", ",,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131", "132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119", "647,441,146,,648,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125", ",,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,645,435,146,,646,,,,,,,,,142,143,139,121,122,123,130", "127,129,,,124,125,,,,,144,145,131,132,,,,,,269,,,,,,136,135,,120,141", "138,137,133,134,128,126,118,140,119,444,435,146,,445,,,,,,,,,142,143", "139,121,122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,", ",136,135,,120,141,138,137,133,134,128,126,118,140,119,431,435,146,,432", ",,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131", "132,,,,,,269,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119", "968,435,146,,969,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125", ",,,,144,145,131,132,,,,,,269,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,444,435,146,,445,,,,,,,,,142,143,139,121,122,123,130", "127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138", "137,133,134,128,126,118,140,119,747,441,146,,900,,,,,,,,,142,143,139", "121,122,123,130,127,129,,,124,125,,,,,144,145,131,132,,,,,,,,,,,,136", "135,,120,141,138,137,133,134,128,126,118,140,119,970,441,146,,971,,", ",,,,,,142,143,139,121,122,123,130,127,129,,,124,125,,,,,144,145,131", "132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128,126,118,140,119", "693,441,146,,694,,,,,,,,,142,143,139,121,122,123,130,127,129,,,124,125", ",,,,144,145,131,132,,,,,,,,,,,,136,135,,120,141,138,137,133,134,128", "126,118,140,119,,,146"]; - def.$_reduce_90 = function(val, _values, result) { - var self = this; + racc_action_table = arr = Opal.get('Array').$new(25478, nil); - result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); - return result; - }; + idx = 0; - def.$_reduce_91 = function(val, _values, result) { - var self = this; + ($a = ($b = clist).$each, $a.$$p = (TMP_1 = function(str){var self = TMP_1.$$s || this, $a, $b, TMP_2; +if (str == null) str = nil; + return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_2 = function(i){var self = TMP_2.$$s || this, $a; +if (i == null) i = nil; + if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + arr['$[]='](idx, i.$to_i()) + }; + return idx = $rb_plus(idx, 1);}, TMP_2.$$s = self, TMP_2), $a).call($b)}, TMP_1.$$s = self, TMP_1), $a).call($b); - result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); - return result; - }; + clist = ["62,62,62,846,62,976,55,848,62,62,752,752,348,62,26,62,62,62,62,62,62", "62,646,393,590,703,703,62,62,62,62,62,62,62,71,618,62,645,798,685,322", "288,71,62,499,696,62,62,62,62,62,62,62,358,62,62,62,349,62,62,3,347", "347,527,740,3,367,607,607,742,739,600,646,380,355,685,600,499,26,703", "380,845,697,62,393,897,62,645,798,62,55,62,904,62,618,618,933,752,26", "353,936,353,752,618,848,846,848,288,957,848,62,62,62,62,62,62,976,968", "976,62,62,976,698,348,969,348,590,62,348,527,62,370,370,370,742,370", "62,62,371,370,370,970,322,288,370,371,370,370,370,370,370,370,370,288", "607,358,458,458,370,370,370,370,370,370,370,527,740,370,349,367,349", "742,739,349,370,527,355,370,370,370,370,370,370,370,741,370,370,370", "367,370,370,567,845,367,845,845,897,845,897,509,943,897,943,904,701", "904,486,933,904,933,458,936,933,936,370,631,936,370,970,957,370,957", "370,971,957,726,726,510,968,580,968,694,509,968,632,969,702,969,693", "486,969,370,370,370,370,370,370,581,293,741,370,370,970,690,970,631", "691,970,370,291,510,370,457,457,457,631,457,370,370,318,457,457,318", "311,311,457,814,457,457,457,457,457,457,457,632,209,741,704,211,457", "457,457,457,457,457,457,694,694,457,294,971,556,454,693,693,457,797", "710,457,457,457,457,457,457,457,711,457,457,457,690,457,457,691,457", "457,291,580,388,580,708,388,580,708,694,971,209,971,867,211,971,693", "714,814,694,581,457,581,867,457,581,693,457,454,457,716,690,797,372", "691,457,311,291,373,294,372,690,296,457,691,373,718,291,457,457,457", "457,457,457,814,867,867,457,457,294,374,948,388,388,814,457,948,374", "457,456,456,456,375,456,457,457,948,456,456,375,494,719,456,386,456", "456,456,456,456,456,456,314,867,859,314,720,456,456,456,456,456,456", "456,859,384,456,948,948,948,948,390,301,456,37,37,456,456,456,456,456", "456,456,376,456,456,456,395,456,456,376,456,456,110,297,297,859,859", "110,110,494,494,494,386,386,386,948,25,25,15,15,377,301,456,35,25,456", "494,377,456,315,456,301,315,384,384,384,456,208,208,390,390,390,859", "750,456,208,564,564,750,456,456,456,456,456,456,395,395,395,456,456", "723,378,865,35,432,431,456,865,378,456,455,455,455,35,455,456,456,865", "455,455,862,862,728,455,734,455,455,455,455,455,455,455,208,14,208,958", "958,455,455,455,455,455,455,455,432,431,455,865,865,865,865,83,83,455", "432,431,455,455,455,455,455,455,455,736,455,455,455,481,455,455,298", "455,455,14,738,482,304,304,543,289,289,542,541,14,304,302,865,289,572", "743,572,572,572,455,572,352,455,303,481,455,352,455,481,481,481,481", "482,455,847,847,482,482,482,482,279,455,847,463,532,279,455,455,455", "455,455,455,747,756,748,455,455,304,756,304,289,193,289,455,306,528", "455,453,453,453,462,453,455,455,463,453,453,313,463,463,453,759,453", "453,453,453,453,453,453,847,97,847,763,764,453,453,453,453,453,453,453", "462,766,453,767,462,462,768,420,770,453,521,773,453,453,453,453,453", "453,453,453,453,453,453,780,453,453,519,453,453,420,420,420,420,420", "420,420,420,420,420,420,78,77,420,420,516,515,420,420,511,453,316,505", "453,504,501,453,317,453,801,453,420,802,420,453,420,420,420,420,420", "420,420,453,420,806,831,808,453,453,453,453,453,453,811,812,813,453", "453,319,420,558,420,818,327,453,821,822,453,452,452,452,328,452,453", "453,467,452,452,837,41,840,452,36,452,452,452,452,452,452,452,831,831", "831,831,466,452,452,452,452,452,452,452,465,464,452,558,558,558,558", "651,850,452,853,854,452,452,452,452,452,452,452,452,452,452,452,855", "452,452,330,452,452,651,651,651,651,651,651,651,651,651,651,651,331", "343,651,651,346,877,651,651,878,452,34,354,452,438,20,452,890,452,430", "452,651,962,651,452,651,651,651,651,651,651,651,452,651,900,901,964", "452,452,452,452,452,452,934,934,906,452,452,907,651,429,934,425,12,452", "915,917,452,443,443,443,920,443,452,452,921,443,443,922,923,423,443", "357,443,443,443,443,443,443,443,684,684,684,684,684,443,443,443,443", "443,443,443,11,836,443,836,836,836,934,836,934,443,10,965,443,443,443", "443,443,443,443,443,443,443,443,417,443,443,935,443,443,676,676,676", "676,676,676,676,676,676,676,676,967,9,676,676,6,945,676,676,359,443", "953,411,443,443,392,443,1,443,389,443,676,443,676,443,676,676,676,676", "676,676,676,443,676,363,635,268,443,443,443,443,443,443,640,643,629", "443,443,255,676,281,676,649,650,443,622,283,443,0,0,0,0,0,443,443,252", "0,0,658,660,251,0,284,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,774,774", "0,219,774,774,774,673,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,212,0,0,285,0", "0,653,653,653,653,653,653,653,653,653,653,653,677,680,653,653,290,210", "653,653,583,0,582,687,0,689,576,0,292,0,692,0,653,571,653,0,653,653", "653,653,653,653,653,0,653,695,,,0,0,0,0,0,0,13,13,,0,0,,653,653,13,", ",0,,,0,954,954,954,,954,0,0,,954,954,,,,954,,954,954,954,954,954,954", "954,280,280,280,280,280,954,954,954,954,954,954,954,,,954,,,,13,,13", "954,,,954,954,954,954,954,954,954,954,954,954,954,,954,954,,954,954", "428,428,428,428,428,428,428,428,428,428,428,,,428,428,,,428,428,,954", ",,954,,,954,,954,,954,428,,428,954,428,428,428,428,428,428,428,954,428", ",,,954,954,954,954,954,954,717,717,,954,954,,428,,717,,,954,,,954,350", "350,350,,350,954,954,,350,350,,,,350,,350,350,350,350,350,350,350,,", ",,,350,350,350,350,350,350,350,,,350,,,,717,,717,350,,,350,350,350,350", "350,350,350,,350,350,350,,350,350,,350,350,928,928,928,928,928,928,928", "928,928,928,928,,,928,928,,,928,928,,350,,,350,,,350,,350,,,928,,928", "350,928,928,928,928,928,928,928,350,928,,,,350,350,350,350,350,350,42", "42,,350,350,,928,,42,,,350,,,350,351,351,351,,351,350,350,,351,351,", ",,351,,351,351,351,351,351,351,351,,,,,,351,351,351,351,351,351,351", ",,351,,,,42,,42,351,,,351,351,351,351,351,351,351,,351,351,351,,351", "351,,351,351,19,19,19,19,19,19,19,19,19,19,19,,,19,19,,,19,19,,351,", ",351,,,351,,351,,,19,,19,351,19,19,19,19,19,19,19,351,19,,,,351,351", "351,351,351,351,356,356,,351,351,,19,,356,,,351,,,351,442,442,442,,442", "351,351,,442,442,,,,442,,442,442,442,442,442,442,442,,,,,,442,442,442", "442,442,442,442,,,442,,,,356,,356,442,,,442,442,442,442,442,442,442", "442,442,442,442,,442,442,,442,442,882,882,882,882,882,882,882,882,882", "882,882,,,882,882,,,882,882,,442,,,442,442,,442,,442,,442,882,442,882", "442,882,882,882,882,882,882,882,442,882,,,,442,442,442,442,442,442,365", "365,,442,442,,882,,365,,,442,,,442,441,441,441,,441,442,442,,441,441", ",,,441,,441,441,441,441,441,441,441,,,,,,441,441,441,441,441,441,441", ",,441,,,,365,,365,441,,,441,441,441,441,441,441,441,441,441,441,441", ",441,441,,441,441,880,880,880,880,880,880,880,880,880,880,880,,,880", "880,,,880,880,,441,,,441,441,,441,,441,,441,880,441,880,441,880,880", "880,880,880,880,880,441,880,,,,441,441,441,441,441,441,592,592,,441", "441,,880,,592,,,441,,,441,433,433,433,,433,441,441,,433,433,,,,433,", "433,433,433,433,433,433,433,,,,,,433,433,433,433,433,433,433,,,433,", ",,592,,592,433,,,433,433,433,433,433,433,433,433,433,433,433,,433,433", ",433,433,447,447,447,447,447,447,447,447,447,447,447,,,447,447,,,447", "447,,433,,,433,433,,433,,433,,433,447,433,447,433,447,447,447,447,447", "447,447,433,447,,,,433,433,433,433,433,433,745,745,,433,433,,447,,745", ",,433,,745,433,422,422,422,,422,433,433,,422,422,,,,422,,422,422,422", "422,422,422,422,,,,,,422,422,422,422,422,422,422,,,422,,,,745,,745,422", ",,422,422,422,422,422,422,422,,422,422,422,,422,422,,422,422,792,792", "792,792,792,792,792,792,792,792,792,,,792,792,,,792,792,,422,,,422,", ",422,,422,,,792,,792,422,792,792,792,792,792,792,792,422,792,,,,422", "422,422,422,422,422,,,,422,422,,792,,,,,422,,,422,952,952,952,952,952", "422,422,,952,952,,,,952,,952,952,952,952,952,952,952,,,,,,952,952,952", "952,952,952,952,,,952,,,,,,952,952,,952,952,952,952,952,952,952,952", ",952,952,952,,952,952,,952,952,790,790,790,790,790,790,790,790,790,790", "790,,,790,790,,,790,790,,952,,,952,,,952,,952,,952,790,,790,952,790", "790,790,790,790,790,790,952,790,,,,952,952,952,952,952,952,,,,952,952", ",790,,,,,952,,,952,944,944,944,944,944,952,952,,944,944,,,,944,,944", "944,944,944,944,944,944,,,,,,944,944,944,944,944,944,944,,,944,,,,,", "944,944,,944,944,944,944,944,944,944,944,,944,944,944,,944,944,,944", "944,787,787,787,787,787,787,787,787,787,787,787,,,787,787,,,787,787", ",944,,,944,,,944,,944,,944,787,,787,944,787,787,787,787,787,787,787", "944,787,,,,944,944,944,944,944,944,,,,944,944,,787,,,,,944,,,944,939", "939,939,939,939,944,944,,939,939,,,,939,,939,939,939,939,939,939,939", ",,,,,939,939,939,939,939,939,939,,,939,,,,,,939,939,,939,939,939,939", "939,939,939,939,,939,939,939,,939,939,,939,939,785,785,785,785,785,785", "785,785,785,785,785,,,785,785,,,785,785,,939,,,939,,,939,,939,,939,785", ",785,939,785,785,785,785,785,785,785,939,785,,,,939,939,939,939,939", "939,,,,939,939,,785,,,,,939,,,939,932,932,932,932,932,939,939,,932,932", ",,,932,,932,932,932,932,932,932,932,,,,,,932,932,932,932,932,932,932", ",,932,,,,,,932,932,,932,932,932,932,932,932,932,932,,932,932,932,,932", "932,,932,932,779,779,779,779,779,779,779,779,779,779,779,,,779,779,", ",779,779,,932,,,932,,,932,,932,,932,779,,779,932,779,779,779,779,779", "779,779,932,779,,,,932,932,932,932,932,932,,,,932,932,,779,,,,,932,", ",932,930,930,930,,930,932,932,,930,930,,,,930,,930,930,930,930,930,930", "930,,,,,,930,930,930,930,930,930,930,,,930,,,,,,,930,,,930,930,930,930", "930,930,930,,930,930,930,,930,930,,930,930,539,539,539,539,539,539,539", "539,539,539,539,,,539,539,,,539,539,,930,,,930,,,930,,930,,930,539,930", "539,930,539,539,539,539,539,539,539,930,539,,,,930,930,930,930,930,930", ",,,930,930,,539,,,,,930,,,930,912,912,912,912,912,930,930,,912,912,", ",,912,,912,912,912,912,912,912,912,,,,,,912,912,912,912,912,912,912", ",,912,,,,,,912,912,,912,912,912,912,912,912,912,912,,912,912,912,,912", "912,,912,912,700,700,700,700,700,700,700,700,700,700,700,,,700,700,", ",700,700,,912,,,912,,,912,,912,,912,700,,700,912,700,700,700,700,700", "700,700,912,700,,,,912,912,912,912,912,912,,,,912,912,,700,,,,,912,", ",912,909,909,909,909,909,912,912,,909,909,,,,909,,909,909,909,909,909", "909,909,,,,,,909,909,909,909,909,909,909,,,909,,,,,,909,909,,909,909", "909,909,909,909,909,909,,909,909,909,,909,909,,909,909,249,249,249,249", "249,249,249,249,249,249,249,,,249,249,,,249,249,,909,,,909,,,909,,909", ",909,249,,249,909,249,249,249,249,249,249,249,909,249,,,,909,909,909", "909,909,909,,,,909,909,,249,,,,,909,,,909,908,908,908,,908,909,909,", "908,908,,,,908,,908,908,908,908,908,908,908,,,,,,908,908,908,908,908", "908,908,,,908,,,,,,,908,,,908,908,908,908,908,908,908,,908,908,908,", "908,908,,908,908,339,,339,339,339,,339,,,,,,,,,655,,655,655,655,908", "655,,908,,,908,,908,,908,,,,908,,,569,339,569,569,569,908,569,,339,", "908,908,908,908,908,908,655,,,908,908,,,655,655,655,655,908,,,908,898", "898,898,655,898,908,908,569,898,898,362,,,898,569,898,898,898,898,898", "898,898,,,,,,898,898,898,898,898,898,898,,724,898,724,724,724,,724,", "898,,,898,898,898,898,898,898,898,,898,898,898,,898,898,,362,362,,474", ",,,,362,,,,724,362,,,,,,724,474,474,898,,,898,,,898,,898,,,362,474,", "474,,474,474,474,474,,,474,,474,,,898,898,898,898,898,898,362,,362,898", "898,,,,,,,898,,,898,17,17,17,,17,898,898,,17,17,,,,17,,17,17,17,17,17", "17,17,,,,,,17,17,17,17,17,17,17,,,17,,,,,,,17,,,17,17,17,17,17,17,17", ",17,17,17,475,17,17,,17,17,,,,,,,,,,,,475,475,,,56,,56,56,56,17,56,", "17,17,475,17,475,17,475,475,475,475,,17,475,,475,,,,,17,,,,,17,17,17", "17,17,17,56,56,,17,17,,,56,56,56,56,17,,,17,18,18,18,,18,17,17,,18,18", ",,,18,,18,18,18,18,18,18,18,,,,,,18,18,18,18,18,18,18,,,18,,,,,,,18", ",,18,18,18,18,18,18,18,,18,18,18,472,18,18,,18,18,,,,,,,,,,,,472,472", ",,323,,323,323,323,18,323,,18,,472,18,472,18,472,472,472,472,,18,472", ",472,,,,,18,,,,,18,18,18,18,18,18,323,,323,18,18,,,323,323,323,323,18", ",,18,894,894,894,894,894,18,18,,894,894,,,,894,,894,894,894,894,894", "894,894,,,,,,894,894,894,894,894,894,894,,,894,,,,,,894,894,,894,894", "894,894,894,894,894,894,,894,894,894,,894,894,,894,894,,,,,,,,,,,,,", ",,562,,562,562,562,894,562,,894,,,894,,894,,894,,,,894,,,,,,,,894,,", ",,894,894,894,894,894,894,562,,,894,894,,,562,562,562,562,894,,,894", "889,889,889,,889,894,894,,889,889,,,,889,,889,889,889,889,889,889,889", ",,,,,889,889,889,889,889,889,889,,,889,,,,,,,889,,,889,889,889,889,889", "889,889,889,889,889,889,,889,889,,889,889,477,477,477,477,477,477,477", ",,477,477,,,,,,,477,477,,889,,,889,,,889,,889,,,477,889,477,889,477", "477,477,477,477,477,477,889,477,,,,889,889,889,889,889,889,,,,889,889", ",,,,,,889,,,889,22,22,22,,22,889,889,,22,22,,,,22,,22,22,22,22,22,22", "22,,,,,,22,22,22,22,22,22,22,,,22,,,,,,,22,,,22,22,22,22,22,22,22,22", "22,22,22,,22,22,,22,22,483,483,483,483,483,483,483,,,483,483,,,,,,,483", "483,,22,,,22,,,22,,22,,22,483,22,483,22,483,483,483,483,483,483,483", "22,483,,,,22,22,22,22,22,22,,,,22,22,,,,,,,22,,,22,23,23,23,,23,22,22", ",23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,", ",,,,23,,,23,23,23,23,23,23,23,23,23,23,23,,23,23,,23,23,484,484,484", "484,484,484,484,484,,484,484,,,,,,,484,484,,23,,,23,,,23,,23,,23,484", "23,484,23,484,484,484,484,484,484,484,23,484,,,,23,23,23,23,23,23,,", ",23,23,,,,,,,23,,,23,24,24,24,,24,23,23,,24,24,,,,24,,24,24,24,24,24", "24,24,,,,,,24,24,24,24,24,24,24,,,24,,,,,,,24,,,24,24,24,24,24,24,24", "24,24,24,24,,24,24,,24,24,480,480,480,480,480,480,480,,,480,480,,,,", ",,480,480,,24,,,24,,,24,,24,,24,480,24,480,24,480,480,480,480,480,480", "480,24,480,,,,24,24,24,24,24,24,,,,24,24,,,,,,,24,,,24,885,885,885,", "885,24,24,,885,885,,,,885,,885,885,885,885,885,885,885,,,,,,885,885", "885,885,885,885,885,,,885,,,,,,,885,,,885,885,885,885,885,885,885,,885", "885,885,,885,885,,885,885,461,461,461,461,461,461,461,461,461,461,461", ",,461,461,,,461,461,,885,,,885,,,885,,885,,,461,,461,885,461,461,461", "461,461,461,461,885,461,,,,885,885,885,885,885,885,,,,885,885,,,,,,", "885,,,885,884,884,884,,884,885,885,,884,884,,,,884,,884,884,884,884", "884,884,884,,,,,,884,884,884,884,884,884,884,,,884,,,,,,,884,,,884,884", "884,884,884,884,884,,884,884,884,,884,884,,884,884,460,460,460,460,460", "460,460,460,460,460,460,,,460,460,,,460,460,,884,,,884,,,884,,884,,", "460,,460,884,460,460,460,460,460,460,460,884,460,,,,884,884,884,884", "884,884,,,,884,884,,,,,,,884,,,884,27,27,27,,27,884,884,,27,27,,,,27", ",27,27,27,27,27,27,27,,,,,,27,27,27,27,27,27,27,,,27,,,,,,,27,,,27,27", "27,27,27,27,27,27,27,27,27,,27,27,,27,27,478,478,478,478,478,478,478", ",,478,478,,,,,,,478,478,,27,,,27,27,,27,,27,,27,478,27,478,27,478,478", "478,478,478,478,478,27,478,,,,27,27,27,27,27,27,,,,27,27,,,,,,,27,,", "27,30,30,30,30,30,27,27,,30,30,,,,30,,30,30,30,30,30,30,30,,,,,,30,30", "30,30,30,30,30,,,30,,,,,,30,30,,30,30,30,30,30,30,30,30,,30,30,30,,30", "30,,30,30,479,479,479,479,479,479,479,,,479,479,,,,,,,479,479,,30,,", "30,,,30,,30,,30,479,,479,30,479,479,479,479,479,479,479,30,479,,,,30", "30,30,30,30,30,,,,30,30,,,,,,,30,,,30,31,31,31,,31,30,30,,31,31,,,,31", ",31,31,31,31,31,31,31,,,,,,31,31,31,31,31,31,31,,,31,,,,,,,31,,,31,31", "31,31,31,31,31,,31,31,31,,31,31,,926,,926,926,926,926,926,,,,,,,,,926", ",,,,,,31,,,31,470,,31,,31,,31,,,,,,926,926,,,,470,470,926,926,926,926", "31,31,31,31,31,31,,,470,31,31,,470,470,470,470,,31,,,31,32,32,32,,32", "31,31,,32,32,,,,32,926,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32", ",,32,,,,,,,32,,,32,32,32,32,32,32,32,,32,32,32,473,32,32,,755,,755,755", "755,755,755,,,,,,,473,473,755,,,,,,,32,,,32,,473,32,473,32,473,473,473", "473,,,473,755,473,,,,,,755,755,755,755,32,32,32,32,32,32,,,,32,32,,", ",32,,,32,,,32,883,883,883,,883,32,32,,883,883,,,,883,755,883,883,883", "883,883,883,883,,,,,,883,883,883,883,883,883,883,,,883,,,,,,,883,,,883", "883,883,883,883,883,883,,883,883,883,,883,883,,883,883,471,471,471,471", "471,471,471,,,471,471,,,,,,,471,471,,883,,,883,,,883,,883,,,471,,471", "883,471,471,471,471,471,471,471,883,471,,,,883,883,883,883,883,883,", ",,883,883,,,,,,,883,,,883,869,869,869,,869,883,883,,869,869,,,,869,", "869,869,869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,", ",,,,,869,,,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869", "476,476,476,476,476,476,476,,,476,476,,,,,,,476,476,,869,,,869,,,869", ",869,,,476,,476,869,476,476,476,476,476,476,476,869,476,,,,869,869,869", "869,869,869,,,,869,869,,,,,,,869,,,869,842,842,842,842,842,869,869,", "842,842,,,,842,,842,842,842,842,842,842,842,,,,,,842,842,842,842,842", "842,842,,,842,,,,,,842,842,,842,842,842,842,842,842,842,842,,842,842", "842,,842,842,,842,842,468,,,,,,,,,,,,,,,,,468,468,,842,,,842,,,842,", "842,,842,468,,468,842,468,468,468,468,,,,842,,,,,842,842,842,842,842", "842,,,,842,842,,,,,,,842,,,842,841,841,841,841,841,842,842,,841,841", ",,,841,,841,841,841,841,841,841,841,,,,,,841,841,841,841,841,841,841", ",,841,,,,,,841,841,,841,841,841,841,841,841,841,841,,841,841,841,,841", "841,,841,841,469,,,,,,,,,,,,,,,,,469,469,,841,,,841,,,841,,841,,841", "469,,469,841,469,469,469,469,,,,841,,,,,841,841,841,841,841,841,,,,841", "841,,,,,,,841,,,841,38,38,38,,38,841,841,,38,38,,,,38,,38,38,38,38,38", "38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38", ",38,38,38,,38,38,,38,38,,,,,,,,,,,,,,,,,,,,,38,,,38,,,38,,38,,,,,,38", ",,,,,,,38,,,,,38,38,38,38,38,38,,,,38,38,,,,,,,38,,,38,39,39,39,,39", "38,38,,39,39,,,,39,,39,39,39,39,39,39,39,,,,,,39,39,39,39,39,39,39,", ",39,,,,,,,39,,,39,39,39,39,39,39,39,,39,39,39,,39,39,,39,39,,,,,,,,", ",,,,,,,,,,,,39,,,39,,,39,,39,,,,,,39,,,,,,,,39,,,,,39,39,39,39,39,39", ",,,39,39,,,,,,,39,,,39,40,40,40,,40,39,39,,40,40,,,,40,,40,40,40,40", "40,40,40,,,,,,40,40,40,40,40,40,40,,,40,,,,,,,40,,,40,40,40,40,40,40", "40,,40,40,40,,40,40,,40,40,,,,,,,,,,,,,,,,,,,,,40,,,40,,,40,,40,,,,", ",40,,,,,,,,40,,,,,40,40,40,40,40,40,,,,40,40,,,,,,,40,,,40,839,839,839", ",839,40,40,,839,839,,,,839,,839,839,839,839,839,839,839,,,,,,839,839", "839,839,839,839,839,,,839,,,,,,,839,,,839,839,839,839,839,839,839,,839", "839,839,,839,839,,839,839,,,,,,,,,,,,,,,,,,,,,839,,,839,,,839,,839,", ",,,,839,,,,,,,,839,,,,,839,839,839,839,839,839,,,,839,839,,,,,,,839", ",,839,820,820,820,820,820,839,839,,820,820,,,,820,,820,820,820,820,820", "820,820,,,,,,820,820,820,820,820,820,820,,,820,,,,,,820,820,,820,820", "820,820,820,820,820,820,,820,820,820,,820,820,,820,820,,,,,,,,,,,,,", ",,,,,,,820,,,820,,,820,,820,,820,,,,820,,,,,,,,820,,,,,820,820,820,820", "820,820,,,,820,820,,,,,,,820,,,820,52,52,52,,52,820,820,,52,52,,,,52", ",52,52,52,52,52,52,52,,,,,,52,52,52,52,52,52,52,,,52,,,,,,,52,,,52,52", "52,52,52,52,52,,52,52,52,,52,52,,52,52,,,,,,,,,,,,,,,,,,,,,52,,,52,", ",52,,52,,,,,,52,,,,,,,,52,,,,,52,52,52,52,52,52,,,,52,52,,,,,,,52,,", "52,53,53,53,,53,52,52,,53,53,,,,53,,53,53,53,53,53,53,53,,,,,,53,53", "53,53,53,53,53,,,53,,,,,,,53,,,53,53,53,53,53,53,53,53,53,53,53,,53", "53,,53,53,,,,,,,,,,,,,,,,,,,,,53,,,53,,,53,,53,,53,,,,53,,,,,,,,53,", ",,,53,53,53,53,53,53,,,,53,53,,,,,,,53,,,53,54,54,54,,54,53,53,,54,54", ",,,54,,54,54,54,54,54,54,54,,,,,,54,54,54,54,54,54,54,,,54,,,,,,,54", ",,54,54,54,54,54,54,54,54,54,54,54,,54,54,,54,54,,,,,,,,,,,,,,,,,,,", ",54,,,54,,,54,,54,,,,,,54,,,,,,,,54,,,,,54,54,54,54,54,54,,,,54,54,", ",,,,,54,,,54,809,809,809,,809,54,54,,809,809,,,,809,,809,809,809,809", "809,809,809,,,,,,809,809,809,809,809,809,809,,,809,,,,,,,809,,,809,809", "809,809,809,809,809,,809,809,809,,809,809,,809,809,,,,,,,,,,,,,,,,,", ",,,809,,,809,,,809,,809,,809,,,,809,,,,,,,,809,,,,,809,809,809,809,809", "809,,,,809,809,,,,,,,809,,,809,796,796,796,,796,809,809,,796,796,,,", "796,,796,796,796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,", "796,,,,,,,796,,,796,796,796,796,796,796,796,,796,796,796,,796,796,,796", "796,,,,,,,,,,,,,,,,,,,,,796,,,796,,,796,,796,,,,,,796,,,,,,,,796,,,", ",796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,57,57,57,,57,796", "796,,57,57,,,,57,,57,57,57,57,57,57,57,,,,,,57,57,57,57,57,57,57,,,57", ",,,,,,57,,,57,57,57,57,57,57,57,,57,57,57,,57,57,,57,57,,,,,,,,,,,,", ",,,,,,,,57,,,57,,,57,,57,,,,,,57,,,,,,,,57,,,,,57,57,57,57,57,57,,,", "57,57,,,,,,,57,,,57,58,58,58,,58,57,57,,58,58,,,,58,,58,58,58,58,58", "58,58,,,,,,58,58,58,58,58,58,58,,,58,,,,,,,58,,,58,58,58,58,58,58,58", ",58,58,58,,58,58,,58,58,,,,,,,,,,,,,,,,,,,,,58,,,58,,,58,,58,,,,,,58", ",,,,,,,58,,,,,58,58,58,58,58,58,,,,58,58,,,,,,,58,,,58,61,61,61,,61", "58,58,,61,61,,,,61,,61,61,61,61,61,61,61,,,,,,61,61,61,61,61,61,61,", ",61,,,,,,,61,,,61,61,61,61,61,61,61,,61,61,61,,61,61,,61,61,,,,,,,,", ",,,,,,,,,,,,61,,,61,,,61,,61,,,,,,61,,,,,,,,61,,,,,61,61,61,61,61,61", ",,,61,61,61,,,,,61,61,,,61,382,382,382,,382,61,61,,382,382,,,,382,,382", "382,382,382,382,382,382,,,,,,382,382,382,382,382,382,382,,,382,,,,,", ",382,,,382,382,382,382,382,382,382,,382,382,382,,382,382,,382,382,,", ",,,,,,,,,,,,,,,,,,382,,,382,,,382,,382,,,,,,382,,,,,,,,382,,,,,382,382", "382,382,382,382,,,,382,382,,,,,,,382,,,382,63,63,63,,63,382,382,,63", "63,,,,63,,63,63,63,63,63,63,63,,,,,,63,63,63,63,63,63,63,,,63,,,,,,", "63,,,63,63,63,63,63,63,63,,63,63,63,,63,63,,603,,603,603,603,603,603", ",,,,,,,,603,,,,63,,,63,,,63,,,63,,63,,,,,,,,603,603,,,,,,603,603,603", "603,63,63,63,63,63,63,,,,63,63,,,,,,,63,,,63,795,795,795,,795,63,63", ",795,795,,,,795,603,795,795,795,795,795,795,795,,,,,,795,795,795,795", "795,795,795,,,795,,,,,,,795,,,795,795,795,795,795,795,795,,795,795,795", ",795,795,,795,795,,,,,,,,,,,,,,,,,,,,,795,,,795,,,795,,795,,,,,,795", ",,,,,,,795,,,,,795,795,795,795,795,795,,,,795,795,,,,,,,795,,,795,794", "794,794,,794,795,795,,794,794,,,,794,,794,794,794,794,794,794,794,,", ",,,794,794,794,794,794,794,794,,,794,,,,,,,794,,,794,794,794,794,794", "794,794,,794,794,794,,794,794,,794,794,,,,,,,,,,,,,,,,,,,,,794,,,794", ",,794,,794,,,,,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794", ",,,,,,794,,,794,783,783,783,,783,794,794,,783,783,,,,783,,783,783,783", "783,783,783,783,,,,,,783,783,783,783,783,783,783,,,783,,,,,,,783,,,783", "783,783,783,783,783,783,,783,783,783,,783,783,,783,783,,,,,,,,,,,,,", ",,,,,,,783,,,783,,,783,,783,,,,,,783,,,,,,,,783,,,,,783,783,783,783", "783,783,,,,783,783,,,,,,,783,,,783,782,782,782,,782,783,783,,782,782", ",,,782,,782,782,782,782,782,782,782,,,,,,782,782,782,782,782,782,782", ",,782,,,,,,,782,,,782,782,782,782,782,782,782,,782,782,782,,782,782", ",782,782,,,,,,,,,,,,,,,,,,,,,782,,,782,,,782,,782,,,,,,782,,,,,,,,782", ",,,,782,782,782,782,782,782,,,,782,782,,,,,,,782,,,782,781,781,781,", "781,782,782,,781,781,,,,781,,781,781,781,781,781,781,781,,,,,,781,781", "781,781,781,781,781,,,781,,,,,,,781,,,781,781,781,781,781,781,781,,781", "781,781,,781,781,,781,781,,,,,,,,,,,,,,,,,,,,,781,,,781,,,781,,781,", ",,,,781,,,,,,,,781,,,,,781,781,781,781,781,781,,,,781,781,,,,,,,781", ",,781,775,775,775,775,775,781,781,,775,775,,,,775,,775,775,775,775,775", "775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,775,775,,775,775", "775,775,775,775,775,775,,775,775,775,,775,775,,775,775,,,,,,,,,,,,,", ",,,,,,,775,,,775,,,775,,775,,775,,,,775,,,,,,,,775,,,,,775,775,775,775", "775,775,,,,775,775,,,,,,,775,,,775,84,84,84,,84,775,775,,84,84,,,,84", ",84,84,84,84,84,84,84,,84,,,,84,84,84,84,84,84,84,,,84,,,,,,,84,,,84", "84,84,84,84,84,84,84,84,84,84,,84,84,,84,84,,,,,,,,,,,,,,,,,,,,,84,", ",84,84,,84,,84,,84,,84,,84,,,,,,,,84,,84,,,84,84,84,84,84,84,,,,84,84", ",,,,,,84,,,84,87,87,87,,87,84,84,,87,87,,,,87,,87,87,87,87,87,87,87", ",87,,,,87,87,87,87,87,87,87,,,87,,,,,,,87,,,87,87,87,87,87,87,87,87", "87,87,87,,87,87,,87,87,,,,,,,,,,,,,,,,,,,,,87,,,87,87,,87,,87,,87,,87", ",87,,,,,,,,87,,87,,,87,87,87,87,87,87,,,,87,87,,,,,,,87,,,87,761,761", "761,,761,87,87,,761,761,,,,761,,761,761,761,761,761,761,761,,,,,,761", "761,761,761,761,761,761,,,761,,,,,,,761,,,761,761,761,761,761,761,761", ",761,761,761,,761,761,,761,761,,,,,,,,,,,,,,,,,,,,,761,,,761,,,761,", "761,,,,,,761,,,,,,,,761,,,,,761,761,761,761,761,761,,,,761,761,,,,,", ",761,,,761,99,99,99,99,99,761,761,,99,99,,,,99,,99,99,99,99,99,99,99", ",,,,,99,99,99,99,99,99,99,,,99,,,,,,99,99,99,99,99,99,99,99,99,99,99", ",99,99,99,,99,99,,99,99,,,,,,,,,,,,,,,,,,,,,99,,,99,,,99,,99,,99,,,", "99,,,,,,,,99,,,,,99,99,99,99,99,99,,,,99,99,,,,,,99,99,,,99,103,103", "103,,103,99,99,,103,103,,,,103,,103,103,103,103,103,103,103,,,,,,103", "103,103,103,103,103,103,,,103,,,,,,,103,,,103,103,103,103,103,103,103", ",103,103,103,,103,103,,103,103,,,,,,,,,,,,,,,,,,,,,103,,,103,,,103,", "103,,,,,,103,,,,,,,,103,,,,,103,103,103,103,103,103,,,,103,103,,,,,", ",103,,,103,104,104,104,,104,103,103,,104,104,,,,104,,104,104,104,104", "104,104,104,,,,,,104,104,104,104,104,104,104,,,104,,,,,,,104,,,104,104", "104,104,104,104,104,,104,104,104,,104,104,,104,104,,,,,,,,,,,,,,,,,", ",,,104,,,104,,,104,,104,,,,,,104,,,,,,,,104,,,,,104,104,104,104,104", "104,,,,104,104,,,,,,,104,,,104,105,105,105,,105,104,104,,105,105,,,", "105,,105,105,105,105,105,105,105,,,,,,105,105,105,105,105,105,105,,", "105,,,,,,,105,,,105,105,105,105,105,105,105,,105,105,105,,105,105,,105", "105,,,,,,,,,,,,,,,,,,,,,105,,,105,,,105,,105,,,,,,105,,,,,,,,105,,,", ",105,105,105,105,105,105,,,,105,105,,,,,,,105,,,105,106,106,106,,106", "105,105,,106,106,,,,106,,106,106,106,106,106,106,106,,,,,,106,106,106", "106,106,106,106,,,106,,,,,,,106,,,106,106,106,106,106,106,106,,106,106", "106,,106,106,,106,106,,,,,,,,,,,,,,,,,,,,,106,,,106,,,106,,106,,,,,", "106,,,,,,,,106,,,,,106,106,106,106,106,106,,,,106,106,,,,,,,106,,,106", "107,107,107,107,107,106,106,,107,107,,,,107,,107,107,107,107,107,107", "107,,,,,,107,107,107,107,107,107,107,,,107,,,,,,107,107,,107,107,107", "107,107,107,107,107,,107,107,107,,107,107,,107,107,,,,,,,,,,,,,,,,,", ",,,107,,,107,,,107,,107,,107,,,,107,,,,,,,,107,,,,,107,107,107,107,107", "107,,,,107,107,,,,,,,107,,,107,108,108,108,108,108,107,107,,108,108", ",,,108,,108,108,108,108,108,108,108,,,,,,108,108,108,108,108,108,108", ",,108,,,,,,108,108,108,108,108,108,108,108,108,108,108,,108,108,108", ",108,108,,108,108,,,,,,,,,,,,,,,,,,,,,108,,,108,,,108,,108,,108,,,,108", ",,,,,,,108,,,,,108,108,108,108,108,108,,,,108,108,,,,,,,108,,,108,754", "754,754,754,754,108,108,,754,754,,,,754,,754,754,754,754,754,754,754", ",,,,,754,754,754,754,754,754,754,,,754,,,,,,754,754,,754,754,754,754", "754,754,754,754,,754,754,754,,754,754,,754,754,,,,,,,,,,,,,,,,,,,,,754", ",,754,,,754,,754,,754,,,,754,,,,,,,,754,,,,,754,754,754,754,754,754", ",,,754,754,,,,,,,754,,,754,753,753,753,753,753,754,754,,753,753,,,,753", ",753,753,753,753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753", ",,,,,753,753,,753,753,753,753,753,753,753,753,,753,753,753,,753,753", ",753,753,,,,,,,,,,,,,,,,,,,,,753,,,753,,,753,,753,,753,,,,753,,,,,,", ",753,,,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,,753,749,749", "749,749,749,753,753,,749,749,,,,749,,749,749,749,749,749,749,749,,,", ",,749,749,749,749,749,749,749,,,749,,,,,,749,749,,749,749,749,749,749", "749,749,749,,749,749,749,,749,749,,749,749,,,,,,,,,,,,,,,,,,,,,749,", ",749,,,749,,749,,749,,,,749,,,,,,,,749,,,,,749,749,749,749,749,749,", ",,749,749,,,,,,,749,,,749,195,195,195,195,195,749,749,,195,195,,,,195", ",195,195,195,195,195,195,195,,,,,,195,195,195,195,195,195,195,,,195", ",,,,,195,195,,195,195,195,195,195,195,195,195,,195,195,195,,195,195", ",195,195,,,,,,,,,,,,,,,,,,,,,195,,,195,,,195,,195,,195,,,,195,,,,,,", ",195,,,,,195,195,195,195,195,195,,,,195,195,,,,,,,195,,,195,196,196", "196,,196,195,195,,196,196,,,,196,,196,196,196,196,196,196,196,,,,,,196", "196,196,196,196,196,196,,,196,,,,,,,196,,,196,196,196,196,196,196,196", ",196,196,196,,196,196,,196,196,,,,,,,,,,,,,,,,,,,,,196,,,196,,,196,", "196,,196,,,,196,,,,,,,,196,,,,,196,196,196,196,196,196,,,,196,196,,", ",,,,196,,,196,197,197,197,,197,196,196,,197,197,,,,197,,197,197,197", "197,197,197,197,,,,,,197,197,197,197,197,197,197,,,197,,,,,,,197,,,197", "197,197,197,197,197,197,,197,197,197,,197,197,,197,197,,,,,,,,,,,,,", ",,,,,,,197,,,197,,,197,,197,,197,,,,197,,,,,,,,197,,,,,197,197,197,197", "197,197,,,,197,197,,,,,,,197,,,197,198,198,198,,198,197,197,,198,198", ",,,198,,198,198,198,198,198,198,198,,,,,,198,198,198,198,198,198,198", ",,198,,,,,,,198,,,198,198,198,198,198,198,198,,198,198,198,,198,198", ",198,198,,,,,,,,,,,,,,,,,,,,,198,,,198,,,198,,198,,,,,,198,,,,,,,,198", ",,,,198,198,198,198,198,198,,,,198,198,,,,,,,198,,,198,199,199,199,", "199,198,198,,199,199,,,,199,,199,199,199,199,199,199,199,,,,,,199,199", "199,199,199,199,199,,,199,,,,,,,199,,,199,199,199,199,199,199,199,199", "199,199,199,,199,199,,199,199,,,,,,,,,,,,,,,,,,,,,199,,,199,,,199,,199", ",199,,,,199,,,,,,,,199,,,,,199,199,199,199,199,199,,,,199,199,,,,,,", "199,,,199,200,200,200,,200,199,199,,200,200,,,,200,,200,200,200,200", "200,200,200,,,,,,200,200,200,200,200,200,200,,,200,,,,,,,200,,,200,200", "200,200,200,200,200,200,200,200,200,,200,200,,200,200,,,,,,,,,,,,,,", ",,,,,,200,,,200,,,200,,200,,200,,,,200,,,,,,,,200,,,,,200,200,200,200", "200,200,,,,200,200,,,,,,,200,,,200,744,744,744,,744,200,200,,744,744", ",,,744,,744,744,744,744,744,744,744,,,,,,744,744,744,744,744,744,744", ",,744,,,,,,,744,,,744,744,744,744,744,744,744,,744,744,744,,744,744", ",744,744,,,,,,,,,,,,,,,,,,,,,744,,,744,,,744,,744,,,,,,744,,,,,,,,744", ",,,,744,744,744,744,744,744,,,,744,744,,,,,,,744,,,744,737,737,737,", "737,744,744,,737,737,,,,737,,737,737,737,737,737,737,737,,,,,,737,737", "737,737,737,737,737,,,737,,,,,,,737,,,737,737,737,737,737,737,737,,737", "737,737,,737,737,,737,737,,,,,,,,,,,,,,,,,,,,,737,,,737,,,737,,737,", "737,,,,737,,,,,,,,737,,,,,737,737,737,737,737,737,,,,737,737,,,,,,,737", ",,737,705,705,705,,705,737,737,,705,705,,,,705,,705,705,705,705,705", "705,705,,,,,,705,705,705,705,705,705,705,,,705,,,,,,,705,,,705,705,705", "705,705,705,705,,705,705,705,,705,705,,705,705,,,,,,,,,,,,,,,,,,,,,705", ",,705,,,705,,705,,705,,,,705,,,,,,,,705,,,,,705,705,705,705,705,705", ",,,705,705,,,,,,,705,,,705,204,204,204,,204,705,705,,204,204,,,,204", ",204,204,204,204,204,204,204,,,,,,204,204,204,204,204,204,204,,,204", ",,,,,,204,,,204,204,204,204,204,204,204,,204,204,204,,204,204,,204,204", ",,,,,,,,,,,,,,,,,,,,204,,,204,,,204,,204,,,,,,204,,,,,,,,204,,,,,204", "204,204,204,204,204,,,,204,204,,,,,,,204,,,204,205,205,205,,205,204", "204,,205,205,,,,205,,205,205,205,205,205,205,205,,,,,,205,205,205,205", "205,205,205,,,205,,,,,,,205,,,205,205,205,205,205,205,205,,205,205,205", ",205,205,,205,205,,,,,,,,,,,,,,,,,,,,,205,,,205,,,205,,205,,,,,,205", ",,,,,,,205,,,,,205,205,205,205,205,205,,,,205,205,,,,,,,205,,,205,206", "206,206,,206,205,205,,206,206,,,,206,,206,206,206,206,206,206,206,,", ",,,206,206,206,206,206,206,206,,,206,,,,,,,206,,,206,206,206,206,206", "206,206,,206,206,206,,206,206,,206,206,,,,,,,,,,,,,,,,,,,,,206,,,206", ",,206,,206,,,,,,206,,,,,,,,206,,,,,206,206,206,206,206,206,,,,206,206", ",,,,,,206,,,206,699,699,699,,699,206,206,,699,699,,,,699,,699,699,699", "699,699,699,699,,,,,,699,699,699,699,699,699,699,,,699,,,,,,,699,,,699", "699,699,699,699,699,699,,699,699,699,,699,699,,863,,863,863,863,863", "863,,,,,,,,,863,,,,,,,699,,,699,,,699,,699,,,,,,,,863,,,,,,,863,863", "863,863,699,699,699,699,699,699,,,,699,699,,,,,,,699,,,699,686,686,686", ",686,699,699,,686,686,,,,686,863,686,686,686,686,686,686,686,,,,,,686", "686,686,686,686,686,686,,,686,,,,,,,686,,,686,686,686,686,686,686,686", ",686,686,686,,686,686,,,,,,,,,,,,,,,,,,,,,,,,686,,,686,,,686,,686,,", ",,,,,,,,,,,,,,,,686,686,686,686,686,686,,,,686,686,,,,,,,686,,,686,682", "682,682,682,682,686,686,,682,682,,,,682,,682,682,682,682,682,682,682", ",,,,,682,682,682,682,682,682,682,,,682,,,,,,682,682,,682,682,682,682", "682,682,682,682,,682,682,682,,682,682,,682,682,,,,,,,,,,,,,,,,,,,,,682", ",,682,,,682,,682,,682,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682", ",,,682,682,,,,,,,682,,,682,681,681,681,681,681,682,682,,681,681,,,,681", ",681,681,681,681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681", ",,,,,681,681,,681,681,681,681,681,681,681,681,,681,681,681,,681,681", ",681,681,,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,,681,,681,,,,681,,,,,,", ",681,,,,,681,681,681,681,681,681,,,,681,681,,,,,,,681,,,681,675,675", "675,,675,681,681,,675,675,,,,675,,675,675,675,675,675,675,675,,,,,,675", "675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675,675", "675,675,675,675,,675,675,,675,675,,,,,,,,,,,,,,,,,,,,,675,,,675,,,675", ",675,,,,675,,675,,,,,,,,675,,,,,675,675,675,675,675,675,,,,675,675,", ",,,,,675,,,675,674,674,674,,674,675,675,,674,674,,,,674,,674,674,674", "674,674,674,674,,,,,,674,674,674,674,674,674,674,,,674,,,,,,,674,,,674", "674,674,674,674,674,674,674,674,674,674,,674,674,,674,674,,,,,,,,,,", ",,,,,,,,,,674,,,674,,,674,,674,,674,,674,,674,,,,,,,,674,,,,,674,674", "674,674,674,674,,,,674,674,,,,,,,674,,,674,214,214,214,214,214,674,674", ",214,214,,,,214,,214,214,214,214,214,214,214,,,,,,214,214,214,214,214", "214,214,,,214,,,,,,214,214,,214,214,214,214,214,214,214,214,,214,214", "214,,214,214,,214,214,,,,,,,,,,,,,,,,,,,,,214,,,214,,,214,,214,,214", ",,,214,,,,,,,,214,,,,,214,214,214,214,214,214,,,,214,214,,,,,,,214,", ",214,215,215,215,,215,214,214,,215,215,,,,215,,215,215,215,215,215,215", "215,,,,,,215,215,215,215,215,215,215,,,215,,,,,,,215,,,215,215,215,215", "215,215,215,,215,215,215,,215,215,,215,215,,,,,,,,,,,,,,,,,,,,,215,", ",215,,215,215,,215,,,,,,215,,,,,,,,215,,,,,215,215,215,215,215,215,", ",,215,215,,,,,,,215,,,215,218,218,218,,218,215,215,,218,218,,,,218,", "218,218,218,218,218,218,218,,,,,,218,218,218,218,218,218,218,,,218,", ",,,,,218,,,218,218,218,218,218,218,218,,218,218,218,,218,218,,218,218", ",,,,,,,,,,,,,,,,,,,,218,,,218,,,218,,218,,,,,,218,,,,,,,,218,,,,,218", "218,218,218,218,218,,,,218,218,,,,,,,218,,,218,671,671,671,671,671,218", "218,,671,671,,,,671,,671,671,671,671,671,671,671,,,,,,671,671,671,671", "671,671,671,,,671,,,,,,671,671,,671,671,671,671,671,671,671,671,,671", "671,671,,671,671,,671,671,,,,,,,,,,,,,,,,,,,,,671,,,671,,,671,,671,", "671,,,,671,,,,,,,,671,,,,,671,671,671,671,671,671,,,,671,671,,,,,,,671", ",,671,220,220,220,,220,671,671,,220,220,,,,220,,220,220,220,220,220", "220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220", "220,220,220,220,,220,220,220,,220,220,,220,220,,,,,,,,,,,,,,,,,,,,,220", ",,220,,,220,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220,220,220,,,", "220,220,,,,,,,220,,,220,221,221,221,,221,220,220,,221,221,,,,221,,221", "221,221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,", ",221,,,221,221,221,221,221,221,221,,221,221,221,,221,221,,221,221,,", ",,,,,,,,,,,,,,,,,,221,,,221,,,221,,221,,,,,,221,,,,,,,,221,,,,,221,221", "221,221,221,221,,,,221,221,,,,,,,221,,,221,222,222,222,,222,221,221", ",222,222,,,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222,222", "222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,,222,222,222,", "222,222,,222,222,,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,,222,,,,,,222,", ",,,,,,222,,,,,222,222,222,222,222,222,,,,222,222,,,,,,,222,,,222,223", "223,223,,223,222,222,,223,223,,,,223,,223,223,223,223,223,223,223,,", ",,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223", "223,223,,223,223,223,,223,223,,223,223,,,,,,,,,,,,,,,,,,,,,223,,,223", ",,223,,223,,,,,,223,,,,,,,,223,,,,,223,223,223,223,223,223,,,,223,223", ",,,,,,223,,,223,224,224,224,,224,223,223,,224,224,,,,224,,224,224,224", "224,224,224,224,,,,,,224,224,224,224,224,224,224,,,224,,,,,,,224,,,224", "224,224,224,224,224,224,,224,224,224,,224,224,,224,224,,,,,,,,,,,,,", ",,,,,,,224,,,224,,,224,,224,,,,,,224,,,,,,,,224,,,,,224,224,224,224", "224,224,,,,224,224,,,,,,,224,,,224,225,225,225,,225,224,224,,225,225", ",,,225,,225,225,225,225,225,225,225,,,,,,225,225,225,225,225,225,225", ",,225,,,,,,,225,,,225,225,225,225,225,225,225,,225,225,225,,225,225", ",225,225,,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,,225,,,,,,225,,,,,,,,225", ",,,,225,225,225,225,225,225,,,,225,225,,,,,,,225,,,225,226,226,226,", "226,225,225,,226,226,,,,226,,226,226,226,226,226,226,226,,,,,,226,226", "226,226,226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226,226,,226", "226,226,,226,226,,226,226,,,,,,,,,,,,,,,,,,,,,226,,,226,,,226,,226,", ",,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226,226,,,,,,,226", ",,226,227,227,227,,227,226,226,,227,227,,,,227,,227,227,227,227,227", "227,227,,,,,,227,227,227,227,227,227,227,,,227,,,,,,,227,,,227,227,227", "227,227,227,227,,227,227,227,,227,227,,227,227,,,,,,,,,,,,,,,,,,,,,227", ",,227,,,227,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,", "227,227,,,,,,,227,,,227,228,228,228,,228,227,227,,228,228,,,,228,,228", "228,228,228,228,228,228,,,,,,228,228,228,228,228,228,228,,,228,,,,,", ",228,,,228,228,228,228,228,228,228,,228,228,228,,228,228,,228,228,,", ",,,,,,,,,,,,,,,,,,228,,,228,,,228,,228,,,,,,228,,,,,,,,228,,,,,228,228", "228,228,228,228,,,,228,228,,,,,,,228,,,228,229,229,229,,229,228,228", ",229,229,,,,229,,229,229,229,229,229,229,229,,,,,,229,229,229,229,229", "229,229,,,229,,,,,,,229,,,229,229,229,229,229,229,229,,229,229,229,", "229,229,,229,229,,,,,,,,,,,,,,,,,,,,,229,,,229,,,229,,229,,,,,,229,", ",,,,,,229,,,,,229,229,229,229,229,229,,,,229,229,,,,,,,229,,,229,230", "230,230,,230,229,229,,230,230,,,,230,,230,230,230,230,230,230,230,,", ",,,230,230,230,230,230,230,230,,,230,,,,,,,230,,,230,230,230,230,230", "230,230,,230,230,230,,230,230,,230,230,,,,,,,,,,,,,,,,,,,,,230,,,230", ",,230,,230,,,,,,230,,,,,,,,230,,,,,230,230,230,230,230,230,,,,230,230", ",,,,,,230,,,230,231,231,231,,231,230,230,,231,231,,,,231,,231,231,231", "231,231,231,231,,,,,,231,231,231,231,231,231,231,,,231,,,,,,,231,,,231", "231,231,231,231,231,231,,231,231,231,,231,231,,231,231,,,,,,,,,,,,,", ",,,,,,,231,,,231,,,231,,231,,,,,,231,,,,,,,,231,,,,,231,231,231,231", "231,231,,,,231,231,,,,,,,231,,,231,232,232,232,,232,231,231,,232,232", ",,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232,232,232,232", ",,232,,,,,,,232,,,232,232,232,232,232,232,232,,232,232,232,,232,232", ",232,232,,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,,232,,,,,,232,,,,,,,,232", ",,,,232,232,232,232,232,232,,,,232,232,,,,,,,232,,,232,233,233,233,", "233,232,232,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233", "233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,,233", "233,233,,233,233,,233,233,,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,,233,", ",,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233", ",,233,234,234,234,,234,233,233,,234,234,,,,234,,234,234,234,234,234", "234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234", "234,234,234,234,,234,234,234,,234,234,,234,234,,,,,,,,,,,,,,,,,,,,,234", ",,234,,,234,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,", "234,234,,,,,,,234,,,234,235,235,235,,235,234,234,,235,235,,,,235,,235", "235,235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,", ",235,,,235,235,235,235,235,235,235,,235,235,235,,235,235,,235,235,,", ",,,,,,,,,,,,,,,,,,235,,,235,,,235,,235,,,,,,235,,,,,,,,235,,,,,235,235", "235,235,235,235,,,,235,235,,,,,,,235,,,235,236,236,236,,236,235,235", ",236,236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236", "236,236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,,236,236,236,", "236,236,,236,236,,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,,236,,,,,,236,", ",,,,,,236,,,,,236,236,236,236,236,236,,,,236,236,,,,,,,236,,,236,237", "237,237,,237,236,236,,237,237,,,,237,,237,237,237,237,237,237,237,,", ",,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237,237,237", "237,237,,237,237,237,,237,237,,237,237,,,,,,,,,,,,,,,,,,,,,237,,,237", ",,237,,237,,,,,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237", ",,,,,,237,,,237,238,238,238,,238,237,237,,238,238,,,,238,,238,238,238", "238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238", "238,238,238,238,238,238,,238,238,238,,238,238,,238,238,,,,,,,,,,,,,", ",,,,,,,238,,,238,,,238,,238,,,,,,238,,,,,,,,238,,,,,238,238,238,238", "238,238,,,,238,238,,,,,,,238,,,238,239,239,239,,239,238,238,,239,239", ",,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239,239,239", ",,239,,,,,,,239,,,239,239,239,239,239,239,239,,239,239,239,,239,239", ",239,239,,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,,239,,,,,,239,,,,,,,,239", ",,,,239,239,239,239,239,239,,,,239,239,,,,,,,239,,,239,240,240,240,", "240,239,239,,240,240,,,,240,,240,240,240,240,240,240,240,,,,,,240,240", "240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240,240,,240", "240,240,,240,240,,240,240,,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,,240,", ",,,,240,,,,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240", ",,240,241,241,241,,241,240,240,,241,241,,,,241,,241,241,241,241,241", "241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241", "241,241,241,241,,241,241,241,,241,241,,241,241,,,,,,,,,,,,,,,,,,,,,241", ",,241,,,241,,241,,,,,,241,,,,,,,,241,,,,,241,241,241,241,241,241,,,", "241,241,,,,,,,241,,,241,242,242,242,,242,241,241,,242,242,,,,242,,242", "242,242,242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,", ",242,,,242,242,242,242,242,242,242,,242,242,242,,242,242,,242,242,,", ",,,,,,,,,,,,,,,,,,242,,,242,,,242,,242,,,,,,242,,,,,,,,242,,,,,242,242", "242,242,242,242,,,,242,242,,,,,,,242,,,242,243,243,243,,243,242,242", ",243,243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243", "243,243,,,243,,,,,,,243,,,243,243,243,243,243,243,243,,243,243,243,", "243,243,,243,243,,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,,243,,,,,,243,", ",,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,244", "244,244,,244,243,243,,244,244,,,,244,,244,244,244,244,244,244,244,,", ",,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244", "244,244,,244,244,244,,244,244,,244,244,,,,,,,,,,,,,,,,,,,,,244,,,244", ",,244,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244,,,,244,244", ",,,,,,244,,,244,664,664,664,,664,244,244,,664,664,,,,664,,664,664,664", "664,664,664,664,,,,,,664,664,664,664,664,664,664,,,664,,,,,,,664,,,664", "664,664,664,664,664,664,,664,664,664,,664,664,,664,664,,,,,,,,,,,,,", ",,,,,,,664,,,664,,,664,,664,,,,,,664,,,,,,,,664,,,,,664,664,664,664", "664,664,,,,664,664,,,,,,,664,,,664,661,661,661,,661,664,664,,661,661", ",,,661,,661,661,661,661,661,661,661,,,,,,661,661,661,661,661,661,661", ",,661,,,,,,,661,,,661,661,661,661,661,661,661,,661,661,661,,661,661", ",661,661,,,,,,,,,,,,,,,,,,,,,661,,,661,,,661,,661,,,,,,661,,,,,,,,661", ",,,,661,661,661,661,661,661,,,,661,661,,,,,,,661,,,661,657,657,657,657", "657,661,661,,657,657,,,,657,,657,657,657,657,657,657,657,,,,,,657,657", "657,657,657,657,657,,,657,,,,,,657,657,,657,657,657,657,657,657,657", "657,,657,657,657,,657,657,,657,657,,,,,,,,,,,,,,,,,,,,,657,,,657,,,657", ",657,,657,,,,657,,,,,,,,657,,,,,657,657,657,657,657,657,,,,657,657,", ",,,,,657,,,657,254,254,254,,254,657,657,,254,254,,,,254,,254,254,254", "254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254", "254,254,254,254,254,254,,254,254,254,,254,254,,254,254,,,,,,,,,,,,,", ",,,,,,,254,,,254,,,254,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254", "254,254,,,,254,254,,,,,,,254,,,254,256,256,256,,256,254,254,,256,256", ",,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256", ",,256,,,,,,,256,,,256,256,256,256,256,256,256,,256,256,256,,256,256", ",256,256,,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,,256,,,,,,256,,,,,,,,256", ",,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,262,262,262,", "262,256,256,,262,262,,,,262,,262,262,262,262,262,262,262,,,,,,262,262", "262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262,,262", "262,262,,262,262,,262,262,,,,,,,,,,,,,,,,,,,,,262,,,262,,,262,,262,", ",,,,262,,,,,,,,262,,,,,262,262,262,262,262,262,,,,262,262,,,,,,,262", ",,262,642,642,642,,642,262,262,,642,642,,,,642,,642,642,642,642,642", "642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,,,642,,,642,642,642", "642,642,642,642,,642,642,642,,642,642,,642,642,,,,,,,,,,,,,,,,,,,,,642", ",,642,,,642,,642,,,,,,642,,,,,,,,642,,,,,642,642,642,642,642,642,,,", "642,642,,,,,,,642,,,642,639,639,639,,639,642,642,,639,639,,,,639,,639", "639,639,639,639,639,639,,,,,,639,639,639,639,639,639,639,,,639,,,,,", ",639,,,639,639,639,639,639,639,639,,639,639,639,,639,639,,639,639,,", ",,,,,,,,,,,,,,,,,,639,,,639,,,639,,639,,,,,,639,,,,,,,,639,,,,,639,639", "639,639,639,639,,,,639,639,,,,,,,639,,,639,634,634,634,,634,639,639", ",634,634,,,,634,,634,634,634,634,634,634,634,,,,,,634,634,634,634,634", "634,634,,,634,,,,,,,634,,,634,634,634,634,634,634,634,,634,634,634,", "634,634,,634,634,,,,,,,,,,,,,,,,,,,,,634,,,634,,,634,,634,,,,,,634,", ",,,,,,634,,,,,634,634,634,634,634,634,,,,634,634,,,,,,,634,,,634,269", "269,269,,269,634,634,,269,269,,,,269,,269,269,269,269,269,269,269,,", ",,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269,269,269", "269,269,269,269,269,269,,269,269,,269,269,,,,,,,,,,,,,,,,,,,,,269,,", "269,,,269,,269,,269,,269,,269,,,,,,,,269,,,,,269,269,269,269,269,269", ",,,269,269,,,,,,,269,,,269,270,270,270,,270,269,269,,270,270,,,,270", ",270,270,270,270,270,270,270,,,,,,270,270,270,270,270,270,270,,,270", ",,,,,,270,,,270,270,270,270,270,270,270,270,270,270,270,,270,270,,270", "270,,,,,,,,,,,,,,,,,,,,,270,,,270,,,270,,270,,270,,270,,270,,,,,,,,270", ",,,,270,270,270,270,270,270,,,,270,270,,,,,,,270,,,270,278,278,278,", "278,270,270,,278,278,,,,278,,278,278,278,278,278,278,278,,,,,,278,278", "278,278,278,278,278,,,278,,,,,,,278,,,278,278,278,278,278,278,278,278", "278,278,278,,278,278,,278,278,,,,,,,,,,,,,,,,,,,,,278,,,278,,278,278", ",278,,278,,278,,278,,,,,,,,278,,,,,278,278,278,278,278,278,,,,278,278", ",,,,,,278,,,278,633,633,633,,633,278,278,,633,633,,,,633,,633,633,633", "633,633,633,633,,,,,,633,633,633,633,633,633,633,,,633,,,,,,,633,,,633", "633,633,633,633,633,633,,633,633,633,,633,633,,633,633,,,,,,,,,,,,,", ",,,,,,,633,,,633,,,633,,633,,,,,,633,,,,,,,,633,,,,,633,633,633,633", "633,633,,,,633,633,,,,,,,633,,,633,630,630,630,,630,633,633,,630,630", ",,,630,,630,630,630,630,630,630,630,,,,,,630,630,630,630,630,630,630", ",,630,,,,,,,630,,,630,630,630,630,630,630,630,,630,630,630,,630,630", ",630,630,,,,,,,,,,,,,,,,,,,,,630,,,630,,,630,,630,,630,,,,630,,,,,,", ",630,,,,,630,630,630,630,630,630,,,,630,630,,,,,,,630,,,630,628,628", "628,,628,630,630,,628,628,,,,628,,628,628,628,628,628,628,628,,,,,,628", "628,628,628,628,628,628,,,628,,,,,,,628,,,628,628,628,628,628,628,628", ",628,628,628,,628,628,,628,628,,,,,,,,,,,,,,,,,,,,,628,,,628,,,628,", "628,,,,,,628,,,,,,,,628,,,,,628,628,628,628,628,628,,,,628,628,,,,,", ",628,,,628,282,282,282,282,282,628,628,,282,282,,,,282,,282,282,282", "282,282,282,282,,,,,,282,282,282,282,282,282,282,,,282,,,,,,282,282", ",282,282,282,282,282,282,282,282,,282,282,282,,282,282,,282,282,,,,", ",,,,,,,,,,,,,,,,282,,,282,,,282,,282,,282,,,,282,,,,,,,,282,,,,,282", "282,282,282,282,282,,,,282,282,,,,,,,282,,,282,601,601,601,,601,282", "282,,601,601,,,,601,,601,601,601,601,601,601,601,,,,,,601,601,601,601", "601,601,601,,,601,,,,,,,601,,,601,601,601,601,601,601,601,,601,601,601", ",601,601,,601,601,,,,,,,,,,,,,,,,,,,,,601,,,601,,,601,,601,,,,,,601", ",,,,,,,601,,,,,601,601,601,601,601,601,,,,601,601,,,,,,,601,,,601,599", "599,599,,599,601,601,,599,599,,,,599,,599,599,599,599,599,599,599,,", ",,,599,599,599,599,599,599,599,,,599,,,,,,,599,,,599,599,599,599,599", "599,599,,599,599,599,,599,599,,599,599,,,,,,,,,,,,,,,,,,,,,599,,,599", ",,599,,599,,,,,,599,,,,,,,,599,,,,,599,599,599,599,599,599,,,,599,599", ",,,,,,599,,,599,595,595,595,,595,599,599,,595,595,,,,595,,595,595,595", "595,595,595,595,,,,,,595,595,595,595,595,595,595,,,595,,,,,,,595,,,595", "595,595,595,595,595,595,595,595,595,595,,595,595,,595,595,,,,,,,,,,", ",,,,,,,,,,595,,,595,,,595,,595,,595,,,,595,,,,,,,,595,,,,,595,595,595", "595,595,595,,,,595,595,,,,,,,595,,,595,286,286,286,,286,595,595,,286", "286,,,,286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286", "286,,,286,,,,,,,286,,,286,286,286,286,286,286,286,,286,286,286,,286", "286,,,,,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,,286,,,,,,,,,,,,,,,,,,,286", "286,286,286,286,286,,,,286,286,,,,286,,,286,,,286,287,287,287,287,287", "286,286,,287,287,,,,287,,287,287,287,287,287,287,287,,,,,,287,287,287", "287,287,287,287,,,287,,,,,,287,287,,287,287,287,287,287,287,287,287", ",287,287,287,,287,287,,287,287,,,,,,,,,,,,,,,,,,,,,287,,,287,,,287,", "287,,287,,,,287,,,,,,,,287,,,,,287,287,287,287,287,287,,,,287,287,,", ",,,,287,,,287,589,589,589,,589,287,287,,589,589,,,,589,,589,589,589", "589,589,589,589,,,,,,589,589,589,589,589,589,589,,,589,,,,,,,589,,,589", "589,589,589,589,589,589,589,589,589,589,,589,589,,589,589,,,,,,,,,,", ",,,,,,,,,,589,,,589,,,589,,589,,589,,,,589,,,,,,,,589,,,,,589,589,589", "589,589,589,,,,589,589,,,,,,,589,,,589,586,586,586,,586,589,589,,586", "586,,,,586,,586,586,586,586,586,586,586,,,,,,586,586,586,586,586,586", "586,,,586,,,,,,,586,,,586,586,586,586,586,586,586,586,586,586,586,,586", "586,,586,586,,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,,586,,586,,,,586,,", ",,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,584", "584,584,584,584,586,586,,584,584,,,,584,,584,584,584,584,584,584,584", ",,,,,584,584,584,584,584,584,584,,,584,,,,,,584,584,,584,584,584,584", "584,584,584,584,,584,584,584,,584,584,,584,584,,,,,,,,,,,,,,,,,,,,,584", ",,584,,,584,,584,,584,,,,584,,,,,,,,584,,,,,584,584,584,584,584,584", ",,,584,584,,,,,,,584,,,584,579,579,579,579,579,584,584,,579,579,,,,579", ",579,579,579,579,579,579,579,,,,,,579,579,579,579,579,579,579,,,579", ",,,,,579,579,,579,579,579,579,579,579,579,579,,579,579,579,,579,579", ",579,579,,,,,,,,,,,,,,,,,,,,,579,,,579,,,579,,579,,579,,,,579,,,,,,", ",579,,,,,579,579,579,579,579,579,,,,579,579,,,,,,,579,,,579,575,575", "575,575,575,579,579,,575,575,,,,575,,575,575,575,575,575,575,575,,,", ",,575,575,575,575,575,575,575,,,575,,,,,,575,575,,575,575,575,575,575", "575,575,575,,575,575,575,,575,575,,575,575,,,,,,,,,,,,,,,,,,,,,575,", ",575,,,575,,575,,575,,,,575,,,,,,,,575,,,,,575,575,575,575,575,575,", ",,575,575,,,,,,,575,,,575,561,561,561,,561,575,575,,561,561,,,,561,", "561,561,561,561,561,561,561,,,,,,561,561,561,561,561,561,561,,,561,", ",,,,,561,,,561,561,561,561,561,561,561,,561,561,561,,561,561,,,,,,,", ",,,,,,,,,,,,,,,,561,,,561,,,561,,561,,,,,,,,,,,,,,,,,,,561,561,561,561", "561,561,,,,561,561,,,,,,,561,,,561,555,555,555,555,555,561,561,,555", "555,,,,555,,555,555,555,555,555,555,555,,,,,,555,555,555,555,555,555", "555,,,555,,,,,,555,555,,555,555,555,555,555,555,555,555,,555,555,555", ",555,555,,555,555,,,,,,,,,,,,,,,,,,,,,555,,,555,,,555,,555,,555,,,,555", ",,,,,,,555,,,,,555,555,555,555,555,555,,,,555,555,,,,,,,555,,,555,554", "554,554,554,554,555,555,,554,554,,,,554,,554,554,554,554,554,554,554", ",,,,,554,554,554,554,554,554,554,,,554,,,,,,554,554,,554,554,554,554", "554,554,554,554,,554,554,554,,554,554,,554,554,,,,,,,,,,,,,,,,,,,,,554", ",,554,,,554,,554,,554,,,,554,,,,,,,,554,,,,,554,554,554,554,554,554", ",,,554,554,,,,,,,554,,,554,549,549,549,,549,554,554,,549,549,,,,549", ",549,549,549,549,549,549,549,,,,,,549,549,549,549,549,549,549,,,549", ",,,,,,549,,,549,549,549,549,549,549,549,549,549,549,549,,549,549,,549", "549,,,,,,,,,,,,,,,,,,,,,549,,,549,,,549,,549,,,,,,549,,,,,,,,549,,,", ",549,549,549,549,549,549,,,,549,549,,,,,,,549,,,549,546,546,546,,546", "549,549,,546,546,,,,546,,546,546,546,546,546,546,546,,,,,,546,546,546", "546,546,546,546,,,546,,,,,,,546,,,546,546,546,546,546,546,546,546,546", "546,546,,546,546,,546,546,,,,,,,,,,,,,,,,,,,,,546,,,546,,,546,,546,", "546,,546,,546,,,,,,,,546,,,,,546,546,546,546,546,546,,,,546,546,,,,", ",,546,,,546,299,299,299,,299,546,546,,299,299,,,,299,,299,299,299,299", "299,299,299,,,,,,299,299,299,299,299,299,299,,,299,,,,,,,299,,,299,299", "299,299,299,299,299,,299,299,299,,299,299,,,,,,,,,,,,,,,,,,,,,,,,299", ",,299,,,299,,299,,,,,,,,,,,,,,,,,,,299,299,299,299,299,299,,,,299,299", ",,,,,,299,,,299,540,540,540,,540,299,299,,540,540,,,,540,,540,540,540", "540,540,540,540,,,,,,540,540,540,540,540,540,540,,,540,,,,,,,540,,,540", "540,540,540,540,540,540,,540,540,540,,540,540,,540,540,,,,,,,,,,,,,", ",,,,,,,540,,,540,,,540,,540,,,,,,540,,,,,,,,540,,,,,540,540,540,540", "540,540,,,,540,540,,,,,,,540,,,540,536,536,536,,536,540,540,,536,536", ",,,536,,536,536,536,536,536,536,536,,,,,,536,536,536,536,536,536,536", ",,536,,,,,,,536,,,536,536,536,536,536,536,536,,536,536,536,,536,536", ",536,536,,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,,536,,,,,,536,,,,,,,,536", ",,,,536,536,536,536,536,536,,,,536,536,,,,,,,536,,,536,535,535,535,", "535,536,536,,535,535,,,,535,,535,535,535,535,535,535,535,,,,,,535,535", "535,535,535,535,535,,,535,,,,,,,535,,,535,535,535,535,535,535,535,,535", "535,535,,535,535,,535,535,,,,,,,,,,,,,,,,,,,,,535,,,535,,,535,,535,", ",,,,535,,,,,,,,535,,,,,535,535,535,535,535,535,,,,535,535,,,,,,,535", ",,535,534,534,534,,534,535,535,,534,534,,,,534,,534,534,534,534,534", "534,534,,,,,,534,534,534,534,534,534,534,,,534,,,,,,,534,,,534,534,534", "534,534,534,534,,534,534,534,,534,534,,534,534,,,,,,,,,,,,,,,,,,,,,534", ",,534,,,534,,534,,,,,,534,,,,,,,,534,,,,,534,534,534,534,534,534,,,", "534,534,,,,,,,534,,,534,531,531,531,,531,534,534,,531,531,,,,531,,531", "531,531,531,531,531,531,,,,,,531,531,531,531,531,531,531,,,531,,,,,", ",531,,,531,531,531,531,531,531,531,,531,531,531,,531,531,,,,,,,,,,,", ",,,,,,,,,,,,531,,,531,,,531,,531,,,,,,,,,,,,,,,,,,,531,531,531,531,531", "531,,,,531,531,,,,,,,531,,,531,308,308,308,,308,531,531,,308,308,,,", "308,,308,308,308,308,308,308,308,,,,,,308,308,308,308,308,308,308,,", "308,,,,,,,308,,,308,308,308,308,308,308,308,,308,308,308,,308,308,,308", "308,,,,,,,,,,,,,,,,,,,,,308,,,308,308,,308,,308,,,,,,308,,,,,,,,308", ",,,,308,308,308,308,308,308,,,,308,308,,,,,,,308,,,308,310,310,310,310", "310,308,308,,310,310,,,,310,,310,310,310,310,310,310,310,,,,,,310,310", "310,310,310,310,310,,,310,,,,,,310,310,,310,310,310,310,310,310,310", "310,,310,310,310,,310,310,,310,310,,,,,,,,,,,,,,,,,,,,,310,,,310,,,310", ",310,,310,,,,310,,,,,,,,310,,,,,310,310,310,310,310,310,,,,310,310,", ",,,,,310,,,310,525,525,525,,525,310,310,,525,525,,,,525,,525,525,525", "525,525,525,525,,,,,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525", "525,525,525,525,525,525,525,525,525,525,,525,525,,525,525,,,,,,,,,,", ",,,,,,,,,,525,,,525,,,525,,525,,525,,,,525,,,,,,,,525,,,,,525,525,525", "525,525,525,,,,525,525,,,,,,,525,,,525,522,522,522,,522,525,525,,522", "522,,,,522,,522,522,522,522,522,522,522,,,,,,522,522,522,522,522,522", "522,,,522,,,,,,,522,,,522,522,522,522,522,522,522,522,522,522,522,,522", "522,,522,522,,,,,,,,,,,,,,,,,,,,,522,,,522,,,522,,522,,522,,,,522,,", ",,,,,522,,,,,522,522,522,522,522,522,,,,522,522,,,,,,,522,,,522,520", "520,520,,520,522,522,,520,520,,,,520,,520,520,520,520,520,520,520,,", ",,,520,520,520,520,520,520,520,,,520,,,,,,,520,,,520,520,520,520,520", "520,520,,520,520,520,,520,520,,,,,,,,,,,,,,,,,,,,,,,,520,,,520,,,520", ",520,,,,,,,,,,,,,,,,,,,520,520,520,520,520,520,,,,520,520,,,,,,,520", ",,520,514,514,514,514,514,520,520,,514,514,,,,514,,514,514,514,514,514", "514,514,,,,,,514,514,514,514,514,514,514,,,514,,,,,,514,514,,514,514", "514,514,514,514,514,514,,514,514,514,,514,514,,514,514,,,,,,,,,,,,,", ",,,,,,,514,,,514,,,514,,514,,514,,,,514,,,,,,,,514,,,,,514,514,514,514", "514,514,,,,514,514,,,,,,514,514,,,514,508,508,508,,508,514,514,,508", "508,,,,508,,508,508,508,508,508,508,508,,,,,,508,508,508,508,508,508", "508,,,508,,,,,,,508,,,508,508,508,508,508,508,508,,508,508,508,,508", "508,,508,508,,,,,,,,,,,,,,,,,,,,,508,,,508,,508,508,,508,,,,508,,508", ",,,,,,,508,,,,,508,508,508,508,508,508,,,,508,508,,,,,,,508,,,508,492", "492,492,,492,508,508,,492,492,,,,492,,492,492,492,492,492,492,492,,", ",,,492,492,492,492,492,492,492,,,492,,,,,,,492,,,492,492,492,492,492", "492,492,,492,492,492,,492,492,,492,492,,,,,,,,,,,,,,,,,,,,,492,,,492", ",,492,,492,,,,,,492,,,,,,,,492,,,,,492,492,492,492,492,492,,,,492,492", ",,,,,,492,,,492,490,490,490,,490,492,492,,490,490,,,,490,,490,490,490", "490,490,490,490,,,,,,490,490,490,490,490,490,490,,,490,,,,,,,490,,,490", "490,490,490,490,490,490,490,490,490,490,,490,490,,490,490,,,,,,,,,,", ",,,,,,,,,,490,,,490,,,490,,490,,,,490,,490,,,,,,,,490,,,,,490,490,490", "490,490,490,,,,490,490,,,,,,,490,,,490,488,488,488,,488,490,490,,488", "488,,,,488,,488,488,488,488,488,488,488,,,,,,488,488,488,488,488,488", "488,,,488,,,,,,,488,,,488,488,488,488,488,488,488,488,488,488,488,,488", "488,,488,488,,,,,,,,,,,,,,,,,,,,,488,,,488,,,488,,488,,488,,488,,488", ",,,,,,,488,,,,,488,488,488,488,488,488,,,,488,488,,,,,,,488,,,488,485", "485,485,,485,488,488,,485,485,,,,485,,485,485,485,485,485,485,485,,", ",,,485,485,485,485,485,485,485,,,485,,,,,,,485,,,485,485,485,485,485", "485,485,,485,485,485,,485,485,,485,485,,,,,,,,,,,,,,,,,,,,,485,,,485", ",,485,,485,,,,,,485,,,,,,,,485,,,,,485,485,485,485,485,485,,,,485,485", ",,,,,648,485,,,485,,,648,648,648,485,485,648,648,648,,648,,,,,,,,,,648", "648,,,,,,,,,648,648,,648,648,648,648,648,,,,,,,,,,,,,,,,,,,,,,648,648", "648,648,648,648,648,648,648,648,648,648,648,648,648,,,648,648,648,,648", "648,,,648,,648,,648,,648,,648,,648,648,648,648,648,648,648,,648,,648", ",,,,,,,,,,,,648,648,648,648,,648,,439,648,,648,,,648,439,439,439,,,", "439,439,,439,,,,,,,,,,,,,,,,,,,,439,439,,439,439,439,439,439,,,,,,,", ",,,,,,,,,,,,,,439,439,439,439,439,439,439,439,439,439,439,439,439,439", "439,,,439,439,439,,439,,,,439,,,,,,439,,439,,439,439,439,439,439,439", "439,,439,,439,,,,,,,,,,,,,439,439,,439,,439,,647,439,,439,,,439,647", "647,647,,,647,647,647,,647,,,,,,,,,647,647,647,,,,,,,,,647,647,,647", "647,647,647,647,,,,,,,,,,,,,,,,,,,,,,647,647,647,647,647,647,647,647", "647,647,647,647,647,647,647,,,647,647,647,,647,647,,,647,,647,,647,", "647,,647,,647,647,647,647,647,647,647,,647,647,647,,,,,,,,,,,,,647,647", "647,647,,647,,437,647,,647,,,647,437,437,437,,,,437,437,,437,,,,,,,", ",437,,,,,,,,,,,437,437,,437,437,437,437,437,,,,,,,,,,,,,,,,,,,,,,437", "437,437,437,437,437,437,437,437,437,437,437,437,437,437,,,437,437,437", ",437,,,,437,,,,,,437,,437,,437,437,437,437,437,437,437,,437,437,437", ",,,,,,,,,,,,437,437,,437,,437,,50,437,,437,,,437,50,50,50,,,50,50,50", ",50,,,,,,,,,,50,50,50,,,,,,,,50,50,,50,50,50,50,50,,,,,,,,,,,,,,,,,", ",,,,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,,,50,50,50,,,50,,,50", ",50,,50,,50,,50,,50,50,50,50,50,50,50,,50,,50,,,,,,,,,,,,,50,50,50,50", "28,50,,50,50,,50,28,28,28,,,28,28,28,,28,,,,,,,,,,28,28,,,,,,,,,28,28", ",28,28,28,28,28,,,,,,,,,,,,,,,,,,,,,,28,28,28,28,28,28,28,28,28,28,28", "28,28,28,28,,,28,28,28,,,28,,28,28,,28,,28,,28,,28,,28,28,28,28,28,28", "28,,28,,28,,,,,,,,,,,,,28,28,28,28,498,28,,,28,,28,498,498,498,,,498", "498,498,,498,,,,,,,,,,498,,,,,,,,,,498,498,,498,498,498,498,498,,,,", ",,,,,,,496,,,,,,,496,496,496,,,496,496,496,,496,,,,,498,498,,,,496,", ",498,,,,,498,498,496,496,,496,496,496,496,496,,,,,,,,,,,,498,,,,,,,", ",,,,,498,,498,,,498,,,496,496,,497,,,,,496,,497,497,497,496,496,497", "497,497,,497,,,,,,,,,,497,,,,,496,,,,,497,497,,497,497,497,497,497,496", ",496,,,496,203,203,,,203,,,,,,,,,203,203,203,203,203,203,203,203,203", ",,203,203,497,497,,,203,203,203,203,497,,,,,497,497,,,,,203,203,,203", "203,203,203,203,203,203,203,203,203,203,,497,203,,,,,,,,,,,,497,,497", ",,497,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,,,,7,7,7,7,7,7", "7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,,7,,,,,,,,,7,7,7,7,7,7,7,7,7,,,7", "7,,,,,7,7,7,7,,,,,,,,,,,,7,7,,7,7,7,7,7,7,7,7,7,7,7,,,7,7,,,,,,,,,,7", "416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416", "416,416,416,416,416,416,416,,,,416,416,416,416,416,416,416,416,416,416", "416,416,416,416,416,416,416,416,416,416,416,416,416,,,416,,,,,,,,,416", "416,416,416,416,416,416,416,416,,,416,416,,,,,416,416,416,416,,,,,,", ",,,,,416,416,,416,416,416,416,416,416,416,416,416,416,416,,,416,416", ",,,,,,,,,416,412,412,412,412,412,412,412,412,412,412,412,412,412,412", "412,412,412,412,412,412,412,412,412,412,,,,412,412,412,412,412,412,412", "412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,,,412", ",,,,,,,,412,412,412,412,412,412,412,412,412,,,412,412,,,,,412,412,412", "412,,,,,,,,,,,,412,412,,412,412,412,412,412,412,412,412,412,412,412", ",,412,412,,,,,,,,,,412,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", "8,,,,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,8,,,,,,,,,8,8,8", "8,8,8,8,8,8,,,8,8,,,,,8,8,8,8,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8", ",,8,8,,,,,,,,,,8,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79", "79,79,79,79,79,79,79,,,,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79", "79,79,79,79,79,79,79,79,79,79,79,,79,,,,,,,79,79,79,79,79,79,79,79,79", ",,79,79,,,,,79,79,79,79,,,,,,,,,,,,79,79,,79,79,79,79,79,79,79,79,79", "79,79,,,79,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192", "192,192,192,192,192,192,192,192,192,,,,192,192,192,192,192,192,192,192", "192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192", "192,,192,,,,,,,192,192,192,192,192,192,192,192,192,,,192,192,,,,,192", "192,192,192,,,,,,,,,,,,192,192,,192,192,192,192,192,192,192,192,192", "192,192,,,192,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65", "65,65,65,65,65,65,,,,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65", "65,65,65,65,65,65,65,65,65,65,,65,,,,,,,65,65,65,65,65,65,65,65,65,", ",65,65,,,,,65,65,65,65,,,,,,65,,,,,,65,65,,65,65,65,65,65,65,65,65,65", "65,65,,,65,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772", "772,772,772,772,772,772,772,772,772,,,,772,772,772,772,772,772,772,772", "772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,,,772,,", ",,,,,,772,772,772,772,772,772,772,772,772,,,772,772,,,,,772,772,772", "772,,,,,,,,,,,,772,772,,772,772,772,772,772,772,772,772,772,772,772", "596,596,772,,596,,,,,,,,,596,596,596,596,596,596,596,596,596,,,596,596", ",,,,596,596,596,596,,,,,,596,,,,,,596,596,,596,596,596,596,596,596,596", "596,596,596,596,202,202,596,,202,,,,,,,,,202,202,202,202,202,202,202", "202,202,,,202,202,,,,,202,202,202,202,,,,,,,,,,,,202,202,,202,202,202", "202,202,202,202,202,202,202,202,267,267,202,,267,,,,,,,,,267,267,267", "267,267,267,267,267,267,,,267,267,,,,,267,267,267,267,,,,,,,,,,,,267", "267,,267,267,267,267,267,267,267,267,267,267,267,451,451,267,,451,,", ",,,,,,451,451,451,451,451,451,451,451,451,,,451,451,,,,,451,451,451", "451,,,,,,,,,,,,451,451,,451,451,451,451,451,451,451,451,451,451,451", "588,588,451,,588,,,,,,,,,588,588,588,588,588,588,588,588,588,,,588,588", ",,,,588,588,588,588,,,,,,,,,,,,588,588,,588,588,588,588,588,588,588", "588,588,588,588,587,587,588,,587,,,,,,,,,587,587,587,587,587,587,587", "587,587,,,587,587,,,,,587,587,587,587,,,,,,587,,,,,,587,587,,587,587", "587,587,587,587,587,587,587,587,587,450,450,587,,450,,,,,,,,,450,450", "450,450,450,450,450,450,450,,,450,450,,,,,450,450,450,450,,,,,,450,", ",,,,450,450,,450,450,450,450,450,450,450,450,450,450,450,266,266,450", ",266,,,,,,,,,266,266,266,266,266,266,266,266,266,,,266,266,,,,,266,266", "266,266,,,,,,,,,,,,266,266,,266,266,266,266,266,266,266,266,266,266", "266,523,523,266,,523,,,,,,,,,523,523,523,523,523,523,523,523,523,,,523", "523,,,,,523,523,523,523,,,,,,523,,,,,,523,523,,523,523,523,523,523,523", "523,523,523,523,523,594,594,523,,594,,,,,,,,,594,594,594,594,594,594", "594,594,594,,,594,594,,,,,594,594,594,594,,,,,,,,,,,,594,594,,594,594", "594,594,594,594,594,594,594,594,594,538,538,594,,538,,,,,,,,,538,538", "538,538,538,538,538,538,538,,,538,538,,,,,538,538,538,538,,,,,,,,,,", ",538,538,,538,538,538,538,538,538,538,538,538,538,538,537,537,538,,537", ",,,,,,,,537,537,537,537,537,537,537,537,537,,,537,537,,,,,537,537,537", "537,,,,,,537,,,,,,537,537,,537,537,537,537,537,537,537,537,537,537,537", "265,265,537,,265,,,,,,,,,265,265,265,265,265,265,265,265,265,,,265,265", ",,,,265,265,265,265,,,,,,,,,,,,265,265,,265,265,265,265,265,265,265", "265,265,265,265,201,201,265,,201,,,,,,,,,201,201,201,201,201,201,201", "201,201,,,201,201,,,,,201,201,201,201,,,,,,201,,,,,,201,201,,201,201", "201,201,201,201,201,201,201,201,201,955,955,201,,955,,,,,,,,,955,955", "955,955,955,955,955,955,955,,,955,955,,,,,955,955,955,955,,,,,,955,", ",,,,955,955,,955,955,955,955,955,955,955,955,955,955,955,526,526,955", ",526,,,,,,,,,526,526,526,526,526,526,526,526,526,,,526,526,,,,,526,526", "526,526,,,,,,,,,,,,526,526,,526,526,526,526,526,526,526,526,526,526", "526,829,829,526,,829,,,,,,,,,829,829,829,829,829,829,829,829,829,,,829", "829,,,,,829,829,829,829,,,,,,,,,,,,829,829,,829,829,829,829,829,829", "829,829,829,829,829,956,956,829,,956,,,,,,,,,956,956,956,956,956,956", "956,956,956,,,956,956,,,,,956,956,956,956,,,,,,,,,,,,956,956,,956,956", "956,956,956,956,956,956,956,956,956,524,524,956,,524,,,,,,,,,524,524", "524,524,524,524,524,524,524,,,524,524,,,,,524,524,524,524,,,,,,,,,,", ",524,524,,524,524,524,524,524,524,524,524,524,524,524,,,524"]; - def.$_reduce_92 = function(val, _values, result) { - var self = this; + racc_action_check = arr = Opal.get('Array').$new(25478, nil); - result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); - return result; - }; + idx = 0; - def.$_reduce_93 = function(val, _values, result) { - var self = this; + ($a = ($c = clist).$each, $a.$$p = (TMP_3 = function(str){var self = TMP_3.$$s || this, $a, $b, TMP_4; +if (str == null) str = nil; + return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_4 = function(i){var self = TMP_4.$$s || this, $a; +if (i == null) i = nil; + if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + arr['$[]='](idx, i.$to_i()) + }; + return idx = $rb_plus(idx, 1);}, TMP_4.$$s = self, TMP_4), $a).call($b)}, TMP_3.$$s = self, TMP_3), $a).call($c); - result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); - return result; - }; + racc_action_pointer = [1046, 1007, nil, -63, nil, 1031, 886, 23431, 23794, 883, 825, 815, 826, 1088, 461, 436, nil, 3273, 3404, 1439, 847, nil, 3797, 3928, 4059, 394, -11, 4452, 23043, nil, 4583, 4714, 4845, nil, 744, 391, 746, 377, 5500, 5631, 5762, 674, 1350, nil, nil, nil, nil, nil, nil, nil, 22916, nil, 6155, 6286, 6417, -19, 3303, 6810, 6941, nil, nil, 7072, -2, 7334, nil, 24135, nil, nil, nil, nil, nil, -79, nil, nil, nil, nil, nil, 603, 602, 23915, nil, nil, nil, 505, 8251, nil, nil, 8382, nil, nil, nil, nil, nil, nil, nil, nil, nil, 678, nil, 8644, nil, nil, nil, 8775, 8906, 9037, 9168, 9299, 9430, nil, 404, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 24025, 523, nil, 9954, 10085, 10216, 10347, 10478, 10609, 25071, 24363, 23304, 11133, 11264, 11395, nil, 415, 199, 1073, 202, 969, 1015, 12312, 12443, nil, nil, 12574, 996, 12836, 12967, 13098, 13229, 13360, 13491, 13622, 13753, 13884, 14015, 14146, 14277, 14408, 14539, 14670, 14801, 14932, 15063, 15194, 15325, 15456, 15587, 15718, 15849, 15980, nil, nil, nil, nil, 2880, nil, 934, 929, nil, 16504, 951, 16635, nil, nil, nil, nil, nil, 16766, nil, nil, 25012, 24717, 24422, 932, 17290, 17421, nil, nil, nil, nil, nil, nil, nil, 17552, 505, 1162, 950, 18076, 956, 972, 982, 18600, 18731, 17, 517, 1072, 235, 1049, 125, 274, nil, 277, 397, 458, 20172, nil, 349, 534, 546, 514, nil, 587, nil, 20958, nil, 21089, 237, nil, 542, 292, 360, 647, 635, 146, 689, nil, nil, 12, 3434, nil, nil, nil, 655, 653, nil, 720, 734, nil, nil, nil, nil, nil, nil, nil, 3026, nil, nil, nil, 811, nil, nil, 814, 25, 0, 45, 1308, 1439, 486, 85, 743, 50, 1481, 877, 29, 975, nil, nil, 3129, 970, nil, 1612, nil, 65, nil, nil, 129, 61, 280, 285, 307, 319, 369, 397, 438, nil, -4, nil, 7203, nil, 369, nil, 348, nil, 268, 889, 375, nil, 885, -36, nil, 391, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 892, 23673, nil, nil, nil, 23552, 864, nil, nil, 653, nil, 1963, 803, nil, 785, nil, nil, 1177, 817, 786, 433, 432, 1832, nil, nil, nil, 22786, 784, 22526, nil, 1701, 1570, 915, nil, nil, nil, 1832, nil, nil, 24658, 24481, 784, 653, 216, 522, 391, 260, 120, nil, 4321, 4190, 593, 566, 756, 755, 747, 728, 5238, 5369, 4738, 4976, 3398, 4839, 3143, 3267, 5107, 3666, 4452, 4583, 4059, 516, 524, 3797, 3928, 22268, 133, nil, 22137, nil, 22006, nil, 21875, nil, 345, nil, 23225, 23304, 23170, -29, nil, 620, nil, nil, 616, 614, nil, nil, 21744, 126, 154, 647, nil, nil, 21613, 644, 607, nil, nil, 589, 21482, 609, 21351, 24776, 25366, 21220, 25189, 39, 564, nil, nil, 20827, 506, nil, 20696, 20565, 20434, 24953, 24894, 2618, 20303, 589, 586, 502, nil, nil, 20041, nil, nil, 19910, nil, nil, nil, nil, 19779, 19648, 211, nil, 728, nil, nil, 19517, 3565, nil, 403, nil, nil, 101, nil, 3063, nil, 1017, 552, nil, nil, 19386, 1124, nil, nil, 19255, 203, 221, 1116, 1121, 19124, nil, 18993, 24599, 24540, 18862, 0, nil, 1743, nil, 24835, 18469, 24304, nil, nil, 18338, -52, 18207, nil, 7347, nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -24, nil, nil, nil, 918, nil, nil, nil, nil, nil, 17945, 909, 17814, 129, 148, 17683, 17159, 931, nil, nil, nil, 17028, 939, nil, 16897, 940, nil, -49, -64, 22656, 22396, 950, 951, 784, nil, 1046, nil, 3041, nil, 16373, 932, nil, 972, 16242, nil, nil, 16111, nil, nil, nil, nil, nil, nil, 12705, nil, 999, 12181, 12050, 915, 996, nil, nil, 1033, 11919, 11788, nil, 900, -51, 11657, 1007, nil, 1043, 229, 232, 1051, 214, 207, 1066, -47, -7, -4, 11526, 2749, 139, 171, -11, 273, 11002, nil, nil, 206, nil, 197, 306, nil, nil, 205, nil, 228, 1219, 316, 279, 293, nil, nil, 424, 3129, nil, 212, nil, 522, nil, nil, nil, nil, nil, 529, nil, 568, 10871, 496, 46, 40, 160, 45, 511, 10740, 1874, nil, 551, 550, 9823, 374, nil, -26, 9692, 9561, 4858, 518, nil, nil, 619, nil, 8513, nil, 554, 555, nil, 564, 566, 569, nil, 561, nil, 24245, 610, 1030, 8120, nil, nil, nil, 2487, 586, 7989, 7858, 7727, nil, 2356, nil, 2225, nil, nil, 2094, nil, 1963, nil, 7596, 7465, 6679, 220, -48, nil, nil, 641, 741, nil, nil, nil, 652, nil, 638, 6548, nil, 661, 763, 647, 252, nil, nil, nil, 772, nil, 6024, 657, 697, nil, nil, nil, nil, nil, nil, 25248, nil, 713, nil, nil, nil, nil, 902, 787, nil, 5893, 789, 5369, 5238, nil, nil, 69, -21, 546, -19, nil, 819, nil, nil, 821, 822, 720, nil, nil, nil, 362, nil, nil, 437, 11539, nil, 466, nil, 282, nil, 5107, nil, nil, nil, nil, nil, nil, nil, 755, 742, nil, 1701, nil, 1570, 4976, 4321, 4190, nil, nil, nil, 3666, 750, nil, nil, nil, 3535, nil, nil, 73, 3142, nil, 804, 768, nil, nil, 80, nil, 895, 898, 3011, 2880, nil, nil, 2749, nil, nil, 824, nil, 789, nil, nil, 794, 798, 801, 792, nil, nil, 4727, nil, 1308, nil, 2618, nil, 2487, 84, 826, 923, 88, nil, nil, 2356, nil, nil, nil, 186, 2225, 987, nil, nil, 335, nil, nil, nil, 2094, 994, 1177, 25130, 25307, 96, 536, nil, nil, nil, 872, nil, 769, 953, nil, 899, 105, 112, 129, 211, nil, nil, nil, nil, -7]; - def.$_reduce_94 = function(val, _values, result) { - var self = this; + racc_action_default = [-3, -560, -1, -548, -4, -6, -560, -560, -560, -560, -560, -560, -560, -560, -281, -37, -38, -560, -560, -43, -45, -46, -293, -331, -332, -50, -259, -386, -259, -65, -10, -69, -77, -79, -560, -461, -560, -560, -560, -560, -560, -550, -235, -274, -275, -276, -277, -278, -279, -280, -538, -283, -560, -559, -529, -301, -559, -560, -560, -306, -309, -548, -560, -560, -323, -560, -333, -334, -404, -405, -406, -407, -408, -559, -411, -559, -559, -559, -559, -559, -438, -444, -445, -560, -450, -451, -452, -453, -454, -455, -456, -457, -458, -459, -460, -463, -464, -560, -2, -549, -555, -556, -557, -560, -560, -560, -560, -560, -3, -13, -560, -106, -107, -108, -109, -110, -111, -112, -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -560, -18, -113, -10, -560, -560, -560, -559, -559, -560, -560, -560, -560, -560, -560, -41, -560, -461, -560, -281, -560, -560, -10, -560, -42, -225, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -232, -373, -375, -47, -236, -252, -266, -266, -256, -560, -267, -560, -293, -331, -332, -559, -531, -560, -48, -49, -560, -560, -560, -55, -559, -560, -300, -379, -387, -389, -63, -385, -64, -560, -548, -11, -65, -10, -560, -560, -70, -73, -10, -461, -560, -560, -281, -296, -550, -560, -335, -386, -560, -75, -560, -81, -288, -446, -447, -560, -210, -211, -226, -560, -551, -10, -550, -237, -550, -552, -552, -560, -560, -552, -560, -302, -303, -560, -560, -346, -347, -354, -559, -495, -361, -559, -559, -372, -494, -496, -497, -498, -499, -500, -560, -513, -518, -519, -521, -522, -523, -560, -44, -560, -560, -560, -560, -548, -560, -549, -461, -560, -560, -281, -560, -502, -503, -102, -560, -104, -560, -281, -560, -320, -461, -560, -106, -107, -144, -145, -161, -166, -173, -176, -326, -560, -527, -560, -409, -560, -424, -560, -426, -560, -560, -560, -416, -560, -560, -422, -560, -437, -439, -440, -441, -442, -448, -449, 977, -5, -558, -19, -20, -21, -22, -23, -560, -560, -15, -16, -17, -560, -560, -25, -34, -189, -267, -560, -560, -26, -35, -36, -27, -191, -560, -560, -539, -540, -559, -382, -541, -542, -539, -259, -540, -384, -544, -545, -559, -539, -540, -33, -199, -39, -40, -560, -560, -559, -559, -288, -560, -560, -560, -560, -299, -200, -201, -202, -203, -204, -205, -206, -207, -212, -213, -214, -215, -216, -217, -218, -219, -220, -221, -222, -223, -224, -227, -228, -229, -230, -560, -559, -253, -560, -254, -560, -264, -560, -268, -560, -534, -259, -259, -259, -559, -56, -550, -247, -248, -266, -266, -260, -261, -560, -559, -559, -560, -295, -9, -549, -560, -66, -286, -82, -71, -560, -560, -559, -560, -560, -559, -560, -288, -560, -446, -447, -560, -78, -83, -560, -560, -560, -560, -560, -231, -560, -396, -560, -560, -238, -239, -554, -553, -241, -554, -291, -292, -530, -343, -10, -10, -560, -345, -560, -363, -370, -560, -367, -368, -560, -371, -495, -560, -504, -560, -506, -508, -512, -520, -524, -10, -336, -337, -338, -10, -560, -560, -560, -560, -10, -391, -559, -560, -560, -559, -288, -315, -102, -103, -560, -559, -560, -318, -465, -560, -560, -560, -324, -493, -328, -546, -547, -550, -410, -425, -428, -429, -431, -412, -427, -413, -414, -415, -560, -418, -420, -421, -560, -443, -7, -14, -114, -24, -560, -273, -560, -289, -290, -560, -560, -59, -245, -246, -380, -560, -61, -383, -560, -57, -381, -539, -540, -539, -540, -560, -560, -189, -298, -560, -357, -560, -359, -10, -266, -265, -269, -560, -532, -533, -560, -51, -376, -52, -377, -53, -378, -10, -243, -560, -249, -251, -43, -560, -258, -262, -560, -10, -10, -294, -12, -66, -560, -74, -80, -560, -539, -540, -559, -543, -287, -560, -560, -559, -76, -560, -198, -208, -209, -560, -559, -559, -284, -285, -552, -242, -560, -560, -344, -355, -560, -362, -559, -356, -560, -559, -559, -514, -501, -560, -560, -511, -559, -339, -559, -307, -340, -341, -342, -310, -560, -313, -560, -560, -560, -539, -540, -543, -287, -560, -560, -102, -105, -543, -560, -10, -560, -467, -560, -10, -10, -493, -560, -470, -471, -473, -474, -476, -477, -526, -526, -482, -484, -484, -484, -492, -495, -516, -560, -560, -560, -10, -417, -419, -423, -190, -271, -560, -560, -560, -30, -194, -31, -195, -60, -32, -196, -62, -197, -58, -560, -560, -560, -290, -289, -233, -358, -560, -560, -255, -270, -535, -560, -244, -266, -560, -263, -560, -560, -72, -289, -290, -84, -297, -559, -352, -10, -397, -559, -398, -399, -240, -348, -349, -369, -560, -288, -560, -365, -366, -505, -507, -510, -560, -350, -560, -560, -10, -10, -312, -314, -560, -289, -94, -560, -289, -560, -466, -321, -560, -560, -550, -469, -472, -475, -560, -480, -481, -560, -560, -488, -560, -490, -560, -491, -560, -329, -528, -430, -433, -434, -435, -436, -560, -272, -28, -192, -29, -193, -560, -560, -560, -360, -374, -54, -250, -266, -388, -390, -8, -10, -403, -353, -560, -560, -401, -287, -559, -509, -304, -560, -305, -560, -560, -560, -10, -316, -319, -10, -325, -327, -560, -478, -526, -525, -483, -484, -484, -484, -560, -517, -515, -493, -432, -234, -257, -560, -402, -10, -461, -560, -560, -281, -400, -364, -10, -308, -311, -269, -559, -10, -560, -468, -479, -560, -486, -487, -489, -10, -396, -559, -560, -560, -288, -559, -392, -393, -394, -560, -322, -484, -560, -395, -560, -539, -540, -543, -287, -351, -317, -485, -330, -289]; - result = self.$new_colon3(val['$[]'](0), val['$[]'](1)); - return result; - }; + clist = ["13,308,316,575,579,379,114,114,251,251,251,704,754,489,98,568,542,208", "208,397,419,426,208,208,208,769,367,102,324,332,13,289,289,532,348,349", "10,662,352,5,721,713,766,285,99,583,250,250,250,117,117,298,208,208", "216,500,281,208,208,109,194,208,356,365,114,837,10,593,252,252,252,659", "353,659,729,733,567,313,114,207,406,407,408,409,2,102,560,283,384,563", "565,678,380,818,272,276,662,924,360,13,318,604,644,208,208,208,208,13", "13,433,438,443,386,388,311,609,395,840,657,347,347,619,14,347,545,548", "860,861,552,709,310,671,397,350,841,10,351,842,5,744,944,681,682,10", "10,749,410,5,429,430,601,912,14,291,291,666,668,670,248,263,264,370", "753,603,772,347,347,347,347,926,322,553,672,496,497,498,719,769,295", "295,924,501,423,423,358,366,885,485,412,247,486,114,411,509,766,13,208", "208,208,208,208,442,510,959,208,208,208,321,822,295,295,897,383,284", "13,208,390,618,361,393,872,14,662,313,313,609,774,775,855,14,14,10,418", "424,427,917,916,193,920,893,446,404,835,737,320,568,1,317,725,381,10", "359,597,528,687,504,251,659,659,506,680,,,,251,698,489,448,449,208,208", "543,,544,734,494,,458,208,,947,,13,864,866,868,289,13,,,513,,,250,250", "556,332,972,746,289,,,250,102,,519,723,,281,,13,533,,281,713,505,252", "14,10,,514,,,10,252,,,580,581,268,275,277,960,602,,952,14,,,515,,721", "910,,521,,10,,769,777,208,208,,,,,644,,433,438,,,272,582,276,766,,,", ",365,,,,,,102,,417,,,765,208,716,,,35,720,,,,598,,,,,,284,,,568,649", "650,,14,503,507,,291,14,,114,347,347,511,114,35,288,288,803,813,291", "788,966,,,,791,768,,793,692,14,295,697,,662,949,950,951,,,,,607,692", "295,,355,369,442,369,208,208,117,850,,,117,853,854,673,,,625,284,,,626", ",284,689,659,,696,828,313,313,832,833,,974,,,,35,,,,,,,366,35,35,692", ",,,,909,637,,,692,,641,,208,,,637,902,659,13,12,,295,825,,289,,208,442", ",208,,,,823,,289,533,765,658,738,,442,743,,208,,,533,748,12,313,,,313", "10,,932,684,13,13,,,,939,,717,,,637,637,637,773,,803,311,,,,,13,750", ",,13,768,35,,,13,,208,442,,208,10,10,708,442,,208,,,,208,35,208,703", ",730,730,,,,,313,10,,313,12,10,,,945,313,10,,12,12,751,,,801,332,,,", ",208,208,961,14,918,,208,918,765,291,765,,765,,,,,,929,,291,,,901,13", "965,,938,347,,752,,,,295,35,784,786,13,288,35,,789,14,14,295,,,13,13", "366,,288,289,,921,,922,423,,10,,,35,14,533,289,,14,,,765,,14,10,295", ",12,816,870,,,,,10,10,,808,848,,845,,,765,,,12,,,,,,,635,710,711,,,640", ",,208,,643,,,13,,768,,13,13,,369,,726,,637,,728,641,,637,,736,,,,114", ",964,851,13,852,,,14,856,,208,208,,10,,,,10,10,,,14,,890,,12,,665,667", "669,12,14,14,,347,,291,,,10,,,,915,904,,879,881,13,291,,,,12,,,442,", ",,,295,,,,,,208,802,13,13,,,,295,,,,,,,,806,,10,,,,,,,692,811,812,,", ",,,14,730,,,14,14,10,10,,,,,,,,,,,,,,,,13,,876,14,934,,35,347,,967,", ",288,,,13,,,13,,,,,288,,,,,,,,,,,,,10,,13,,937,,,,,13,35,35,14,,13,10", ",369,10,,,,13,,208,442,,,877,,,35,,14,14,35,,,10,,35,,,,,10,,,313,,10", ",,,,,,,10,,,,,,,,,,,,,,,896,,,,,,,,,,,,,14,,,,936,,,,906,907,,,,12,", "14,,,14,,,,,,,,,35,,295,,,,,,,,,14,,,35,,,,14,,,,,14,35,35,12,12,,288", ",14,,,931,,,,,,,,288,,325,,,12,,943,,12,,,,,12,,,,,385,,387,387,391", "394,387,,,,,953,,,,,,,958,,,,,962,,,,,,,,35,,,,35,35,,,,,,,,,,,,,,,", ",,,,,35,,217,,,,249,249,249,,,12,,,,,,,,,,,305,306,307,12,,,,,,,,,,12", "12,249,249,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,12,,,,12,12,,,,,,,,,,,35,,,,933,,,,,,12,385,,,,35,,,35", ",502,,,,,,,,,,,,,,,,,,35,,,,,,,35,,,,,35,,,,,12,,,35,,,420,249,428,249", "249,,,,447,,,,,,,12,12,559,,,559,559,217,,460,461,462,463,464,465,466", "467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483", "484,,,,,,,,,,249,,249,,,,,,249,,12,,,,,249,249,,,,,,,,249,12,,,12,,", ",,,,,,,,,,,,,,,,,12,,,,,,539,12,,,,,12,,,,,636,,,12,,,,,,,636,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,654,,,,,,,,,,636,636,636,654,,,", ",,,,,,654,654,,,,,,,,,,,,,,,,,,,,,,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,249,249,,447,651,428,319,,,,,,,,,,,,,,,,,,,,,,,,,,,653,,,249,,249", ",249,,,,,,,,,,,,,,,,676,,,,,,,,,,,,294,294,249,,,249,,294,294,294,,", ",,700,701,702,,,,,,,294,,,249,,,249,,294,294,,,,,,,,,,,,,,,,,,,,,,,", ",,636,,,,,636,,,249,,,249,819,824,,,,249,,,,,421,425,559,,,559,559,", ",,,,819,,819,,,,,,,,,,,,,,779,,249,,,785,787,,,,,790,,,792,,,,,,,,,", ",,,,,,491,,493,249,,,249,,495,,,,,,,,249,249,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,895,249,,294,899,294,294,294,294,294,294,294,294,294,294,294,294", "294,294,294,294,294,294,294,294,294,294,294,294,294,,,,249,,,,,,294", ",294,,,,,,294,,,,,,,,,,249,,,,,,,,,,,,,,294,,,,,,249,880,882,,,,559", "294,,,,,,785,787,790,294,,,,,,,,,,,,249,,,,,,,,,,,,,,,,,629,,,819,,", ",,,,,,,,,,,,819,,,,,,,,,,,,,,,294,,,,,,,,,,249,,,,,,,,,,,,,,882,880", "928,,,,249,,,660,,319,,663,,,,,,,,,,,,249,,,294,677,,,,,,,,,,,,,,,,", ",249,,,,,,,,,,,,,,294,294,294,,,,660,,,319,249,,,,,,,,,,,,,,,,,,,,294", ",,294,,294,,294,,,,,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,294,,,294,294", "294,,,,,,,,,780,294,,,294,,,,,,,,,,,,294,,,,,,,,,,,,,,,804,,,805,,,", ",,,,,,660,319,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,821,,,,,,,,294,,294,,,,,", ",,,,,,294,,,,,,,,,,421,,,,,,,,,294,,,294,,,,,,,,,,294,294,858,,,,,,", ",,,294,,,,,,,,,,878,,,294,,,,,,294,,,,,,,,,,,,,,,,,,,421,,,,,,,,,,,", ",294,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,,294,,,925,,,,,,,", ",,294,294,294,,,,,,,,319,,,,,294,,,,,,,,,,,,,,942,,,,,,,,,,,,,,,,,,", ",,,942,,,,,,,,,,,,,,,,,,,,,,,,294,,,,,,,,,,,,,,294,294,294,,,,294,,", ",,,,,,294,,,,,,,,,,294,,,,,,,,,,,,,,,,,,,,,,294"]; - def.$_reduce_97 = function(val, _values, result) { - var self = this; + racc_goto_table = arr = Opal.get('Array').$new(2565, nil); - result = self.$new_colon3(val['$[]'](0), val['$[]'](1)); - return result; - }; + idx = 0; - def.$_reduce_98 = function(val, _values, result) { - var self = this; + ($a = ($d = clist).$each, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this, $a, $b, TMP_6; +if (str == null) str = nil; + return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_6 = function(i){var self = TMP_6.$$s || this, $a; +if (i == null) i = nil; + if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + arr['$[]='](idx, i.$to_i()) + }; + return idx = $rb_plus(idx, 1);}, TMP_6.$$s = self, TMP_6), $a).call($b)}, TMP_5.$$s = self, TMP_5), $a).call($d); - result = self.$new_const(val['$[]'](0)); - return result; - }; + clist = ["21,51,22,79,79,47,48,48,56,56,56,10,86,64,4,147,8,21,21,47,24,24,21", "21,21,143,46,85,106,109,21,21,21,43,16,16,17,156,16,7,149,108,112,41", "6,82,29,29,29,50,50,42,21,21,18,35,38,21,21,14,14,21,21,21,48,80,17", "45,58,58,58,59,4,59,81,81,150,29,48,26,16,16,16,16,2,85,111,39,127,111", "111,59,87,11,60,60,156,153,17,21,58,88,63,21,21,21,21,21,21,33,33,33", "128,128,26,131,128,11,36,26,26,131,23,26,57,57,144,144,57,59,89,36,47", "90,91,17,92,93,7,94,95,36,36,17,17,96,7,7,22,22,97,98,23,23,23,63,63", "63,31,31,31,99,100,101,102,26,26,26,26,103,104,105,62,33,33,33,107,143", "52,52,153,61,56,56,23,23,54,53,27,114,115,48,2,117,112,21,21,21,21,21", "21,48,118,119,21,21,21,78,121,52,52,122,126,9,21,21,129,130,19,132,133", "23,156,29,29,131,134,135,137,23,23,17,18,18,18,139,141,15,146,12,18", "5,151,120,76,147,1,75,147,74,17,83,84,51,43,56,56,59,59,66,65,,,,56", "43,64,26,26,21,21,51,,51,82,127,,26,21,,144,,21,145,145,145,21,21,,", "4,,,29,29,106,109,80,45,21,,,29,85,,42,150,,38,,21,41,,38,108,58,58", "23,17,,6,,,17,58,,,16,16,34,34,34,11,46,,86,23,,,39,,149,81,,39,,17", ",143,131,21,21,,,,,63,,33,33,,,60,4,60,112,,,,,21,,,,,,85,,9,,,110,21", "113,,,44,113,,,,85,,,,,,9,,,147,22,22,,23,31,31,,23,23,,48,26,26,31", "48,44,44,44,64,43,23,35,10,,,,35,113,,35,33,23,52,33,,156,145,145,145", ",,,,26,33,52,,44,44,48,44,21,21,50,8,,,50,8,8,51,,,14,9,,,14,,9,22,59", ",22,111,29,29,111,111,,145,,,,44,,,,,,,23,44,44,33,,,,,79,60,,,33,,60", ",21,,,60,147,59,21,20,,52,57,,21,,21,48,,21,,,,24,,21,41,110,58,22,", "48,22,,21,,,41,22,20,29,,,29,17,,79,7,21,21,,,,79,,21,,,60,60,60,51", ",64,26,,,,,21,16,,,21,113,44,,,21,,21,48,,21,17,17,58,48,,21,,,,21,44", "21,26,,85,85,,,,,29,17,,29,20,17,,,8,29,17,,20,20,85,,,106,109,,,,,21", "21,82,23,110,,21,110,110,23,110,,110,,,,,,64,,23,,,113,21,8,,111,26", ",26,,,,52,44,18,18,21,44,44,,18,23,23,52,,,21,21,23,,44,21,,113,,113", "56,,17,,,44,23,41,21,,23,,,110,,23,17,52,,20,41,47,,,,,17,17,,58,16", ",56,,,110,,,20,,,,,,,34,9,9,,,34,,,21,,34,,,21,,113,,21,21,,44,,9,,60", ",9,60,,60,,9,,,,48,,113,85,21,85,,,23,85,,21,21,,17,,,,17,17,,,23,,56", ",20,,34,34,34,20,23,23,,26,,23,,,17,,,,51,16,,18,18,21,23,,,,20,,,48", ",,,,52,,,,,,21,9,21,21,,,,52,,,,,,,,9,,17,,,,,,,33,9,9,,,,,,23,85,,", "23,23,17,17,,,,,,,,,,,,,,,,21,,23,23,21,,44,26,,22,,,44,,,21,,,21,,", ",,44,,,,,,,,,,,,,17,,21,,17,,,,,21,44,44,23,,21,17,,44,17,,,,21,,21", "48,,,9,,,44,,23,23,44,,,17,,44,,,,,17,,,29,,17,,,,,,,,17,,,,,,,,,,,", ",,,9,,,,,,,,,,,,,23,,,,23,,,,9,9,,,,20,,23,,,23,,,,,,,,,44,,52,,,,,", ",,,23,,,44,,,,23,,,,,23,44,44,20,20,,44,,23,,,9,,,,,,,,44,,55,,,20,", "9,,20,,,,,20,,,,,55,,55,55,55,55,55,,,,,9,,,,,,,9,,,,,9,,,,,,,,44,,", ",44,44,,,,,,,,,,,,,,,,,,,,,44,,28,,,,28,28,28,,,20,,,,,,,,,,,28,28,28", "20,,,,,,,,,,20,20,28,28,,,,,,,44,,,,,,,,,,,,,,,,,,,,,44,44,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,20,20,,,,,,,,,,,44,,,,44,,,,,,20,55", ",,,44,,,44,,55,,,,,,,,,,,,,,,,,,44,,,,,,,44,,,,,44,,,,,20,,,44,,,28", "28,28,28,28,,,,28,,,,,,,20,20,55,,,55,55,28,,28,28,28,28,28,28,28,28", "28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,,,,,,,,,,28,,28,", ",,,,28,,20,,,,,28,28,,,,,,,,28,20,,,20,,,,,,,,,,,,,,,,,,,,20,,,,,,28", "20,,,,,20,,,,,55,,,20,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,55,,,,,,,,,,55,55,55,55,,,,,,,,,,55,55,,,,,,,,,,,,,,,,,,,,,,,,", ",28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,28,,28,28,28,25,,,,,,,,,,,,,,,,", ",,,,,,,,,,28,,,28,,28,,28,,,,,,,,,,,,,,,,28,,,,,,,,,,,,37,37,28,,,28", ",37,37,37,,,,,28,28,28,,,,,,,37,,,28,,,28,,37,37,,,,,,,,,,,,,,,,,,,", ",,,,,,55,,,,,55,,,28,,,28,55,55,,,,28,,,,,25,25,55,,,55,55,,,,,,55,", "55,,,,,,,,,,,,,,28,,28,,,28,28,,,,,28,,,28,,,,,,,,,,,,,,,,25,,25,28", ",,28,,25,,,,,,,,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,55,28,,37,55,37,37", "37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37", ",,,28,,,,,,37,,37,,,,,,37,,,,,,,,,,28,,,,,,,,,,,,,,37,,,,,,28,28,28", ",,,55,37,,,,,,28,28,28,37,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,25,,,55,,,,", ",,,,,,,,,,55,,,,,,,,,,,,,,,37,,,,,,,,,,28,,,,,,,,,,,,,,28,28,28,,,,28", ",,25,,25,,25,,,,,,,,,,,,28,,,37,25,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,", "37,37,37,,,,25,,,25,28,,,,,,,,,,,,,,,,,,,,37,,,37,,37,,37,,,,,,,,,,", ",,,,,,,,,,,,,,,,,37,,,,,,,,,,,37,,,37,37,37,,,,,,,,,25,37,,,37,,,,,", ",,,,,,37,,,,,,,,,,,,,,,25,,,25,,,,,,,,,,25,25,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,25,,,,,,,,37,,37,,,,,,,,,,,,37,,,,,,,,,,25,,,,,,,,,37,,,37,,", ",,,,,,,37,37,25,,,,,,,,,,37,,,,,,,,,,25,,,37,,,,,,37,,,,,,,,,,,,,,,", ",,,25,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,37", ",,25,,,,,,,,,,37,37,37,,,,,,,,25,,,,,37,,,,,,,,,,,,,,25,,,,,,,,,,,,", ",,,,,,,,,25,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,37,37,37,,,,37,,", ",,,,,,37,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,37"]; - def.$_reduce_99 = function(val, _values, result) { - var self = this; + racc_goto_check = arr = Opal.get('Array').$new(2565, nil); - result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); - return result; - }; + idx = 0; - def.$_reduce_103 = function(val, _values, result) { - var $a, $b, self = this; + ($a = ($e = clist).$each, $a.$$p = (TMP_7 = function(str){var self = TMP_7.$$s || this, $a, $b, TMP_8; +if (str == null) str = nil; + return ($a = ($b = str.$split(",", -1)).$each, $a.$$p = (TMP_8 = function(i){var self = TMP_8.$$s || this, $a; +if (i == null) i = nil; + if ((($a = i['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + arr['$[]='](idx, i.$to_i()) + }; + return idx = $rb_plus(idx, 1);}, TMP_8.$$s = self, TMP_8), $a).call($b)}, TMP_7.$$s = self, TMP_7), $a).call($e); - (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); - result = val['$[]'](0); - return result; - }; + racc_goto_pointer = [nil, 246, 84, nil, 11, 142, 41, 39, -294, 183, -530, -611, -579, nil, 52, 229, -23, 36, 36, 156, 515, 0, -51, 122, -176, 1549, 62, 79, 1145, 24, nil, 136, nil, -92, 303, -213, -368, 1634, 26, 57, nil, 12, 19, -266, 386, -296, -37, -60, -1, nil, 42, -40, 147, -58, -613, 1031, -14, -190, 46, -417, 68, -88, -329, -341, -239, -248, -11, nil, nil, nil, nil, nil, nil, nil, 184, 193, 189, nil, 151, -345, -661, -506, -308, 189, -115, 24, -591, 27, -279, 79, 74, -595, 76, -596, -452, -770, -452, -218, -701, 97, -440, -216, -440, -701, 114, -151, -28, -386, -517, -27, -222, -241, -561, -175, 169, -56, nil, -80, -72, -740, -342, -497, -611, nil, nil, nil, 141, 15, 37, 139, -173, -269, 141, -554, -385, -385, nil, -527, nil, -624, nil, -623, nil, -578, -637, -483, -625, -324, nil, -522, -263, -482, nil, -768, nil, nil, -453]; - def.$_reduce_104 = function(val, _values, result) { - var $a, $b, self = this; + racc_goto_default = [nil, nil, nil, 3, nil, 4, 354, 280, nil, 541, nil, 838, nil, 279, nil, nil, nil, 212, 16, 11, 213, 304, nil, 211, nil, 255, 15, nil, 19, 20, 21, nil, 25, 695, nil, nil, nil, 26, 29, nil, 31, 34, 33, nil, 209, 364, nil, 116, 436, 115, 69, nil, 42, nil, nil, 312, 314, nil, 315, 253, 434, nil, nil, 638, 487, nil, nil, 270, 43, 44, 45, 46, 47, 48, 49, nil, 271, 55, nil, nil, nil, nil, nil, nil, nil, 576, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 327, 326, 715, 329, nil, 330, 331, nil, nil, 440, nil, nil, nil, nil, nil, nil, 68, 70, 71, 72, nil, nil, nil, nil, 614, nil, nil, nil, nil, 396, 756, 759, 764, 761, 762, 763, 919, nil, nil, 767, 338, 333, 340, nil, 570, 571, 771, 343, 346, 261]; - (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); - result = val['$[]'](0); - return result; - }; + racc_reduce_table = [0, 0, "racc_error", 1, 141, "_reduce_none", 2, 142, "_reduce_2", 0, 143, "_reduce_3", 1, 143, "_reduce_4", 3, 143, "_reduce_5", 1, 145, "_reduce_none", 4, 145, "_reduce_7", 4, 148, "_reduce_8", 2, 149, "_reduce_9", 0, 153, "_reduce_10", 1, 153, "_reduce_11", 3, 153, "_reduce_12", 0, 167, "_reduce_13", 4, 147, "_reduce_14", 3, 147, "_reduce_15", 3, 147, "_reduce_none", 3, 147, "_reduce_17", 2, 147, "_reduce_18", 3, 147, "_reduce_19", 3, 147, "_reduce_20", 3, 147, "_reduce_21", 3, 147, "_reduce_22", 3, 147, "_reduce_23", 4, 147, "_reduce_none", 3, 147, "_reduce_25", 3, 147, "_reduce_26", 3, 147, "_reduce_27", 6, 147, "_reduce_none", 6, 147, "_reduce_none", 5, 147, "_reduce_30", 5, 147, "_reduce_none", 5, 147, "_reduce_none", 3, 147, "_reduce_none", 3, 147, "_reduce_34", 3, 147, "_reduce_35", 3, 147, "_reduce_36", 1, 147, "_reduce_none", 1, 166, "_reduce_none", 3, 166, "_reduce_39", 3, 166, "_reduce_40", 2, 166, "_reduce_41", 2, 166, "_reduce_42", 1, 166, "_reduce_none", 1, 156, "_reduce_none", 1, 158, "_reduce_none", 1, 158, "_reduce_none", 2, 158, "_reduce_47", 2, 158, "_reduce_48", 2, 158, "_reduce_49", 1, 170, "_reduce_none", 4, 170, "_reduce_none", 4, 170, "_reduce_none", 4, 170, "_reduce_none", 4, 175, "_reduce_none", 2, 169, "_reduce_55", 3, 169, "_reduce_none", 4, 169, "_reduce_57", 5, 169, "_reduce_none", 4, 169, "_reduce_59", 5, 169, "_reduce_none", 4, 169, "_reduce_61", 5, 169, "_reduce_none", 2, 169, "_reduce_63", 2, 169, "_reduce_64", 1, 159, "_reduce_65", 3, 159, "_reduce_66", 1, 179, "_reduce_67", 3, 179, "_reduce_68", 1, 178, "_reduce_69", 2, 178, "_reduce_70", 3, 178, "_reduce_71", 5, 178, "_reduce_72", 2, 178, "_reduce_73", 4, 178, "_reduce_74", 2, 178, "_reduce_75", 4, 178, "_reduce_76", 1, 178, "_reduce_77", 3, 178, "_reduce_78", 1, 181, "_reduce_79", 3, 181, "_reduce_80", 2, 180, "_reduce_81", 3, 180, "_reduce_82", 1, 183, "_reduce_83", 3, 183, "_reduce_84", 1, 182, "_reduce_85", 4, 182, "_reduce_86", 3, 182, "_reduce_87", 3, 182, "_reduce_none", 3, 182, "_reduce_none", 3, 182, "_reduce_none", 2, 182, "_reduce_none", 1, 182, "_reduce_none", 1, 157, "_reduce_93", 4, 157, "_reduce_94", 4, 157, "_reduce_95", 3, 157, "_reduce_96", 3, 157, "_reduce_97", 3, 157, "_reduce_98", 3, 157, "_reduce_99", 2, 157, "_reduce_100", 1, 157, "_reduce_none", 1, 185, "_reduce_none", 2, 186, "_reduce_103", 1, 186, "_reduce_104", 3, 186, "_reduce_105", 1, 187, "_reduce_none", 1, 187, "_reduce_none", 1, 187, "_reduce_none", 1, 187, "_reduce_109", 1, 187, "_reduce_110", 1, 154, "_reduce_111", 1, 154, "_reduce_none", 1, 155, "_reduce_113", 3, 155, "_reduce_114", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 188, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 1, 189, "_reduce_none", 3, 168, "_reduce_189", 5, 168, "_reduce_190", 3, 168, "_reduce_191", 6, 168, "_reduce_192", 6, 168, "_reduce_193", 5, 168, "_reduce_194", 5, 168, "_reduce_none", 5, 168, "_reduce_none", 5, 168, "_reduce_none", 4, 168, "_reduce_none", 3, 168, "_reduce_none", 3, 168, "_reduce_200", 3, 168, "_reduce_201", 3, 168, "_reduce_202", 3, 168, "_reduce_203", 3, 168, "_reduce_204", 3, 168, "_reduce_205", 3, 168, "_reduce_206", 3, 168, "_reduce_207", 4, 168, "_reduce_208", 4, 168, "_reduce_209", 2, 168, "_reduce_210", 2, 168, "_reduce_211", 3, 168, "_reduce_212", 3, 168, "_reduce_213", 3, 168, "_reduce_214", 3, 168, "_reduce_215", 3, 168, "_reduce_216", 3, 168, "_reduce_217", 3, 168, "_reduce_218", 3, 168, "_reduce_219", 3, 168, "_reduce_220", 3, 168, "_reduce_221", 3, 168, "_reduce_222", 3, 168, "_reduce_223", 3, 168, "_reduce_224", 2, 168, "_reduce_225", 2, 168, "_reduce_226", 3, 168, "_reduce_227", 3, 168, "_reduce_228", 3, 168, "_reduce_229", 3, 168, "_reduce_230", 3, 168, "_reduce_231", 0, 193, "_reduce_232", 0, 194, "_reduce_233", 7, 168, "_reduce_234", 1, 168, "_reduce_none", 1, 165, "_reduce_none", 1, 162, "_reduce_237", 2, 162, "_reduce_238", 2, 162, "_reduce_239", 4, 162, "_reduce_240", 2, 162, "_reduce_241", 3, 162, "_reduce_242", 3, 200, "_reduce_243", 2, 202, "_reduce_none", 1, 203, "_reduce_245", 1, 203, "_reduce_none", 1, 201, "_reduce_247", 1, 201, "_reduce_none", 2, 201, "_reduce_249", 4, 201, "_reduce_250", 2, 201, "_reduce_251", 1, 171, "_reduce_252", 2, 171, "_reduce_253", 2, 171, "_reduce_254", 4, 171, "_reduce_255", 1, 171, "_reduce_256", 4, 205, "_reduce_none", 1, 205, "_reduce_none", 0, 207, "_reduce_259", 2, 174, "_reduce_260", 1, 206, "_reduce_none", 2, 206, "_reduce_262", 3, 206, "_reduce_263", 2, 199, "_reduce_264", 2, 204, "_reduce_265", 0, 204, "_reduce_266", 1, 196, "_reduce_267", 2, 196, "_reduce_268", 3, 196, "_reduce_269", 4, 196, "_reduce_270", 3, 164, "_reduce_271", 4, 164, "_reduce_272", 2, 164, "_reduce_273", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 1, 192, "_reduce_none", 0, 229, "_reduce_283", 4, 192, "_reduce_284", 4, 192, "_reduce_285", 3, 192, "_reduce_286", 3, 192, "_reduce_287", 2, 192, "_reduce_288", 4, 192, "_reduce_289", 4, 192, "_reduce_290", 3, 192, "_reduce_291", 3, 192, "_reduce_292", 1, 192, "_reduce_293", 4, 192, "_reduce_294", 3, 192, "_reduce_295", 1, 192, "_reduce_296", 5, 192, "_reduce_297", 4, 192, "_reduce_298", 3, 192, "_reduce_299", 2, 192, "_reduce_300", 1, 192, "_reduce_none", 2, 192, "_reduce_302", 2, 192, "_reduce_303", 6, 192, "_reduce_304", 6, 192, "_reduce_305", 0, 230, "_reduce_306", 0, 231, "_reduce_307", 7, 192, "_reduce_308", 0, 232, "_reduce_309", 0, 233, "_reduce_310", 7, 192, "_reduce_311", 5, 192, "_reduce_312", 4, 192, "_reduce_313", 5, 192, "_reduce_314", 0, 234, "_reduce_315", 0, 235, "_reduce_316", 9, 192, "_reduce_317", 0, 236, "_reduce_318", 6, 192, "_reduce_319", 0, 237, "_reduce_320", 0, 238, "_reduce_321", 8, 192, "_reduce_322", 0, 239, "_reduce_323", 0, 240, "_reduce_324", 6, 192, "_reduce_325", 0, 241, "_reduce_326", 6, 192, "_reduce_327", 0, 242, "_reduce_328", 0, 243, "_reduce_329", 9, 192, "_reduce_330", 1, 192, "_reduce_331", 1, 192, "_reduce_332", 1, 192, "_reduce_333", 1, 192, "_reduce_none", 1, 161, "_reduce_none", 1, 219, "_reduce_none", 1, 219, "_reduce_none", 1, 219, "_reduce_none", 2, 219, "_reduce_none", 1, 221, "_reduce_none", 1, 221, "_reduce_none", 1, 221, "_reduce_none", 2, 218, "_reduce_343", 3, 244, "_reduce_344", 2, 244, "_reduce_345", 1, 244, "_reduce_none", 1, 244, "_reduce_none", 3, 245, "_reduce_348", 3, 245, "_reduce_349", 1, 220, "_reduce_350", 5, 220, "_reduce_351", 1, 151, "_reduce_none", 2, 151, "_reduce_353", 1, 247, "_reduce_354", 3, 247, "_reduce_355", 3, 248, "_reduce_356", 1, 176, "_reduce_none", 2, 176, "_reduce_358", 1, 176, "_reduce_359", 3, 176, "_reduce_360", 1, 249, "_reduce_361", 2, 251, "_reduce_362", 1, 251, "_reduce_363", 6, 246, "_reduce_364", 4, 246, "_reduce_365", 4, 246, "_reduce_366", 2, 246, "_reduce_367", 2, 246, "_reduce_368", 4, 246, "_reduce_369", 2, 246, "_reduce_370", 2, 246, "_reduce_371", 1, 246, "_reduce_372", 0, 255, "_reduce_373", 5, 254, "_reduce_374", 2, 172, "_reduce_375", 4, 172, "_reduce_none", 4, 172, "_reduce_none", 4, 172, "_reduce_none", 2, 217, "_reduce_379", 4, 217, "_reduce_380", 4, 217, "_reduce_381", 3, 217, "_reduce_382", 4, 217, "_reduce_383", 3, 217, "_reduce_384", 2, 217, "_reduce_385", 1, 217, "_reduce_386", 0, 257, "_reduce_387", 5, 216, "_reduce_388", 0, 258, "_reduce_389", 5, 216, "_reduce_390", 0, 260, "_reduce_391", 6, 222, "_reduce_392", 1, 259, "_reduce_393", 1, 259, "_reduce_none", 6, 150, "_reduce_395", 0, 150, "_reduce_396", 1, 261, "_reduce_397", 1, 261, "_reduce_none", 1, 261, "_reduce_none", 2, 262, "_reduce_400", 1, 262, "_reduce_401", 2, 152, "_reduce_402", 1, 152, "_reduce_none", 1, 208, "_reduce_none", 1, 208, "_reduce_none", 1, 208, "_reduce_none", 1, 209, "_reduce_407", 1, 265, "_reduce_none", 2, 265, "_reduce_409", 3, 266, "_reduce_410", 1, 266, "_reduce_411", 3, 210, "_reduce_412", 3, 211, "_reduce_413", 3, 212, "_reduce_414", 3, 212, "_reduce_415", 1, 269, "_reduce_416", 3, 269, "_reduce_417", 1, 270, "_reduce_418", 2, 270, "_reduce_419", 3, 213, "_reduce_420", 3, 213, "_reduce_421", 1, 272, "_reduce_422", 3, 272, "_reduce_423", 1, 267, "_reduce_424", 2, 267, "_reduce_425", 1, 268, "_reduce_426", 2, 268, "_reduce_427", 1, 271, "_reduce_428", 0, 274, "_reduce_429", 3, 271, "_reduce_430", 0, 275, "_reduce_431", 4, 271, "_reduce_432", 1, 273, "_reduce_433", 1, 273, "_reduce_434", 1, 273, "_reduce_435", 1, 273, "_reduce_none", 2, 190, "_reduce_437", 1, 190, "_reduce_438", 1, 276, "_reduce_none", 1, 276, "_reduce_none", 1, 276, "_reduce_none", 1, 276, "_reduce_none", 3, 264, "_reduce_443", 1, 263, "_reduce_444", 1, 263, "_reduce_445", 2, 263, "_reduce_446", 2, 263, "_reduce_447", 2, 263, "_reduce_448", 2, 263, "_reduce_449", 1, 184, "_reduce_450", 1, 184, "_reduce_451", 1, 184, "_reduce_452", 1, 184, "_reduce_453", 1, 184, "_reduce_454", 1, 184, "_reduce_455", 1, 184, "_reduce_456", 1, 184, "_reduce_457", 1, 184, "_reduce_458", 1, 184, "_reduce_459", 1, 184, "_reduce_460", 1, 214, "_reduce_461", 1, 160, "_reduce_462", 1, 163, "_reduce_463", 1, 163, "_reduce_none", 1, 224, "_reduce_465", 3, 224, "_reduce_466", 2, 224, "_reduce_467", 4, 226, "_reduce_468", 2, 226, "_reduce_469", 1, 278, "_reduce_none", 1, 278, "_reduce_none", 2, 279, "_reduce_472", 1, 279, "_reduce_473", 1, 280, "_reduce_474", 2, 281, "_reduce_475", 1, 281, "_reduce_476", 1, 282, "_reduce_477", 3, 282, "_reduce_478", 4, 283, "_reduce_479", 2, 283, "_reduce_480", 2, 283, "_reduce_481", 1, 283, "_reduce_482", 2, 285, "_reduce_483", 0, 285, "_reduce_484", 6, 277, "_reduce_485", 4, 277, "_reduce_486", 4, 277, "_reduce_487", 2, 277, "_reduce_488", 4, 277, "_reduce_489", 2, 277, "_reduce_490", 2, 277, "_reduce_491", 1, 277, "_reduce_492", 0, 277, "_reduce_493", 1, 287, "_reduce_none", 1, 287, "_reduce_495", 1, 288, "_reduce_496", 1, 288, "_reduce_497", 1, 288, "_reduce_498", 1, 288, "_reduce_499", 1, 289, "_reduce_500", 3, 289, "_reduce_501", 1, 223, "_reduce_none", 1, 223, "_reduce_none", 1, 291, "_reduce_504", 3, 291, "_reduce_none", 1, 292, "_reduce_506", 3, 292, "_reduce_507", 1, 290, "_reduce_none", 4, 290, "_reduce_none", 3, 290, "_reduce_none", 2, 290, "_reduce_none", 1, 290, "_reduce_none", 1, 252, "_reduce_513", 3, 252, "_reduce_514", 3, 293, "_reduce_515", 1, 286, "_reduce_516", 3, 286, "_reduce_517", 1, 294, "_reduce_none", 1, 294, "_reduce_none", 2, 253, "_reduce_520", 1, 253, "_reduce_521", 1, 295, "_reduce_none", 1, 295, "_reduce_none", 2, 250, "_reduce_524", 2, 284, "_reduce_525", 0, 284, "_reduce_526", 1, 227, "_reduce_527", 4, 227, "_reduce_528", 0, 215, "_reduce_529", 2, 215, "_reduce_530", 1, 198, "_reduce_531", 3, 198, "_reduce_532", 3, 296, "_reduce_533", 2, 296, "_reduce_534", 4, 296, "_reduce_535", 1, 177, "_reduce_none", 1, 177, "_reduce_none", 1, 177, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 173, "_reduce_none", 1, 256, "_reduce_none", 1, 256, "_reduce_none", 1, 256, "_reduce_none", 1, 228, "_reduce_none", 1, 228, "_reduce_none", 0, 144, "_reduce_none", 1, 144, "_reduce_none", 0, 191, "_reduce_none", 1, 191, "_reduce_none", 0, 197, "_reduce_none", 1, 197, "_reduce_none", 1, 197, "_reduce_none", 1, 225, "_reduce_none", 1, 225, "_reduce_none", 1, 146, "_reduce_none", 2, 146, "_reduce_none", 0, 195, "_reduce_559"]; - def.$_reduce_105 = function(val, _values, result) { - var self = this; + racc_reduce_n = 560; - result = self.$new_sym(val['$[]'](0)); - return result; - }; + racc_shift_n = 977; - def.$_reduce_107 = function(val, _values, result) { - var self = this; + racc_token_table = $hash(false, 0, "error", 1, "kCLASS", 2, "kMODULE", 3, "kDEF", 4, "kUNDEF", 5, "kBEGIN", 6, "kRESCUE", 7, "kENSURE", 8, "kEND", 9, "kIF", 10, "kUNLESS", 11, "kTHEN", 12, "kELSIF", 13, "kELSE", 14, "kCASE", 15, "kWHEN", 16, "kWHILE", 17, "kUNTIL", 18, "kFOR", 19, "kBREAK", 20, "kNEXT", 21, "kREDO", 22, "kRETRY", 23, "kIN", 24, "kDO", 25, "kDO_COND", 26, "kDO_BLOCK", 27, "kDO_LAMBDA", 28, "kRETURN", 29, "kYIELD", 30, "kSUPER", 31, "kSELF", 32, "kNIL", 33, "kTRUE", 34, "kFALSE", 35, "kAND", 36, "kOR", 37, "kNOT", 38, "kIF_MOD", 39, "kUNLESS_MOD", 40, "kWHILE_MOD", 41, "kUNTIL_MOD", 42, "kRESCUE_MOD", 43, "kALIAS", 44, "kDEFINED", 45, "klBEGIN", 46, "klEND", 47, "k__LINE__", 48, "k__FILE__", 49, "tIDENTIFIER", 50, "tFID", 51, "tGVAR", 52, "tIVAR", 53, "tCONSTANT", 54, "tLABEL", 55, "tCVAR", 56, "tNTH_REF", 57, "tBACK_REF", 58, "tSTRING_CONTENT", 59, "tINTEGER", 60, "tFLOAT", 61, "tREGEXP_END", 62, "tUPLUS", 63, "tUMINUS", 64, "tPOW", 65, "tCMP", 66, "tEQ", 67, "tEQQ", 68, "tNEQ", 69, "tGEQ", 70, "tLEQ", 71, "tANDOP", 72, "tOROP", 73, "tMATCH", 74, "tNMATCH", 75, "tJSDOT", 76, "tDOT", 77, "tDOT2", 78, "tDOT3", 79, "tAREF", 80, "tASET", 81, "tLSHFT", 82, "tRSHFT", 83, "tCOLON2", 84, "tCOLON3", 85, "tOP_ASGN", 86, "tASSOC", 87, "tLPAREN", 88, "tLPAREN2", 89, "tRPAREN", 90, "tLPAREN_ARG", 91, "tRBRACK", 92, "tLBRACE", 93, "tLBRACE_ARG", 94, "tSTAR", 95, "tSTAR2", 96, "tAMPER", 97, "tAMPER2", 98, "tTILDE", 99, "tPERCENT", 100, "tDIVIDE", 101, "tPLUS", 102, "tMINUS", 103, "tLT", 104, "tGT", 105, "tPIPE", 106, "tBANG", 107, "tCARET", 108, "tLCURLY", 109, "tRCURLY", 110, "tBACK_REF2", 111, "tSYMBEG", 112, "tSTRING_BEG", 113, "tXSTRING_BEG", 114, "tREGEXP_BEG", 115, "tWORDS_BEG", 116, "tAWORDS_BEG", 117, "tSTRING_DBEG", 118, "tSTRING_DVAR", 119, "tSTRING_END", 120, "tSTRING", 121, "tSYMBOL", 122, "tNL", 123, "tEH", 124, "tCOLON", 125, "tCOMMA", 126, "tSPACE", 127, "tSEMI", 128, "tLAMBDA", 129, "tLAMBEG", 130, "tLBRACK2", 131, "tLBRACK", 132, "tJSLBRACK", 133, "tDSTAR", 134, "tLABEL_END", 135, "tEQL", 136, "tLOWEST", 137, "-@NUM", 138, "+@NUM", 139); - result = self.$s("undef", val['$[]'](0)); - return result; - }; + racc_nt_base = 140; - def.$_reduce_108 = function(val, _values, result) { - var self = this; + racc_use_result_var = true; - result = val['$[]'](0)['$<<'](val['$[]'](2)); - return result; - }; + Opal.cdecl($scope, 'Racc_arg', [racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var]); - def.$_reduce_183 = function(val, _values, result) { - var self = this; + Opal.cdecl($scope, 'Racc_token_to_s_table', ["$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tJSDOT", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tAWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tLBRACK2", "tLBRACK", "tJSLBRACK", "tDSTAR", "tLABEL_END", "tEQL", "tLOWEST", "\"-@NUM\"", "\"+@NUM\"", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "aref_args", "backref", "mrhs", "arg_value", "expr", "@1", "arg", "command", "block_command", "call_args", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_var", "operation", "mlhs_basic", "mlhs_entry", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "variable", "cname", "cpath", "fname", "op", "reswords", "symbol", "opt_nl", "primary", "@2", "@3", "none", "args", "trailer", "assocs", "block_arg", "paren_args", "opt_call_args", "rparen", "opt_paren_args", "opt_block_arg", "call_args2", "open_args", "@4", "literal", "strings", "xstring", "regexp", "words", "awords", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "dot_or_colon", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "f_larglist", "lambda_body", "block_param", "f_block_optarg", "f_block_opt", "block_args_tail", "f_block_arg", "opt_block_args_tail", "f_arg", "f_rest_arg", "do_block", "@20", "operation3", "@21", "@22", "cases", "@23", "exc_list", "exc_var", "numeric", "dsym", "string", "string1", "string_contents", "xstring_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@24", "@25", "sym", "f_args", "kwrest_mark", "f_kwrest", "f_label", "f_kw", "f_kwarg", "args_tail", "opt_f_block_arg", "opt_args_tail", "f_optarg", "f_norm_arg", "f_bad_arg", "f_arg_item", "f_margs", "f_marg", "f_marg_list", "f_opt", "restarg_mark", "blkarg_mark", "assoc"]); - result = self.$new_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)); - return result; - }; + Opal.cdecl($scope, 'Racc_debug_parser', false); - def.$_reduce_184 = function(val, _values, result) { + Opal.defn(self, '$_reduce_2', function(val, _values, result) { var self = this; - result = self.$new_assign(val['$[]'](0), val['$[]'](1), self.$s("rescue_mod", val['$[]'](2), val['$[]'](4))); + result = self.$new_compstmt(val['$[]'](0)); return result; - }; + }); - def.$_reduce_185 = function(val, _values, result) { + Opal.defn(self, '$_reduce_3', function(val, _values, result) { var self = this; - result = self.$new_op_asgn(val['$[]'](1), val['$[]'](0), val['$[]'](2)); + result = self.$new_block(); return result; - }; + }); - def.$_reduce_186 = function(val, _values, result) { + Opal.defn(self, '$_reduce_4', function(val, _values, result) { var self = this; - result = self.$new_op_asgn1(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + result = self.$new_block(val['$[]'](0)); return result; - }; + }); - def.$_reduce_187 = function(val, _values, result) { + Opal.defn(self, '$_reduce_5', function(val, _values, result) { var self = this; - result = self.$s("op_asgn2", val['$[]'](0), self.$op_to_setter(val['$[]'](2)), self.$value(val['$[]'](3)).$to_sym(), val['$[]'](4)); + val['$[]'](0)['$<<'](val['$[]'](2)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_193 = function(val, _values, result) { + Opal.defn(self, '$_reduce_7', function(val, _values, result) { var self = this; - result = self.$new_irange(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = val['$[]'](2); return result; - }; + }); - def.$_reduce_194 = function(val, _values, result) { + Opal.defn(self, '$_reduce_8', function(val, _values, result) { var self = this; - result = self.$new_erange(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_body(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_195 = function(val, _values, result) { + Opal.defn(self, '$_reduce_9', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_compstmt(val['$[]'](0)); return result; - }; + }); - def.$_reduce_196 = function(val, _values, result) { + Opal.defn(self, '$_reduce_10', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_block(); return result; - }; + }); - def.$_reduce_197 = function(val, _values, result) { + Opal.defn(self, '$_reduce_11', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_block(val['$[]'](0)); return result; - }; + }); - def.$_reduce_198 = function(val, _values, result) { + Opal.defn(self, '$_reduce_12', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + val['$[]'](0)['$<<'](val['$[]'](2)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_199 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_13', function(val, _values, result) { + var $a, $b, self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + (($a = ["expr_fname"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); return result; - }; + }); - def.$_reduce_200 = function(val, _values, result) { + Opal.defn(self, '$_reduce_14', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_alias(val['$[]'](0), val['$[]'](1), val['$[]'](3)); return result; - }; + }); - def.$_reduce_201 = function(val, _values, result) { + Opal.defn(self, '$_reduce_15', function(val, _values, result) { var self = this; - result = self.$new_call(self.$new_binary_call(self.$new_int(val['$[]'](1)), val['$[]'](2), val['$[]'](3)), ["-@", []], []); + result = self.$s("valias", self.$value(val['$[]'](1)).$to_sym(), self.$value(val['$[]'](2)).$to_sym()); return result; - }; + }); - def.$_reduce_202 = function(val, _values, result) { + Opal.defn(self, '$_reduce_17', function(val, _values, result) { var self = this; - result = self.$new_call(self.$new_binary_call(self.$new_float(val['$[]'](1)), val['$[]'](2), val['$[]'](3)), ["-@", []], []); + result = self.$s("valias", self.$value(val['$[]'](1)).$to_sym(), self.$value(val['$[]'](2)).$to_sym()); return result; - }; + }); - def.$_reduce_203 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_18', function(val, _values, result) { + var self = this; - result = self.$new_call(val['$[]'](1), ["+@", []], []); - if ((($a = ["int", "float"]['$include?'](val['$[]'](1).$type())) !== nil && (!$a.$$is_boolean || $a == true))) { - result = val['$[]'](1)}; + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_204 = function(val, _values, result) { + Opal.defn(self, '$_reduce_19', function(val, _values, result) { var self = this; - result = self.$new_call(val['$[]'](1), ["-@", []], []); - if (val['$[]'](1).$type()['$==']("int")) { - val['$[]'](1)['$[]='](1, val['$[]'](1)['$[]'](1)['$-@']()); - result = val['$[]'](1); - } else if (val['$[]'](1).$type()['$==']("float")) { - val['$[]'](1)['$[]='](1, val['$[]'](1)['$[]'](1).$to_f()['$-@']()); - result = val['$[]'](1);}; + result = self.$new_if(val['$[]'](1), val['$[]'](2), val['$[]'](0), nil); return result; - }; + }); - def.$_reduce_205 = function(val, _values, result) { + Opal.defn(self, '$_reduce_20', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_if(val['$[]'](1), val['$[]'](2), nil, val['$[]'](0)); return result; - }; + }); - def.$_reduce_206 = function(val, _values, result) { + Opal.defn(self, '$_reduce_21', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_while(val['$[]'](1), val['$[]'](2), val['$[]'](0)); return result; - }; + }); - def.$_reduce_207 = function(val, _values, result) { + Opal.defn(self, '$_reduce_22', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_until(val['$[]'](1), val['$[]'](2), val['$[]'](0)); return result; - }; + }); - def.$_reduce_208 = function(val, _values, result) { + Opal.defn(self, '$_reduce_23', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_rescue_mod(val['$[]'](1), val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_209 = function(val, _values, result) { + Opal.defn(self, '$_reduce_25', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_210 = function(val, _values, result) { + Opal.defn(self, '$_reduce_26', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$s("masgn", val['$[]'](0), self.$s("to_ary", val['$[]'](2))); return result; - }; + }); - def.$_reduce_211 = function(val, _values, result) { + Opal.defn(self, '$_reduce_27', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_op_asgn(val['$[]'](1), val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_212 = function(val, _values, result) { + Opal.defn(self, '$_reduce_30', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$s("op_asgn2", val['$[]'](0), self.$op_to_setter(val['$[]'](2)), self.$value(val['$[]'](3)).$to_sym(), val['$[]'](4)); return result; - }; + }); - def.$_reduce_213 = function(val, _values, result) { + Opal.defn(self, '$_reduce_34', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_assign(val['$[]'](0), val['$[]'](1), self.$s("svalue", val['$[]'](2))); return result; - }; + }); - def.$_reduce_214 = function(val, _values, result) { + Opal.defn(self, '$_reduce_35', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$s("masgn", val['$[]'](0), self.$s("to_ary", val['$[]'](2))); return result; - }; + }); - def.$_reduce_215 = function(val, _values, result) { + Opal.defn(self, '$_reduce_36', function(val, _values, result) { var self = this; - result = self.$new_unary_call(["!", []], self.$new_binary_call(val['$[]'](0), ["==", []], val['$[]'](2))); + result = self.$s("masgn", val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_216 = function(val, _values, result) { + Opal.defn(self, '$_reduce_39', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$s("and", val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_217 = function(val, _values, result) { + Opal.defn(self, '$_reduce_40', function(val, _values, result) { var self = this; - result = self.$new_not(val['$[]'](1), self.$new_binary_call(val['$[]'](0), ["=~", []], val['$[]'](2))); + result = self.$s("or", val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_218 = function(val, _values, result) { + Opal.defn(self, '$_reduce_41', function(val, _values, result) { var self = this; - result = self.$new_unary_call(val['$[]'](0), val['$[]'](1)); + result = self.$new_unary_call(["!", []], val['$[]'](1)); return result; - }; + }); - def.$_reduce_219 = function(val, _values, result) { + Opal.defn(self, '$_reduce_42', function(val, _values, result) { var self = this; result = self.$new_unary_call(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_220 = function(val, _values, result) { + Opal.defn(self, '$_reduce_47', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_return(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_221 = function(val, _values, result) { + Opal.defn(self, '$_reduce_48', function(val, _values, result) { var self = this; - result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_break(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_222 = function(val, _values, result) { + Opal.defn(self, '$_reduce_49', function(val, _values, result) { var self = this; - result = self.$new_and(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_next(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_223 = function(val, _values, result) { + Opal.defn(self, '$_reduce_55', function(val, _values, result) { var self = this; - result = self.$new_or(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_call(nil, val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_224 = function(val, _values, result) { + Opal.defn(self, '$_reduce_57', function(val, _values, result) { var self = this; - result = self.$s("defined", val['$[]'](2)); + result = self.$new_js_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_225 = function(val, _values, result) { + Opal.defn(self, '$_reduce_59', function(val, _values, result) { var self = this; - result = self.$new_if(val['$[]'](1), val['$[]'](0), val['$[]'](2), val['$[]'](4)); + result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_228 = function(val, _values, result) { + Opal.defn(self, '$_reduce_61', function(val, _values, result) { var self = this; - result = nil; + result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_229 = function(val, _values, result) { + Opal.defn(self, '$_reduce_63', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = self.$new_super(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_230 = function(val, _values, result) { + Opal.defn(self, '$_reduce_64', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = self.$new_yield(val['$[]'](1)); return result; - }; + }); - def.$_reduce_231 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_65', function(val, _values, result) { + var self = this; - val['$[]'](0)['$<<'](($a = self).$s.apply($a, ["hash"].concat(val['$[]'](2)))); result = val['$[]'](0); return result; - }; - - def.$_reduce_232 = function(val, _values, result) { - var $a, self = this; - - result = [($a = self).$s.apply($a, ["hash"].concat(val['$[]'](0)))]; - return result; - }; + }); - def.$_reduce_233 = function(val, _values, result) { + Opal.defn(self, '$_reduce_66', function(val, _values, result) { var self = this; result = val['$[]'](1); return result; - }; + }); - def.$_reduce_235 = function(val, _values, result) { + Opal.defn(self, '$_reduce_67', function(val, _values, result) { var self = this; - result = []; + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_237 = function(val, _values, result) { + Opal.defn(self, '$_reduce_68', function(val, _values, result) { var self = this; - result = []; + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_239 = function(val, _values, result) { + Opal.defn(self, '$_reduce_69', function(val, _values, result) { var self = this; result = val['$[]'](0); return result; - }; + }); - def.$_reduce_240 = function(val, _values, result) { + Opal.defn(self, '$_reduce_70', function(val, _values, result) { var self = this; - result = val['$[]'](0); - result['$<<'](self.$new_hash(nil, val['$[]'](2), nil)); + result = val['$[]'](0)['$<<'](val['$[]'](1)); return result; - }; + }); - def.$_reduce_241 = function(val, _values, result) { + Opal.defn(self, '$_reduce_71', function(val, _values, result) { var self = this; - result = [self.$new_hash(nil, val['$[]'](0), nil)]; + result = val['$[]'](0)['$<<'](self.$s("splat", val['$[]'](2))); return result; - }; + }); - def.$_reduce_242 = function(val, _values, result) { + Opal.defn(self, '$_reduce_72', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = (val['$[]'](0)['$<<'](self.$s("splat", val['$[]'](2)))).$concat(val['$[]'](4).$children()); return result; - }; + }); - def.$_reduce_243 = function(val, _values, result) { + Opal.defn(self, '$_reduce_73', function(val, _values, result) { var self = this; - result = val['$[]'](0); - self.$add_block_pass(val['$[]'](0), val['$[]'](1)); + result = val['$[]'](0)['$<<'](self.$s("splat")); return result; - }; + }); - def.$_reduce_244 = function(val, _values, result) { + Opal.defn(self, '$_reduce_74', function(val, _values, result) { var self = this; - result = [self.$new_hash(nil, val['$[]'](0), nil)]; - self.$add_block_pass(result, val['$[]'](1)); + result = (val['$[]'](0)['$<<'](self.$s("splat"))).$concat(val['$[]'](3).$children()); return result; - }; + }); - def.$_reduce_245 = function(val, _values, result) { + Opal.defn(self, '$_reduce_75', function(val, _values, result) { var self = this; - result = val['$[]'](0); - result['$<<'](self.$new_hash(nil, val['$[]'](2), nil)); + result = self.$s("array", self.$s("splat", val['$[]'](1))); return result; - }; + }); - def.$_reduce_246 = function(val, _values, result) { + Opal.defn(self, '$_reduce_76', function(val, _values, result) { var self = this; - result = []; - self.$add_block_pass(result, val['$[]'](0)); + result = self.$s("array", self.$s("splat", val['$[]'](1))).$concat(val['$[]'](3).$children()); return result; - }; + }); - def.$_reduce_249 = function(val, _values, result) { + Opal.defn(self, '$_reduce_77', function(val, _values, result) { var self = this; - self.$lexer().$cmdarg_push(1); + result = self.$s("array", self.$s("splat")); return result; - }; + }); - def.$_reduce_250 = function(val, _values, result) { + Opal.defn(self, '$_reduce_78', function(val, _values, result) { var self = this; - self.$lexer().$cmdarg_pop(); - result = val['$[]'](1); + result = self.$s("array", self.$s("splat")).$concat(val['$[]'](2).$children()); return result; - }; + }); - def.$_reduce_252 = function(val, _values, result) { + Opal.defn(self, '$_reduce_79', function(val, _values, result) { var self = this; - result = nil; + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_253 = function(val, _values, result) { + Opal.defn(self, '$_reduce_80', function(val, _values, result) { var self = this; result = val['$[]'](1); return result; - }; + }); - def.$_reduce_254 = function(val, _values, result) { + Opal.defn(self, '$_reduce_81', function(val, _values, result) { var self = this; - result = self.$new_block_pass(val['$[]'](0), val['$[]'](1)); + result = self.$s("array", val['$[]'](0)); return result; - }; + }); - def.$_reduce_255 = function(val, _values, result) { + Opal.defn(self, '$_reduce_82', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = val['$[]'](0)['$<<'](val['$[]'](1)); return result; - }; + }); - def.$_reduce_256 = function(val, _values, result) { + Opal.defn(self, '$_reduce_83', function(val, _values, result) { var self = this; - result = nil; + result = self.$s("array", val['$[]'](0)); return result; - }; + }); - def.$_reduce_257 = function(val, _values, result) { + Opal.defn(self, '$_reduce_84', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = val['$[]'](0)['$<<'](val['$[]'](2)); return result; - }; + }); - def.$_reduce_258 = function(val, _values, result) { + Opal.defn(self, '$_reduce_85', function(val, _values, result) { var self = this; - result = [self.$new_splat(val['$[]'](0), val['$[]'](1))]; + result = self.$new_assignable(val['$[]'](0)); return result; - }; + }); - def.$_reduce_259 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_86', function(val, _values, result) { + var $a, self = this, args = nil; - result = val['$[]'](0)['$<<'](val['$[]'](2)); + args = (function() {if ((($a = val['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { + return val['$[]'](2) + } else { + return [] + }; return nil; })(); + result = self.$s("attrasgn", val['$[]'](0), "[]=", ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args)))); return result; - }; + }); - def.$_reduce_260 = function(val, _values, result) { + Opal.defn(self, '$_reduce_87', function(val, _values, result) { var self = this; - result = val['$[]'](0)['$<<'](self.$new_splat(val['$[]'](2), val['$[]'](3))); + result = self.$new_call(val['$[]'](0), val['$[]'](2), []); return result; - }; + }); - def.$_reduce_261 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_93', function(val, _values, result) { + var self = this; - val['$[]'](0)['$<<'](val['$[]'](2)); - result = ($a = self).$s.apply($a, ["array"].concat(val['$[]'](0))); + result = self.$new_assignable(val['$[]'](0)); return result; - }; + }); - def.$_reduce_262 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_94', function(val, _values, result) { + var self = this; - val['$[]'](0)['$<<'](self.$s("splat", val['$[]'](3))); - result = ($a = self).$s.apply($a, ["array"].concat(val['$[]'](0))); + result = self.$new_js_attrasgn(val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_263 = function(val, _values, result) { + Opal.defn(self, '$_reduce_95', function(val, _values, result) { var self = this; - result = self.$s("splat", val['$[]'](1)); + result = self.$new_attrasgn(val['$[]'](0), "[]=", val['$[]'](2)); return result; - }; + }); - def.$_reduce_273 = function(val, _values, result) { + Opal.defn(self, '$_reduce_96', function(val, _values, result) { var self = this; - result = self.$lexer().$line(); + result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); return result; - }; + }); - def.$_reduce_274 = function(val, _values, result) { + Opal.defn(self, '$_reduce_97', function(val, _values, result) { var self = this; - result = self.$s("begin", val['$[]'](2)); + result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); return result; - }; + }); - def.$_reduce_275 = function(val, _values, result) { + Opal.defn(self, '$_reduce_98', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_attrasgn(val['$[]'](0), self.$op_to_setter(val['$[]'](2))); return result; - }; + }); - def.$_reduce_276 = function(val, _values, result) { + Opal.defn(self, '$_reduce_99', function(val, _values, result) { var self = this; - result = self.$new_paren(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_277 = function(val, _values, result) { + Opal.defn(self, '$_reduce_100', function(val, _values, result) { var self = this; - result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_colon3(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_278 = function(val, _values, result) { + Opal.defn(self, '$_reduce_103', function(val, _values, result) { var self = this; result = self.$new_colon3(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_279 = function(val, _values, result) { + Opal.defn(self, '$_reduce_104', function(val, _values, result) { var self = this; - result = self.$new_call(val['$[]'](0), ["[]", []], val['$[]'](2)); + result = self.$new_const(val['$[]'](0)); return result; - }; + }); - def.$_reduce_280 = function(val, _values, result) { + Opal.defn(self, '$_reduce_105', function(val, _values, result) { var self = this; - result = self.$new_array(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_281 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_109', function(val, _values, result) { + var $a, $b, self = this; - result = self.$new_hash(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = val['$[]'](0); return result; - }; + }); + + Opal.defn(self, '$_reduce_110', function(val, _values, result) { + var $a, $b, self = this; + + (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = val['$[]'](0); + return result; + }); - def.$_reduce_282 = function(val, _values, result) { + Opal.defn(self, '$_reduce_111', function(val, _values, result) { var self = this; - result = self.$new_return(val['$[]'](0)); + result = self.$new_sym(val['$[]'](0)); return result; - }; + }); - def.$_reduce_283 = function(val, _values, result) { + Opal.defn(self, '$_reduce_113', function(val, _values, result) { var self = this; - result = self.$new_yield(val['$[]'](2)); + result = self.$s("undef", val['$[]'](0)); return result; - }; + }); - def.$_reduce_284 = function(val, _values, result) { + Opal.defn(self, '$_reduce_114', function(val, _values, result) { var self = this; - result = self.$s("yield"); + result = val['$[]'](0)['$<<'](val['$[]'](2)); return result; - }; + }); - def.$_reduce_285 = function(val, _values, result) { + Opal.defn(self, '$_reduce_189', function(val, _values, result) { var self = this; - result = self.$s("yield"); + result = self.$new_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_286 = function(val, _values, result) { + Opal.defn(self, '$_reduce_190', function(val, _values, result) { var self = this; - result = self.$s("defined", val['$[]'](3)); + result = self.$new_assign(val['$[]'](0), val['$[]'](1), self.$s("rescue_mod", val['$[]'](2), val['$[]'](4))); return result; - }; + }); - def.$_reduce_287 = function(val, _values, result) { + Opal.defn(self, '$_reduce_191', function(val, _values, result) { var self = this; - result = self.$new_unary_call(["!", []], val['$[]'](2)); + result = self.$new_op_asgn(val['$[]'](1), val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_288 = function(val, _values, result) { + Opal.defn(self, '$_reduce_192', function(val, _values, result) { var self = this; - result = self.$new_unary_call(["!", []], self.$new_nil(val['$[]'](0))); + result = self.$new_op_asgn1(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); return result; - }; + }); - def.$_reduce_289 = function(val, _values, result) { + Opal.defn(self, '$_reduce_193', function(val, _values, result) { var self = this; - result = self.$new_call(nil, val['$[]'](0), []); - result['$<<'](val['$[]'](1)); + self.$raise(".JS[...] " + (val['$[]'](4)) + " is not supported"); return result; - }; + }); - def.$_reduce_291 = function(val, _values, result) { + Opal.defn(self, '$_reduce_194', function(val, _values, result) { var self = this; - val['$[]'](0)['$<<'](val['$[]'](1)); - result = val['$[]'](0); + result = self.$s("op_asgn2", val['$[]'](0), self.$op_to_setter(val['$[]'](2)), self.$value(val['$[]'](3)).$to_sym(), val['$[]'](4)); return result; - }; + }); - def.$_reduce_292 = function(val, _values, result) { + Opal.defn(self, '$_reduce_200', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_irange(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_293 = function(val, _values, result) { + Opal.defn(self, '$_reduce_201', function(val, _values, result) { var self = this; - result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](3), val['$[]'](4)); + result = self.$new_erange(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_294 = function(val, _values, result) { + Opal.defn(self, '$_reduce_202', function(val, _values, result) { var self = this; - result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](4), val['$[]'](3)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_295 = function(val, _values, result) { + Opal.defn(self, '$_reduce_203', function(val, _values, result) { var self = this; - self.$lexer().$cond_push(1); - result = self.$lexer().$line(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_296 = function(val, _values, result) { + Opal.defn(self, '$_reduce_204', function(val, _values, result) { var self = this; - self.$lexer().$cond_pop(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_297 = function(val, _values, result) { + Opal.defn(self, '$_reduce_205', function(val, _values, result) { var self = this; - result = self.$s("while", val['$[]'](2), val['$[]'](5)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_298 = function(val, _values, result) { + Opal.defn(self, '$_reduce_206', function(val, _values, result) { var self = this; - self.$lexer().$cond_push(1); - result = self.$lexer().$line(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_299 = function(val, _values, result) { + Opal.defn(self, '$_reduce_207', function(val, _values, result) { var self = this; - self.$lexer().$cond_pop(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_300 = function(val, _values, result) { + Opal.defn(self, '$_reduce_208', function(val, _values, result) { var self = this; - result = self.$s("until", val['$[]'](2), val['$[]'](5)); + result = self.$new_call(self.$new_binary_call(self.$new_int(val['$[]'](1)), val['$[]'](2), val['$[]'](3)), ["-@", []], []); return result; - }; + }); - def.$_reduce_301 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_209', function(val, _values, result) { + var self = this; - result = ($a = self).$s.apply($a, ["case", val['$[]'](1)].concat(val['$[]'](3))); + result = self.$new_call(self.$new_binary_call(self.$new_float(val['$[]'](1)), val['$[]'](2), val['$[]'](3)), ["-@", []], []); return result; - }; + }); - def.$_reduce_302 = function(val, _values, result) { + Opal.defn(self, '$_reduce_210', function(val, _values, result) { var $a, self = this; - result = ($a = self).$s.apply($a, ["case", nil].concat(val['$[]'](2))); + result = self.$new_call(val['$[]'](1), ["+@", []], []); + if ((($a = ["int", "float"]['$include?'](val['$[]'](1).$type())) !== nil && (!$a.$$is_boolean || $a == true))) { + result = val['$[]'](1)}; return result; - }; + }); - def.$_reduce_303 = function(val, _values, result) { + Opal.defn(self, '$_reduce_211', function(val, _values, result) { var self = this; - result = self.$s("case", nil, val['$[]'](3)); + result = self.$new_call(val['$[]'](1), ["-@", []], []); + if (val['$[]'](1).$type()['$==']("int")) { + val['$[]'](1)['$[]='](1, val['$[]'](1)['$[]'](1)['$-@']()); + result = val['$[]'](1); + } else if (val['$[]'](1).$type()['$==']("float")) { + val['$[]'](1)['$[]='](1, val['$[]'](1)['$[]'](1).$to_f()['$-@']()); + result = val['$[]'](1);}; return result; - }; + }); - def.$_reduce_304 = function(val, _values, result) { + Opal.defn(self, '$_reduce_212', function(val, _values, result) { var self = this; - self.$lexer().$cond_push(1); - result = self.$lexer().$line(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_305 = function(val, _values, result) { + Opal.defn(self, '$_reduce_213', function(val, _values, result) { var self = this; - self.$lexer().$cond_pop(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_306 = function(val, _values, result) { + Opal.defn(self, '$_reduce_214', function(val, _values, result) { var self = this; - result = self.$s("for", val['$[]'](4), val['$[]'](1), val['$[]'](7)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_307 = function(val, _values, result) { + Opal.defn(self, '$_reduce_215', function(val, _values, result) { var self = this; + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_308 = function(val, _values, result) { + Opal.defn(self, '$_reduce_216', function(val, _values, result) { var self = this; - result = self.$new_class(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_309 = function(val, _values, result) { + Opal.defn(self, '$_reduce_217', function(val, _values, result) { var self = this; - result = self.$lexer().$line(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_310 = function(val, _values, result) { + Opal.defn(self, '$_reduce_218', function(val, _values, result) { var self = this; + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_311 = function(val, _values, result) { + Opal.defn(self, '$_reduce_219', function(val, _values, result) { var self = this; - result = self.$new_sclass(val['$[]'](0), val['$[]'](3), val['$[]'](6), val['$[]'](7)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_312 = function(val, _values, result) { + Opal.defn(self, '$_reduce_220', function(val, _values, result) { var self = this; - result = self.$lexer().$line(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_313 = function(val, _values, result) { + Opal.defn(self, '$_reduce_221', function(val, _values, result) { var self = this; + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_314 = function(val, _values, result) { + Opal.defn(self, '$_reduce_222', function(val, _values, result) { var self = this; - result = self.$new_module(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_315 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_223', function(val, _values, result) { + var self = this; - self.$push_scope(); - (($a = ["expr_endfn"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_316 = function(val, _values, result) { + Opal.defn(self, '$_reduce_224', function(val, _values, result) { var self = this; - result = self.$new_def(val['$[]'](0), nil, val['$[]'](1), val['$[]'](3), val['$[]'](4), val['$[]'](5)); - self.$pop_scope(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_317 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_225', function(val, _values, result) { + var self = this; - (($a = ["expr_fname"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = self.$new_unary_call(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_318 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_226', function(val, _values, result) { + var self = this; - self.$push_scope(); - (($a = ["expr_endfn"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = self.$new_unary_call(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_319 = function(val, _values, result) { + Opal.defn(self, '$_reduce_227', function(val, _values, result) { var self = this; - result = self.$new_def(val['$[]'](0), val['$[]'](1), val['$[]'](4), val['$[]'](6), val['$[]'](7), val['$[]'](8)); - self.$pop_scope(); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_320 = function(val, _values, result) { + Opal.defn(self, '$_reduce_228', function(val, _values, result) { var self = this; - result = self.$new_break(val['$[]'](0)); + result = self.$new_binary_call(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_321 = function(val, _values, result) { + Opal.defn(self, '$_reduce_229', function(val, _values, result) { var self = this; - result = self.$s("next"); + result = self.$new_and(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_322 = function(val, _values, result) { + Opal.defn(self, '$_reduce_230', function(val, _values, result) { var self = this; - result = self.$s("redo"); + result = self.$new_or(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_332 = function(val, _values, result) { + Opal.defn(self, '$_reduce_231', function(val, _values, result) { var self = this; - result = self.$new_call(nil, ["lambda", []], []); - result['$<<'](self.$new_iter(val['$[]'](0), val['$[]'](1))); + result = self.$s("defined", val['$[]'](2)); return result; - }; + }); - def.$_reduce_333 = function(val, _values, result) { + Opal.defn(self, '$_reduce_232', function(val, _values, result) { var self = this; - result = val['$[]'](1); + self.$lexer().$cond_push(1); return result; - }; + }); - def.$_reduce_334 = function(val, _values, result) { + Opal.defn(self, '$_reduce_233', function(val, _values, result) { var self = this; - result = nil; + self.$lexer().$cond_pop(); return result; - }; + }); - def.$_reduce_337 = function(val, _values, result) { + Opal.defn(self, '$_reduce_234', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_if(val['$[]'](1), val['$[]'](0), val['$[]'](3), val['$[]'](6)); return result; - }; + }); - def.$_reduce_338 = function(val, _values, result) { + Opal.defn(self, '$_reduce_237', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = nil; return result; - }; + }); - def.$_reduce_339 = function(val, _values, result) { + Opal.defn(self, '$_reduce_238', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = [val['$[]'](0)]; return result; - }; + }); - def.$_reduce_340 = function(val, _values, result) { + Opal.defn(self, '$_reduce_239', function(val, _values, result) { var self = this; - result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](3), val['$[]'](4)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_342 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_240', function(val, _values, result) { + var $a, self = this; - result = val['$[]'](1); + val['$[]'](0)['$<<'](($a = self).$s.apply($a, ["hash"].concat(Opal.to_a(val['$[]'](2))))); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_343 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_241', function(val, _values, result) { + var $a, self = this; - result = self.$s("block", val['$[]'](0)); + result = [($a = self).$s.apply($a, ["hash"].concat(Opal.to_a(val['$[]'](0))))]; return result; - }; + }); - def.$_reduce_344 = function(val, _values, result) { + Opal.defn(self, '$_reduce_242', function(val, _values, result) { var self = this; - val['$[]'](0)['$<<'](val['$[]'](2)); - result = val['$[]'](0); + result = val['$[]'](0)['$<<'](val['$[]'](2)); return result; - }; + }); - def.$_reduce_345 = function(val, _values, result) { + Opal.defn(self, '$_reduce_243', function(val, _values, result) { var self = this; - result = self.$new_assign(self.$new_assignable(self.$new_ident(val['$[]'](0))), val['$[]'](1), val['$[]'](2)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_347 = function(val, _values, result) { + Opal.defn(self, '$_reduce_245', function(val, _values, result) { var self = this; - result = nil; + result = []; return result; - }; + }); - def.$_reduce_348 = function(val, _values, result) { + Opal.defn(self, '$_reduce_247', function(val, _values, result) { var self = this; - result = nil; + result = []; return result; - }; + }); - def.$_reduce_349 = function(val, _values, result) { + Opal.defn(self, '$_reduce_249', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_350 = function(val, _values, result) { + Opal.defn(self, '$_reduce_250', function(val, _values, result) { var self = this; result = val['$[]'](0); + result['$<<'](self.$new_hash(nil, val['$[]'](2), nil)); return result; - }; + }); - def.$_reduce_351 = function(val, _values, result) { + Opal.defn(self, '$_reduce_251', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = [self.$new_hash(nil, val['$[]'](0), nil)]; return result; - }; + }); - def.$_reduce_352 = function(val, _values, result) { + Opal.defn(self, '$_reduce_252', function(val, _values, result) { var self = this; - nil; + result = [val['$[]'](0)]; return result; - }; + }); - def.$_reduce_353 = function(val, _values, result) { + Opal.defn(self, '$_reduce_253', function(val, _values, result) { var self = this; - result = self.$new_block_args(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + result = val['$[]'](0); + self.$add_block_pass(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_354 = function(val, _values, result) { + Opal.defn(self, '$_reduce_254', function(val, _values, result) { var self = this; - result = self.$new_block_args(val['$[]'](0), val['$[]'](2), nil, val['$[]'](3)); + result = [self.$new_hash(nil, val['$[]'](0), nil)]; + self.$add_block_pass(result, val['$[]'](1)); return result; - }; + }); - def.$_reduce_355 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_255', function(val, _values, result) { + var $a, self = this; - result = self.$new_block_args(val['$[]'](0), nil, val['$[]'](2), val['$[]'](3)); + result = val['$[]'](0); + result['$<<'](self.$new_hash(nil, val['$[]'](2), nil)); + if ((($a = val['$[]'](3)) !== nil && (!$a.$$is_boolean || $a == true))) { + result['$<<'](val['$[]'](3))}; return result; - }; + }); - def.$_reduce_356 = function(val, _values, result) { + Opal.defn(self, '$_reduce_256', function(val, _values, result) { var self = this; - result = self.$new_block_args(val['$[]'](0), nil, nil, nil); + result = []; + self.$add_block_pass(result, val['$[]'](0)); return result; - }; + }); - def.$_reduce_357 = function(val, _values, result) { + Opal.defn(self, '$_reduce_259', function(val, _values, result) { var self = this; - result = self.$new_block_args(val['$[]'](0), nil, nil, val['$[]'](1)); + self.$lexer().$cmdarg_push(1); return result; - }; + }); - def.$_reduce_358 = function(val, _values, result) { + Opal.defn(self, '$_reduce_260', function(val, _values, result) { var self = this; - result = self.$new_block_args(nil, val['$[]'](0), val['$[]'](2), val['$[]'](3)); + self.$lexer().$cmdarg_pop(); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_359 = function(val, _values, result) { + Opal.defn(self, '$_reduce_262', function(val, _values, result) { var self = this; - result = self.$new_block_args(nil, val['$[]'](0), nil, val['$[]'](1)); + result = nil; return result; - }; + }); - def.$_reduce_360 = function(val, _values, result) { + Opal.defn(self, '$_reduce_263', function(val, _values, result) { var self = this; - result = self.$new_block_args(nil, nil, val['$[]'](0), val['$[]'](1)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_361 = function(val, _values, result) { + Opal.defn(self, '$_reduce_264', function(val, _values, result) { var self = this; - result = self.$new_block_args(nil, nil, nil, val['$[]'](0)); + result = self.$new_block_pass(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_362 = function(val, _values, result) { + Opal.defn(self, '$_reduce_265', function(val, _values, result) { var self = this; - self.$push_scope("block"); - result = self.$lexer().$line(); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_363 = function(val, _values, result) { + Opal.defn(self, '$_reduce_266', function(val, _values, result) { var self = this; - result = self.$new_iter(val['$[]'](2), val['$[]'](3)); - self.$pop_scope(); + result = nil; return result; - }; + }); - def.$_reduce_364 = function(val, _values, result) { + Opal.defn(self, '$_reduce_267', function(val, _values, result) { var self = this; - val['$[]'](0)['$<<'](val['$[]'](1)); - result = val['$[]'](0); + result = [val['$[]'](0)]; return result; - }; + }); - def.$_reduce_367 = function(val, _values, result) { + Opal.defn(self, '$_reduce_268', function(val, _values, result) { var self = this; - result = self.$new_call(nil, val['$[]'](0), val['$[]'](1)); + result = [self.$new_splat(val['$[]'](0), val['$[]'](1))]; return result; - }; + }); - def.$_reduce_368 = function(val, _values, result) { + Opal.defn(self, '$_reduce_269', function(val, _values, result) { var self = this; - result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); + result = val['$[]'](0)['$<<'](val['$[]'](2)); return result; - }; + }); - def.$_reduce_369 = function(val, _values, result) { + Opal.defn(self, '$_reduce_270', function(val, _values, result) { var self = this; - result = self.$new_call(val['$[]'](0), ["call", []], val['$[]'](2)); + result = val['$[]'](0)['$<<'](self.$new_splat(val['$[]'](2), val['$[]'](3))); return result; - }; + }); - def.$_reduce_370 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_271', function(val, _values, result) { + var $a, self = this; - result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); + val['$[]'](0)['$<<'](val['$[]'](2)); + result = ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(val['$[]'](0)))); return result; - }; + }); - def.$_reduce_371 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_272', function(val, _values, result) { + var $a, self = this; - result = self.$new_call(val['$[]'](0), val['$[]'](2)); + val['$[]'](0)['$<<'](self.$s("splat", val['$[]'](3))); + result = ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(val['$[]'](0)))); return result; - }; + }); - def.$_reduce_372 = function(val, _values, result) { + Opal.defn(self, '$_reduce_273', function(val, _values, result) { var self = this; - result = self.$new_super(val['$[]'](0), val['$[]'](1)); + result = self.$s("splat", val['$[]'](1)); return result; - }; + }); - def.$_reduce_373 = function(val, _values, result) { + Opal.defn(self, '$_reduce_283', function(val, _values, result) { var self = this; - result = self.$new_super(val['$[]'](0), nil); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_374 = function(val, _values, result) { + Opal.defn(self, '$_reduce_284', function(val, _values, result) { var self = this; - self.$push_scope("block"); - result = self.$lexer().$line(); + result = self.$s("begin", val['$[]'](2)); return result; - }; + }); - def.$_reduce_375 = function(val, _values, result) { + Opal.defn(self, '$_reduce_285', function(val, _values, result) { var self = this; - result = self.$new_iter(val['$[]'](2), val['$[]'](3)); - self.$pop_scope(); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_376 = function(val, _values, result) { + Opal.defn(self, '$_reduce_286', function(val, _values, result) { var self = this; - self.$push_scope("block"); - result = self.$lexer().$line(); + result = self.$new_paren(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_377 = function(val, _values, result) { + Opal.defn(self, '$_reduce_287', function(val, _values, result) { var self = this; - result = self.$new_iter(val['$[]'](2), val['$[]'](3)); - self.$pop_scope(); + result = self.$new_colon2(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_378 = function(val, _values, result) { + Opal.defn(self, '$_reduce_288', function(val, _values, result) { var self = this; - result = self.$lexer().$line(); + result = self.$new_colon3(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_379 = function(val, _values, result) { - var $a, $b, self = this, part = nil; + Opal.defn(self, '$_reduce_289', function(val, _values, result) { + var self = this; - part = self.$s("when", ($a = self).$s.apply($a, ["array"].concat(val['$[]'](2))), val['$[]'](4)); - result = [part]; - if ((($b = val['$[]'](5)) !== nil && (!$b.$$is_boolean || $b == true))) { - ($b = result).$push.apply($b, [].concat(val['$[]'](5)))}; + result = self.$new_call(val['$[]'](0), ["[]", []], val['$[]'](2)); return result; - }; + }); - def.$_reduce_380 = function(val, _values, result) { + Opal.defn(self, '$_reduce_290', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = self.$new_js_call(val['$[]'](0), ["[]", []], val['$[]'](2)); return result; - }; + }); - def.$_reduce_382 = function(val, _values, result) { - var $a, self = this, exc = nil; + Opal.defn(self, '$_reduce_291', function(val, _values, result) { + var self = this; - exc = ((($a = val['$[]'](1)) !== false && $a !== nil) ? $a : self.$s("array")); - if ((($a = val['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { - exc['$<<'](self.$new_assign(val['$[]'](2), val['$[]'](2), self.$s("gvar", "$!".$intern())))}; - result = [self.$s("resbody", exc, val['$[]'](4))]; - if ((($a = val['$[]'](5)) !== nil && (!$a.$$is_boolean || $a == true))) { - result.$push(val['$[]'](5).$first())}; + result = self.$new_array(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_383 = function(val, _values, result) { + Opal.defn(self, '$_reduce_292', function(val, _values, result) { var self = this; - result = nil; + result = self.$new_hash(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_384 = function(val, _values, result) { + Opal.defn(self, '$_reduce_293', function(val, _values, result) { var self = this; - result = self.$s("array", val['$[]'](0)); + result = self.$new_return(val['$[]'](0)); return result; - }; + }); - def.$_reduce_387 = function(val, _values, result) { + Opal.defn(self, '$_reduce_294', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_yield(val['$[]'](2)); return result; - }; + }); - def.$_reduce_388 = function(val, _values, result) { + Opal.defn(self, '$_reduce_295', function(val, _values, result) { var self = this; - result = nil; + result = self.$s("yield"); return result; - }; + }); - def.$_reduce_389 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_296', function(val, _values, result) { + var self = this; - result = (function() {if ((($a = val['$[]'](1)['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$s("nil") - } else { - return val['$[]'](1) - }; return nil; })(); + result = self.$s("yield"); return result; - }; + }); - def.$_reduce_394 = function(val, _values, result) { + Opal.defn(self, '$_reduce_297', function(val, _values, result) { var self = this; - result = self.$new_str(val['$[]'](0)); + result = self.$s("defined", val['$[]'](3)); return result; - }; + }); - def.$_reduce_396 = function(val, _values, result) { + Opal.defn(self, '$_reduce_298', function(val, _values, result) { var self = this; - result = self.$str_append(val['$[]'](0), val['$[]'](1)); + result = self.$new_unary_call(["!", []], val['$[]'](2)); return result; - }; + }); - def.$_reduce_397 = function(val, _values, result) { + Opal.defn(self, '$_reduce_299', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_unary_call(["!", []], self.$new_nil(val['$[]'](0))); return result; - }; + }); - def.$_reduce_398 = function(val, _values, result) { + Opal.defn(self, '$_reduce_300', function(val, _values, result) { var self = this; - result = self.$s("str", self.$value(val['$[]'](0))); + result = self.$new_call(nil, val['$[]'](0), []); + result['$<<'](val['$[]'](1)); return result; - }; + }); - def.$_reduce_399 = function(val, _values, result) { + Opal.defn(self, '$_reduce_302', function(val, _values, result) { var self = this; - result = self.$new_xstr(val['$[]'](0), val['$[]'](1), val['$[]'](2)); + val['$[]'](0)['$<<'](val['$[]'](1)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_400 = function(val, _values, result) { + Opal.defn(self, '$_reduce_303', function(val, _values, result) { var self = this; - result = self.$new_regexp(val['$[]'](1), val['$[]'](2)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_401 = function(val, _values, result) { + Opal.defn(self, '$_reduce_304', function(val, _values, result) { var self = this; - result = self.$s("array"); + result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](3), val['$[]'](4)); return result; - }; + }); - def.$_reduce_402 = function(val, _values, result) { + Opal.defn(self, '$_reduce_305', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](4), val['$[]'](3)); return result; - }; + }); - def.$_reduce_403 = function(val, _values, result) { + Opal.defn(self, '$_reduce_306', function(val, _values, result) { var self = this; - result = self.$s("array"); + self.$lexer().$cond_push(1); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_404 = function(val, _values, result) { - var self = this, part = nil; + Opal.defn(self, '$_reduce_307', function(val, _values, result) { + var self = this; - part = val['$[]'](1); - if (part.$type()['$==']("evstr")) { - part = self.$s("dstr", "", val['$[]'](1))}; - result = val['$[]'](0)['$<<'](part); + self.$lexer().$cond_pop(); return result; - }; + }); - def.$_reduce_405 = function(val, _values, result) { + Opal.defn(self, '$_reduce_308', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = self.$s("while", val['$[]'](2), val['$[]'](5)); return result; - }; + }); - def.$_reduce_406 = function(val, _values, result) { + Opal.defn(self, '$_reduce_309', function(val, _values, result) { var self = this; - result = val['$[]'](0).$concat([val['$[]'](1)]); + self.$lexer().$cond_push(1); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_407 = function(val, _values, result) { + Opal.defn(self, '$_reduce_310', function(val, _values, result) { var self = this; - result = self.$s("array"); + self.$lexer().$cond_pop(); return result; - }; + }); - def.$_reduce_408 = function(val, _values, result) { + Opal.defn(self, '$_reduce_311', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$s("until", val['$[]'](2), val['$[]'](5)); return result; - }; + }); - def.$_reduce_409 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_312', function(val, _values, result) { + var $a, self = this; - result = self.$s("array"); + result = ($a = self).$s.apply($a, ["case", val['$[]'](1)].concat(Opal.to_a(val['$[]'](3)))); return result; - }; + }); - def.$_reduce_410 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_313', function(val, _values, result) { + var $a, self = this; - result = val['$[]'](0)['$<<'](self.$s("str", self.$value(val['$[]'](1)))); + result = ($a = self).$s.apply($a, ["case", nil].concat(Opal.to_a(val['$[]'](2)))); return result; - }; + }); - def.$_reduce_411 = function(val, _values, result) { + Opal.defn(self, '$_reduce_314', function(val, _values, result) { var self = this; - result = nil; + result = self.$s("case", nil, val['$[]'](3)); return result; - }; + }); - def.$_reduce_412 = function(val, _values, result) { + Opal.defn(self, '$_reduce_315', function(val, _values, result) { var self = this; - result = self.$str_append(val['$[]'](0), val['$[]'](1)); + self.$lexer().$cond_push(1); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_413 = function(val, _values, result) { + Opal.defn(self, '$_reduce_316', function(val, _values, result) { var self = this; - result = nil; + self.$lexer().$cond_pop(); return result; - }; + }); - def.$_reduce_414 = function(val, _values, result) { + Opal.defn(self, '$_reduce_317', function(val, _values, result) { var self = this; - result = self.$str_append(val['$[]'](0), val['$[]'](1)); + result = self.$s("for", val['$[]'](4), val['$[]'](1), val['$[]'](7)); return result; - }; + }); - def.$_reduce_415 = function(val, _values, result) { + Opal.defn(self, '$_reduce_318', function(val, _values, result) { var self = this; - result = self.$new_str_content(val['$[]'](0)); return result; - }; + }); - def.$_reduce_416 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_319', function(val, _values, result) { + var self = this; - result = self.$lexer().$strterm(); - (($a = [nil]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); + result = self.$new_class(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](4), val['$[]'](5)); return result; - }; + }); - def.$_reduce_417 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_320', function(val, _values, result) { + var self = this; - (($a = [val['$[]'](1)]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); - result = self.$new_evstr(val['$[]'](2)); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_418 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_321', function(val, _values, result) { + var self = this; - self.$lexer().$cond_push(0); - self.$lexer().$cmdarg_push(0); - result = self.$lexer().$strterm(); - (($a = [nil]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); - (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); return result; - }; + }); - def.$_reduce_419 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_322', function(val, _values, result) { + var self = this; - (($a = [val['$[]'](1)]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); - self.$lexer().$cond_lexpop(); - self.$lexer().$cmdarg_lexpop(); - result = self.$new_evstr(val['$[]'](2)); + result = self.$new_sclass(val['$[]'](0), val['$[]'](3), val['$[]'](6), val['$[]'](7)); return result; - }; + }); - def.$_reduce_420 = function(val, _values, result) { + Opal.defn(self, '$_reduce_323', function(val, _values, result) { var self = this; - result = self.$new_gvar(val['$[]'](0)); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_421 = function(val, _values, result) { + Opal.defn(self, '$_reduce_324', function(val, _values, result) { var self = this; - result = self.$new_ivar(val['$[]'](0)); return result; - }; + }); - def.$_reduce_422 = function(val, _values, result) { + Opal.defn(self, '$_reduce_325', function(val, _values, result) { var self = this; - result = self.$new_cvar(val['$[]'](0)); + result = self.$new_module(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); return result; - }; + }); - def.$_reduce_424 = function(val, _values, result) { + Opal.defn(self, '$_reduce_326', function(val, _values, result) { var $a, $b, self = this; - result = self.$new_sym(val['$[]'](1)); - (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + self.$push_scope(); + (($a = ["expr_endfn"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); return result; - }; + }); - def.$_reduce_425 = function(val, _values, result) { + Opal.defn(self, '$_reduce_327', function(val, _values, result) { var self = this; - result = self.$new_sym(val['$[]'](0)); + result = self.$new_def(val['$[]'](0), nil, val['$[]'](1), val['$[]'](3), val['$[]'](4), val['$[]'](5)); + self.$pop_scope(); return result; - }; + }); - def.$_reduce_430 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_328', function(val, _values, result) { + var $a, $b, self = this; - result = self.$new_dsym(val['$[]'](1)); + (($a = ["expr_fname"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); return result; - }; + }); - def.$_reduce_431 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_329', function(val, _values, result) { + var $a, $b, self = this; - result = self.$new_int(val['$[]'](0)); + self.$push_scope(); + (($a = ["expr_endfn"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); return result; - }; + }); - def.$_reduce_432 = function(val, _values, result) { + Opal.defn(self, '$_reduce_330', function(val, _values, result) { var self = this; - result = self.$new_float(val['$[]'](0)); + result = self.$new_def(val['$[]'](0), val['$[]'](1), val['$[]'](4), val['$[]'](6), val['$[]'](7), val['$[]'](8)); + self.$pop_scope(); return result; - }; + }); - def.$_reduce_433 = function(val, _values, result) { + Opal.defn(self, '$_reduce_331', function(val, _values, result) { var self = this; - result = self.$negate_num(self.$new_int(val['$[]'](1))); + result = self.$new_break(val['$[]'](0)); return result; - }; + }); - def.$_reduce_434 = function(val, _values, result) { + Opal.defn(self, '$_reduce_332', function(val, _values, result) { var self = this; - result = self.$negate_num(self.$new_float(val['$[]'](1))); + result = self.$s("next"); return result; - }; + }); - def.$_reduce_435 = function(val, _values, result) { + Opal.defn(self, '$_reduce_333', function(val, _values, result) { var self = this; - result = self.$new_int(val['$[]'](1)); + result = self.$s("redo"); return result; - }; + }); - def.$_reduce_436 = function(val, _values, result) { + Opal.defn(self, '$_reduce_343', function(val, _values, result) { var self = this; - result = self.$new_float(val['$[]'](1)); + result = self.$new_call(nil, ["lambda", []], []); + result['$<<'](self.$new_iter(val['$[]'](0), val['$[]'](1))); return result; - }; + }); - def.$_reduce_437 = function(val, _values, result) { + Opal.defn(self, '$_reduce_344', function(val, _values, result) { var self = this; - result = self.$new_ident(val['$[]'](0)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_438 = function(val, _values, result) { + Opal.defn(self, '$_reduce_345', function(val, _values, result) { var self = this; - result = self.$new_ivar(val['$[]'](0)); + result = nil; return result; - }; + }); - def.$_reduce_439 = function(val, _values, result) { + Opal.defn(self, '$_reduce_348', function(val, _values, result) { var self = this; - result = self.$new_gvar(val['$[]'](0)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_440 = function(val, _values, result) { + Opal.defn(self, '$_reduce_349', function(val, _values, result) { var self = this; - result = self.$new_const(val['$[]'](0)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_441 = function(val, _values, result) { + Opal.defn(self, '$_reduce_350', function(val, _values, result) { var self = this; - result = self.$new_cvar(val['$[]'](0)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_442 = function(val, _values, result) { + Opal.defn(self, '$_reduce_351', function(val, _values, result) { var self = this; - result = self.$new_nil(val['$[]'](0)); + result = self.$new_if(val['$[]'](0), val['$[]'](1), val['$[]'](3), val['$[]'](4)); return result; - }; + }); - def.$_reduce_443 = function(val, _values, result) { + Opal.defn(self, '$_reduce_353', function(val, _values, result) { var self = this; - result = self.$new_self(val['$[]'](0)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_444 = function(val, _values, result) { + Opal.defn(self, '$_reduce_354', function(val, _values, result) { var self = this; - result = self.$new_true(val['$[]'](0)); + result = self.$s("block", val['$[]'](0)); return result; - }; + }); - def.$_reduce_445 = function(val, _values, result) { + Opal.defn(self, '$_reduce_355', function(val, _values, result) { var self = this; - result = self.$new_false(val['$[]'](0)); + val['$[]'](0)['$<<'](val['$[]'](2)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_446 = function(val, _values, result) { + Opal.defn(self, '$_reduce_356', function(val, _values, result) { var self = this; - result = self.$new___FILE__(val['$[]'](0)); + result = self.$new_assign(self.$new_assignable(self.$new_ident(val['$[]'](0))), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_447 = function(val, _values, result) { + Opal.defn(self, '$_reduce_358', function(val, _values, result) { var self = this; - result = self.$new___LINE__(val['$[]'](0)); + result = nil; return result; - }; + }); - def.$_reduce_448 = function(val, _values, result) { + Opal.defn(self, '$_reduce_359', function(val, _values, result) { var self = this; - result = self.$new_var_ref(val['$[]'](0)); + result = nil; return result; - }; + }); - def.$_reduce_449 = function(val, _values, result) { + Opal.defn(self, '$_reduce_360', function(val, _values, result) { var self = this; - result = self.$new_assignable(val['$[]'](0)); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_450 = function(val, _values, result) { + Opal.defn(self, '$_reduce_361', function(val, _values, result) { var self = this; - result = self.$s("nth_ref", self.$value(val['$[]'](0))); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_452 = function(val, _values, result) { + Opal.defn(self, '$_reduce_362', function(val, _values, result) { var self = this; - result = nil; + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_453 = function(val, _values, result) { + Opal.defn(self, '$_reduce_363', function(val, _values, result) { var self = this; - result = val['$[]'](1); + nil; return result; - }; + }); - def.$_reduce_454 = function(val, _values, result) { + Opal.defn(self, '$_reduce_364', function(val, _values, result) { var self = this; - result = nil; + result = self.$new_block_args(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); return result; - }; + }); - def.$_reduce_455 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_365', function(val, _values, result) { + var self = this; - result = val['$[]'](1); - (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = self.$new_block_args(val['$[]'](0), val['$[]'](2), nil, val['$[]'](3)); return result; - }; + }); - def.$_reduce_456 = function(val, _values, result) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_366', function(val, _values, result) { + var self = this; - result = val['$[]'](0); - (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + result = self.$new_block_args(val['$[]'](0), nil, val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_459 = function(val, _values, result) { + Opal.defn(self, '$_reduce_367', function(val, _values, result) { var self = this; - result = self.$new_kwrestarg(val['$[]'](1)); + result = self.$new_block_args(val['$[]'](0), nil, nil, nil); return result; - }; + }); - def.$_reduce_460 = function(val, _values, result) { + Opal.defn(self, '$_reduce_368', function(val, _values, result) { var self = this; - result = self.$new_kwrestarg(); + result = self.$new_block_args(val['$[]'](0), nil, nil, val['$[]'](1)); return result; - }; + }); - def.$_reduce_461 = function(val, _values, result) { + Opal.defn(self, '$_reduce_369', function(val, _values, result) { var self = this; - result = self.$new_sym(val['$[]'](0)); + result = self.$new_block_args(nil, val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_462 = function(val, _values, result) { + Opal.defn(self, '$_reduce_370', function(val, _values, result) { var self = this; - result = self.$new_kwoptarg(val['$[]'](0), val['$[]'](1)); + result = self.$new_block_args(nil, val['$[]'](0), nil, val['$[]'](1)); return result; - }; + }); - def.$_reduce_463 = function(val, _values, result) { + Opal.defn(self, '$_reduce_371', function(val, _values, result) { var self = this; - result = self.$new_kwarg(val['$[]'](0)); + result = self.$new_block_args(nil, nil, val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_464 = function(val, _values, result) { + Opal.defn(self, '$_reduce_372', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = self.$new_block_args(nil, nil, nil, val['$[]'](0)); return result; - }; + }); - def.$_reduce_465 = function(val, _values, result) { + Opal.defn(self, '$_reduce_373', function(val, _values, result) { var self = this; - result = val['$[]'](0); - result['$<<'](val['$[]'](2)); + self.$push_scope("block"); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_466 = function(val, _values, result) { + Opal.defn(self, '$_reduce_374', function(val, _values, result) { var self = this; - result = self.$new_args_tail(val['$[]'](0), val['$[]'](2), val['$[]'](3)); + result = self.$new_iter(val['$[]'](2), val['$[]'](3)); + self.$pop_scope(); return result; - }; + }); - def.$_reduce_467 = function(val, _values, result) { + Opal.defn(self, '$_reduce_375', function(val, _values, result) { var self = this; - result = self.$new_args_tail(val['$[]'](0), nil, val['$[]'](1)); + val['$[]'](0)['$<<'](val['$[]'](1)); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_468 = function(val, _values, result) { + Opal.defn(self, '$_reduce_379', function(val, _values, result) { var self = this; - result = self.$new_args_tail(nil, val['$[]'](0), val['$[]'](1)); + result = self.$new_call(nil, val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_469 = function(val, _values, result) { + Opal.defn(self, '$_reduce_380', function(val, _values, result) { var self = this; - result = self.$new_args_tail(nil, nil, val['$[]'](0)); + result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_470 = function(val, _values, result) { + Opal.defn(self, '$_reduce_381', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = self.$new_js_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_471 = function(val, _values, result) { + Opal.defn(self, '$_reduce_382', function(val, _values, result) { var self = this; - result = self.$new_args_tail(nil, nil, nil); + result = self.$new_call(val['$[]'](0), ["call", []], val['$[]'](2)); return result; - }; + }); - def.$_reduce_472 = function(val, _values, result) { + Opal.defn(self, '$_reduce_383', function(val, _values, result) { var self = this; - result = self.$new_args(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + result = self.$new_call(val['$[]'](0), val['$[]'](2), val['$[]'](3)); return result; - }; + }); - def.$_reduce_473 = function(val, _values, result) { + Opal.defn(self, '$_reduce_384', function(val, _values, result) { var self = this; - result = self.$new_args(val['$[]'](0), val['$[]'](2), nil, val['$[]'](3)); + result = self.$new_call(val['$[]'](0), val['$[]'](2)); return result; - }; + }); - def.$_reduce_474 = function(val, _values, result) { + Opal.defn(self, '$_reduce_385', function(val, _values, result) { var self = this; - result = self.$new_args(val['$[]'](0), nil, val['$[]'](2), val['$[]'](3)); + result = self.$new_super(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_475 = function(val, _values, result) { + Opal.defn(self, '$_reduce_386', function(val, _values, result) { var self = this; - result = self.$new_args(val['$[]'](0), nil, nil, val['$[]'](1)); + result = self.$new_super(val['$[]'](0), nil); return result; - }; + }); - def.$_reduce_476 = function(val, _values, result) { + Opal.defn(self, '$_reduce_387', function(val, _values, result) { var self = this; - result = self.$new_args(nil, val['$[]'](0), val['$[]'](2), val['$[]'](3)); + self.$push_scope("block"); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_477 = function(val, _values, result) { + Opal.defn(self, '$_reduce_388', function(val, _values, result) { var self = this; - result = self.$new_args(nil, val['$[]'](0), nil, val['$[]'](1)); + result = self.$new_iter(val['$[]'](2), val['$[]'](3)); + self.$pop_scope(); return result; - }; + }); - def.$_reduce_478 = function(val, _values, result) { + Opal.defn(self, '$_reduce_389', function(val, _values, result) { var self = this; - result = self.$new_args(nil, nil, val['$[]'](0), val['$[]'](1)); + self.$push_scope("block"); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_479 = function(val, _values, result) { + Opal.defn(self, '$_reduce_390', function(val, _values, result) { var self = this; - result = self.$new_args(nil, nil, nil, val['$[]'](0)); + result = self.$new_iter(val['$[]'](2), val['$[]'](3)); + self.$pop_scope(); return result; - }; + }); - def.$_reduce_480 = function(val, _values, result) { + Opal.defn(self, '$_reduce_391', function(val, _values, result) { var self = this; - result = self.$new_args(nil, nil, nil, nil); + result = self.$lexer().$line(); return result; - }; + }); - def.$_reduce_482 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_392', function(val, _values, result) { + var $a, $b, self = this, part = nil; - result = self.$value(val['$[]'](0)).$to_sym(); - self.$scope().$add_local(result); + part = self.$s("when", ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(val['$[]'](2)))), val['$[]'](4)); + result = [part]; + if ((($b = val['$[]'](5)) !== nil && (!$b.$$is_boolean || $b == true))) { + ($b = result).$push.apply($b, Opal.to_a(val['$[]'](5)))}; return result; - }; + }); - def.$_reduce_483 = function(val, _values, result) { + Opal.defn(self, '$_reduce_393', function(val, _values, result) { var self = this; - self.$raise("formal argument cannot be a constant"); + result = [val['$[]'](0)]; return result; - }; + }); - def.$_reduce_484 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_395', function(val, _values, result) { + var $a, self = this, exc = nil; - self.$raise("formal argument cannot be an instance variable"); + exc = ((($a = val['$[]'](1)) !== false && $a !== nil) ? $a : self.$s("array")); + if ((($a = val['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { + exc['$<<'](self.$new_assign(val['$[]'](2), val['$[]'](2), self.$s("gvar", "$!".$intern())))}; + result = [self.$s("resbody", exc, val['$[]'](4))]; + if ((($a = val['$[]'](5)) !== nil && (!$a.$$is_boolean || $a == true))) { + result.$concat(val['$[]'](5))}; return result; - }; + }); - def.$_reduce_485 = function(val, _values, result) { + Opal.defn(self, '$_reduce_396', function(val, _values, result) { var self = this; - self.$raise("formal argument cannot be a class variable"); + result = nil; return result; - }; + }); - def.$_reduce_486 = function(val, _values, result) { + Opal.defn(self, '$_reduce_397', function(val, _values, result) { var self = this; - self.$raise("formal argument cannot be a global variable"); + result = self.$s("array", val['$[]'](0)); return result; - }; + }); - def.$_reduce_487 = function(val, _values, result) { + Opal.defn(self, '$_reduce_400', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_488 = function(val, _values, result) { + Opal.defn(self, '$_reduce_401', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = nil; return result; - }; + }); - def.$_reduce_491 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_402', function(val, _values, result) { + var $a, self = this; - result = self.$s("lasgn", val['$[]'](0)); + result = (function() {if ((($a = val['$[]'](1)['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$s("nil") + } else { + return val['$[]'](1) + }; return nil; })(); return result; - }; + }); - def.$_reduce_493 = function(val, _values, result) { + Opal.defn(self, '$_reduce_407', function(val, _values, result) { var self = this; - result = self.$s("array", val['$[]'](0)); + result = self.$new_str(val['$[]'](0)); return result; - }; + }); - def.$_reduce_494 = function(val, _values, result) { + Opal.defn(self, '$_reduce_409', function(val, _values, result) { var self = this; - val['$[]'](0)['$<<'](val['$[]'](2)); - result = val['$[]'](0); + result = self.$str_append(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_500 = function(val, _values, result) { + Opal.defn(self, '$_reduce_410', function(val, _values, result) { var self = this; - result = [val['$[]'](0)]; + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_501 = function(val, _values, result) { + Opal.defn(self, '$_reduce_411', function(val, _values, result) { var self = this; - val['$[]'](0)['$<<'](val['$[]'](2)); - result = val['$[]'](0); + result = self.$s("str", self.$value(val['$[]'](0))); return result; - }; + }); - def.$_reduce_502 = function(val, _values, result) { + Opal.defn(self, '$_reduce_412', function(val, _values, result) { var self = this; - result = self.$new_assign(self.$new_assignable(self.$new_ident(val['$[]'](0))), val['$[]'](1), val['$[]'](2)); + result = self.$new_xstr(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_503 = function(val, _values, result) { + Opal.defn(self, '$_reduce_413', function(val, _values, result) { var self = this; - result = self.$s("block", val['$[]'](0)); + result = self.$new_regexp(val['$[]'](1), val['$[]'](2)); return result; - }; + }); - def.$_reduce_504 = function(val, _values, result) { + Opal.defn(self, '$_reduce_414', function(val, _values, result) { var self = this; - result = val['$[]'](0); - val['$[]'](0)['$<<'](val['$[]'](2)); + result = self.$s("array"); return result; - }; + }); - def.$_reduce_507 = function(val, _values, result) { + Opal.defn(self, '$_reduce_415', function(val, _values, result) { var self = this; - result = (("*") + (self.$value(val['$[]'](1)))).$to_sym(); + result = val['$[]'](1); return result; - }; + }); - def.$_reduce_508 = function(val, _values, result) { + Opal.defn(self, '$_reduce_416', function(val, _values, result) { var self = this; - result = "*"; + result = self.$s("array"); return result; - }; + }); - def.$_reduce_511 = function(val, _values, result) { - var self = this; + Opal.defn(self, '$_reduce_417', function(val, _values, result) { + var self = this, part = nil; - result = (("&") + (self.$value(val['$[]'](1)))).$to_sym(); + part = val['$[]'](1); + if (part.$type()['$==']("evstr")) { + part = self.$s("dstr", "", val['$[]'](1))}; + result = val['$[]'](0)['$<<'](part); return result; - }; + }); - def.$_reduce_512 = function(val, _values, result) { + Opal.defn(self, '$_reduce_418', function(val, _values, result) { var self = this; - result = val['$[]'](1); + result = val['$[]'](0); return result; - }; + }); - def.$_reduce_513 = function(val, _values, result) { + Opal.defn(self, '$_reduce_419', function(val, _values, result) { var self = this; - result = nil; + result = val['$[]'](0).$concat([val['$[]'](1)]); return result; - }; + }); - def.$_reduce_514 = function(val, _values, result) { + Opal.defn(self, '$_reduce_420', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = self.$s("array"); return result; - }; + }); - def.$_reduce_515 = function(val, _values, result) { + Opal.defn(self, '$_reduce_421', function(val, _values, result) { var self = this; result = val['$[]'](1); return result; - }; + }); - def.$_reduce_516 = function(val, _values, result) { + Opal.defn(self, '$_reduce_422', function(val, _values, result) { var self = this; - result = []; + result = self.$s("array"); return result; - }; + }); - def.$_reduce_517 = function(val, _values, result) { + Opal.defn(self, '$_reduce_423', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = val['$[]'](0)['$<<'](self.$s("str", self.$value(val['$[]'](1)))); return result; - }; + }); - def.$_reduce_518 = function(val, _values, result) { + Opal.defn(self, '$_reduce_424', function(val, _values, result) { var self = this; - result = val['$[]'](0); + result = nil; return result; - }; + }); - def.$_reduce_519 = function(val, _values, result) { - var $a, self = this; + Opal.defn(self, '$_reduce_425', function(val, _values, result) { + var self = this; - result = ($a = val['$[]'](0)).$push.apply($a, [].concat(val['$[]'](2))); + result = self.$str_append(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_520 = function(val, _values, result) { + Opal.defn(self, '$_reduce_426', function(val, _values, result) { var self = this; - result = [val['$[]'](0), val['$[]'](2)]; + result = nil; return result; - }; + }); - def.$_reduce_521 = function(val, _values, result) { + Opal.defn(self, '$_reduce_427', function(val, _values, result) { var self = this; - result = [self.$new_sym(val['$[]'](0)), val['$[]'](1)]; + result = self.$str_append(val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$_reduce_545 = function(val, _values, result) { + Opal.defn(self, '$_reduce_428', function(val, _values, result) { var self = this; - result = nil; + result = self.$new_str_content(val['$[]'](0)); return result; - }; - - return (def.$_reduce_none = function(val, _values, result) { - var self = this; + }); - return val['$[]'](0); - }, nil) && '_reduce_none'; - })(self, (($scope.get('Racc')).$$scope.get('Parser'))) - })(self); -}; + Opal.defn(self, '$_reduce_429', function(val, _values, result) { + var $a, $b, self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser/parser_scope"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + result = self.$lexer().$strterm(); + (($a = [nil]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); + return result; + }); - Opal.add_stubs(['$attr_reader', '$attr_accessor', '$==', '$<<', '$include?', '$has_local?']); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$_reduce_430', function(val, _values, result) { + var $a, $b, self = this; - var def = self.$$proto, $scope = self.$$scope; + (($a = [val['$[]'](1)]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); + result = self.$new_evstr(val['$[]'](2)); + return result; + }); - (function($base, $super) { - function $ParserScope(){}; - var self = $ParserScope = $klass($base, $super, 'ParserScope', $ParserScope); + Opal.defn(self, '$_reduce_431', function(val, _values, result) { + var $a, $b, self = this; - var def = self.$$proto, $scope = self.$$scope; + self.$lexer().$cond_push(0); + self.$lexer().$cmdarg_push(0); + result = self.$lexer().$strterm(); + (($a = [nil]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); + (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + return result; + }); - def.locals = def.parent = def.block = nil; - self.$attr_reader("locals"); + Opal.defn(self, '$_reduce_432', function(val, _values, result) { + var $a, $b, self = this; - self.$attr_accessor("parent"); + (($a = [val['$[]'](1)]), $b = self.$lexer(), $b['$strterm='].apply($b, $a), $a[$a.length-1]); + self.$lexer().$cond_lexpop(); + self.$lexer().$cmdarg_lexpop(); + result = self.$new_evstr(val['$[]'](2)); + return result; + }); - def.$initialize = function(type) { + Opal.defn(self, '$_reduce_433', function(val, _values, result) { var self = this; - self.block = type['$==']("block"); - self.locals = []; - return self.parent = nil; - }; + result = self.$new_gvar(val['$[]'](0)); + return result; + }); - def.$add_local = function(local) { + Opal.defn(self, '$_reduce_434', function(val, _values, result) { var self = this; - return self.locals['$<<'](local); - }; + result = self.$new_ivar(val['$[]'](0)); + return result; + }); - return (def['$has_local?'] = function(local) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_435', function(val, _values, result) { + var self = this; - if ((($a = self.locals['$include?'](local)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = ($b = self.parent, $b !== false && $b !== nil ?self.block : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.parent['$has_local?'](local)}; - return false; - }, nil) && 'has_local?'; - })(self, null) - })(self) -}; + result = self.$new_cvar(val['$[]'](0)); + return result; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/parser"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_times(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + Opal.defn(self, '$_reduce_437', function(val, _values, result) { + var $a, $b, self = this; - Opal.add_stubs(['$require', '$attr_reader', '$new', '$parser=', '$parse_to_sexp', '$join', '$message', '$line', '$lexer', '$column', '$[]', '$split', '$raise', '$class', '$push_scope', '$do_parse', '$pop_scope', '$next_token', '$last', '$parent=', '$<<', '$pop', '$inspect', '$value', '$token_to_str', '$s', '$source=', '$s0', '$source', '$s1', '$file', '$to_sym', '$nil?', '$==', '$length', '$size', '$type', '$each', '$!', '$add_local', '$scope', '$to_s', '$empty?', '$is_a?', '$new_splat', '$new_call', '$[]=', '$array', '$-@', '$===', '$new_gettable', '$type=', '$has_local?']); - self.$require("opal/parser/sexp"); - self.$require("opal/parser/lexer"); - self.$require("opal/parser/grammar"); - self.$require("opal/parser/parser_scope"); - return (function($base) { - var self = $module($base, 'Opal'); + result = self.$new_sym(val['$[]'](1)); + (($a = ["expr_end"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + return result; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$_reduce_438', function(val, _values, result) { + var self = this; - (function($base, $super) { - function $Parser(){}; - var self = $Parser = $klass($base, $super, 'Parser', $Parser); + result = self.$new_sym(val['$[]'](0)); + return result; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$_reduce_443', function(val, _values, result) { + var self = this; - def.lexer = def.file = def.scopes = nil; - self.$attr_reader("lexer", "file", "scope"); + result = self.$new_dsym(val['$[]'](1)); + return result; + }); - def.$parse = function(source, file) { - var $a, $b, self = this, error = nil, message = nil; + Opal.defn(self, '$_reduce_444', function(val, _values, result) { + var self = this; - if (file == null) { - file = "(string)" - } - try { - self.file = file; - self.scopes = []; - self.lexer = $scope.get('Lexer').$new(source, file); - (($a = [self]), $b = self.lexer, $b['$parser='].apply($b, $a), $a[$a.length-1]); - return self.$parse_to_sexp(); - } catch ($err) {if (true) {error = $err; - message = [nil, error.$message(), "Source: " + (self.file) + ":" + (self.$lexer().$line()) + ":" + (self.$lexer().$column()), source.$split("\n")['$[]']($rb_minus(self.$lexer().$line(), 1)), $rb_plus($rb_times("~", ($rb_minus(self.$lexer().$column(), 1))), "^")].$join("\n"); - return self.$raise(error.$class(), message); - }else { throw $err; } - }; - }; + result = self.$new_int(val['$[]'](0)); + return result; + }); - def.$parse_to_sexp = function() { - var self = this, result = nil; + Opal.defn(self, '$_reduce_445', function(val, _values, result) { + var self = this; - self.$push_scope(); - result = self.$do_parse(); - self.$pop_scope(); + result = self.$new_float(val['$[]'](0)); return result; - }; + }); - def.$next_token = function() { + Opal.defn(self, '$_reduce_446', function(val, _values, result) { var self = this; - return self.lexer.$next_token(); - }; + result = self.$negate_num(self.$new_int(val['$[]'](1))); + return result; + }); - def.$s = function(parts) { + Opal.defn(self, '$_reduce_447', function(val, _values, result) { var self = this; - parts = $slice.call(arguments, 0); - return $scope.get('Sexp').$new(parts); - }; + result = self.$negate_num(self.$new_float(val['$[]'](1))); + return result; + }); - def.$push_scope = function(type) { - var $a, $b, self = this, top = nil, scope = nil; + Opal.defn(self, '$_reduce_448', function(val, _values, result) { + var self = this; - if (type == null) { - type = nil - } - top = self.scopes.$last(); - scope = $scope.get('ParserScope').$new(type); - (($a = [top]), $b = scope, $b['$parent='].apply($b, $a), $a[$a.length-1]); - self.scopes['$<<'](scope); - return self.scope = scope; - }; + result = self.$new_int(val['$[]'](1)); + return result; + }); - def.$pop_scope = function() { + Opal.defn(self, '$_reduce_449', function(val, _values, result) { var self = this; - self.scopes.$pop(); - return self.scope = self.scopes.$last(); - }; + result = self.$new_float(val['$[]'](1)); + return result; + }); - def.$on_error = function(t, val, vstack) { - var $a, self = this; + Opal.defn(self, '$_reduce_450', function(val, _values, result) { + var self = this; - return self.$raise("parse error on value " + (self.$value(val).$inspect()) + " (" + (((($a = self.$token_to_str(t)) !== false && $a !== nil) ? $a : "?")) + ") :" + (self.file) + ":" + (self.$lexer().$line())); - }; + result = self.$new_ident(val['$[]'](0)); + return result; + }); - def.$value = function(tok) { + Opal.defn(self, '$_reduce_451', function(val, _values, result) { var self = this; - return tok['$[]'](0); - }; + result = self.$new_ivar(val['$[]'](0)); + return result; + }); - def.$source = function(tok) { + Opal.defn(self, '$_reduce_452', function(val, _values, result) { var self = this; - if (tok !== false && tok !== nil) { - return tok['$[]'](1) - } else { - return nil - }; - }; + result = self.$new_gvar(val['$[]'](0)); + return result; + }); - def.$s0 = function(type, source) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_453', function(val, _values, result) { + var self = this; - sexp = self.$s(type); - (($a = [source]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_const(val['$[]'](0)); + return result; + }); - def.$s1 = function(type, first, source) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_454', function(val, _values, result) { + var self = this; - sexp = self.$s(type, first); - (($a = [source]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_cvar(val['$[]'](0)); + return result; + }); - def.$new_nil = function(tok) { + Opal.defn(self, '$_reduce_455', function(val, _values, result) { var self = this; - return self.$s0("nil", self.$source(tok)); - }; + result = self.$new_nil(val['$[]'](0)); + return result; + }); - def.$new_self = function(tok) { + Opal.defn(self, '$_reduce_456', function(val, _values, result) { var self = this; - return self.$s0("self", self.$source(tok)); - }; + result = self.$new_self(val['$[]'](0)); + return result; + }); - def.$new_true = function(tok) { + Opal.defn(self, '$_reduce_457', function(val, _values, result) { var self = this; - return self.$s0("true", self.$source(tok)); - }; + result = self.$new_true(val['$[]'](0)); + return result; + }); - def.$new_false = function(tok) { + Opal.defn(self, '$_reduce_458', function(val, _values, result) { var self = this; - return self.$s0("false", self.$source(tok)); - }; + result = self.$new_false(val['$[]'](0)); + return result; + }); - def.$new___FILE__ = function(tok) { + Opal.defn(self, '$_reduce_459', function(val, _values, result) { var self = this; - return self.$s1("str", self.$file(), self.$source(tok)); - }; + result = self.$new___FILE__(val['$[]'](0)); + return result; + }); - def.$new___LINE__ = function(tok) { + Opal.defn(self, '$_reduce_460', function(val, _values, result) { var self = this; - return self.$s1("int", self.$lexer().$line(), self.$source(tok)); - }; + result = self.$new___LINE__(val['$[]'](0)); + return result; + }); - def.$new_ident = function(tok) { + Opal.defn(self, '$_reduce_461', function(val, _values, result) { var self = this; - return self.$s1("identifier", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = self.$new_var_ref(val['$[]'](0)); + return result; + }); - def.$new_int = function(tok) { + Opal.defn(self, '$_reduce_462', function(val, _values, result) { var self = this; - return self.$s1("int", self.$value(tok), self.$source(tok)); - }; + result = self.$new_assignable(val['$[]'](0)); + return result; + }); - def.$new_float = function(tok) { + Opal.defn(self, '$_reduce_463', function(val, _values, result) { var self = this; - return self.$s1("float", self.$value(tok), self.$source(tok)); - }; + result = self.$s("nth_ref", self.$value(val['$[]'](0))); + return result; + }); - def.$new_ivar = function(tok) { + Opal.defn(self, '$_reduce_465', function(val, _values, result) { var self = this; - return self.$s1("ivar", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = nil; + return result; + }); - def.$new_gvar = function(tok) { + Opal.defn(self, '$_reduce_466', function(val, _values, result) { var self = this; - return self.$s1("gvar", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = val['$[]'](1); + return result; + }); - def.$new_cvar = function(tok) { + Opal.defn(self, '$_reduce_467', function(val, _values, result) { var self = this; - return self.$s1("cvar", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = nil; + return result; + }); + + Opal.defn(self, '$_reduce_468', function(val, _values, result) { + var $a, $b, self = this; + + result = val['$[]'](1); + (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + return result; + }); + + Opal.defn(self, '$_reduce_469', function(val, _values, result) { + var $a, $b, self = this; + + result = val['$[]'](0); + (($a = ["expr_beg"]), $b = self.$lexer(), $b['$lex_state='].apply($b, $a), $a[$a.length-1]); + return result; + }); - def.$new_const = function(tok) { + Opal.defn(self, '$_reduce_472', function(val, _values, result) { var self = this; - return self.$s1("const", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = self.$new_kwrestarg(val['$[]'](1)); + return result; + }); - def.$new_colon2 = function(lhs, tok, name) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_473', function(val, _values, result) { + var self = this; - sexp = self.$s("colon2", lhs, self.$value(name).$to_sym()); - (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_kwrestarg(); + return result; + }); - def.$new_colon3 = function(tok, name) { + Opal.defn(self, '$_reduce_474', function(val, _values, result) { var self = this; - return self.$s1("colon3", self.$value(name).$to_sym(), self.$source(name)); - }; + result = self.$new_sym(val['$[]'](0)); + return result; + }); - def.$new_sym = function(tok) { + Opal.defn(self, '$_reduce_475', function(val, _values, result) { var self = this; - return self.$s1("sym", self.$value(tok).$to_sym(), self.$source(tok)); - }; + result = self.$new_kwoptarg(val['$[]'](0), val['$[]'](1)); + return result; + }); - def.$new_alias = function(kw, new$, old) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_476', function(val, _values, result) { + var self = this; - sexp = self.$s("alias", new$, old); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_kwarg(val['$[]'](0)); + return result; + }); - def.$new_break = function(kw, args) { - var $a, self = this, sexp = nil; + Opal.defn(self, '$_reduce_477', function(val, _values, result) { + var self = this; - if (args == null) { - args = nil - } - if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - sexp = self.$s("break") - } else if (args.$length()['$=='](1)) { - sexp = self.$s("break", args['$[]'](0)) - } else { - sexp = self.$s("break", ($a = self).$s.apply($a, ["array"].concat(args))) - }; - return sexp; - }; + result = [val['$[]'](0)]; + return result; + }); - def.$new_return = function(kw, args) { - var $a, self = this, sexp = nil; + Opal.defn(self, '$_reduce_478', function(val, _values, result) { + var self = this; - if (args == null) { - args = nil - } - if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - sexp = self.$s("return") - } else if (args.$length()['$=='](1)) { - sexp = self.$s("return", args['$[]'](0)) - } else { - sexp = self.$s("return", ($a = self).$s.apply($a, ["array"].concat(args))) - }; - return sexp; - }; + result = val['$[]'](0); + result['$<<'](val['$[]'](2)); + return result; + }); - def.$new_next = function(kw, args) { - var $a, self = this, sexp = nil; + Opal.defn(self, '$_reduce_479', function(val, _values, result) { + var self = this; - if (args == null) { - args = [] - } - if (args.$length()['$=='](1)) { - sexp = self.$s("next", args['$[]'](0)) - } else { - sexp = self.$s("next", ($a = self).$s.apply($a, ["array"].concat(args))) - }; - return sexp; - }; + result = self.$new_args_tail(val['$[]'](0), val['$[]'](2), val['$[]'](3)); + return result; + }); - def.$new_block = function(stmt) { - var self = this, sexp = nil; + Opal.defn(self, '$_reduce_480', function(val, _values, result) { + var self = this; - if (stmt == null) { - stmt = nil - } - sexp = self.$s("block"); - if (stmt !== false && stmt !== nil) { - sexp['$<<'](stmt)}; - return sexp; - }; + result = self.$new_args_tail(val['$[]'](0), nil, val['$[]'](1)); + return result; + }); - def.$new_compstmt = function(block) { - var $a, $b, $c, self = this, comp = nil, result = nil; + Opal.defn(self, '$_reduce_481', function(val, _values, result) { + var self = this; - comp = (function() {if (block.$size()['$=='](1)) { - return nil - } else if (block.$size()['$=='](2)) { - return block['$[]'](1) - } else { - return block - }; return nil; })(); - if ((($a = ($b = (($c = comp !== false && comp !== nil) ? comp.$type()['$==']("begin") : $c), $b !== false && $b !== nil ?comp.$size()['$=='](2) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - result = comp['$[]'](1) - } else { - result = comp - }; + result = self.$new_args_tail(nil, val['$[]'](0), val['$[]'](1)); return result; - }; + }); - def.$new_body = function(compstmt, res, els, ens) { - var $a, $b, TMP_1, self = this, s = nil; + Opal.defn(self, '$_reduce_482', function(val, _values, result) { + var self = this; - s = ((($a = compstmt) !== false && $a !== nil) ? $a : self.$s("block")); - if (res !== false && res !== nil) { - s = self.$s("rescue", s); - ($a = ($b = res).$each, $a.$$p = (TMP_1 = function(r){var self = TMP_1.$$s || this; -if (r == null) r = nil; - return s['$<<'](r)}, TMP_1.$$s = self, TMP_1), $a).call($b); - if (els !== false && els !== nil) { - s['$<<'](els)};}; - if (ens !== false && ens !== nil) { - return self.$s("ensure", s, ens) - } else { - return s - }; - }; + result = self.$new_args_tail(nil, nil, val['$[]'](0)); + return result; + }); - def.$new_def = function(kw, recv, name, args, body, end_tok) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_483', function(val, _values, result) { + var self = this; - if ((($a = body.$type()['$==']("block")['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - body = self.$s("block", body)}; - if (body.$size()['$=='](1)) { - body['$<<'](self.$s("nil"))}; - sexp = self.$s("def", recv, self.$value(name).$to_sym(), args, body); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = val['$[]'](1); + return result; + }); - def.$new_class = function(start, path, sup, body, endt) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_484', function(val, _values, result) { + var self = this; - sexp = self.$s("class", path, sup, body); - (($a = [self.$source(start)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args_tail(nil, nil, nil); + return result; + }); - def.$new_sclass = function(kw, expr, body, end_tok) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_485', function(val, _values, result) { + var self = this; - sexp = self.$s("sclass", expr, body); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(val['$[]'](0), val['$[]'](2), val['$[]'](4), val['$[]'](5)); + return result; + }); - def.$new_module = function(kw, path, body, end_tok) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_486', function(val, _values, result) { + var self = this; - sexp = self.$s("module", path, body); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(val['$[]'](0), val['$[]'](2), nil, val['$[]'](3)); + return result; + }); - def.$new_iter = function(args, body) { - var $a, self = this, s = nil; + Opal.defn(self, '$_reduce_487', function(val, _values, result) { + var self = this; - ((($a = args) !== false && $a !== nil) ? $a : args = nil); - s = self.$s("iter", args); - if (body !== false && body !== nil) { - s['$<<'](body)}; - return s; - }; + result = self.$new_args(val['$[]'](0), nil, val['$[]'](2), val['$[]'](3)); + return result; + }); - def.$new_if = function(if_tok, expr, stmt, tail) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_488', function(val, _values, result) { + var self = this; - sexp = self.$s("if", expr, stmt, tail); - (($a = [self.$source(if_tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(val['$[]'](0), nil, nil, val['$[]'](1)); + return result; + }); - def.$new_while = function(kw, test, body) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_489', function(val, _values, result) { + var self = this; - sexp = self.$s("while", test, body); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(nil, val['$[]'](0), val['$[]'](2), val['$[]'](3)); + return result; + }); - def.$new_until = function(kw, test, body) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_490', function(val, _values, result) { + var self = this; - sexp = self.$s("until", test, body); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(nil, val['$[]'](0), nil, val['$[]'](1)); + return result; + }); - def.$new_rescue_mod = function(kw, expr, resc) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_491', function(val, _values, result) { + var self = this; - sexp = self.$s("rescue_mod", expr, resc); - (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_args(nil, nil, val['$[]'](0), val['$[]'](1)); + return result; + }); - def.$new_array = function(start, args, finish) { - var $a, $b, $c, self = this, sexp = nil; + Opal.defn(self, '$_reduce_492', function(val, _values, result) { + var self = this; - ((($a = args) !== false && $a !== nil) ? $a : args = []); - sexp = ($a = self).$s.apply($a, ["array"].concat(args)); - (($b = [self.$source(start)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); - return sexp; - }; + result = self.$new_args(nil, nil, nil, val['$[]'](0)); + return result; + }); - def.$new_hash = function(open, assocs, close) { - var $a, $b, $c, self = this, sexp = nil; + Opal.defn(self, '$_reduce_493', function(val, _values, result) { + var self = this; - sexp = ($a = self).$s.apply($a, ["hash"].concat(assocs)); - (($b = [self.$source(open)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); - return sexp; - }; + result = self.$new_args(nil, nil, nil, nil); + return result; + }); - def.$new_not = function(kw, expr) { + Opal.defn(self, '$_reduce_495', function(val, _values, result) { var self = this; - return self.$s1("not", expr, self.$source(kw)); - }; + result = self.$value(val['$[]'](0)).$to_sym(); + self.$scope().$add_local(result); + return result; + }); - def.$new_paren = function(open, expr, close) { - var $a, $b, self = this; + Opal.defn(self, '$_reduce_496', function(val, _values, result) { + var self = this; - if ((($a = ((($b = expr['$nil?']()) !== false && $b !== nil) ? $b : expr['$=='](["block"]))) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$s1("paren", self.$s0("nil", self.$source(open)), self.$source(open)) - } else { - return self.$s1("paren", expr, self.$source(open)) - }; - }; + self.$raise("formal argument cannot be a constant"); + return result; + }); - def.$new_args_tail = function(kwarg, kwrest, block) { + Opal.defn(self, '$_reduce_497', function(val, _values, result) { var self = this; - return [kwarg, kwrest, block]; - }; + self.$raise("formal argument cannot be an instance variable"); + return result; + }); - def.$new_args = function(norm, opt, rest, tail) { - var $a, $b, TMP_2, $c, TMP_3, $d, TMP_4, $e, self = this, res = nil, restname = nil, blockname = nil; + Opal.defn(self, '$_reduce_498', function(val, _values, result) { + var self = this; - res = self.$s("args"); - if (norm !== false && norm !== nil) { - ($a = ($b = norm).$each, $a.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; -if (arg == null) arg = nil; - self.$scope().$add_local(arg); - return res['$<<'](self.$s("arg", arg));}, TMP_2.$$s = self, TMP_2), $a).call($b)}; - if (opt !== false && opt !== nil) { - ($a = ($c = opt['$[]']($range(1, -1, false))).$each, $a.$$p = (TMP_3 = function(_opt){var self = TMP_3.$$s || this; -if (_opt == null) _opt = nil; - return res['$<<'](self.$s("optarg", _opt['$[]'](1), _opt['$[]'](2)))}, TMP_3.$$s = self, TMP_3), $a).call($c)}; - if (rest !== false && rest !== nil) { - restname = rest.$to_s()['$[]']($range(1, -1, false)); - if ((($a = restname['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - res['$<<'](self.$s("restarg")) - } else { - res['$<<'](self.$s("restarg", restname.$to_sym())); - self.$scope().$add_local(restname.$to_sym()); - };}; - if ((($a = (($d = tail !== false && tail !== nil) ? tail['$[]'](0) : $d)) !== nil && (!$a.$$is_boolean || $a == true))) { - ($a = ($d = tail['$[]'](0)).$each, $a.$$p = (TMP_4 = function(kwarg){var self = TMP_4.$$s || this; -if (kwarg == null) kwarg = nil; - return res['$<<'](kwarg)}, TMP_4.$$s = self, TMP_4), $a).call($d)}; - if ((($a = (($e = tail !== false && tail !== nil) ? tail['$[]'](1) : $e)) !== nil && (!$a.$$is_boolean || $a == true))) { - res['$<<'](tail['$[]'](1))}; - if ((($a = (($e = tail !== false && tail !== nil) ? tail['$[]'](2) : $e)) !== nil && (!$a.$$is_boolean || $a == true))) { - blockname = tail['$[]'](2).$to_s()['$[]']($range(1, -1, false)).$to_sym(); - self.$scope().$add_local(blockname); - res['$<<'](self.$s("blockarg", blockname));}; - return res; - }; + self.$raise("formal argument cannot be a class variable"); + return result; + }); - def.$new_kwarg = function(name) { + Opal.defn(self, '$_reduce_499', function(val, _values, result) { var self = this; - self.$scope().$add_local(name['$[]'](1)); - return self.$s("kwarg", name['$[]'](1)); - }; + self.$raise("formal argument cannot be a global variable"); + return result; + }); - def.$new_kwoptarg = function(name, val) { + Opal.defn(self, '$_reduce_500', function(val, _values, result) { var self = this; - self.$scope().$add_local(name['$[]'](1)); - return self.$s("kwoptarg", name['$[]'](1), val); - }; + result = val['$[]'](0); + return result; + }); + + Opal.defn(self, '$_reduce_501', function(val, _values, result) { + var self = this; + + result = val['$[]'](1); + return result; + }); - def.$new_kwrestarg = function(name) { - var self = this, result = nil; + Opal.defn(self, '$_reduce_504', function(val, _values, result) { + var self = this; - if (name == null) { - name = nil - } - result = self.$s("kwrestarg"); - if (name !== false && name !== nil) { - self.$scope().$add_local(name['$[]'](0).$to_sym()); - result['$<<'](name['$[]'](0).$to_sym());}; + result = self.$s("lasgn", val['$[]'](0)); return result; - }; + }); - def.$new_block_args = function(norm, opt, rest, block) { - var $a, $b, TMP_5, $c, TMP_6, $d, self = this, res = nil, r = nil, b = nil, args = nil; + Opal.defn(self, '$_reduce_506', function(val, _values, result) { + var self = this; - res = self.$s("array"); - if (norm !== false && norm !== nil) { - ($a = ($b = norm).$each, $a.$$p = (TMP_5 = function(arg){var self = TMP_5.$$s || this, $a; -if (arg == null) arg = nil; - if ((($a = arg['$is_a?']($scope.get('Symbol'))) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$scope().$add_local(arg); - return res['$<<'](self.$s("lasgn", arg)); - } else { - return res['$<<'](arg) - }}, TMP_5.$$s = self, TMP_5), $a).call($b)}; - if (opt !== false && opt !== nil) { - ($a = ($c = opt['$[]']($range(1, -1, false))).$each, $a.$$p = (TMP_6 = function(_opt){var self = TMP_6.$$s || this; -if (_opt == null) _opt = nil; - return res['$<<'](self.$s("lasgn", _opt['$[]'](1)))}, TMP_6.$$s = self, TMP_6), $a).call($c)}; - if (rest !== false && rest !== nil) { - r = rest.$to_s()['$[]']($range(1, -1, false)).$to_sym(); - res['$<<'](self.$new_splat(nil, self.$s("lasgn", r))); - self.$scope().$add_local(r);}; - if (block !== false && block !== nil) { - b = block.$to_s()['$[]']($range(1, -1, false)).$to_sym(); - res['$<<'](self.$s("block_pass", self.$s("lasgn", b))); - self.$scope().$add_local(b);}; - if (opt !== false && opt !== nil) { - res['$<<'](opt)}; - args = (function() {if ((($a = (($d = res.$size()['$=='](2)) ? norm : $d)) !== nil && (!$a.$$is_boolean || $a == true))) { - return res['$[]'](1) - } else { - return self.$s("masgn", res) - }; return nil; })(); - if (args.$type()['$==']("array")) { - return self.$s("masgn", args) - } else { - return args - }; - }; + result = self.$s("array", val['$[]'](0)); + return result; + }); - def.$new_call = function(recv, meth, args) { - var $a, $b, $c, self = this, sexp = nil; + Opal.defn(self, '$_reduce_507', function(val, _values, result) { + var self = this; - if (args == null) { - args = nil - } - ((($a = args) !== false && $a !== nil) ? $a : args = []); - sexp = self.$s("call", recv, self.$value(meth).$to_sym(), ($a = self).$s.apply($a, ["arglist"].concat(args))); - (($b = [self.$source(meth)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); - return sexp; - }; + val['$[]'](0)['$<<'](val['$[]'](2)); + result = val['$[]'](0); + return result; + }); - def.$new_binary_call = function(recv, meth, arg) { + Opal.defn(self, '$_reduce_513', function(val, _values, result) { var self = this; - return self.$new_call(recv, meth, [arg]); - }; + result = [val['$[]'](0)]; + return result; + }); - def.$new_unary_call = function(op, recv) { + Opal.defn(self, '$_reduce_514', function(val, _values, result) { var self = this; - return self.$new_call(recv, op, []); - }; + val['$[]'](0)['$<<'](val['$[]'](2)); + result = val['$[]'](0); + return result; + }); - def.$new_and = function(lhs, tok, rhs) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_515', function(val, _values, result) { + var self = this; - sexp = self.$s("and", lhs, rhs); - (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$new_assign(self.$new_assignable(self.$new_ident(val['$[]'](0))), val['$[]'](1), val['$[]'](2)); + return result; + }); - def.$new_or = function(lhs, tok, rhs) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_516', function(val, _values, result) { + var self = this; - sexp = self.$s("or", lhs, rhs); - (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = self.$s("block", val['$[]'](0)); + return result; + }); - def.$new_irange = function(beg, op, finish) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_517', function(val, _values, result) { + var self = this; - sexp = self.$s("irange", beg, finish); - (($a = [self.$source(op)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = val['$[]'](0); + val['$[]'](0)['$<<'](val['$[]'](2)); + return result; + }); - def.$new_erange = function(beg, op, finish) { - var $a, $b, self = this, sexp = nil; + Opal.defn(self, '$_reduce_520', function(val, _values, result) { + var self = this; - sexp = self.$s("erange", beg, finish); - (($a = [self.$source(op)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - return sexp; - }; + result = (("*") + (self.$value(val['$[]'](1)))).$to_sym(); + return result; + }); - def.$negate_num = function(sexp) { + Opal.defn(self, '$_reduce_521', function(val, _values, result) { var self = this; - sexp.$array()['$[]='](1, sexp.$array()['$[]'](1)['$-@']()); - return sexp; - }; + result = "*"; + return result; + }); - def.$add_block_pass = function(arglist, block) { + Opal.defn(self, '$_reduce_524', function(val, _values, result) { var self = this; - if (block !== false && block !== nil) { - arglist['$<<'](block)}; - return arglist; - }; + result = (("&") + (self.$value(val['$[]'](1)))).$to_sym(); + return result; + }); - def.$new_block_pass = function(amper_tok, val) { + Opal.defn(self, '$_reduce_525', function(val, _values, result) { var self = this; - return self.$s1("block_pass", val, self.$source(amper_tok)); - }; + result = val['$[]'](1); + return result; + }); - def.$new_splat = function(tok, value) { + Opal.defn(self, '$_reduce_526', function(val, _values, result) { var self = this; - return self.$s1("splat", value, self.$source(tok)); - }; + result = nil; + return result; + }); - def.$new_op_asgn = function(op, lhs, rhs) { - var self = this, $case = nil, result = nil; + Opal.defn(self, '$_reduce_527', function(val, _values, result) { + var self = this; - $case = self.$value(op).$to_sym();if ("||"['$===']($case)) {result = self.$s("op_asgn_or", self.$new_gettable(lhs)); - result['$<<']((lhs['$<<'](rhs)));}else if ("&&"['$===']($case)) {result = self.$s("op_asgn_and", self.$new_gettable(lhs)); - result['$<<']((lhs['$<<'](rhs)));}else {result = lhs; - result['$<<'](self.$new_call(self.$new_gettable(lhs), op, [rhs]));}; + result = val['$[]'](0); return result; - }; + }); - def.$new_op_asgn1 = function(lhs, args, op, rhs) { - var $a, $b, $c, self = this, arglist = nil, sexp = nil; + Opal.defn(self, '$_reduce_528', function(val, _values, result) { + var self = this; - arglist = ($a = self).$s.apply($a, ["arglist"].concat(args)); - sexp = self.$s("op_asgn1", lhs, arglist, self.$value(op), rhs); - (($b = [self.$source(op)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); - return sexp; - }; + result = val['$[]'](1); + return result; + }); - def.$op_to_setter = function(op) { + Opal.defn(self, '$_reduce_529', function(val, _values, result) { var self = this; - return ((("") + (self.$value(op))) + "=").$to_sym(); - }; - - def.$new_attrasgn = function(recv, op, args) { - var $a, self = this, arglist = nil, sexp = nil; + result = []; + return result; + }); - if (args == null) { - args = [] - } - arglist = ($a = self).$s.apply($a, ["arglist"].concat(args)); - sexp = self.$s("attrasgn", recv, op, arglist); - return sexp; - }; + Opal.defn(self, '$_reduce_530', function(val, _values, result) { + var self = this; - def.$new_assign = function(lhs, tok, rhs) { - var $a, $b, self = this, $case = nil; + result = val['$[]'](0); + return result; + }); - return (function() {$case = lhs.$type();if ("iasgn"['$===']($case) || "cdecl"['$===']($case) || "lasgn"['$===']($case) || "gasgn"['$===']($case) || "cvdecl"['$===']($case) || "nth_ref"['$===']($case)) {lhs['$<<'](rhs); - return lhs;}else if ("call"['$===']($case) || "attrasgn"['$===']($case)) {lhs.$last()['$<<'](rhs); - return lhs;}else if ("colon2"['$===']($case)) {lhs['$<<'](rhs); - (($a = ["casgn"]), $b = lhs, $b['$type='].apply($b, $a), $a[$a.length-1]); - return lhs;}else if ("colon3"['$===']($case)) {lhs['$<<'](rhs); - (($a = ["casgn3"]), $b = lhs, $b['$type='].apply($b, $a), $a[$a.length-1]); - return lhs;}else {return self.$raise("Bad lhs for new_assign: " + (lhs.$type()))}})(); - }; + Opal.defn(self, '$_reduce_531', function(val, _values, result) { + var self = this; - def.$new_assignable = function(ref) { - var $a, $b, self = this, $case = nil; + result = val['$[]'](0); + return result; + }); - $case = ref.$type();if ("ivar"['$===']($case)) {(($a = ["iasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("const"['$===']($case)) {(($a = ["cdecl"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("identifier"['$===']($case)) {if ((($a = self.$scope()['$has_local?'](ref['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$scope().$add_local(ref['$[]'](1)) - }; - (($a = ["lasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1]);}else if ("gvar"['$===']($case)) {(($a = ["gasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("cvar"['$===']($case)) {(($a = ["cvdecl"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else {self.$raise($scope.get('SyntaxError'), "Bad new_assignable type: " + (ref.$type()))}; - return ref; - }; + Opal.defn(self, '$_reduce_532', function(val, _values, result) { + var $a, self = this; - def.$new_gettable = function(ref) { - var $a, $b, self = this, res = nil, $case = nil; + result = ($a = val['$[]'](0)).$push.apply($a, Opal.to_a(val['$[]'](2))); + return result; + }); - res = (function() {$case = ref.$type();if ("lasgn"['$===']($case)) {return self.$s("lvar", ref['$[]'](1))}else if ("iasgn"['$===']($case)) {return self.$s("ivar", ref['$[]'](1))}else if ("gasgn"['$===']($case)) {return self.$s("gvar", ref['$[]'](1))}else if ("cvdecl"['$===']($case)) {return self.$s("cvar", ref['$[]'](1))}else if ("cdecl"['$===']($case)) {return self.$s("const", ref['$[]'](1))}else {return self.$raise("Bad new_gettable ref: " + (ref.$type()))}})(); - (($a = [ref.$source()]), $b = res, $b['$source='].apply($b, $a), $a[$a.length-1]); - return res; - }; + Opal.defn(self, '$_reduce_533', function(val, _values, result) { + var self = this; - def.$new_var_ref = function(ref) { - var $a, $b, self = this, $case = nil, result = nil; + result = [val['$[]'](0), val['$[]'](2)]; + return result; + }); - return (function() {$case = ref.$type();if ("self"['$===']($case) || "nil"['$===']($case) || "true"['$===']($case) || "false"['$===']($case) || "line"['$===']($case) || "file"['$===']($case)) {return ref}else if ("const"['$===']($case)) {return ref}else if ("ivar"['$===']($case) || "gvar"['$===']($case) || "cvar"['$===']($case)) {return ref}else if ("int"['$===']($case)) {return ref}else if ("str"['$===']($case)) {return ref}else if ("identifier"['$===']($case)) {result = (function() {if ((($a = self.$scope()['$has_local?'](ref['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$s("lvar", ref['$[]'](1)) - } else { - return self.$s("call", nil, ref['$[]'](1), self.$s("arglist")) - }; return nil; })(); - (($a = [ref.$source()]), $b = result, $b['$source='].apply($b, $a), $a[$a.length-1]); - return result;}else {return self.$raise("Bad var_ref type: " + (ref.$type()))}})(); - }; + Opal.defn(self, '$_reduce_534', function(val, _values, result) { + var self = this; - def.$new_super = function(kw, args) { - var $a, $b, $c, self = this, sexp = nil; + result = [self.$new_sym(val['$[]'](0)), val['$[]'](1)]; + return result; + }); - if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - sexp = self.$s("super", nil) - } else { - sexp = self.$s("super", ($a = self).$s.apply($a, ["arglist"].concat(args))) - }; - (($b = [self.$source(kw)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); - return sexp; - }; + Opal.defn(self, '$_reduce_535', function(val, _values, result) { + var self = this; - def.$new_yield = function(args) { - var $a, self = this; + result = [self.$s("sym", self.$source(val['$[]'](1)).$to_sym()), val['$[]'](3)]; + return result; + }); - ((($a = args) !== false && $a !== nil) ? $a : args = []); - return ($a = self).$s.apply($a, ["yield"].concat(args)); - }; + Opal.defn(self, '$_reduce_559', function(val, _values, result) { + var self = this; - def.$new_xstr = function(start_t, str, end_t) { - var $a, $b, self = this, $case = nil; + result = nil; + return result; + }); - if (str !== false && str !== nil) { - } else { - return self.$s("xstr", "") - }; - $case = str.$type();if ("str"['$===']($case)) {(($a = ["xstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("dstr"['$===']($case)) {(($a = ["dxstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("evstr"['$===']($case)) {str = self.$s("dxstr", "", str)}; - (($a = [self.$source(start_t)]), $b = str, $b['$source='].apply($b, $a), $a[$a.length-1]); - return str; - }; + return (Opal.defn(self, '$_reduce_none', function(val, _values, result) { + var self = this; - def.$new_dsym = function(str) { - var $a, $b, self = this, $case = nil; + return val['$[]'](0); + }), nil) && '_reduce_none'; + })($scope.base, (($scope.get('Racc')).$$scope.get('Parser'))) + })($scope.base); +}; - if (str !== false && str !== nil) { - } else { - return self.$s("sym", "") - }; - $case = str.$type();if ("str"['$===']($case)) {(($a = ["sym"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1]); - str['$[]='](1, str['$[]'](1).$to_sym());}else if ("dstr"['$===']($case)) {(($a = ["dsym"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("evstr"['$===']($case)) {str = self.$s("dsym", str)}; - return str; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser/parser_scope"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - def.$new_evstr = function(str) { - var self = this; + Opal.add_stubs(['$attr_reader', '$attr_accessor', '$==', '$<<', '$include?', '$has_local?']); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return self.$s("evstr", str); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$new_str = function(str) { - var $a, $b, $c, self = this; + (function($base, $super) { + function $ParserScope(){}; + var self = $ParserScope = $klass($base, $super, 'ParserScope', $ParserScope); - if (str !== false && str !== nil) { - } else { - return self.$s("str", "") - }; - if ((($a = ($b = (($c = str.$size()['$=='](3)) ? str['$[]'](1)['$==']("") : $c), $b !== false && $b !== nil ?str.$type()['$==']("str") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return str['$[]'](2) - } else if ((($a = (($b = str.$type()['$==']("str")) ? $rb_gt(str.$size(), 3) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = ["dstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1]); - return str; - } else if (str.$type()['$==']("evstr")) { - return self.$s("dstr", "", str) - } else { - return str - }; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$new_regexp = function(reg, ending) { - var $a, $b, self = this, $case = nil; + def.locals = def.parent = def.block = nil; + self.$attr_reader("locals"); - if (reg !== false && reg !== nil) { - } else { - return self.$s("regexp", "") - }; - return (function() {$case = reg.$type();if ("str"['$===']($case)) {return self.$s("regexp", reg['$[]'](1), self.$value(ending))}else if ("evstr"['$===']($case)) {return self.$s("dregx", "", reg)}else if ("dstr"['$===']($case)) {(($a = ["dregx"]), $b = reg, $b['$type='].apply($b, $a), $a[$a.length-1]); - return reg;}else { return nil }})(); - }; + self.$attr_accessor("parent"); - def.$str_append = function(str, str2) { + Opal.defn(self, '$initialize', function(type) { var self = this; - if (str !== false && str !== nil) { - } else { - return str2 - }; - if (str2 !== false && str2 !== nil) { - } else { - return str - }; - if (str.$type()['$==']("evstr")) { - str = self.$s("dstr", "", str) - } else if (str.$type()['$==']("str")) { - str = self.$s("dstr", str['$[]'](1))}; - str['$<<'](str2); - return str; - }; + self.block = type['$==']("block"); + self.locals = []; + return self.parent = nil; + }); - return (def.$new_str_content = function(tok) { + Opal.defn(self, '$add_local', function(local) { var self = this; - return self.$s1("str", self.$value(tok), self.$source(tok)); - }, nil) && 'new_str_content'; - })(self, (($scope.get('Racc')).$$scope.get('Parser'))) - })(self); + return self.locals['$<<'](local); + }); + + return (Opal.defn(self, '$has_local?', function(local) { + var $a, $b, self = this; + + if ((($a = self.locals['$include?'](local)) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = ($b = self.parent, $b !== false && $b !== nil ?self.block : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.parent['$has_local?'](local)}; + return false; + }), nil) && 'has_local?'; + })($scope.base, null) + })($scope.base) }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/fragment"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/parser"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_times(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs * rhs : lhs['$*'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$attr_reader', '$to_s', '$line', '$column', '$inspect']); + Opal.add_stubs(['$require', '$attr_reader', '$!', '$[]', '$new', '$parser=', '$parse_to_sexp', '$join', '$message', '$line', '$lexer', '$column', '$split', '$-', '$+', '$*', '$>', '$raise', '$class', '$backtrace', '$push_scope', '$do_parse', '$pop_scope', '$next_token', '$last', '$parent=', '$<<', '$pop', '$inspect', '$value', '$token_to_str', '$s', '$source=', '$s0', '$source', '$s1', '$file', '$to_sym', '$nil?', '$==', '$length', '$size', '$type', '$each', '$!=', '$add_local', '$scope', '$to_s', '$empty?', '$is_a?', '$new_splat', '$new_call', '$[]=', '$array', '$-@', '$===', '$new_gettable', '$type=', '$has_local?']); + self.$require("opal/parser/sexp"); + self.$require("opal/parser/lexer"); + self.$require("opal/parser/grammar"); + self.$require("opal/parser/parser_scope"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $Fragment(){}; - var self = $Fragment = $klass($base, $super, 'Fragment', $Fragment); + function $Parser(){}; + var self = $Parser = $klass($base, $super, 'Parser', $Parser); var def = self.$$proto, $scope = self.$$scope; - def.sexp = def.code = nil; - self.$attr_reader("code"); + def.lexer = def.file = def.scopes = nil; + self.$attr_reader("lexer", "file", "scope"); + + Opal.defn(self, '$parse', function(source, file) { + var $a, $b, self = this, error = nil, message = nil; + + if (file == null) { + file = "(string)" + } + try { + if ((($a = $scope.get('ENV')['$[]']("RACC_DEBUG")['$!']()['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.yydebug = true}; + self.file = file; + self.scopes = []; + self.lexer = $scope.get('Lexer').$new(source, file); + (($a = [self]), $b = self.lexer, $b['$parser='].apply($b, $a), $a[$a.length-1]); + return self.$parse_to_sexp(); + } catch ($err) {if (true) {error = $err; + try { + message = [nil, error.$message(), "Source: " + (self.file) + ":" + (self.$lexer().$line()) + ":" + (self.$lexer().$column()), source.$split("\n")['$[]']($rb_minus(self.$lexer().$line(), 1)), $rb_plus($rb_times("~", ((function() {if ((($a = $rb_gt($rb_minus(self.$lexer().$column(), 1), 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_minus(self.$lexer().$column(), 1) + } else { + return 0 + }; return nil; })())), "^")].$join("\n"); + return self.$raise(error.$class(), message, error.$backtrace()); + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + }); - def.$initialize = function(code, sexp) { + Opal.defn(self, '$parse_to_sexp', function() { + var self = this, result = nil; + + self.$push_scope(); + result = self.$do_parse(); + self.$pop_scope(); + return result; + }); + + Opal.defn(self, '$next_token', function() { var self = this; - if (sexp == null) { - sexp = nil + return self.lexer.$next_token(); + }); + + Opal.defn(self, '$s', function() { + var self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var parts = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + parts[$splat_index] = arguments[$splat_index + 0]; } - self.code = code.$to_s(); - return self.sexp = sexp; - }; + return $scope.get('Sexp').$new(parts); + }); - def.$to_code = function() { - var $a, self = this; + Opal.defn(self, '$push_scope', function(type) { + var $a, $b, self = this, top = nil, scope = nil; - if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { - return "/*:" + (self.sexp.$line()) + ":" + (self.sexp.$column()) + "*/" + (self.code) - } else { - return self.code - }; - }; + if (type == null) { + type = nil + } + top = self.scopes.$last(); + scope = $scope.get('ParserScope').$new(type); + (($a = [top]), $b = scope, $b['$parent='].apply($b, $a), $a[$a.length-1]); + self.scopes['$<<'](scope); + return self.scope = scope; + }); - def.$inspect = function() { + Opal.defn(self, '$pop_scope', function() { var self = this; - return "f(" + (self.code.$inspect()) + ")"; - }; + self.scopes.$pop(); + return self.scope = self.scopes.$last(); + }); - def.$line = function() { + Opal.defn(self, '$on_error', function(t, val, vstack) { var $a, self = this; - if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.sexp.$line() - } else { - return nil - }; - }; + return self.$raise("parse error on value " + (self.$value(val).$inspect()) + " (" + (((($a = self.$token_to_str(t)) !== false && $a !== nil) ? $a : "?")) + ") :" + (self.file) + ":" + (self.$lexer().$line())); + }); - return (def.$column = function() { - var $a, self = this; + Opal.defn(self, '$value', function(tok) { + var self = this; - if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.sexp.$column() + return tok['$[]'](0); + }); + + Opal.defn(self, '$source', function(tok) { + var self = this; + + if (tok !== false && tok !== nil) { + return tok['$[]'](1) } else { return nil }; - }, nil) && 'column'; - })(self, null) - })(self) -}; + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/helpers"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + Opal.defn(self, '$s0', function(type, source) { + var $a, $b, self = this, sexp = nil; - Opal.add_stubs(['$require', '$valid_name?', '$inspect', '$=~', '$!', '$to_s', '$to_sym', '$indent', '$to_proc', '$compiler', '$parser_indent', '$push', '$current_indent', '$js_truthy_optimize', '$with_temp', '$fragment', '$expr', '$==', '$type', '$[]', '$uses_block!', '$scope', '$block_name', '$include?', '$dup']); - self.$require("opal/regexp_anchors"); - return (function($base) { - var self = $module($base, 'Opal'); + sexp = self.$s(type); + (($a = [source]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$s1', function(type, first, source) { + var $a, $b, self = this, sexp = nil; - (function($base) { - var self = $module($base, 'Nodes'); + sexp = self.$s(type, first); + (($a = [source]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$new_nil', function(tok) { + var self = this; - (function($base) { - var self = $module($base, 'Helpers'); + return self.$s0("nil", self.$source(tok)); + }); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + Opal.defn(self, '$new_self', function(tok) { + var self = this; - Opal.cdecl($scope, 'ES51_RESERVED_WORD', (new RegExp("" + $scope.get('REGEXP_START') + "(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)" + $scope.get('REGEXP_END')))); + return self.$s0("self", self.$source(tok)); + }); - Opal.cdecl($scope, 'ES3_RESERVED_WORD_EXCLUSIVE', (new RegExp("" + $scope.get('REGEXP_START') + "(?:int|byte|char|goto|long|final|float|short|double|native|throws|boolean|abstract|volatile|transient|synchronized)" + $scope.get('REGEXP_END')))); + Opal.defn(self, '$new_true', function(tok) { + var self = this; - Opal.cdecl($scope, 'IMMUTABLE_PROPS', (new RegExp("" + $scope.get('REGEXP_START') + "(?:NaN|Infinity|undefined)" + $scope.get('REGEXP_END')))); + return self.$s0("true", self.$source(tok)); + }); - Opal.cdecl($scope, 'BASIC_IDENTIFIER_RULES', (new RegExp("" + $scope.get('REGEXP_START') + "[$_a-z][$_a-z\\d]*" + $scope.get('REGEXP_END')))); + Opal.defn(self, '$new_false', function(tok) { + var self = this; - Opal.defn(self, '$property', function(name) { - var $a, self = this; + return self.$s0("false", self.$source(tok)); + }); - if ((($a = self['$valid_name?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - return "." + (name) - } else { - return "[" + (name.$inspect()) + "]" - }; - }); + Opal.defn(self, '$new___FILE__', function(tok) { + var self = this; - Opal.defn(self, '$valid_name?', function(name) { - var $a, $b, $c, self = this; + return self.$s1("str", self.$file(), self.$source(tok)); + }); + + Opal.defn(self, '$new___LINE__', function(tok) { + var self = this; + + return self.$s1("int", self.$lexer().$line(), self.$source(tok)); + }); + + Opal.defn(self, '$new_ident', function(tok) { + var self = this; + + return self.$s1("identifier", self.$value(tok).$to_sym(), self.$source(tok)); + }); + + Opal.defn(self, '$new_int', function(tok) { + var self = this; + + return self.$s1("int", self.$value(tok), self.$source(tok)); + }); + + Opal.defn(self, '$new_float', function(tok) { + var self = this; + + return self.$s1("float", self.$value(tok), self.$source(tok)); + }); + + Opal.defn(self, '$new_ivar', function(tok) { + var self = this; + + return self.$s1("ivar", self.$value(tok).$to_sym(), self.$source(tok)); + }); + + Opal.defn(self, '$new_gvar', function(tok) { + var self = this; + + return self.$s1("gvar", self.$value(tok).$to_sym(), self.$source(tok)); + }); - return ($a = $scope.get('BASIC_IDENTIFIER_RULES')['$=~'](name), $a !== false && $a !== nil ?(((($b = ((($c = $scope.get('ES51_RESERVED_WORD')['$=~'](name)) !== false && $c !== nil) ? $c : $scope.get('ES3_RESERVED_WORD_EXCLUSIVE')['$=~'](name))) !== false && $b !== nil) ? $b : $scope.get('IMMUTABLE_PROPS')['$=~'](name)))['$!']() : $a); - }); + Opal.defn(self, '$new_cvar', function(tok) { + var self = this; - Opal.defn(self, '$variable', function(name) { - var $a, self = this; + return self.$s1("cvar", self.$value(tok).$to_sym(), self.$source(tok)); + }); - if ((($a = self['$valid_name?'](name.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - return name - } else { - return "" + (name) + "$" - }; - }); + Opal.defn(self, '$new_const', function(tok) { + var self = this; - Opal.defn(self, '$lvar_to_js', function(var$) { - var $a, self = this; + return self.$s1("const", self.$value(tok).$to_sym(), self.$source(tok)); + }); - if ((($a = self['$valid_name?'](var$.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - var$ = "" + (var$) + "$" - }; - return var$.$to_sym(); - }); + Opal.defn(self, '$new_colon2', function(lhs, tok, name) { + var $a, $b, self = this, sexp = nil; - Opal.defn(self, '$mid_to_jsid', function(mid) { - var $a, self = this; + sexp = self.$s("colon2", lhs, self.$value(name).$to_sym()); + (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - if ((($a = /\=|\+|\-|\*|\/|\!|\?|\<|\>|\&|\||\^|\%|\~|\[/['$=~'](mid.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - return "['$" + (mid) + "']" - } else { - return $rb_plus(".$", mid) - }; - }); + Opal.defn(self, '$new_colon3', function(tok, name) { + var self = this; - Opal.defn(self, '$indent', TMP_1 = function() { - var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; + return self.$s1("colon3", self.$value(name).$to_sym(), self.$source(name)); + }); - TMP_1.$$p = null; - return ($a = ($b = self.$compiler()).$indent, $a.$$p = block.$to_proc(), $a).call($b); - }); + Opal.defn(self, '$new_sym', function(tok) { + var self = this; - Opal.defn(self, '$current_indent', function() { - var self = this; + return self.$s1("sym", self.$value(tok).$to_sym(), self.$source(tok)); + }); - return self.$compiler().$parser_indent(); - }); + Opal.defn(self, '$new_alias', function(kw, new$, old) { + var $a, $b, self = this, sexp = nil; - Opal.defn(self, '$line', function(strs) { - var $a, self = this; + sexp = self.$s("alias", new$, old); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - strs = $slice.call(arguments, 0); - self.$push("\n" + (self.$current_indent())); - return ($a = self).$push.apply($a, [].concat(strs)); - }); + Opal.defn(self, '$new_break', function(kw, args) { + var $a, self = this, sexp = nil; - Opal.defn(self, '$empty_line', function() { - var self = this; + if (args == null) { + args = nil + } + if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + sexp = self.$s("break") + } else if (args.$length()['$=='](1)) { + sexp = self.$s("break", args['$[]'](0)) + } else { + sexp = self.$s("break", ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(args)))) + }; + return sexp; + }); - return self.$push("\n"); - }); + Opal.defn(self, '$new_return', function(kw, args) { + var $a, self = this, sexp = nil; - Opal.defn(self, '$js_truthy', function(sexp) { - var $a, $b, TMP_2, self = this, optimize = nil; + if (args == null) { + args = nil + } + if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + sexp = self.$s("return") + } else if (args.$length()['$=='](1)) { + sexp = self.$s("return", args['$[]'](0)) + } else { + sexp = self.$s("return", ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(args)))) + }; + return sexp; + }); - if ((($a = optimize = self.$js_truthy_optimize(sexp)) !== nil && (!$a.$$is_boolean || $a == true))) { - return optimize}; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; -if (tmp == null) tmp = nil; - return [self.$fragment("((" + (tmp) + " = "), self.$expr(sexp), self.$fragment(") !== nil && (!" + (tmp) + ".$$is_boolean || " + (tmp) + " == true))")]}, TMP_2.$$s = self, TMP_2), $a).call($b); - }); + Opal.defn(self, '$new_next', function(kw, args) { + var $a, self = this, sexp = nil; - Opal.defn(self, '$js_falsy', function(sexp) { - var $a, $b, TMP_3, self = this, mid = nil; + if (args == null) { + args = [] + } + if (args.$length()['$=='](1)) { + sexp = self.$s("next", args['$[]'](0)) + } else { + sexp = self.$s("next", ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(args)))) + }; + return sexp; + }); - if (sexp.$type()['$==']("call")) { - mid = sexp['$[]'](2); - if (mid['$==']("block_given?")) { - self.$scope()['$uses_block!'](); - return "" + (self.$scope().$block_name()) + " === nil";};}; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; -if (tmp == null) tmp = nil; - return [self.$fragment("((" + (tmp) + " = "), self.$expr(sexp), self.$fragment(") === nil || (" + (tmp) + ".$$is_boolean && " + (tmp) + " == false))")]}, TMP_3.$$s = self, TMP_3), $a).call($b); - }); + Opal.defn(self, '$new_block', function(stmt) { + var self = this, sexp = nil; - Opal.defn(self, '$js_truthy_optimize', function(sexp) { - var $a, self = this, mid = nil; + if (stmt == null) { + stmt = nil + } + sexp = self.$s("block"); + if (stmt !== false && stmt !== nil) { + sexp['$<<'](stmt)}; + return sexp; + }); - if (sexp.$type()['$==']("call")) { - mid = sexp['$[]'](2); - if (mid['$==']("block_given?")) { - return self.$expr(sexp) - } else if ((($a = (($scope.get('Compiler')).$$scope.get('COMPARE'))['$include?'](mid.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$expr(sexp) - } else if (mid['$==']("==")) { - return self.$expr(sexp) - } else { - return nil - }; - } else if ((($a = ["lvar", "self"]['$include?'](sexp.$type())) !== nil && (!$a.$$is_boolean || $a == true))) { - return [self.$expr(sexp.$dup()), self.$fragment(" !== false && "), self.$expr(sexp.$dup()), self.$fragment(" !== nil")] - } else { - return nil - }; - }); - })(self) - })(self) - })(self); -}; + Opal.defn(self, '$new_compstmt', function(block) { + var $a, $b, $c, self = this, comp = nil, result = nil; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/base"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; + comp = (function() {if (block.$size()['$=='](1)) { + return nil + } else if (block.$size()['$=='](2)) { + return block['$[]'](1) + } else { + return block + }; return nil; })(); + if ((($a = ($b = (($c = comp !== false && comp !== nil) ? comp.$type()['$==']("begin") : comp), $b !== false && $b !== nil ?comp.$size()['$=='](2) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + result = comp['$[]'](1) + } else { + result = comp + }; + return result; + }); - Opal.add_stubs(['$require', '$include', '$each', '$[]=', '$handlers', '$each_with_index', '$define_method', '$[]', '$attr_reader', '$type', '$compile', '$raise', '$is_a?', '$fragment', '$<<', '$unshift', '$reverse', '$push', '$new', '$error', '$scope', '$s', '$==', '$process', '$expr', '$add_scope_local', '$to_sym', '$add_scope_ivar', '$add_scope_gvar', '$add_scope_temp', '$helper', '$with_temp', '$to_proc', '$in_while?', '$instance_variable_get']); - self.$require("opal/nodes/helpers"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$new_body', function(compstmt, res, els, ens) { + var $a, $b, TMP_1, self = this, s = nil; - var def = self.$$proto, $scope = self.$$scope; + s = ((($a = compstmt) !== false && $a !== nil) ? $a : self.$s("block")); + if (res !== false && res !== nil) { + s = self.$s("rescue", s); + ($a = ($b = res).$each, $a.$$p = (TMP_1 = function(r){var self = TMP_1.$$s || this; +if (r == null) r = nil; + return s['$<<'](r)}, TMP_1.$$s = self, TMP_1), $a).call($b); + if (els !== false && els !== nil) { + s['$<<'](els)};}; + if (ens !== false && ens !== nil) { + return self.$s("ensure", s, ens) + } else { + return s + }; + }); - (function($base) { - var self = $module($base, 'Nodes'); + Opal.defn(self, '$new_def', function(kw, recv, name, args, body, end_tok) { + var $a, $b, self = this, sexp = nil; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = body.$type()['$!=']("block")) !== nil && (!$a.$$is_boolean || $a == true))) { + body = self.$s("block", body)}; + if (body.$size()['$=='](1)) { + body['$<<'](self.$s("nil"))}; + sexp = self.$s("def", recv, self.$value(name).$to_sym(), args, body); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - (function($base, $super) { - function $Base(){}; - var self = $Base = $klass($base, $super, 'Base', $Base); + Opal.defn(self, '$new_class', function(start, path, sup, body, endt) { + var $a, $b, self = this, sexp = nil; - var def = self.$$proto, $scope = self.$$scope, TMP_6; + sexp = self.$s("class", path, sup, body); + (($a = [self.$source(start)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - def.sexp = def.fragments = def.compiler = def.level = nil; - self.$include($scope.get('Helpers')); + Opal.defn(self, '$new_sclass', function(kw, expr, body, end_tok) { + var $a, $b, self = this, sexp = nil; - Opal.defs(self, '$handlers', function() { - var $a, self = this; - if (self.handlers == null) self.handlers = nil; + sexp = self.$s("sclass", expr, body); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - return ((($a = self.handlers) !== false && $a !== nil) ? $a : self.handlers = $hash2([], {})); - }); + Opal.defn(self, '$new_module', function(kw, path, body, end_tok) { + var $a, $b, self = this, sexp = nil; - Opal.defs(self, '$handle', function(types) { - var $a, $b, TMP_1, self = this; + sexp = self.$s("module", path, body); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - types = $slice.call(arguments, 0); - return ($a = ($b = types).$each, $a.$$p = (TMP_1 = function(type){var self = TMP_1.$$s || this; -if (type == null) type = nil; - return $scope.get('Base').$handlers()['$[]='](type, self)}, TMP_1.$$s = self, TMP_1), $a).call($b); - }); + Opal.defn(self, '$new_iter', function(args, body) { + var $a, self = this, s = nil; - Opal.defs(self, '$children', function(names) { - var $a, $b, TMP_2, self = this; + ((($a = args) !== false && $a !== nil) ? $a : args = nil); + s = self.$s("iter", args); + if (body !== false && body !== nil) { + s['$<<'](body)}; + return s; + }); - names = $slice.call(arguments, 0); - return ($a = ($b = names).$each_with_index, $a.$$p = (TMP_2 = function(name, idx){var self = TMP_2.$$s || this, $a, $b, TMP_3; -if (name == null) name = nil;if (idx == null) idx = nil; - return ($a = ($b = self).$define_method, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; - if (self.sexp == null) self.sexp = nil; + Opal.defn(self, '$new_if', function(if_tok, expr, stmt, tail) { + var $a, $b, self = this, sexp = nil; - return self.sexp['$[]']($rb_plus(idx, 1))}, TMP_3.$$s = self, TMP_3), $a).call($b, name)}, TMP_2.$$s = self, TMP_2), $a).call($b); - }); + sexp = self.$s("if", expr, stmt, tail); + (($a = [self.$source(if_tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - self.$attr_reader("compiler", "type"); + Opal.defn(self, '$new_while', function(kw, test, body) { + var $a, $b, self = this, sexp = nil; - def.$initialize = function(sexp, level, compiler) { - var self = this; + sexp = self.$s("while", test, body); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - self.sexp = sexp; - self.type = sexp.$type(); - self.level = level; - return self.compiler = compiler; - }; + Opal.defn(self, '$new_until', function(kw, test, body) { + var $a, $b, self = this, sexp = nil; + + sexp = self.$s("until", test, body); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - def.$children = function() { - var self = this; + Opal.defn(self, '$new_rescue_mod', function(kw, expr, resc) { + var $a, $b, self = this, sexp = nil; - return self.sexp['$[]']($range(1, -1, false)); - }; + sexp = self.$s("rescue_mod", expr, resc); + (($a = [self.$source(kw)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - def.$compile_to_fragments = function() { - var $a, $b, self = this; + Opal.defn(self, '$new_array', function(start, args, finish) { + var $a, $b, $c, self = this, sexp = nil; - if ((($a = (($b = self['fragments'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.fragments}; - self.fragments = []; - self.$compile(); - return self.fragments; - }; + ((($a = args) !== false && $a !== nil) ? $a : args = []); + sexp = ($a = self).$s.apply($a, ["array"].concat(Opal.to_a(args))); + (($b = [self.$source(start)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + return sexp; + }); - def.$compile = function() { - var self = this; + Opal.defn(self, '$new_hash', function(open, assocs, close) { + var $a, $b, $c, self = this, sexp = nil; - return self.$raise("Not Implemented"); - }; + sexp = ($a = self).$s.apply($a, ["hash"].concat(Opal.to_a(assocs))); + (($b = [self.$source(open)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + return sexp; + }); - def.$push = function(strs) { - var $a, $b, TMP_4, self = this; + Opal.defn(self, '$new_not', function(kw, expr) { + var self = this; - strs = $slice.call(arguments, 0); - return ($a = ($b = strs).$each, $a.$$p = (TMP_4 = function(str){var self = TMP_4.$$s || this, $a; - if (self.fragments == null) self.fragments = nil; -if (str == null) str = nil; - if ((($a = str['$is_a?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - str = self.$fragment(str)}; - return self.fragments['$<<'](str);}, TMP_4.$$s = self, TMP_4), $a).call($b); - }; + return self.$s1("not", expr, self.$source(kw)); + }); - def.$unshift = function(strs) { - var $a, $b, TMP_5, self = this; + Opal.defn(self, '$new_paren', function(open, expr, close) { + var $a, $b, self = this; - strs = $slice.call(arguments, 0); - return ($a = ($b = strs.$reverse()).$each, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this, $a; - if (self.fragments == null) self.fragments = nil; -if (str == null) str = nil; - if ((($a = str['$is_a?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { - str = self.$fragment(str)}; - return self.fragments.$unshift(str);}, TMP_5.$$s = self, TMP_5), $a).call($b); + if ((($a = ((($b = expr['$nil?']()) !== false && $b !== nil) ? $b : expr['$=='](["block"]))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$s1("paren", self.$s0("nil", self.$source(open)), self.$source(open)) + } else { + return self.$s1("paren", expr, self.$source(open)) }; + }); - def.$wrap = function(pre, post) { - var self = this; + Opal.defn(self, '$new_args_tail', function(kwarg, kwrest, block) { + var self = this; - self.$unshift(pre); - return self.$push(post); - }; + return [kwarg, kwrest, block]; + }); - def.$fragment = function(str) { - var self = this; + Opal.defn(self, '$new_args', function(norm, opt, rest, tail) { + var $a, $b, TMP_2, $c, TMP_3, $d, TMP_4, $e, self = this, res = nil, restname = nil, blockname = nil; - return (($scope.get('Opal')).$$scope.get('Fragment')).$new(str, self.sexp); - }; + res = self.$s("args"); + if (norm !== false && norm !== nil) { + ($a = ($b = norm).$each, $a.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; +if (arg == null) arg = nil; + self.$scope().$add_local(arg); + return res['$<<'](self.$s("arg", arg));}, TMP_2.$$s = self, TMP_2), $a).call($b)}; + if (opt !== false && opt !== nil) { + ($a = ($c = opt['$[]']($range(1, -1, false))).$each, $a.$$p = (TMP_3 = function(_opt){var self = TMP_3.$$s || this; +if (_opt == null) _opt = nil; + return res['$<<'](self.$s("optarg", _opt['$[]'](1), _opt['$[]'](2)))}, TMP_3.$$s = self, TMP_3), $a).call($c)}; + if (rest !== false && rest !== nil) { + restname = rest.$to_s()['$[]']($range(1, -1, false)); + if ((($a = restname['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + res['$<<'](self.$s("restarg")) + } else { + res['$<<'](self.$s("restarg", restname.$to_sym())); + self.$scope().$add_local(restname.$to_sym()); + };}; + if ((($a = (($d = tail !== false && tail !== nil) ? tail['$[]'](0) : tail)) !== nil && (!$a.$$is_boolean || $a == true))) { + ($a = ($d = tail['$[]'](0)).$each, $a.$$p = (TMP_4 = function(kwarg){var self = TMP_4.$$s || this; +if (kwarg == null) kwarg = nil; + return res['$<<'](kwarg)}, TMP_4.$$s = self, TMP_4), $a).call($d)}; + if ((($a = (($e = tail !== false && tail !== nil) ? tail['$[]'](1) : tail)) !== nil && (!$a.$$is_boolean || $a == true))) { + res['$<<'](tail['$[]'](1))}; + if ((($a = (($e = tail !== false && tail !== nil) ? tail['$[]'](2) : tail)) !== nil && (!$a.$$is_boolean || $a == true))) { + blockname = tail['$[]'](2).$to_s()['$[]']($range(1, -1, false)).$to_sym(); + self.$scope().$add_local(blockname); + res['$<<'](self.$s("blockarg", blockname));}; + return res; + }); - def.$error = function(msg) { - var self = this; + Opal.defn(self, '$new_kwarg', function(name) { + var self = this; - return self.compiler.$error(msg); - }; + self.$scope().$add_local(name['$[]'](1)); + return self.$s("kwarg", name['$[]'](1)); + }); - def.$scope = function() { - var self = this; + Opal.defn(self, '$new_kwoptarg', function(name, val) { + var self = this; - return self.compiler.$scope(); - }; + self.$scope().$add_local(name['$[]'](1)); + return self.$s("kwoptarg", name['$[]'](1), val); + }); - def.$s = function(args) { - var $a, self = this; + Opal.defn(self, '$new_kwrestarg', function(name) { + var self = this, result = nil; - args = $slice.call(arguments, 0); - return ($a = self.compiler).$s.apply($a, [].concat(args)); - }; + if (name == null) { + name = nil + } + result = self.$s("kwrestarg"); + if (name !== false && name !== nil) { + self.$scope().$add_local(name['$[]'](0).$to_sym()); + result['$<<'](name['$[]'](0).$to_sym());}; + return result; + }); - def['$expr?'] = function() { - var self = this; + Opal.defn(self, '$new_block_args', function(norm, opt, rest, block) { + var $a, $b, TMP_5, $c, TMP_6, $d, self = this, res = nil, r = nil, b = nil, args = nil; - return self.level['$==']("expr"); + res = self.$s("array"); + if (norm !== false && norm !== nil) { + ($a = ($b = norm).$each, $a.$$p = (TMP_5 = function(arg){var self = TMP_5.$$s || this, $a; +if (arg == null) arg = nil; + if ((($a = arg['$is_a?']($scope.get('Symbol'))) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scope().$add_local(arg); + return res['$<<'](self.$s("lasgn", arg)); + } else { + return res['$<<'](arg) + }}, TMP_5.$$s = self, TMP_5), $a).call($b)}; + if (opt !== false && opt !== nil) { + ($a = ($c = opt['$[]']($range(1, -1, false))).$each, $a.$$p = (TMP_6 = function(_opt){var self = TMP_6.$$s || this; +if (_opt == null) _opt = nil; + return res['$<<'](self.$s("lasgn", _opt['$[]'](1)))}, TMP_6.$$s = self, TMP_6), $a).call($c)}; + if (rest !== false && rest !== nil) { + r = rest.$to_s()['$[]']($range(1, -1, false)).$to_sym(); + res['$<<'](self.$new_splat(nil, self.$s("lasgn", r))); + self.$scope().$add_local(r);}; + if (block !== false && block !== nil) { + b = block.$to_s()['$[]']($range(1, -1, false)).$to_sym(); + res['$<<'](self.$s("block_pass", self.$s("lasgn", b))); + self.$scope().$add_local(b);}; + if (opt !== false && opt !== nil) { + res['$<<'](opt)}; + args = (function() {if ((($a = (($d = res.$size()['$=='](2)) ? norm : res.$size()['$=='](2))) !== nil && (!$a.$$is_boolean || $a == true))) { + return res['$[]'](1) + } else { + return self.$s("masgn", res) + }; return nil; })(); + if (args.$type()['$==']("array")) { + return self.$s("masgn", args) + } else { + return args }; + }); - def['$recv?'] = function() { - var self = this; + Opal.defn(self, '$new_call', function(recv, meth, args) { + var $a, $b, $c, self = this, sexp = nil; - return self.level['$==']("recv"); - }; + if (args == null) { + args = nil + } + ((($a = args) !== false && $a !== nil) ? $a : args = []); + sexp = self.$s("call", recv, self.$value(meth).$to_sym(), ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args)))); + (($b = [self.$source(meth)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + return sexp; + }); - def['$stmt?'] = function() { - var self = this; + Opal.defn(self, '$new_js_call', function(recv, meth, args) { + var $a, $b, $c, self = this, sexp = nil; - return self.level['$==']("stmt"); + if (args == null) { + args = nil + } + if (args !== false && args !== nil) { + sexp = self.$s("jscall", recv, self.$value(meth).$to_sym(), ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args)))); + (($b = [self.$source(meth)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + } else { + sexp = self.$s("jscall", recv, self.$value(meth).$to_sym(), nil); + (($b = [self.$source(meth)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); }; + return sexp; + }); - def.$process = function(sexp, level) { - var self = this; - - if (level == null) { - level = "expr" - } - return self.compiler.$process(sexp, level); - }; + Opal.defn(self, '$new_binary_call', function(recv, meth, arg) { + var self = this; - def.$expr = function(sexp) { - var self = this; + return self.$new_call(recv, meth, [arg]); + }); - return self.compiler.$process(sexp, "expr"); - }; + Opal.defn(self, '$new_unary_call', function(op, recv) { + var self = this; - def.$recv = function(sexp) { - var self = this; + return self.$new_call(recv, op, []); + }); - return self.compiler.$process(sexp, "recv"); - }; + Opal.defn(self, '$new_and', function(lhs, tok, rhs) { + var $a, $b, self = this, sexp = nil; - def.$stmt = function(sexp) { - var self = this; + sexp = self.$s("and", lhs, rhs); + (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - return self.compiler.$process(sexp, "stmt"); - }; + Opal.defn(self, '$new_or', function(lhs, tok, rhs) { + var $a, $b, self = this, sexp = nil; - def.$expr_or_nil = function(sexp) { - var self = this; + sexp = self.$s("or", lhs, rhs); + (($a = [self.$source(tok)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - if (sexp !== false && sexp !== nil) { - return self.$expr(sexp) - } else { - return "nil" - }; - }; + Opal.defn(self, '$new_irange', function(beg, op, finish) { + var $a, $b, self = this, sexp = nil; - def.$add_local = function(name) { - var self = this; + sexp = self.$s("irange", beg, finish); + (($a = [self.$source(op)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - return self.$scope().$add_scope_local(name.$to_sym()); - }; + Opal.defn(self, '$new_erange', function(beg, op, finish) { + var $a, $b, self = this, sexp = nil; - def.$add_ivar = function(name) { - var self = this; + sexp = self.$s("erange", beg, finish); + (($a = [self.$source(op)]), $b = sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + return sexp; + }); - return self.$scope().$add_scope_ivar(name); - }; + Opal.defn(self, '$negate_num', function(sexp) { + var self = this; - def.$add_gvar = function(name) { - var self = this; + sexp.$array()['$[]='](1, sexp.$array()['$[]'](1)['$-@']()); + return sexp; + }); - return self.$scope().$add_scope_gvar(name); - }; + Opal.defn(self, '$add_block_pass', function(arglist, block) { + var self = this; - def.$add_temp = function(temp) { - var self = this; + if (block !== false && block !== nil) { + arglist['$<<'](block)}; + return arglist; + }); - return self.$scope().$add_scope_temp(temp); - }; + Opal.defn(self, '$new_block_pass', function(amper_tok, val) { + var self = this; - def.$helper = function(name) { - var self = this; + return self.$s1("block_pass", val, self.$source(amper_tok)); + }); - return self.compiler.$helper(name); - }; + Opal.defn(self, '$new_splat', function(tok, value) { + var self = this; - def.$with_temp = TMP_6 = function() { - var $a, $b, self = this, $iter = TMP_6.$$p, block = $iter || nil; + return self.$s1("splat", value, self.$source(tok)); + }); - TMP_6.$$p = null; - return ($a = ($b = self.compiler).$with_temp, $a.$$p = block.$to_proc(), $a).call($b); - }; + Opal.defn(self, '$new_op_asgn', function(op, lhs, rhs) { + var self = this, $case = nil, result = nil; - def['$in_while?'] = function() { - var self = this; + $case = self.$value(op).$to_sym();if ("||"['$===']($case)) {result = self.$s("op_asgn_or", self.$new_gettable(lhs)); + result['$<<']((lhs['$<<'](rhs)));}else if ("&&"['$===']($case)) {result = self.$s("op_asgn_and", self.$new_gettable(lhs)); + result['$<<']((lhs['$<<'](rhs)));}else {result = lhs; + result['$<<'](self.$new_call(self.$new_gettable(lhs), op, [rhs]));}; + return result; + }); - return self.compiler['$in_while?'](); - }; + Opal.defn(self, '$new_op_asgn1', function(lhs, args, op, rhs) { + var $a, $b, $c, self = this, arglist = nil, sexp = nil; - return (def.$while_loop = function() { - var self = this; + arglist = ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args))); + sexp = self.$s("op_asgn1", lhs, arglist, self.$value(op), rhs); + (($b = [self.$source(op)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + return sexp; + }); - return self.compiler.$instance_variable_get("@while_loop"); - }, nil) && 'while_loop'; - })(self, null) - })(self) - })(self); -}; + Opal.defn(self, '$op_to_setter', function(op) { + var self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/literal"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $gvars = Opal.gvars; + return ((("") + (self.$value(op))) + "=").$to_sym(); + }); - Opal.add_stubs(['$require', '$handle', '$push', '$to_s', '$type', '$children', '$value', '$recv?', '$wrap', '$join', '$keys', '$gsub', '$even?', '$length', '$chop', '$[]', '$translate_escape_chars', '$inspect', '$===', '$new', '$flags', '$each_line', '$==', '$s', '$source=', '$line', '$include', '$stmt?', '$!', '$include?', '$compile_split_lines', '$needs_semicolon?', '$each_with_index', '$expr', '$raise', '$last', '$each', '$requires_semicolon', '$helper', '$start', '$finish']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$new_attrasgn', function(recv, op, args) { + var $a, self = this, arglist = nil, sexp = nil; - var def = self.$$proto, $scope = self.$$scope; + if (args == null) { + args = [] + } + arglist = ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args))); + sexp = self.$s("attrasgn", recv, op, arglist); + return sexp; + }); - (function($base) { - var self = $module($base, 'Nodes'); + Opal.defn(self, '$new_js_attrasgn', function(recv, args) { + var $a, self = this, arglist = nil, sexp = nil; - var def = self.$$proto, $scope = self.$$scope; + arglist = ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args))); + sexp = self.$s("jsattrasgn", recv, nil, arglist); + return sexp; + }); - (function($base, $super) { - function $ValueNode(){}; - var self = $ValueNode = $klass($base, $super, 'ValueNode', $ValueNode); + Opal.defn(self, '$new_assign', function(lhs, tok, rhs) { + var $a, $b, self = this, $case = nil; - var def = self.$$proto, $scope = self.$$scope; + return (function() {$case = lhs.$type();if ("iasgn"['$===']($case) || "cdecl"['$===']($case) || "lasgn"['$===']($case) || "gasgn"['$===']($case) || "cvdecl"['$===']($case) || "nth_ref"['$===']($case)) {lhs['$<<'](rhs); + return lhs;}else if ("call"['$===']($case) || "attrasgn"['$===']($case) || "jsattrasgn"['$===']($case)) {lhs.$last()['$<<'](rhs); + return lhs;}else if ("colon2"['$===']($case)) {lhs['$<<'](rhs); + (($a = ["casgn"]), $b = lhs, $b['$type='].apply($b, $a), $a[$a.length-1]); + return lhs;}else if ("colon3"['$===']($case)) {lhs['$<<'](rhs); + (($a = ["casgn3"]), $b = lhs, $b['$type='].apply($b, $a), $a[$a.length-1]); + return lhs;}else {return self.$raise("Bad lhs for new_assign: " + (lhs.$type()))}})(); + }); - self.$handle("true", "false", "self", "nil"); + Opal.defn(self, '$new_assignable', function(ref) { + var $a, $b, self = this, $case = nil; - return (def.$compile = function() { - var self = this; + $case = ref.$type();if ("ivar"['$===']($case)) {(($a = ["iasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("const"['$===']($case)) {(($a = ["cdecl"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("identifier"['$===']($case)) {if ((($a = self.$scope()['$has_local?'](ref['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$scope().$add_local(ref['$[]'](1)) + }; + (($a = ["lasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1]);}else if ("gvar"['$===']($case)) {(($a = ["gasgn"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("cvar"['$===']($case)) {(($a = ["cvdecl"]), $b = ref, $b['$type='].apply($b, $a), $a[$a.length-1])}else {self.$raise($scope.get('SyntaxError'), "Bad new_assignable type: " + (ref.$type()))}; + return ref; + }); - return self.$push(self.$type().$to_s()); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.defn(self, '$new_gettable', function(ref) { + var $a, $b, self = this, res = nil, $case = nil; - (function($base, $super) { - function $NumericNode(){}; - var self = $NumericNode = $klass($base, $super, 'NumericNode', $NumericNode); + res = (function() {$case = ref.$type();if ("lasgn"['$===']($case)) {return self.$s("lvar", ref['$[]'](1))}else if ("iasgn"['$===']($case)) {return self.$s("ivar", ref['$[]'](1))}else if ("gasgn"['$===']($case)) {return self.$s("gvar", ref['$[]'](1))}else if ("cvdecl"['$===']($case)) {return self.$s("cvar", ref['$[]'](1))}else if ("cdecl"['$===']($case)) {return self.$s("const", ref['$[]'](1))}else {return self.$raise("Bad new_gettable ref: " + (ref.$type()))}})(); + (($a = [ref.$source()]), $b = res, $b['$source='].apply($b, $a), $a[$a.length-1]); + return res; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$new_var_ref', function(ref) { + var $a, $b, self = this, $case = nil, result = nil; - self.$handle("int", "float"); + return (function() {$case = ref.$type();if ("self"['$===']($case) || "nil"['$===']($case) || "true"['$===']($case) || "false"['$===']($case) || "line"['$===']($case) || "file"['$===']($case)) {return ref}else if ("const"['$===']($case)) {return ref}else if ("ivar"['$===']($case) || "gvar"['$===']($case) || "cvar"['$===']($case)) {return ref}else if ("int"['$===']($case)) {return ref}else if ("str"['$===']($case)) {return ref}else if ("identifier"['$===']($case)) {result = (function() {if ((($a = self.$scope()['$has_local?'](ref['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$s("lvar", ref['$[]'](1)) + } else { + return self.$s("call", nil, ref['$[]'](1), self.$s("arglist")) + }; return nil; })(); + (($a = [ref.$source()]), $b = result, $b['$source='].apply($b, $a), $a[$a.length-1]); + return result;}else {return self.$raise("Bad var_ref type: " + (ref.$type()))}})(); + }); - self.$children("value"); + Opal.defn(self, '$new_super', function(kw, args) { + var $a, $b, $c, self = this, sexp = nil; - return (def.$compile = function() { - var $a, self = this; + if ((($a = args['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + sexp = self.$s("super", nil) + } else { + sexp = self.$s("super", ($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(args)))) + }; + (($b = [self.$source(kw)]), $c = sexp, $c['$source='].apply($c, $b), $b[$b.length-1]); + return sexp; + }); - self.$push(self.$value().$to_s()); - if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ")") - } else { - return nil - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.defn(self, '$new_yield', function(args) { + var $a, self = this; - (function($base, $super) { - function $StringNode(){}; - var self = $StringNode = $klass($base, $super, 'StringNode', $StringNode); + ((($a = args) !== false && $a !== nil) ? $a : args = []); + return ($a = self).$s.apply($a, ["yield"].concat(Opal.to_a(args))); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$new_xstr', function(start_t, str, end_t) { + var $a, $b, self = this, $case = nil; - self.$handle("str"); + if (str !== false && str !== nil) { + } else { + return self.$s("xstr", "") + }; + $case = str.$type();if ("str"['$===']($case)) {(($a = ["xstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("dstr"['$===']($case)) {(($a = ["dxstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("evstr"['$===']($case)) {str = self.$s("dxstr", "", str)}; + (($a = [self.$source(start_t)]), $b = str, $b['$source='].apply($b, $a), $a[$a.length-1]); + return str; + }); - self.$children("value"); + Opal.defn(self, '$new_dsym', function(str) { + var $a, $b, self = this, $case = nil; - Opal.cdecl($scope, 'ESCAPE_CHARS', $hash2(["a", "e"], {"a": "\\u0007", "e": "\\u001b"})); + if (str !== false && str !== nil) { + } else { + return self.$s("sym", "") + }; + $case = str.$type();if ("str"['$===']($case)) {(($a = ["sym"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1]); + str['$[]='](1, str['$[]'](1).$to_sym());}else if ("dstr"['$===']($case)) {(($a = ["dsym"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1])}else if ("evstr"['$===']($case)) {str = self.$s("dsym", str)}; + return str; + }); - Opal.cdecl($scope, 'ESCAPE_REGEX', (new RegExp("(\\\\+)([" + $scope.get('ESCAPE_CHARS').$keys().$join("") + "])"))); + Opal.defn(self, '$new_evstr', function(str) { + var self = this; - def.$translate_escape_chars = function(inspect_string) { - var $a, $b, TMP_1, self = this; + return self.$s("evstr", str); + }); - return ($a = ($b = inspect_string).$gsub, $a.$$p = (TMP_1 = function(original){var self = TMP_1.$$s || this, $a, $b; -if (original == null) original = nil; - if ((($a = (($b = $gvars['~']) === nil ? nil : $b['$[]'](1)).$length()['$even?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return original - } else { - return $rb_plus((($a = $gvars['~']) === nil ? nil : $a['$[]'](1)).$chop(), $scope.get('ESCAPE_CHARS')['$[]']((($a = $gvars['~']) === nil ? nil : $a['$[]'](2)))) - }}, TMP_1.$$s = self, TMP_1), $a).call($b, $scope.get('ESCAPE_REGEX')); + Opal.defn(self, '$new_str', function(str) { + var $a, $b, $c, self = this; + + if (str !== false && str !== nil) { + } else { + return self.$s("str", "") + }; + if ((($a = ($b = (($c = str.$size()['$=='](3)) ? str['$[]'](1)['$==']("") : str.$size()['$=='](3)), $b !== false && $b !== nil ?str.$type()['$==']("str") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return str['$[]'](2) + } else if ((($a = (($b = str.$type()['$==']("str")) ? $rb_gt(str.$size(), 3) : str.$type()['$==']("str"))) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = ["dstr"]), $b = str, $b['$type='].apply($b, $a), $a[$a.length-1]); + return str; + } else if (str.$type()['$==']("evstr")) { + return self.$s("dstr", "", str) + } else { + return str }; + }); - return (def.$compile = function() { - var self = this; + Opal.defn(self, '$new_regexp', function(reg, ending) { + var $a, $b, self = this, $case = nil; - return self.$push(self.$translate_escape_chars(self.$value().$inspect())); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + if (reg !== false && reg !== nil) { + } else { + return self.$s("regexp", "") + }; + return (function() {$case = reg.$type();if ("str"['$===']($case)) {return self.$s("regexp", reg['$[]'](1), self.$value(ending))}else if ("evstr"['$===']($case)) {return self.$s("dregx", "", reg)}else if ("dstr"['$===']($case)) {(($a = ["dregx"]), $b = reg, $b['$type='].apply($b, $a), $a[$a.length-1]); + return reg;}else { return nil }})(); + }); - (function($base, $super) { - function $SymbolNode(){}; - var self = $SymbolNode = $klass($base, $super, 'SymbolNode', $SymbolNode); + Opal.defn(self, '$str_append', function(str, str2) { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + if (str !== false && str !== nil) { + } else { + return str2 + }; + if (str2 !== false && str2 !== nil) { + } else { + return str + }; + if (str.$type()['$==']("evstr")) { + str = self.$s("dstr", "", str) + } else if (str.$type()['$==']("str")) { + str = self.$s("dstr", str['$[]'](1))}; + str['$<<'](str2); + return str; + }); - self.$handle("sym"); + return (Opal.defn(self, '$new_str_content', function(tok) { + var self = this; - self.$children("value"); + return self.$s1("str", self.$value(tok), self.$source(tok)); + }), nil) && 'new_str_content'; + })($scope.base, (($scope.get('Racc')).$$scope.get('Parser'))) + })($scope.base); +}; - return (def.$compile = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/fragment"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - return self.$push(self.$value().$to_s().$inspect()); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.add_stubs(['$attr_reader', '$to_s', '$line', '$column', '$inspect']); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - (function($base, $super) { - function $RegexpNode(){}; - var self = $RegexpNode = $klass($base, $super, 'RegexpNode', $RegexpNode); + var def = self.$$proto, $scope = self.$$scope; - var def = self.$$proto, $scope = self.$$scope; + (function($base, $super) { + function $Fragment(){}; + var self = $Fragment = $klass($base, $super, 'Fragment', $Fragment); - self.$handle("regexp"); + var def = self.$$proto, $scope = self.$$scope; - self.$children("value", "flags"); + def.sexp = def.code = nil; + self.$attr_reader("code"); - return (def.$compile = function() { - var self = this, $case = nil, message = nil; + Opal.defn(self, '$initialize', function(code, sexp) { + var self = this; - return (function() {$case = self.$value();if (""['$===']($case)) {return self.$push("/(?:)/")}else if (/\?\<\w+\>/['$===']($case)) {message = "named captures are not supported in javascript: " + (self.$value().$inspect()); - return self.$push("self.$raise(new SyntaxError('" + (message) + "'))");}else {return self.$push("" + ($scope.get('Regexp').$new(self.$value()).$inspect()) + (self.$flags()))}})(); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + if (sexp == null) { + sexp = nil + } + self.code = code.$to_s(); + return self.sexp = sexp; + }); - (function($base) { - var self = $module($base, 'XStringLineSplitter'); + Opal.defn(self, '$to_code', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { + return "/*:" + (self.sexp.$line()) + ":" + (self.sexp.$column()) + "*/" + (self.code) + } else { + return self.code + }; + }); - Opal.defn(self, '$compile_split_lines', function(value, sexp) { - var $a, $b, TMP_2, self = this, idx = nil; + Opal.defn(self, '$inspect', function() { + var self = this; - idx = 0; - return ($a = ($b = value).$each_line, $a.$$p = (TMP_2 = function(line){var self = TMP_2.$$s || this, $a, $b, line_sexp = nil, frag = nil; -if (line == null) line = nil; - if (idx['$=='](0)) { - self.$push(line) - } else { - line_sexp = self.$s(); - (($a = [[$rb_plus(sexp.$line(), idx), 0]]), $b = line_sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); - frag = $scope.get('Fragment').$new(line, line_sexp); - self.$push(frag); - }; - return idx = $rb_plus(idx, 1);}, TMP_2.$$s = self, TMP_2), $a).call($b); - }) - })(self); + return "f(" + (self.code.$inspect()) + ")"; + }); - (function($base, $super) { - function $XStringNode(){}; - var self = $XStringNode = $klass($base, $super, 'XStringNode', $XStringNode); + Opal.defn(self, '$line', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.sexp.$line() + } else { + return nil + }; + }); - def.sexp = nil; - self.$include($scope.get('XStringLineSplitter')); + return (Opal.defn(self, '$column', function() { + var $a, self = this; - self.$handle("xstr"); + if ((($a = self.sexp) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.sexp.$column() + } else { + return nil + }; + }), nil) && 'column'; + })($scope.base, null) + })($scope.base) +}; - self.$children("value"); +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/helpers"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; - def['$needs_semicolon?'] = function() { - var $a, self = this; + Opal.add_stubs(['$require', '$valid_name?', '$inspect', '$=~', '$!', '$to_s', '$valid_ivar_name?', '$to_sym', '$+', '$indent', '$to_proc', '$compiler', '$parser_indent', '$push', '$current_indent', '$js_truthy_optimize', '$with_temp', '$fragment', '$expr', '$==', '$type', '$[]', '$uses_block!', '$scope', '$block_name', '$handlers', '$include?', '$truthy_optimize?', '$dup']); + self.$require("opal/regexp_anchors"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return ($a = self['$stmt?'](), $a !== false && $a !== nil ?self.$value().$to_s()['$include?'](";")['$!']() : $a); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$compile = function() { - var $a, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - self.$compile_split_lines(self.$value().$to_s(), self.sexp); - if ((($a = self['$needs_semicolon?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push(";")}; - if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ")") - } else { - return nil - }; - }; + var def = self.$$proto, $scope = self.$$scope; - return (def.$start_line = function() { - var self = this; + (function($base) { + var $Helpers, self = $Helpers = $module($base, 'Helpers'); - return self.sexp.$line(); - }, nil) && 'start_line'; - })(self, $scope.get('Base')); + var def = self.$$proto, $scope = self.$$scope, TMP_1; - (function($base, $super) { - function $DynamicStringNode(){}; - var self = $DynamicStringNode = $klass($base, $super, 'DynamicStringNode', $DynamicStringNode); + Opal.cdecl($scope, 'ES51_RESERVED_WORD', (new RegExp("" + $scope.get('REGEXP_START') + "(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)" + $scope.get('REGEXP_END')))); - var def = self.$$proto, $scope = self.$$scope; + Opal.cdecl($scope, 'ES3_RESERVED_WORD_EXCLUSIVE', (new RegExp("" + $scope.get('REGEXP_START') + "(?:int|byte|char|goto|long|final|float|short|double|native|throws|boolean|abstract|volatile|transient|synchronized)" + $scope.get('REGEXP_END')))); - self.$handle("dstr"); + Opal.cdecl($scope, 'PROTO_SPECIAL_PROPS', (new RegExp("" + $scope.get('REGEXP_START') + "(?:constructor|displayName|__proto__|__parent__|__noSuchMethod__|__count__)" + $scope.get('REGEXP_END')))); - return (def.$compile = function() { - var $a, $b, TMP_3, self = this; + Opal.cdecl($scope, 'PROTO_SPECIAL_METHODS', (new RegExp("" + $scope.get('REGEXP_START') + "(?:hasOwnProperty|valueOf)" + $scope.get('REGEXP_END')))); - return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_3 = function(part, idx){var self = TMP_3.$$s || this, $a; -if (part == null) part = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(" + ") - }; - if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push(part.$inspect()) - } else if (part.$type()['$==']("evstr")) { - self.$push("("); - self.$push(self.$expr(part['$[]'](1))); - self.$push(")"); - } else if (part.$type()['$==']("str")) { - self.$push(part['$[]'](1).$inspect()) - } else if (part.$type()['$==']("dstr")) { - self.$push("("); - self.$push(self.$expr(part)); - self.$push(")"); - } else { - self.$raise("Bad dstr part " + (part.$inspect())) - }; - if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ")") - } else { - return nil - };}, TMP_3.$$s = self, TMP_3), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.cdecl($scope, 'IMMUTABLE_PROPS', (new RegExp("" + $scope.get('REGEXP_START') + "(?:NaN|Infinity|undefined)" + $scope.get('REGEXP_END')))); - (function($base, $super) { - function $DynamicSymbolNode(){}; - var self = $DynamicSymbolNode = $klass($base, $super, 'DynamicSymbolNode', $DynamicSymbolNode); + Opal.cdecl($scope, 'BASIC_IDENTIFIER_RULES', (new RegExp("" + $scope.get('REGEXP_START') + "[$_a-z][$_a-z\\d]*" + $scope.get('REGEXP_END')))); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$property', function(name) { + var $a, self = this; - self.$handle("dsym"); + if ((($a = self['$valid_name?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + return "." + (name) + } else { + return "[" + (name.$inspect()) + "]" + }; + }); - return (def.$compile = function() { - var $a, $b, TMP_4, self = this; + Opal.defn(self, '$valid_name?', function(name) { + var $a, $b, $c, self = this; - ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_4 = function(part, idx){var self = TMP_4.$$s || this, $a; -if (part == null) part = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(" + ") - }; - if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push(part.$inspect()) - } else if (part.$type()['$==']("evstr")) { - return self.$push(self.$expr(self.$s("call", part.$last(), "to_s", self.$s("arglist")))) - } else if (part.$type()['$==']("str")) { - return self.$push(part.$last().$inspect()) - } else { - return self.$raise("Bad dsym part") - };}, TMP_4.$$s = self, TMP_4), $a).call($b); - return self.$wrap("(", ")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return ($a = $scope.get('BASIC_IDENTIFIER_RULES')['$=~'](name), $a !== false && $a !== nil ?(((($b = ((($c = $scope.get('ES51_RESERVED_WORD')['$=~'](name)) !== false && $c !== nil) ? $c : $scope.get('ES3_RESERVED_WORD_EXCLUSIVE')['$=~'](name))) !== false && $b !== nil) ? $b : $scope.get('IMMUTABLE_PROPS')['$=~'](name)))['$!']() : $a); + }); - (function($base, $super) { - function $DynamicXStringNode(){}; - var self = $DynamicXStringNode = $klass($base, $super, 'DynamicXStringNode', $DynamicXStringNode); + Opal.defn(self, '$variable', function(name) { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self['$valid_name?'](name.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { + return name + } else { + return "" + (name) + "$" + }; + }); - self.$include($scope.get('XStringLineSplitter')); + Opal.defn(self, '$valid_ivar_name?', function(name) { + var $a, self = this; - self.$handle("dxstr"); + return (((($a = $scope.get('PROTO_SPECIAL_PROPS')['$=~'](name)) !== false && $a !== nil) ? $a : $scope.get('PROTO_SPECIAL_METHODS')['$=~'](name)))['$!'](); + }); - def.$requires_semicolon = function(code) { + Opal.defn(self, '$ivar', function(name) { var $a, self = this; - return ($a = self['$stmt?'](), $a !== false && $a !== nil ?code['$include?'](";")['$!']() : $a); - }; + if ((($a = self['$valid_ivar_name?'](name.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { + return name + } else { + return "" + (name) + "$" + }; + }); - return (def.$compile = function() { - var $a, $b, TMP_5, self = this, needs_semicolon = nil; + Opal.defn(self, '$lvar_to_js', function(var$) { + var $a, self = this; - needs_semicolon = false; - ($a = ($b = self.$children()).$each, $a.$$p = (TMP_5 = function(part){var self = TMP_5.$$s || this, $a; - if (self.sexp == null) self.sexp = nil; -if (part == null) part = nil; - if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$compile_split_lines(part.$to_s(), self.sexp); - if ((($a = self.$requires_semicolon(part.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - return needs_semicolon = true - } else { - return nil - }; - } else if (part.$type()['$==']("evstr")) { - return self.$push(self.$expr(part['$[]'](1))) - } else if (part.$type()['$==']("str")) { - self.$compile_split_lines(part.$last().$to_s(), part); - if ((($a = self.$requires_semicolon(part.$last().$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { - return needs_semicolon = true - } else { - return nil - }; - } else { - return self.$raise("Bad dxstr part") - }}, TMP_5.$$s = self, TMP_5), $a).call($b); - if (needs_semicolon !== false && needs_semicolon !== nil) { - self.$push(";")}; - if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ")") + if ((($a = self['$valid_name?'](var$.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return nil + var$ = "" + (var$) + "$" }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $DynamicRegexpNode(){}; - var self = $DynamicRegexpNode = $klass($base, $super, 'DynamicRegexpNode', $DynamicRegexpNode); + return var$.$to_sym(); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$mid_to_jsid', function(mid) { + var $a, self = this; - self.$handle("dregx"); + if ((($a = /\=|\+|\-|\*|\/|\!|\?|<|\>|\&|\||\^|\%|\~|\[/['$=~'](mid.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { + return "['$" + (mid) + "']" + } else { + return $rb_plus(".$", mid) + }; + }); - return (def.$compile = function() { - var $a, $b, TMP_6, self = this; + Opal.defn(self, '$indent', TMP_1 = function() { + var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; - ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_6 = function(part, idx){var self = TMP_6.$$s || this, $a; -if (part == null) part = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(" + ") - }; - if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push(part.$inspect()) - } else if (part.$type()['$==']("str")) { - return self.$push(part['$[]'](1).$inspect()) - } else { - return self.$push(self.$expr(part['$[]'](1))) - };}, TMP_6.$$s = self, TMP_6), $a).call($b); - return self.$wrap("(new RegExp(", "))"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + TMP_1.$$p = null; + return ($a = ($b = self.$compiler()).$indent, $a.$$p = block.$to_proc(), $a).call($b); + }); - (function($base, $super) { - function $InclusiveRangeNode(){}; - var self = $InclusiveRangeNode = $klass($base, $super, 'InclusiveRangeNode', $InclusiveRangeNode); + Opal.defn(self, '$current_indent', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.$compiler().$parser_indent(); + }); - self.$handle("irange"); + Opal.defn(self, '$line', function() { + var $a, self = this, $splat_index = nil; - self.$children("start", "finish"); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } + self.$push("\n" + (self.$current_indent())); + return ($a = self).$push.apply($a, Opal.to_a(strs)); + }); - return (def.$compile = function() { + Opal.defn(self, '$empty_line', function() { var self = this; - self.$helper("range"); - return self.$push("$range(", self.$expr(self.$start()), ", ", self.$expr(self.$finish()), ", false)"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.$push("\n"); + }); - (function($base, $super) { - function $ExclusiveRangeNode(){}; - var self = $ExclusiveRangeNode = $klass($base, $super, 'ExclusiveRangeNode', $ExclusiveRangeNode); + Opal.defn(self, '$js_truthy', function(sexp) { + var $a, $b, TMP_2, self = this, optimize = nil; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = optimize = self.$js_truthy_optimize(sexp)) !== nil && (!$a.$$is_boolean || $a == true))) { + return optimize}; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; +if (tmp == null) tmp = nil; + return [self.$fragment("((" + (tmp) + " = "), self.$expr(sexp), self.$fragment(") !== nil && (!" + (tmp) + ".$$is_boolean || " + (tmp) + " == true))")]}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - self.$handle("erange"); + Opal.defn(self, '$js_falsy', function(sexp) { + var $a, $b, TMP_3, self = this, mid = nil; - self.$children("start", "finish"); + if (sexp.$type()['$==']("call")) { + mid = sexp['$[]'](2); + if (mid['$==']("block_given?")) { + self.$scope()['$uses_block!'](); + return "" + (self.$scope().$block_name()) + " === nil";};}; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; +if (tmp == null) tmp = nil; + return [self.$fragment("((" + (tmp) + " = "), self.$expr(sexp), self.$fragment(") === nil || (" + (tmp) + ".$$is_boolean && " + (tmp) + " == false))")]}, TMP_3.$$s = self, TMP_3), $a).call($b); + }); - return (def.$compile = function() { - var self = this; + Opal.defn(self, '$js_truthy_optimize', function(sexp) { + var $a, $b, $c, self = this, mid = nil, receiver_handler_class = nil, receiver = nil, allow_optimization_on_type = nil; - self.$helper("range"); - return self.$push("$range(", self.$expr(self.$start()), ", ", self.$expr(self.$finish()), ", true)"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - })(self) - })(self); + if (sexp.$type()['$==']("call")) { + mid = sexp['$[]'](2); + receiver_handler_class = ($a = (receiver = sexp['$[]'](1)), $a !== false && $a !== nil ?self.$compiler().$handlers()['$[]'](receiver.$type()) : $a); + allow_optimization_on_type = ($a = ($b = (($scope.get('Compiler')).$$scope.get('COMPARE'))['$include?'](mid.$to_s()), $b !== false && $b !== nil ?receiver_handler_class : $b), $a !== false && $a !== nil ?receiver_handler_class['$truthy_optimize?']() : $a); + if ((($a = ((($b = ((($c = allow_optimization_on_type) !== false && $c !== nil) ? $c : mid['$==']("block_given?"))) !== false && $b !== nil) ? $b : mid['$==']("=="))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(sexp) + } else { + return nil + }; + } else if ((($a = ["lvar", "self"]['$include?'](sexp.$type())) !== nil && (!$a.$$is_boolean || $a == true))) { + return [self.$expr(sexp.$dup()), self.$fragment(" !== false && "), self.$expr(sexp.$dup()), self.$fragment(" !== nil")] + } else { + return nil + }; + }); + })($scope.base) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/variables"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/base"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; - Opal.add_stubs(['$require', '$handle', '$children', '$irb?', '$compiler', '$top?', '$scope', '$using_irb?', '$push', '$variable', '$to_s', '$var_name', '$with_temp', '$property', '$wrap', '$expr', '$value', '$add_local', '$recv?', '$[]', '$name', '$add_ivar', '$helper', '$==', '$handle_global_match', '$handle_post_match', '$handle_pre_match', '$add_gvar', '$index']); - self.$require("opal/nodes/base"); + Opal.add_stubs(['$require', '$include', '$each', '$[]=', '$handlers', '$each_with_index', '$define_method', '$[]', '$+', '$attr_reader', '$type', '$compile', '$raise', '$is_a?', '$fragment', '$<<', '$unshift', '$reverse', '$push', '$new', '$error', '$scope', '$s', '$==', '$process', '$expr', '$add_scope_local', '$to_sym', '$add_scope_ivar', '$add_scope_gvar', '$add_scope_temp', '$helper', '$with_temp', '$to_proc', '$in_while?', '$instance_variable_get']); + self.$require("opal/nodes/helpers"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $LocalVariableNode(){}; - var self = $LocalVariableNode = $klass($base, $super, 'LocalVariableNode', $LocalVariableNode); - - var def = self.$$proto, $scope = self.$$scope; + function $Base(){}; + var self = $Base = $klass($base, $super, 'Base', $Base); - self.$handle("lvar"); + var def = self.$$proto, $scope = self.$$scope, TMP_6; - self.$children("var_name"); + def.sexp = def.fragments = def.compiler = def.level = nil; + self.$include($scope.get('Helpers')); - def['$using_irb?'] = function() { + Opal.defs(self, '$handlers', function() { var $a, self = this; + if (self.handlers == null) self.handlers = nil; - return ($a = self.$compiler()['$irb?'](), $a !== false && $a !== nil ?self.$scope()['$top?']() : $a); - }; - - return (def.$compile = function() { - var $a, $b, TMP_1, self = this; - - if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - return self.$push(self.$variable(self.$var_name().$to_s())) - }; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; -if (tmp == null) tmp = nil; - self.$push(self.$property(self.$var_name().$to_s())); - return self.$wrap("((" + (tmp) + " = Opal.irb_vars", ") == null ? nil : " + (tmp) + ")");}, TMP_1.$$s = self, TMP_1), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $LocalAssignNode(){}; - var self = $LocalAssignNode = $klass($base, $super, 'LocalAssignNode', $LocalAssignNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("lasgn"); - - self.$children("var_name", "value"); + return ((($a = self.handlers) !== false && $a !== nil) ? $a : self.handlers = $hash2([], {})); + }); - def['$using_irb?'] = function() { - var $a, self = this; + Opal.defs(self, '$handle', function() { + var $a, $b, TMP_1, self = this, $splat_index = nil; - return ($a = self.$compiler()['$irb?'](), $a !== false && $a !== nil ?self.$scope()['$top?']() : $a); - }; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var types = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + types[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = ($b = types).$each, $a.$$p = (TMP_1 = function(type){var self = TMP_1.$$s || this; +if (type == null) type = nil; + return $scope.get('Base').$handlers()['$[]='](type, self)}, TMP_1.$$s = self, TMP_1), $a).call($b); + }); - return (def.$compile = function() { - var $a, self = this; + Opal.defs(self, '$children', function() { + var $a, $b, TMP_2, self = this, $splat_index = nil; - if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("Opal.irb_vars" + (self.$property(self.$var_name().$to_s())) + " = "); - self.$push(self.$expr(self.$value())); - } else { - self.$add_local(self.$variable(self.$var_name().$to_s())); - self.$push("" + (self.$variable(self.$var_name().$to_s())) + " = "); - self.$push(self.$expr(self.$value())); - }; - if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ")") - } else { - return nil - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var names = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + names[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = ($b = names).$each_with_index, $a.$$p = (TMP_2 = function(name, idx){var self = TMP_2.$$s || this, $a, $b, TMP_3; +if (name == null) name = nil;if (idx == null) idx = nil; + return ($a = ($b = self).$define_method, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; + if (self.sexp == null) self.sexp = nil; - (function($base, $super) { - function $InstanceVariableNode(){}; - var self = $InstanceVariableNode = $klass($base, $super, 'InstanceVariableNode', $InstanceVariableNode); + return self.sexp['$[]']($rb_plus(idx, 1))}, TMP_3.$$s = self, TMP_3), $a).call($b, name)}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defs(self, '$truthy_optimize?', function() { + var self = this; - self.$handle("ivar"); + return false; + }); - self.$children("name"); + self.$attr_reader("compiler", "type"); - def.$var_name = function() { + Opal.defn(self, '$initialize', function(sexp, level, compiler) { var self = this; - return self.$name().$to_s()['$[]']($range(1, -1, false)); - }; - - return (def.$compile = function() { - var self = this, name = nil; - - name = self.$property(self.$var_name()); - self.$add_ivar(name); - return self.$push("self" + (name)); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + self.sexp = sexp; + self.type = sexp.$type(); + self.level = level; + return self.compiler = compiler; + }); - (function($base, $super) { - function $InstanceAssignNode(){}; - var self = $InstanceAssignNode = $klass($base, $super, 'InstanceAssignNode', $InstanceAssignNode); + Opal.defn(self, '$children', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.sexp['$[]']($range(1, -1, false)); + }); - self.$handle("iasgn"); + Opal.defn(self, '$compile_to_fragments', function() { + var $a, $b, self = this; - self.$children("name", "value"); + if ((($a = (($b = self['fragments'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.fragments}; + self.fragments = []; + self.$compile(); + return self.fragments; + }); - def.$var_name = function() { + Opal.defn(self, '$compile', function() { var self = this; - return self.$name().$to_s()['$[]']($range(1, -1, false)); - }; - - return (def.$compile = function() { - var self = this, name = nil; - - name = self.$property(self.$var_name()); - self.$push("self" + (name) + " = "); - return self.$push(self.$expr(self.$value())); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.$raise("Not Implemented"); + }); - (function($base, $super) { - function $GlobalVariableNode(){}; - var self = $GlobalVariableNode = $klass($base, $super, 'GlobalVariableNode', $GlobalVariableNode); + Opal.defn(self, '$push', function() { + var $a, $b, TMP_4, self = this, $splat_index = nil; - var def = self.$$proto, $scope = self.$$scope; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = ($b = strs).$each, $a.$$p = (TMP_4 = function(str){var self = TMP_4.$$s || this, $a; + if (self.fragments == null) self.fragments = nil; +if (str == null) str = nil; + if ((($a = str['$is_a?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { + str = self.$fragment(str)}; + return self.fragments['$<<'](str);}, TMP_4.$$s = self, TMP_4), $a).call($b); + }); - self.$handle("gvar"); + Opal.defn(self, '$unshift', function() { + var $a, $b, TMP_5, self = this, $splat_index = nil; - self.$children("name"); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var strs = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + strs[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = ($b = strs.$reverse()).$each, $a.$$p = (TMP_5 = function(str){var self = TMP_5.$$s || this, $a; + if (self.fragments == null) self.fragments = nil; +if (str == null) str = nil; + if ((($a = str['$is_a?']($scope.get('String'))) !== nil && (!$a.$$is_boolean || $a == true))) { + str = self.$fragment(str)}; + return self.fragments.$unshift(str);}, TMP_5.$$s = self, TMP_5), $a).call($b); + }); - def.$var_name = function() { + Opal.defn(self, '$wrap', function(pre, post) { var self = this; - return self.$name().$to_s()['$[]']($range(1, -1, false)); - }; + self.$unshift(pre); + return self.$push(post); + }); - def.$compile = function() { - var self = this, name = nil; + Opal.defn(self, '$fragment', function(str) { + var self = this; - self.$helper("gvars"); - if (self.$var_name()['$==']("&")) { - return self.$handle_global_match() - } else if (self.$var_name()['$==']("'")) { - return self.$handle_post_match() - } else if (self.$var_name()['$==']("`")) { - return self.$handle_pre_match()}; - name = self.$property(self.$var_name()); - self.$add_gvar(name); - return self.$push("$gvars" + (name)); - }; + return (($scope.get('Opal')).$$scope.get('Fragment')).$new(str, self.sexp); + }); - def.$handle_global_match = function() { - var $a, $b, TMP_2, self = this; + Opal.defn(self, '$error', function(msg) { + var self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; -if (tmp == null) tmp = nil; - return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](0))")}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + return self.compiler.$error(msg); + }); - def.$handle_pre_match = function() { - var $a, $b, TMP_3, self = this; + Opal.defn(self, '$scope', function() { + var self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; -if (tmp == null) tmp = nil; - return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$pre_match())")}, TMP_3.$$s = self, TMP_3), $a).call($b); - }; + return self.compiler.$scope(); + }); - return (def.$handle_post_match = function() { - var $a, $b, TMP_4, self = this; + Opal.defn(self, '$s', function() { + var $a, self = this, $splat_index = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(tmp){var self = TMP_4.$$s || this; -if (tmp == null) tmp = nil; - return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$post_match())")}, TMP_4.$$s = self, TMP_4), $a).call($b); - }, nil) && 'handle_post_match'; - })(self, $scope.get('Base')); + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = self.compiler).$s.apply($a, Opal.to_a(args)); + }); - (function($base, $super) { - function $GlobalAssignNode(){}; - var self = $GlobalAssignNode = $klass($base, $super, 'GlobalAssignNode', $GlobalAssignNode); + Opal.defn(self, '$expr?', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.level['$==']("expr"); + }); - self.$handle("gasgn"); + Opal.defn(self, '$recv?', function() { + var self = this; - self.$children("name", "value"); + return self.level['$==']("recv"); + }); - def.$var_name = function() { + Opal.defn(self, '$stmt?', function() { var self = this; - return self.$name().$to_s()['$[]']($range(1, -1, false)); - }; + return self.level['$==']("stmt"); + }); - return (def.$compile = function() { - var self = this, name = nil; + Opal.defn(self, '$process', function(sexp, level) { + var self = this; - self.$helper("gvars"); - name = self.$property(self.$var_name()); - self.$push("$gvars" + (name) + " = "); - return self.$push(self.$expr(self.$value())); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + if (level == null) { + level = "expr" + } + return self.compiler.$process(sexp, level); + }); - (function($base, $super) { - function $BackrefNode(){}; - var self = $BackrefNode = $klass($base, $super, 'BackrefNode', $BackrefNode); + Opal.defn(self, '$expr', function(sexp) { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.compiler.$process(sexp, "expr"); + }); - self.$handle("nth_ref"); + Opal.defn(self, '$recv', function(sexp) { + var self = this; - self.$children("index"); + return self.compiler.$process(sexp, "recv"); + }); - return (def.$compile = function() { - var $a, $b, TMP_5, self = this; + Opal.defn(self, '$stmt', function(sexp) { + var self = this; - self.$helper("gvars"); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(tmp){var self = TMP_5.$$s || this; -if (tmp == null) tmp = nil; - return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](" + (self.$index()) + "))")}, TMP_5.$$s = self, TMP_5), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.compiler.$process(sexp, "stmt"); + }); - (function($base, $super) { - function $ClassVariableNode(){}; - var self = $ClassVariableNode = $klass($base, $super, 'ClassVariableNode', $ClassVariableNode); + Opal.defn(self, '$expr_or_nil', function(sexp) { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + if (sexp !== false && sexp !== nil) { + return self.$expr(sexp) + } else { + return "nil" + }; + }); - self.$handle("cvar"); + Opal.defn(self, '$add_local', function(name) { + var self = this; - self.$children("name"); + return self.$scope().$add_scope_local(name.$to_sym()); + }); - return (def.$compile = function() { - var $a, $b, TMP_6, self = this; + Opal.defn(self, '$add_ivar', function(name) { + var self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_6 = function(tmp){var self = TMP_6.$$s || this; -if (tmp == null) tmp = nil; - return self.$push("((" + (tmp) + " = Opal.cvars['" + (self.$name()) + "']) == null ? nil : " + (tmp) + ")")}, TMP_6.$$s = self, TMP_6), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.$scope().$add_scope_ivar(name); + }); - (function($base, $super) { - function $ClassVarAssignNode(){}; - var self = $ClassVarAssignNode = $klass($base, $super, 'ClassVarAssignNode', $ClassVarAssignNode); + Opal.defn(self, '$add_gvar', function(name) { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.$scope().$add_scope_gvar(name); + }); - self.$handle("casgn"); + Opal.defn(self, '$add_temp', function(temp) { + var self = this; - self.$children("name", "value"); + return self.$scope().$add_scope_temp(temp); + }); - return (def.$compile = function() { + Opal.defn(self, '$helper', function(name) { var self = this; - self.$push("(Opal.cvars['" + (self.$name()) + "'] = "); - self.$push(self.$expr(self.$value())); - return self.$push(")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.compiler.$helper(name); + }); - (function($base, $super) { - function $ClassVarDeclNode(){}; - var self = $ClassVarDeclNode = $klass($base, $super, 'ClassVarDeclNode', $ClassVarDeclNode); + Opal.defn(self, '$with_temp', TMP_6 = function() { + var $a, $b, self = this, $iter = TMP_6.$$p, block = $iter || nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_6.$$p = null; + return ($a = ($b = self.compiler).$with_temp, $a.$$p = block.$to_proc(), $a).call($b); + }); - self.$handle("cvdecl"); + Opal.defn(self, '$in_while?', function() { + var self = this; - self.$children("name", "value"); + return self.compiler['$in_while?'](); + }); - return (def.$compile = function() { + return (Opal.defn(self, '$while_loop', function() { var self = this; - self.$push("(Opal.cvars['" + (self.$name()) + "'] = "); - self.$push(self.$expr(self.$value())); - return self.$push(")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - })(self) - })(self); + return self.compiler.$instance_variable_get("@while_loop"); + }), nil) && 'while_loop'; + })($scope.base, null) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/constants"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/literal"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $gvars = Opal.gvars; - Opal.add_stubs(['$require', '$handle', '$children', '$==', '$name', '$eof_content', '$compiler', '$push', '$expr', '$base', '$wrap', '$value']); + Opal.add_stubs(['$require', '$handle', '$push', '$to_s', '$type', '$children', '$value', '$recv?', '$wrap', '$join', '$keys', '$gsub', '$even?', '$length', '$+', '$chop', '$[]', '$translate_escape_chars', '$inspect', '$===', '$new', '$flags', '$each_line', '$==', '$s', '$source=', '$line', '$include', '$stmt?', '$!', '$include?', '$compile_split_lines', '$needs_semicolon?', '$each_with_index', '$expr', '$raise', '$last', '$each', '$requires_semicolon', '$helper', '$start', '$finish']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $ConstNode(){}; - var self = $ConstNode = $klass($base, $super, 'ConstNode', $ConstNode); + function $ValueNode(){}; + var self = $ValueNode = $klass($base, $super, 'ValueNode', $ValueNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("const"); + self.$handle("true", "false", "self", "nil"); - self.$children("name"); + Opal.defn(self, '$compile', function() { + var self = this; - return (def.$compile = function() { - var $a, $b, self = this; + return self.$push(self.$type().$to_s()); + }); - if ((($a = (($b = self.$name()['$==']("DATA")) ? self.$compiler().$eof_content() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("$__END__") - } else { - return self.$push("$scope.get('" + (self.$name()) + "')") - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return (Opal.defs(self, '$truthy_optimize?', function() { + var self = this; + + return true; + }), nil) && 'truthy_optimize?'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ConstDeclarationNode(){}; - var self = $ConstDeclarationNode = $klass($base, $super, 'ConstDeclarationNode', $ConstDeclarationNode); + function $NumericNode(){}; + var self = $NumericNode = $klass($base, $super, 'NumericNode', $NumericNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("cdecl"); + self.$handle("int", "float"); - self.$children("name", "base"); + self.$children("value"); + + Opal.defn(self, '$compile', function() { + var $a, self = this; + + self.$push(self.$value().$to_s()); + if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ")") + } else { + return nil + }; + }); - return (def.$compile = function() { + return (Opal.defs(self, '$truthy_optimize?', function() { var self = this; - self.$push(self.$expr(self.$base())); - return self.$wrap("Opal.cdecl($scope, '" + (self.$name()) + "', ", ")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return true; + }), nil) && 'truthy_optimize?'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ConstAssignNode(){}; - var self = $ConstAssignNode = $klass($base, $super, 'ConstAssignNode', $ConstAssignNode); + function $StringNode(){}; + var self = $StringNode = $klass($base, $super, 'StringNode', $StringNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("casgn"); + self.$handle("str"); - self.$children("base", "name", "value"); + self.$children("value"); + + Opal.cdecl($scope, 'ESCAPE_CHARS', $hash2(["a", "e"], {"a": "\\u0007", "e": "\\u001b"})); + + Opal.cdecl($scope, 'ESCAPE_REGEX', (new RegExp("(\\\\+)([" + $scope.get('ESCAPE_CHARS').$keys().$join("") + "])"))); + + Opal.defn(self, '$translate_escape_chars', function(inspect_string) { + var $a, $b, TMP_1, self = this; + + return ($a = ($b = inspect_string).$gsub, $a.$$p = (TMP_1 = function(original){var self = TMP_1.$$s || this, $a, $b; +if (original == null) original = nil; + if ((($a = (($b = $gvars['~']) === nil ? nil : $b['$[]'](1)).$length()['$even?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return original + } else { + return $rb_plus((($a = $gvars['~']) === nil ? nil : $a['$[]'](1)).$chop(), $scope.get('ESCAPE_CHARS')['$[]']((($a = $gvars['~']) === nil ? nil : $a['$[]'](2)))) + }}, TMP_1.$$s = self, TMP_1), $a).call($b, $scope.get('ESCAPE_REGEX')); + }); - return (def.$compile = function() { + return (Opal.defn(self, '$compile', function() { var self = this; - self.$push("Opal.casgn("); - self.$push(self.$expr(self.$base())); - self.$push(", '" + (self.$name()) + "', "); - self.$push(self.$expr(self.$value())); - return self.$push(")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.$push(self.$translate_escape_chars(self.$value().$inspect())); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ConstGetNode(){}; - var self = $ConstGetNode = $klass($base, $super, 'ConstGetNode', $ConstGetNode); + function $SymbolNode(){}; + var self = $SymbolNode = $klass($base, $super, 'SymbolNode', $SymbolNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("colon2"); + self.$handle("sym"); - self.$children("base", "name"); + self.$children("value"); - return (def.$compile = function() { + return (Opal.defn(self, '$compile', function() { var self = this; - self.$push("(("); - self.$push(self.$expr(self.$base())); - return self.$push(").$$scope.get('" + (self.$name()) + "'))"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return self.$push(self.$value().$to_s().$inspect()); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $TopConstNode(){}; - var self = $TopConstNode = $klass($base, $super, 'TopConstNode', $TopConstNode); + function $RegexpNode(){}; + var self = $RegexpNode = $klass($base, $super, 'RegexpNode', $RegexpNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("colon3"); + self.$handle("regexp"); - self.$children("name"); + self.$children("value", "flags"); - return (def.$compile = function() { - var self = this; + return (Opal.defn(self, '$compile', function() { + var self = this, $case = nil, message = nil; - return self.$push("Opal.get('" + (self.$name()) + "')"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + return (function() {$case = self.$value();if (""['$===']($case)) {return self.$push("/(?:)/")}else if (/\?<\w+\>/['$===']($case)) {message = "named captures are not supported in javascript: " + (self.$value().$inspect()); + return self.$push("self.$raise(new SyntaxError('" + (message) + "'))");}else {return self.$push("" + ($scope.get('Regexp').$new(self.$value()).$inspect()) + (self.$flags()))}})(); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - (function($base, $super) { - function $TopConstAssignNode(){}; - var self = $TopConstAssignNode = $klass($base, $super, 'TopConstAssignNode', $TopConstAssignNode); + (function($base) { + var $XStringLineSplitter, self = $XStringLineSplitter = $module($base, 'XStringLineSplitter'); var def = self.$$proto, $scope = self.$$scope; - self.$handle("casgn3"); - - self.$children("name", "value"); - - return (def.$compile = function() { - var self = this; + Opal.defn(self, '$compile_split_lines', function(value, sexp) { + var $a, $b, TMP_2, self = this, idx = nil; - self.$push("Opal.casgn(Opal.Object, '" + (self.$name()) + "', "); - self.$push(self.$expr(self.$value())); - return self.$push(")"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - })(self) - })(self); -}; + idx = 0; + return ($a = ($b = value).$each_line, $a.$$p = (TMP_2 = function(line){var self = TMP_2.$$s || this, $a, $b, line_sexp = nil, frag = nil; +if (line == null) line = nil; + if (idx['$=='](0)) { + self.$push(line) + } else { + line_sexp = self.$s(); + (($a = [[$rb_plus(sexp.$line(), idx), 0]]), $b = line_sexp, $b['$source='].apply($b, $a), $a[$a.length-1]); + frag = $scope.get('Fragment').$new(line, line_sexp); + self.$push(frag); + }; + return idx = $rb_plus(idx, 1);}, TMP_2.$$s = self, TMP_2), $a).call($b); + }) + })($scope.base); -/* Generated by Opal 0.8.0 */ -Opal.modules["pathname"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; + (function($base, $super) { + function $XStringNode(){}; + var self = $XStringNode = $klass($base, $super, 'XStringNode', $XStringNode); - Opal.add_stubs(['$==', '$raise', '$attr_reader', '$path', '$start_with?', '$!', '$absolute?', '$sub', '$new']); - (function($base, $super) { - function $Pathname(){}; - var self = $Pathname = $klass($base, $super, 'Pathname', $Pathname); + var def = self.$$proto, $scope = self.$$scope; - var def = self.$$proto, $scope = self.$$scope; + def.sexp = nil; + self.$include($scope.get('XStringLineSplitter')); - def.path = nil; - def.$initialize = function(path) { - var self = this; + self.$handle("xstr"); - if (path['$==']("\x00")) { - self.$raise($scope.get('ArgumentError'))}; - return self.path = path; - }; + self.$children("value"); - self.$attr_reader("path"); + Opal.defn(self, '$needs_semicolon?', function() { + var $a, self = this; - def['$=='] = function(other) { - var self = this; + return ($a = self['$stmt?'](), $a !== false && $a !== nil ?self.$value().$to_s()['$include?'](";")['$!']() : $a); + }); - return other.$path()['$=='](self.path); - }; + Opal.defn(self, '$compile', function() { + var $a, self = this; - def['$absolute?'] = function() { - var self = this; + self.$compile_split_lines(self.$value().$to_s(), self.sexp); + if ((($a = self['$needs_semicolon?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push(";")}; + if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ")") + } else { + return nil + }; + }); - return self.path['$start_with?']("/"); - }; + return (Opal.defn(self, '$start_line', function() { + var self = this; - def['$relative?'] = function() { - var self = this; + return self.sexp.$line(); + }), nil) && 'start_line'; + })($scope.base, $scope.get('Base')); - return self['$absolute?']()['$!'](); - }; + (function($base, $super) { + function $DynamicStringNode(){}; + var self = $DynamicStringNode = $klass($base, $super, 'DynamicStringNode', $DynamicStringNode); - def['$root?'] = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return self.path['$==']("/"); - }; + self.$handle("dstr"); - def.$parent = function() { - var $a, self = this, new_path = nil; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_3, self = this; - new_path = self.path.$sub(/\/([^\/]+\/?$)/, ""); - if (new_path['$==']("")) { - new_path = (function() {if ((($a = self['$absolute?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "/" - } else { - return "." - }; return nil; })()}; - return $scope.get('Pathname').$new(new_path); - }; + return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_3 = function(part, idx){var self = TMP_3.$$s || this, $a; +if (part == null) part = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(" + ") + }; + if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push(part.$inspect()) + } else if (part.$type()['$==']("evstr")) { + self.$push("("); + self.$push((function() {if ((($a = part['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(part['$[]'](1)) + } else { + return "\"\"" + }; return nil; })()); + self.$push(")"); + } else if (part.$type()['$==']("str")) { + self.$push(part['$[]'](1).$inspect()) + } else if (part.$type()['$==']("dstr")) { + self.$push("("); + self.$push(self.$expr(part)); + self.$push(")"); + } else { + self.$raise("Bad dstr part " + (part.$inspect())) + }; + if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ")") + } else { + return nil + };}, TMP_3.$$s = self, TMP_3), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$sub = function(args) { - var $a, self = this; + (function($base, $super) { + function $DynamicSymbolNode(){}; + var self = $DynamicSymbolNode = $klass($base, $super, 'DynamicSymbolNode', $DynamicSymbolNode); - args = $slice.call(arguments, 0); - return $scope.get('Pathname').$new(($a = self.path).$sub.apply($a, [].concat(args))); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$cleanpath = function() { - var self = this; + self.$handle("dsym"); - return Opal.normalize_loadable_path(self.path); - }; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_4, self = this; - def.$to_path = function() { - var self = this; + ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_4 = function(part, idx){var self = TMP_4.$$s || this, $a; +if (part == null) part = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(" + ") + }; + if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push(part.$inspect()) + } else if (part.$type()['$==']("evstr")) { + return self.$push(self.$expr(self.$s("call", part.$last(), "to_s", self.$s("arglist")))) + } else if (part.$type()['$==']("str")) { + return self.$push(part.$last().$inspect()) + } else { + return self.$raise("Bad dsym part") + };}, TMP_4.$$s = self, TMP_4), $a).call($b); + return self.$wrap("(", ")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - return self.path; - }; + (function($base, $super) { + function $DynamicXStringNode(){}; + var self = $DynamicXStringNode = $klass($base, $super, 'DynamicXStringNode', $DynamicXStringNode); - def.$hash = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return self.path; - }; + self.$include($scope.get('XStringLineSplitter')); - Opal.defn(self, '$to_str', def.$to_path); + self.$handle("dxstr"); - return Opal.defn(self, '$to_s', def.$to_path); - })(self, null); - return (function($base) { - var self = $module($base, 'Kernel'); + Opal.defn(self, '$requires_semicolon', function(code) { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = self['$stmt?'](), $a !== false && $a !== nil ?code['$include?'](";")['$!']() : $a); + }); - Opal.defn(self, '$Pathname', function(path) { - var self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_5, self = this, needs_semicolon = nil; - return $scope.get('Pathname').$new(path); - }) - })(self); -}; + needs_semicolon = false; + ($a = ($b = self.$children()).$each, $a.$$p = (TMP_5 = function(part){var self = TMP_5.$$s || this, $a; + if (self.sexp == null) self.sexp = nil; +if (part == null) part = nil; + if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$compile_split_lines(part.$to_s(), self.sexp); + if ((($a = self.$requires_semicolon(part.$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { + return needs_semicolon = true + } else { + return nil + }; + } else if (part.$type()['$==']("evstr")) { + return self.$push(self.$expr(part['$[]'](1))) + } else if (part.$type()['$==']("str")) { + self.$compile_split_lines(part.$last().$to_s(), part); + if ((($a = self.$requires_semicolon(part.$last().$to_s())) !== nil && (!$a.$$is_boolean || $a == true))) { + return needs_semicolon = true + } else { + return nil + }; + } else { + return self.$raise("Bad dxstr part") + }}, TMP_5.$$s = self, TMP_5), $a).call($b); + if (needs_semicolon !== false && needs_semicolon !== nil) { + self.$push(";")}; + if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ")") + } else { + return nil + }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/runtime_helpers"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + (function($base, $super) { + function $DynamicRegexpNode(){}; + var self = $DynamicRegexpNode = $klass($base, $super, 'DynamicRegexpNode', $DynamicRegexpNode); - Opal.add_stubs(['$require', '$new', '$children', '$==', '$include?', '$to_sym', '$<<', '$define_method', '$to_proc', '$meth', '$__send__', '$raise', '$helper', '$[]', '$arglist', '$js_truthy', '$js_falsy']); - self.$require("set"); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + var def = self.$$proto, $scope = self.$$scope; - var def = self.$$proto, $scope = self.$$scope; + self.$handle("dregx"); - (function($base) { - var self = $module($base, 'Nodes'); + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_6, self = this; - var def = self.$$proto, $scope = self.$$scope; + ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_6 = function(part, idx){var self = TMP_6.$$s || this, $a; +if (part == null) part = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(" + ") + }; + if ((($a = $scope.get('String')['$==='](part)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push(part.$inspect()) + } else if (part.$type()['$==']("str")) { + return self.$push(part['$[]'](1).$inspect()) + } else { + return self.$push(self.$expr(part['$[]'](1))) + };}, TMP_6.$$s = self, TMP_6), $a).call($b); + return self.$wrap("(new RegExp(", "))"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $RuntimeHelpers(){}; - var self = $RuntimeHelpers = $klass($base, $super, 'RuntimeHelpers', $RuntimeHelpers); - - var def = self.$$proto, $scope = self.$$scope, TMP_1, $a, $b, TMP_2, $c, TMP_3; - - Opal.cdecl($scope, 'HELPERS', $scope.get('Set').$new()); + function $InclusiveRangeNode(){}; + var self = $InclusiveRangeNode = $klass($base, $super, 'InclusiveRangeNode', $InclusiveRangeNode); - self.$children("recvr", "meth", "arglist"); + var def = self.$$proto, $scope = self.$$scope; - Opal.defs(self, '$compatible?', function(recvr, meth, arglist) { - var $a, self = this; + self.$handle("irange"); - return (($a = recvr['$=='](["const", "Opal"])) ? $scope.get('HELPERS')['$include?'](meth.$to_sym()) : $a); - }); + self.$children("start", "finish"); - Opal.defs(self, '$helper', TMP_1 = function(name) { - var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - TMP_1.$$p = null; - $scope.get('HELPERS')['$<<'](name); - return ($a = ($b = self).$define_method, $a.$$p = block.$to_proc(), $a).call($b, "compile_" + (name)); - }); + self.$helper("range"); + return self.$push("$range(", self.$expr(self.$start()), ", ", self.$expr(self.$finish()), ", false)"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$compile = function() { - var $a, self = this; + (function($base, $super) { + function $ExclusiveRangeNode(){}; + var self = $ExclusiveRangeNode = $klass($base, $super, 'ExclusiveRangeNode', $ExclusiveRangeNode); - if ((($a = $scope.get('HELPERS')['$include?'](self.$meth().$to_sym())) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$__send__("compile_" + (self.$meth())) - } else { - return self.$raise("Helper not supported: " + (self.$meth())) - }; - }; + var def = self.$$proto, $scope = self.$$scope; - ($a = ($b = self).$helper, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, sexp = nil; + self.$handle("erange"); - if ((($a = sexp = self.$arglist()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise("truthy? requires an object") - }; - return self.$js_truthy(sexp);}, TMP_2.$$s = self, TMP_2), $a).call($b, "truthy?"); + self.$children("start", "finish"); - return ($a = ($c = self).$helper, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a, sexp = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - if ((($a = sexp = self.$arglist()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$raise("falsy? requires an object") - }; - return self.$js_falsy(sexp);}, TMP_3.$$s = self, TMP_3), $a).call($c, "falsy?"); - })(self, $scope.get('Base')) - })(self) - })(self); + self.$helper("range"); + return self.$push("$range(", self.$expr(self.$start()), ", ", self.$expr(self.$finish()), ", true)"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/call"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/variables"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$require', '$handle', '$children', '$[]=', '$define_method', '$to_proc', '$handle_special', '$compile_default?', '$<<', '$method_calls', '$compiler', '$to_sym', '$meth', '$using_irb?', '$compile_irb_var', '$default_compile', '$mid_to_jsid', '$to_s', '$any?', '$==', '$first', '$[]', '$arglist', '$===', '$last', '$type', '$pop', '$iter', '$new_temp', '$scope', '$expr', '$recv', '$recv_sexp', '$s', '$!', '$insert', '$push', '$unshift', '$queue_temp', '$recvr', '$=~', '$with_temp', '$variable', '$intern', '$irb?', '$top?', '$nil?', '$include?', '$__send__', '$compatible?', '$compile', '$new', '$each', '$add_special', '$inline_operators?', '$operator_helpers', '$fragment', '$compile_default!', '$resolve', '$requires', '$file', '$dirname', '$cleanpath', '$join', '$Pathname', '$inspect', '$process', '$class_scope?', '$required_trees', '$handle_block_given_call', '$def?', '$mid', '$handle_part', '$map', '$expand_path', '$split', '$dynamic_require_severity', '$error', '$line', '$warning', '$inject']); - self.$require("set"); - self.$require("pathname"); + Opal.add_stubs(['$require', '$handle', '$children', '$irb?', '$compiler', '$top?', '$scope', '$using_irb?', '$push', '$variable', '$to_s', '$var_name', '$with_temp', '$property', '$wrap', '$add_local', '$expr', '$value', '$recv?', '$[]', '$name', '$ivar', '$add_ivar', '$helper', '$==', '$handle_global_match', '$handle_post_match', '$handle_pre_match', '$add_gvar', '$index']); self.$require("opal/nodes/base"); - self.$require("opal/nodes/runtime_helpers"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $CallNode(){}; - var self = $CallNode = $klass($base, $super, 'CallNode', $CallNode); - - var def = self.$$proto, $scope = self.$$scope, TMP_1, $a, $b, TMP_6, $c, TMP_8, $d, TMP_9, $e, TMP_10, $f, TMP_11, $g, TMP_12, $h, TMP_13, $i, TMP_14, $j, TMP_15; - - def.assignment = def.compiler = def.sexp = def.level = def.compile_default = nil; - self.$handle("call"); + function $LocalVariableNode(){}; + var self = $LocalVariableNode = $klass($base, $super, 'LocalVariableNode', $LocalVariableNode); - self.$children("recvr", "meth", "arglist", "iter"); + var def = self.$$proto, $scope = self.$$scope; - Opal.cdecl($scope, 'SPECIALS', $hash2([], {})); + self.$handle("lvar"); - Opal.cdecl($scope, 'OPERATORS', $hash2(["+", "-", "*", "/", "<", "<=", ">", ">="], {"+": "plus", "-": "minus", "*": "times", "/": "divide", "<": "lt", "<=": "le", ">": "gt", ">=": "ge"})); + self.$children("var_name"); - Opal.defs(self, '$add_special', TMP_1 = function(name, options) { - var $a, $b, self = this, $iter = TMP_1.$$p, handler = $iter || nil; + Opal.defn(self, '$using_irb?', function() { + var $a, self = this; - if (options == null) { - options = $hash2([], {}) - } - TMP_1.$$p = null; - $scope.get('SPECIALS')['$[]='](name, options); - return ($a = ($b = self).$define_method, $a.$$p = handler.$to_proc(), $a).call($b, "handle_" + (name)); + return ($a = self.$compiler()['$irb?'](), $a !== false && $a !== nil ?self.$scope()['$top?']() : $a); }); - def.$compile = function() { - var $a, self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; - self.$handle_special(); - if ((($a = self['$compile_default?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return nil + return self.$push(self.$variable(self.$var_name().$to_s())) }; - self.$compiler().$method_calls()['$<<'](self.$meth().$to_sym()); - if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_irb_var()}; - return self.$default_compile(); - }; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; +if (tmp == null) tmp = nil; + self.$push(self.$property(self.$var_name().$to_s())); + return self.$wrap("((" + (tmp) + " = Opal.irb_vars", ") == null ? nil : " + (tmp) + ")");}, TMP_1.$$s = self, TMP_1), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$default_compile = function() { - var $a, $b, TMP_2, $c, self = this, mid = nil, splat = nil, block = nil, blktmp = nil, tmprecv = nil, recv_code = nil, call_recv = nil, args = nil; + (function($base, $super) { + function $LocalAssignNode(){}; + var self = $LocalAssignNode = $klass($base, $super, 'LocalAssignNode', $LocalAssignNode); - mid = self.$mid_to_jsid(self.$meth().$to_s()); - splat = ($a = ($b = self.$arglist()['$[]']($range(1, -1, false)))['$any?'], $a.$$p = (TMP_2 = function(a){var self = TMP_2.$$s || this; -if (a == null) a = nil; - return a.$first()['$==']("splat")}, TMP_2.$$s = self, TMP_2), $a).call($b); - if ((($a = ($c = $scope.get('Sexp')['$==='](self.$arglist().$last()), $c !== false && $c !== nil ?self.$arglist().$last().$type()['$==']("block_pass") : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { - block = self.$arglist().$pop() - } else if ((($a = self.$iter()) !== nil && (!$a.$$is_boolean || $a == true))) { - block = self.$iter()}; - if (block !== false && block !== nil) { - blktmp = self.$scope().$new_temp()}; - if ((($a = ((($c = splat) !== false && $c !== nil) ? $c : blktmp)) !== nil && (!$a.$$is_boolean || $a == true))) { - tmprecv = self.$scope().$new_temp()}; - if (block !== false && block !== nil) { - block = self.$expr(block)}; - recv_code = self.$recv(self.$recv_sexp()); - call_recv = self.$s("js_tmp", ((($a = tmprecv) !== false && $a !== nil) ? $a : recv_code)); - if ((($a = (($c = blktmp !== false && blktmp !== nil) ? splat['$!']() : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$arglist().$insert(1, call_recv)}; - args = self.$expr(self.$arglist()); - if (tmprecv !== false && tmprecv !== nil) { - self.$push("(" + (tmprecv) + " = ", recv_code, ")" + (mid)) - } else { - self.$push(recv_code, mid) - }; - if (blktmp !== false && blktmp !== nil) { - self.$unshift("(" + (blktmp) + " = "); - self.$push(", " + (blktmp) + ".$$p = ", block, ", " + (blktmp) + ")");}; - if (splat !== false && splat !== nil) { - self.$push(".apply(", (((($a = tmprecv) !== false && $a !== nil) ? $a : recv_code)), ", ", args, ")") - } else if (blktmp !== false && blktmp !== nil) { - self.$push(".call(", args, ")") + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("lasgn"); + + self.$children("var_name", "value"); + + Opal.defn(self, '$using_irb?', function() { + var $a, self = this; + + return ($a = self.$compiler()['$irb?'](), $a !== false && $a !== nil ?self.$scope()['$top?']() : $a); + }); + + return (Opal.defn(self, '$compile', function() { + var $a, self = this; + + if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("Opal.irb_vars" + (self.$property(self.$var_name().$to_s())) + " = ") } else { - self.$push("(", args, ")") + self.$add_local(self.$variable(self.$var_name().$to_s())); + self.$push("" + (self.$variable(self.$var_name().$to_s())) + " = "); }; - if (blktmp !== false && blktmp !== nil) { - return self.$scope().$queue_temp(blktmp) + self.$push(self.$expr(self.$value())); + if ((($a = self['$recv?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ")") } else { return nil }; - }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$recv_sexp = function() { - var $a, self = this; + (function($base, $super) { + function $InstanceVariableNode(){}; + var self = $InstanceVariableNode = $klass($base, $super, 'InstanceVariableNode', $InstanceVariableNode); - return ((($a = self.$recvr()) !== false && $a !== nil) ? $a : self.$s("self")); - }; + var def = self.$$proto, $scope = self.$$scope; - def['$attr_assignment?'] = function() { - var $a, self = this; + self.$handle("ivar"); - return ((($a = self.assignment) !== false && $a !== nil) ? $a : self.assignment = self.$meth().$to_s()['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[\\da-z]+\\=" + $scope.get('REGEXP_END'))))); - }; + self.$children("name"); - def.$compile_irb_var = function() { - var $a, $b, TMP_3, self = this; + Opal.defn(self, '$var_name', function() { + var self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this, lvar = nil, call = nil; -if (tmp == null) tmp = nil; - lvar = self.$variable(self.$meth()); - call = self.$s("call", self.$s("self"), self.$meth().$intern(), self.$s("arglist")); - return self.$push("((" + (tmp) + " = Opal.irb_vars." + (lvar) + ") == null ? ", self.$expr(call), " : " + (tmp) + ")");}, TMP_3.$$s = self, TMP_3), $a).call($b); - }; + return self.$name().$to_s()['$[]']($range(1, -1, false)); + }); - def.$compile_assignment = function() { - var $a, $b, TMP_4, self = this; + return (Opal.defn(self, '$compile', function() { + var self = this, name = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(args_tmp){var self = TMP_4.$$s || this, $a, $b, TMP_5; -if (args_tmp == null) args_tmp = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(recv_tmp){var self = TMP_5.$$s || this, args = nil, mid = nil; -if (recv_tmp == null) recv_tmp = nil; - args = self.$expr(self.$arglist()); - mid = self.$mid_to_jsid(self.$meth().$to_s()); - return self.$push("((" + (args_tmp) + " = [", args, $rb_plus("]), ", "" + (recv_tmp) + " = "), self.$recv(self.$recv_sexp()), ", ", recv_tmp, mid, $rb_plus(".apply(" + (recv_tmp) + ", " + (args_tmp) + "), ", "" + (args_tmp) + "[" + (args_tmp) + ".length-1])"));}, TMP_5.$$s = self, TMP_5), $a).call($b)}, TMP_4.$$s = self, TMP_4), $a).call($b); - }; + name = self.$property(self.$ivar(self.$var_name())); + self.$add_ivar(name); + return self.$push("self" + (name)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def['$using_irb?'] = function() { - var $a, $b, $c, $d, self = this; + (function($base, $super) { + function $InstanceAssignNode(){}; + var self = $InstanceAssignNode = $klass($base, $super, 'InstanceAssignNode', $InstanceAssignNode); - return ($a = ($b = ($c = ($d = self.compiler['$irb?'](), $d !== false && $d !== nil ?self.$scope()['$top?']() : $d), $c !== false && $c !== nil ?self.$arglist()['$=='](self.$s("arglist")) : $c), $b !== false && $b !== nil ?self.$recvr()['$nil?']() : $b), $a !== false && $a !== nil ?self.$iter()['$nil?']() : $a); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$handle_special = function() { - var $a, self = this; + self.$handle("iasgn"); - self.compile_default = true; - if ((($a = $scope.get('SPECIALS')['$include?'](self.$meth())) !== nil && (!$a.$$is_boolean || $a == true))) { - self.compile_default = false; - return self.$__send__("handle_" + (self.$meth())); - } else if ((($a = $scope.get('RuntimeHelpers')['$compatible?'](self.$recvr(), self.$meth(), self.$arglist())) !== nil && (!$a.$$is_boolean || $a == true))) { - self.compile_default = false; - return self.$push($scope.get('RuntimeHelpers').$new(self.sexp, self.level, self.compiler).$compile()); - } else { - return nil - }; - }; + self.$children("name", "value"); - def['$compile_default!'] = function() { + Opal.defn(self, '$var_name', function() { var self = this; - return self.compile_default = true; - }; + return self.$name().$to_s()['$[]']($range(1, -1, false)); + }); + + return (Opal.defn(self, '$compile', function() { + var self = this, name = nil; + + name = self.$property(self.$ivar(self.$var_name())); + self.$push("self" + (name) + " = "); + return self.$push(self.$expr(self.$value())); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + + (function($base, $super) { + function $GlobalVariableNode(){}; + var self = $GlobalVariableNode = $klass($base, $super, 'GlobalVariableNode', $GlobalVariableNode); + + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("gvar"); + + self.$children("name"); - def['$compile_default?'] = function() { + Opal.defn(self, '$var_name', function() { var self = this; - return self.compile_default; - }; + return self.$name().$to_s()['$[]']($range(1, -1, false)); + }); - ($a = ($b = $scope.get('OPERATORS')).$each, $a.$$p = (TMP_6 = function(operator, name){var self = TMP_6.$$s || this, $a, $b, TMP_7; -if (operator == null) operator = nil;if (name == null) name = nil; - return ($a = ($b = self).$add_special, $a.$$p = (TMP_7 = function(){var self = TMP_7.$$s || this, $a, lhs = nil, rhs = nil; + Opal.defn(self, '$compile', function() { + var self = this, name = nil; - if ((($a = self.$compiler()['$inline_operators?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$compiler().$operator_helpers()['$<<'](operator.$to_sym()); - $a = [self.$expr(self.$recvr()), self.$expr(self.$arglist()['$[]'](1))], lhs = $a[0], rhs = $a[1]; - self.$push(self.$fragment("$rb_" + (name) + "(")); - self.$push(lhs); - self.$push(self.$fragment(", ")); - self.$push(rhs); - return self.$push(self.$fragment(")")); - } else { - return self['$compile_default!']() - }}, TMP_7.$$s = self, TMP_7), $a).call($b, operator.$to_sym())}, TMP_6.$$s = self, TMP_6), $a).call($b); + self.$helper("gvars"); + if (self.$var_name()['$==']("&")) { + return self.$handle_global_match() + } else if (self.$var_name()['$==']("'")) { + return self.$handle_post_match() + } else if (self.$var_name()['$==']("`")) { + return self.$handle_pre_match()}; + name = self.$property(self.$var_name()); + self.$add_gvar(name); + return self.$push("$gvars" + (name)); + }); - ($a = ($c = self).$add_special, $a.$$p = (TMP_8 = function(){var self = TMP_8.$$s || this, $a, str = nil; + Opal.defn(self, '$handle_global_match', function() { + var $a, $b, TMP_2, self = this; - self['$compile_default!'](); - str = $scope.get('DependencyResolver').$new(self.$compiler(), self.$arglist()['$[]'](1)).$resolve(); - if ((($a = str['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$compiler().$requires()['$<<'](str) - }; - return self.$push(self.$fragment(""));}, TMP_8.$$s = self, TMP_8), $a).call($c, "require"); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; +if (tmp == null) tmp = nil; + return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](0))")}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - ($a = ($d = self).$add_special, $a.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this, arg = nil, file = nil, dir = nil; + Opal.defn(self, '$handle_pre_match', function() { + var $a, $b, TMP_3, self = this; - arg = self.$arglist()['$[]'](1); - file = self.$compiler().$file(); - if (arg['$[]'](0)['$==']("str")) { - dir = $scope.get('File').$dirname(file); - self.$compiler().$requires()['$<<'](self.$Pathname(dir).$join(arg['$[]'](1)).$cleanpath().$to_s());}; - self.$push(self.$fragment("self.$require(" + (file.$inspect()) + "+ '/../' + ")); - self.$push(self.$process(self.$arglist())); - return self.$push(self.$fragment(")"));}, TMP_9.$$s = self, TMP_9), $a).call($d, "require_relative"); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; +if (tmp == null) tmp = nil; + return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$pre_match())")}, TMP_3.$$s = self, TMP_3), $a).call($b); + }); - ($a = ($e = self).$add_special, $a.$$p = (TMP_10 = function(){var self = TMP_10.$$s || this, $a, str = nil; + return (Opal.defn(self, '$handle_post_match', function() { + var $a, $b, TMP_4, self = this; - if ((($a = self.$scope()['$class_scope?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self['$compile_default!'](); - str = $scope.get('DependencyResolver').$new(self.$compiler(), self.$arglist()['$[]'](2)).$resolve(); - if ((($a = str['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$compiler().$requires()['$<<'](str) - }; - return self.$push(self.$fragment("")); - } else { - return nil - }}, TMP_10.$$s = self, TMP_10), $a).call($e, "autoload"); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(tmp){var self = TMP_4.$$s || this; +if (tmp == null) tmp = nil; + return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$post_match())")}, TMP_4.$$s = self, TMP_4), $a).call($b); + }), nil) && 'handle_post_match'; + })($scope.base, $scope.get('Base')); - ($a = ($f = self).$add_special, $a.$$p = (TMP_11 = function(){var self = TMP_11.$$s || this, arg = nil, relative_path = nil, dir = nil, full_path = nil; + (function($base, $super) { + function $GlobalAssignNode(){}; + var self = $GlobalAssignNode = $klass($base, $super, 'GlobalAssignNode', $GlobalAssignNode); - arg = self.$arglist()['$[]'](1); - if (arg['$[]'](0)['$==']("str")) { - relative_path = arg['$[]'](1); - self.$compiler().$required_trees()['$<<'](relative_path); - dir = $scope.get('File').$dirname(self.$compiler().$file()); - full_path = self.$Pathname(dir).$join(relative_path).$cleanpath().$to_s(); - arg['$[]='](1, full_path);}; - self['$compile_default!'](); - return self.$push(self.$fragment(""));}, TMP_11.$$s = self, TMP_11), $a).call($f, "require_tree"); + var def = self.$$proto, $scope = self.$$scope; - ($a = ($g = self).$add_special, $a.$$p = (TMP_12 = function(){var self = TMP_12.$$s || this; - if (self.sexp == null) self.sexp = nil; + self.$handle("gasgn"); - return self.$push(self.$compiler().$handle_block_given_call(self.sexp))}, TMP_12.$$s = self, TMP_12), $a).call($g, "block_given?"); + self.$children("name", "value"); - ($a = ($h = self).$add_special, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this, $a; + Opal.defn(self, '$var_name', function() { + var self = this; - if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) - } else { - return self.$push(self.$fragment("nil")) - }}, TMP_13.$$s = self, TMP_13), $a).call($h, "__callee__"); + return self.$name().$to_s()['$[]']($range(1, -1, false)); + }); - ($a = ($i = self).$add_special, $a.$$p = (TMP_14 = function(){var self = TMP_14.$$s || this, $a; + return (Opal.defn(self, '$compile', function() { + var self = this, name = nil; - if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) - } else { - return self.$push(self.$fragment("nil")) - }}, TMP_14.$$s = self, TMP_14), $a).call($i, "__method__"); + self.$helper("gvars"); + name = self.$property(self.$var_name()); + self.$push("$gvars" + (name) + " = "); + return self.$push(self.$expr(self.$value())); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - ($a = ($j = self).$add_special, $a.$$p = (TMP_15 = function(){var self = TMP_15.$$s || this; + (function($base, $super) { + function $BackrefNode(){}; + var self = $BackrefNode = $klass($base, $super, 'BackrefNode', $BackrefNode); - return self.$push(self.$fragment("debugger"))}, TMP_15.$$s = self, TMP_15), $a).call($j, "debugger"); + var def = self.$$proto, $scope = self.$$scope; - return (function($base, $super) { - function $DependencyResolver(){}; - var self = $DependencyResolver = $klass($base, $super, 'DependencyResolver', $DependencyResolver); + self.$handle("nth_ref"); - var def = self.$$proto, $scope = self.$$scope; + self.$children("index"); - def.sexp = def.compiler = nil; - def.$initialize = function(compiler, sexp) { - var self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_5, self = this; - self.compiler = compiler; - return self.sexp = sexp; - }; + self.$helper("gvars"); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(tmp){var self = TMP_5.$$s || this; +if (tmp == null) tmp = nil; + return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](" + (self.$index()) + "))")}, TMP_5.$$s = self, TMP_5), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$resolve = function() { - var self = this; + (function($base, $super) { + function $ClassVariableNode(){}; + var self = $ClassVariableNode = $klass($base, $super, 'ClassVariableNode', $ClassVariableNode); + + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("cvar"); + + self.$children("name"); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_6, self = this; + + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_6 = function(tmp){var self = TMP_6.$$s || this; +if (tmp == null) tmp = nil; + return self.$push("((" + (tmp) + " = Opal.cvars['" + (self.$name()) + "']) == null ? nil : " + (tmp) + ")")}, TMP_6.$$s = self, TMP_6), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + + (function($base, $super) { + function $ClassVarAssignNode(){}; + var self = $ClassVarAssignNode = $klass($base, $super, 'ClassVarAssignNode', $ClassVarAssignNode); + + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("casgn"); + + self.$children("name", "value"); + + return (Opal.defn(self, '$compile', function() { + var self = this; + + self.$push("(Opal.cvars['" + (self.$name()) + "'] = "); + self.$push(self.$expr(self.$value())); + return self.$push(")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + + (function($base, $super) { + function $ClassVarDeclNode(){}; + var self = $ClassVarDeclNode = $klass($base, $super, 'ClassVarDeclNode', $ClassVarDeclNode); - return self.$handle_part(self.sexp); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$handle_part = function(sexp) { - var $a, $b, TMP_16, self = this, type = nil, _ = nil, recv = nil, meth = nil, args = nil, parts = nil, msg = nil, $case = nil; + self.$handle("cvdecl"); - type = sexp.$type(); - if (type['$==']("str")) { - return sexp['$[]'](1) - } else if (type['$==']("call")) { - $a = Opal.to_ary(sexp), _ = ($a[0] == null ? nil : $a[0]), recv = ($a[1] == null ? nil : $a[1]), meth = ($a[2] == null ? nil : $a[2]), args = ($a[3] == null ? nil : $a[3]); - parts = ($a = ($b = args['$[]']($range(1, -1, false))).$map, $a.$$p = (TMP_16 = function(s){var self = TMP_16.$$s || this; -if (s == null) s = nil; - return self.$handle_part(s)}, TMP_16.$$s = self, TMP_16), $a).call($b); - if (recv['$=='](["const", "File"])) { - if (meth['$==']("expand_path")) { - return ($a = self).$expand_path.apply($a, [].concat(parts)) - } else if (meth['$==']("join")) { - return self.$expand_path(parts.$join("/")) - } else if (meth['$==']("dirname")) { - return self.$expand_path(parts['$[]'](0).$split("/")['$[]']($range(0, -1, true)).$join("/"))}};}; - msg = "Cannot handle dynamic require"; - return (function() {$case = self.compiler.$dynamic_require_severity();if ("error"['$===']($case)) {return self.compiler.$error(msg, self.sexp.$line())}else if ("warning"['$===']($case)) {return self.compiler.$warning(msg, self.sexp.$line())}else { return nil }})(); - }; + self.$children("name", "value"); - return (def.$expand_path = function(path, base) { - var $a, $b, TMP_17, self = this; + return (Opal.defn(self, '$compile', function() { + var self = this; - if (base == null) { - base = "" - } - return ($a = ($b = (((("") + (base)) + "/") + (path)).$split("/")).$inject, $a.$$p = (TMP_17 = function(p, part){var self = TMP_17.$$s || this; -if (p == null) p = nil;if (part == null) part = nil; - if (part['$==']("")) { - } else if (part['$==']("..")) { - p.$pop() - } else { - p['$<<'](part) - }; - return p;}, TMP_17.$$s = self, TMP_17), $a).call($b, []).$join("/"); - }, nil) && 'expand_path'; - })(self, null); - })(self, $scope.get('Base')) - })(self) - })(self); + self.$push("(Opal.cvars['" + (self.$name()) + "'] = "); + self.$push(self.$expr(self.$value())); + return self.$push(")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/call_special"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/constants"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$handle', '$children', '$=~', '$to_s', '$meth', '$with_temp', '$expr', '$arglist', '$mid_to_jsid', '$push', '$recv', '$recv_sexp', '$s', '$lhs', '$rhs', '$process', '$recvr', '$[]', '$args', '$op', '$===', '$compile_or', '$compile_and', '$compile_operator', '$to_sym', '$first_arg', '$mid']); + Opal.add_stubs(['$require', '$handle', '$children', '$==', '$name', '$eof_content', '$compiler', '$push', '$expr', '$base', '$wrap', '$value']); self.$require("opal/nodes/base"); - self.$require("opal/nodes/call"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $AttrAssignNode(){}; - var self = $AttrAssignNode = $klass($base, $super, 'AttrAssignNode', $AttrAssignNode); + function $ConstNode(){}; + var self = $ConstNode = $klass($base, $super, 'ConstNode', $ConstNode); - var def = self.$$proto, $scope = self.$$scope, TMP_1; + var def = self.$$proto, $scope = self.$$scope; - self.$handle("attrasgn"); + self.$handle("const"); - self.$children("recvr", "meth", "arglist"); + self.$children("name"); - return (def.$default_compile = TMP_1 = function() {var $zuper = $slice.call(arguments, 0); - var $a, $b, TMP_2, self = this, $iter = TMP_1.$$p, $yield = $iter || nil; + return (Opal.defn(self, '$compile', function() { + var $a, $b, self = this; - TMP_1.$$p = null; - if ((($a = ($b = self.$meth().$to_s()['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "\\w+=" + $scope.get('REGEXP_END')))), ($b === nil || $b === false))) !== nil && (!$a.$$is_boolean || $a == true))) { - return Opal.find_super_dispatcher(self, 'default_compile', TMP_1, $iter).apply(self, $zuper)}; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(args_tmp){var self = TMP_2.$$s || this, $a, $b, TMP_3; -if (args_tmp == null) args_tmp = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(recv_tmp){var self = TMP_3.$$s || this, args = nil, mid = nil; -if (recv_tmp == null) recv_tmp = nil; - args = self.$expr(self.$arglist()); - mid = self.$mid_to_jsid(self.$meth().$to_s()); - return self.$push("((" + (args_tmp) + " = [", args, $rb_plus("]), ", "" + (recv_tmp) + " = "), self.$recv(self.$recv_sexp()), ", ", recv_tmp, mid, $rb_plus(".apply(" + (recv_tmp) + ", " + (args_tmp) + "), ", "" + (args_tmp) + "[" + (args_tmp) + ".length-1])"));}, TMP_3.$$s = self, TMP_3), $a).call($b)}, TMP_2.$$s = self, TMP_2), $a).call($b); - }, nil) && 'default_compile'; - })(self, $scope.get('CallNode')); + if ((($a = (($b = self.$name()['$==']("DATA")) ? self.$compiler().$eof_content() : self.$name()['$==']("DATA"))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("$__END__") + } else { + return self.$push("$scope.get('" + (self.$name()) + "')") + }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $Match3Node(){}; - var self = $Match3Node = $klass($base, $super, 'Match3Node', $Match3Node); + function $ConstDeclarationNode(){}; + var self = $ConstDeclarationNode = $klass($base, $super, 'ConstDeclarationNode', $ConstDeclarationNode); var def = self.$$proto, $scope = self.$$scope; - def.level = nil; - self.$handle("match3"); + self.$handle("cdecl"); - self.$children("lhs", "rhs"); + self.$children("name", "base"); - return (def.$compile = function() { - var self = this, sexp = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - sexp = self.$s("call", self.$lhs(), "=~", self.$s("arglist", self.$rhs())); - return self.$push(self.$process(sexp, self.level)); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + self.$push(self.$expr(self.$base())); + return self.$wrap("Opal.cdecl($scope, '" + (self.$name()) + "', ", ")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $OpAsgnOrNode(){}; - var self = $OpAsgnOrNode = $klass($base, $super, 'OpAsgnOrNode', $OpAsgnOrNode); + function $ConstAssignNode(){}; + var self = $ConstAssignNode = $klass($base, $super, 'ConstAssignNode', $ConstAssignNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("op_asgn_or"); + self.$handle("casgn"); - self.$children("recvr", "rhs"); + self.$children("base", "name", "value"); - return (def.$compile = function() { - var self = this, sexp = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - sexp = self.$s("or", self.$recvr(), self.$rhs()); - return self.$push(self.$expr(sexp)); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + self.$push("Opal.casgn("); + self.$push(self.$expr(self.$base())); + self.$push(", '" + (self.$name()) + "', "); + self.$push(self.$expr(self.$value())); + return self.$push(")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $OpAsgnAndNode(){}; - var self = $OpAsgnAndNode = $klass($base, $super, 'OpAsgnAndNode', $OpAsgnAndNode); + function $ConstGetNode(){}; + var self = $ConstGetNode = $klass($base, $super, 'ConstGetNode', $ConstGetNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("op_asgn_and"); + self.$handle("colon2"); - self.$children("recvr", "rhs"); + self.$children("base", "name"); - return (def.$compile = function() { - var self = this, sexp = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - sexp = self.$s("and", self.$recvr(), self.$rhs()); - return self.$push(self.$expr(sexp)); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + self.$push("(("); + self.$push(self.$expr(self.$base())); + return self.$push(").$$scope.get('" + (self.$name()) + "'))"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $OpAsgn1Node(){}; - var self = $OpAsgn1Node = $klass($base, $super, 'OpAsgn1Node', $OpAsgn1Node); + function $TopConstNode(){}; + var self = $TopConstNode = $klass($base, $super, 'TopConstNode', $TopConstNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("op_asgn1"); + self.$handle("colon3"); - self.$children("lhs", "args", "op", "rhs"); + self.$children("name"); - def.$first_arg = function() { + return (Opal.defn(self, '$compile', function() { var self = this; - return self.$args()['$[]'](1); - }; + return self.$push("Opal.get('" + (self.$name()) + "')"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$compile = function() { - var self = this, $case = nil; + (function($base, $super) { + function $TopConstAssignNode(){}; + var self = $TopConstAssignNode = $klass($base, $super, 'TopConstAssignNode', $TopConstAssignNode); - return (function() {$case = self.$op().$to_s();if ("||"['$===']($case)) {return self.$compile_or()}else if ("&&"['$===']($case)) {return self.$compile_and()}else {return self.$compile_operator()}})(); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$compile_operator = function() { - var $a, $b, TMP_4, self = this; + self.$handle("casgn3"); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(a){var self = TMP_4.$$s || this, $a, $b, TMP_5; -if (a == null) a = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(r){var self = TMP_5.$$s || this, cur = nil, rhs = nil, call = nil; -if (r == null) r = nil; - cur = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); - rhs = self.$s("call", cur, self.$op().$to_sym(), self.$s("arglist", self.$rhs())); - call = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), rhs)); - self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); - return self.$push(", ", self.$expr(call), ")");}, TMP_5.$$s = self, TMP_5), $a).call($b)}, TMP_4.$$s = self, TMP_4), $a).call($b); - }; + self.$children("name", "value"); - def.$compile_or = function() { - var $a, $b, TMP_6, self = this; + return (Opal.defn(self, '$compile', function() { + var self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_6 = function(a){var self = TMP_6.$$s || this, $a, $b, TMP_7; -if (a == null) a = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_7 = function(r){var self = TMP_7.$$s || this, aref = nil, aset = nil, orop = nil; -if (r == null) r = nil; - aref = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); - aset = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), self.$rhs())); - orop = self.$s("or", aref, aset); - self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); - return self.$push(", ", self.$expr(orop), ")");}, TMP_7.$$s = self, TMP_7), $a).call($b)}, TMP_6.$$s = self, TMP_6), $a).call($b); - }; + self.$push("Opal.casgn(Opal.Object, '" + (self.$name()) + "', "); + self.$push(self.$expr(self.$value())); + return self.$push(")"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["pathname"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module; + + Opal.add_stubs(['$==', '$raise', '$attr_reader', '$path', '$start_with?', '$!', '$absolute?', '$sub', '$new']); + (function($base, $super) { + function $Pathname(){}; + var self = $Pathname = $klass($base, $super, 'Pathname', $Pathname); + + var def = self.$$proto, $scope = self.$$scope; + + def.path = nil; + Opal.defn(self, '$initialize', function(path) { + var self = this; + + if (path['$==']("\x00")) { + self.$raise($scope.get('ArgumentError'))}; + return self.path = path; + }); + + self.$attr_reader("path"); + + Opal.defn(self, '$==', function(other) { + var self = this; + + return other.$path()['$=='](self.path); + }); + + Opal.defn(self, '$absolute?', function() { + var self = this; + + return self.path['$start_with?']("/"); + }); + + Opal.defn(self, '$relative?', function() { + var self = this; + + return self['$absolute?']()['$!'](); + }); + + Opal.defn(self, '$root?', function() { + var self = this; + + return self.path['$==']("/"); + }); + + Opal.defn(self, '$parent', function() { + var $a, self = this, new_path = nil; + + new_path = self.path.$sub(/\/([^\/]+\/?$)/, ""); + if (new_path['$==']("")) { + new_path = (function() {if ((($a = self['$absolute?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "/" + } else { + return "." + }; return nil; })()}; + return $scope.get('Pathname').$new(new_path); + }); + + Opal.defn(self, '$sub', function() { + var $a, self = this, $splat_index = nil; + + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var args = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + args[$splat_index] = arguments[$splat_index + 0]; + } + return $scope.get('Pathname').$new(($a = self.path).$sub.apply($a, Opal.to_a(args))); + }); + + Opal.defn(self, '$cleanpath', function() { + var self = this; + + return Opal.normalize_loadable_path(self.path); + }); + + Opal.defn(self, '$to_path', function() { + var self = this; + + return self.path; + }); + + Opal.defn(self, '$hash', function() { + var self = this; + + return self.path; + }); + + Opal.alias(self, 'to_str', 'to_path'); + + return Opal.alias(self, 'to_s', 'to_path'); + })($scope.base, null); + return (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defn(self, '$Pathname', function(path) { + var self = this; + + return $scope.get('Pathname').$new(path); + }) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/runtime_helpers"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + + Opal.add_stubs(['$require', '$new', '$children', '$==', '$include?', '$to_sym', '$<<', '$define_method', '$to_proc', '$meth', '$__send__', '$raise', '$helper', '$[]', '$arglist', '$js_truthy', '$js_falsy']); + self.$require("set"); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; - return (def.$compile_and = function() { - var $a, $b, TMP_8, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_8 = function(a){var self = TMP_8.$$s || this, $a, $b, TMP_9; -if (a == null) a = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_9 = function(r){var self = TMP_9.$$s || this, aref = nil, aset = nil, andop = nil; -if (r == null) r = nil; - aref = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); - aset = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), self.$rhs())); - andop = self.$s("and", aref, aset); - self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); - return self.$push(", ", self.$expr(andop), ")");}, TMP_9.$$s = self, TMP_9), $a).call($b)}, TMP_8.$$s = self, TMP_8), $a).call($b); - }, nil) && 'compile_and'; - })(self, $scope.get('Base')); + var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $OpAsgn2Node(){}; - var self = $OpAsgn2Node = $klass($base, $super, 'OpAsgn2Node', $OpAsgn2Node); + function $RuntimeHelpers(){}; + var self = $RuntimeHelpers = $klass($base, $super, 'RuntimeHelpers', $RuntimeHelpers); - var def = self.$$proto, $scope = self.$$scope; + var def = self.$$proto, $scope = self.$$scope, TMP_1, $a, $b, TMP_2, $c, TMP_3; - self.$handle("op_asgn2"); + Opal.cdecl($scope, 'HELPERS', $scope.get('Set').$new()); - self.$children("lhs", "mid", "op", "rhs"); + self.$children("recvr", "meth", "arglist"); - def.$meth = function() { - var self = this; + Opal.defs(self, '$compatible?', function(recvr, meth, arglist) { + var $a, self = this; - return self.$mid().$to_s()['$[]']($range(0, -2, false)); - }; + return (($a = recvr['$=='](["const", "Opal"])) ? $scope.get('HELPERS')['$include?'](meth.$to_sym()) : recvr['$=='](["const", "Opal"])); + }); - def.$compile = function() { - var self = this, $case = nil; + Opal.defs(self, '$helper', TMP_1 = function(name) { + var $a, $b, self = this, $iter = TMP_1.$$p, block = $iter || nil; - return (function() {$case = self.$op().$to_s();if ("||"['$===']($case)) {return self.$compile_or()}else if ("&&"['$===']($case)) {return self.$compile_and()}else {return self.$compile_operator()}})(); - }; + TMP_1.$$p = null; + $scope.get('HELPERS')['$<<'](name); + return ($a = ($b = self).$define_method, $a.$$p = block.$to_proc(), $a).call($b, "compile_" + (name)); + }); - def.$compile_or = function() { - var $a, $b, TMP_10, self = this; + Opal.defn(self, '$compile', function() { + var $a, self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_10 = function(tmp){var self = TMP_10.$$s || this, getr = nil, asgn = nil, orop = nil; -if (tmp == null) tmp = nil; - getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); - asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", self.$rhs())); - orop = self.$s("or", getr, asgn); - return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(orop), ")");}, TMP_10.$$s = self, TMP_10), $a).call($b); - }; + if ((($a = $scope.get('HELPERS')['$include?'](self.$meth().$to_sym())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$__send__("compile_" + (self.$meth())) + } else { + return self.$raise("Helper not supported: " + (self.$meth())) + }; + }); - def.$compile_and = function() { - var $a, $b, TMP_11, self = this; + ($a = ($b = self).$helper, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, sexp = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_11 = function(tmp){var self = TMP_11.$$s || this, getr = nil, asgn = nil, andop = nil; -if (tmp == null) tmp = nil; - getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); - asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", self.$rhs())); - andop = self.$s("and", getr, asgn); - return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(andop), ")");}, TMP_11.$$s = self, TMP_11), $a).call($b); - }; + if ((($a = sexp = self.$arglist()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise("truthy? requires an object") + }; + return self.$js_truthy(sexp);}, TMP_2.$$s = self, TMP_2), $a).call($b, "truthy?"); - return (def.$compile_operator = function() { - var $a, $b, TMP_12, self = this; + return ($a = ($c = self).$helper, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a, sexp = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_12 = function(tmp){var self = TMP_12.$$s || this, getr = nil, oper = nil, asgn = nil; -if (tmp == null) tmp = nil; - getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); - oper = self.$s("call", getr, self.$op(), self.$s("arglist", self.$rhs())); - asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", oper)); - return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(asgn), ")");}, TMP_12.$$s = self, TMP_12), $a).call($b); - }, nil) && 'compile_operator'; - })(self, $scope.get('Base')); - })(self) - })(self); + if ((($a = sexp = self.$arglist()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$raise("falsy? requires an object") + }; + return self.$js_falsy(sexp);}, TMP_3.$$s = self, TMP_3), $a).call($c, "falsy?"); + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/scope"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/call"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; function $rb_plus(lhs, rhs) { return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2, $range = Opal.range; - Opal.add_stubs(['$require', '$attr_accessor', '$attr_reader', '$indent', '$scope', '$compiler', '$scope=', '$call', '$==', '$!', '$class?', '$dup', '$push', '$map', '$ivars', '$gvars', '$parser_indent', '$empty?', '$join', '$proto', '$%', '$fragment', '$def_in_class?', '$add_proto_ivar', '$include?', '$<<', '$has_local?', '$pop', '$next_temp', '$succ', '$uses_block!', '$identify!', '$unique_temp', '$add_scope_temp', '$parent', '$def?', '$type', '$mid']); + Opal.add_stubs(['$require', '$handle', '$children', '$[]=', '$define_method', '$to_proc', '$handle_special', '$compile_default?', '$record_method?', '$<<', '$method_calls', '$compiler', '$to_sym', '$meth', '$using_irb?', '$compile_irb_var', '$default_compile', '$mid_to_jsid', '$to_s', '$any?', '$==', '$first', '$[]', '$arglist', '$===', '$last', '$type', '$pop', '$iter', '$new_temp', '$scope', '$expr', '$recv', '$recv_sexp', '$s', '$!', '$insert', '$push', '$unshift', '$queue_temp', '$recvr', '$=~', '$with_temp', '$variable', '$intern', '$+', '$irb?', '$top?', '$nil?', '$include?', '$__send__', '$compatible?', '$compile', '$new', '$each', '$add_special', '$inline_operators?', '$operator_helpers', '$fragment', '$compile_default!', '$resolve', '$requires', '$file', '$dirname', '$cleanpath', '$join', '$Pathname', '$inspect', '$process', '$class_scope?', '$required_trees', '$handle_block_given_call', '$def?', '$mid', '$handle_part', '$map', '$expand_path', '$split', '$dynamic_require_severity', '$error', '$line', '$warning', '$inject']); + self.$require("set"); + self.$require("pathname"); self.$require("opal/nodes/base"); + self.$require("opal/nodes/runtime_helpers"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $ScopeNode(){}; - var self = $ScopeNode = $klass($base, $super, 'ScopeNode', $ScopeNode); + function $CallNode(){}; + var self = $CallNode = $klass($base, $super, 'CallNode', $CallNode); - var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2; + var def = self.$$proto, $scope = self.$$scope, TMP_1, $a, $b, TMP_6, $c, TMP_8, $d, TMP_9, $e, TMP_10, $f, TMP_11, $g, TMP_12, $h, TMP_13, $i, TMP_14, $j, TMP_15; - def.type = def.defs = def.parent = def.temps = def.locals = def.compiler = def.proto_ivars = def.ivars = def.gvars = def.args = def.queue = def.unique = def.while_stack = def.identity = def.uses_block = nil; - self.$attr_accessor("parent"); + def.assignment = def.compiler = def.sexp = def.level = def.compile_default = nil; + self.$handle("call"); - self.$attr_accessor("name"); + self.$children("recvr", "meth", "arglist", "iter"); - self.$attr_accessor("block_name"); + Opal.cdecl($scope, 'SPECIALS', $hash2([], {})); - self.$attr_reader("scope_name"); + Opal.cdecl($scope, 'OPERATORS', $hash2(["+", "-", "*", "/", "<", "<=", ">", ">="], {"+": "plus", "-": "minus", "*": "times", "/": "divide", "<": "lt", "<=": "le", ">": "gt", ">=": "ge"})); - self.$attr_reader("ivars"); + Opal.defs(self, '$add_special', TMP_1 = function(name, options) { + var $a, $b, self = this, $iter = TMP_1.$$p, handler = $iter || nil; - self.$attr_reader("gvars"); + if (options == null) { + options = $hash2([], {}) + } + TMP_1.$$p = null; + $scope.get('SPECIALS')['$[]='](name, options); + return ($a = ($b = self).$define_method, $a.$$p = handler.$to_proc(), $a).call($b, "handle_" + (name)); + }); - self.$attr_accessor("mid"); + Opal.defn(self, '$compile', function() { + var $a, self = this; - self.$attr_accessor("defs"); + self.$handle_special(); + if ((($a = self['$compile_default?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + return nil + }; + if ((($a = self['$record_method?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$compiler().$method_calls()['$<<'](self.$meth().$to_sym())}; + if ((($a = self['$using_irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_irb_var()}; + return self.$default_compile(); + }); - self.$attr_reader("methods"); + Opal.defn(self, '$record_method?', function() { + var self = this; - self.$attr_accessor("uses_super"); + return true; + }); - self.$attr_accessor("uses_zuper"); + Opal.defn(self, '$default_compile', function() { + var $a, $b, TMP_2, $c, self = this, mid = nil, splat = nil, block = nil, blktmp = nil, tmprecv = nil, recv_code = nil, call_recv = nil, args = nil; - self.$attr_accessor("catch_return"); + mid = self.$mid_to_jsid(self.$meth().$to_s()); + splat = ($a = ($b = self.$arglist()['$[]']($range(1, -1, false)))['$any?'], $a.$$p = (TMP_2 = function(a){var self = TMP_2.$$s || this; +if (a == null) a = nil; + return a.$first()['$==']("splat")}, TMP_2.$$s = self, TMP_2), $a).call($b); + if ((($a = ($c = $scope.get('Sexp')['$==='](self.$arglist().$last()), $c !== false && $c !== nil ?self.$arglist().$last().$type()['$==']("block_pass") : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { + block = self.$arglist().$pop() + } else if ((($a = self.$iter()) !== nil && (!$a.$$is_boolean || $a == true))) { + block = self.$iter()}; + if (block !== false && block !== nil) { + blktmp = self.$scope().$new_temp()}; + if ((($a = ((($c = splat) !== false && $c !== nil) ? $c : blktmp)) !== nil && (!$a.$$is_boolean || $a == true))) { + tmprecv = self.$scope().$new_temp()}; + if (block !== false && block !== nil) { + block = self.$expr(block)}; + recv_code = self.$recv(self.$recv_sexp()); + call_recv = self.$s("js_tmp", ((($a = tmprecv) !== false && $a !== nil) ? $a : recv_code)); + if ((($a = (($c = blktmp !== false && blktmp !== nil) ? splat['$!']() : blktmp)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$arglist().$insert(1, call_recv)}; + args = self.$expr(self.$arglist()); + if (tmprecv !== false && tmprecv !== nil) { + self.$push("(" + (tmprecv) + " = ", recv_code, ")" + (mid)) + } else { + self.$push(recv_code, mid) + }; + if (blktmp !== false && blktmp !== nil) { + self.$unshift("(" + (blktmp) + " = "); + self.$push(", " + (blktmp) + ".$$p = ", block, ", " + (blktmp) + ")");}; + if (splat !== false && splat !== nil) { + self.$push(".apply(", (((($a = tmprecv) !== false && $a !== nil) ? $a : recv_code)), ", ", args, ")") + } else if (blktmp !== false && blktmp !== nil) { + self.$push(".call(", args, ")") + } else { + self.$push("(", args, ")") + }; + if (blktmp !== false && blktmp !== nil) { + return self.$scope().$queue_temp(blktmp) + } else { + return nil + }; + }); - def.$initialize = TMP_1 = function() {var $zuper = $slice.call(arguments, 0); - var self = this, $iter = TMP_1.$$p, $yield = $iter || nil; + Opal.defn(self, '$recv_sexp', function() { + var $a, self = this; - TMP_1.$$p = null; - Opal.find_super_dispatcher(self, 'initialize', TMP_1, $iter).apply(self, $zuper); - self.locals = []; - self.temps = []; - self.args = []; - self.ivars = []; - self.gvars = []; - self.parent = nil; - self.queue = []; - self.unique = "a"; - self.while_stack = []; - self.identity = nil; - self.defs = nil; - self.methods = []; - self.uses_block = false; - return self.proto_ivars = []; - }; + return ((($a = self.$recvr()) !== false && $a !== nil) ? $a : self.$s("self")); + }); - def.$in_scope = TMP_2 = function() { - var $a, $b, TMP_3, self = this, $iter = TMP_2.$$p, block = $iter || nil; + Opal.defn(self, '$attr_assignment?', function() { + var $a, self = this; - TMP_2.$$p = null; - return ($a = ($b = self).$indent, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a, $b; - if (self.parent == null) self.parent = nil; + return ((($a = self.assignment) !== false && $a !== nil) ? $a : self.assignment = self.$meth().$to_s()['$=~']((new RegExp("" + $scope.get('REGEXP_START') + "[\\da-z]+\\=" + $scope.get('REGEXP_END'))))); + }); - self.parent = self.$compiler().$scope(); - (($a = [self]), $b = self.$compiler(), $b['$scope='].apply($b, $a), $a[$a.length-1]); - block.$call(self); - return (($a = [self.parent]), $b = self.$compiler(), $b['$scope='].apply($b, $a), $a[$a.length-1]);}, TMP_3.$$s = self, TMP_3), $a).call($b); - }; + Opal.defn(self, '$compile_irb_var', function() { + var $a, $b, TMP_3, self = this; + + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this, lvar = nil, call = nil; +if (tmp == null) tmp = nil; + lvar = self.$variable(self.$meth()); + call = self.$s("call", self.$s("self"), self.$meth().$intern(), self.$s("arglist")); + return self.$push("((" + (tmp) + " = Opal.irb_vars." + (lvar) + ") == null ? ", self.$expr(call), " : " + (tmp) + ")");}, TMP_3.$$s = self, TMP_3), $a).call($b); + }); + + Opal.defn(self, '$compile_assignment', function() { + var $a, $b, TMP_4, self = this; + + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(args_tmp){var self = TMP_4.$$s || this, $a, $b, TMP_5; +if (args_tmp == null) args_tmp = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(recv_tmp){var self = TMP_5.$$s || this, args = nil, mid = nil; +if (recv_tmp == null) recv_tmp = nil; + args = self.$expr(self.$arglist()); + mid = self.$mid_to_jsid(self.$meth().$to_s()); + return self.$push("((" + (args_tmp) + " = [", args, $rb_plus("]), ", "" + (recv_tmp) + " = "), self.$recv(self.$recv_sexp()), ", ", recv_tmp, mid, $rb_plus(".apply(" + (recv_tmp) + ", " + (args_tmp) + "), ", "" + (args_tmp) + "[" + (args_tmp) + ".length-1])"));}, TMP_5.$$s = self, TMP_5), $a).call($b)}, TMP_4.$$s = self, TMP_4), $a).call($b); + }); + + Opal.defn(self, '$using_irb?', function() { + var $a, $b, $c, $d, self = this; + + return ($a = ($b = ($c = ($d = self.compiler['$irb?'](), $d !== false && $d !== nil ?self.$scope()['$top?']() : $d), $c !== false && $c !== nil ?self.$arglist()['$=='](self.$s("arglist")) : $c), $b !== false && $b !== nil ?self.$recvr()['$nil?']() : $b), $a !== false && $a !== nil ?self.$iter()['$nil?']() : $a); + }); + + Opal.defn(self, '$handle_special', function() { + var $a, self = this; + + self.compile_default = true; + if ((($a = $scope.get('SPECIALS')['$include?'](self.$meth())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.compile_default = false; + return self.$__send__("handle_" + (self.$meth())); + } else if ((($a = $scope.get('RuntimeHelpers')['$compatible?'](self.$recvr(), self.$meth(), self.$arglist())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.compile_default = false; + return self.$push($scope.get('RuntimeHelpers').$new(self.sexp, self.level, self.compiler).$compile()); + } else { + return nil + }; + }); + + Opal.defn(self, '$compile_default!', function() { + var self = this; + + return self.compile_default = true; + }); + + Opal.defn(self, '$compile_default?', function() { + var self = this; + + return self.compile_default; + }); + + ($a = ($b = $scope.get('OPERATORS')).$each, $a.$$p = (TMP_6 = function(operator, name){var self = TMP_6.$$s || this, $a, $b, TMP_7; +if (operator == null) operator = nil;if (name == null) name = nil; + return ($a = ($b = self).$add_special, $a.$$p = (TMP_7 = function(){var self = TMP_7.$$s || this, $a, lhs = nil, rhs = nil; + + if ((($a = self.$compiler()['$inline_operators?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$record_method?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$compiler().$method_calls()['$<<'](operator.$to_sym())}; + self.$compiler().$operator_helpers()['$<<'](operator.$to_sym()); + $a = [self.$expr(self.$recvr()), self.$expr(self.$arglist()['$[]'](1))], lhs = $a[0], rhs = $a[1], $a; + self.$push(self.$fragment("$rb_" + (name) + "(")); + self.$push(lhs); + self.$push(self.$fragment(", ")); + self.$push(rhs); + return self.$push(self.$fragment(")")); + } else { + return self['$compile_default!']() + }}, TMP_7.$$s = self, TMP_7), $a).call($b, operator.$to_sym())}, TMP_6.$$s = self, TMP_6), $a).call($b); - def['$class_scope?'] = function() { - var $a, self = this; + ($a = ($c = self).$add_special, $a.$$p = (TMP_8 = function(){var self = TMP_8.$$s || this, $a, str = nil; - return ((($a = self.type['$==']("class")) !== false && $a !== nil) ? $a : self.type['$==']("module")); - }; + self['$compile_default!'](); + str = $scope.get('DependencyResolver').$new(self.$compiler(), self.$arglist()['$[]'](1)).$resolve(); + if ((($a = str['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$compiler().$requires()['$<<'](str) + }; + return self.$push(self.$fragment(""));}, TMP_8.$$s = self, TMP_8), $a).call($c, "require"); - def['$class?'] = function() { - var self = this; + ($a = ($d = self).$add_special, $a.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this, arg = nil, file = nil, dir = nil; - return self.type['$==']("class"); - }; + arg = self.$arglist()['$[]'](1); + file = self.$compiler().$file(); + if (arg['$[]'](0)['$==']("str")) { + dir = $scope.get('File').$dirname(file); + self.$compiler().$requires()['$<<'](self.$Pathname(dir).$join(arg['$[]'](1)).$cleanpath().$to_s());}; + self.$push(self.$fragment("self.$require(" + (file.$inspect()) + "+ '/../' + ")); + self.$push(self.$process(self.$arglist())); + return self.$push(self.$fragment(")"));}, TMP_9.$$s = self, TMP_9), $a).call($d, "require_relative"); - def['$module?'] = function() { - var self = this; + ($a = ($e = self).$add_special, $a.$$p = (TMP_10 = function(){var self = TMP_10.$$s || this, $a, str = nil; - return self.type['$==']("module"); - }; + if ((($a = self.$scope()['$class_scope?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self['$compile_default!'](); + str = $scope.get('DependencyResolver').$new(self.$compiler(), self.$arglist()['$[]'](2)).$resolve(); + if ((($a = str['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$compiler().$requires()['$<<'](str) + }; + return self.$push(self.$fragment("")); + } else { + return nil + }}, TMP_10.$$s = self, TMP_10), $a).call($e, "autoload"); - def['$sclass?'] = function() { - var self = this; + ($a = ($f = self).$add_special, $a.$$p = (TMP_11 = function(){var self = TMP_11.$$s || this, arg = nil, relative_path = nil, dir = nil, full_path = nil; - return self.type['$==']("sclass"); - }; + arg = self.$arglist()['$[]'](1); + if (arg['$[]'](0)['$==']("str")) { + relative_path = arg['$[]'](1); + self.$compiler().$required_trees()['$<<'](relative_path); + dir = $scope.get('File').$dirname(self.$compiler().$file()); + full_path = self.$Pathname(dir).$join(relative_path).$cleanpath().$to_s(); + arg['$[]='](1, full_path);}; + self['$compile_default!'](); + return self.$push(self.$fragment(""));}, TMP_11.$$s = self, TMP_11), $a).call($f, "require_tree"); - def['$top?'] = function() { - var self = this; + ($a = ($g = self).$add_special, $a.$$p = (TMP_12 = function(){var self = TMP_12.$$s || this; + if (self.sexp == null) self.sexp = nil; - return self.type['$==']("top"); - }; + return self.$push(self.$compiler().$handle_block_given_call(self.sexp))}, TMP_12.$$s = self, TMP_12), $a).call($g, "block_given?"); - def['$iter?'] = function() { - var self = this; + ($a = ($h = self).$add_special, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this, $a; - return self.type['$==']("iter"); - }; + if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) + } else { + return self.$push(self.$fragment("nil")) + }}, TMP_13.$$s = self, TMP_13), $a).call($h, "__callee__"); - def['$def?'] = function() { - var self = this; + ($a = ($i = self).$add_special, $a.$$p = (TMP_14 = function(){var self = TMP_14.$$s || this, $a; - return self.type['$==']("def"); - }; + if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) + } else { + return self.$push(self.$fragment("nil")) + }}, TMP_14.$$s = self, TMP_14), $a).call($i, "__method__"); - def['$def_in_class?'] = function() { - var $a, $b, $c, self = this; + ($a = ($j = self).$add_special, $a.$$p = (TMP_15 = function(){var self = TMP_15.$$s || this; - return ($a = ($b = ($c = self.defs['$!'](), $c !== false && $c !== nil ?self.type['$==']("def") : $c), $b !== false && $b !== nil ?self.parent : $b), $a !== false && $a !== nil ?self.parent['$class?']() : $a); - }; + return self.$push(self.$fragment("debugger"))}, TMP_15.$$s = self, TMP_15), $a).call($j, "debugger"); - def.$proto = function() { - var self = this; + return (function($base, $super) { + function $DependencyResolver(){}; + var self = $DependencyResolver = $klass($base, $super, 'DependencyResolver', $DependencyResolver); - return "def"; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$to_vars = function() { - var $a, $b, $c, TMP_4, $d, TMP_5, $e, TMP_6, $f, TMP_7, self = this, vars = nil, iv = nil, gv = nil, indent = nil, str = nil, pvars = nil, result = nil; + def.sexp = def.compiler = nil; + Opal.defn(self, '$initialize', function(compiler, sexp) { + var self = this; - vars = self.temps.$dup(); - ($a = vars).$push.apply($a, [].concat(($b = ($c = self.locals).$map, $b.$$p = (TMP_4 = function(l){var self = TMP_4.$$s || this; -if (l == null) l = nil; - return "" + (l) + " = nil"}, TMP_4.$$s = self, TMP_4), $b).call($c))); - iv = ($b = ($d = self.$ivars()).$map, $b.$$p = (TMP_5 = function(ivar){var self = TMP_5.$$s || this; -if (ivar == null) ivar = nil; - return "if (self" + (ivar) + " == null) self" + (ivar) + " = nil;\n"}, TMP_5.$$s = self, TMP_5), $b).call($d); - gv = ($b = ($e = self.$gvars()).$map, $b.$$p = (TMP_6 = function(gvar){var self = TMP_6.$$s || this; -if (gvar == null) gvar = nil; - return "if ($gvars" + (gvar) + " == null) $gvars" + (gvar) + " = nil;\n"}, TMP_6.$$s = self, TMP_6), $b).call($e); - indent = self.compiler.$parser_indent(); - str = (function() {if ((($b = vars['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - return "" - } else { - return "var " + (vars.$join(", ")) + ";\n" - }; return nil; })(); - if ((($b = self.$ivars()['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - str = $rb_plus(str, "" + (indent) + (iv.$join(indent))) - }; - if ((($b = self.$gvars()['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - } else { - str = $rb_plus(str, "" + (indent) + (gv.$join(indent))) - }; - if ((($b = ($f = self['$class?'](), $f !== false && $f !== nil ?self.proto_ivars['$empty?']()['$!']() : $f)) !== nil && (!$b.$$is_boolean || $b == true))) { - pvars = ($b = ($f = self.proto_ivars).$map, $b.$$p = (TMP_7 = function(i){var self = TMP_7.$$s || this; -if (i == null) i = nil; - return "" + (self.$proto()) + (i)}, TMP_7.$$s = self, TMP_7), $b).call($f).$join(" = "); - result = "%s\n%s%s = nil;"['$%']([str, indent, pvars]); - } else { - result = str - }; - return self.$fragment(result); - }; + self.compiler = compiler; + return self.sexp = sexp; + }); - def.$add_scope_ivar = function(ivar) { - var $a, self = this; + Opal.defn(self, '$resolve', function() { + var self = this; - if ((($a = self['$def_in_class?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.parent.$add_proto_ivar(ivar) - } else if ((($a = self.ivars['$include?'](ivar)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.ivars['$<<'](ivar) - }; - }; + return self.$handle_part(self.sexp); + }); - def.$add_scope_gvar = function(gvar) { - var $a, self = this; + Opal.defn(self, '$handle_part', function(sexp) { + var $a, $b, TMP_16, self = this, type = nil, _ = nil, recv = nil, meth = nil, args = nil, parts = nil, msg = nil, $case = nil; - if ((($a = self.gvars['$include?'](gvar)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.gvars['$<<'](gvar) - }; - }; + type = sexp.$type(); + if (type['$==']("str")) { + return sexp['$[]'](1) + } else if (type['$==']("call")) { + $b = sexp, $a = Opal.to_ary($b), _ = ($a[0] == null ? nil : $a[0]), recv = ($a[1] == null ? nil : $a[1]), meth = ($a[2] == null ? nil : $a[2]), args = ($a[3] == null ? nil : $a[3]), $b; + parts = ($a = ($b = args['$[]']($range(1, -1, false))).$map, $a.$$p = (TMP_16 = function(s){var self = TMP_16.$$s || this; +if (s == null) s = nil; + return self.$handle_part(s)}, TMP_16.$$s = self, TMP_16), $a).call($b); + if (recv['$=='](["const", "File"])) { + if (meth['$==']("expand_path")) { + return ($a = self).$expand_path.apply($a, Opal.to_a(parts)) + } else if (meth['$==']("join")) { + return self.$expand_path(parts.$join("/")) + } else if (meth['$==']("dirname")) { + return self.$expand_path(parts['$[]'](0).$split("/")['$[]']($range(0, -1, true)).$join("/"))}};}; + msg = "Cannot handle dynamic require"; + return (function() {$case = self.compiler.$dynamic_require_severity();if ("error"['$===']($case)) {return self.compiler.$error(msg, self.sexp.$line())}else if ("warning"['$===']($case)) {return self.compiler.$warning(msg, self.sexp.$line())}else { return nil }})(); + }); - def.$add_proto_ivar = function(ivar) { - var $a, self = this; + return (Opal.defn(self, '$expand_path', function(path, base) { + var $a, $b, TMP_17, self = this; - if ((($a = self.proto_ivars['$include?'](ivar)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.proto_ivars['$<<'](ivar) - }; - }; + if (base == null) { + base = "" + } + return ($a = ($b = (((("") + (base)) + "/") + (path)).$split("/")).$inject, $a.$$p = (TMP_17 = function(p, part){var self = TMP_17.$$s || this; +if (p == null) p = nil;if (part == null) part = nil; + if (part['$==']("")) { + } else if (part['$==']("..")) { + p.$pop() + } else { + p['$<<'](part) + }; + return p;}, TMP_17.$$s = self, TMP_17), $a).call($b, []).$join("/"); + }), nil) && 'expand_path'; + })($scope.base, null); + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); +}; - def.$add_arg = function(arg) { - var $a, self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/call_special"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - if ((($a = self.args['$include?'](arg)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.args['$<<'](arg) - }; - return arg; - }; + Opal.add_stubs(['$require', '$handle', '$children', '$!~', '$to_s', '$meth', '$with_temp', '$expr', '$arglist', '$mid_to_jsid', '$push', '$+', '$recv', '$recv_sexp', '$[]', '$==', '$any?', '$first', '$===', '$last', '$type', '$pop', '$iter', '$new_temp', '$scope', '$s', '$unshift', '$queue_temp', '$lhs', '$rhs', '$process', '$recvr', '$args', '$op', '$compile_or', '$compile_and', '$compile_operator', '$to_sym', '$first_arg', '$mid']); + self.$require("opal/nodes/base"); + self.$require("opal/nodes/call"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - def.$add_scope_local = function(local) { - var $a, self = this; + var def = self.$$proto, $scope = self.$$scope; - if ((($a = self['$has_local?'](local)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - return self.locals['$<<'](local); - }; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - def['$has_local?'] = function(local) { - var $a, $b, self = this; + var def = self.$$proto, $scope = self.$$scope; - if ((($a = ((($b = self.locals['$include?'](local)) !== false && $b !== nil) ? $b : self.args['$include?'](local))) !== nil && (!$a.$$is_boolean || $a == true))) { - return true}; - if ((($a = ($b = self.parent, $b !== false && $b !== nil ?self.type['$==']("iter") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.parent['$has_local?'](local)}; - return false; - }; + (function($base, $super) { + function $AttrAssignNode(){}; + var self = $AttrAssignNode = $klass($base, $super, 'AttrAssignNode', $AttrAssignNode); - def.$add_scope_temp = function(tmps) { - var $a, self = this; + var def = self.$$proto, $scope = self.$$scope, TMP_1; - tmps = $slice.call(arguments, 0); - return ($a = self.temps).$push.apply($a, [].concat(tmps)); - }; + self.$handle("attrasgn"); - def['$has_temp?'] = function(tmp) { - var self = this; + self.$children("recvr", "meth", "arglist"); - return self.temps['$include?'](tmp); - }; + return (Opal.defn(self, '$default_compile', TMP_1 = function() { + var $a, $b, TMP_2, self = this, $iter = TMP_1.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - def.$new_temp = function() { - var $a, self = this, tmp = nil; + TMP_1.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + if ((($a = self.$meth().$to_s()['$!~']((new RegExp("" + $scope.get('REGEXP_START') + "\\w+=" + $scope.get('REGEXP_END'))))) !== nil && (!$a.$$is_boolean || $a == true))) { + return Opal.find_super_dispatcher(self, 'default_compile', TMP_1, $iter).apply(self, $zuper)}; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(args_tmp){var self = TMP_2.$$s || this, $a, $b, TMP_3; +if (args_tmp == null) args_tmp = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(recv_tmp){var self = TMP_3.$$s || this, args = nil, mid = nil; +if (recv_tmp == null) recv_tmp = nil; + args = self.$expr(self.$arglist()); + mid = self.$mid_to_jsid(self.$meth().$to_s()); + return self.$push("((" + (args_tmp) + " = [", args, $rb_plus("]), ", "" + (recv_tmp) + " = "), self.$recv(self.$recv_sexp()), ", ", recv_tmp, mid, $rb_plus(".apply(" + (recv_tmp) + ", " + (args_tmp) + "), ", "" + (args_tmp) + "[" + (args_tmp) + ".length-1])"));}, TMP_3.$$s = self, TMP_3), $a).call($b)}, TMP_2.$$s = self, TMP_2), $a).call($b); + }), nil) && 'default_compile'; + })($scope.base, $scope.get('CallNode')); - if ((($a = self.queue['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - return self.queue.$pop() - }; - tmp = self.$next_temp(); - self.temps['$<<'](tmp); - return tmp; - }; + (function($base, $super) { + function $JsAttrAssignNode(){}; + var self = $JsAttrAssignNode = $klass($base, $super, 'JsAttrAssignNode', $JsAttrAssignNode); - def.$next_temp = function() { - var self = this, tmp = nil; + var def = self.$$proto, $scope = self.$$scope; - tmp = "$" + (self.unique); - self.unique = self.unique.$succ(); - return tmp; - }; + self.$handle("jsattrasgn"); + + Opal.defn(self, '$record_method?', function() { + var self = this; + + return false; + }); - def.$queue_temp = function(name) { + return (Opal.defn(self, '$default_compile', function() { var self = this; - return self.queue['$<<'](name); - }; - - def.$push_while = function() { - var self = this, info = nil; + return self.$push(self.$recv(self.$recv_sexp()), "[", self.$expr(self.$arglist()['$[]'](1)), "]", "=", self.$expr(self.$arglist()['$[]'](2))); + }), nil) && 'default_compile'; + })($scope.base, $scope.get('CallNode')); - info = $hash2([], {}); - self.while_stack.$push(info); - return info; - }; + (function($base, $super) { + function $JsCallNode(){}; + var self = $JsCallNode = $klass($base, $super, 'JsCallNode', $JsCallNode); - def.$pop_while = function() { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return self.while_stack.$pop(); - }; + self.$handle("jscall"); - def['$in_while?'] = function() { + Opal.defn(self, '$record_method?', function() { var self = this; - return self.while_stack['$empty?']()['$!'](); - }; + return false; + }); - def['$uses_block!'] = function() { - var $a, $b, self = this; + return (Opal.defn(self, '$default_compile', function() { + var $a, $b, TMP_4, $c, self = this, mid = nil, splat = nil, block = nil, blktmp = nil, tmprecv = nil, recv_code = nil, call_recv = nil, args = nil; - if ((($a = (($b = self.type['$==']("iter")) ? self.parent : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.parent['$uses_block!']() + if (self.$meth()['$==']("[]")) { + return self.$push(self.$recv(self.$recv_sexp()), "[", self.$expr(self.$arglist()), "]") } else { - self.uses_block = true; - return self['$identify!'](); + mid = "." + (self.$meth()); + splat = ($a = ($b = self.$arglist()['$[]']($range(1, -1, false)))['$any?'], $a.$$p = (TMP_4 = function(a){var self = TMP_4.$$s || this; +if (a == null) a = nil; + return a.$first()['$==']("splat")}, TMP_4.$$s = self, TMP_4), $a).call($b); + if ((($a = ($c = $scope.get('Sexp')['$==='](self.$arglist().$last()), $c !== false && $c !== nil ?self.$arglist().$last().$type()['$==']("block_pass") : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { + block = self.$arglist().$pop() + } else if ((($a = self.$iter()) !== nil && (!$a.$$is_boolean || $a == true))) { + block = self.$iter()}; + if (block !== false && block !== nil) { + blktmp = self.$scope().$new_temp()}; + if (splat !== false && splat !== nil) { + tmprecv = self.$scope().$new_temp()}; + if (block !== false && block !== nil) { + block = self.$expr(block)}; + recv_code = self.$recv(self.$recv_sexp()); + call_recv = self.$s("js_tmp", ((($a = blktmp) !== false && $a !== nil) ? $a : recv_code)); + if (blktmp !== false && blktmp !== nil) { + self.$arglist().$push(call_recv)}; + args = self.$expr(self.$arglist()); + if (tmprecv !== false && tmprecv !== nil) { + self.$push("(" + (tmprecv) + " = ", recv_code, ")" + (mid)) + } else { + self.$push(recv_code, mid) + }; + if (blktmp !== false && blktmp !== nil) { + self.$unshift("(" + (blktmp) + " = ", block, ", "); + self.$push(")");}; + if (splat !== false && splat !== nil) { + self.$push(".apply(", tmprecv, ", ", args, ")") + } else { + self.$push("(", args, ")") + }; + if (blktmp !== false && blktmp !== nil) { + return self.$scope().$queue_temp(blktmp) + } else { + return nil + }; }; - }; + }), nil) && 'default_compile'; + })($scope.base, $scope.get('CallNode')); - def['$identify!'] = function() { - var $a, self = this; + (function($base, $super) { + function $Match3Node(){}; + var self = $Match3Node = $klass($base, $super, 'Match3Node', $Match3Node); - if ((($a = self.identity) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.identity}; - self.identity = self.compiler.$unique_temp(); - if ((($a = self.parent) !== nil && (!$a.$$is_boolean || $a == true))) { - self.parent.$add_scope_temp(self.identity)}; - return self.identity; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$identity = function() { - var self = this; + def.level = nil; + self.$handle("match3"); - return self.identity; - }; + self.$children("lhs", "rhs"); - def.$find_parent_def = function() { - var $a, $b, self = this, scope = nil; + return (Opal.defn(self, '$compile', function() { + var self = this, sexp = nil; - scope = self; - while ((($b = scope = scope.$parent()) !== nil && (!$b.$$is_boolean || $b == true))) { - if ((($b = scope['$def?']()) !== nil && (!$b.$$is_boolean || $b == true))) { - return scope}}; - return nil; - }; + sexp = self.$s("call", self.$lhs(), "=~", self.$s("arglist", self.$rhs())); + return self.$push(self.$process(sexp, self.level)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$get_super_chain = function() { - var $a, $b, self = this, chain = nil, scope = nil, defn = nil, mid = nil; + (function($base, $super) { + function $OpAsgnOrNode(){}; + var self = $OpAsgnOrNode = $klass($base, $super, 'OpAsgnOrNode', $OpAsgnOrNode); - $a = [[], self, "null", "null"], chain = $a[0], scope = $a[1], defn = $a[2], mid = $a[3]; - while (scope !== false && scope !== nil) { - if (scope.$type()['$==']("iter")) { - chain['$<<'](scope['$identify!']()); - if ((($b = scope.$parent()) !== nil && (!$b.$$is_boolean || $b == true))) { - scope = scope.$parent()}; - } else if (scope.$type()['$==']("def")) { - defn = scope['$identify!'](); - mid = "'" + (scope.$mid()) + "'"; - break;; - } else { - break; - }}; - return [chain, defn, mid]; - }; + var def = self.$$proto, $scope = self.$$scope; - return (def['$uses_block?'] = function() { - var self = this; + self.$handle("op_asgn_or"); - return self.uses_block; - }, nil) && 'uses_block?'; - })(self, $scope.get('Base')) - })(self) - })(self); -}; + self.$children("recvr", "rhs"); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/module"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + return (Opal.defn(self, '$compile', function() { + var self = this, sexp = nil; - Opal.add_stubs(['$require', '$handle', '$children', '$name_and_base', '$helper', '$push', '$line', '$in_scope', '$name=', '$scope', '$add_temp', '$proto', '$stmt', '$body', '$s', '$empty_line', '$to_vars', '$==', '$type', '$cid', '$to_s', '$[]', '$expr', '$raise']); - self.$require("opal/nodes/scope"); - return (function($base) { - var self = $module($base, 'Opal'); + sexp = self.$s("or", self.$recvr(), self.$rhs()); + return self.$push(self.$expr(sexp)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - var def = self.$$proto, $scope = self.$$scope; + (function($base, $super) { + function $OpAsgnAndNode(){}; + var self = $OpAsgnAndNode = $klass($base, $super, 'OpAsgnAndNode', $OpAsgnAndNode); - (function($base) { - var self = $module($base, 'Nodes'); + var def = self.$$proto, $scope = self.$$scope; - var def = self.$$proto, $scope = self.$$scope; + self.$handle("op_asgn_and"); + + self.$children("recvr", "rhs"); + + return (Opal.defn(self, '$compile', function() { + var self = this, sexp = nil; + + sexp = self.$s("and", self.$recvr(), self.$rhs()); + return self.$push(self.$expr(sexp)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ModuleNode(){}; - var self = $ModuleNode = $klass($base, $super, 'ModuleNode', $ModuleNode); + function $OpAsgn1Node(){}; + var self = $OpAsgn1Node = $klass($base, $super, 'OpAsgn1Node', $OpAsgn1Node); var def = self.$$proto, $scope = self.$$scope; - self.$handle("module"); + self.$handle("op_asgn1"); - self.$children("cid", "body"); + self.$children("lhs", "args", "op", "rhs"); - def.$compile = function() { - var $a, $b, TMP_1, self = this, name = nil, base = nil; + Opal.defn(self, '$first_arg', function() { + var self = this; - $a = Opal.to_ary(self.$name_and_base()), name = ($a[0] == null ? nil : $a[0]), base = ($a[1] == null ? nil : $a[1]); - self.$helper("module"); - self.$push("(function($base) {"); - self.$line(" var self = $module($base, '" + (name) + "');"); - ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, body_code = nil; + return self.$args()['$[]'](1); + }); - (($a = [name]), $b = self.$scope(), $b['$name='].apply($b, $a), $a[$a.length-1]); - self.$add_temp("" + (self.$scope().$proto()) + " = self.$$proto"); - self.$add_temp("$scope = self.$$scope"); - body_code = self.$stmt(((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil"))); - self.$empty_line(); - self.$line(self.$scope().$to_vars()); - return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$line("})(", base, ")"); - }; + Opal.defn(self, '$compile', function() { + var self = this, $case = nil; - return (def.$name_and_base = function() { - var self = this; + return (function() {$case = self.$op().$to_s();if ("||"['$===']($case)) {return self.$compile_or()}else if ("&&"['$===']($case)) {return self.$compile_and()}else {return self.$compile_operator()}})(); + }); - if (self.$cid().$type()['$==']("const")) { - return [self.$cid()['$[]'](1).$to_s(), "self"] - } else if (self.$cid().$type()['$==']("colon2")) { - return [self.$cid()['$[]'](2).$to_s(), self.$expr(self.$cid()['$[]'](1))] - } else if (self.$cid().$type()['$==']("colon3")) { - return [self.$cid()['$[]'](1).$to_s(), "Opal.Object"] - } else { - return self.$raise("Bad receiver in module") - }; - }, nil) && 'name_and_base'; - })(self, $scope.get('ScopeNode')) - })(self) - })(self); -}; + Opal.defn(self, '$compile_operator', function() { + var $a, $b, TMP_5, self = this; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/class"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_5 = function(a){var self = TMP_5.$$s || this, $a, $b, TMP_6; +if (a == null) a = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_6 = function(r){var self = TMP_6.$$s || this, cur = nil, rhs = nil, call = nil; +if (r == null) r = nil; + cur = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); + rhs = self.$s("call", cur, self.$op().$to_sym(), self.$s("arglist", self.$rhs())); + call = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), rhs)); + self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); + return self.$push(", ", self.$expr(call), ")");}, TMP_6.$$s = self, TMP_6), $a).call($b)}, TMP_5.$$s = self, TMP_5), $a).call($b); + }); - Opal.add_stubs(['$require', '$handle', '$children', '$name_and_base', '$helper', '$push', '$line', '$in_scope', '$name=', '$scope', '$add_temp', '$proto', '$body_code', '$empty_line', '$to_vars', '$super_code', '$sup', '$expr', '$stmt', '$returns', '$compiler', '$body', '$s']); - self.$require("opal/nodes/module"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$compile_or', function() { + var $a, $b, TMP_7, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_7 = function(a){var self = TMP_7.$$s || this, $a, $b, TMP_8; +if (a == null) a = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_8 = function(r){var self = TMP_8.$$s || this, aref = nil, aset = nil, orop = nil; +if (r == null) r = nil; + aref = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); + aset = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), self.$rhs())); + orop = self.$s("or", aref, aset); + self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); + return self.$push(", ", self.$expr(orop), ")");}, TMP_8.$$s = self, TMP_8), $a).call($b)}, TMP_7.$$s = self, TMP_7), $a).call($b); + }); - (function($base) { - var self = $module($base, 'Nodes'); + return (Opal.defn(self, '$compile_and', function() { + var $a, $b, TMP_9, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_9 = function(a){var self = TMP_9.$$s || this, $a, $b, TMP_10; +if (a == null) a = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_10 = function(r){var self = TMP_10.$$s || this, aref = nil, aset = nil, andop = nil; +if (r == null) r = nil; + aref = self.$s("call", self.$s("js_tmp", r), "[]", self.$s("arglist", self.$s("js_tmp", a))); + aset = self.$s("call", self.$s("js_tmp", r), "[]=", self.$s("arglist", self.$s("js_tmp", a), self.$rhs())); + andop = self.$s("and", aref, aset); + self.$push("(" + (a) + " = ", self.$expr(self.$first_arg()), ", " + (r) + " = ", self.$expr(self.$lhs())); + return self.$push(", ", self.$expr(andop), ")");}, TMP_10.$$s = self, TMP_10), $a).call($b)}, TMP_9.$$s = self, TMP_9), $a).call($b); + }), nil) && 'compile_and'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ClassNode(){}; - var self = $ClassNode = $klass($base, $super, 'ClassNode', $ClassNode); + function $OpAsgn2Node(){}; + var self = $OpAsgn2Node = $klass($base, $super, 'OpAsgn2Node', $OpAsgn2Node); var def = self.$$proto, $scope = self.$$scope; - self.$handle("class"); + self.$handle("op_asgn2"); - self.$children("cid", "sup", "body"); + self.$children("lhs", "mid", "op", "rhs"); - def.$compile = function() { - var $a, $b, TMP_1, self = this, name = nil, base = nil; + Opal.defn(self, '$meth', function() { + var self = this; - $a = Opal.to_ary(self.$name_and_base()), name = ($a[0] == null ? nil : $a[0]), base = ($a[1] == null ? nil : $a[1]); - self.$helper("klass"); - self.$push("(function($base, $super) {"); - self.$line(" function $" + (name) + "(){};"); - self.$line(" var self = $" + (name) + " = $klass($base, $super, '" + (name) + "', $" + (name) + ");"); - ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, body_code = nil; + return self.$mid().$to_s()['$[]']($range(0, -2, false)); + }); - (($a = [name]), $b = self.$scope(), $b['$name='].apply($b, $a), $a[$a.length-1]); - self.$add_temp("" + (self.$scope().$proto()) + " = self.$$proto"); - self.$add_temp("$scope = self.$$scope"); - body_code = self.$body_code(); - self.$empty_line(); - self.$line(self.$scope().$to_vars()); - return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$line("})(", base, ", ", self.$super_code(), ")"); - }; + Opal.defn(self, '$compile', function() { + var self = this, $case = nil; - def.$super_code = function() { - var $a, self = this; + return (function() {$case = self.$op().$to_s();if ("||"['$===']($case)) {return self.$compile_or()}else if ("&&"['$===']($case)) {return self.$compile_and()}else {return self.$compile_operator()}})(); + }); - if ((($a = self.$sup()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$expr(self.$sup()) - } else { - return "null" - }; - }; + Opal.defn(self, '$compile_or', function() { + var $a, $b, TMP_11, self = this; - return (def.$body_code = function() { - var $a, self = this; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_11 = function(tmp){var self = TMP_11.$$s || this, getr = nil, asgn = nil, orop = nil; +if (tmp == null) tmp = nil; + getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); + asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", self.$rhs())); + orop = self.$s("or", getr, asgn); + return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(orop), ")");}, TMP_11.$$s = self, TMP_11), $a).call($b); + }); - return self.$stmt(self.$compiler().$returns(((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil")))); - }, nil) && 'body_code'; - })(self, $scope.get('ModuleNode')) - })(self) - })(self); + Opal.defn(self, '$compile_and', function() { + var $a, $b, TMP_12, self = this; + + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_12 = function(tmp){var self = TMP_12.$$s || this, getr = nil, asgn = nil, andop = nil; +if (tmp == null) tmp = nil; + getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); + asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", self.$rhs())); + andop = self.$s("and", getr, asgn); + return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(andop), ")");}, TMP_12.$$s = self, TMP_12), $a).call($b); + }); + + return (Opal.defn(self, '$compile_operator', function() { + var $a, $b, TMP_13, self = this; + + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_13 = function(tmp){var self = TMP_13.$$s || this, getr = nil, oper = nil, asgn = nil; +if (tmp == null) tmp = nil; + getr = self.$s("call", self.$s("js_tmp", tmp), self.$meth(), self.$s("arglist")); + oper = self.$s("call", getr, self.$op(), self.$s("arglist", self.$rhs())); + asgn = self.$s("call", self.$s("js_tmp", tmp), self.$mid(), self.$s("arglist", oper)); + return self.$push("(" + (tmp) + " = ", self.$expr(self.$lhs()), ", ", self.$expr(asgn), ")");}, TMP_13.$$s = self, TMP_13), $a).call($b); + }), nil) && 'compile_operator'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/singleton_class"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/scope"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; - Opal.add_stubs(['$require', '$handle', '$children', '$push', '$in_scope', '$add_temp', '$stmt', '$returns', '$compiler', '$body', '$line', '$to_vars', '$scope', '$recv', '$object']); - self.$require("opal/nodes/scope"); + Opal.add_stubs(['$require', '$attr_accessor', '$attr_reader', '$indent', '$scope', '$compiler', '$scope=', '$call', '$==', '$!', '$class?', '$dup', '$push', '$map', '$ivars', '$gvars', '$parser_indent', '$empty?', '$join', '$+', '$proto', '$%', '$fragment', '$def_in_class?', '$add_proto_ivar', '$include?', '$<<', '$has_local?', '$pop', '$next_temp', '$succ', '$uses_block!', '$identify!', '$unique_temp', '$add_scope_temp', '$parent', '$def?', '$type', '$mid']); + self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; - (function($base, $super) { - function $SingletonClassNode(){}; - var self = $SingletonClassNode = $klass($base, $super, 'SingletonClassNode', $SingletonClassNode); + (function($base, $super) { + function $ScopeNode(){}; + var self = $ScopeNode = $klass($base, $super, 'ScopeNode', $ScopeNode); + + var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2; + + def.type = def.defs = def.parent = def.temps = def.locals = def.compiler = def.proto_ivars = def.ivars = def.gvars = def.args = def.queue = def.unique = def.while_stack = def.identity = def.uses_block = nil; + self.$attr_accessor("parent"); + + self.$attr_accessor("name"); + + self.$attr_accessor("block_name"); + + self.$attr_reader("scope_name"); - var def = self.$$proto, $scope = self.$$scope; + self.$attr_reader("locals"); - self.$handle("sclass"); + self.$attr_reader("ivars"); - self.$children("object", "body"); + self.$attr_reader("gvars"); - return (def.$compile = function() { - var $a, $b, TMP_1, self = this; + self.$attr_accessor("mid"); - self.$push("(function(self) {"); - ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, body_stmt = nil; + self.$attr_accessor("defs"); - self.$add_temp("$scope = self.$$scope"); - self.$add_temp("def = self.$$proto"); - body_stmt = self.$stmt(self.$compiler().$returns(self.$body())); - self.$line(self.$scope().$to_vars()); - return self.$line(body_stmt);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$line("})(", self.$recv(self.$object()), ".$singleton_class())"); - }, nil) && 'compile'; - })(self, $scope.get('ScopeNode')) - })(self) - })(self); -}; + self.$attr_reader("methods"); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/iter"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + self.$attr_accessor("uses_super"); - Opal.add_stubs(['$require', '$handle', '$children', '$extract_opt_args', '$extract_block_arg', '$is_a?', '$last', '$args', '$==', '$type', '$[]', '$pop', '$length', '$args_to_params', '$<<', '$in_scope', '$identify!', '$scope', '$add_temp', '$compile_args', '$add_arg', '$push', '$block_name=', '$line', '$stmt', '$body', '$to_vars', '$unshift', '$join', '$each_with_index', '$variable', '$find', '$to_sym', '$expr', '$raise', '$shift', '$===', '$args_sexp', '$nil?', '$s', '$returns', '$compiler', '$body_sexp', '$each', '$next_temp']); - self.$require("opal/nodes/scope"); - return (function($base) { - var self = $module($base, 'Opal'); + self.$attr_accessor("uses_zuper"); - var def = self.$$proto, $scope = self.$$scope; + self.$attr_accessor("catch_return"); - (function($base) { - var self = $module($base, 'Nodes'); + Opal.defn(self, '$initialize', TMP_1 = function() { + var self = this, $iter = TMP_1.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_1.$$p = null; + $zuper = []; + for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) { + $zuper[$zuper_index] = arguments[$zuper_index]; + } + Opal.find_super_dispatcher(self, 'initialize', TMP_1, $iter).apply(self, $zuper); + self.locals = []; + self.temps = []; + self.args = []; + self.ivars = []; + self.gvars = []; + self.parent = nil; + self.queue = []; + self.unique = "a"; + self.while_stack = []; + self.identity = nil; + self.defs = nil; + self.methods = []; + self.uses_block = false; + return self.proto_ivars = []; + }); - (function($base, $super) { - function $IterNode(){}; - var self = $IterNode = $klass($base, $super, 'IterNode', $IterNode); + Opal.defn(self, '$in_scope', TMP_2 = function() { + var $a, $b, TMP_3, self = this, $iter = TMP_2.$$p, block = $iter || nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_2.$$p = null; + return ($a = ($b = self).$indent, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a, $b; + if (self.parent == null) self.parent = nil; - self.$handle("iter"); + self.parent = self.$compiler().$scope(); + (($a = [self]), $b = self.$compiler(), $b['$scope='].apply($b, $a), $a[$a.length-1]); + block.$call(self); + return (($a = [self.parent]), $b = self.$compiler(), $b['$scope='].apply($b, $a), $a[$a.length-1]);}, TMP_3.$$s = self, TMP_3), $a).call($b); + }); - self.$children("args_sexp", "body_sexp"); + Opal.defn(self, '$class_scope?', function() { + var $a, self = this; - def.$compile = function() { - var $a, $b, TMP_1, self = this, opt_args = nil, block_arg = nil, splat = nil, len = nil, params = nil, to_vars = nil, identity = nil, body_code = nil; + return ((($a = self.type['$==']("class")) !== false && $a !== nil) ? $a : self.type['$==']("module")); + }); - opt_args = self.$extract_opt_args(); - block_arg = self.$extract_block_arg(); - if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("splat") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - splat = self.$args().$last()['$[]'](1)['$[]'](1); - self.$args().$pop(); - len = self.$args().$length();}; - params = self.$args_to_params(self.$args()['$[]']($range(1, -1, false))); - if (splat !== false && splat !== nil) { - params['$<<'](splat)}; - to_vars = identity = body_code = nil; - ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, scope_name = nil; + Opal.defn(self, '$class?', function() { + var self = this; - identity = self.$scope()['$identify!'](); - self.$add_temp("self = " + (identity) + ".$$s || this"); - self.$compile_args(self.$args()['$[]']($range(1, -1, false)), opt_args, params); - if (splat !== false && splat !== nil) { - self.$scope().$add_arg(splat); - self.$push("" + (splat) + " = $slice.call(arguments, " + ($rb_minus(len, 1)) + ");");}; - if (block_arg !== false && block_arg !== nil) { - (($a = [block_arg]), $b = self.$scope(), $b['$block_name='].apply($b, $a), $a[$a.length-1]); - self.$scope().$add_temp(block_arg); - scope_name = self.$scope()['$identify!'](); - self.$line("" + (block_arg) + " = " + (scope_name) + ".$$p || nil, " + (scope_name) + ".$$p = null;");}; - body_code = self.$stmt(self.$body()); - return to_vars = self.$scope().$to_vars();}, TMP_1.$$s = self, TMP_1), $a).call($b); - self.$line(body_code); - self.$unshift(to_vars); - self.$unshift("(" + (identity) + " = function(" + (params.$join(", ")) + "){"); - return self.$push("}, " + (identity) + ".$$s = self, " + (identity) + ")"); - }; + return self.type['$==']("class"); + }); - def.$compile_args = function(args, opt_args, params) { - var $a, $b, TMP_2, self = this; + Opal.defn(self, '$module?', function() { + var self = this; - return ($a = ($b = args).$each_with_index, $a.$$p = (TMP_2 = function(arg, idx){var self = TMP_2.$$s || this, $a, $b, $c, $d, TMP_3, TMP_4, current_opt = nil; -if (arg == null) arg = nil;if (idx == null) idx = nil; - if (arg.$type()['$==']("lasgn")) { - arg = self.$variable(arg['$[]'](1)); - if ((($a = (($b = opt_args !== false && opt_args !== nil) ? current_opt = ($c = ($d = opt_args).$find, $c.$$p = (TMP_3 = function(s){var self = TMP_3.$$s || this; -if (s == null) s = nil; - return s['$[]'](1)['$=='](arg.$to_sym())}, TMP_3.$$s = self, TMP_3), $c).call($d) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("if (" + (arg) + " == null) " + (arg) + " = ", self.$expr(current_opt['$[]'](2)), ";") - } else { - return self.$push("if (" + (arg) + " == null) " + (arg) + " = nil;") - }; - } else if (arg.$type()['$==']("array")) { - return ($a = ($b = arg['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_4 = function(_arg, _idx){var self = TMP_4.$$s || this; -if (_arg == null) _arg = nil;if (_idx == null) _idx = nil; - _arg = self.$variable(_arg['$[]'](1)); - return self.$push("var " + (_arg) + " = " + (params['$[]'](idx)) + "[" + (_idx) + "];");}, TMP_4.$$s = self, TMP_4), $a).call($b) - } else { - return self.$raise("Bad block arg type") - }}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + return self.type['$==']("module"); + }); - def.$extract_opt_args = function() { - var $a, $b, self = this, opt_args = nil; + Opal.defn(self, '$sclass?', function() { + var self = this; - if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("block") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - opt_args = self.$args().$pop(); - opt_args.$shift(); - return opt_args; - } else { - return nil - }; - }; + return self.type['$==']("sclass"); + }); - def.$extract_block_arg = function() { - var $a, $b, self = this, block_arg = nil; + Opal.defn(self, '$top?', function() { + var self = this; - if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("block_pass") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - block_arg = self.$args().$pop(); - return block_arg = block_arg['$[]'](1)['$[]'](1).$to_sym(); - } else { - return nil - }; - }; + return self.type['$==']("top"); + }); - def.$args = function() { - var $a, $b, self = this; + Opal.defn(self, '$iter?', function() { + var self = this; - if ((($a = ((($b = $scope.get('Fixnum')['$==='](self.$args_sexp())) !== false && $b !== nil) ? $b : self.$args_sexp()['$nil?']())) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$s("array") - } else if (self.$args_sexp().$type()['$==']("lasgn")) { - return self.$s("array", self.$args_sexp()) - } else { - return self.$args_sexp()['$[]'](1) - }; - }; + return self.type['$==']("iter"); + }); - def.$body = function() { - var $a, self = this; + Opal.defn(self, '$def?', function() { + var self = this; - return self.$compiler().$returns(((($a = self.$body_sexp()) !== false && $a !== nil) ? $a : self.$s("nil"))); - }; + return self.type['$==']("def"); + }); - return (def.$args_to_params = function(sexp) { - var $a, $b, TMP_5, self = this, result = nil; + Opal.defn(self, '$def_in_class?', function() { + var $a, $b, $c, self = this; - result = []; - ($a = ($b = sexp).$each, $a.$$p = (TMP_5 = function(arg){var self = TMP_5.$$s || this, ref = nil; -if (arg == null) arg = nil; - if (arg['$[]'](0)['$==']("lasgn")) { - ref = self.$variable(arg['$[]'](1)); - self.$add_arg(ref); - return result['$<<'](ref); - } else if (arg['$[]'](0)['$==']("array")) { - return result['$<<'](self.$scope().$next_temp()) - } else { - return self.$raise("Bad js_block_arg: " + (arg['$[]'](0))) - }}, TMP_5.$$s = self, TMP_5), $a).call($b); - return result; - }, nil) && 'args_to_params'; - })(self, $scope.get('ScopeNode')) - })(self) - })(self); -}; + return ($a = ($b = ($c = self.defs['$!'](), $c !== false && $c !== nil ?self.type['$==']("def") : $c), $b !== false && $b !== nil ?self.parent : $b), $a !== false && $a !== nil ?self.parent['$class?']() : $a); + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/def"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + Opal.defn(self, '$proto', function() { + var self = this; - Opal.add_stubs(['$require', '$handle', '$children', '$select', '$==', '$first', '$[]', '$args', '$find', '$include?', '$length', '$block_arg', '$rest_arg', '$size', '$keyword_args', '$mid_to_jsid', '$to_s', '$mid', '$to_sym', '$variable', '$arity_check?', '$compiler', '$arity_check', '$opt_args', '$in_scope', '$mid=', '$scope', '$recvr', '$defs=', '$uses_block!', '$add_arg', '$block_name=', '$process', '$stmt', '$returns', '$stmts', '$add_temp', '$compile_rest_arg', '$compile_opt_args', '$compile_keyword_args', '$identity', '$compile_block_arg', '$unshift', '$current_indent', '$to_vars', '$line', '$uses_zuper', '$catch_return', '$push', '$recv', '$uses_defn?', '$wrap', '$class?', '$proto', '$sclass?', '$top?', '$expr?', '$uses_block?', '$block_name', '$argc', '$each', '$expr', '$empty?', '$helper', '$with_temp', '$last', '$===', '$add_local', '$map', '$inspect', '$join', '$raise', '$iter?', '$module?', '$name', '$!', '$-@', '$each_with_index', '$nil?']); - self.$require("opal/nodes/scope"); - return (function($base) { - var self = $module($base, 'Opal'); + return "def"; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$to_vars', function() { + var $a, $b, $c, TMP_4, $d, TMP_5, $e, TMP_6, $f, TMP_7, self = this, vars = nil, iv = nil, gv = nil, indent = nil, str = nil, pvars = nil, result = nil; - (function($base) { - var self = $module($base, 'Nodes'); + vars = self.temps.$dup(); + ($a = vars).$push.apply($a, Opal.to_a(($b = ($c = self.locals).$map, $b.$$p = (TMP_4 = function(l){var self = TMP_4.$$s || this; +if (l == null) l = nil; + return "" + (l) + " = nil"}, TMP_4.$$s = self, TMP_4), $b).call($c))); + iv = ($b = ($d = self.$ivars()).$map, $b.$$p = (TMP_5 = function(ivar){var self = TMP_5.$$s || this; +if (ivar == null) ivar = nil; + return "if (self" + (ivar) + " == null) self" + (ivar) + " = nil;\n"}, TMP_5.$$s = self, TMP_5), $b).call($d); + gv = ($b = ($e = self.$gvars()).$map, $b.$$p = (TMP_6 = function(gvar){var self = TMP_6.$$s || this; +if (gvar == null) gvar = nil; + return "if ($gvars" + (gvar) + " == null) $gvars" + (gvar) + " = nil;\n"}, TMP_6.$$s = self, TMP_6), $b).call($e); + indent = self.compiler.$parser_indent(); + str = (function() {if ((($b = vars['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + return "" + } else { + return "var " + (vars.$join(", ")) + ";\n" + }; return nil; })(); + if ((($b = self.$ivars()['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + str = $rb_plus(str, "" + (indent) + (iv.$join(indent))) + }; + if ((($b = self.$gvars()['$empty?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + } else { + str = $rb_plus(str, "" + (indent) + (gv.$join(indent))) + }; + if ((($b = ($f = self['$class?'](), $f !== false && $f !== nil ?self.proto_ivars['$empty?']()['$!']() : $f)) !== nil && (!$b.$$is_boolean || $b == true))) { + pvars = ($b = ($f = self.proto_ivars).$map, $b.$$p = (TMP_7 = function(i){var self = TMP_7.$$s || this; +if (i == null) i = nil; + return "" + (self.$proto()) + (i)}, TMP_7.$$s = self, TMP_7), $b).call($f).$join(" = "); + result = "%s\n%s%s = nil;"['$%']([str, indent, pvars]); + } else { + result = str + }; + return self.$fragment(result); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$add_scope_ivar', function(ivar) { + var $a, self = this; - (function($base, $super) { - function $DefNode(){}; - var self = $DefNode = $klass($base, $super, 'DefNode', $DefNode); + if ((($a = self['$def_in_class?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.parent.$add_proto_ivar(ivar) + } else if ((($a = self.ivars['$include?'](ivar)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.ivars['$<<'](ivar) + }; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$add_scope_gvar', function(gvar) { + var $a, self = this; - def.opt_args = def.rest_arg = def.keyword_args = def.block_arg = def.argc = nil; - self.$handle("def"); + if ((($a = self.gvars['$include?'](gvar)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.gvars['$<<'](gvar) + }; + }); - self.$children("recvr", "mid", "args", "stmts"); + Opal.defn(self, '$add_proto_ivar', function(ivar) { + var $a, self = this; - def.$opt_args = function() { - var $a, $b, $c, TMP_1, self = this; + if ((($a = self.proto_ivars['$include?'](ivar)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.proto_ivars['$<<'](ivar) + }; + }); - return ((($a = self.opt_args) !== false && $a !== nil) ? $a : self.opt_args = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$select, $b.$$p = (TMP_1 = function(arg){var self = TMP_1.$$s || this; -if (arg == null) arg = nil; - return arg.$first()['$==']("optarg")}, TMP_1.$$s = self, TMP_1), $b).call($c)); - }; + Opal.defn(self, '$add_arg', function(arg) { + var $a, self = this; - def.$rest_arg = function() { - var $a, $b, $c, TMP_2, self = this; + if ((($a = self.args['$include?'](arg)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.args['$<<'](arg) + }; + return arg; + }); - return ((($a = self.rest_arg) !== false && $a !== nil) ? $a : self.rest_arg = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$find, $b.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; -if (arg == null) arg = nil; - return arg.$first()['$==']("restarg")}, TMP_2.$$s = self, TMP_2), $b).call($c)); - }; + Opal.defn(self, '$add_scope_local', function(local) { + var $a, self = this; - def.$keyword_args = function() { - var $a, $b, $c, TMP_3, self = this; + if ((($a = self['$has_local?'](local)) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + return self.locals['$<<'](local); + }); - return ((($a = self.keyword_args) !== false && $a !== nil) ? $a : self.keyword_args = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$select, $b.$$p = (TMP_3 = function(arg){var self = TMP_3.$$s || this; -if (arg == null) arg = nil; - return ["kwarg", "kwoptarg", "kwrestarg"]['$include?'](arg.$first())}, TMP_3.$$s = self, TMP_3), $b).call($c)); - }; + Opal.defn(self, '$has_local?', function(local) { + var $a, $b, self = this; - def.$block_arg = function() { - var $a, $b, $c, TMP_4, self = this; + if ((($a = ((($b = self.locals['$include?'](local)) !== false && $b !== nil) ? $b : self.args['$include?'](local))) !== nil && (!$a.$$is_boolean || $a == true))) { + return true}; + if ((($a = ($b = self.parent, $b !== false && $b !== nil ?self.type['$==']("iter") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.parent['$has_local?'](local)}; + return false; + }); - return ((($a = self.block_arg) !== false && $a !== nil) ? $a : self.block_arg = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$find, $b.$$p = (TMP_4 = function(arg){var self = TMP_4.$$s || this; -if (arg == null) arg = nil; - return arg.$first()['$==']("blockarg")}, TMP_4.$$s = self, TMP_4), $b).call($c)); - }; + Opal.defn(self, '$add_scope_temp', function() { + var $a, self = this, $splat_index = nil; - def.$argc = function() { - var $a, self = this; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var tmps = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + tmps[$splat_index] = arguments[$splat_index + 0]; + } + return ($a = self.temps).$push.apply($a, Opal.to_a(tmps)); + }); - if ((($a = self.argc) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.argc}; - self.argc = $rb_minus(self.$args().$length(), 1); - if ((($a = self.$block_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.argc = $rb_minus(self.argc, 1)}; - if ((($a = self.$rest_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.argc = $rb_minus(self.argc, 1)}; - self.argc = $rb_minus(self.argc, self.$keyword_args().$size()); - return self.argc; - }; + Opal.defn(self, '$has_temp?', function(tmp) { + var self = this; - def.$compile = function() { - var $a, $b, TMP_5, self = this, jsid = nil, params = nil, scope_name = nil, block_name = nil, arity_code = nil; + return self.temps['$include?'](tmp); + }); - jsid = self.$mid_to_jsid(self.$mid().$to_s()); - params = nil; - scope_name = nil; - if ((($a = self.$block_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { - block_name = self.$variable(self.$block_arg()['$[]'](1)).$to_sym()}; - if ((($a = self.$compiler()['$arity_check?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - arity_code = self.$arity_check(self.$args(), self.$opt_args(), self.$rest_arg(), self.$keyword_args(), block_name, self.$mid())}; - ($a = ($b = self).$in_scope, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this, $a, $b, $c, stmt_code = nil; + Opal.defn(self, '$new_temp', function() { + var $a, self = this, tmp = nil; - (($a = [self.$mid()]), $b = self.$scope(), $b['$mid='].apply($b, $a), $a[$a.length-1]); - if ((($a = self.$recvr()) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [true]), $b = self.$scope(), $b['$defs='].apply($b, $a), $a[$a.length-1])}; - if (block_name !== false && block_name !== nil) { - self.$scope()['$uses_block!'](); - self.$scope().$add_arg(block_name);}; - (($a = [((($c = block_name) !== false && $c !== nil) ? $c : "$yield")]), $b = self.$scope(), $b['$block_name='].apply($b, $a), $a[$a.length-1]); - params = self.$process(self.$args()); - stmt_code = self.$stmt(self.$compiler().$returns(self.$stmts())); - self.$add_temp("self = this"); - self.$compile_rest_arg(); - self.$compile_opt_args(); - self.$compile_keyword_args(); - scope_name = self.$scope().$identity(); - self.$compile_block_arg(); - self.$unshift("\n" + (self.$current_indent()), self.$scope().$to_vars()); - self.$line(stmt_code); - if (arity_code !== false && arity_code !== nil) { - self.$unshift(arity_code)}; - if ((($a = self.$scope().$uses_zuper()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("var $zuper = $slice.call(arguments, 0);")}; - if ((($a = self.$scope().$catch_return()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("try {\n"); - self.$line("} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v }"); - return self.$push(" throw $returner; }"); - } else { - return nil - };}, TMP_5.$$s = self, TMP_5), $a).call($b); - self.$unshift(") {"); - self.$unshift(params); - self.$unshift("function("); - if (scope_name !== false && scope_name !== nil) { - self.$unshift("" + (scope_name) + " = ")}; - self.$line("}"); - if ((($a = self.$recvr()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("Opal.defs(", self.$recv(self.$recvr()), ", '$" + (self.$mid()) + "', "); - self.$push(")"); - } else if ((($a = self['$uses_defn?'](self.$scope())) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$wrap("Opal.defn(self, '$" + (self.$mid()) + "', ", ")") - } else if ((($a = self.$scope()['$class?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("" + (self.$scope().$proto()) + (jsid) + " = ") - } else if ((($a = self.$scope()['$sclass?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("self.$$proto" + (jsid) + " = ") - } else if ((($a = self.$scope()['$top?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$unshift("Opal.Object.$$proto" + (jsid) + " = ") - } else { - self.$unshift("def" + (jsid) + " = ") - }; - if ((($a = self['$expr?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(", ", nil) && '" + (self.$mid()) + "'") + if ((($a = self.queue['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { } else { - return nil + return self.queue.$pop() }; - }; + tmp = self.$next_temp(); + self.temps['$<<'](tmp); + return tmp; + }); - def.$compile_block_arg = function() { - var $a, self = this, scope_name = nil, yielder = nil; + Opal.defn(self, '$next_temp', function() { + var $a, $b, self = this, tmp = nil; - if ((($a = self.$scope()['$uses_block?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - scope_name = self.$scope().$identity(); - yielder = self.$scope().$block_name(); - self.$add_temp("$iter = " + (scope_name) + ".$$p"); - self.$add_temp("" + (yielder) + " = $iter || nil"); - return self.$line("" + (scope_name) + ".$$p = null;"); + while ((($b = true) !== nil && (!$b.$$is_boolean || $b == true))) { + tmp = "$" + (self.unique); + self.unique = self.unique.$succ(); + if ((($b = self['$has_local?'](tmp)) !== nil && (!$b.$$is_boolean || $b == true))) { } else { - return nil - }; - }; + break; + };}; + return tmp; + }); - def.$compile_rest_arg = function() { - var $a, $b, self = this, splat = nil; + Opal.defn(self, '$queue_temp', function(name) { + var self = this; - if ((($a = ($b = self.$rest_arg(), $b !== false && $b !== nil ?self.$rest_arg()['$[]'](1) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - splat = self.$variable(self.$rest_arg()['$[]'](1).$to_sym()); - return self.$line("" + (splat) + " = $slice.call(arguments, " + (self.$argc()) + ");"); - } else { - return nil - }; - }; + return self.queue['$<<'](name); + }); - def.$compile_opt_args = function() { - var $a, $b, TMP_6, self = this; + Opal.defn(self, '$push_while', function() { + var self = this, info = nil; - return ($a = ($b = self.$opt_args()).$each, $a.$$p = (TMP_6 = function(arg){var self = TMP_6.$$s || this; -if (arg == null) arg = nil; - if (arg['$[]'](2)['$[]'](2)['$==']("undefined")) { - return nil;}; - self.$line("if (" + (self.$variable(arg['$[]'](1))) + " == null) {"); - self.$line(" " + (self.$variable(arg['$[]'](1))) + " = ", self.$expr(arg['$[]'](2))); - return self.$line("}");}, TMP_6.$$s = self, TMP_6), $a).call($b); - }; + info = $hash2([], {}); + self.while_stack.$push(info); + return info; + }); - def.$compile_keyword_args = function() { - var $a, $b, TMP_7, $c, TMP_8, self = this, last_opt_arg = nil, opt_arg_name = nil; + Opal.defn(self, '$pop_while', function() { + var self = this; - if ((($a = self.$keyword_args()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil}; - self.$helper("hash2"); - if ((($a = self.$rest_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { - ($a = ($b = self).$with_temp, $a.$$p = (TMP_7 = function(tmp){var self = TMP_7.$$s || this, rest_arg_name = nil; -if (tmp == null) tmp = nil; - rest_arg_name = self.$variable(self.$rest_arg()['$[]'](1).$to_sym()); - self.$line("" + (tmp) + " = " + (rest_arg_name) + "[" + (rest_arg_name) + ".length - 1];"); - self.$line("if (" + (tmp) + " == null || !" + (tmp) + ".$$is_hash) {"); - self.$line(" $kwargs = $hash2([], {});"); - self.$line("} else {"); - self.$line(" $kwargs = " + (rest_arg_name) + ".pop();"); - return self.$line("}");}, TMP_7.$$s = self, TMP_7), $a).call($b) - } else if ((($a = last_opt_arg = self.$opt_args().$last()) !== nil && (!$a.$$is_boolean || $a == true))) { - opt_arg_name = self.$variable(last_opt_arg['$[]'](1)); - self.$line("if (" + (opt_arg_name) + " == null) {"); - self.$line(" $kwargs = $hash2([], {});"); - self.$line("}"); - self.$line("else if (" + (opt_arg_name) + ".$$is_hash) {"); - self.$line(" $kwargs = " + (opt_arg_name) + ";"); - self.$line(" " + (opt_arg_name) + " = ", self.$expr(last_opt_arg['$[]'](2)), ";"); - self.$line("}"); - } else { - self.$line("if ($kwargs == null) {"); - self.$line(" $kwargs = $hash2([], {});"); - self.$line("}"); - }; - self.$line("if (!$kwargs.$$is_hash) {"); - self.$line(" throw Opal.ArgumentError.$new('expecting keyword args');"); - self.$line("}"); - return ($a = ($c = self.$keyword_args()).$each, $a.$$p = (TMP_8 = function(kwarg){var self = TMP_8.$$s || this, $a, $b, TMP_9, $c, $d, TMP_10, $case = nil, arg_name = nil, var_name = nil, kwarg_names = nil, used_args = nil; -if (kwarg == null) kwarg = nil; - return (function() {$case = kwarg.$first();if ("kwoptarg"['$===']($case)) {arg_name = kwarg['$[]'](1); - var_name = self.$variable(arg_name.$to_s()); - self.$add_local(var_name); - self.$line("if ((" + (var_name) + " = $kwargs.smap['" + (arg_name) + "']) == null) {"); - self.$line(" " + (var_name) + " = ", self.$expr(kwarg['$[]'](2))); - return self.$line("}");}else if ("kwarg"['$===']($case)) {arg_name = kwarg['$[]'](1); - var_name = self.$variable(arg_name.$to_s()); - self.$add_local(var_name); - self.$line("if ((" + (var_name) + " = $kwargs.smap['" + (arg_name) + "']) == null) {"); - self.$line(" throw new Error('expecting keyword arg: " + (arg_name) + "')"); - return self.$line("}");}else if ("kwrestarg"['$===']($case)) {arg_name = kwarg['$[]'](1); - var_name = self.$variable(arg_name.$to_s()); - self.$add_local(var_name); - kwarg_names = ($a = ($b = ($c = ($d = self.$keyword_args()).$select, $c.$$p = (TMP_10 = function(kw){var self = TMP_10.$$s || this; -if (kw == null) kw = nil; - return ["kwoptarg", "kwarg"]['$include?'](kw.$first())}, TMP_10.$$s = self, TMP_10), $c).call($d)).$map, $a.$$p = (TMP_9 = function(kw){var self = TMP_9.$$s || this; -if (kw == null) kw = nil; - return "" + (kw['$[]'](1).$to_s().$inspect()) + ": true"}, TMP_9.$$s = self, TMP_9), $a).call($b); - used_args = "{" + (kwarg_names.$join(",")) + "}"; - return self.$line("" + (var_name) + " = Opal.kwrestargs($kwargs, " + (used_args) + ");");}else {return self.$raise("unknown kwarg type " + (kwarg.$first()))}})()}, TMP_8.$$s = self, TMP_8), $a).call($c); - }; + return self.while_stack.$pop(); + }); + + Opal.defn(self, '$in_while?', function() { + var self = this; + + return self.while_stack['$empty?']()['$!'](); + }); - def['$uses_defn?'] = function(scope) { + Opal.defn(self, '$uses_block!', function() { var $a, $b, self = this; - if ((($a = ((($b = scope['$iter?']()) !== false && $b !== nil) ? $b : scope['$module?']())) !== nil && (!$a.$$is_boolean || $a == true))) { - return true - } else if ((($a = ($b = scope['$class?'](), $b !== false && $b !== nil ?["Object", "BasicObject"]['$include?'](scope.$name()) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return true + if ((($a = (($b = self.type['$==']("iter")) ? self.parent : self.type['$==']("iter"))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.parent['$uses_block!']() } else { - return false + self.uses_block = true; + return self['$identify!'](); }; - }; + }); - return (def.$arity_check = function(args, opt, splat, kwargs, block_name, mid) { - var $a, $b, $c, self = this, meth = nil, arity = nil, aritycode = nil; + Opal.defn(self, '$identify!', function() { + var $a, self = this; - meth = mid.$to_s().$inspect(); - arity = $rb_minus(args.$size(), 1); - arity = $rb_minus(arity, (opt.$size())); - if (splat !== false && splat !== nil) { - arity = $rb_minus(arity, 1)}; - arity = $rb_minus(arity, (kwargs.$size())); - if (block_name !== false && block_name !== nil) { - arity = $rb_minus(arity, 1)}; - if ((($a = ((($b = ((($c = opt['$empty?']()['$!']()) !== false && $c !== nil) ? $c : kwargs['$empty?']()['$!']())) !== false && $b !== nil) ? $b : splat)) !== nil && (!$a.$$is_boolean || $a == true))) { - arity = $rb_minus(arity['$-@'](), 1)}; - aritycode = "var $arity = arguments.length;"; - if ($rb_lt(arity, 0)) { - return $rb_plus(aritycode, "if ($arity < " + (($rb_plus(arity, 1))['$-@']()) + ") { Opal.ac($arity, " + (arity) + ", this, " + (meth) + "); }") - } else { - return $rb_plus(aritycode, "if ($arity !== " + (arity) + ") { Opal.ac($arity, " + (arity) + ", this, " + (meth) + "); }") - }; - }, nil) && 'arity_check'; - })(self, $scope.get('ScopeNode')); + if ((($a = self.identity) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.identity}; + self.identity = self.compiler.$unique_temp(); + if ((($a = self.parent) !== nil && (!$a.$$is_boolean || $a == true))) { + self.parent.$add_scope_temp(self.identity)}; + return self.identity; + }); + + Opal.defn(self, '$identity', function() { + var self = this; + + return self.identity; + }); + + Opal.defn(self, '$find_parent_def', function() { + var $a, $b, self = this, scope = nil; - (function($base, $super) { - function $ArgsNode(){}; - var self = $ArgsNode = $klass($base, $super, 'ArgsNode', $ArgsNode); + scope = self; + while ((($b = scope = scope.$parent()) !== nil && (!$b.$$is_boolean || $b == true))) { + if ((($b = scope['$def?']()) !== nil && (!$b.$$is_boolean || $b == true))) { + return scope}}; + return nil; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$get_super_chain', function() { + var $a, $b, self = this, chain = nil, scope = nil, defn = nil, mid = nil; - self.$handle("args"); + $a = [[], self, "null", "null"], chain = $a[0], scope = $a[1], defn = $a[2], mid = $a[3], $a; + while (scope !== false && scope !== nil) { + if (scope.$type()['$==']("iter")) { + chain['$<<'](scope['$identify!']()); + if ((($b = scope.$parent()) !== nil && (!$b.$$is_boolean || $b == true))) { + scope = scope.$parent()}; + } else if (scope.$type()['$==']("def")) { + defn = scope['$identify!'](); + mid = "'" + (scope.$mid()) + "'"; + break;; + } else { + break; + }}; + return [chain, defn, mid]; + }); - return (def.$compile = function() { - var $a, $b, TMP_11, self = this, done_kwargs = nil; + return (Opal.defn(self, '$uses_block?', function() { + var self = this; - done_kwargs = false; - return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_11 = function(child, idx){var self = TMP_11.$$s || this, $a, $b, $case = nil; -if (child == null) child = nil;if (idx == null) idx = nil; - if ("blockarg"['$=='](child.$first())) { - return nil;}; - if ((($a = (($b = "restarg"['$=='](child.$first())) ? child['$[]'](1)['$nil?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil;}; - return (function() {$case = child.$first();if ("kwarg"['$===']($case) || "kwoptarg"['$===']($case) || "kwrestarg"['$===']($case)) {if (done_kwargs !== false && done_kwargs !== nil) { - return nil - } else { - done_kwargs = true; - if (idx['$=='](0)) { - } else { - self.$push(", ") - }; - self.$scope().$add_arg("$kwargs"); - return self.$push("$kwargs"); - }}else {child = child['$[]'](1).$to_sym(); - if (idx['$=='](0)) { - } else { - self.$push(", ") - }; - child = self.$variable(child); - self.$scope().$add_arg(child.$to_sym()); - return self.$push(child.$to_s());}})();}, TMP_11.$$s = self, TMP_11), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - })(self) - })(self); + return self.uses_block; + }), nil) && 'uses_block?'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/if"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/module"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$handle', '$children', '$truthy', '$falsy', '$skip_check_present?', '$skip_check_present_not?', '$push', '$js_truthy', '$test', '$indent', '$line', '$stmt', '$==', '$type', '$needs_wrapper?', '$wrap', '$returns', '$compiler', '$true_body', '$s', '$false_body', '$expr?', '$recv?']); - self.$require("opal/nodes/base"); + Opal.add_stubs(['$require', '$handle', '$children', '$name_and_base', '$helper', '$push', '$line', '$in_scope', '$name=', '$scope', '$add_temp', '$proto', '$stmt', '$body', '$s', '$empty_line', '$to_vars', '$==', '$type', '$cid', '$to_s', '$[]', '$expr', '$raise']); + self.$require("opal/nodes/scope"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $IfNode(){}; - var self = $IfNode = $klass($base, $super, 'IfNode', $IfNode); + function $ModuleNode(){}; + var self = $ModuleNode = $klass($base, $super, 'ModuleNode', $ModuleNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("if"); + self.$handle("module"); - self.$children("test", "true_body", "false_body"); + self.$children("cid", "body"); - Opal.cdecl($scope, 'RUBY_ENGINE_CHECK', ["call", ["const", "RUBY_ENGINE"], "==", ["arglist", ["str", "opal"]]]); + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, name = nil, base = nil; - Opal.cdecl($scope, 'RUBY_PLATFORM_CHECK', ["call", ["const", "RUBY_PLATFORM"], "==", ["arglist", ["str", "opal"]]]); + $b = self.$name_and_base(), $a = Opal.to_ary($b), name = ($a[0] == null ? nil : $a[0]), base = ($a[1] == null ? nil : $a[1]), $b; + self.$helper("module"); + self.$push("(function($base) {"); + self.$line(" var $" + (name) + ", self = $" + (name) + " = $module($base, '" + (name) + "');"); + ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, body_code = nil; - Opal.cdecl($scope, 'RUBY_ENGINE_CHECK_NOT', ["call", ["call", ["const", "RUBY_ENGINE"], "==", ["arglist", ["str", "opal"]]], "!", ["arglist"]]); + (($a = [name]), $b = self.$scope(), $b['$name='].apply($b, $a), $a[$a.length-1]); + self.$add_temp("" + (self.$scope().$proto()) + " = self.$$proto"); + self.$add_temp("$scope = self.$$scope"); + body_code = self.$stmt(((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil"))); + self.$empty_line(); + self.$line(self.$scope().$to_vars()); + return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); + return self.$line("})(", base, ")"); + }); - Opal.cdecl($scope, 'RUBY_PLATFORM_CHECK_NOT', ["call", ["call", ["const", "RUBY_PLATFORM"], "==", ["arglist", ["str", "opal"]]], "!", ["arglist"]]); + return (Opal.defn(self, '$name_and_base', function() { + var self = this; - def.$compile = function() { - var $a, $b, TMP_1, $c, TMP_2, self = this, truthy = nil, falsy = nil; + if (self.$cid().$type()['$==']("const")) { + return [self.$cid()['$[]'](1).$to_s(), "$scope.base"] + } else if (self.$cid().$type()['$==']("colon2")) { + return [self.$cid()['$[]'](2).$to_s(), self.$expr(self.$cid()['$[]'](1))] + } else if (self.$cid().$type()['$==']("colon3")) { + return [self.$cid()['$[]'](1).$to_s(), "Opal.Object"] + } else { + return self.$raise("Bad receiver in module") + }; + }), nil) && 'name_and_base'; + })($scope.base, $scope.get('ScopeNode')) + })($scope.base) + })($scope.base); +}; - $a = [self.$truthy(), self.$falsy()], truthy = $a[0], falsy = $a[1]; - if ((($a = self['$skip_check_present?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - falsy = nil}; - if ((($a = self['$skip_check_present_not?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - truthy = nil}; - self.$push("if (", self.$js_truthy(self.$test()), ") {"); - if (truthy !== false && truthy !== nil) { - ($a = ($b = self).$indent, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/class"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - return self.$line(self.$stmt(truthy))}, TMP_1.$$s = self, TMP_1), $a).call($b)}; - if (falsy !== false && falsy !== nil) { - if (falsy.$type()['$==']("if")) { - self.$line("} else ", self.$stmt(falsy)) - } else { - ($a = ($c = self).$indent, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this; + Opal.add_stubs(['$require', '$handle', '$children', '$name_and_base', '$helper', '$push', '$line', '$in_scope', '$name=', '$scope', '$add_temp', '$proto', '$body_code', '$empty_line', '$to_vars', '$super_code', '$sup', '$expr', '$stmt', '$returns', '$compiler', '$body', '$s']); + self.$require("opal/nodes/module"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - self.$line("} else {"); - return self.$line(self.$stmt(falsy));}, TMP_2.$$s = self, TMP_2), $a).call($c); - self.$line("}"); - } - } else { - self.$push("}") - }; - if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(function() {", "; return nil; })()") - } else { - return nil - }; - }; + var def = self.$$proto, $scope = self.$$scope; - def['$skip_check_present?'] = function() { - var $a, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - return ((($a = self.$test()['$==']($scope.get('RUBY_ENGINE_CHECK'))) !== false && $a !== nil) ? $a : self.$test()['$==']($scope.get('RUBY_PLATFORM_CHECK'))); - }; + var def = self.$$proto, $scope = self.$$scope; - def['$skip_check_present_not?'] = function() { - var $a, self = this; + (function($base, $super) { + function $ClassNode(){}; + var self = $ClassNode = $klass($base, $super, 'ClassNode', $ClassNode); - return ((($a = self.$test()['$==']($scope.get('RUBY_ENGINE_CHECK_NOT'))) !== false && $a !== nil) ? $a : self.$test()['$==']($scope.get('RUBY_PLATFORM_CHECK_NOT'))); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$truthy = function() { - var $a, self = this; + self.$handle("class"); - if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compiler().$returns(((($a = self.$true_body()) !== false && $a !== nil) ? $a : self.$s("nil"))) - } else { - return self.$true_body() - }; - }; + self.$children("cid", "sup", "body"); + + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, name = nil, base = nil; + + $b = self.$name_and_base(), $a = Opal.to_ary($b), name = ($a[0] == null ? nil : $a[0]), base = ($a[1] == null ? nil : $a[1]), $b; + self.$helper("klass"); + self.$push("(function($base, $super) {"); + self.$line(" function $" + (name) + "(){};"); + self.$line(" var self = $" + (name) + " = $klass($base, $super, '" + (name) + "', $" + (name) + ");"); + ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, body_code = nil; + + (($a = [name]), $b = self.$scope(), $b['$name='].apply($b, $a), $a[$a.length-1]); + self.$add_temp("" + (self.$scope().$proto()) + " = self.$$proto"); + self.$add_temp("$scope = self.$$scope"); + body_code = self.$body_code(); + self.$empty_line(); + self.$line(self.$scope().$to_vars()); + return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); + return self.$line("})(", base, ", ", self.$super_code(), ")"); + }); - def.$falsy = function() { + Opal.defn(self, '$super_code', function() { var $a, self = this; - if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compiler().$returns(((($a = self.$false_body()) !== false && $a !== nil) ? $a : self.$s("nil"))) + if ((($a = self.$sup()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(self.$sup()) } else { - return self.$false_body() + return "null" }; - }; + }); - return (def['$needs_wrapper?'] = function() { + return (Opal.defn(self, '$body_code', function() { var $a, self = this; - return ((($a = self['$expr?']()) !== false && $a !== nil) ? $a : self['$recv?']()); - }, nil) && 'needs_wrapper?'; - })(self, $scope.get('Base')) - })(self) - })(self); + return self.$stmt(self.$compiler().$returns(((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil")))); + }), nil) && 'body_code'; + })($scope.base, $scope.get('ModuleNode')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/logic"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/singleton_class"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$handle', '$children', '$in_while?', '$push', '$expr_or_nil', '$value', '$wrap', '$compile_while', '$iter?', '$scope', '$compile_iter', '$error', '$[]', '$while_loop', '$stmt?', '$[]=', '$identity', '$with_temp', '$expr', '$==', '$empty_splat?', '$type', '$recv', '$lhs', '$rhs', '$js_truthy_optimize', '$nil?', '$s', '$size', '$find_parent_def', '$expr?', '$def?', '$return_in_iter?', '$return_expr_in_def?', '$scope_to_catch_return', '$catch_return=', '$return_val', '$raise', '$to_s']); - self.$require("opal/nodes/base"); + Opal.add_stubs(['$require', '$handle', '$children', '$push', '$in_scope', '$add_temp', '$stmt', '$returns', '$compiler', '$body', '$line', '$to_vars', '$scope', '$recv', '$object']); + self.$require("opal/nodes/scope"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $NextNode(){}; - var self = $NextNode = $klass($base, $super, 'NextNode', $NextNode); + function $SingletonClassNode(){}; + var self = $SingletonClassNode = $klass($base, $super, 'SingletonClassNode', $SingletonClassNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("next"); + self.$handle("sclass"); - self.$children("value"); + self.$children("object", "body"); - return (def.$compile = function() { - var $a, self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; - if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("continue;")}; - self.$push(self.$expr_or_nil(self.$value())); - return self.$wrap("return ", ";"); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + self.$push("(function(self) {"); + ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, body_stmt = nil; + + self.$add_temp("$scope = self.$$scope"); + self.$add_temp("def = self.$$proto"); + body_stmt = self.$stmt(self.$compiler().$returns(self.$body())); + self.$line(self.$scope().$to_vars()); + return self.$line(body_stmt);}, TMP_1.$$s = self, TMP_1), $a).call($b); + return self.$line("})(Opal.get_singleton_class(", self.$recv(self.$object()), "))"); + }), nil) && 'compile'; + })($scope.base, $scope.get('ScopeNode')) + })($scope.base) + })($scope.base); +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/iter"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range, $hash2 = Opal.hash2; + + Opal.add_stubs(['$require', '$handle', '$children', '$extract_opt_args', '$extract_block_arg', '$is_a?', '$last', '$args', '$==', '$type', '$[]', '$pop', '$length', '$args_to_params', '$<<', '$in_scope', '$identify!', '$scope', '$add_temp', '$compile_args', '$add_arg', '$push', '$-', '$block_name=', '$line', '$stmt', '$body', '$to_vars', '$unshift', '$join', '$each_with_index', '$variable', '$find', '$to_sym', '$expr', '$has_key?', '$include?', '$[]=', '$map', '$raise', '$shift', '$===', '$args_sexp', '$nil?', '$s', '$returns', '$compiler', '$body_sexp', '$each', '$next_temp']); + self.$require("opal/nodes/scope"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); + + var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $BreakNode(){}; - var self = $BreakNode = $klass($base, $super, 'BreakNode', $BreakNode); + function $IterNode(){}; + var self = $IterNode = $klass($base, $super, 'IterNode', $IterNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("break"); + self.$handle("iter"); + + self.$children("args_sexp", "body_sexp"); + + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, opt_args = nil, block_arg = nil, splat = nil, len = nil, params = nil, to_vars = nil, identity = nil, body_code = nil; + + opt_args = self.$extract_opt_args(); + block_arg = self.$extract_block_arg(); + if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("splat") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + splat = self.$args().$last()['$[]'](1)['$[]'](1); + self.$args().$pop(); + len = self.$args().$length();}; + params = self.$args_to_params(self.$args()['$[]']($range(1, -1, false))); + if (splat !== false && splat !== nil) { + params['$<<'](splat)}; + to_vars = identity = body_code = nil; + ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, scope_name = nil; + + identity = self.$scope()['$identify!'](); + self.$add_temp("self = " + (identity) + ".$$s || this"); + self.$compile_args(self.$args()['$[]']($range(1, -1, false)), opt_args, params); + if (splat !== false && splat !== nil) { + self.$scope().$add_arg(splat); + self.$push("" + (splat) + " = $slice.call(arguments, " + ($rb_minus(len, 1)) + ");");}; + if (block_arg !== false && block_arg !== nil) { + (($a = [block_arg]), $b = self.$scope(), $b['$block_name='].apply($b, $a), $a[$a.length-1]); + self.$scope().$add_temp(block_arg); + scope_name = self.$scope()['$identify!'](); + self.$line("" + (block_arg) + " = " + (scope_name) + ".$$p || nil, " + (scope_name) + ".$$p = null;");}; + body_code = self.$stmt(self.$body()); + return to_vars = self.$scope().$to_vars();}, TMP_1.$$s = self, TMP_1), $a).call($b); + self.$line(body_code); + self.$unshift(to_vars); + self.$unshift("(" + (identity) + " = function(" + (params.$join(", ")) + "){"); + return self.$push("}, " + (identity) + ".$$s = self, " + (identity) + ")"); + }); + + Opal.defn(self, '$compile_args', function(args, opt_args, params) { + var $a, $b, TMP_2, self = this; - self.$children("value"); + return ($a = ($b = args).$each_with_index, $a.$$p = (TMP_2 = function(arg, idx){var self = TMP_2.$$s || this, $a, $b, $c, $d, TMP_3, TMP_4, TMP_5, current_opt = nil, vars = nil; +if (arg == null) arg = nil;if (idx == null) idx = nil; + if (arg.$type()['$==']("lasgn")) { + arg = self.$variable(arg['$[]'](1)); + if ((($a = (($b = opt_args !== false && opt_args !== nil) ? current_opt = ($c = ($d = opt_args).$find, $c.$$p = (TMP_3 = function(s){var self = TMP_3.$$s || this; +if (s == null) s = nil; + return s['$[]'](1)['$=='](arg.$to_sym())}, TMP_3.$$s = self, TMP_3), $c).call($d) : opt_args)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("if (" + (arg) + " == null) " + (arg) + " = ", self.$expr(current_opt['$[]'](2)), ";") + } else { + return self.$push("if (" + (arg) + " == null) " + (arg) + " = nil;") + }; + } else if (arg.$type()['$==']("array")) { + vars = $hash2([], {}); + ($a = ($b = arg['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_4 = function(_arg, _idx){var self = TMP_4.$$s || this, $a, $b; +if (_arg == null) _arg = nil;if (_idx == null) _idx = nil; + _arg = self.$variable(_arg['$[]'](1)); + if ((($a = ((($b = vars['$has_key?'](_arg)) !== false && $b !== nil) ? $b : params['$include?'](_arg))) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return vars['$[]='](_arg, "" + (params['$[]'](idx)) + "[" + (_idx) + "]") + };}, TMP_4.$$s = self, TMP_4), $a).call($b); + return self.$push("var " + (($a = ($c = vars).$map, $a.$$p = (TMP_5 = function(k, v){var self = TMP_5.$$s || this; +if (k == null) k = nil;if (v == null) v = nil; + return "" + (k) + " = " + (v)}, TMP_5.$$s = self, TMP_5), $a).call($c).$join(", ")) + ";"); + } else { + return self.$raise("Bad block arg type") + }}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - def.$compile = function() { - var $a, self = this; + Opal.defn(self, '$extract_opt_args', function() { + var $a, $b, self = this, opt_args = nil; - if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_while() - } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_iter() + if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("block") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + opt_args = self.$args().$pop(); + opt_args.$shift(); + return opt_args; } else { - return self.$error("void value expression: cannot use break outside of iter/while") + return nil }; - }; + }); - def.$compile_while = function() { - var $a, self = this; + Opal.defn(self, '$extract_block_arg', function() { + var $a, $b, self = this, block_arg = nil; - if ((($a = self.$while_loop()['$[]']("closure")) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("return ", self.$expr_or_nil(self.$value())) + if ((($a = ($b = self.$args().$last()['$is_a?']($scope.get('Sexp')), $b !== false && $b !== nil ?self.$args().$last().$type()['$==']("block_pass") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + block_arg = self.$args().$pop(); + return block_arg = block_arg['$[]'](1)['$[]'](1).$to_sym(); } else { - return self.$push("break;") + return nil }; - }; + }); - return (def.$compile_iter = function() { - var $a, self = this; + Opal.defn(self, '$args', function() { + var $a, $b, self = this; - if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ((($b = $scope.get('Fixnum')['$==='](self.$args_sexp())) !== false && $b !== nil) ? $b : self.$args_sexp()['$nil?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$s("array") + } else if (self.$args_sexp().$type()['$==']("lasgn")) { + return self.$s("array", self.$args_sexp()) } else { - self.$error("break must be used as a statement") + return self.$args_sexp()['$[]'](1) }; - self.$push(self.$expr_or_nil(self.$value())); - return self.$wrap("return ($breaker.$v = ", ", $breaker)"); - }, nil) && 'compile_iter'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $RedoNode(){}; - var self = $RedoNode = $klass($base, $super, 'RedoNode', $RedoNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("redo"); + }); - def.$compile = function() { + Opal.defn(self, '$body', function() { var $a, self = this; - if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_while() - } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_iter() - } else { - return self.$push("REDO()") - }; - }; - - def.$compile_while = function() { - var self = this; - - self.$while_loop()['$[]=']("use_redo", true); - return self.$push("" + (self.$while_loop()['$[]']("redo_var")) + " = true"); - }; - - return (def.$compile_iter = function() { - var self = this; + return self.$compiler().$returns(((($a = self.$body_sexp()) !== false && $a !== nil) ? $a : self.$s("nil"))); + }); - return self.$push("return " + (self.$scope().$identity()) + ".apply(null, $slice.call(arguments))"); - }, nil) && 'compile_iter'; - })(self, $scope.get('Base')); + return (Opal.defn(self, '$args_to_params', function(sexp) { + var $a, $b, TMP_6, self = this, result = nil; - (function($base, $super) { - function $NotNode(){}; - var self = $NotNode = $klass($base, $super, 'NotNode', $NotNode); + result = []; + ($a = ($b = sexp).$each, $a.$$p = (TMP_6 = function(arg){var self = TMP_6.$$s || this, $a, $b, ref = nil; +if (arg == null) arg = nil; + if (arg['$[]'](0)['$==']("lasgn")) { + ref = self.$variable(arg['$[]'](1)); + if ((($a = (($b = ref['$==']("_")) ? result['$include?'](ref) : ref['$==']("_"))) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil;}; + self.$add_arg(ref); + return result['$<<'](ref); + } else if (arg['$[]'](0)['$==']("array")) { + return result['$<<'](self.$scope().$next_temp()) + } else { + return self.$raise("Bad js_block_arg: " + (arg['$[]'](0))) + }}, TMP_6.$$s = self, TMP_6), $a).call($b); + return result; + }), nil) && 'args_to_params'; + })($scope.base, $scope.get('ScopeNode')) + })($scope.base) + })($scope.base); +}; - var def = self.$$proto, $scope = self.$$scope; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/def"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); + } + function $rb_lt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - self.$handle("not"); + Opal.add_stubs(['$require', '$handle', '$children', '$select', '$==', '$first', '$[]', '$args', '$find', '$include?', '$-', '$length', '$block_arg', '$rest_arg', '$size', '$keyword_args', '$to_sym', '$variable', '$arity_check?', '$compiler', '$arity_check', '$opt_args', '$mid', '$in_scope', '$mid=', '$scope', '$recvr', '$defs=', '$uses_block!', '$add_arg', '$block_name=', '$process', '$stmt', '$returns', '$stmts', '$add_temp', '$compile_rest_arg', '$compile_opt_args', '$compile_keyword_args', '$identity', '$compile_block_arg', '$delete', '$locals', '$uses_zuper', '$add_local', '$line', '$unshift', '$current_indent', '$to_vars', '$catch_return', '$push', '$recv', '$iter?', '$wrap', '$module?', '$class?', '$sclass?', '$defs', '$top?', '$raise', '$expr?', '$uses_block?', '$block_name', '$argc', '$each', '$expr', '$empty?', '$helper', '$with_temp', '$last', '$===', '$to_s', '$map', '$inspect', '$join', '$!', '$-@', '$<', '$+', '$>', '$<<', '$each_with_index']); + self.$require("opal/nodes/scope"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - self.$children("value"); + var def = self.$$proto, $scope = self.$$scope; - return (def.$compile = function() { - var $a, $b, TMP_1, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; -if (tmp == null) tmp = nil; - self.$push(self.$expr(self.$value())); - return self.$wrap("(" + (tmp) + " = ", ", (" + (tmp) + " === nil || " + (tmp) + " === false))");}, TMP_1.$$s = self, TMP_1), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $SplatNode(){}; - var self = $SplatNode = $klass($base, $super, 'SplatNode', $SplatNode); + function $DefNode(){}; + var self = $DefNode = $klass($base, $super, 'DefNode', $DefNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("splat"); - - self.$children("value"); - - def['$empty_splat?'] = function() { - var $a, self = this; - - return ((($a = self.$value()['$=='](["nil"])) !== false && $a !== nil) ? $a : self.$value()['$=='](["paren", ["nil"]])); - }; + def.opt_args = def.rest_arg = def.keyword_args = def.block_arg = def.argc = nil; + self.$handle("def"); - return (def.$compile = function() { - var $a, self = this; + self.$children("recvr", "mid", "args", "stmts"); - if ((($a = self['$empty_splat?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("[]") - } else if (self.$value().$type()['$==']("sym")) { - return self.$push("[", self.$expr(self.$value()), "]") - } else { - return self.$push(self.$recv(self.$value())) - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.defn(self, '$opt_args', function() { + var $a, $b, $c, TMP_1, self = this; - (function($base, $super) { - function $OrNode(){}; - var self = $OrNode = $klass($base, $super, 'OrNode', $OrNode); + return ((($a = self.opt_args) !== false && $a !== nil) ? $a : self.opt_args = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$select, $b.$$p = (TMP_1 = function(arg){var self = TMP_1.$$s || this; +if (arg == null) arg = nil; + return arg.$first()['$==']("optarg")}, TMP_1.$$s = self, TMP_1), $b).call($c)); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$rest_arg', function() { + var $a, $b, $c, TMP_2, self = this; - self.$handle("or"); + return ((($a = self.rest_arg) !== false && $a !== nil) ? $a : self.rest_arg = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$find, $b.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this; +if (arg == null) arg = nil; + return arg.$first()['$==']("restarg")}, TMP_2.$$s = self, TMP_2), $b).call($c)); + }); - self.$children("lhs", "rhs"); + Opal.defn(self, '$keyword_args', function() { + var $a, $b, $c, TMP_3, self = this; - return (def.$compile = function() { - var $a, $b, TMP_2, self = this; + return ((($a = self.keyword_args) !== false && $a !== nil) ? $a : self.keyword_args = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$select, $b.$$p = (TMP_3 = function(arg){var self = TMP_3.$$s || this; +if (arg == null) arg = nil; + return ["kwarg", "kwoptarg", "kwrestarg"]['$include?'](arg.$first())}, TMP_3.$$s = self, TMP_3), $b).call($c)); + }); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; -if (tmp == null) tmp = nil; - self.$push("(((" + (tmp) + " = "); - self.$push(self.$expr(self.$lhs())); - self.$push(") !== false && " + (tmp) + " !== nil) ? " + (tmp) + " : "); - self.$push(self.$expr(self.$rhs())); - return self.$push(")");}, TMP_2.$$s = self, TMP_2), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.defn(self, '$block_arg', function() { + var $a, $b, $c, TMP_4, self = this; - (function($base, $super) { - function $AndNode(){}; - var self = $AndNode = $klass($base, $super, 'AndNode', $AndNode); + return ((($a = self.block_arg) !== false && $a !== nil) ? $a : self.block_arg = ($b = ($c = self.$args()['$[]']($range(1, -1, false))).$find, $b.$$p = (TMP_4 = function(arg){var self = TMP_4.$$s || this; +if (arg == null) arg = nil; + return arg.$first()['$==']("blockarg")}, TMP_4.$$s = self, TMP_4), $b).call($c)); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$argc', function() { + var $a, self = this; - self.$handle("and"); + if ((($a = self.argc) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.argc}; + self.argc = $rb_minus(self.$args().$length(), 1); + if ((($a = self.$block_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.argc = $rb_minus(self.argc, 1)}; + if ((($a = self.$rest_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.argc = $rb_minus(self.argc, 1)}; + self.argc = $rb_minus(self.argc, self.$keyword_args().$size()); + return self.argc; + }); - self.$children("lhs", "rhs"); + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_5, $c, self = this, params = nil, scope_name = nil, block_name = nil, arity_code = nil; - return (def.$compile = function() { - var $a, $b, TMP_3, self = this, truthy_opt = nil; + params = nil; + scope_name = nil; + if ((($a = self.$block_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { + block_name = self.$variable(self.$block_arg()['$[]'](1)).$to_sym()}; + if ((($a = self.$compiler()['$arity_check?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + arity_code = self.$arity_check(self.$args(), self.$opt_args(), self.$rest_arg(), self.$keyword_args(), block_name, self.$mid())}; + ($a = ($b = self).$in_scope, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this, $a, $b, $c, stmt_code = nil; - truthy_opt = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this, $a; -if (tmp == null) tmp = nil; - if ((($a = truthy_opt = self.$js_truthy_optimize(self.$lhs())) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("((" + (tmp) + " = ", truthy_opt); - self.$push(") ? "); - self.$push(self.$expr(self.$rhs())); - return self.$push(" : " + (tmp) + ")"); + (($a = [self.$mid()]), $b = self.$scope(), $b['$mid='].apply($b, $a), $a[$a.length-1]); + if ((($a = self.$recvr()) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [true]), $b = self.$scope(), $b['$defs='].apply($b, $a), $a[$a.length-1])}; + if (block_name !== false && block_name !== nil) { + self.$scope()['$uses_block!'](); + self.$scope().$add_arg(block_name);}; + (($a = [((($c = block_name) !== false && $c !== nil) ? $c : "$yield")]), $b = self.$scope(), $b['$block_name='].apply($b, $a), $a[$a.length-1]); + params = self.$process(self.$args()); + stmt_code = self.$stmt(self.$compiler().$returns(self.$stmts())); + self.$add_temp("self = this"); + self.$compile_rest_arg(); + self.$compile_opt_args(); + self.$compile_keyword_args(); + scope_name = self.$scope().$identity(); + self.$compile_block_arg(); + if ((($a = self.$rest_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scope().$locals().$delete(self.$rest_arg()['$[]'](1))}; + if ((($a = self.$scope().$uses_zuper()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$add_local("$zuper"); + self.$add_local("$zuper_index"); + self.$line("$zuper = [];"); + self.$line("for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {"); + self.$line(" $zuper[$zuper_index] = arguments[$zuper_index];"); + self.$line("}");}; + self.$unshift("\n" + (self.$current_indent()), self.$scope().$to_vars()); + if (arity_code !== false && arity_code !== nil) { + self.$line(arity_code)}; + self.$line(stmt_code); + if ((($a = self.$scope().$catch_return()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$unshift("try {\n"); + self.$line("} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v }"); + return self.$push(" throw $returner; }"); + } else { + return nil + };}, TMP_5.$$s = self, TMP_5), $a).call($b); + self.$unshift(") {"); + self.$unshift(params); + self.$unshift("function("); + if (scope_name !== false && scope_name !== nil) { + self.$unshift("" + (scope_name) + " = ")}; + self.$line("}"); + if ((($a = self.$recvr()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$unshift("Opal.defs(", self.$recv(self.$recvr()), ", '$" + (self.$mid()) + "', "); + self.$push(")"); + } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$wrap("Opal.def(self, '$" + (self.$mid()) + "', ", ")") + } else if ((($a = ((($c = self.$scope()['$module?']()) !== false && $c !== nil) ? $c : self.$scope()['$class?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$wrap("Opal.defn(self, '$" + (self.$mid()) + "', ", ")") + } else if ((($a = self.$scope()['$sclass?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self.$scope().$defs()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$unshift("Opal.defs(self, '$" + (self.$mid()) + "', ") } else { - self.$push("(" + (tmp) + " = "); - self.$push(self.$expr(self.$lhs())); - self.$push(", " + (tmp) + " !== false && " + (tmp) + " !== nil ?"); - self.$push(self.$expr(self.$rhs())); - return self.$push(" : " + (tmp) + ")"); - }}, TMP_3.$$s = self, TMP_3), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $ReturnNode(){}; - var self = $ReturnNode = $klass($base, $super, 'ReturnNode', $ReturnNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("return"); - - self.$children("value"); - - def.$return_val = function() { - var $a, self = this; - - if ((($a = self.$value()['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$expr(self.$s("nil")) - } else if ($rb_gt(self.$children().$size(), 1)) { - return self.$expr(($a = self).$s.apply($a, ["array"].concat(self.$children()))) + self.$unshift("Opal.defn(self, '$" + (self.$mid()) + "', ") + }; + self.$push(")"); + } else if ((($a = self.$scope()['$top?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$unshift("Opal.defn(Opal.Object, '$" + (self.$mid()) + "', "); + self.$push(")"); } else { - return self.$expr(self.$value()) + self.$raise("Unsupported use of `def`; please file a bug at https://github.com/opal/opal reporting this message.") }; - }; - - def['$return_in_iter?'] = function() { - var $a, $b, self = this, parent_def = nil; - - if ((($a = ($b = self.$scope()['$iter?'](), $b !== false && $b !== nil ?parent_def = self.$scope().$find_parent_def() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return parent_def + if ((($a = self['$expr?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(", ", nil) && '" + (self.$mid()) + "'") } else { return nil }; - }; + }); - def['$return_expr_in_def?'] = function() { - var $a, $b, self = this; + Opal.defn(self, '$compile_block_arg', function() { + var $a, self = this, scope_name = nil, yielder = nil; - if ((($a = ($b = self['$expr?'](), $b !== false && $b !== nil ?self.$scope()['$def?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$scope() + if ((($a = self.$scope()['$uses_block?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + scope_name = self.$scope().$identity(); + yielder = self.$scope().$block_name(); + self.$add_temp("$iter = " + (scope_name) + ".$$p"); + self.$add_temp("" + (yielder) + " = $iter || nil"); + return self.$line("" + (scope_name) + ".$$p = null;"); } else { return nil }; - }; - - def.$scope_to_catch_return = function() { - var $a, self = this; - - return ((($a = self['$return_in_iter?']()) !== false && $a !== nil) ? $a : self['$return_expr_in_def?']()); - }; + }); - return (def.$compile = function() { - var $a, $b, self = this, def_scope = nil; + Opal.defn(self, '$compile_rest_arg', function() { + var $a, $b, self = this, splat = nil; - if ((($a = def_scope = self.$scope_to_catch_return()) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [true]), $b = def_scope, $b['$catch_return='].apply($b, $a), $a[$a.length-1]); - return self.$push("Opal.ret(", self.$return_val(), ")"); - } else if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("return ", self.$return_val()) + if ((($a = ($b = self.$rest_arg(), $b !== false && $b !== nil ?self.$rest_arg()['$[]'](1) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + splat = self.$variable(self.$rest_arg()['$[]'](1).$to_sym()); + self.$add_local("$splat_index"); + self.$line("var array_size = arguments.length - " + (self.$argc()) + ";"); + self.$line("if(array_size < 0) array_size = 0;"); + self.$line("var " + (splat) + " = new Array(array_size);"); + self.$line("for($splat_index = 0; $splat_index < array_size; $splat_index++) {"); + self.$line(" " + (splat) + "[$splat_index] = arguments[$splat_index + " + (self.$argc()) + "];"); + return self.$line("}"); } else { - return self.$raise($scope.get('SyntaxError'), "void value expression: cannot return as an expression") + return nil }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $JSReturnNode(){}; - var self = $JSReturnNode = $klass($base, $super, 'JSReturnNode', $JSReturnNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("js_return"); - - self.$children("value"); - - return (def.$compile = function() { - var self = this; - - self.$push("return "); - return self.$push(self.$expr(self.$value())); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + }); - (function($base, $super) { - function $JSTempNode(){}; - var self = $JSTempNode = $klass($base, $super, 'JSTempNode', $JSTempNode); + Opal.defn(self, '$compile_opt_args', function() { + var $a, $b, TMP_6, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = ($b = self.$opt_args()).$each, $a.$$p = (TMP_6 = function(arg){var self = TMP_6.$$s || this; +if (arg == null) arg = nil; + if (arg['$[]'](2)['$[]'](2)['$==']("undefined")) { + return nil;}; + self.$line("if (" + (self.$variable(arg['$[]'](1))) + " == null) {"); + self.$line(" " + (self.$variable(arg['$[]'](1))) + " = ", self.$expr(arg['$[]'](2))); + return self.$line("}");}, TMP_6.$$s = self, TMP_6), $a).call($b); + }); - self.$handle("js_tmp"); + Opal.defn(self, '$compile_keyword_args', function() { + var $a, $b, TMP_7, $c, TMP_8, self = this, last_opt_arg = nil, opt_arg_name = nil; - self.$children("value"); + if ((($a = self.$keyword_args()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil}; + self.$helper("hash2"); + if ((($a = self.$rest_arg()) !== nil && (!$a.$$is_boolean || $a == true))) { + ($a = ($b = self).$with_temp, $a.$$p = (TMP_7 = function(tmp){var self = TMP_7.$$s || this, rest_arg_name = nil; +if (tmp == null) tmp = nil; + rest_arg_name = self.$variable(self.$rest_arg()['$[]'](1).$to_sym()); + self.$line("" + (tmp) + " = " + (rest_arg_name) + "[" + (rest_arg_name) + ".length - 1];"); + self.$line("if (" + (tmp) + " == null || !" + (tmp) + ".$$is_hash) {"); + self.$line(" $kwargs = $hash2([], {});"); + self.$line("} else {"); + self.$line(" $kwargs = " + (rest_arg_name) + ".pop();"); + return self.$line("}");}, TMP_7.$$s = self, TMP_7), $a).call($b) + } else if ((($a = last_opt_arg = self.$opt_args().$last()) !== nil && (!$a.$$is_boolean || $a == true))) { + opt_arg_name = self.$variable(last_opt_arg['$[]'](1)); + self.$line("if (" + (opt_arg_name) + " == null) {"); + self.$line(" $kwargs = $hash2([], {});"); + self.$line("}"); + self.$line("else if (" + (opt_arg_name) + ".$$is_hash) {"); + self.$line(" $kwargs = " + (opt_arg_name) + ";"); + self.$line(" " + (opt_arg_name) + " = ", self.$expr(last_opt_arg['$[]'](2)), ";"); + self.$line("}"); + self.$line("else if ($kwargs == null) {"); + self.$line(" $kwargs = $hash2([], {});"); + self.$line("}"); + } else { + self.$line("if ($kwargs == null) {"); + self.$line(" $kwargs = $hash2([], {});"); + self.$line("}"); + }; + self.$line("if (!$kwargs.$$is_hash) {"); + self.$line(" throw Opal.ArgumentError.$new('expecting keyword args');"); + self.$line("}"); + return ($a = ($c = self.$keyword_args()).$each, $a.$$p = (TMP_8 = function(kwarg){var self = TMP_8.$$s || this, $a, $b, TMP_9, $c, $d, TMP_10, $case = nil, arg_name = nil, var_name = nil, kwarg_names = nil, used_args = nil; +if (kwarg == null) kwarg = nil; + return (function() {$case = kwarg.$first();if ("kwoptarg"['$===']($case)) {arg_name = kwarg['$[]'](1); + var_name = self.$variable(arg_name.$to_s()); + self.$add_local(var_name); + self.$line("if ((" + (var_name) + " = $kwargs.$$smap['" + (arg_name) + "']) == null) {"); + self.$line(" " + (var_name) + " = ", self.$expr(kwarg['$[]'](2))); + return self.$line("}");}else if ("kwarg"['$===']($case)) {arg_name = kwarg['$[]'](1); + var_name = self.$variable(arg_name.$to_s()); + self.$add_local(var_name); + self.$line("if ((" + (var_name) + " = $kwargs.$$smap['" + (arg_name) + "']) == null) {"); + self.$line(" throw new Error('expecting keyword arg: " + (arg_name) + "')"); + return self.$line("}");}else if ("kwrestarg"['$===']($case)) {arg_name = kwarg['$[]'](1); + var_name = self.$variable(arg_name.$to_s()); + self.$add_local(var_name); + kwarg_names = ($a = ($b = ($c = ($d = self.$keyword_args()).$select, $c.$$p = (TMP_10 = function(kw){var self = TMP_10.$$s || this; +if (kw == null) kw = nil; + return ["kwoptarg", "kwarg"]['$include?'](kw.$first())}, TMP_10.$$s = self, TMP_10), $c).call($d)).$map, $a.$$p = (TMP_9 = function(kw){var self = TMP_9.$$s || this; +if (kw == null) kw = nil; + return "" + (kw['$[]'](1).$to_s().$inspect()) + ": true"}, TMP_9.$$s = self, TMP_9), $a).call($b); + used_args = "{" + (kwarg_names.$join(",")) + "}"; + return self.$line("" + (var_name) + " = Opal.kwrestargs($kwargs, " + (used_args) + ");");}else {return self.$raise("unknown kwarg type " + (kwarg.$first()))}})()}, TMP_8.$$s = self, TMP_8), $a).call($c); + }); - return (def.$compile = function() { - var self = this; + return (Opal.defn(self, '$arity_check', function(args, opt, splat, kwargs, block_name, mid) { + var $a, $b, $c, self = this, meth = nil, arity = nil, aritycode = nil, min_arity = nil, max_arity = nil, checks = nil; - return self.$push(self.$value().$to_s()); - }, nil) && 'compile'; - })(self, $scope.get('Base')); + meth = mid.$to_s().$inspect(); + arity = $rb_minus(args.$size(), 1); + arity = $rb_minus(arity, (opt.$size())); + if (splat !== false && splat !== nil) { + arity = $rb_minus(arity, 1)}; + arity = $rb_minus(arity, (kwargs.$size())); + if (block_name !== false && block_name !== nil) { + arity = $rb_minus(arity, 1)}; + if ((($a = ((($b = ((($c = opt['$empty?']()['$!']()) !== false && $c !== nil) ? $c : kwargs['$empty?']()['$!']())) !== false && $b !== nil) ? $b : splat)) !== nil && (!$a.$$is_boolean || $a == true))) { + arity = $rb_minus(arity['$-@'](), 1)}; + aritycode = "var $arity = arguments.length;"; + if ((($a = $rb_lt(arity, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + min_arity = ($rb_plus(arity, 1))['$-@'](); + max_arity = $rb_minus(args.$size(), 1); + if (block_name !== false && block_name !== nil) { + max_arity = $rb_minus(max_arity, 1)}; + checks = []; + if ((($a = $rb_gt(min_arity, 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + checks['$<<']("$arity < " + (min_arity))}; + if ((($a = (($b = max_arity !== false && max_arity !== nil) ? (splat)['$!']() : max_arity)) !== nil && (!$a.$$is_boolean || $a == true))) { + checks['$<<']("$arity > " + (max_arity))}; + if ((($a = $rb_gt(checks.$size(), 0)) !== nil && (!$a.$$is_boolean || $a == true))) { + return $rb_plus(aritycode, "if (" + (checks.$join(" || ")) + ") { Opal.ac($arity, " + (arity) + ", this, " + (meth) + "); }") + } else { + return nil + }; + } else { + return $rb_plus(aritycode, "if ($arity !== " + (arity) + ") { Opal.ac($arity, " + (arity) + ", this, " + (meth) + "); }") + }; + }), nil) && 'arity_check'; + })($scope.base, $scope.get('ScopeNode')); (function($base, $super) { - function $BlockPassNode(){}; - var self = $BlockPassNode = $klass($base, $super, 'BlockPassNode', $BlockPassNode); + function $ArgsNode(){}; + var self = $ArgsNode = $klass($base, $super, 'ArgsNode', $ArgsNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("block_pass"); - - self.$children("value"); + self.$handle("args"); - return (def.$compile = function() { - var self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_11, self = this, done_kwargs = nil, have_rest = nil; - return self.$push(self.$expr(self.$s("call", self.$value(), "to_proc", self.$s("arglist")))); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - })(self) - })(self); + done_kwargs = false; + have_rest = false; + return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_11 = function(child, idx){var self = TMP_11.$$s || this, $a, $b, $case = nil; +if (child == null) child = nil;if (idx == null) idx = nil; + return (function() {$case = child.$first();if ("kwarg"['$===']($case) || "kwoptarg"['$===']($case) || "kwrestarg"['$===']($case)) {if (done_kwargs !== false && done_kwargs !== nil) { + return nil + } else { + done_kwargs = true; + if ((($a = ((($b = idx['$=='](0)) !== false && $b !== nil) ? $b : have_rest)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$push(", ") + }; + self.$scope().$add_arg("$kwargs"); + return self.$push("$kwargs"); + }}else if ("blockarg"['$===']($case)) {return nil}else if ("restarg"['$===']($case)) {return have_rest = true}else {child = child['$[]'](1).$to_sym(); + if (idx['$=='](0)) { + } else { + self.$push(", ") + }; + child = self.$variable(child); + self.$scope().$add_arg(child.$to_sym()); + return self.$push(child.$to_s());}})()}, TMP_11.$$s = self, TMP_11), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/definitions"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/if"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - - Opal.add_stubs(['$require', '$handle', '$children', '$push', '$process', '$value', '$proto', '$scope', '$mid_to_jsid', '$to_s', '$[]', '$mid', '$new_name', '$old_name', '$class?', '$module?', '$<<', '$methods', '$old_mid', '$new_mid', '$!', '$stmt?', '$==', '$type', '$body', '$stmt', '$returns', '$compiler', '$wrap', '$each_with_index', '$expr', '$empty?', '$stmt_join', '$find_inline_yield', '$child_is_expr?', '$class_scope?', '$current_indent', '$raw_expression?', '$include?', '$first', '$===', '$[]=', '$s', '$has_temp?', '$add_temp']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); - - var def = self.$$proto, $scope = self.$$scope; - - (function($base) { - var self = $module($base, 'Nodes'); - - var def = self.$$proto, $scope = self.$$scope; - - (function($base, $super) { - function $SvalueNode(){}; - var self = $SvalueNode = $klass($base, $super, 'SvalueNode', $SvalueNode); - - var def = self.$$proto, $scope = self.$$scope; - - def.level = nil; - self.$handle("svalue"); - - self.$children("value"); - - return (def.$compile = function() { - var self = this; - - return self.$push(self.$process(self.$value(), self.level)); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $UndefNode(){}; - var self = $UndefNode = $klass($base, $super, 'UndefNode', $UndefNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("undef"); - - self.$children("mid"); - - return (def.$compile = function() { - var self = this; - - return self.$push("delete " + (self.$scope().$proto()) + (self.$mid_to_jsid(self.$mid()['$[]'](1).$to_s()))); - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $AliasNode(){}; - var self = $AliasNode = $klass($base, $super, 'AliasNode', $AliasNode); - - var def = self.$$proto, $scope = self.$$scope; - - self.$handle("alias"); - - self.$children("new_name", "old_name"); - - def.$new_mid = function() { - var self = this; - - return self.$mid_to_jsid(self.$new_name()['$[]'](1).$to_s()); - }; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - def.$old_mid = function() { - var self = this; + Opal.add_stubs(['$require', '$handle', '$children', '$truthy', '$falsy', '$skip_check_present?', '$skip_check_present_not?', '$push', '$js_truthy', '$test', '$indent', '$line', '$stmt', '$==', '$type', '$needs_wrapper?', '$wrap', '$returns', '$compiler', '$true_body', '$s', '$false_body', '$expr?', '$recv?']); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return self.$mid_to_jsid(self.$old_name()['$[]'](1).$to_s()); - }; + var def = self.$$proto, $scope = self.$$scope; - return (def.$compile = function() { - var $a, $b, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - if ((($a = ((($b = self.$scope()['$class?']()) !== false && $b !== nil) ? $b : self.$scope()['$module?']())) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$scope().$methods()['$<<']("$" + (self.$new_name()['$[]'](1))); - return self.$push("Opal.defn(self, '$" + (self.$new_name()['$[]'](1)) + "', " + (self.$scope().$proto()) + (self.$old_mid()) + ")"); - } else { - return self.$push("self.$$proto" + (self.$new_mid()) + " = self.$$proto" + (self.$old_mid())) - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $BeginNode(){}; - var self = $BeginNode = $klass($base, $super, 'BeginNode', $BeginNode); + function $IfNode(){}; + var self = $IfNode = $klass($base, $super, 'IfNode', $IfNode); var def = self.$$proto, $scope = self.$$scope; - def.level = nil; - self.$handle("begin"); + self.$handle("if"); - self.$children("body"); + self.$children("test", "true_body", "false_body"); - return (def.$compile = function() { - var $a, $b, self = this; + Opal.cdecl($scope, 'RUBY_ENGINE_CHECK', ["call", ["const", "RUBY_ENGINE"], "==", ["arglist", ["str", "opal"]]]); - if ((($a = ($b = self['$stmt?']()['$!'](), $b !== false && $b !== nil ?self.$body().$type()['$==']("block") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push(self.$stmt(self.$compiler().$returns(self.$body()))); - return self.$wrap("(function() {", "})()"); - } else { - return self.$push(self.$process(self.$body(), self.level)) - }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + Opal.cdecl($scope, 'RUBY_ENGINE_CHECK_NOT', ["call", ["const", "RUBY_ENGINE"], "!=", ["arglist", ["str", "opal"]]]); - (function($base, $super) { - function $ParenNode(){}; - var self = $ParenNode = $klass($base, $super, 'ParenNode', $ParenNode); + Opal.cdecl($scope, 'RUBY_PLATFORM_CHECK', ["call", ["const", "RUBY_PLATFORM"], "==", ["arglist", ["str", "opal"]]]); - var def = self.$$proto, $scope = self.$$scope; + Opal.cdecl($scope, 'RUBY_PLATFORM_CHECK_NOT', ["call", ["const", "RUBY_PLATFORM"], "!=", ["arglist", ["str", "opal"]]]); - def.level = nil; - self.$handle("paren"); + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, $c, TMP_2, self = this, truthy = nil, falsy = nil; - self.$children("body"); + $a = [self.$truthy(), self.$falsy()], truthy = $a[0], falsy = $a[1], $a; + if ((($a = self['$skip_check_present?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + falsy = nil}; + if ((($a = self['$skip_check_present_not?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + truthy = nil}; + self.$push("if (", self.$js_truthy(self.$test()), ") {"); + if (truthy !== false && truthy !== nil) { + ($a = ($b = self).$indent, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this; - return (def.$compile = function() { - var $a, $b, TMP_1, self = this; + return self.$line(self.$stmt(truthy))}, TMP_1.$$s = self, TMP_1), $a).call($b)}; + if (falsy !== false && falsy !== nil) { + if (falsy.$type()['$==']("if")) { + self.$line("} else ", self.$stmt(falsy)) + } else { + ($a = ($c = self).$indent, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this; - if (self.$body().$type()['$==']("block")) { - ($a = ($b = self.$body().$children()).$each_with_index, $a.$$p = (TMP_1 = function(child, idx){var self = TMP_1.$$s || this; -if (child == null) child = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(", ") - }; - return self.$push(self.$expr(child));}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$wrap("(", ")"); + self.$line("} else {"); + return self.$line(self.$stmt(falsy));}, TMP_2.$$s = self, TMP_2), $a).call($c); + self.$line("}"); + } } else { - self.$push(self.$process(self.$body(), self.level)); - if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.$wrap("(", ")") - }; + self.$push("}") }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); - - (function($base, $super) { - function $BlockNode(){}; - var self = $BlockNode = $klass($base, $super, 'BlockNode', $BlockNode); + if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(function() {", "; return nil; })()") + } else { + return nil + }; + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$skip_check_present?', function() { + var $a, self = this; - def.level = nil; - self.$handle("block"); + return ((($a = self.$test()['$==']($scope.get('RUBY_ENGINE_CHECK'))) !== false && $a !== nil) ? $a : self.$test()['$==']($scope.get('RUBY_PLATFORM_CHECK'))); + }); - def.$compile = function() { - var $a, $b, TMP_2, self = this; + Opal.defn(self, '$skip_check_present_not?', function() { + var $a, self = this; - if ((($a = self.$children()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("nil")}; - return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_2 = function(child, idx){var self = TMP_2.$$s || this, $a, yasgn = nil; - if (self.level == null) self.level = nil; -if (child == null) child = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(self.$stmt_join()) - }; - if ((($a = yasgn = self.$find_inline_yield(child)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push(self.$compiler().$process(yasgn, self.level)); - self.$push(";");}; - self.$push(self.$compiler().$process(child, self.level)); - if ((($a = self['$child_is_expr?'](child)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push(";") - } else { - return nil - };}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + return ((($a = self.$test()['$==']($scope.get('RUBY_ENGINE_CHECK_NOT'))) !== false && $a !== nil) ? $a : self.$test()['$==']($scope.get('RUBY_PLATFORM_CHECK_NOT'))); + }); - def.$stmt_join = function() { + Opal.defn(self, '$truthy', function() { var $a, self = this; - if ((($a = self.$scope()['$class_scope?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\n\n" + (self.$current_indent()) + if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compiler().$returns(((($a = self.$true_body()) !== false && $a !== nil) ? $a : self.$s("nil"))) } else { - return "\n" + (self.$current_indent()) + return self.$true_body() }; - }; + }); - def['$child_is_expr?'] = function(child) { + Opal.defn(self, '$falsy', function() { var $a, self = this; - return ($a = self['$raw_expression?'](child), $a !== false && $a !== nil ?["stmt", "stmt_closure"]['$include?'](self.level) : $a); - }; - - def['$raw_expression?'] = function(child) { - var self = this; - - return ["xstr", "dxstr"]['$include?'](child.$type())['$!'](); - }; - - return (def.$find_inline_yield = function(stmt) { - var $a, $b, TMP_3, $c, TMP_4, self = this, found = nil, $case = nil, arglist = nil; - - found = nil; - $case = stmt.$first();if ("js_return"['$===']($case)) {if ((($a = found = self.$find_inline_yield(stmt['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { - found = found['$[]'](2)}}else if ("array"['$===']($case)) {($a = ($b = stmt['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_3 = function(el, idx){var self = TMP_3.$$s || this; -if (el == null) el = nil;if (idx == null) idx = nil; - if (el.$first()['$==']("yield")) { - found = el; - return stmt['$[]=']($rb_plus(idx, 1), self.$s("js_tmp", "$yielded")); - } else { - return nil - }}, TMP_3.$$s = self, TMP_3), $a).call($b)}else if ("call"['$===']($case)) {arglist = stmt['$[]'](3); - ($a = ($c = arglist['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_4 = function(el, idx){var self = TMP_4.$$s || this; -if (el == null) el = nil;if (idx == null) idx = nil; - if (el.$first()['$==']("yield")) { - found = el; - return arglist['$[]=']($rb_plus(idx, 1), self.$s("js_tmp", "$yielded")); - } else { - return nil - }}, TMP_4.$$s = self, TMP_4), $a).call($c);}; - if (found !== false && found !== nil) { - if ((($a = self.$scope()['$has_temp?']("$yielded")) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - self.$scope().$add_temp("$yielded") - }; - return self.$s("yasgn", "$yielded", found); + if ((($a = self['$needs_wrapper?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compiler().$returns(((($a = self.$false_body()) !== false && $a !== nil) ? $a : self.$s("nil"))) } else { - return nil + return self.$false_body() }; - }, nil) && 'find_inline_yield'; - })(self, $scope.get('Base')); - })(self) - })(self); + }); + + return (Opal.defn(self, '$needs_wrapper?', function() { + var $a, self = this; + + return ((($a = self['$expr?']()) !== false && $a !== nil) ? $a : self['$recv?']()); + }), nil) && 'needs_wrapper?'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/yield"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/logic"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$find_yielding_scope', '$uses_block!', '$block_name', '$yields_single_arg?', '$push', '$expr', '$first', '$wrap', '$s', '$uses_splat?', '$scope', '$def?', '$parent', '$!', '$==', '$size', '$any?', '$type', '$handle', '$compile_call', '$children', '$stmt?', '$with_temp', '$[]', '$yield_args', '$var_name']); + Opal.add_stubs(['$require', '$handle', '$children', '$in_while?', '$push', '$expr_or_nil', '$value', '$wrap', '$compile_while', '$iter?', '$scope', '$compile_iter', '$error', '$[]', '$while_loop', '$stmt?', '$[]=', '$identity', '$with_temp', '$expr', '$==', '$empty_splat?', '$type', '$recv', '$lhs', '$rhs', '$js_truthy_optimize', '$nil?', '$s', '$>', '$size', '$find_parent_def', '$expr?', '$def?', '$return_in_iter?', '$return_expr_in_def?', '$scope_to_catch_return', '$catch_return=', '$return_val', '$raise', '$to_s']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $BaseYieldNode(){}; - var self = $BaseYieldNode = $klass($base, $super, 'BaseYieldNode', $BaseYieldNode); + function $NextNode(){}; + var self = $NextNode = $klass($base, $super, 'NextNode', $NextNode); var def = self.$$proto, $scope = self.$$scope; - def.$compile_call = function(children, level) { - var $a, $b, self = this, yielding_scope = nil, block_name = nil; + self.$handle("next"); - yielding_scope = self.$find_yielding_scope(); - yielding_scope['$uses_block!'](); - block_name = ((($a = yielding_scope.$block_name()) !== false && $a !== nil) ? $a : "$yield"); - if ((($a = self['$yields_single_arg?'](children)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push(self.$expr(children.$first())); - return self.$wrap("Opal.yield1(" + (block_name) + ", ", ")"); - } else { - self.$push(self.$expr(($a = self).$s.apply($a, ["arglist"].concat(children)))); - if ((($b = self['$uses_splat?'](children)) !== nil && (!$b.$$is_boolean || $b == true))) { - return self.$wrap("Opal.yieldX(" + (block_name) + ", ", ")") - } else { - return self.$wrap("Opal.yieldX(" + (block_name) + ", [", "])") - }; - }; - }; + self.$children("value"); - def.$find_yielding_scope = function() { - var $a, $b, $c, self = this, working = nil; + return (Opal.defn(self, '$compile', function() { + var $a, self = this; - working = self.$scope(); - while (working !== false && working !== nil) { - if ((($b = ((($c = working.$block_name()) !== false && $c !== nil) ? $c : working['$def?']())) !== nil && (!$b.$$is_boolean || $b == true))) { - break;}; - working = working.$parent();}; - return working; - }; + if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("continue;")}; + self.$push(self.$expr_or_nil(self.$value())); + return self.$wrap("return ", ";"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def['$yields_single_arg?'] = function(children) { - var $a, self = this; + (function($base, $super) { + function $BreakNode(){}; + var self = $BreakNode = $klass($base, $super, 'BreakNode', $BreakNode); - return ($a = self['$uses_splat?'](children)['$!'](), $a !== false && $a !== nil ?children.$size()['$=='](1) : $a); - }; + var def = self.$$proto, $scope = self.$$scope; - return (def['$uses_splat?'] = function(children) { - var $a, $b, TMP_1, self = this; + self.$handle("break"); - return ($a = ($b = children)['$any?'], $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this; -if (child == null) child = nil; - return child.$type()['$==']("splat")}, TMP_1.$$s = self, TMP_1), $a).call($b); - }, nil) && 'uses_splat?'; - })(self, $scope.get('Base')); + self.$children("value"); - (function($base, $super) { - function $YieldNode(){}; - var self = $YieldNode = $klass($base, $super, 'YieldNode', $YieldNode); + Opal.defn(self, '$compile', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_while() + } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_iter() + } else { + return self.$error("void value expression: cannot use break outside of iter/while") + }; + }); - def.level = nil; - self.$handle("yield"); + Opal.defn(self, '$compile_while', function() { + var $a, self = this; - return (def.$compile = function() { - var $a, $b, TMP_2, self = this; + if ((($a = self.$while_loop()['$[]']("closure")) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("return ", self.$expr_or_nil(self.$value())) + } else { + return self.$push("break;") + }; + }); + + return (Opal.defn(self, '$compile_iter', function() { + var $a, self = this; - self.$compile_call(self.$children(), self.level); if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("if (", " === $breaker) return $breaker.$v") } else { - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; -if (tmp == null) tmp = nil; - return self.$wrap("(((" + (tmp) + " = ", ") === $breaker) ? $breaker.$v : " + (tmp) + ")")}, TMP_2.$$s = self, TMP_2), $a).call($b) + self.$error("break must be used as a statement") }; - }, nil) && 'compile'; - })(self, $scope.get('BaseYieldNode')); + self.$push(self.$expr_or_nil(self.$value())); + return self.$wrap("return ($breaker.$v = ", ", $breaker)"); + }), nil) && 'compile_iter'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $YasgnNode(){}; - var self = $YasgnNode = $klass($base, $super, 'YasgnNode', $YasgnNode); + function $RedoNode(){}; + var self = $RedoNode = $klass($base, $super, 'RedoNode', $RedoNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("yasgn"); + self.$handle("redo"); + + Opal.defn(self, '$compile', function() { + var $a, self = this; + + if ((($a = self['$in_while?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_while() + } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_iter() + } else { + return self.$push("REDO()") + }; + }); + + Opal.defn(self, '$compile_while', function() { + var self = this; - self.$children("var_name", "yield_args"); + self.$while_loop()['$[]=']("use_redo", true); + return self.$push("" + (self.$while_loop()['$[]']("redo_var")) + " = true"); + }); - return (def.$compile = function() { - var $a, self = this; + return (Opal.defn(self, '$compile_iter', function() { + var self = this; - self.$compile_call(($a = self).$s.apply($a, [].concat(self.$yield_args()['$[]']($range(1, -1, false)))), "stmt"); - return self.$wrap("if ((" + (self.$var_name()) + " = ", ") === $breaker) return $breaker.$v"); - }, nil) && 'compile'; - })(self, $scope.get('BaseYieldNode')); + return self.$push("return " + (self.$scope().$identity()) + ".apply(null, $slice.call(arguments))"); + }), nil) && 'compile_iter'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ReturnableYieldNode(){}; - var self = $ReturnableYieldNode = $klass($base, $super, 'ReturnableYieldNode', $ReturnableYieldNode); + function $NotNode(){}; + var self = $NotNode = $klass($base, $super, 'NotNode', $NotNode); var def = self.$$proto, $scope = self.$$scope; - def.level = nil; - self.$handle("returnable_yield"); - - return (def.$compile = function() { - var $a, $b, TMP_3, self = this; - - self.$compile_call(self.$children(), self.level); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; -if (tmp == null) tmp = nil; - return self.$wrap("return " + (tmp) + " = ", ", " + (tmp) + " === $breaker ? " + (tmp) + " : " + (tmp))}, TMP_3.$$s = self, TMP_3), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('BaseYieldNode')); - })(self) - })(self); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/rescue"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - - Opal.add_stubs(['$require', '$handle', '$children', '$stmt?', '$lhs', '$returns', '$compiler', '$rhs', '$push', '$expr', '$body', '$rescue_val', '$wrap', '$line', '$process', '$body_sexp', '$ensr_sexp', '$wrap_in_closure?', '$begn', '$ensr', '$s', '$recv?', '$expr?', '$indent', '$body_code', '$each_with_index', '$==', '$type', '$[]', '$!', '$empty?', '$rescue_exprs', '$rescue_variable', '$[]=', '$rescue_body', '$===', '$include?', '$rescue_variable?', '$last', '$args', '$dup', '$pop']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + self.$handle("not"); - var def = self.$$proto, $scope = self.$$scope; + self.$children("value"); - (function($base) { - var self = $module($base, 'Nodes'); + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; +if (tmp == null) tmp = nil; + self.$push(self.$expr(self.$value())); + return self.$wrap("(" + (tmp) + " = ", ", (" + (tmp) + " === nil || " + (tmp) + " === false))");}, TMP_1.$$s = self, TMP_1), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $RescueModNode(){}; - var self = $RescueModNode = $klass($base, $super, 'RescueModNode', $RescueModNode); + function $SplatNode(){}; + var self = $SplatNode = $klass($base, $super, 'SplatNode', $SplatNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("rescue_mod"); - - self.$children("lhs", "rhs"); - - def.$body = function() { - var $a, self = this; + self.$handle("splat"); - if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$lhs() - } else { - return self.$compiler().$returns(self.$lhs()) - }; - }; + self.$children("value"); - def.$rescue_val = function() { + Opal.defn(self, '$empty_splat?', function() { var $a, self = this; - if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$rhs() - } else { - return self.$compiler().$returns(self.$rhs()) - }; - }; + return ((($a = self.$value()['$=='](["nil"])) !== false && $a !== nil) ? $a : self.$value()['$=='](["paren", ["nil"]])); + }); - return (def.$compile = function() { + return (Opal.defn(self, '$compile', function() { var $a, self = this; - self.$push("try {", self.$expr(self.$body()), " } catch ($err) { ", self.$expr(self.$rescue_val()), " }"); - if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil + if ((($a = self['$empty_splat?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("[]") + } else if (self.$value().$type()['$==']("sym")) { + return self.$push("[", self.$expr(self.$value()), "]") } else { - return self.$wrap("(function() {", "})()") + return self.$push("Opal.to_a(", self.$recv(self.$value()), ")") }; - }, nil) && 'compile'; - })(self, $scope.get('Base')); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $EnsureNode(){}; - var self = $EnsureNode = $klass($base, $super, 'EnsureNode', $EnsureNode); + function $OrNode(){}; + var self = $OrNode = $klass($base, $super, 'OrNode', $OrNode); var def = self.$$proto, $scope = self.$$scope; - def.level = nil; - self.$handle("ensure"); + self.$handle("or"); - self.$children("begn", "ensr"); + self.$children("lhs", "rhs"); - def.$compile = function() { - var $a, self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_2, self = this; - self.$push("try {"); - self.$line(self.$compiler().$process(self.$body_sexp(), self.level)); - self.$line("} finally {"); - self.$line(self.$compiler().$process(self.$ensr_sexp(), self.level)); - self.$line("}"); - if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(function() {", "; })()") - } else { - return nil - }; - }; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; +if (tmp == null) tmp = nil; + self.$push("(((" + (tmp) + " = "); + self.$push(self.$expr(self.$lhs())); + self.$push(") !== false && " + (tmp) + " !== nil) ? " + (tmp) + " : "); + self.$push(self.$expr(self.$rhs())); + return self.$push(")");}, TMP_2.$$s = self, TMP_2), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$body_sexp = function() { - var $a, self = this; + (function($base, $super) { + function $AndNode(){}; + var self = $AndNode = $klass($base, $super, 'AndNode', $AndNode); - if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compiler().$returns(self.$begn()) - } else { - return self.$begn() - }; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$ensr_sexp = function() { - var $a, self = this; + self.$handle("and"); - return ((($a = self.$ensr()) !== false && $a !== nil) ? $a : self.$s("nil")); - }; + self.$children("lhs", "rhs"); - return (def['$wrap_in_closure?'] = function() { - var $a, self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_3, self = this, truthy_opt = nil; - return ((($a = self['$recv?']()) !== false && $a !== nil) ? $a : self['$expr?']()); - }, nil) && 'wrap_in_closure?'; - })(self, $scope.get('Base')); + truthy_opt = nil; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this, $a; +if (tmp == null) tmp = nil; + if ((($a = truthy_opt = self.$js_truthy_optimize(self.$lhs())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("((" + (tmp) + " = ", truthy_opt); + self.$push(") ? "); + self.$push(self.$expr(self.$rhs())); + return self.$push(" : ", self.$expr(self.$lhs()), ")"); + } else { + self.$push("(" + (tmp) + " = "); + self.$push(self.$expr(self.$lhs())); + self.$push(", " + (tmp) + " !== false && " + (tmp) + " !== nil ?"); + self.$push(self.$expr(self.$rhs())); + return self.$push(" : " + (tmp) + ")"); + }}, TMP_3.$$s = self, TMP_3), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $RescueNode(){}; - var self = $RescueNode = $klass($base, $super, 'RescueNode', $RescueNode); + function $ReturnNode(){}; + var self = $ReturnNode = $klass($base, $super, 'ReturnNode', $ReturnNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("rescue"); + self.$handle("return"); - self.$children("body"); + self.$children("value"); - def.$compile = function() { - var $a, $b, TMP_1, $c, TMP_2, self = this, handled_else = nil; + Opal.defn(self, '$return_val', function() { + var $a, self = this; - handled_else = false; - self.$push("try {"); - self.$line(($a = ($b = self).$indent, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this; - if (self.level == null) self.level = nil; + if ((($a = self.$value()['$nil?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(self.$s("nil")) + } else if ((($a = $rb_gt(self.$children().$size(), 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(($a = self).$s.apply($a, ["array"].concat(Opal.to_a(self.$children())))) + } else { + return self.$expr(self.$value()) + }; + }); - return self.$process(self.$body_code(), self.level)}, TMP_1.$$s = self, TMP_1), $a).call($b)); - self.$line("} catch ($err) {"); - ($a = ($c = self.$children()['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_2 = function(child, idx){var self = TMP_2.$$s || this, $a, $b, TMP_3; -if (child == null) child = nil;if (idx == null) idx = nil; - if (child.$type()['$==']("resbody")) { - } else { - handled_else = true - }; - if (idx['$=='](0)) { - } else { - self.$push("else ") - }; - return self.$push(($a = ($b = self).$indent, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; - if (self.level == null) self.level = nil; + Opal.defn(self, '$return_in_iter?', function() { + var $a, $b, self = this, parent_def = nil; - return self.$process(child, self.level)}, TMP_3.$$s = self, TMP_3), $a).call($b));}, TMP_2.$$s = self, TMP_2), $a).call($c); - if (handled_else !== false && handled_else !== nil) { + if ((($a = ($b = self.$scope()['$iter?'](), $b !== false && $b !== nil ?parent_def = self.$scope().$find_parent_def() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return parent_def } else { - self.$push("else { throw $err; }") + return nil }; - self.$line("}"); - if ((($a = self['$expr?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(function() { ", "})()") + }); + + Opal.defn(self, '$return_expr_in_def?', function() { + var $a, $b, self = this; + + if ((($a = ($b = self['$expr?'](), $b !== false && $b !== nil ?self.$scope()['$def?']() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$scope() } else { return nil }; - }; + }); - return (def.$body_code = function() { - var $a, self = this, body_code = nil; + Opal.defn(self, '$scope_to_catch_return', function() { + var $a, self = this; - body_code = ((function() {if (self.$body().$type()['$==']("resbody")) { - return self.$s("nil") - } else { - return self.$body() - }; return nil; })()); - if ((($a = self['$stmt?']()['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compiler().$returns(body_code) + return ((($a = self['$return_in_iter?']()) !== false && $a !== nil) ? $a : self['$return_expr_in_def?']()); + }); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, self = this, def_scope = nil; + + if ((($a = def_scope = self.$scope_to_catch_return()) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [true]), $b = def_scope, $b['$catch_return='].apply($b, $a), $a[$a.length-1]); + return self.$push("Opal.ret(", self.$return_val(), ")"); + } else if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("return ", self.$return_val()) } else { - return body_code + return self.$raise($scope.get('SyntaxError'), "void value expression: cannot return as an expression") }; - }, nil) && 'body_code'; - })(self, $scope.get('Base')); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $ResBodyNode(){}; - var self = $ResBodyNode = $klass($base, $super, 'ResBodyNode', $ResBodyNode); + function $JSReturnNode(){}; + var self = $JSReturnNode = $klass($base, $super, 'JSReturnNode', $JSReturnNode); var def = self.$$proto, $scope = self.$$scope; - def.level = nil; - self.$handle("resbody"); + self.$handle("js_return"); - self.$children("args", "body"); + self.$children("value"); - def.$compile = function() { - var $a, $b, TMP_4, self = this, variable = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - self.$push("if ("); - if ((($a = self.$rescue_exprs()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("true") - } else { - self.$push("Opal.rescue($err, ["); - ($a = ($b = self.$rescue_exprs()).$each_with_index, $a.$$p = (TMP_4 = function(rexpr, idx){var self = TMP_4.$$s || this; -if (rexpr == null) rexpr = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(", ") - }; - return self.$push(self.$expr(rexpr));}, TMP_4.$$s = self, TMP_4), $a).call($b); - self.$push("])"); - }; - self.$push(") {"); - if ((($a = variable = self.$rescue_variable()) !== nil && (!$a.$$is_boolean || $a == true))) { - variable['$[]='](2, self.$s("js_tmp", "$err")); - self.$push(self.$expr(variable), ";");}; - self.$line(self.$process(self.$rescue_body(), self.level)); - return self.$line("}"); - }; + self.$push("return "); + return self.$push(self.$expr(self.$value())); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def['$rescue_variable?'] = function(variable) { - var $a, self = this; + (function($base, $super) { + function $JSTempNode(){}; + var self = $JSTempNode = $klass($base, $super, 'JSTempNode', $JSTempNode); - return ($a = $scope.get('Sexp')['$==='](variable), $a !== false && $a !== nil ?["lasgn", "iasgn"]['$include?'](variable.$type()) : $a); - }; + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("js_tmp"); + + self.$children("value"); + + return (Opal.defn(self, '$compile', function() { + var self = this; - def.$rescue_variable = function() { - var $a, self = this; + return self.$push(self.$value().$to_s()); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - if ((($a = self['$rescue_variable?'](self.$args().$last())) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$args().$last().$dup() - } else { - return nil - }; - }; + (function($base, $super) { + function $BlockPassNode(){}; + var self = $BlockPassNode = $klass($base, $super, 'BlockPassNode', $BlockPassNode); - def.$rescue_exprs = function() { - var $a, self = this, exprs = nil; + var def = self.$$proto, $scope = self.$$scope; - exprs = self.$args().$dup(); - if ((($a = self['$rescue_variable?'](exprs.$last())) !== nil && (!$a.$$is_boolean || $a == true))) { - exprs.$pop()}; - return exprs.$children(); - }; + self.$handle("block_pass"); - return (def.$rescue_body = function() { - var $a, self = this, body_code = nil; + self.$children("value"); - body_code = (((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil"))); - if ((($a = self['$stmt?']()['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { - body_code = self.$compiler().$returns(body_code)}; - return body_code; - }, nil) && 'rescue_body'; - })(self, $scope.get('Base')); - })(self) - })(self); + return (Opal.defn(self, '$compile', function() { + var self = this; + + return self.$push(self.$expr(self.$s("call", self.$value(), "to_proc", self.$s("arglist")))); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/case"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/definitions"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$require', '$handle', '$children', '$in_case', '$condition', '$[]=', '$case_stmt', '$add_local', '$push', '$expr', '$each_with_index', '$==', '$type', '$needs_closure?', '$returns', '$compiler', '$stmt', '$case_parts', '$!', '$wrap', '$stmt?', '$[]', '$s', '$js_truthy', '$when_checks', '$process', '$body_code', '$whens', '$body']); + Opal.add_stubs(['$require', '$handle', '$children', '$push', '$process', '$value', '$each', '$[]', '$==', '$<<', '$expr', '$s', '$to_s', '$>', '$length', '$!=', '$first', '$line', '$mid_to_jsid', '$new_name', '$old_name', '$class?', '$scope', '$module?', '$methods', '$!', '$stmt?', '$type', '$body', '$stmt', '$returns', '$compiler', '$wrap', '$each_with_index', '$empty?', '$stmt_join', '$find_inline_yield', '$child_is_expr?', '$class_scope?', '$current_indent', '$raw_expression?', '$include?', '$===', '$[]=', '$+', '$has_temp?', '$add_temp']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $CaseNode(){}; - var self = $CaseNode = $klass($base, $super, 'CaseNode', $CaseNode); + function $SvalueNode(){}; + var self = $SvalueNode = $klass($base, $super, 'SvalueNode', $SvalueNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("case"); + def.level = nil; + self.$handle("svalue"); - self.$children("condition"); + self.$children("value"); - def.$compile = function() { - var $a, $b, TMP_1, self = this, handled_else = nil; + return (Opal.defn(self, '$compile', function() { + var self = this; - handled_else = false; - return ($a = ($b = self.$compiler()).$in_case, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, TMP_2, $c; + return self.$push(self.$process(self.$value(), self.level)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - if ((($a = self.$condition()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$case_stmt()['$[]=']("cond", true); - self.$add_local("$case"); - self.$push("$case = ", self.$expr(self.$condition()), ";");}; - ($a = ($b = self.$case_parts()).$each_with_index, $a.$$p = (TMP_2 = function(wen, idx){var self = TMP_2.$$s || this, $a, $b; -if (wen == null) wen = nil;if (idx == null) idx = nil; - if ((($a = (($b = wen !== false && wen !== nil) ? wen.$type()['$==']("when") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$compiler().$returns(wen)}; - if (idx['$=='](0)) { - } else { - self.$push("else ") - }; - return self.$push(self.$stmt(wen)); - } else if (wen !== false && wen !== nil) { - handled_else = true; - if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - wen = self.$compiler().$returns(wen)}; - return self.$push("else {", self.$stmt(wen), "}"); - } else { - return nil - }}, TMP_2.$$s = self, TMP_2), $a).call($b); - if ((($a = ($c = self['$needs_closure?'](), $c !== false && $c !== nil ?handled_else['$!']() : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("else { return nil }")}; - if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(function() {", "})()") + (function($base, $super) { + function $UndefNode(){}; + var self = $UndefNode = $klass($base, $super, 'UndefNode', $UndefNode); + + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("undef"); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; + + return ($a = ($b = self.$children()).$each, $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this, $a, $b, value = nil, statements = nil; +if (child == null) child = nil; + value = child['$[]'](1); + statements = []; + if (child['$[]'](0)['$==']("js_return")) { + value = value['$[]'](1); + statements['$<<'](self.$expr(self.$s("js_return")));}; + statements['$<<']("Opal.udef(self, '$" + (value.$to_s()) + "');"); + if ((($a = ($b = $rb_gt(self.$children().$length(), 1), $b !== false && $b !== nil ?child['$!='](self.$children().$first()) : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = self).$line.apply($a, Opal.to_a(statements)) } else { - return nil + return ($b = self).$push.apply($b, Opal.to_a(statements)) };}, TMP_1.$$s = self, TMP_1), $a).call($b); - }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def['$needs_closure?'] = function() { - var self = this; + (function($base, $super) { + function $AliasNode(){}; + var self = $AliasNode = $klass($base, $super, 'AliasNode', $AliasNode); - return self['$stmt?']()['$!'](); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$case_parts = function() { + self.$handle("alias"); + + self.$children("new_name", "old_name"); + + Opal.defn(self, '$new_mid', function() { var self = this; - return self.$children()['$[]']($range(1, -1, false)); - }; + return self.$mid_to_jsid(self.$new_name()['$[]'](1).$to_s()); + }); - return (def.$case_stmt = function() { + Opal.defn(self, '$old_mid', function() { var self = this; - return self.$compiler().$case_stmt(); - }, nil) && 'case_stmt'; - })(self, $scope.get('Base')); + return self.$mid_to_jsid(self.$old_name()['$[]'](1).$to_s()); + }); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, self = this; + + if ((($a = ((($b = self.$scope()['$class?']()) !== false && $b !== nil) ? $b : self.$scope()['$module?']())) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scope().$methods()['$<<']("$" + (self.$new_name()['$[]'](1)))}; + return self.$push("Opal.alias(self, '" + (self.$new_name()['$[]'](1)) + "', '" + (self.$old_name()['$[]'](1)) + "')"); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $WhenNode(){}; - var self = $WhenNode = $klass($base, $super, 'WhenNode', $WhenNode); + function $BeginNode(){}; + var self = $BeginNode = $klass($base, $super, 'BeginNode', $BeginNode); var def = self.$$proto, $scope = self.$$scope; def.level = nil; - self.$handle("when"); + self.$handle("begin"); - self.$children("whens", "body"); + self.$children("body"); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, self = this; + + if ((($a = ($b = self['$stmt?']()['$!'](), $b !== false && $b !== nil ?self.$body().$type()['$==']("block") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push(self.$stmt(self.$compiler().$returns(self.$body()))); + return self.$wrap("(function() {", "})()"); + } else { + return self.$push(self.$process(self.$body(), self.level)) + }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$compile = function() { + (function($base, $super) { + function $ParenNode(){}; + var self = $ParenNode = $klass($base, $super, 'ParenNode', $ParenNode); + + var def = self.$$proto, $scope = self.$$scope; + + def.level = nil; + self.$handle("paren"); + + self.$children("body"); + + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_2, self = this; + + if (self.$body().$type()['$==']("block")) { + ($a = ($b = self.$body().$children()).$each_with_index, $a.$$p = (TMP_2 = function(child, idx){var self = TMP_2.$$s || this; +if (child == null) child = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(", ") + }; + return self.$push(self.$expr(child));}, TMP_2.$$s = self, TMP_2), $a).call($b); + return self.$wrap("(", ")"); + } else { + self.$push(self.$process(self.$body(), self.level)); + if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.$wrap("(", ")") + }; + }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); + + (function($base, $super) { + function $BlockNode(){}; + var self = $BlockNode = $klass($base, $super, 'BlockNode', $BlockNode); + + var def = self.$$proto, $scope = self.$$scope; + + def.level = nil; + self.$handle("block"); + + Opal.defn(self, '$compile', function() { var $a, $b, TMP_3, self = this; - self.$push("if ("); - ($a = ($b = self.$when_checks()).$each_with_index, $a.$$p = (TMP_3 = function(check, idx){var self = TMP_3.$$s || this, $a, call = nil; -if (check == null) check = nil;if (idx == null) idx = nil; + if ((($a = self.$children()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("nil")}; + return ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_3 = function(child, idx){var self = TMP_3.$$s || this, $a, yasgn = nil; + if (self.level == null) self.level = nil; +if (child == null) child = nil;if (idx == null) idx = nil; if (idx['$=='](0)) { } else { - self.$push(" || ") + self.$push(self.$stmt_join()) }; - if (check.$type()['$==']("splat")) { - self.$push("(function($splt) { for (var i = 0; i < $splt.length; i++) {"); - self.$push("if ($splt[i]['$===']($case)) { return true; }"); - return self.$push("} return false; })(", self.$expr(check['$[]'](1)), ")"); - } else if ((($a = self.$case_stmt()['$[]']("cond")) !== nil && (!$a.$$is_boolean || $a == true))) { - call = self.$s("call", check, "===", self.$s("arglist", self.$s("js_tmp", "$case"))); - return self.$push(self.$expr(call)); + if ((($a = yasgn = self.$find_inline_yield(child)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push(self.$compiler().$process(yasgn, self.level)); + self.$push(";");}; + self.$push(self.$compiler().$process(child, self.level)); + if ((($a = self['$child_is_expr?'](child)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push(";") } else { - return self.$push(self.$js_truthy(check)) + return nil };}, TMP_3.$$s = self, TMP_3), $a).call($b); - return self.$push(") {", self.$process(self.$body_code(), self.level), "}"); - }; + }); - def.$when_checks = function() { - var self = this; + Opal.defn(self, '$stmt_join', function() { + var $a, self = this; - return self.$whens().$children(); - }; + if ((($a = self.$scope()['$class_scope?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\n\n" + (self.$current_indent()) + } else { + return "\n" + (self.$current_indent()) + }; + }); + + Opal.defn(self, '$child_is_expr?', function(child) { + var $a, self = this; + + return ($a = self['$raw_expression?'](child), $a !== false && $a !== nil ?["stmt", "stmt_closure"]['$include?'](self.level) : $a); + }); - def.$case_stmt = function() { + Opal.defn(self, '$raw_expression?', function(child) { var self = this; - return self.$compiler().$case_stmt(); - }; + return ["xstr", "dxstr"]['$include?'](child.$type())['$!'](); + }); - return (def.$body_code = function() { - var $a, self = this; + return (Opal.defn(self, '$find_inline_yield', function(stmt) { + var $a, $b, TMP_4, $c, TMP_5, self = this, found = nil, $case = nil, arglist = nil; - return ((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil")); - }, nil) && 'body_code'; - })(self, $scope.get('Base')); - })(self) - })(self); + found = nil; + $case = stmt.$first();if ("js_return"['$===']($case)) {if ((($a = found = self.$find_inline_yield(stmt['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + found = found['$[]'](2)}}else if ("array"['$===']($case)) {($a = ($b = stmt['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_4 = function(el, idx){var self = TMP_4.$$s || this; +if (el == null) el = nil;if (idx == null) idx = nil; + if (el.$first()['$==']("yield")) { + found = el; + return stmt['$[]=']($rb_plus(idx, 1), self.$s("js_tmp", "$yielded")); + } else { + return nil + }}, TMP_4.$$s = self, TMP_4), $a).call($b)}else if ("call"['$===']($case)) {arglist = stmt['$[]'](3); + ($a = ($c = arglist['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_5 = function(el, idx){var self = TMP_5.$$s || this; +if (el == null) el = nil;if (idx == null) idx = nil; + if (el.$first()['$==']("yield")) { + found = el; + return arglist['$[]=']($rb_plus(idx, 1), self.$s("js_tmp", "$yielded")); + } else { + return nil + }}, TMP_5.$$s = self, TMP_5), $a).call($c);}; + if (found !== false && found !== nil) { + if ((($a = self.$scope()['$has_temp?']("$yielded")) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$scope().$add_temp("$yielded") + }; + return self.$s("yasgn", "$yielded", found); + } else { + return nil + }; + }), nil) && 'find_inline_yield'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/super"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/yield"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$require', '$children', '$arglist', '$iter', '$expr', '$iter_sexp', '$uses_block!', '$scope', '$def?', '$identify!', '$name', '$parent', '$defs', '$push', '$to_s', '$mid', '$iter?', '$get_super_chain', '$join', '$map', '$raise', '$s', '$handle', '$compile_dispatcher', '$wrap', '$has_splat?', '$args', '$fragment', '$uses_zuper=', '$any?', '$==', '$type']); + Opal.add_stubs(['$require', '$find_yielding_scope', '$uses_block!', '$block_name', '$yields_single_arg?', '$push', '$expr', '$first', '$wrap', '$s', '$uses_splat?', '$scope', '$def?', '$parent', '$!', '$==', '$size', '$any?', '$type', '$handle', '$compile_call', '$children', '$stmt?', '$with_temp', '$[]', '$yield_args', '$var_name']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $BaseSuperNode(){}; - var self = $BaseSuperNode = $klass($base, $super, 'BaseSuperNode', $BaseSuperNode); + function $BaseYieldNode(){}; + var self = $BaseYieldNode = $klass($base, $super, 'BaseYieldNode', $BaseYieldNode); var def = self.$$proto, $scope = self.$$scope; - self.$children("arglist", "iter"); - - def.$compile_dispatcher = function() { - var $a, $b, TMP_1, self = this, iter = nil, scope_name = nil, class_name = nil, chain = nil, cur_defn = nil, mid = nil, trys = nil; + Opal.defn(self, '$compile_call', function(children, level) { + var $a, $b, self = this, yielding_scope = nil, block_name = nil; - if ((($a = ((($b = self.$arglist()) !== false && $b !== nil) ? $b : self.$iter())) !== nil && (!$a.$$is_boolean || $a == true))) { - iter = self.$expr(self.$iter_sexp()) + yielding_scope = self.$find_yielding_scope(); + yielding_scope['$uses_block!'](); + block_name = ((($a = yielding_scope.$block_name()) !== false && $a !== nil) ? $a : "$yield"); + if ((($a = self['$yields_single_arg?'](children)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push(self.$expr(children.$first())); + return self.$wrap("Opal.yield1(" + (block_name) + ", ", ")"); } else { - self.$scope()['$uses_block!'](); - iter = "$iter"; - }; - if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$scope()['$uses_block!'](); - scope_name = self.$scope()['$identify!'](); - class_name = (function() {if ((($a = self.$scope().$parent().$name()) !== nil && (!$a.$$is_boolean || $a == true))) { - return "$" + (self.$scope().$parent().$name()) - } else { - return "self.$$class.$$proto" - }; return nil; })(); - if ((($a = self.$scope().$defs()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("Opal.find_super_dispatcher(self, '" + (self.$scope().$mid().$to_s()) + "', " + (scope_name) + ", "); - self.$push(iter); - return self.$push(", " + (class_name) + ")"); + self.$push(self.$expr(($a = self).$s.apply($a, ["arglist"].concat(Opal.to_a(children))))); + if ((($b = self['$uses_splat?'](children)) !== nil && (!$b.$$is_boolean || $b == true))) { + return self.$wrap("Opal.yieldX(" + (block_name) + ", ", ")") } else { - self.$push("Opal.find_super_dispatcher(self, '" + (self.$scope().$mid().$to_s()) + "', " + (scope_name) + ", "); - self.$push(iter); - return self.$push(")"); + return self.$wrap("Opal.yieldX(" + (block_name) + ", [", "])") }; - } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - $a = Opal.to_ary(self.$scope().$get_super_chain()), chain = ($a[0] == null ? nil : $a[0]), cur_defn = ($a[1] == null ? nil : $a[1]), mid = ($a[2] == null ? nil : $a[2]); - trys = ($a = ($b = chain).$map, $a.$$p = (TMP_1 = function(c){var self = TMP_1.$$s || this; -if (c == null) c = nil; - return "" + (c) + ".$$def"}, TMP_1.$$s = self, TMP_1), $a).call($b).$join(" || "); - return self.$push("Opal.find_iter_super_dispatcher(self, " + (mid) + ", (" + (trys) + " || " + (cur_defn) + "), null)"); - } else { - return self.$raise("Cannot call super() from outside a method block") }; - }; + }); - def.$args = function() { - var $a, self = this; + Opal.defn(self, '$find_yielding_scope', function() { + var $a, $b, $c, self = this, working = nil; - return ((($a = self.$arglist()) !== false && $a !== nil) ? $a : self.$s("arglist")); - }; + working = self.$scope(); + while (working !== false && working !== nil) { + if ((($b = ((($c = working.$block_name()) !== false && $c !== nil) ? $c : working['$def?']())) !== nil && (!$b.$$is_boolean || $b == true))) { + break;}; + working = working.$parent();}; + return working; + }); - return (def.$iter_sexp = function() { + Opal.defn(self, '$yields_single_arg?', function(children) { var $a, self = this; - return ((($a = self.$iter()) !== false && $a !== nil) ? $a : self.$s("js_tmp", "null")); - }, nil) && 'iter_sexp'; - })(self, $scope.get('Base')); + return ($a = self['$uses_splat?'](children)['$!'](), $a !== false && $a !== nil ?children.$size()['$=='](1) : $a); + }); + + return (Opal.defn(self, '$uses_splat?', function(children) { + var $a, $b, TMP_1, self = this; + + return ($a = ($b = children)['$any?'], $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this; +if (child == null) child = nil; + return child.$type()['$==']("splat")}, TMP_1.$$s = self, TMP_1), $a).call($b); + }), nil) && 'uses_splat?'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $DefinedSuperNode(){}; - var self = $DefinedSuperNode = $klass($base, $super, 'DefinedSuperNode', $DefinedSuperNode); + function $YieldNode(){}; + var self = $YieldNode = $klass($base, $super, 'YieldNode', $YieldNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("defined_super"); + def.level = nil; + self.$handle("yield"); - return (def.$compile = function() { - var self = this; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_2, self = this; - self.$compile_dispatcher(); - return self.$wrap("((", ") != null ? \"super\" : nil)"); - }, nil) && 'compile'; - })(self, $scope.get('BaseSuperNode')); + self.$compile_call(self.$children(), self.level); + if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("if (", " === $breaker) return $breaker.$v") + } else { + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this; +if (tmp == null) tmp = nil; + return self.$wrap("(((" + (tmp) + " = ", ") === $breaker) ? $breaker.$v : " + (tmp) + ")")}, TMP_2.$$s = self, TMP_2), $a).call($b) + }; + }), nil) && 'compile'; + })($scope.base, $scope.get('BaseYieldNode')); (function($base, $super) { - function $SuperNode(){}; - var self = $SuperNode = $klass($base, $super, 'SuperNode', $SuperNode); + function $YasgnNode(){}; + var self = $YasgnNode = $klass($base, $super, 'YasgnNode', $YasgnNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("super"); - - self.$children("arglist", "iter"); + self.$handle("yasgn"); - def.$compile = function() { - var $a, $b, self = this, splat = nil, args = nil; + self.$children("var_name", "yield_args"); - if ((($a = ((($b = self.$arglist()) !== false && $b !== nil) ? $b : self.$iter())) !== nil && (!$a.$$is_boolean || $a == true))) { - splat = self['$has_splat?'](); - args = self.$expr(self.$args()); - if (splat !== false && splat !== nil) { - } else { - args = [self.$fragment("["), args, self.$fragment("]")] - }; - } else if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - (($a = [true]), $b = self.$scope(), $b['$uses_zuper='].apply($b, $a), $a[$a.length-1]); - args = self.$fragment("$zuper"); - } else { - args = self.$fragment("$slice.call(arguments)") - }; - self.$compile_dispatcher(); - self.$push(".apply(self, "); - ($a = self).$push.apply($a, [].concat(args)); - return self.$push(")"); - }; + return (Opal.defn(self, '$compile', function() { + var $a, self = this; - return (def['$has_splat?'] = function() { - var $a, $b, TMP_2, self = this; + self.$compile_call(($a = self).$s.apply($a, Opal.to_a(self.$yield_args()['$[]']($range(1, -1, false)))), "stmt"); + return self.$wrap("if ((" + (self.$var_name()) + " = ", ") === $breaker) return $breaker.$v"); + }), nil) && 'compile'; + })($scope.base, $scope.get('BaseYieldNode')); - return ($a = ($b = self.$args().$children())['$any?'], $a.$$p = (TMP_2 = function(child){var self = TMP_2.$$s || this; -if (child == null) child = nil; - return child.$type()['$==']("splat")}, TMP_2.$$s = self, TMP_2), $a).call($b); - }, nil) && 'has_splat?'; - })(self, $scope.get('BaseSuperNode')); - })(self) - })(self); -}; + (function($base, $super) { + function $ReturnableYieldNode(){}; + var self = $ReturnableYieldNode = $klass($base, $super, 'ReturnableYieldNode', $ReturnableYieldNode); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/version"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + var def = self.$$proto, $scope = self.$$scope; - return (function($base) { - var self = $module($base, 'Opal'); + def.level = nil; + self.$handle("returnable_yield"); - var def = self.$$proto, $scope = self.$$scope; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_3, self = this; - Opal.cdecl($scope, 'VERSION', "0.8.0") - })(self) + self.$compile_call(self.$children(), self.level); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; +if (tmp == null) tmp = nil; + return self.$wrap("return " + (tmp) + " = ", ", " + (tmp) + " === $breaker ? " + (tmp) + " : " + (tmp))}, TMP_3.$$s = self, TMP_3), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('BaseYieldNode')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/top"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/rescue"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$require', '$handle', '$children', '$push', '$version_comment', '$opening', '$in_scope', '$line', '$inspect', '$to_s', '$dynamic_require_severity', '$compiler', '$stmt', '$stmts', '$is_a?', '$add_temp', '$add_used_helpers', '$add_used_operators', '$to_vars', '$scope', '$compile_method_stubs', '$compile_irb_vars', '$compile_end_construct', '$closing', '$requirable?', '$cleanpath', '$Pathname', '$file', '$returns', '$body', '$irb?', '$to_a', '$helpers', '$each', '$operator_helpers', '$[]', '$method_missing?', '$method_calls', '$join', '$map', '$empty?', '$eof_content']); - self.$require("pathname"); - self.$require("opal/version"); - self.$require("opal/nodes/scope"); + Opal.add_stubs(['$require', '$handle', '$children', '$stmt?', '$lhs', '$returns', '$compiler', '$rhs', '$push', '$expr', '$body', '$rescue_val', '$wrap', '$line', '$process', '$body_sexp', '$ensr_sexp', '$wrap_in_closure?', '$begn', '$ensr', '$s', '$recv?', '$expr?', '$indent', '$body_code', '$each_with_index', '$==', '$type', '$[]', '$!', '$empty?', '$rescue_exprs', '$rescue_variable', '$[]=', '$rescue_body', '$===', '$include?', '$rescue_variable?', '$last', '$args', '$dup', '$pop']); + self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $TopNode(){}; - var self = $TopNode = $klass($base, $super, 'TopNode', $TopNode); + function $RescueModNode(){}; + var self = $RescueModNode = $klass($base, $super, 'RescueModNode', $RescueModNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("top"); - - self.$children("body"); - - def.$compile = function() { - var $a, $b, TMP_1, self = this; - - self.$push(self.$version_comment()); - self.$opening(); - ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, body_code = nil; + self.$handle("rescue_mod"); - self.$line("Opal.dynamic_require_severity = " + (self.$compiler().$dynamic_require_severity().$to_s().$inspect()) + ";"); - body_code = self.$stmt(self.$stmts()); - if ((($a = body_code['$is_a?']($scope.get('Array'))) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - body_code = [body_code] - }; - self.$add_temp("self = Opal.top"); - self.$add_temp("$scope = Opal"); - self.$add_temp("nil = Opal.nil"); - self.$add_used_helpers(); - self.$add_used_operators(); - self.$line(self.$scope().$to_vars()); - self.$compile_method_stubs(); - self.$compile_irb_vars(); - self.$compile_end_construct(); - return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$closing(); - }; + self.$children("lhs", "rhs"); - def.$opening = function() { - var $a, self = this, path = nil; + Opal.defn(self, '$body', function() { + var $a, self = this; - if ((($a = self.$compiler()['$requirable?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - path = self.$Pathname(self.$compiler().$file()).$cleanpath().$to_s(); - return self.$line("Opal.modules[" + (path.$inspect()) + "] = function(Opal) {"); + if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$lhs() } else { - return self.$line("(function(Opal) {") + return self.$compiler().$returns(self.$lhs()) }; - }; + }); - def.$closing = function() { + Opal.defn(self, '$rescue_val', function() { var $a, self = this; - if ((($a = self.$compiler()['$requirable?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$line("};\n") + if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$rhs() } else { - return self.$line("})(Opal);\n") + return self.$compiler().$returns(self.$rhs()) }; - }; - - def.$stmts = function() { - var self = this; - - return self.$compiler().$returns(self.$body()); - }; + }); - def.$compile_irb_vars = function() { + return (Opal.defn(self, '$compile', function() { var $a, self = this; - if ((($a = self.$compiler()['$irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$line("if (!Opal.irb_vars) { Opal.irb_vars = {}; }") - } else { + self.$push("try {", self.$expr(self.$body()), " } catch ($err) { ", self.$expr(self.$rescue_val()), " }"); + if ((($a = self['$stmt?']()) !== nil && (!$a.$$is_boolean || $a == true))) { return nil + } else { + return self.$wrap("(function() {", "})()") }; - }; + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')); - def.$add_used_helpers = function() { - var $a, $b, TMP_2, self = this, helpers = nil; + (function($base, $super) { + function $EnsureNode(){}; + var self = $EnsureNode = $klass($base, $super, 'EnsureNode', $EnsureNode); - helpers = self.$compiler().$helpers().$to_a(); - return ($a = ($b = helpers.$to_a()).$each, $a.$$p = (TMP_2 = function(h){var self = TMP_2.$$s || this; -if (h == null) h = nil; - return self.$add_temp("$" + (h) + " = Opal." + (h))}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$add_used_operators = function() { - var $a, $b, TMP_3, self = this, operators = nil; + def.level = nil; + self.$handle("ensure"); - operators = self.$compiler().$operator_helpers().$to_a(); - return ($a = ($b = operators).$each, $a.$$p = (TMP_3 = function(op){var self = TMP_3.$$s || this, name = nil; -if (op == null) op = nil; - name = (((($scope.get('Nodes')).$$scope.get('CallNode'))).$$scope.get('OPERATORS'))['$[]'](op); - self.$line("function $rb_" + (name) + "(lhs, rhs) {"); - self.$line(" return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs " + (op) + " rhs : lhs['$" + (op) + "'](rhs);"); - return self.$line("}");}, TMP_3.$$s = self, TMP_3), $a).call($b); - }; + self.$children("begn", "ensr"); - def.$compile_method_stubs = function() { - var $a, $b, TMP_4, self = this, calls = nil, stubs = nil; + Opal.defn(self, '$compile', function() { + var $a, self = this; - if ((($a = self.$compiler()['$method_missing?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - calls = self.$compiler().$method_calls(); - stubs = ($a = ($b = calls.$to_a()).$map, $a.$$p = (TMP_4 = function(k){var self = TMP_4.$$s || this; -if (k == null) k = nil; - return "'$" + (k) + "'"}, TMP_4.$$s = self, TMP_4), $a).call($b).$join(", "); - if ((($a = stubs['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return nil - } else { - return self.$line("Opal.add_stubs([" + (stubs) + "]);") - }; + self.$push("try {"); + self.$line(self.$compiler().$process(self.$body_sexp(), self.level)); + self.$line("} finally {"); + self.$line(self.$compiler().$process(self.$ensr_sexp(), self.level)); + self.$line("}"); + if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(function() {", "; })()") } else { return nil }; - }; + }); - def.$compile_end_construct = function() { - var $a, self = this, content = nil; + Opal.defn(self, '$body_sexp', function() { + var $a, self = this; - if ((($a = content = self.$compiler().$eof_content()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$line("var $__END__ = Opal.Object.$new();"); - return self.$line("$__END__.$read = function() { return " + (content.$inspect()) + "; };"); + if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compiler().$returns(self.$begn()) } else { - return nil - }; - }; - - return (def.$version_comment = function() { - var self = this; - - return "/* Generated by Opal " + ((($scope.get('Opal')).$$scope.get('VERSION'))) + " */"; - }, nil) && 'version_comment'; - })(self, $scope.get('ScopeNode')) - })(self) - })(self); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/while"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + return self.$begn() + }; + }); - Opal.add_stubs(['$require', '$handle', '$children', '$with_temp', '$js_truthy', '$test', '$in_while', '$wrap_in_closure?', '$[]=', '$while_loop', '$stmt', '$body', '$uses_redo?', '$push', '$while_open', '$while_close', '$line', '$compiler', '$wrap', '$[]', '$expr?', '$recv?']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$ensr_sexp', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ((($a = self.$ensr()) !== false && $a !== nil) ? $a : self.$s("nil")); + }); - (function($base) { - var self = $module($base, 'Nodes'); + return (Opal.defn(self, '$wrap_in_closure?', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ((($a = self['$recv?']()) !== false && $a !== nil) ? $a : self['$expr?']()); + }), nil) && 'wrap_in_closure?'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $WhileNode(){}; - var self = $WhileNode = $klass($base, $super, 'WhileNode', $WhileNode); + function $RescueNode(){}; + var self = $RescueNode = $klass($base, $super, 'RescueNode', $RescueNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("while"); + self.$handle("rescue"); - self.$children("test", "body"); + self.$children("body"); - def.$compile = function() { - var $a, $b, TMP_1, self = this; + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, $c, TMP_2, self = this, handled_else = nil; - ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(redo_var){var self = TMP_1.$$s || this, $a, $b, TMP_2, test_code = nil; -if (redo_var == null) redo_var = nil; - test_code = self.$js_truthy(self.$test()); - return ($a = ($b = self.$compiler()).$in_while, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, body_code = nil; + handled_else = false; + self.$push("try {"); + self.$line(($a = ($b = self).$indent, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this; + if (self.level == null) self.level = nil; - if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$while_loop()['$[]=']("closure", true)}; - self.$while_loop()['$[]=']("redo_var", redo_var); - body_code = self.$stmt(self.$body()); - if ((($a = self['$uses_redo?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("" + (redo_var) + " = false; " + (self.$while_open()) + (redo_var) + " || "); - self.$push(test_code); - self.$push(self.$while_close()); - } else { - self.$push(self.$while_open(), test_code, self.$while_close()) - }; - if ((($a = self['$uses_redo?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$push("" + (redo_var) + " = false;")}; - return self.$line(body_code, "}");}, TMP_2.$$s = self, TMP_2), $a).call($b);}, TMP_1.$$s = self, TMP_1), $a).call($b); - if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$wrap("(function() {", "; return nil; })()") + return self.$process(self.$body_code(), self.level)}, TMP_1.$$s = self, TMP_1), $a).call($b)); + self.$line("} catch ($err) {"); + ($a = ($c = self.$children()['$[]']($range(1, -1, false))).$each_with_index, $a.$$p = (TMP_2 = function(child, idx){var self = TMP_2.$$s || this, $a, $b, TMP_3; +if (child == null) child = nil;if (idx == null) idx = nil; + if (child.$type()['$==']("resbody")) { + } else { + handled_else = true + }; + if (idx['$=='](0)) { + } else { + self.$push("else ") + }; + return self.$push(($a = ($b = self).$indent, $a.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this; + if (self.level == null) self.level = nil; + + return self.$process(child, self.level)}, TMP_3.$$s = self, TMP_3), $a).call($b));}, TMP_2.$$s = self, TMP_2), $a).call($c); + if (handled_else !== false && handled_else !== nil) { + } else { + self.$push("else { throw $err; }") + }; + self.$line("}"); + if ((($a = self['$expr?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(function() { ", "})()") } else { return nil }; - }; - - def.$while_open = function() { - var self = this; - - return "while ("; - }; - - def.$while_close = function() { - var self = this; - - return ") {"; - }; - - def['$uses_redo?'] = function() { - var self = this; - - return self.$while_loop()['$[]']("use_redo"); - }; + }); - return (def['$wrap_in_closure?'] = function() { - var $a, self = this; + return (Opal.defn(self, '$body_code', function() { + var $a, self = this, body_code = nil; - return ((($a = self['$expr?']()) !== false && $a !== nil) ? $a : self['$recv?']()); - }, nil) && 'wrap_in_closure?'; - })(self, $scope.get('Base')); + body_code = ((function() {if (self.$body().$type()['$==']("resbody")) { + return self.$s("nil") + } else { + return self.$body() + }; return nil; })()); + if ((($a = self['$stmt?']()['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compiler().$returns(body_code) + } else { + return body_code + }; + }), nil) && 'body_code'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $UntilNode(){}; - var self = $UntilNode = $klass($base, $super, 'UntilNode', $UntilNode); + function $ResBodyNode(){}; + var self = $ResBodyNode = $klass($base, $super, 'ResBodyNode', $ResBodyNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("until"); - - def.$while_open = function() { - var self = this; - - return "while (!("; - }; + self.$handle("resbody"); - return (def.$while_close = function() { - var self = this; + self.$children("args", "body"); - return ")) {"; - }, nil) && 'while_close'; - })(self, $scope.get('WhileNode')); - })(self) - })(self); -}; + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_4, $c, TMP_5, $d, TMP_6, self = this, variable = nil; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/for"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + self.$push("if ("); + if ((($a = self.$rescue_exprs()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("true") + } else { + self.$push("Opal.rescue($err, ["); + ($a = ($b = self.$rescue_exprs()).$each_with_index, $a.$$p = (TMP_4 = function(rexpr, idx){var self = TMP_4.$$s || this; +if (rexpr == null) rexpr = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(", ") + }; + return self.$push(self.$expr(rexpr));}, TMP_4.$$s = self, TMP_4), $a).call($b); + self.$push("])"); + }; + self.$push(") {"); + if ((($a = variable = self.$rescue_variable()) !== nil && (!$a.$$is_boolean || $a == true))) { + variable['$[]='](2, self.$s("js_tmp", "$err")); + self.$push(self.$expr(variable), ";");}; + self.$line("try {"); + ($a = ($c = self).$indent, $a.$$p = (TMP_5 = function(){var self = TMP_5.$$s || this; + if (self.level == null) self.level = nil; - Opal.add_stubs(['$require', '$handle', '$children', '$with_temp', '$==', '$type', '$args_sexp', '$s', '$<<', '$body_sexp', '$first', '$insert', '$value', '$push', '$expr']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + return self.$line(self.$process(self.$rescue_body(), self.level))}, TMP_5.$$s = self, TMP_5), $a).call($c); + self.$line("} finally {"); + ($a = ($d = self).$indent, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this; - var def = self.$$proto, $scope = self.$$scope; + return self.$line("Opal.gvars[\"!\"] = Opal.exceptions.pop() || Opal.nil;")}, TMP_6.$$s = self, TMP_6), $a).call($d); + self.$line("}"); + return self.$line("}"); + }); - (function($base) { - var self = $module($base, 'Nodes'); + Opal.defn(self, '$rescue_variable?', function(variable) { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ($a = $scope.get('Sexp')['$==='](variable), $a !== false && $a !== nil ?["lasgn", "iasgn"]['$include?'](variable.$type()) : $a); + }); - (function($base, $super) { - function $ForNode(){}; - var self = $ForNode = $klass($base, $super, 'ForNode', $ForNode); + Opal.defn(self, '$rescue_variable', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self['$rescue_variable?'](self.$args().$last())) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$args().$last().$dup() + } else { + return nil + }; + }); - self.$handle("for"); + Opal.defn(self, '$rescue_exprs', function() { + var $a, self = this, exprs = nil; - self.$children("value", "args_sexp", "body_sexp"); + exprs = self.$args().$dup(); + if ((($a = self['$rescue_variable?'](exprs.$last())) !== nil && (!$a.$$is_boolean || $a == true))) { + exprs.$pop()}; + return exprs.$children(); + }); - return (def.$compile = function() { - var $a, $b, TMP_1, self = this; + return (Opal.defn(self, '$rescue_body', function() { + var $a, self = this, body_code = nil; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(loop_var){var self = TMP_1.$$s || this, $a, assign = nil, iter = nil, sexp = nil; -if (loop_var == null) loop_var = nil; - if (self.$args_sexp().$type()['$==']("array")) { - assign = self.$s("masgn", self.$args_sexp()); - assign['$<<'](self.$s("to_ary", self.$s("js_tmp", loop_var))); - } else { - assign = self.$args_sexp()['$<<'](self.$s("js_tmp", loop_var)) - }; - if ((($a = self.$body_sexp()) !== nil && (!$a.$$is_boolean || $a == true))) { - if (self.$body_sexp().$first()['$==']("block")) { - self.$body_sexp().$insert(1, assign); - assign = self.$body_sexp(); - } else { - assign = self.$s("block", assign, self.$body_sexp()) - }}; - iter = self.$s("iter", self.$s("lasgn", loop_var), assign); - sexp = self.$s("call", self.$value(), "each", self.$s("arglist"), iter); - return self.$push(self.$expr(sexp));}, TMP_1.$$s = self, TMP_1), $a).call($b); - }, nil) && 'compile'; - })(self, $scope.get('Base')) - })(self) - })(self); + body_code = (((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil"))); + if ((($a = self['$stmt?']()['$!']()) !== nil && (!$a.$$is_boolean || $a == true))) { + body_code = self.$compiler().$returns(body_code)}; + return body_code; + }), nil) && 'rescue_body'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/hash"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/case"] = function(Opal) { Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - Opal.add_stubs(['$require', '$handle', '$each_with_index', '$even?', '$<<', '$children', '$all?', '$include?', '$type', '$keys_and_values', '$simple_keys?', '$compile_hash2', '$compile_hash', '$helper', '$==', '$push', '$expr', '$wrap', '$times', '$inspect', '$to_s', '$[]', '$[]=', '$size', '$join']); + Opal.add_stubs(['$require', '$handle', '$children', '$in_case', '$condition', '$[]=', '$case_stmt', '$add_local', '$push', '$expr', '$each_with_index', '$==', '$type', '$needs_closure?', '$returns', '$compiler', '$stmt', '$case_parts', '$!', '$wrap', '$stmt?', '$[]', '$s', '$js_truthy', '$when_checks', '$process', '$body_code', '$whens', '$body']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $HashNode(){}; - var self = $HashNode = $klass($base, $super, 'HashNode', $HashNode); + function $CaseNode(){}; + var self = $CaseNode = $klass($base, $super, 'CaseNode', $CaseNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("hash"); + self.$handle("case"); - def.$keys_and_values = function() { - var $a, $b, TMP_1, self = this, keys = nil, values = nil; + self.$children("condition"); - $a = [[], []], keys = $a[0], values = $a[1]; - ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_1 = function(obj, idx){var self = TMP_1.$$s || this, $a; -if (obj == null) obj = nil;if (idx == null) idx = nil; - if ((($a = idx['$even?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return keys['$<<'](obj) + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, handled_else = nil; + + handled_else = false; + return ($a = ($b = self.$compiler()).$in_case, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, TMP_2, $c; + + if ((($a = self.$condition()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$case_stmt()['$[]=']("cond", true); + self.$add_local("$case"); + self.$push("$case = ", self.$expr(self.$condition()), ";");}; + ($a = ($b = self.$case_parts()).$each_with_index, $a.$$p = (TMP_2 = function(wen, idx){var self = TMP_2.$$s || this, $a, $b; +if (wen == null) wen = nil;if (idx == null) idx = nil; + if ((($a = (($b = wen !== false && wen !== nil) ? wen.$type()['$==']("when") : wen)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$compiler().$returns(wen)}; + if (idx['$=='](0)) { + } else { + self.$push("else ") + }; + return self.$push(self.$stmt(wen)); + } else if (wen !== false && wen !== nil) { + handled_else = true; + if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + wen = self.$compiler().$returns(wen)}; + return self.$push("else {", self.$stmt(wen), "}"); + } else { + return nil + }}, TMP_2.$$s = self, TMP_2), $a).call($b); + if ((($a = ($c = self['$needs_closure?'](), $c !== false && $c !== nil ?handled_else['$!']() : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("else { return nil }")}; + if ((($a = self['$needs_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(function() {", "})()") } else { - return values['$<<'](obj) - }}, TMP_1.$$s = self, TMP_1), $a).call($b); - return [keys, values]; - }; + return nil + };}, TMP_1.$$s = self, TMP_1), $a).call($b); + }); + + Opal.defn(self, '$needs_closure?', function() { + var self = this; + + return self['$stmt?']()['$!'](); + }); + + Opal.defn(self, '$case_parts', function() { + var self = this; + + return self.$children()['$[]']($range(1, -1, false)); + }); - def['$simple_keys?'] = function(keys) { - var $a, $b, TMP_2, self = this; + return (Opal.defn(self, '$case_stmt', function() { + var self = this; - return ($a = ($b = keys)['$all?'], $a.$$p = (TMP_2 = function(key){var self = TMP_2.$$s || this; -if (key == null) key = nil; - return ["sym", "str"]['$include?'](key.$type())}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + return self.$compiler().$case_stmt(); + }), nil) && 'case_stmt'; + })($scope.base, $scope.get('Base')); - def.$compile = function() { - var $a, self = this, keys = nil, values = nil; + (function($base, $super) { + function $WhenNode(){}; + var self = $WhenNode = $klass($base, $super, 'WhenNode', $WhenNode); - $a = Opal.to_ary(self.$keys_and_values()), keys = ($a[0] == null ? nil : $a[0]), values = ($a[1] == null ? nil : $a[1]); - if ((($a = self['$simple_keys?'](keys)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$compile_hash2(keys, values) - } else { - return self.$compile_hash() - }; - }; + var def = self.$$proto, $scope = self.$$scope; + + def.level = nil; + self.$handle("when"); + + self.$children("whens", "body"); - def.$compile_hash = function() { + Opal.defn(self, '$compile', function() { var $a, $b, TMP_3, self = this; - self.$helper("hash"); - ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_3 = function(child, idx){var self = TMP_3.$$s || this; -if (child == null) child = nil;if (idx == null) idx = nil; + self.$push("if ("); + ($a = ($b = self.$when_checks()).$each_with_index, $a.$$p = (TMP_3 = function(check, idx){var self = TMP_3.$$s || this, $a, call = nil; +if (check == null) check = nil;if (idx == null) idx = nil; if (idx['$=='](0)) { } else { - self.$push(", ") + self.$push(" || ") }; - return self.$push(self.$expr(child));}, TMP_3.$$s = self, TMP_3), $a).call($b); - return self.$wrap("$hash(", ")"); - }; + if (check.$type()['$==']("splat")) { + self.$push("(function($splt) { for (var i = 0; i < $splt.length; i++) {"); + self.$push("if ($splt[i]['$===']($case)) { return true; }"); + return self.$push("} return false; })(", self.$expr(check['$[]'](1)), ")"); + } else if ((($a = self.$case_stmt()['$[]']("cond")) !== nil && (!$a.$$is_boolean || $a == true))) { + call = self.$s("call", check, "===", self.$s("arglist", self.$s("js_tmp", "$case"))); + return self.$push(self.$expr(call)); + } else { + return self.$push(self.$js_truthy(check)) + };}, TMP_3.$$s = self, TMP_3), $a).call($b); + return self.$push(") {", self.$process(self.$body_code(), self.level), "}"); + }); - return (def.$compile_hash2 = function(keys, values) { - var $a, $b, TMP_4, $c, TMP_5, self = this, hash_obj = nil, hash_keys = nil; + Opal.defn(self, '$when_checks', function() { + var self = this; - $a = [$hash2([], {}), []], hash_obj = $a[0], hash_keys = $a[1]; - self.$helper("hash2"); - ($a = ($b = keys.$size()).$times, $a.$$p = (TMP_4 = function(idx){var self = TMP_4.$$s || this, $a, key = nil; -if (idx == null) idx = nil; - key = keys['$[]'](idx)['$[]'](1).$to_s().$inspect(); - if ((($a = hash_obj['$include?'](key)) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - hash_keys['$<<'](key) - }; - return hash_obj['$[]='](key, self.$expr(values['$[]'](idx)));}, TMP_4.$$s = self, TMP_4), $a).call($b); - ($a = ($c = hash_keys).$each_with_index, $a.$$p = (TMP_5 = function(key, idx){var self = TMP_5.$$s || this; -if (key == null) key = nil;if (idx == null) idx = nil; - if (idx['$=='](0)) { - } else { - self.$push(", ") - }; - self.$push("" + (key) + ": "); - return self.$push(hash_obj['$[]'](key));}, TMP_5.$$s = self, TMP_5), $a).call($c); - return self.$wrap("$hash2([" + (hash_keys.$join(", ")) + "], {", "})"); - }, nil) && 'compile_hash2'; - })(self, $scope.get('Base')) - })(self) - })(self); + return self.$whens().$children(); + }); + + Opal.defn(self, '$case_stmt', function() { + var self = this; + + return self.$compiler().$case_stmt(); + }); + + return (Opal.defn(self, '$body_code', function() { + var $a, self = this; + + return ((($a = self.$body()) !== false && $a !== nil) ? $a : self.$s("nil")); + }), nil) && 'body_code'; + })($scope.base, $scope.get('Base')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/array"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/super"] = function(Opal) { Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$handle', '$empty?', '$children', '$push', '$each', '$==', '$type', '$expr', '$<<', '$fragment']); + Opal.add_stubs(['$require', '$children', '$arglist', '$iter', '$expr', '$iter_sexp', '$uses_block!', '$scope', '$def?', '$identify!', '$name', '$parent', '$defs', '$push', '$to_s', '$mid', '$iter?', '$get_super_chain', '$join', '$map', '$raise', '$s', '$handle', '$compile_dispatcher', '$wrap', '$has_splat?', '$args', '$fragment', '$uses_zuper=', '$any?', '$==', '$type']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $ArrayNode(){}; - var self = $ArrayNode = $klass($base, $super, 'ArrayNode', $ArrayNode); + function $BaseSuperNode(){}; + var self = $BaseSuperNode = $klass($base, $super, 'BaseSuperNode', $BaseSuperNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("array"); + self.$children("arglist", "iter"); - return (def.$compile = function() { - var $a, $b, TMP_1, self = this, code = nil, work = nil, join = nil; + Opal.defn(self, '$compile_dispatcher', function() { + var $a, $b, TMP_1, self = this, iter = nil, scope_name = nil, class_name = nil, chain = nil, cur_defn = nil, mid = nil, trys = nil; - if ((($a = self.$children()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("[]")}; - $a = [[], []], code = $a[0], work = $a[1]; - ($a = ($b = self.$children()).$each, $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this, $a, splat = nil, part = nil; -if (child == null) child = nil; - splat = child.$type()['$==']("splat"); - part = self.$expr(child); - if (splat !== false && splat !== nil) { - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code['$<<'](self.$fragment("[].concat("))['$<<'](part)['$<<'](self.$fragment(")")) - } else { - code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")) - } - } else { - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code['$<<'](self.$fragment("["))['$<<'](work)['$<<'](self.$fragment("]")) - } else { - code['$<<'](self.$fragment(".concat(["))['$<<'](work)['$<<'](self.$fragment("])")) - }; - code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")); - }; - return work = []; - } else { - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - work['$<<'](self.$fragment(", ")) - }; - return work['$<<'](part); - };}, TMP_1.$$s = self, TMP_1), $a).call($b); - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = ((($b = self.$arglist()) !== false && $b !== nil) ? $b : self.$iter())) !== nil && (!$a.$$is_boolean || $a == true))) { + iter = self.$expr(self.$iter_sexp()) } else { - join = [self.$fragment("["), work, self.$fragment("]")]; - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code = join + self.$scope()['$uses_block!'](); + iter = "$iter"; + }; + if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$scope()['$uses_block!'](); + scope_name = self.$scope()['$identify!'](); + class_name = (function() {if ((($a = self.$scope().$parent().$name()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "$" + (self.$scope().$parent().$name()) } else { - code.$push([self.$fragment(".concat("), join, self.$fragment(")")]) + return "self.$$class.$$proto" + }; return nil; })(); + if ((($a = self.$scope().$defs()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("Opal.find_super_dispatcher(self, '" + (self.$scope().$mid().$to_s()) + "', " + (scope_name) + ", "); + self.$push(iter); + return self.$push(", " + (class_name) + ")"); + } else { + self.$push("Opal.find_super_dispatcher(self, '" + (self.$scope().$mid().$to_s()) + "', " + (scope_name) + ", "); + self.$push(iter); + return self.$push(")"); }; + } else if ((($a = self.$scope()['$iter?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + $b = self.$scope().$get_super_chain(), $a = Opal.to_ary($b), chain = ($a[0] == null ? nil : $a[0]), cur_defn = ($a[1] == null ? nil : $a[1]), mid = ($a[2] == null ? nil : $a[2]), $b; + trys = ($a = ($b = chain).$map, $a.$$p = (TMP_1 = function(c){var self = TMP_1.$$s || this; +if (c == null) c = nil; + return "" + (c) + ".$$def"}, TMP_1.$$s = self, TMP_1), $a).call($b).$join(" || "); + return self.$push("Opal.find_iter_super_dispatcher(self, " + (mid) + ", (" + (trys) + " || " + (cur_defn) + "), null)"); + } else { + return self.$raise("Cannot call super() from outside a method block") }; - return self.$push(code); - }, nil) && 'compile'; - })(self, $scope.get('Base')) - })(self) - })(self); -}; - -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/defined"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; + }); - Opal.add_stubs(['$require', '$handle', '$children', '$type', '$value', '$===', '$push', '$inspect', '$to_s', '$expr', '$s', '$[]', '$respond_to?', '$__send__', '$mid_to_jsid', '$with_temp', '$handle_block_given_call', '$compiler', '$wrap', '$include?']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$args', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ((($a = self.$arglist()) !== false && $a !== nil) ? $a : self.$s("arglist")); + }); - (function($base) { - var self = $module($base, 'Nodes'); + return (Opal.defn(self, '$iter_sexp', function() { + var $a, self = this; - var def = self.$$proto, $scope = self.$$scope; + return ((($a = self.$iter()) !== false && $a !== nil) ? $a : self.$s("js_tmp", "null")); + }), nil) && 'iter_sexp'; + })($scope.base, $scope.get('Base')); (function($base, $super) { - function $DefinedNode(){}; - var self = $DefinedNode = $klass($base, $super, 'DefinedNode', $DefinedNode); + function $DefinedSuperNode(){}; + var self = $DefinedSuperNode = $klass($base, $super, 'DefinedSuperNode', $DefinedSuperNode); var def = self.$$proto, $scope = self.$$scope; - def.sexp = nil; - self.$handle("defined"); + self.$handle("defined_super"); - self.$children("value"); + return (Opal.defn(self, '$compile', function() { + var self = this; - def.$compile = function() { - var $a, self = this, type = nil, $case = nil; + self.$compile_dispatcher(); + return self.$wrap("((", ") != null ? \"super\" : nil)"); + }), nil) && 'compile'; + })($scope.base, $scope.get('BaseSuperNode')); - type = self.$value().$type(); - return (function() {$case = type;if ("self"['$===']($case) || "nil"['$===']($case) || "false"['$===']($case) || "true"['$===']($case)) {return self.$push(type.$to_s().$inspect())}else if ("lasgn"['$===']($case) || "iasgn"['$===']($case) || "gasgn"['$===']($case) || "cvdecl"['$===']($case) || "masgn"['$===']($case) || "op_asgn_or"['$===']($case) || "op_asgn_and"['$===']($case)) {return self.$push("'assignment'")}else if ("paren"['$===']($case) || "not"['$===']($case)) {return self.$push(self.$expr(self.$s("defined", self.$value()['$[]'](1))))}else if ("lvar"['$===']($case)) {return self.$push("'local-variable'")}else {if ((($a = self['$respond_to?']("compile_" + (type))) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$__send__("compile_" + (type)) - } else { - return self.$push("'expression'") - }}})(); - }; + (function($base, $super) { + function $SuperNode(){}; + var self = $SuperNode = $klass($base, $super, 'SuperNode', $SuperNode); - def.$compile_call = function() { - var $a, $b, TMP_1, self = this, mid = nil, recv = nil; + var def = self.$$proto, $scope = self.$$scope; - mid = self.$mid_to_jsid(self.$value()['$[]'](2).$to_s()); - recv = (function() {if ((($a = self.$value()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$expr(self.$value()['$[]'](1)) + self.$handle("super"); + + self.$children("arglist", "iter"); + + Opal.defn(self, '$compile', function() { + var $a, $b, self = this, splat = nil, args = nil; + + if ((($a = ((($b = self.$arglist()) !== false && $b !== nil) ? $b : self.$iter())) !== nil && (!$a.$$is_boolean || $a == true))) { + splat = self['$has_splat?'](); + args = self.$expr(self.$args()); + if (splat !== false && splat !== nil) { + } else { + args = [self.$fragment("["), args, self.$fragment("]")] + }; + } else if ((($a = self.$scope()['$def?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + (($a = [true]), $b = self.$scope(), $b['$uses_zuper='].apply($b, $a), $a[$a.length-1]); + args = self.$fragment("$zuper"); } else { - return "self" - }; return nil; })(); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; -if (tmp == null) tmp = nil; - self.$push("(((" + (tmp) + " = ", recv, "" + (mid) + ") && !" + (tmp) + ".$$stub) || ", recv); - return self.$push("['$respond_to_missing?']('" + (self.$value()['$[]'](2).$to_s()) + "') ? 'method' : nil)");}, TMP_1.$$s = self, TMP_1), $a).call($b); - }; + args = self.$fragment("$slice.call(arguments)") + }; + self.$compile_dispatcher(); + self.$push(".apply(self, "); + ($a = self).$push.apply($a, Opal.to_a(args)); + return self.$push(")"); + }); - def.$compile_ivar = function() { + return (Opal.defn(self, '$has_splat?', function() { var $a, $b, TMP_2, self = this; - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this, name = nil; -if (tmp == null) tmp = nil; - name = self.$value()['$[]'](1).$to_s()['$[]']($range(1, -1, false)); - self.$push("((" + (tmp) + " = self['" + (name) + "'], " + (tmp) + " != null && " + (tmp) + " !== nil) ? "); - return self.$push("'instance-variable' : nil)");}, TMP_2.$$s = self, TMP_2), $a).call($b); - }; + return ($a = ($b = self.$args().$children())['$any?'], $a.$$p = (TMP_2 = function(child){var self = TMP_2.$$s || this; +if (child == null) child = nil; + return child.$type()['$==']("splat")}, TMP_2.$$s = self, TMP_2), $a).call($b); + }), nil) && 'has_splat?'; + })($scope.base, $scope.get('BaseSuperNode')); + })($scope.base) + })($scope.base); +}; - def.$compile_super = function() { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/version"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module; + + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.cdecl($scope, 'VERSION', "0.9.2") + })($scope.base) +}; + +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/top"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + + Opal.add_stubs(['$require', '$handle', '$children', '$push', '$version_comment', '$opening', '$in_scope', '$line', '$inspect', '$to_s', '$dynamic_require_severity', '$compiler', '$compile_config', '$stmt', '$stmts', '$is_a?', '$eval?', '$add_temp', '$add_used_helpers', '$add_used_operators', '$to_vars', '$scope', '$compile_method_stubs', '$compile_irb_vars', '$compile_end_construct', '$closing', '$requirable?', '$cleanpath', '$Pathname', '$file', '$returns', '$body', '$irb?', '$to_a', '$helpers', '$each', '$operator_helpers', '$[]', '$method_missing?', '$method_calls', '$join', '$map', '$empty?', '$eof_content', '$arity_check?', '$freezing?', '$tainting?']); + self.$require("pathname"); + self.$require("opal/version"); + self.$require("opal/nodes/scope"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); + + var def = self.$$proto, $scope = self.$$scope; + + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - return self.$push(self.$expr(self.$s("defined_super", self.$value()))); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$compile_yield = function() { - var self = this; + (function($base, $super) { + function $TopNode(){}; + var self = $TopNode = $klass($base, $super, 'TopNode', $TopNode); - self.$push(self.$compiler().$handle_block_given_call(self.sexp)); - return self.$wrap("((", ") != null ? \"yield\" : nil)"); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$compile_xstr = function() { - var self = this; + self.$handle("top"); - self.$push(self.$expr(self.$value())); - return self.$wrap("(typeof(", ") !== \"undefined\")"); - }; + self.$children("body"); - Opal.defn(self, '$compile_dxstr', def.$compile_xstr); + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; - def.$compile_const = function() { - var self = this; + self.$push(self.$version_comment()); + self.$opening(); + ($a = ($b = self).$in_scope, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, body_code = nil; - return self.$push("($scope." + (self.$value()['$[]'](1)) + " != null)"); - }; + self.$line("Opal.dynamic_require_severity = " + (self.$compiler().$dynamic_require_severity().$to_s().$inspect()) + ";"); + self.$compile_config(); + body_code = self.$stmt(self.$stmts()); + if ((($a = body_code['$is_a?']($scope.get('Array'))) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + body_code = [body_code] + }; + if ((($a = self.$compiler()['$eval?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + self.$add_temp("self = Opal.top") + }; + self.$add_temp((function() {if ((($a = self.$compiler()['$eval?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return "$scope = (self.$$scope || self.$$class.$$scope)" + } else { + return "$scope = Opal" + }; return nil; })()); + self.$add_temp("nil = Opal.nil"); + self.$add_used_helpers(); + self.$add_used_operators(); + self.$line(self.$scope().$to_vars()); + self.$compile_method_stubs(); + self.$compile_irb_vars(); + self.$compile_end_construct(); + return self.$line(body_code);}, TMP_1.$$s = self, TMP_1), $a).call($b); + return self.$closing(); + }); - def.$compile_colon2 = function() { - var self = this; + Opal.defn(self, '$opening', function() { + var $a, self = this, path = nil; - self.$push("(function(){ try { return (("); - self.$push(self.$expr(self.$value())); - self.$push(") != null ? 'constant' : nil); } catch (err) { if (err.$$class"); - return self.$push(" === Opal.NameError) { return nil; } else { throw(err); }}; })()"); - }; + if ((($a = self.$compiler()['$requirable?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + path = self.$Pathname(self.$compiler().$file()).$cleanpath().$to_s(); + return self.$line("Opal.modules[" + (path.$inspect()) + "] = function(Opal) {"); + } else if ((($a = self.$compiler()['$eval?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$line("(function(Opal, self) {") + } else { + return self.$line("(function(Opal) {") + }; + }); - def.$compile_colon3 = function() { - var self = this; + Opal.defn(self, '$closing', function() { + var $a, self = this; - return self.$push("(Opal.Object.$$scope." + (self.$value()['$[]'](1)) + " == null ? nil : 'constant')"); - }; + if ((($a = self.$compiler()['$requirable?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$line("};\n") + } else if ((($a = self.$compiler()['$eval?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$line("})(Opal, self)") + } else { + return self.$line("})(Opal);\n") + }; + }); - def.$compile_cvar = function() { + Opal.defn(self, '$stmts', function() { var self = this; - return self.$push("(Opal.cvars['" + (self.$value()['$[]'](1)) + "'] != null ? 'class variable' : nil)"); - }; + return self.$compiler().$returns(self.$body()); + }); - def.$compile_gvar = function() { - var $a, $b, TMP_3, self = this, name = nil; + Opal.defn(self, '$compile_irb_vars', function() { + var $a, self = this; - name = self.$value()['$[]'](1).$to_s()['$[]']($range(1, -1, false)); - if ((($a = ["~", "!"]['$include?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$push("'global-variable'") - } else if ((($a = ["`", "'", "+", "&"]['$include?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; -if (tmp == null) tmp = nil; - self.$push("((" + (tmp) + " = $gvars['~'], " + (tmp) + " != null && " + (tmp) + " !== nil) ? "); - return self.$push("'global-variable' : nil)");}, TMP_3.$$s = self, TMP_3), $a).call($b) + if ((($a = self.$compiler()['$irb?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$line("if (!Opal.irb_vars) { Opal.irb_vars = {}; }") } else { - return self.$push("($gvars[" + (name.$inspect()) + "] != null ? 'global-variable' : nil)") + return nil }; - }; - - return (def.$compile_nth_ref = function() { - var $a, $b, TMP_4, self = this; + }); - return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(tmp){var self = TMP_4.$$s || this; -if (tmp == null) tmp = nil; - self.$push("((" + (tmp) + " = $gvars['~'], " + (tmp) + " != null && " + (tmp) + " != nil) ? "); - return self.$push("'global-variable' : nil)");}, TMP_4.$$s = self, TMP_4), $a).call($b); - }, nil) && 'compile_nth_ref'; - })(self, $scope.get('Base')) - })(self) - })(self); -}; + Opal.defn(self, '$add_used_helpers', function() { + var $a, $b, TMP_2, self = this, helpers = nil; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/masgn"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_minus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); - } - function $rb_ge(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + helpers = self.$compiler().$helpers().$to_a(); + return ($a = ($b = helpers.$to_a()).$each, $a.$$p = (TMP_2 = function(h){var self = TMP_2.$$s || this; +if (h == null) h = nil; + return self.$add_temp("$" + (h) + " = Opal." + (h))}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - Opal.add_stubs(['$require', '$handle', '$children', '$new_temp', '$scope', '$==', '$type', '$rhs', '$size', '$push', '$expr', '$[]', '$raise', '$each_with_index', '$dup', '$<<', '$s', '$[]=', '$to_sym', '$last', '$lhs', '$queue_temp']); - self.$require("opal/nodes/base"); - return (function($base) { - var self = $module($base, 'Opal'); + Opal.defn(self, '$add_used_operators', function() { + var $a, $b, TMP_3, self = this, operators = nil; - var def = self.$$proto, $scope = self.$$scope; + operators = self.$compiler().$operator_helpers().$to_a(); + return ($a = ($b = operators).$each, $a.$$p = (TMP_3 = function(op){var self = TMP_3.$$s || this, name = nil; +if (op == null) op = nil; + name = (((($scope.get('Nodes')).$$scope.get('CallNode'))).$$scope.get('OPERATORS'))['$[]'](op); + self.$line("function $rb_" + (name) + "(lhs, rhs) {"); + self.$line(" return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs " + (op) + " rhs : lhs['$" + (op) + "'](rhs);"); + return self.$line("}");}, TMP_3.$$s = self, TMP_3), $a).call($b); + }); - (function($base) { - var self = $module($base, 'Nodes'); + Opal.defn(self, '$compile_method_stubs', function() { + var $a, $b, TMP_4, self = this, calls = nil, stubs = nil; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = self.$compiler()['$method_missing?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + calls = self.$compiler().$method_calls(); + stubs = ($a = ($b = calls.$to_a()).$map, $a.$$p = (TMP_4 = function(k){var self = TMP_4.$$s || this; +if (k == null) k = nil; + return "'$" + (k) + "'"}, TMP_4.$$s = self, TMP_4), $a).call($b).$join(", "); + if ((($a = stubs['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + return self.$line("Opal.add_stubs([" + (stubs) + "]);") + }; + } else { + return nil + }; + }); - (function($base, $super) { - function $MassAssignNode(){}; - var self = $MassAssignNode = $klass($base, $super, 'MassAssignNode', $MassAssignNode); + Opal.defn(self, '$compile_end_construct', function() { + var $a, self = this, content = nil; - var def = self.$$proto, $scope = self.$$scope; + if ((($a = content = self.$compiler().$eof_content()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$line("var $__END__ = Opal.Object.$new();"); + return self.$line("$__END__.$read = function() { return " + (content.$inspect()) + "; };"); + } else { + return nil + }; + }); - self.$handle("masgn"); + Opal.defn(self, '$compile_config', function() { + var self = this; - self.$children("lhs", "rhs"); + self.$line("var OPAL_CONFIG = { "); + self.$push("method_missing: " + (self.$compiler()['$method_missing?']()) + ", "); + self.$push("arity_check: " + (self.$compiler()['$arity_check?']()) + ", "); + self.$push("freezing: " + (self.$compiler()['$freezing?']()) + ", "); + self.$push("tainting: " + (self.$compiler()['$tainting?']()) + " "); + return self.$push("};"); + }); - return (def.$compile = function() { - var $a, $b, TMP_1, self = this, tmp = nil, len = nil; + return (Opal.defn(self, '$version_comment', function() { + var self = this; - tmp = self.$scope().$new_temp(); - len = 0; - if (self.$rhs().$type()['$==']("array")) { - len = $rb_minus(self.$rhs().$size(), 1); - self.$push("" + (tmp) + " = ", self.$expr(self.$rhs())); - } else if (self.$rhs().$type()['$==']("to_ary")) { - self.$push("" + (tmp) + " = Opal.to_ary(", self.$expr(self.$rhs()['$[]'](1)), ")") - } else if (self.$rhs().$type()['$==']("splat")) { - self.$push("(" + (tmp) + " = ", self.$expr(self.$rhs()['$[]'](1)), ")['$to_a'] && !" + (tmp) + "['$to_a'].$$stub ? (" + (tmp) + " = " + (tmp) + "['$to_a']())"); - self.$push(" : (" + (tmp) + ").$$is_array ? " + (tmp) + " : (" + (tmp) + " = [" + (tmp) + "])"); - } else { - self.$raise("unsupported mlhs type") - }; - ($a = ($b = self.$lhs().$children()).$each_with_index, $a.$$p = (TMP_1 = function(child, idx){var self = TMP_1.$$s || this, $a, $b, $c, $d, part = nil, assign = nil; -if (child == null) child = nil;if (idx == null) idx = nil; - self.$push(", "); - if (child.$type()['$==']("splat")) { - if ((($a = part = child['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { - part = part.$dup(); - part['$<<'](self.$s("js_tmp", "$slice.call(" + (tmp) + ", " + (idx) + ")")); - return self.$push(self.$expr(part)); - } else { - return nil - } - } else { - if ($rb_ge(idx, len)) { - assign = self.$s("js_tmp", "(" + (tmp) + "[" + (idx) + "] == null ? nil : " + (tmp) + "[" + (idx) + "])") - } else { - assign = self.$s("js_tmp", "" + (tmp) + "[" + (idx) + "]") - }; - part = child.$dup(); - if ((($a = ((($b = ((($c = ((($d = child.$type()['$==']("lasgn")) !== false && $d !== nil) ? $d : child.$type()['$==']("iasgn"))) !== false && $c !== nil) ? $c : child.$type()['$==']("lvar"))) !== false && $b !== nil) ? $b : child.$type()['$==']("gasgn"))) !== nil && (!$a.$$is_boolean || $a == true))) { - part['$<<'](assign) - } else if (child.$type()['$==']("call")) { - part['$[]='](2, ((("") + (part['$[]'](2))) + "=").$to_sym()); - part.$last()['$<<'](assign); - } else if (child.$type()['$==']("attrasgn")) { - part.$last()['$<<'](assign) - } else { - self.$raise("Bad lhs for masgn") - }; - return self.$push(self.$expr(part)); - };}, TMP_1.$$s = self, TMP_1), $a).call($b); - return self.$scope().$queue_temp(tmp); - }, nil) && 'compile'; - })(self, $scope.get('Base')) - })(self) - })(self); + return "/* Generated by Opal " + ((($scope.get('Opal')).$$scope.get('VERSION'))) + " */"; + }), nil) && 'version_comment'; + })($scope.base, $scope.get('ScopeNode')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes/arglist"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/while"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$handle', '$each', '$==', '$first', '$expr', '$empty?', '$<<', '$fragment', '$children', '$push']); + Opal.add_stubs(['$require', '$handle', '$children', '$with_temp', '$js_truthy', '$test', '$in_while', '$wrap_in_closure?', '$[]=', '$while_loop', '$stmt', '$body', '$uses_redo?', '$push', '$while_open', '$while_close', '$line', '$compiler', '$wrap', '$[]', '$expr?', '$recv?']); self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'Nodes'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; (function($base, $super) { - function $ArglistNode(){}; - var self = $ArglistNode = $klass($base, $super, 'ArglistNode', $ArglistNode); + function $WhileNode(){}; + var self = $WhileNode = $klass($base, $super, 'WhileNode', $WhileNode); var def = self.$$proto, $scope = self.$$scope; - self.$handle("arglist"); + self.$handle("while"); - return (def.$compile = function() { - var $a, $b, TMP_1, self = this, code = nil, work = nil, join = nil; + self.$children("test", "body"); - $a = [[], []], code = $a[0], work = $a[1]; - ($a = ($b = self.$children()).$each, $a.$$p = (TMP_1 = function(current){var self = TMP_1.$$s || this, $a, splat = nil, arg = nil; -if (current == null) current = nil; - splat = current.$first()['$==']("splat"); - arg = self.$expr(current); - if (splat !== false && splat !== nil) { - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code['$<<'](self.$fragment("[].concat(")); - code['$<<'](arg); - code['$<<'](self.$fragment(")")); - } else { - code = $rb_plus(code, ".concat(" + (arg) + ")") - } - } else { - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code['$<<']([self.$fragment("["), work, self.$fragment("]")]) - } else { - code['$<<']([self.$fragment(".concat(["), work, self.$fragment("])")]) - }; - code['$<<']([self.$fragment(".concat("), arg, self.$fragment(")")]); - }; - return work = []; - } else { - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; + + ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(redo_var){var self = TMP_1.$$s || this, $a, $b, TMP_2, test_code = nil; +if (redo_var == null) redo_var = nil; + test_code = self.$js_truthy(self.$test()); + return ($a = ($b = self.$compiler()).$in_while, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, body_code = nil; + + if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$while_loop()['$[]=']("closure", true)}; + self.$while_loop()['$[]=']("redo_var", redo_var); + body_code = self.$stmt(self.$body()); + if ((($a = self['$uses_redo?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("" + (redo_var) + " = false; " + (self.$while_open()) + (redo_var) + " || "); + self.$push(test_code); + self.$push(self.$while_close()); } else { - work['$<<'](self.$fragment(", ")) + self.$push(self.$while_open(), test_code, self.$while_close()) }; - return work['$<<'](arg); - };}, TMP_1.$$s = self, TMP_1), $a).call($b); - if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = self['$uses_redo?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$push("" + (redo_var) + " = false;")}; + return self.$line(body_code, "}");}, TMP_2.$$s = self, TMP_2), $a).call($b);}, TMP_1.$$s = self, TMP_1), $a).call($b); + if ((($a = self['$wrap_in_closure?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$wrap("(function() {", "; return nil; })()") } else { - join = work; - if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { - code = join - } else { - code['$<<'](self.$fragment(".concat("))['$<<'](join)['$<<'](self.$fragment(")")) - }; + return nil }; - return ($a = self).$push.apply($a, [].concat(code)); - }, nil) && 'compile'; - })(self, $scope.get('Base')) - })(self) - })(self); -}; + }); + + Opal.defn(self, '$while_open', function() { + var self = this; + + return "while ("; + }); + + Opal.defn(self, '$while_close', function() { + var self = this; + + return ") {"; + }); + + Opal.defn(self, '$uses_redo?', function() { + var self = this; + + return self.$while_loop()['$[]']("use_redo"); + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/nodes"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; + return (Opal.defn(self, '$wrap_in_closure?', function() { + var $a, self = this; - Opal.add_stubs(['$require']); - self.$require("opal/nodes/base"); - self.$require("opal/nodes/literal"); - self.$require("opal/nodes/variables"); - self.$require("opal/nodes/constants"); - self.$require("opal/nodes/call"); - self.$require("opal/nodes/call_special"); - self.$require("opal/nodes/module"); - self.$require("opal/nodes/class"); - self.$require("opal/nodes/singleton_class"); - self.$require("opal/nodes/iter"); - self.$require("opal/nodes/def"); - self.$require("opal/nodes/if"); - self.$require("opal/nodes/logic"); - self.$require("opal/nodes/definitions"); - self.$require("opal/nodes/yield"); - self.$require("opal/nodes/rescue"); - self.$require("opal/nodes/case"); - self.$require("opal/nodes/super"); - self.$require("opal/nodes/top"); - self.$require("opal/nodes/while"); - self.$require("opal/nodes/for"); - self.$require("opal/nodes/hash"); - self.$require("opal/nodes/array"); - self.$require("opal/nodes/defined"); - self.$require("opal/nodes/masgn"); - return self.$require("opal/nodes/arglist"); + return ((($a = self['$expr?']()) !== false && $a !== nil) ? $a : self['$recv?']()); + }), nil) && 'wrap_in_closure?'; + })($scope.base, $scope.get('Base')); + + (function($base, $super) { + function $UntilNode(){}; + var self = $UntilNode = $klass($base, $super, 'UntilNode', $UntilNode); + + var def = self.$$proto, $scope = self.$$scope; + + self.$handle("until"); + + Opal.defn(self, '$while_open', function() { + var self = this; + + return "while (!("; + }); + + return (Opal.defn(self, '$while_close', function() { + var self = this; + + return ")) {"; + }), nil) && 'while_close'; + })($scope.base, $scope.get('WhileNode')); + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/compiler"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/for"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2, $klass = Opal.klass; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$compile', '$new', '$[]', '$define_method', '$fetch', '$!', '$include?', '$raise', '$inspect', '$compiler_option', '$attr_reader', '$attr_accessor', '$s', '$parse', '$file', '$eof_content', '$lexer', '$flatten', '$process', '$join', '$map', '$to_proc', '$message', '$class', '$backtrace', '$warn', '$<<', '$helpers', '$new_temp', '$queue_temp', '$push_while', '$pop_while', '$in_while?', '$==', '$fragment', '$handlers', '$type', '$compile_to_fragments', '$returns', '$===', '$[]=', '$length', '$=~', '$tap', '$source=', '$source', '$uses_block!', '$block_name', '$find_parent_def']); - self.$require("set"); - self.$require("opal/parser"); - self.$require("opal/fragment"); - self.$require("opal/nodes"); + Opal.add_stubs(['$require', '$handle', '$children', '$with_temp', '$==', '$type', '$args_sexp', '$s', '$<<', '$body_sexp', '$first', '$insert', '$each', '$[]', '$===', '$add_local', '$value', '$push', '$expr']); + self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; - Opal.defs(self, '$compile', function(source, options) { - var self = this; - - if (options == null) { - options = $hash2([], {}) - } - return $scope.get('Compiler').$new(source, options).$compile(); - }); + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - (function($base, $super) { - function $Compiler(){}; - var self = $Compiler = $klass($base, $super, 'Compiler', $Compiler); + var def = self.$$proto, $scope = self.$$scope; - var def = self.$$proto, $scope = self.$$scope, TMP_3, TMP_4, TMP_5, TMP_6; + (function($base, $super) { + function $ForNode(){}; + var self = $ForNode = $klass($base, $super, 'ForNode', $ForNode); - def.parser = def.source = def.sexp = def.fragments = def.helpers = def.operator_helpers = def.method_calls = def.indent = def.unique = def.scope = def.case_stmt = def.handlers = def.requires = def.required_trees = nil; - Opal.cdecl($scope, 'INDENT', " "); + var def = self.$$proto, $scope = self.$$scope; - Opal.cdecl($scope, 'COMPARE', ["<", ">", "<=", ">="]); + self.$handle("for"); - Opal.defs(self, '$compiler_option', function(name, default_value, options) { - var $a, $b, TMP_1, $c, self = this, mid = nil, valid_values = nil; + self.$children("value", "args_sexp", "body_sexp"); - if (options == null) { - options = $hash2([], {}) - } - mid = options['$[]']("as"); - valid_values = options['$[]']("valid_values"); - return ($a = ($b = self).$define_method, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, TMP_2, $c, value = nil; - if (self.options == null) self.options = nil; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this; - value = ($a = ($b = self.options).$fetch, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(loop_var){var self = TMP_1.$$s || this, $a, $b, TMP_2, assign = nil, iter = nil, sexp = nil; +if (loop_var == null) loop_var = nil; + if (self.$args_sexp().$type()['$==']("array")) { + assign = self.$s("masgn", self.$args_sexp()); + assign['$<<'](self.$s("to_ary", self.$s("js_tmp", loop_var))); + } else { + assign = self.$args_sexp()['$<<'](self.$s("js_tmp", loop_var)) + }; + if ((($a = self.$body_sexp()) !== nil && (!$a.$$is_boolean || $a == true))) { + if (self.$body_sexp().$first()['$==']("block")) { + self.$body_sexp().$insert(1, assign); + assign = self.$body_sexp(); + } else { + assign = self.$s("block", assign, self.$body_sexp()) + }}; + ($a = ($b = assign.$children()).$each, $a.$$p = (TMP_2 = function(sexp){var self = TMP_2.$$s || this, $a, $b, TMP_3, $case = nil; +if (sexp == null) sexp = nil; + return (function() {$case = sexp['$[]'](0);if ("lasgn"['$===']($case)) {return self.$add_local(sexp['$[]'](1))}else if ("masgn"['$===']($case)) {if (sexp['$[]'](1)['$[]'](0)['$==']("array")) { + return ($a = ($b = sexp['$[]'](1)['$[]'](1)).$each, $a.$$p = (TMP_3 = function(sexp){var self = TMP_3.$$s || this; +if (sexp == null) sexp = nil; + if (sexp['$[]'](0)['$==']("lasgn")) { + return self.$add_local(sexp['$[]'](1)) + } else { + return nil + }}, TMP_3.$$s = self, TMP_3), $a).call($b) + } else { + return nil + }}else { return nil }})()}, TMP_2.$$s = self, TMP_2), $a).call($b); + iter = self.$s("iter", self.$s("lasgn", loop_var), assign); + sexp = self.$s("call", self.$value(), "each", self.$s("arglist"), iter); + return self.$push(self.$expr(sexp));}, TMP_1.$$s = self, TMP_1), $a).call($b); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); +}; - return default_value}, TMP_2.$$s = self, TMP_2), $a).call($b, name); - if ((($a = (($c = valid_values !== false && valid_values !== nil) ? (valid_values['$include?'](value))['$!']() : $c)) !== nil && (!$a.$$is_boolean || $a == true))) { - self.$raise($scope.get('ArgumentError'), $rb_plus("invalid value " + (value.$inspect()) + " for option " + (name.$inspect()) + " ", "(valid values: " + (valid_values.$inspect()) + ")"))}; - return value;}, TMP_1.$$s = self, TMP_1), $a).call($b, ((($c = mid) !== false && $c !== nil) ? $c : name)); - }); +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/hash"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $hash2 = Opal.hash2; - self.$compiler_option("file", "(file)"); + Opal.add_stubs(['$require', '$handle', '$each_with_index', '$even?', '$<<', '$children', '$all?', '$include?', '$type', '$keys_and_values', '$simple_keys?', '$compile_hash2', '$compile_hash', '$helper', '$==', '$push', '$expr', '$wrap', '$times', '$inspect', '$to_s', '$[]', '$[]=', '$size', '$join']); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - self.$compiler_option("method_missing", true, $hash2(["as"], {"as": "method_missing?"})); + var def = self.$$proto, $scope = self.$$scope; - self.$compiler_option("arity_check", false, $hash2(["as"], {"as": "arity_check?"})); + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - self.$compiler_option("irb", false, $hash2(["as"], {"as": "irb?"})); + var def = self.$$proto, $scope = self.$$scope; - self.$compiler_option("dynamic_require_severity", "error", $hash2(["valid_values"], {"valid_values": ["error", "warning", "ignore"]})); + (function($base, $super) { + function $HashNode(){}; + var self = $HashNode = $klass($base, $super, 'HashNode', $HashNode); - self.$compiler_option("requirable", false, $hash2(["as"], {"as": "requirable?"})); + var def = self.$$proto, $scope = self.$$scope; - self.$compiler_option("inline_operators", true, $hash2(["as"], {"as": "inline_operators?"})); + self.$handle("hash"); - self.$attr_reader("result"); + Opal.defn(self, '$keys_and_values', function() { + var $a, $b, TMP_1, self = this, keys = nil, values = nil; - self.$attr_reader("fragments"); + $a = [[], []], keys = $a[0], values = $a[1], $a; + ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_1 = function(obj, idx){var self = TMP_1.$$s || this, $a; +if (obj == null) obj = nil;if (idx == null) idx = nil; + if ((($a = idx['$even?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return keys['$<<'](obj) + } else { + return values['$<<'](obj) + }}, TMP_1.$$s = self, TMP_1), $a).call($b); + return [keys, values]; + }); - self.$attr_accessor("scope"); + Opal.defn(self, '$simple_keys?', function(keys) { + var $a, $b, TMP_2, self = this; - self.$attr_reader("case_stmt"); + return ($a = ($b = keys)['$all?'], $a.$$p = (TMP_2 = function(key){var self = TMP_2.$$s || this; +if (key == null) key = nil; + return ["sym", "str"]['$include?'](key.$type())}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - self.$attr_reader("eof_content"); + Opal.defn(self, '$compile', function() { + var $a, $b, self = this, keys = nil, values = nil; - def.$initialize = function(source, options) { - var self = this; + $b = self.$keys_and_values(), $a = Opal.to_ary($b), keys = ($a[0] == null ? nil : $a[0]), values = ($a[1] == null ? nil : $a[1]), $b; + if ((($a = self['$simple_keys?'](keys)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$compile_hash2(keys, values) + } else { + return self.$compile_hash() + }; + }); - if (options == null) { - options = $hash2([], {}) - } - self.source = source; - self.indent = ""; - self.unique = 0; - return self.options = options; - }; + Opal.defn(self, '$compile_hash', function() { + var $a, $b, TMP_3, self = this; - def.$compile = function() { - var $a, $b, self = this, error = nil, message = nil; + self.$helper("hash"); + ($a = ($b = self.$children()).$each_with_index, $a.$$p = (TMP_3 = function(child, idx){var self = TMP_3.$$s || this; +if (child == null) child = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(", ") + }; + return self.$push(self.$expr(child));}, TMP_3.$$s = self, TMP_3), $a).call($b); + return self.$wrap("$hash(", ")"); + }); - try { - self.parser = $scope.get('Parser').$new(); - self.sexp = self.$s("top", ((($a = self.parser.$parse(self.source, self.$file())) !== false && $a !== nil) ? $a : self.$s("nil"))); - self.eof_content = self.parser.$lexer().$eof_content(); - self.fragments = self.$process(self.sexp).$flatten(); - return self.result = ($a = ($b = self.fragments).$map, $a.$$p = "code".$to_proc(), $a).call($b).$join(""); - } catch ($err) {if (true) {error = $err; - message = "An error occurred while compiling: " + (self.$file()) + "\n" + (error.$message()); - return self.$raise(error.$class(), message, error.$backtrace()); - }else { throw $err; } - }; - }; + return (Opal.defn(self, '$compile_hash2', function(keys, values) { + var $a, $b, TMP_4, $c, TMP_5, self = this, hash_obj = nil, hash_keys = nil; - def.$source_map = function(source_file) { - var $a, self = this; + $a = [$hash2([], {}), []], hash_obj = $a[0], hash_keys = $a[1], $a; + self.$helper("hash2"); + ($a = ($b = keys.$size()).$times, $a.$$p = (TMP_4 = function(idx){var self = TMP_4.$$s || this, $a, key = nil; +if (idx == null) idx = nil; + key = keys['$[]'](idx)['$[]'](1).$to_s().$inspect(); + if ((($a = hash_obj['$include?'](key)) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + hash_keys['$<<'](key) + }; + return hash_obj['$[]='](key, self.$expr(values['$[]'](idx)));}, TMP_4.$$s = self, TMP_4), $a).call($b); + ($a = ($c = hash_keys).$each_with_index, $a.$$p = (TMP_5 = function(key, idx){var self = TMP_5.$$s || this; +if (key == null) key = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + } else { + self.$push(", ") + }; + self.$push("" + (key) + ": "); + return self.$push(hash_obj['$[]'](key));}, TMP_5.$$s = self, TMP_5), $a).call($c); + return self.$wrap("$hash2([" + (hash_keys.$join(", ")) + "], {", "})"); + }), nil) && 'compile_hash2'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); +}; - if (source_file == null) { - source_file = nil - } - return (($scope.get('Opal')).$$scope.get('SourceMap')).$new(self.fragments, ((($a = source_file) !== false && $a !== nil) ? $a : self.$file())); - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/array"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - def.$helpers = function() { - var $a, self = this; + Opal.add_stubs(['$require', '$handle', '$empty?', '$children', '$push', '$each', '$==', '$type', '$expr', '$<<', '$fragment']); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return ((($a = self.helpers) !== false && $a !== nil) ? $a : self.helpers = $scope.get('Set').$new(["breaker", "slice"])); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$operator_helpers = function() { - var $a, self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - return ((($a = self.operator_helpers) !== false && $a !== nil) ? $a : self.operator_helpers = $scope.get('Set').$new()); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$method_calls = function() { - var $a, self = this; + (function($base, $super) { + function $ArrayNode(){}; + var self = $ArrayNode = $klass($base, $super, 'ArrayNode', $ArrayNode); - return ((($a = self.method_calls) !== false && $a !== nil) ? $a : self.method_calls = $scope.get('Set').$new()); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$error = function(msg, line) { - var self = this; + self.$handle("array"); - if (line == null) { - line = nil - } - return self.$raise($scope.get('SyntaxError'), "" + (msg) + " :" + (self.$file()) + ":" + (line)); - }; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, code = nil, work = nil, join = nil; - def.$warning = function(msg, line) { - var self = this; + if ((($a = self.$children()['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("[]")}; + $a = [[], []], code = $a[0], work = $a[1], $a; + ($a = ($b = self.$children()).$each, $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this, $a, splat = nil, part = nil; +if (child == null) child = nil; + splat = child.$type()['$==']("splat"); + part = self.$expr(child); + if (splat !== false && splat !== nil) { + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code['$<<'](self.$fragment("[].concat("))['$<<'](part)['$<<'](self.$fragment(")")) + } else { + code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")) + } + } else { + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code['$<<'](self.$fragment("["))['$<<'](work)['$<<'](self.$fragment("]")) + } else { + code['$<<'](self.$fragment(".concat(["))['$<<'](work)['$<<'](self.$fragment("])")) + }; + code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")); + }; + return work = []; + } else { + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + work['$<<'](self.$fragment(", ")) + }; + return work['$<<'](part); + };}, TMP_1.$$s = self, TMP_1), $a).call($b); + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + join = [self.$fragment("["), work, self.$fragment("]")]; + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code = join + } else { + code.$push([self.$fragment(".concat("), join, self.$fragment(")")]) + }; + }; + return self.$push(code); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); +}; - if (line == null) { - line = nil - } - return self.$warn("WARNING: " + (msg) + " -- " + (self.$file()) + ":" + (line)); - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/defined"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $range = Opal.range; - def.$parser_indent = function() { - var self = this; + Opal.add_stubs(['$require', '$handle', '$children', '$type', '$value', '$===', '$push', '$inspect', '$to_s', '$expr', '$s', '$[]', '$respond_to?', '$__send__', '$mid_to_jsid', '$with_temp', '$handle_block_given_call', '$compiler', '$wrap', '$include?']); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return self.indent; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$s = function(parts) { - var self = this; + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - parts = $slice.call(arguments, 0); - return $scope.get('Sexp').$new(parts); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$fragment = function(str, sexp) { - var self = this; + (function($base, $super) { + function $DefinedNode(){}; + var self = $DefinedNode = $klass($base, $super, 'DefinedNode', $DefinedNode); - if (sexp == null) { - sexp = nil - } - return $scope.get('Fragment').$new(str, sexp); - }; + var def = self.$$proto, $scope = self.$$scope; - def.$unique_temp = function() { - var self = this; + def.sexp = nil; + self.$handle("defined"); - return "TMP_" + (self.unique = $rb_plus(self.unique, 1)); - }; + self.$children("value"); - def.$helper = function(name) { - var self = this; + Opal.defn(self, '$compile', function() { + var $a, self = this, type = nil, $case = nil; - return self.$helpers()['$<<'](name); - }; + type = self.$value().$type(); + return (function() {$case = type;if ("self"['$===']($case) || "nil"['$===']($case) || "false"['$===']($case) || "true"['$===']($case)) {return self.$push(type.$to_s().$inspect())}else if ("lasgn"['$===']($case) || "iasgn"['$===']($case) || "gasgn"['$===']($case) || "cvdecl"['$===']($case) || "masgn"['$===']($case) || "op_asgn_or"['$===']($case) || "op_asgn_and"['$===']($case)) {return self.$push("'assignment'")}else if ("paren"['$===']($case) || "not"['$===']($case)) {return self.$push(self.$expr(self.$s("defined", self.$value()['$[]'](1))))}else if ("lvar"['$===']($case)) {return self.$push("'local-variable'")}else {if ((($a = self['$respond_to?']("compile_" + (type))) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$__send__("compile_" + (type)) + } else { + return self.$push("'expression'") + }}})(); + }); - def.$indent = TMP_3 = function() { - var $a, self = this, $iter = TMP_3.$$p, block = $iter || nil, indent = nil, res = nil; + Opal.defn(self, '$compile_call', function() { + var $a, $b, TMP_1, self = this, mid = nil, recv = nil; - TMP_3.$$p = null; - indent = self.indent; - self.indent = $rb_plus(self.indent, $scope.get('INDENT')); - self.space = "\n" + (self.indent); - res = ((($a = Opal.yieldX(block, [])) === $breaker) ? $breaker.$v : $a); - self.indent = indent; - self.space = "\n" + (self.indent); - return res; - }; + mid = self.$mid_to_jsid(self.$value()['$[]'](2).$to_s()); + recv = (function() {if ((($a = self.$value()['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$expr(self.$value()['$[]'](1)) + } else { + return "self" + }; return nil; })(); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_1 = function(tmp){var self = TMP_1.$$s || this; +if (tmp == null) tmp = nil; + self.$push("(((" + (tmp) + " = ", recv, "" + (mid) + ") && !" + (tmp) + ".$$stub) || ", recv); + return self.$push("['$respond_to_missing?']('" + (self.$value()['$[]'](2).$to_s()) + "') ? 'method' : nil)");}, TMP_1.$$s = self, TMP_1), $a).call($b); + }); - def.$with_temp = TMP_4 = function() { - var $a, self = this, $iter = TMP_4.$$p, block = $iter || nil, tmp = nil, res = nil; + Opal.defn(self, '$compile_ivar', function() { + var $a, $b, TMP_2, self = this; - TMP_4.$$p = null; - tmp = self.scope.$new_temp(); - res = ((($a = Opal.yield1(block, tmp)) === $breaker) ? $breaker.$v : $a); - self.scope.$queue_temp(tmp); - return res; - }; + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_2 = function(tmp){var self = TMP_2.$$s || this, name = nil; +if (tmp == null) tmp = nil; + name = self.$value()['$[]'](1).$to_s()['$[]']($range(1, -1, false)); + self.$push("((" + (tmp) + " = self['" + (name) + "'], " + (tmp) + " != null && " + (tmp) + " !== nil) ? "); + return self.$push("'instance-variable' : nil)");}, TMP_2.$$s = self, TMP_2), $a).call($b); + }); - def.$in_while = TMP_5 = function() { - var $a, self = this, $iter = TMP_5.$$p, $yield = $iter || nil, result = nil; + Opal.defn(self, '$compile_super', function() { + var self = this; - TMP_5.$$p = null; - if (($yield !== nil)) { - } else { - return nil - }; - self.while_loop = self.scope.$push_while(); - result = ((($a = Opal.yieldX($yield, [])) === $breaker) ? $breaker.$v : $a); - self.scope.$pop_while(); - return result; - }; + return self.$push(self.$expr(self.$s("defined_super", self.$value()))); + }); - def.$in_case = TMP_6 = function() { - var self = this, $iter = TMP_6.$$p, $yield = $iter || nil, old = nil; + Opal.defn(self, '$compile_yield', function() { + var self = this; - TMP_6.$$p = null; - if (($yield !== nil)) { - } else { - return nil - }; - old = self.case_stmt; - self.case_stmt = $hash2([], {}); - if (Opal.yieldX($yield, []) === $breaker) return $breaker.$v; - return self.case_stmt = old; - }; + self.$push(self.$compiler().$handle_block_given_call(self.sexp)); + return self.$wrap("((", ") != null ? \"yield\" : nil)"); + }); - def['$in_while?'] = function() { - var self = this; + Opal.defn(self, '$compile_xstr', function() { + var self = this; - return self.scope['$in_while?'](); - }; + self.$push(self.$expr(self.$value())); + return self.$wrap("(typeof(", ") !== \"undefined\")"); + }); - def.$process = function(sexp, level) { - var $a, self = this, handler = nil; + Opal.alias(self, 'compile_dxstr', 'compile_xstr'); - if (level == null) { - level = "expr" - } - if (sexp['$=='](nil)) { - return self.$fragment("")}; - if ((($a = handler = self.$handlers()['$[]'](sexp.$type())) !== nil && (!$a.$$is_boolean || $a == true))) { - return handler.$new(sexp, level, self).$compile_to_fragments() - } else { - return self.$raise("Unsupported sexp: " + (sexp.$type())) - }; - }; + Opal.defn(self, '$compile_const', function() { + var self = this; - def.$handlers = function() { - var $a, self = this; + return self.$push("($scope." + (self.$value()['$[]'](1)) + " != null)"); + }); - return ((($a = self.handlers) !== false && $a !== nil) ? $a : self.handlers = (((($scope.get('Opal')).$$scope.get('Nodes'))).$$scope.get('Base')).$handlers()); - }; + Opal.defn(self, '$compile_colon2', function() { + var self = this; - def.$requires = function() { - var $a, self = this; + self.$push("(function(){ try { return (("); + self.$push(self.$expr(self.$value())); + self.$push(") != null ? 'constant' : nil); } catch (err) { if (err.$$class"); + return self.$push(" === Opal.NameError) { return nil; } else { throw(err); }}; })()"); + }); - return ((($a = self.requires) !== false && $a !== nil) ? $a : self.requires = []); - }; + Opal.defn(self, '$compile_colon3', function() { + var self = this; - def.$required_trees = function() { - var $a, self = this; + return self.$push("(Opal.Object.$$scope." + (self.$value()['$[]'](1)) + " == null ? nil : 'constant')"); + }); - return ((($a = self.required_trees) !== false && $a !== nil) ? $a : self.required_trees = []); - }; + Opal.defn(self, '$compile_cvar', function() { + var self = this; - def.$returns = function(sexp) { - var $a, $b, TMP_7, self = this, $case = nil; + return self.$push("(Opal.cvars['" + (self.$value()['$[]'](1)) + "'] != null ? 'class variable' : nil)"); + }); - if (sexp !== false && sexp !== nil) { - } else { - return self.$returns(self.$s("nil")) - }; - return (function() {$case = sexp.$type();if ("break"['$===']($case) || "next"['$===']($case) || "redo"['$===']($case)) {return sexp}else if ("yield"['$===']($case)) {sexp['$[]='](0, "returnable_yield"); - return sexp;}else if ("scope"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); - return sexp;}else if ("block"['$===']($case)) {if ($rb_gt(sexp.$length(), 1)) { - sexp['$[]='](-1, self.$returns(sexp['$[]'](-1))) - } else { - sexp['$<<'](self.$returns(self.$s("nil"))) - }; - return sexp;}else if ("when"['$===']($case)) {sexp['$[]='](2, self.$returns(sexp['$[]'](2))); - return sexp;}else if ("rescue"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); - if ((($a = ($b = sexp['$[]'](2), $b !== false && $b !== nil ?sexp['$[]'](2)['$[]'](0)['$==']("resbody") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - if ((($a = sexp['$[]'](2)['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { - sexp['$[]'](2)['$[]='](2, self.$returns(sexp['$[]'](2)['$[]'](2))) + Opal.defn(self, '$compile_gvar', function() { + var $a, $b, TMP_3, self = this, name = nil; + + name = self.$value()['$[]'](1).$to_s()['$[]']($range(1, -1, false)); + if ((($a = ["~", "!"]['$include?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$push("'global-variable'") + } else if ((($a = ["`", "'", "+", "&"]['$include?'](name)) !== nil && (!$a.$$is_boolean || $a == true))) { + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_3 = function(tmp){var self = TMP_3.$$s || this; +if (tmp == null) tmp = nil; + self.$push("((" + (tmp) + " = $gvars['~'], " + (tmp) + " != null && " + (tmp) + " !== nil) ? "); + return self.$push("'global-variable' : nil)");}, TMP_3.$$s = self, TMP_3), $a).call($b) } else { - sexp['$[]'](2)['$[]='](2, self.$returns(self.$s("nil"))) - }}; - return sexp;}else if ("ensure"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); - return sexp;}else if ("begin"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); - return sexp;}else if ("rescue_mod"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); - sexp['$[]='](2, self.$returns(sexp['$[]'](2))); - return sexp;}else if ("while"['$===']($case)) {return sexp}else if ("return"['$===']($case) || "js_return"['$===']($case)) {return sexp}else if ("xstr"['$===']($case)) {if ((($a = /return|;/['$=~'](sexp['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - sexp['$[]='](1, "return " + (sexp['$[]'](1)) + ";") - }; - return sexp;}else if ("dxstr"['$===']($case)) {if ((($a = /return|;|\n/['$=~'](sexp['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { - } else { - sexp['$[]='](1, "return " + (sexp['$[]'](1))) - }; - return sexp;}else if ("if"['$===']($case)) {sexp['$[]='](2, self.$returns(((($a = sexp['$[]'](2)) !== false && $a !== nil) ? $a : self.$s("nil")))); - sexp['$[]='](3, self.$returns(((($a = sexp['$[]'](3)) !== false && $a !== nil) ? $a : self.$s("nil")))); - return sexp;}else {return ($a = ($b = self.$s("js_return", sexp)).$tap, $a.$$p = (TMP_7 = function(s){var self = TMP_7.$$s || this, $a, $b; -if (s == null) s = nil; - return (($a = [sexp.$source()]), $b = s, $b['$source='].apply($b, $a), $a[$a.length-1])}, TMP_7.$$s = self, TMP_7), $a).call($b)}})(); - }; + return self.$push("($gvars[" + (name.$inspect()) + "] != null ? 'global-variable' : nil)") + }; + }); - return (def.$handle_block_given_call = function(sexp) { - var $a, $b, self = this, scope = nil; + return (Opal.defn(self, '$compile_nth_ref', function() { + var $a, $b, TMP_4, self = this; - self.scope['$uses_block!'](); - if ((($a = self.scope.$block_name()) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$fragment("(" + (self.scope.$block_name()) + " !== nil)", sexp) - } else if ((($a = ($b = scope = self.scope.$find_parent_def(), $b !== false && $b !== nil ?scope.$block_name() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { - return self.$fragment("(" + (scope.$block_name()) + " !== nil)", sexp) - } else { - return self.$fragment("false", sexp) - }; - }, nil) && 'handle_block_given_call'; - })(self, null); - })(self); + return ($a = ($b = self).$with_temp, $a.$$p = (TMP_4 = function(tmp){var self = TMP_4.$$s || this; +if (tmp == null) tmp = nil; + self.$push("((" + (tmp) + " = $gvars['~'], " + (tmp) + " != null && " + (tmp) + " != nil) ? "); + return self.$push("'global-variable' : nil)");}, TMP_4.$$s = self, TMP_4), $a).call($b); + }), nil) && 'compile_nth_ref'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["opal/erb"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/masgn"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_minus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs - rhs : lhs['$-'](rhs); } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $gvars = Opal.gvars; + function $rb_ge(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs >= rhs : lhs['$>='](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - Opal.add_stubs(['$require', '$compile', '$new', '$fix_quotes', '$find_contents', '$find_code', '$wrap_compiled', '$require_erb', '$prepared_source', '$gsub', '$=~', '$sub']); - self.$require("opal/compiler"); + Opal.add_stubs(['$require', '$handle', '$children', '$new_temp', '$scope', '$==', '$type', '$rhs', '$push', '$expr', '$compile_masgn', '$lhs', '$-', '$size', '$[]', '$queue_temp', '$raise', '$take_while', '$!=', '$drop', '$each_with_index', '$compile_assignment', '$empty?', '$shift', '$<<', '$dup', '$s', '$!', '$>=', '$include?', '$[]=', '$to_sym', '$last']); + self.$require("opal/nodes/base"); return (function($base) { - var self = $module($base, 'Opal'); + var $Opal, self = $Opal = $module($base, 'Opal'); var def = self.$$proto, $scope = self.$$scope; (function($base) { - var self = $module($base, 'ERB'); + var $Nodes, self = $Nodes = $module($base, 'Nodes'); var def = self.$$proto, $scope = self.$$scope; - Opal.defs(self, '$compile', function(source, file_name) { - var self = this; - - if (file_name == null) { - file_name = "(erb)" - } - return $scope.get('Compiler').$new(source, file_name).$compile(); - }); - (function($base, $super) { - function $Compiler(){}; - var self = $Compiler = $klass($base, $super, 'Compiler', $Compiler); + function $MassAssignNode(){}; + var self = $MassAssignNode = $klass($base, $super, 'MassAssignNode', $MassAssignNode); var def = self.$$proto, $scope = self.$$scope; - def.prepared_source = def.source = def.file_name = nil; - Opal.cdecl($scope, 'BLOCK_EXPR', /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/); - - def.$initialize = function(source, file_name) { - var $a, self = this; - - if (file_name == null) { - file_name = "(erb)" - } - return $a = [source, file_name, source], self.source = $a[0], self.file_name = $a[1], self.result = $a[2]; - }; - - def.$prepared_source = function() { - var $a, self = this, source = nil; - - return ((($a = self.prepared_source) !== false && $a !== nil) ? $a : self.prepared_source = (function() {source = self.source; - source = self.$fix_quotes(source); - source = self.$find_contents(source); - source = self.$find_code(source); - source = self.$wrap_compiled(source); - source = self.$require_erb(source); - return source;})()); - }; - - def.$compile = function() { - var self = this; - - return $scope.get('Opal').$compile(self.$prepared_source()); - }; + Opal.cdecl($scope, 'SIMPLE_ASSIGNMENT', ["lasgn", "iasgn", "lvar", "gasgn"]); - def.$fix_quotes = function(result) { - var self = this; - - return result.$gsub("\"", "\\\""); - }; + self.$handle("masgn"); - def.$require_erb = function(result) { - var self = this; + self.$children("lhs", "rhs"); - return $rb_plus("require \"erb\";", result); - }; + Opal.defn(self, '$compile', function() { + var self = this, array = nil, retval = nil; - def.$find_contents = function(result) { - var $a, $b, TMP_1, self = this; + array = self.$scope().$new_temp(); + if (self.$rhs().$type()['$==']("array")) { + self.$push("" + (array) + " = ", self.$expr(self.$rhs())); + self.$compile_masgn(self.$lhs().$children(), array, $rb_minus(self.$rhs().$size(), 1)); + self.$push(", " + (array)); + } else if (self.$rhs().$type()['$==']("to_ary")) { + retval = self.$scope().$new_temp(); + self.$push("" + (retval) + " = ", self.$expr(self.$rhs()['$[]'](1))); + self.$push(", " + (array) + " = Opal.to_ary(" + (retval) + ")"); + self.$compile_masgn(self.$lhs().$children(), array); + self.$push(", " + (retval)); + self.$scope().$queue_temp(retval); + } else if (self.$rhs().$type()['$==']("splat")) { + self.$push("" + (array) + " = Opal.to_a(", self.$expr(self.$rhs()['$[]'](1)), ")"); + self.$compile_masgn(self.$lhs().$children(), array); + self.$push(", " + (array)); + } else { + self.$raise("unsupported mlhs type") + }; + return self.$scope().$queue_temp(array); + }); - return ($a = ($b = result).$gsub, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, inner = nil; + Opal.defn(self, '$compile_masgn', function(lhs_items, array, len) { + var $a, $b, TMP_1, $c, TMP_2, $d, TMP_3, self = this, pre_splat = nil, post_splat = nil, splat = nil, part = nil, tmp = nil; - inner = (($a = $gvars['~']) === nil ? nil : $a['$[]'](1)).$gsub(/\\'/, "'").$gsub(/\\"/, "\""); - if ((($a = inner['$=~']($scope.get('BLOCK_EXPR'))) !== nil && (!$a.$$is_boolean || $a == true))) { - return "\")\noutput_buffer.append= " + (inner) + "\noutput_buffer.append(\"" + if (len == null) { + len = nil + } + pre_splat = ($a = ($b = lhs_items).$take_while, $a.$$p = (TMP_1 = function(child){var self = TMP_1.$$s || this; +if (child == null) child = nil; + return child.$type()['$!=']("splat")}, TMP_1.$$s = self, TMP_1), $a).call($b); + post_splat = lhs_items.$drop(pre_splat.$size()); + ($a = ($c = pre_splat).$each_with_index, $a.$$p = (TMP_2 = function(child, idx){var self = TMP_2.$$s || this; +if (child == null) child = nil;if (idx == null) idx = nil; + return self.$compile_assignment(child, array, idx, len)}, TMP_2.$$s = self, TMP_2), $a).call($c); + if ((($a = post_splat['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + return nil + } else { + splat = post_splat.$shift(); + if ((($a = post_splat['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = part = splat['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + part = part.$dup()['$<<'](self.$s("js_tmp", "$slice.call(" + (array) + ", " + (pre_splat.$size()) + ")")); + self.$push(", "); + return self.$push(self.$expr(part)); + } else { + return nil + } } else { - return "\")\noutput_buffer.append=(" + (inner) + ")\noutput_buffer.append(\"" - };}, TMP_1.$$s = self, TMP_1), $a).call($b, /<%=([\s\S]+?)%>/); - }; - - def.$find_code = function(result) { - var $a, $b, TMP_2, self = this; - - return ($a = ($b = result).$gsub, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a; - - return "\")\n" + ((($a = $gvars['~']) === nil ? nil : $a['$[]'](1))) + "\noutput_buffer.append(\""}, TMP_2.$$s = self, TMP_2), $a).call($b, /<%([\s\S]+?)%>/); - }; + tmp = self.$scope().$new_temp(); + self.$push(", " + (tmp) + " = " + (array) + ".length - " + (post_splat.$size())); + self.$push(", " + (tmp) + " = (" + (tmp) + " < " + (pre_splat.$size()) + ") ? " + (pre_splat.$size()) + " : " + (tmp)); + if ((($a = part = splat['$[]'](1)) !== nil && (!$a.$$is_boolean || $a == true))) { + part = part.$dup()['$<<'](self.$s("js_tmp", "$slice.call(" + (array) + ", " + (pre_splat.$size()) + ", " + (tmp) + ")")); + self.$push(", "); + self.$push(self.$expr(part));}; + ($a = ($d = post_splat).$each_with_index, $a.$$p = (TMP_3 = function(child, idx){var self = TMP_3.$$s || this; +if (child == null) child = nil;if (idx == null) idx = nil; + if (idx['$=='](0)) { + return self.$compile_assignment(child, array, tmp) + } else { + return self.$compile_assignment(child, array, "" + (tmp) + " + " + (idx)) + }}, TMP_3.$$s = self, TMP_3), $a).call($d); + return self.$scope().$queue_temp(tmp); + }; + }; + }); - return (def.$wrap_compiled = function(result) { - var self = this, path = nil; + return (Opal.defn(self, '$compile_assignment', function(child, array, idx, len) { + var $a, $b, self = this, assign = nil, part = nil, tmp = nil; - path = self.file_name.$sub((new RegExp("\\.opalerb" + $scope.get('REGEXP_END'))), ""); - return result = "Template.new('" + (path) + "') do |output_buffer|\noutput_buffer.append(\"" + (result) + "\")\noutput_buffer.join\nend\n"; - }, nil) && 'wrap_compiled'; - })(self, null); - })(self) - })(self); + if (len == null) { + len = nil + } + if ((($a = ((($b = len['$!']()) !== false && $b !== nil) ? $b : $rb_ge(idx, len))) !== nil && (!$a.$$is_boolean || $a == true))) { + assign = self.$s("js_tmp", "(" + (array) + "[" + (idx) + "] == null ? nil : " + (array) + "[" + (idx) + "])") + } else { + assign = self.$s("js_tmp", "" + (array) + "[" + (idx) + "]") + }; + part = child.$dup(); + if ((($a = $scope.get('SIMPLE_ASSIGNMENT')['$include?'](child.$type())) !== nil && (!$a.$$is_boolean || $a == true))) { + part['$<<'](assign) + } else if (child.$type()['$==']("call")) { + part['$[]='](2, ((("") + (part['$[]'](2))) + "=").$to_sym()); + part.$last()['$<<'](assign); + } else if (child.$type()['$==']("attrasgn")) { + part.$last()['$<<'](assign) + } else if (child.$type()['$==']("array")) { + tmp = self.$scope().$new_temp(); + self.$push(", (" + (tmp) + " = Opal.to_ary(" + (assign['$[]'](1)) + ")"); + self.$compile_masgn(child.$children(), tmp); + self.$push(")"); + self.$scope().$queue_temp(tmp); + return nil; + } else { + self.$raise("Bad child node in masgn LHS: " + (child) + ". LHS: " + (self.$lhs())) + }; + self.$push(", "); + return self.$push(self.$expr(part)); + }), nil) && 'compile_assignment'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); }; -/* Generated by Opal 0.8.0 */ -Opal.modules["encoding"] = function(Opal) { +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes/arglist"] = function(Opal) { Opal.dynamic_require_severity = "error"; - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - var $a, $b, TMP_4, $c, TMP_6, $d, TMP_8, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $hash2 = Opal.hash2; - - Opal.add_stubs(['$require', '$[]', '$new', '$to_proc', '$each', '$const_set', '$sub', '$upcase', '$===', '$const_get', '$==', '$name', '$include?', '$names', '$constants', '$raise', '$attr_accessor', '$attr_reader', '$register', '$length', '$bytes', '$to_a', '$each_byte', '$bytesize', '$enum_for', '$find', '$getbyte']); - self.$require("corelib/string"); - (function($base, $super) { - function $Encoding(){}; - var self = $Encoding = $klass($base, $super, 'Encoding', $Encoding); - - var def = self.$$proto, $scope = self.$$scope, TMP_1; - - def.ascii = def.dummy = def.name = nil; - Opal.defs(self, '$register', TMP_1 = function(name, options) { - var $a, $b, $c, TMP_2, self = this, $iter = TMP_1.$$p, block = $iter || nil, names = nil, encoding = nil; - - if (options == null) { - options = $hash2([], {}) - } - TMP_1.$$p = null; - names = $rb_plus([name], (((($a = options['$[]']("aliases")) !== false && $a !== nil) ? $a : []))); - encoding = ($a = ($b = $scope.get('Class')).$new, $a.$$p = block.$to_proc(), $a).call($b, self).$new(name, names, ((($a = options['$[]']("ascii")) !== false && $a !== nil) ? $a : false), ((($a = options['$[]']("dummy")) !== false && $a !== nil) ? $a : false)); - return ($a = ($c = names).$each, $a.$$p = (TMP_2 = function(name){var self = TMP_2.$$s || this; -if (name == null) name = nil; - return self.$const_set(name.$sub("-", "_"), encoding)}, TMP_2.$$s = self, TMP_2), $a).call($c); - }); - - Opal.defs(self, '$find', function(name) {try { - - var $a, $b, TMP_3, self = this, upcase_name = nil; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; - upcase_name = name.$upcase(); - if ((($a = self['$==='](upcase_name)) !== nil && (!$a.$$is_boolean || $a == true))) { - return upcase_name}; - ($a = ($b = self.$constants()).$each, $a.$$p = (TMP_3 = function(const$){var self = TMP_3.$$s || this, $a, $b, encoding = nil; -if (const$ == null) const$ = nil; - encoding = self.$const_get(const$); - if ((($a = ((($b = encoding.$name()['$=='](upcase_name)) !== false && $b !== nil) ? $b : encoding.$names()['$include?'](upcase_name))) !== nil && (!$a.$$is_boolean || $a == true))) { - Opal.ret(encoding) - } else { - return nil - };}, TMP_3.$$s = self, TMP_3), $a).call($b); - return self.$raise($scope.get('ArgumentError'), "unknown encoding name - " + (name)); - } catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; } - }); + Opal.add_stubs(['$require', '$handle', '$each', '$==', '$first', '$expr', '$empty?', '$<<', '$fragment', '$children', '$push']); + self.$require("opal/nodes/base"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - (function(self) { - var $scope = self.$$scope, def = self.$$proto; + var def = self.$$proto, $scope = self.$$scope; - return self.$attr_accessor("default_external") - })(self.$singleton_class()); + (function($base) { + var $Nodes, self = $Nodes = $module($base, 'Nodes'); - self.$attr_reader("name", "names"); + var def = self.$$proto, $scope = self.$$scope; - def.$initialize = function(name, names, ascii, dummy) { - var self = this; + (function($base, $super) { + function $ArglistNode(){}; + var self = $ArglistNode = $klass($base, $super, 'ArglistNode', $ArglistNode); - self.name = name; - self.names = names; - self.ascii = ascii; - return self.dummy = dummy; - }; + var def = self.$$proto, $scope = self.$$scope; - def['$ascii_compatible?'] = function() { - var self = this; + self.$handle("arglist"); - return self.ascii; - }; + return (Opal.defn(self, '$compile', function() { + var $a, $b, TMP_1, self = this, code = nil, work = nil, join = nil; - def['$dummy?'] = function() { - var self = this; + $a = [[], []], code = $a[0], work = $a[1], $a; + ($a = ($b = self.$children()).$each, $a.$$p = (TMP_1 = function(current){var self = TMP_1.$$s || this, $a, splat = nil, arg = nil; +if (current == null) current = nil; + splat = current.$first()['$==']("splat"); + arg = self.$expr(current); + if (splat !== false && splat !== nil) { + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code['$<<'](arg) + } else { + code['$<<'](self.$fragment(".concat("))['$<<'](arg)['$<<'](self.$fragment(")")) + } + } else { + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code['$<<'](self.$fragment("["))['$<<'](work)['$<<'](self.$fragment("]")) + } else { + code['$<<'](self.$fragment(".concat(["))['$<<'](work)['$<<'](self.$fragment("])")) + }; + code['$<<'](self.$fragment(".concat("))['$<<'](arg)['$<<'](self.$fragment(")")); + }; + return work = []; + } else { + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + work['$<<'](self.$fragment(", ")) + }; + return work['$<<'](arg); + };}, TMP_1.$$s = self, TMP_1), $a).call($b); + if ((($a = work['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + join = work; + if ((($a = code['$empty?']()) !== nil && (!$a.$$is_boolean || $a == true))) { + code = join + } else { + code['$<<'](self.$fragment(".concat("))['$<<'](join)['$<<'](self.$fragment(")")) + }; + }; + return ($a = self).$push.apply($a, Opal.to_a(code)); + }), nil) && 'compile'; + })($scope.base, $scope.get('Base')) + })($scope.base) + })($scope.base); +}; - return self.dummy; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/nodes"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; - def.$to_s = function() { - var self = this; + Opal.add_stubs(['$require']); + self.$require("opal/nodes/base"); + self.$require("opal/nodes/literal"); + self.$require("opal/nodes/variables"); + self.$require("opal/nodes/constants"); + self.$require("opal/nodes/call"); + self.$require("opal/nodes/call_special"); + self.$require("opal/nodes/module"); + self.$require("opal/nodes/class"); + self.$require("opal/nodes/singleton_class"); + self.$require("opal/nodes/iter"); + self.$require("opal/nodes/def"); + self.$require("opal/nodes/if"); + self.$require("opal/nodes/logic"); + self.$require("opal/nodes/definitions"); + self.$require("opal/nodes/yield"); + self.$require("opal/nodes/rescue"); + self.$require("opal/nodes/case"); + self.$require("opal/nodes/super"); + self.$require("opal/nodes/top"); + self.$require("opal/nodes/while"); + self.$require("opal/nodes/for"); + self.$require("opal/nodes/hash"); + self.$require("opal/nodes/array"); + self.$require("opal/nodes/defined"); + self.$require("opal/nodes/masgn"); + return self.$require("opal/nodes/arglist"); +}; - return self.name; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/compiler"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + function $rb_gt(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2, $klass = Opal.klass; - def.$inspect = function() { - var $a, self = this; + Opal.add_stubs(['$require', '$compile', '$new', '$[]', '$define_method', '$fetch', '$!', '$include?', '$raise', '$+', '$inspect', '$compiler_option', '$attr_reader', '$attr_accessor', '$s', '$parse', '$file', '$eof_content', '$lexer', '$flatten', '$process', '$join', '$map', '$to_proc', '$message', '$class', '$backtrace', '$warn', '$<<', '$helpers', '$new_temp', '$queue_temp', '$push_while', '$pop_while', '$in_while?', '$==', '$fragment', '$handlers', '$type', '$compile_to_fragments', '$returns', '$===', '$pop', '$[]=', '$>', '$length', '$=~', '$tap', '$source=', '$source', '$uses_block!', '$block_name', '$find_parent_def']); + self.$require("set"); + self.$require("opal/parser"); + self.$require("opal/fragment"); + self.$require("opal/nodes"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - return "#"; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$each_byte = function() { + Opal.defs(self, '$compile', function(source, options) { var self = this; - return self.$raise($scope.get('NotImplementedError')); - }; + if (options == null) { + options = $hash2([], {}) + } + return $scope.get('Compiler').$new(source, options).$compile(); + }); - def.$getbyte = function() { - var self = this; + (function($base, $super) { + function $Compiler(){}; + var self = $Compiler = $klass($base, $super, 'Compiler', $Compiler); - return self.$raise($scope.get('NotImplementedError')); - }; + var def = self.$$proto, $scope = self.$$scope, TMP_3, TMP_4, TMP_5, TMP_6; - def.$bytesize = function() { - var self = this; + def.parser = def.source = def.sexp = def.fragments = def.helpers = def.operator_helpers = def.method_calls = def.indent = def.unique = def.scope = def.case_stmt = def.handlers = def.requires = def.required_trees = nil; + Opal.cdecl($scope, 'INDENT', " "); - return self.$raise($scope.get('NotImplementedError')); - }; + Opal.cdecl($scope, 'COMPARE', ["<", ">", "<=", ">="]); - (function($base, $super) { - function $EncodingError(){}; - var self = $EncodingError = $klass($base, $super, 'EncodingError', $EncodingError); + Opal.defs(self, '$compiler_option', function(name, default_value, options) { + var $a, $b, TMP_1, $c, self = this, mid = nil, valid_values = nil; - var def = self.$$proto, $scope = self.$$scope; + if (options == null) { + options = $hash2([], {}) + } + mid = options['$[]']("as"); + valid_values = options['$[]']("valid_values"); + return ($a = ($b = self).$define_method, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, $b, TMP_2, $c, value = nil; + if (self.options == null) self.options = nil; - return nil; - })(self, $scope.get('StandardError')); + value = ($a = ($b = self.options).$fetch, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this; - return (function($base, $super) { - function $CompatibilityError(){}; - var self = $CompatibilityError = $klass($base, $super, 'CompatibilityError', $CompatibilityError); + return default_value}, TMP_2.$$s = self, TMP_2), $a).call($b, name); + if ((($a = (($c = valid_values !== false && valid_values !== nil) ? (valid_values['$include?'](value))['$!']() : valid_values)) !== nil && (!$a.$$is_boolean || $a == true))) { + self.$raise($scope.get('ArgumentError'), $rb_plus("invalid value " + (value.$inspect()) + " for option " + (name.$inspect()) + " ", "(valid values: " + (valid_values.$inspect()) + ")"))}; + return value;}, TMP_1.$$s = self, TMP_1), $a).call($b, ((($c = mid) !== false && $c !== nil) ? $c : name)); + }); - var def = self.$$proto, $scope = self.$$scope; + self.$compiler_option("file", "(file)"); - return nil; - })(self, $scope.get('EncodingError')); - })(self, null); - ($a = ($b = $scope.get('Encoding')).$register, $a.$$p = (TMP_4 = function(){var self = TMP_4.$$s || this, TMP_5; + self.$compiler_option("method_missing", true, $hash2(["as"], {"as": "method_missing?"})); - Opal.defn(self, '$each_byte', TMP_5 = function(string) { - var $a, self = this, $iter = TMP_5.$$p, block = $iter || nil; + self.$compiler_option("arity_check", false, $hash2(["as"], {"as": "arity_check?"})); - TMP_5.$$p = null; - - for (var i = 0, length = string.length; i < length; i++) { - var code = string.charCodeAt(i); + self.$compiler_option("freezing", true, $hash2(["as"], {"as": "freezing?"})); - if (code <= 0x7f) { - ((($a = Opal.yield1(block, code)) === $breaker) ? $breaker.$v : $a); - } - else { - var encoded = encodeURIComponent(string.charAt(i)).substr(1).split('%'); + self.$compiler_option("tainting", true, $hash2(["as"], {"as": "tainting?"})); - for (var j = 0, encoded_length = encoded.length; j < encoded_length; j++) { - ((($a = Opal.yield1(block, parseInt(encoded[j], 16))) === $breaker) ? $breaker.$v : $a); - } - } - } - - }); - return (Opal.defn(self, '$bytesize', function() { - var self = this; + self.$compiler_option("irb", false, $hash2(["as"], {"as": "irb?"})); - return self.$bytes().$length(); - }), nil) && 'bytesize';}, TMP_4.$$s = self, TMP_4), $a).call($b, "UTF-8", $hash2(["aliases", "ascii"], {"aliases": ["CP65001"], "ascii": true})); - ($a = ($c = $scope.get('Encoding')).$register, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this, TMP_7; + self.$compiler_option("dynamic_require_severity", "error", $hash2(["valid_values"], {"valid_values": ["error", "warning", "ignore"]})); - Opal.defn(self, '$each_byte', TMP_7 = function(string) { - var $a, self = this, $iter = TMP_7.$$p, block = $iter || nil; + self.$compiler_option("requirable", false, $hash2(["as"], {"as": "requirable?"})); - TMP_7.$$p = null; - - for (var i = 0, length = string.length; i < length; i++) { - var code = string.charCodeAt(i); + self.$compiler_option("inline_operators", true, $hash2(["as"], {"as": "inline_operators?"})); - ((($a = Opal.yield1(block, code & 0xff)) === $breaker) ? $breaker.$v : $a); - ((($a = Opal.yield1(block, code >> 8)) === $breaker) ? $breaker.$v : $a); - } - - }); - return (Opal.defn(self, '$bytesize', function() { - var self = this; + self.$compiler_option("eval", false, $hash2(["as"], {"as": "eval?"})); - return self.$bytes().$length(); - }), nil) && 'bytesize';}, TMP_6.$$s = self, TMP_6), $a).call($c, "UTF-16LE"); - ($a = ($d = $scope.get('Encoding')).$register, $a.$$p = (TMP_8 = function(){var self = TMP_8.$$s || this, TMP_9; + self.$attr_reader("result"); - Opal.defn(self, '$each_byte', TMP_9 = function(string) { - var $a, self = this, $iter = TMP_9.$$p, block = $iter || nil; + self.$attr_reader("fragments"); - TMP_9.$$p = null; - - for (var i = 0, length = string.length; i < length; i++) { - ((($a = Opal.yield1(block, string.charCodeAt(i) & 0xff)) === $breaker) ? $breaker.$v : $a); - } - - }); - return (Opal.defn(self, '$bytesize', function() { - var self = this; + self.$attr_accessor("scope"); - return self.$bytes().$length(); - }), nil) && 'bytesize';}, TMP_8.$$s = self, TMP_8), $a).call($d, "ASCII-8BIT", $hash2(["aliases", "ascii"], {"aliases": ["BINARY"], "ascii": true})); - return (function($base, $super) { - function $String(){}; - var self = $String = $klass($base, $super, 'String', $String); + self.$attr_reader("case_stmt"); - var def = self.$$proto, $scope = self.$$scope, TMP_10; + self.$attr_reader("eof_content"); - def.encoding = nil; - def.encoding = (($scope.get('Encoding')).$$scope.get('UTF_16LE')); + Opal.defn(self, '$initialize', function(source, options) { + var self = this; - def.$bytes = function() { - var self = this; + if (options == null) { + options = $hash2([], {}) + } + self.source = source; + self.indent = ""; + self.unique = 0; + return self.options = options; + }); - return self.$each_byte().$to_a(); - }; + Opal.defn(self, '$compile', function() { + var $a, $b, self = this, error = nil, message = nil; - def.$bytesize = function() { - var self = this; + try { + self.parser = $scope.get('Parser').$new(); + self.sexp = self.$s("top", ((($a = self.parser.$parse(self.source, self.$file())) !== false && $a !== nil) ? $a : self.$s("nil"))); + self.eof_content = self.parser.$lexer().$eof_content(); + self.fragments = self.$process(self.sexp).$flatten(); + return self.result = ($a = ($b = self.fragments).$map, $a.$$p = "code".$to_proc(), $a).call($b).$join(""); + } catch ($err) {if (true) {error = $err; + try { + message = "An error occurred while compiling: " + (self.$file()) + "\n" + (error.$message()); + return self.$raise(error.$class(), message, error.$backtrace()); + } finally { + Opal.gvars["!"] = Opal.exceptions.pop() || Opal.nil; + } + }else { throw $err; } + }; + }); - return self.encoding.$bytesize(self); - }; + Opal.defn(self, '$source_map', function(source_file) { + var $a, self = this; - def.$each_byte = TMP_10 = function() { - var $a, $b, self = this, $iter = TMP_10.$$p, block = $iter || nil; + if (source_file == null) { + source_file = nil + } + return (($scope.get('Opal')).$$scope.get('SourceMap')).$new(self.fragments, ((($a = source_file) !== false && $a !== nil) ? $a : self.$file())); + }); - TMP_10.$$p = null; - if ((block !== nil)) { - } else { - return self.$enum_for("each_byte") - }; - ($a = ($b = self.encoding).$each_byte, $a.$$p = block.$to_proc(), $a).call($b, self); - return self; - }; + Opal.defn(self, '$helpers', function() { + var $a, self = this; - def.$encoding = function() { - var self = this; + return ((($a = self.helpers) !== false && $a !== nil) ? $a : self.helpers = $scope.get('Set').$new(["breaker", "slice"])); + }); - return self.encoding; - }; + Opal.defn(self, '$operator_helpers', function() { + var $a, self = this; - def.$force_encoding = function(encoding) { - var self = this; + return ((($a = self.operator_helpers) !== false && $a !== nil) ? $a : self.operator_helpers = $scope.get('Set').$new()); + }); - encoding = $scope.get('Encoding').$find(encoding); - if (encoding['$=='](self.encoding)) { - return self}; - - var result = new String(self); - result.encoding = encoding; + Opal.defn(self, '$method_calls', function() { + var $a, self = this; - return result; - - }; + return ((($a = self.method_calls) !== false && $a !== nil) ? $a : self.method_calls = $scope.get('Set').$new()); + }); - return (def.$getbyte = function(idx) { - var self = this; + Opal.defn(self, '$error', function(msg, line) { + var self = this; - return self.encoding.$getbyte(self, idx); - }, nil) && 'getbyte'; - })(self, null); -}; + if (line == null) { + line = nil + } + return self.$raise($scope.get('SyntaxError'), "" + (msg) + " :" + (self.$file()) + ":" + (line)); + }); -/* Generated by Opal 0.8.0 */ -Opal.modules["opal-parser"] = function(Opal) { - Opal.dynamic_require_severity = "error"; - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2; + Opal.defn(self, '$warning', function(msg, line) { + var self = this; - Opal.add_stubs(['$require', '$compile', '$eval']); - self.$require("opal/compiler"); - self.$require("opal/erb"); - self.$require("opal/version"); - self.$require("encoding"); - (function($base) { - var self = $module($base, 'Kernel'); + if (line == null) { + line = nil + } + return self.$warn("WARNING: " + (msg) + " -- " + (self.$file()) + ":" + (line)); + }); - var def = self.$$proto, $scope = self.$$scope; + Opal.defn(self, '$parser_indent', function() { + var self = this; - Opal.defn(self, '$eval', function(str) { - var self = this, code = nil; + return self.indent; + }); - code = $scope.get('Opal').$compile(str, $hash2(["file"], {"file": "(eval)"})); - return eval(code); - }); + Opal.defn(self, '$s', function() { + var self = this, $splat_index = nil; - Opal.defn(self, '$require_remote', function(url) { - var self = this; + var array_size = arguments.length - 0; + if(array_size < 0) array_size = 0; + var parts = new Array(array_size); + for($splat_index = 0; $splat_index < array_size; $splat_index++) { + parts[$splat_index] = arguments[$splat_index + 0]; + } + return $scope.get('Sexp').$new(parts); + }); - - var r = new XMLHttpRequest(); - r.open("GET", url, false); - r.send(''); - - return self.$eval(r.responseText); - }); - })(self); - - Opal.compile = function(str, options) { - if (options) { - options = Opal.hash(options); - } - return Opal.Opal.$compile(str, options); - }; + Opal.defn(self, '$fragment', function(str, sexp) { + var self = this; - Opal.eval = function(str, options) { - return eval(Opal.compile(str, options)); - }; + if (sexp == null) { + sexp = nil + } + return $scope.get('Fragment').$new(str, sexp); + }); - function run_ruby_scripts() { - var tag, tags = document.getElementsByTagName('script'); + Opal.defn(self, '$unique_temp', function() { + var self = this; - for (var i = 0, len = tags.length; i < len; i++) { - tag = tags[i]; - if (tag.type === "text/ruby") { - if (tag.src) Opal.Kernel.$require_remote(tag.src); - if (tag.innerHTML) Opal.Kernel.$eval(tag.innerHTML); - } - } - } + return "TMP_" + (self.unique = $rb_plus(self.unique, 1)); + }); + + Opal.defn(self, '$helper', function(name) { + var self = this; - if (typeof(document) !== 'undefined') { - if (window.addEventListener) { - window.addEventListener('DOMContentLoaded', run_ruby_scripts, false); - } - else { - window.attachEvent('onload', run_ruby_scripts); - } - } + return self.$helpers()['$<<'](name); + }); -}; + Opal.defn(self, '$indent', TMP_3 = function() { + var $a, self = this, $iter = TMP_3.$$p, block = $iter || nil, indent = nil, res = nil; -/* Generated by Opal 0.8.0 */ -(function(Opal) { - Opal.dynamic_require_severity = "error"; - function $rb_lt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs < rhs : lhs['$<'](rhs); - } - function $rb_plus(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); - } - function $rb_gt(lhs, rhs) { - return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs > rhs : lhs['$>'](rhs); - } - var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass; + TMP_3.$$p = null; + indent = self.indent; + self.indent = $rb_plus(self.indent, $scope.get('INDENT')); + self.space = "\n" + (self.indent); + res = ((($a = Opal.yieldX(block, [])) === $breaker) ? $breaker.$v : $a); + self.indent = indent; + self.space = "\n" + (self.indent); + return res; + }); - Opal.add_stubs(['$require', '$each', '$<<', '$-@', '$loop', '$&', '$>>', '$|', '$[]', '$join', '$attr_reader', '$anchor', '$scan_until', '$length', '$size', '$rest', '$pos=', '$private']); - self.$require("opal"); - self.$require("opal-source-maps"); - self.$require("opal-parser"); - (function($base) { - var self = $module($base, 'SourceMap'); + Opal.defn(self, '$with_temp', TMP_4 = function() { + var $a, self = this, $iter = TMP_4.$$p, block = $iter || nil, tmp = nil, res = nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_4.$$p = null; + tmp = self.scope.$new_temp(); + res = ((($a = Opal.yield1(block, tmp)) === $breaker) ? $breaker.$v : $a); + self.scope.$queue_temp(tmp); + return res; + }); - (function($base) { - var self = $module($base, 'VLQ'); + Opal.defn(self, '$in_while', TMP_5 = function() { + var $a, self = this, $iter = TMP_5.$$p, $yield = $iter || nil, result = nil; - var def = self.$$proto, $scope = self.$$scope; + TMP_5.$$p = null; + if (($yield !== nil)) { + } else { + return nil + }; + self.while_loop = self.scope.$push_while(); + result = ((($a = Opal.yieldX($yield, [])) === $breaker) ? $breaker.$v : $a); + self.scope.$pop_while(); + return result; + }); - Opal.defs(self, '$encode', function(ary) { - var $a, $b, TMP_1, self = this, result = nil; + Opal.defn(self, '$in_case', TMP_6 = function() { + var self = this, $iter = TMP_6.$$p, $yield = $iter || nil, old = nil; - result = []; - ($a = ($b = ary).$each, $a.$$p = (TMP_1 = function(n){var self = TMP_1.$$s || this, $a, $b, TMP_2, vlq = nil; -if (n == null) n = nil; - vlq = (function() {if ($rb_lt(n, 0)) { - return $rb_plus(((n['$-@']())['$<<'](1)), 1) - } else { - return n['$<<'](1) - }; return nil; })(); - return ($a = ($b = self).$loop, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, digit = nil; + TMP_6.$$p = null; + if (($yield !== nil)) { + } else { + return nil + }; + old = self.case_stmt; + self.case_stmt = $hash2([], {}); + if (Opal.yieldX($yield, []) === $breaker) return $breaker.$v; + return self.case_stmt = old; + }); - digit = vlq['$&']($scope.get('VLQ_BASE_MASK')); - vlq = vlq['$>>']($scope.get('VLQ_BASE_SHIFT')); - if ($rb_gt(vlq, 0)) { - digit = digit['$|']($scope.get('VLQ_CONTINUATION_BIT'))}; - result['$<<']($scope.get('BASE64_DIGITS')['$[]'](digit)); - if ($rb_gt(vlq, 0)) { - return nil - } else { - return ($breaker.$v = nil, $breaker) - };}, TMP_2.$$s = self, TMP_2), $a).call($b);}, TMP_1.$$s = self, TMP_1), $a).call($b); - return result.$join(); - }) - })(self) - })(self); - return (function($base, $super) { - function $StringScanner(){}; - var self = $StringScanner = $klass($base, $super, 'StringScanner', $StringScanner); + Opal.defn(self, '$in_while?', function() { + var self = this; - var def = self.$$proto, $scope = self.$$scope; + return self.scope['$in_while?'](); + }); - def.pos = def.string = def.working = def.matched = def.prev_pos = def.match = nil; - self.$attr_reader("pos"); + Opal.defn(self, '$process', function(sexp, level) { + var $a, self = this, handler = nil; - self.$attr_reader("matched"); + if (level == null) { + level = "expr" + } + if (sexp['$=='](nil)) { + return self.$fragment("")}; + if ((($a = handler = self.$handlers()['$[]'](sexp.$type())) !== nil && (!$a.$$is_boolean || $a == true))) { + return handler.$new(sexp, level, self).$compile_to_fragments() + } else { + return self.$raise("Unsupported sexp: " + (sexp.$type())) + }; + }); - def.$initialize = function(string) { - var self = this; + Opal.defn(self, '$handlers', function() { + var $a, self = this; - self.string = string; - self.pos = 0; - self.matched = nil; - self.working = string; - return self.match = []; - }; + return ((($a = self.handlers) !== false && $a !== nil) ? $a : self.handlers = (((($scope.get('Opal')).$$scope.get('Nodes'))).$$scope.get('Base')).$handlers()); + }); - self.$attr_reader("string"); + Opal.defn(self, '$requires', function() { + var $a, self = this; - def['$beginning_of_line?'] = function() { - var self = this; + return ((($a = self.requires) !== false && $a !== nil) ? $a : self.requires = []); + }); - return self.pos === 0 || self.string.charAt(self.pos - 1) === "\n"; - }; + Opal.defn(self, '$required_trees', function() { + var $a, self = this; - Opal.defn(self, '$bol?', def['$beginning_of_line?']); + return ((($a = self.required_trees) !== false && $a !== nil) ? $a : self.required_trees = []); + }); - def.$scan = function(pattern) { - var self = this; + Opal.defn(self, '$returns', function(sexp) { + var $a, $b, TMP_7, self = this, $case = nil, last = nil; - pattern = self.$anchor(pattern); - - var result = pattern.exec(self.working); - if (result == null) { - return self.matched = nil; - } - else if (typeof(result) === 'object') { - self.prev_pos = self.pos; - self.pos += result[0].length; - self.working = self.working.substring(result[0].length); - self.matched = result[0]; - self.match = result; - return result[0]; - } - else if (typeof(result) === 'string') { - self.pos += result.length; - self.working = self.working.substring(result.length); - return result; - } - else { - return nil; - } - ; - }; + if (sexp !== false && sexp !== nil) { + } else { + return self.$returns(self.$s("nil")) + }; + return (function() {$case = sexp.$type();if ("undef"['$===']($case)) {last = sexp.$pop(); + return sexp['$<<'](self.$returns(last));}else if ("break"['$===']($case) || "next"['$===']($case) || "redo"['$===']($case)) {return sexp}else if ("yield"['$===']($case)) {sexp['$[]='](0, "returnable_yield"); + return sexp;}else if ("scope"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); + return sexp;}else if ("block"['$===']($case)) {if ((($a = $rb_gt(sexp.$length(), 1)) !== nil && (!$a.$$is_boolean || $a == true))) { + sexp['$[]='](-1, self.$returns(sexp['$[]'](-1))) + } else { + sexp['$<<'](self.$returns(self.$s("nil"))) + }; + return sexp;}else if ("when"['$===']($case)) {sexp['$[]='](2, self.$returns(sexp['$[]'](2))); + return sexp;}else if ("rescue"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); + if ((($a = ($b = sexp['$[]'](2), $b !== false && $b !== nil ?sexp['$[]'](2)['$[]'](0)['$==']("resbody") : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + if ((($a = sexp['$[]'](2)['$[]'](2)) !== nil && (!$a.$$is_boolean || $a == true))) { + sexp['$[]'](2)['$[]='](2, self.$returns(sexp['$[]'](2)['$[]'](2))) + } else { + sexp['$[]'](2)['$[]='](2, self.$returns(self.$s("nil"))) + }}; + return sexp;}else if ("ensure"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); + return sexp;}else if ("begin"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); + return sexp;}else if ("rescue_mod"['$===']($case)) {sexp['$[]='](1, self.$returns(sexp['$[]'](1))); + sexp['$[]='](2, self.$returns(sexp['$[]'](2))); + return sexp;}else if ("while"['$===']($case)) {return sexp}else if ("return"['$===']($case) || "js_return"['$===']($case)) {return sexp}else if ("xstr"['$===']($case)) {if ((($a = /return|;/['$=~'](sexp['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + sexp['$[]='](1, "return " + (sexp['$[]'](1)) + ";") + }; + return sexp;}else if ("dxstr"['$===']($case)) {if ((($a = /return|;|\n/['$=~'](sexp['$[]'](1))) !== nil && (!$a.$$is_boolean || $a == true))) { + } else { + sexp['$[]='](1, "return " + (sexp['$[]'](1))) + }; + return sexp;}else if ("if"['$===']($case)) {sexp['$[]='](2, self.$returns(((($a = sexp['$[]'](2)) !== false && $a !== nil) ? $a : self.$s("nil")))); + sexp['$[]='](3, self.$returns(((($a = sexp['$[]'](3)) !== false && $a !== nil) ? $a : self.$s("nil")))); + return sexp;}else {return ($a = ($b = self.$s("js_return", sexp)).$tap, $a.$$p = (TMP_7 = function(s){var self = TMP_7.$$s || this, $a, $b; +if (s == null) s = nil; + return (($a = [sexp.$source()]), $b = s, $b['$source='].apply($b, $a), $a[$a.length-1])}, TMP_7.$$s = self, TMP_7), $a).call($b)}})(); + }); - def.$scan_until = function(pattern) { - var self = this; + return (Opal.defn(self, '$handle_block_given_call', function(sexp) { + var $a, $b, self = this, scope = nil; - pattern = self.$anchor(pattern); - - var pos = self.pos, - working = self.working, - result; - while (true) { - result = pattern.exec(working); - pos += 1; - working = working.substr(1); - if (result == null) { - if (working.length === 0) { - return self.matched = nil; - } - continue; - } - self.matched = self.string.substr(self.pos, pos - self.pos - 1 + result[0].length); - self.prev_pos = pos - 1; - self.pos = pos; - self.working = working.substr(result[0].length); - return self.matched; - } - ; - }; + self.scope['$uses_block!'](); + if ((($a = self.scope.$block_name()) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$fragment("(" + (self.scope.$block_name()) + " !== nil)", sexp) + } else if ((($a = ($b = scope = self.scope.$find_parent_def(), $b !== false && $b !== nil ?scope.$block_name() : $b)) !== nil && (!$a.$$is_boolean || $a == true))) { + return self.$fragment("(" + (scope.$block_name()) + " !== nil)", sexp) + } else { + return self.$fragment("false", sexp) + }; + }), nil) && 'handle_block_given_call'; + })($scope.base, null); + })($scope.base); +}; - def['$[]'] = function(idx) { - var self = this; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal/erb"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + function $rb_plus(lhs, rhs) { + return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs); + } + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $klass = Opal.klass, $gvars = Opal.gvars; - - var match = self.match; - if (idx < 0) { - idx += match.length; - } - if (idx < 0 || idx >= match.length) { - return nil; - } - if (match[idx] == null) { - return nil; - } - return match[idx]; - ; - }; + Opal.add_stubs(['$require', '$compile', '$new', '$fix_quotes', '$find_contents', '$find_code', '$wrap_compiled', '$require_erb', '$prepared_source', '$gsub', '$+', '$=~', '$sub']); + self.$require("opal/compiler"); + return (function($base) { + var $Opal, self = $Opal = $module($base, 'Opal'); - def.$check = function(pattern) { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - pattern = self.$anchor(pattern); - - var result = pattern.exec(self.working); - if (result == null) { - return self.matched = nil; - } - return self.matched = result[0]; - ; - }; + (function($base) { + var $ERB, self = $ERB = $module($base, 'ERB'); + + var def = self.$$proto, $scope = self.$$scope; + + Opal.defs(self, '$compile', function(source, file_name) { + var self = this; - def.$check_until = function(pattern) { - var self = this; + if (file_name == null) { + file_name = "(erb)" + } + return $scope.get('Compiler').$new(source, file_name).$compile(); + }); - - var prev_pos = self.prev_pos, - pos = self.pos; - var result = self.$scan_until(pattern); - if (result !== nil) { - self.matched = result.substr(-1); - self.working = self.string.substr(pos); - } - self.prev_pos = prev_pos; - self.pos = pos; - return result; - ; - }; + (function($base, $super) { + function $Compiler(){}; + var self = $Compiler = $klass($base, $super, 'Compiler', $Compiler); - def.$peek = function(length) { - var self = this; + var def = self.$$proto, $scope = self.$$scope; - return self.working.substring(0, length); - }; + def.prepared_source = def.source = def.file_name = nil; + Opal.cdecl($scope, 'BLOCK_EXPR', /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/); - def['$eos?'] = function() { - var self = this; + Opal.defn(self, '$initialize', function(source, file_name) { + var $a, self = this; - return self.working.length === 0; - }; + if (file_name == null) { + file_name = "(erb)" + } + return $a = [source, file_name, source], self.source = $a[0], self.file_name = $a[1], self.result = $a[2], $a; + }); - def['$exist?'] = function(pattern) { - var self = this; + Opal.defn(self, '$prepared_source', function() { + var $a, self = this, source = nil; - - var result = pattern.exec(self.working); - if (result == null) { - return nil; - } - else if (result.index == 0) { - return 0; - } - else { - return result.index + 1; - } - ; - }; + return ((($a = self.prepared_source) !== false && $a !== nil) ? $a : self.prepared_source = (function() {source = self.source; + source = self.$fix_quotes(source); + source = self.$find_contents(source); + source = self.$find_code(source); + source = self.$wrap_compiled(source); + source = self.$require_erb(source); + return source;})()); + }); - def.$skip = function(pattern) { - var self = this; + Opal.defn(self, '$compile', function() { + var self = this; - pattern = self.$anchor(pattern); - - var result = pattern.exec(self.working); - if (result == null) { - return self.matched = nil; - } - else { - var match_str = result[0]; - var match_len = match_str.length; - self.matched = match_str; - self.prev_pos = self.pos; - self.pos += match_len; - self.working = self.working.substring(match_len); - return match_len; - } - ; - }; + return $scope.get('Opal').$compile(self.$prepared_source()); + }); - def.$skip_until = function(pattern) { - var self = this; + Opal.defn(self, '$fix_quotes', function(result) { + var self = this; - - var result = self.$scan_until(pattern); - if (result === nil) { - return nil; - } - else { - self.matched = result.substr(-1); - return result.length; - } - ; - }; + return result.$gsub("\"", "\\\""); + }); - def.$get_byte = function() { - var self = this; + Opal.defn(self, '$require_erb', function(result) { + var self = this; - - var result = nil; - if (self.pos < self.string.length) { - self.prev_pos = self.pos; - self.pos += 1; - result = self.matched = self.working.substring(0, 1); - self.working = self.working.substring(1); - } - else { - self.matched = nil; - } - return result; - ; - }; + return $rb_plus("require \"erb\";", result); + }); - Opal.defn(self, '$getch', def.$get_byte); + Opal.defn(self, '$find_contents', function(result) { + var $a, $b, TMP_1, self = this; - def['$match?'] = function(pattern) { - var self = this; + return ($a = ($b = result).$gsub, $a.$$p = (TMP_1 = function(){var self = TMP_1.$$s || this, $a, inner = nil; - pattern = self.$anchor(pattern); - - var result = pattern.exec(self.working); - if (result == null) { - return nil; - } - else { - self.prev_pos = self.pos; - return result[0].length; - } - ; - }; + inner = (($a = $gvars['~']) === nil ? nil : $a['$[]'](1)).$gsub(/\\'/, "'").$gsub(/\\"/, "\""); + if ((($a = inner['$=~']($scope.get('BLOCK_EXPR'))) !== nil && (!$a.$$is_boolean || $a == true))) { + return "\")\noutput_buffer.append= " + (inner) + "\noutput_buffer.append(\"" + } else { + return "\")\noutput_buffer.append=(" + (inner) + ")\noutput_buffer.append(\"" + };}, TMP_1.$$s = self, TMP_1), $a).call($b, /<%=([\s\S]+?)%>/); + }); - def['$pos='] = function(pos) { - var self = this; + Opal.defn(self, '$find_code', function(result) { + var $a, $b, TMP_2, self = this; - - if (pos < 0) { - pos += self.string.$length(); - } - ; - self.pos = pos; - return self.working = self.string.slice(pos); - }; + return ($a = ($b = result).$gsub, $a.$$p = (TMP_2 = function(){var self = TMP_2.$$s || this, $a, inner = nil; - def.$post_match = function() { - var self = this; + inner = (($a = $gvars['~']) === nil ? nil : $a['$[]'](1)).$gsub(/\\"/, "\""); + return "\")\n" + (inner) + "\noutput_buffer.append(\"";}, TMP_2.$$s = self, TMP_2), $a).call($b, /<%([\s\S]+?)%>/); + }); - - if (self.matched === nil) { - return nil; - } - return self.string.substr(self.pos); - ; - }; + return (Opal.defn(self, '$wrap_compiled', function(result) { + var self = this, path = nil; - def.$pre_match = function() { - var self = this; + path = self.file_name.$sub((new RegExp("\\.opalerb" + $scope.get('REGEXP_END'))), ""); + return result = "Template.new('" + (path) + "') do |output_buffer|\noutput_buffer.append(\"" + (result) + "\")\noutput_buffer.join\nend\n"; + }), nil) && 'wrap_compiled'; + })($scope.base, null); + })($scope.base) + })($scope.base); +}; - - if (self.matched === nil) { - return nil; - } - return self.string.substr(0, self.prev_pos); - ; - }; +/* Generated by Opal 0.9.2 */ +Opal.modules["opal-parser"] = function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module, $hash2 = Opal.hash2; - def.$reset = function() { - var self = this; + Opal.add_stubs(['$require', '$compile', '$eval']); + self.$require("opal/compiler"); + self.$require("opal/erb"); + self.$require("opal/version"); + (function($base) { + var $Kernel, self = $Kernel = $module($base, 'Kernel'); - self.working = self.string; - self.matched = nil; - return self.pos = 0; - }; + var def = self.$$proto, $scope = self.$$scope; - def.$rest = function() { - var self = this; + Opal.defn(self, '$eval', function(str) { + var self = this, code = nil; - return self.working; - }; + code = $scope.get('Opal').$compile(str, $hash2(["file"], {"file": "(eval)"})); + return eval(code); + }); - def['$rest?'] = function() { + Opal.defn(self, '$require_remote', function(url) { var self = this; - return self.working.length !== 0; - }; + + var r = new XMLHttpRequest(); + r.open("GET", url, false); + r.send(''); + + return self.$eval(r.responseText); + }); + })($scope.base); + + Opal.compile = function(str, options) { + if (options) { + options = Opal.hash(options); + } + return Opal.Opal.$compile(str, options); + }; - def.$rest_size = function() { - var self = this; + Opal['eval'] = function(str, options) { + return eval(Opal.compile(str, options)); + }; - return self.$rest().$size(); - }; + function run_ruby_scripts() { + var tag, tags = document.getElementsByTagName('script'); - def.$terminate = function() { - var $a, $b, self = this; + for (var i = 0, len = tags.length; i < len; i++) { + tag = tags[i]; + if (tag.type === "text/ruby") { + if (tag.src) Opal.Kernel.$require_remote(tag.src); + if (tag.innerHTML) Opal.Kernel.$eval(tag.innerHTML); + } + } + } - self.match = nil; - return (($a = [self.string.$length()]), $b = self, $b['$pos='].apply($b, $a), $a[$a.length-1]); - }; + if (typeof(document) !== 'undefined') { + if (window.addEventListener) { + window.addEventListener('DOMContentLoaded', run_ruby_scripts, false); + } + else { + window.attachEvent('onload', run_ruby_scripts); + } + } - def.$unscan = function() { - var self = this; +}; - self.pos = self.prev_pos; - self.prev_pos = nil; - self.match = nil; - return self; - }; +/* Generated by Opal 0.9.2 */ +(function(Opal) { + Opal.dynamic_require_severity = "error"; + var OPAL_CONFIG = { method_missing: true, arity_check: false, freezing: true, tainting: true }; + var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass; - self.$private(); + Opal.add_stubs(['$require']); + self.$require("opal"); + self.$require("opal-source-maps"); + self.$require("opal-parser"); + return (function($base, $super) { + function $Pathname(){}; + var self = $Pathname = $klass($base, $super, 'Pathname', $Pathname); + + var def = self.$$proto, $scope = self.$$scope; - return (def.$anchor = function(pattern) { + def.path = nil; + return (Opal.defn(self, '$cleanpath', function() { var self = this; - return new RegExp('^(?:' + pattern.toString().substr(1, pattern.toString().length - 2) + ')'); - }, nil) && 'anchor'; - })(self, null); + return self.path; + }), nil) && 'cleanpath' + })($scope.base, null); })(Opal);