Skip to content

Instantly share code, notes, and snippets.

@stoffie
Last active November 30, 2016 07:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stoffie/87aac8b3488040ec6342b37ed5daf000 to your computer and use it in GitHub Desktop.
Save stoffie/87aac8b3488040ec6342b37ed5daf000 to your computer and use it in GitHub Desktop.
(function(undefined) {
// @note
// A few conventions for the documentation of this file:
// 1. Always use "//" (in contrast with "/**/")
// 2. The syntax used is Yardoc (yardoc.org), which is intended for Ruby (se below)
// 3. `@param` and `@return` types should be preceded by `JS.` when referring to
// JavaScript constructors (e.g. `JS.Function`) otherwise Ruby is assumed.
// 4. `nil` and `null` being unambiguous refer to the respective
// objects/values in Ruby and JavaScript
// 5. This is still WIP :) so please give feedback and suggestions on how
// to improve or for alternative solutions
//
// The way the code is digested before going through Yardoc is a secret kept
// in the docs repo (https://github.com/opal/docs/tree/master).
if (typeof(this.Opal) !== 'undefined') {
console.warn('Opal already loaded. Loading twice can cause troubles, please fix your setup.');
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 bridges = {};
// TopScope is used for inheriting constants from the top scope
var TopScope = function(){};
// Opal just acts as the top scope
TopScope.prototype = Opal;
// To inherit scopes
Opal.constructor = TopScope;
// List top scope constants
Opal.constants = [];
// This is a useful reference to global object inside ruby files
Opal.global = this;
// Configure runtime behavior with regards to require and unsupported fearures
Opal.config = {
missing_require_severity: 'error', // error, warning, ignore
unsupported_features_severity: 'warning' // error, warning, ignore
}
// Minify common function calls
var $hasOwn = Opal.hasOwnProperty;
var $slice = Opal.slice = Array.prototype.slice;
// Nil object id is always 4
var nil_id = 4;
// Generates even sequential numbers greater than 4
// (nil_id) to serve as unique ids for ruby objects
var unique_id = nil_id;
// Return next unique id
Opal.uid = function() {
unique_id += 2;
return unique_id;
};
// Table holds all class variables
Opal.cvars = {};
// Globals table
Opal.gvars = {};
// Exit function, this should be replaced by platform specific implementation
// (See nodejs and phantom for examples)
Opal.exit = function(status) { if (Opal.gvars.DEBUG) console.log('Exited with status '+status); };
// keeps track of exceptions for $!
Opal.exceptions = [];
// @private
// Pops an exception from the stack and updates `$!`.
Opal.pop_exception = function() {
Opal.gvars["!"] = Opal.exceptions.pop() || nil;
}
// Constants
// ---------
// 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 name [String] the name of the constant to lookup
// @return [Object]
//
Opal.get = function(name) {
var constant = this[name];
if (constant == null) {
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.
//
// @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_scope.constructor();
klass.$$scope = const_scope;
klass.$$base_module = base_scope.base;
const_scope.base = klass;
const_scope.constructor = const_alloc;
const_scope.constants = [];
if (id) {
Opal.cdecl(base_scope, id, klass);
const_alloc.displayName = id+"_scope_alloc";
}
};
// 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) {
function update(klass, name) {
klass.$$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)
}
}
}
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);
scope[name] = value;
// If we dynamically declare a constant in a module,
// we should populate all the classes that include this module
// with the same constant
if (base_module.$$is_module && base_module.$$dep) {
for (var i = 0; i < base_module.$$dep.length; i++) {
var dep = base_module.$$dep[i];
Opal.casgn(dep, name, value);
}
}
return value;
};
// Constant declaration
//
// @example
// FOO = :bar
//
// @param base_scope [$$scope] the current scope
// @param name [String] the name of the constant
// @param value [Object] the value of the constant
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;
// Here we should explicitly set a base module
// (a module where the constant was initially defined)
value.$$base_module = base_scope.base;
base_scope.constructor[name] = value;
}
base_scope.constants.push(name);
return base_scope[name] = value;
};
// Modules & Classes
// -----------------
// 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, `superclass` 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 superclass [Class,null] superclass of the new class (may be null)
// @param id [String] the name of the class to be created
// @param constructor [JS.Function] function to use as constructor
//
// @return new [Class] or existing ruby class
//
Opal.klass = function(base, superclass, name, constructor) {
var klass, bridged, alloc;
// If base is an object, use its class
if (!base.$$is_class && !base.$$is_module) {
base = base.$$class;
}
// If the superclass is a function then we're bridging a native JS class
if (typeof(superclass) === 'function') {
bridged = superclass;
superclass = _Object;
}
// Try to find the class in the current scope
klass = base.$$scope[name];
// 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(name + " is not a class");
}
// Make sure existing class has same superclass
if (superclass && klass.$$super !== superclass) {
throw Opal.TypeError.$new("superclass mismatch for class " + name);
}
return klass;
}
// Class doesnt exist, create a new one with given superclass...
// Not specifying a superclass means we can assume it to be Object
if (superclass == null) {
superclass = _Object;
}
// If bridged the JS class will also be the alloc function
alloc = bridged || Opal.boot_class_alloc(name, constructor, superclass);
// Create the class object (instance of Class)
klass = Opal.setup_class_object(name, alloc, superclass.$$name, superclass.constructor);
// @property $$super the superclass, doesn't get changed by module inclusions
klass.$$super = superclass;
// @property $$parent direct parent class
// starts with the superclass, after klass inclusion is
// the last included klass
klass.$$parent = superclass;
// Every class gets its own constant scope, inherited from current scope
Opal.create_scope(base.$$scope, klass, name);
// Name new class directly onto current scope (Opal.Foo.Baz = klass)
base[name] = klass;
if (bridged) {
Opal.bridge(klass, alloc);
}
else {
// Copy all parent constants to child, unless parent is Object
if (superclass !== _Object && superclass !== BasicObject) {
Opal.donate_constants(superclass, klass);
}
// Call .inherited() hook with new class on the superclass
if (superclass.$inherited) {
superclass.$inherited(klass);
}
}
return klass;
};
// Boot a base class (makes instances).
//
// @param name [String,null] the class name
// @param constructor [JS.Function] the class' instances constructor/alloc function
// @param superclass [Class,null] the superclass object
// @return [JS.Function] the consturctor holding the prototype for the class' instances
Opal.boot_class_alloc = function(name, constructor, superclass) {
if (superclass) {
var alloc_proxy = function() {};
alloc_proxy.prototype = superclass.$$proto || superclass.prototype;
constructor.prototype = new alloc_proxy();
}
if (name) {
constructor.displayName = name+'_alloc';
}
constructor.prototype.constructor = constructor;
return constructor;
};
// Adds common/required properties to class object (as in `Class.new`)
//
// @param name [String,null] The name of the class
//
// @param alloc [JS.Function] The constructor of the class' instances
//
// @param superclass_name [String,null]
// The name of the super class, this is
// usefule to build the `.displayName` of the singleton class
//
// @param superclass_alloc [JS.Function]
// The constructor of the superclass from which the singleton_class is
// derived.
//
// @return [Class]
Opal.setup_class_object = function(name, alloc, superclass_name, superclass_alloc) {
// Grab the superclass prototype and use it to build an intermediary object
// in the prototype chain.
var superclass_alloc_proxy = function() {};
superclass_alloc_proxy.prototype = superclass_alloc.prototype;
superclass_alloc_proxy.displayName = superclass_name;
var singleton_class_alloc = function() {}
singleton_class_alloc.prototype = new superclass_alloc_proxy();
// The built class is the only instance of its singleton_class
var klass = new singleton_class_alloc();
// @property $$alloc This is the constructor of instances of the current
// class. Its prototype will be used for method lookup
klass.$$alloc = alloc;
klass.$$name = name || nil;
// @property $$id Each class is assigned a unique `id` that helps
// comparation and implementation of `#object_id`
klass.$$id = Opal.uid();
// Set a displayName for the singleton_class
singleton_class_alloc.displayName = "#<Class:"+(name || ("#<Class:"+klass.$$id+">"))+">";
// @property $$proto This is the prototype on which methods will be defined
klass.$$proto = alloc.prototype;
// @property $$proto.$$class Make available to instances a reference to the
// class they belong to.
klass.$$proto.$$class = klass;
// @property constructor keeps a ref to the constructor, but apparently the
// constructor is already set on:
//
// `var klass = new constructor` is called.
//
// Maybe there are some browsers not abiding (IE6?)
klass.constructor = singleton_class_alloc;
// @property $$is_class Clearly mark this as a class
klass.$$is_class = true;
// @property $$class Classes are instances of the class Class
klass.$$class = Class;
// @property $$inc included modules
klass.$$inc = [];
return klass;
};
// 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, name) {
var module;
if (!base.$$is_class && !base.$$is_module) {
base = base.$$class;
}
if ($hasOwn.call(base.$$scope, name)) {
module = base.$$scope[name];
if (!module.$$is_module && module !== _Object) {
throw Opal.TypeError.$new(name + " is not a module");
}
}
else {
module = Opal.module_allocate(Module);
Opal.create_scope(base.$$scope, module, name);
}
return module;
};
// The implementation for Module#initialize
// @param module [Module]
// @param block [Proc,nil]
// @return nil
Opal.module_initialize = function(module, block) {
if (block !== nil) {
var block_self = block.$$s;
block.$$s = null;
block.call(module);
block.$$s = block_self;
}
return nil;
};
// Internal function to create a new module instance. This simply sets up
// the prototype hierarchy and method tables.
//
Opal.module_allocate = function(superclass) {
var mtor = function() {};
mtor.prototype = superclass.$$alloc.prototype;
function module_constructor() {}
module_constructor.prototype = new mtor();
var module = new module_constructor();
var module_prototype = {};
// @property $$id Each class is assigned a unique `id` that helps
// comparation and implementation of `#object_id`
module.$$id = Opal.uid();
// Set the display name of the singleton prototype holder
module_constructor.displayName = "#<Class:#<Module:"+module.$$id+">>"
// @property $$proto This is the prototype on which methods will be defined
module.$$proto = module_prototype;
// @property constructor
// keeps a ref to the constructor, but apparently the
// constructor is already set on:
//
// `var module = new constructor` is called.
//
// Maybe there are some browsers not abiding (IE6?)
module.constructor = module_constructor;
// @property $$is_module Clearly mark this as a module
module.$$is_module = true;
module.$$class = Module;
// @property $$super
// the superclass, doesn't get changed by module inclusions
module.$$super = superclass;
// @property $$parent
// direct parent class or module
// starts with the superclass, after module inclusion is
// the last included module
module.$$parent = superclass;
// @property $$inc included modules
module.$$inc = [];
// mark the object as a module
module.$$is_module = true;
// initialize dependency tracking
module.$$dep = [];
// initialize the name with nil
module.$$name = nil;
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 object [Object] the ruby object
// @return [Class] the singleton class for object
Opal.get_singleton_class = function(object) {
if (object.$$meta) {
return object.$$meta;
}
if (object.$$is_class || object.$$is_module) {
return Opal.build_class_singleton_class(object);
}
return Opal.build_object_singleton_class(object);
};
// Build the singleton class for an existing class. Class object are built
// with their singleton class already in the prototype chain and inheriting
// from their superclass object (up to `Class` itself).
//
// NOTE: Actually in MRI a class' singleton class inherits from its
// superclass' singleton class which in turn inherits from Class.
//
// @param klass [Class]
// @return [Class]
Opal.build_class_singleton_class = function(object) {
var alloc, superclass, klass;
if (object.$$meta) {
return object.$$meta;
}
// The constructor and prototype of the singleton_class instances is the
// current class constructor and prototype.
alloc = object.constructor;
// The singleton_class superclass is the singleton_class of its superclass;
// but BasicObject has no superclass (its `$$super` is null), thus we
// fallback on `Class`.
superclass = object === BasicObject ? Class : Opal.build_class_singleton_class(object.$$super);
klass = Opal.setup_class_object(null, alloc, superclass.$$name, superclass.constructor);
klass.$$super = superclass;
klass.$$parent = superclass;
// The singleton_class retains the same scope as the original class
Opal.create_scope(object.$$scope, klass);
klass.$$is_singleton = true;
klass.$$singleton_of = object;
return object.$$meta = klass;
};
// Build the singleton class for a Ruby (non class) Object.
//
// @param object [Object]
// @return [Class]
Opal.build_object_singleton_class = function(object) {
var superclass = object.$$class,
name = "#<Class:#<" + superclass.$$name + ":" + superclass.$$id + ">>";
var alloc = Opal.boot_class_alloc(name, function(){}, superclass)
var klass = Opal.setup_class_object(name, alloc, superclass.$$name, superclass.constructor);
klass.$$super = superclass;
klass.$$parent = superclass;
klass.$$class = superclass.$$class;
klass.$$scope = superclass.$$scope;
klass.$$proto = object;
klass.$$is_singleton = true;
klass.$$singleton_of = object;
return object.$$meta = klass;
};
// Bridges a single method.
Opal.bridge_method = function(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*.
Opal._bridge = function(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];
Opal.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--) {
Opal._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 module [Module] the module to include
// @param klass [Class] the target class to include module into
// @return [null]
Opal.append_features = function(module, klass) {
var iclass, donator, prototype, methods, id, i;
// 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;
}
}
klass.$$inc.push(module);
module.$$dep.push(klass);
Opal._bridge(klass, module);
// iclass
iclass = {
$$name: module.$$name,
$$proto: module.$$proto,
$$parent: klass.$$parent,
$$module: module,
$$iclass: true
};
klass.$$parent = iclass;
donator = module.$$proto;
prototype = klass.$$proto;
methods = module.$instance_methods();
for (i = methods.length - 1; i >= 0; i--) {
id = '$' + methods[i];
// 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;
}
prototype[id] = donator[id];
prototype[id].$$donated = module;
}
Opal.donate_constants(module, klass);
};
// Table that holds all methods that have been defined on all objects
// It is used for defining method stubs for new coming native classes
Opal.stubs = {};
// 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 klass [Class] the Ruby class to bridge
// @param constructor [JS.Function] 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");
}
Opal.stub_subscribers.push(constructor.prototype);
// Populate constructor with previously stored stubs
for (var method_name in Opal.stubs) {
if (!(method_name in constructor.prototype)) {
constructor.prototype[method_name] = Opal.stub_for(method_name);
}
}
constructor.prototype.$$class = klass;
constructor.$$bridge = klass;
var ancestors = klass.$ancestors();
// order important here, we have to bridge from the last ancestor to the
// bridged class
for (var i = ancestors.length - 1; i >= 0; i--) {
Opal._bridge(constructor, ancestors[i]);
}
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;
};
// When a source module is included into the target module, we must also copy
// its constants to the target.
//
Opal.donate_constants = function(source_mod, target_mod) {
var source_constants = source_mod.$$scope.constants,
target_scope = target_mod.$$scope,
target_constants = target_scope.constants;
for (var i = 0, length = source_constants.length; i < length; i++) {
target_constants.push(source_constants[i]);
target_scope[source_constants[i]] = source_mod.$$scope[source_constants[i]];
}
};
// Donate methods for a module.
Opal.donate = function(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) {
Opal.donate(includee, jsid);
}
}
};
// The Array of ancestors for a given module/class
Opal.ancestors = function(module_or_class) {
var parent = module_or_class,
result = [],
modules;
while (parent) {
result.push(parent);
for (var i=0; i < parent.$$inc.length; i++) {
modules = Opal.ancestors(parent.$$inc[i]);
for(var j = 0; j < modules.length; j++) {
result.push(modules[j]);
}
}
// only the actual singleton class gets included in its ancestry
// after that, traverse the normal class hierarchy
if (parent.$$is_singleton && parent.$$singleton_of.$$is_module) {
parent = parent.$$singleton_of.$$super;
}
else {
parent = parent.$$is_class ? parent.$$super : null;
}
}
return result;
};
// Method Missing
// --------------
// 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 stubs [Array] an array of method stubs to add
// @return [undefined]
Opal.add_stubs = function(stubs) {
var subscriber, subscribers = Opal.stub_subscribers,
i, ilength = stubs.length,
j, jlength = subscribers.length,
method_name, stub;
for (i = 0; i < ilength; i++) {
method_name = stubs[i];
// Save method name to populate other subscribers with this stub
Opal.stubs[method_name] = true;
stub = Opal.stub_for(method_name);
for (j = 0; j < jlength; j++) {
subscriber = subscribers[j];
if (!(method_name in subscriber)) {
subscriber[method_name] = 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 stub [String] stub name to add (e.g. "$foo")
// @return [undefined]
Opal.add_stub_for = function(prototype, stub) {
var method_missing_stub = Opal.stub_for(stub);
prototype[stub] = method_missing_stub;
};
// Generate the method_missing stub for a given method name.
//
// @param method_name [String] The js-name of the method to stub (e.g. "$foo")
// @return [undefined]
Opal.stub_for = function(method_name) {
function method_missing_stub() {
// Copy any given block onto the method_missing dispatcher
this.$method_missing.$$p = method_missing_stub.$$p;
// Set block property to null ready for the next call (stop false-positives)
method_missing_stub.$$p = null;
// call method missing with correct args (remove '$' prefix on method name)
var args_ary = new Array(arguments.length);
for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = arguments[i]; }
return this.$method_missing.apply(this, [method_name.slice(1)].concat(args_ary));
}
method_missing_stub.$$stub = true;
return method_missing_stub;
};
// Methods
// -------
// Arity count error dispatcher for methods
//
// @param actual [Fixnum] number of arguments given to method
// @param expected [Fixnum] expected number of arguments
// @param object [Object] owner of the method +meth+
// @param meth [String] method name that got wrong number of arguments
// @raise [ArgumentError]
Opal.ac = function(actual, expected, object, meth) {
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 + ')');
};
// Arity count error dispatcher for blocks
//
// @param actual [Fixnum] number of arguments given to block
// @param expected [Fixnum] expected number of arguments
// @param context [Object] context of the block definition
// @raise [ArgumentError]
Opal.block_ac = function(actual, expected, context) {
var inspect = "`block in " + context + "'";
throw Opal.ArgumentError.$new(inspect + ': wrong number of arguments (' + actual + ' for ' + expected + ')');
}
// Super dispatcher
Opal.find_super_dispatcher = function(obj, jsid, current_func, defcheck, defs) {
var dispatcher;
if (defs) {
if (obj.$$is_class || obj.$$is_module) {
dispatcher = defs.$$super;
}
else {
dispatcher = obj.$$class.$$proto;
}
}
else {
dispatcher = Opal.find_obj_super_dispatcher(obj, jsid, current_func);
}
dispatcher = dispatcher['$' + jsid];
if (!defcheck && dispatcher.$$stub && Opal.Kernel.$method_missing === obj.$method_missing) {
// method_missing hasn't been explicitly defined
throw Opal.NoMethodError.$new('super: no superclass method `'+jsid+"' for "+obj, jsid);
}
return dispatcher;
};
// Iter dispatcher for super in a block
Opal.find_iter_super_dispatcher = function(obj, jsid, current_func, defcheck, implicit) {
var call_jsid = jsid;
if (!current_func) {
throw Opal.RuntimeError.$new("super called outside of method");
}
if (implicit && current_func.$$define_meth) {
throw Opal.RuntimeError.$new("implicit argument passing of super from method defined by define_method() is not supported. Specify all arguments explicitly");
}
if (current_func.$$def) {
call_jsid = current_func.$$jsid;
}
return Opal.find_super_dispatcher(obj, call_jsid, current_func, defcheck);
};
Opal.find_obj_super_dispatcher = function(obj, jsid, current_func) {
var klass = obj.$$meta || obj.$$class;
// first we need to find the class/module current_func is located on
klass = Opal.find_owning_class(klass, current_func);
if (!klass) {
throw new Error("could not find current class for super()");
}
jsid = '$' + jsid;
return Opal.find_super_func(klass, jsid, current_func);
};
Opal.find_owning_class = function(klass, current_func) {
var owner = current_func.$$owner;
while (klass) {
// repeating for readability
if (klass.$$iclass && klass.$$module === current_func.$$donated) {
// this klass was the last one the module donated to
// case is also hit with multiple module includes
break;
}
else if (klass.$$iclass && klass.$$module === owner) {
// module has donated to other classes but klass isn't one of those
break;
}
else if (owner.$$is_singleton && klass === owner.$$singleton_of.$$class) {
// cases like stdlib `Singleton::included` that use a singleton of a singleton
break;
}
else if (klass === owner) {
// no modules, pure class inheritance
break;
}
klass = klass.$$parent;
}
return klass;
};
Opal.find_super_func = function(owning_klass, jsid, current_func) {
var klass = owning_klass.$$parent;
// now we can find the super
while (klass) {
var working = klass.$$proto[jsid];
if (working && working !== current_func) {
// ok
break;
}
klass = klass.$$parent;
}
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.
//
Opal.ret = function(val) {
Opal.returner.$v = val;
throw Opal.returner;
};
// Used to break out of a block.
Opal.brk = function(val, breaker) {
breaker.$v = val;
throw breaker;
};
// Builds a new unique breaker, this is to avoid multiple nested breaks to get
// in the way of each other.
Opal.new_brk = function() {
return new Error('unexpected break');
};
// handles yield calls for 1 yielded arg
Opal.yield1 = function(block, arg) {
if (typeof(block) !== "function") {
throw Opal.LocalJumpError.$new("no block given");
}
var has_mlhs = block.$$has_top_level_mlhs_arg,
has_trailing_comma = block.$$has_trailing_comma_in_args;
if (block.length > 1 || ((has_mlhs || has_trailing_comma) && block.length === 1)) {
arg = Opal.to_ary(arg);
}
if ((block.length > 1 || (has_trailing_comma && block.length === 1)) && arg.$$is_array) {
return block.apply(null, arg);
}
else {
return block(arg);
}
};
// handles yield for > 1 yielded arg
Opal.yieldX = function(block, args) {
if (typeof(block) !== "function") {
throw Opal.LocalJumpError.$new("no block given");
}
if (block.length > 1 && args.length === 1) {
if (args[0].$$is_array) {
return block.apply(null, args[0]);
}
}
if (!args.$$is_array) {
var args_ary = new Array(args.length);
for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = args[i]; }
return block.apply(null, args_ary);
}
return block.apply(null, args);
};
// Finds the corresponding exception match in candidates. Each candidate can
// be a value, or an array of values. Returns null if not found.
Opal.rescue = function(exception, candidates) {
for (var i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.$$is_array) {
var result = Opal.rescue(exception, candidate);
if (result) {
return result;
}
}
else if (candidate['$==='](exception)) {
return candidate;
}
}
return null;
};
Opal.is_a = function(object, klass) {
if (object.$$meta === klass) {
return true;
}
var i, length, ancestors = Opal.ancestors(object.$$class);
for (i = 0, length = ancestors.length; i < length; i++) {
if (ancestors[i] === klass) {
return true;
}
}
ancestors = Opal.ancestors(object.$$meta);
for (i = 0, length = ancestors.length; i < length; i++) {
if (ancestors[i] === klass) {
return true;
}
}
return false;
};
// Helpers for extracting kwsplats
// Used for: { **h }
Opal.to_hash = function(value) {
if (value.$$is_hash) {
return value;
}
else if (value['$respond_to?']('to_hash', true)) {
var hash = value.$to_hash();
if (hash.$$is_hash) {
return hash;
}
else {
throw Opal.TypeError.$new("Can't convert " + value.$$class +
" to Hash (" + value.$$class + "#to_hash gives " + hash.$$class + ")");
}
}
else {
throw Opal.TypeError.$new("no implicit conversion of " + value.$$class + " into Hash");
}
};
// 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
// Used for: a, b = something (no splat)
Opal.to_ary = function(value) {
if (value.$$is_array) {
return value;
}
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;
}
else {
throw Opal.TypeError.$new("Can't convert " + value.$$class +
" to Array (" + value.$$class + "#to_ary gives " + ary.$$class + ")");
}
}
else {
return [value];
}
};
// Used for: a, b = *something (with splat)
Opal.to_a = function(value) {
if (value.$$is_array) {
// A splatted array must be copied
return value.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;
}
else {
throw Opal.TypeError.$new("Can't convert " + value.$$class +
" to Array (" + value.$$class + "#to_a gives " + ary.$$class + ")");
}
}
else {
return [value];
}
};
// Used for extracting keyword arguments from arguments passed to
// JS function. If provided +arguments+ list doesn't have a Hash
// as a last item, returns a blank Hash.
//
// @param parameters [Array]
// @return [Hash]
//
Opal.extract_kwargs = function(parameters) {
var kwargs = parameters[parameters.length - 1];
if (kwargs != null && kwargs['$respond_to?']('to_hash', true)) {
Array.prototype.splice.call(parameters, parameters.length - 1, 1);
return kwargs.$to_hash();
}
else {
return Opal.hash2([], {});
}
}
// 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<String: true>] 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;
for (key in given_map) {
if (!used_args[key]) {
keys.push(key);
map[key] = given_map[key];
}
}
return Opal.hash2(keys, map);
};
// Call a ruby method on a ruby object with some arguments:
//
// @example
// 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 recv [Object] the ruby object
// @param mid [String] ruby method to call
// @return [Object] forwards the return value of the method (or of method_missing)
Opal.send = function(recv, mid) {
var args_ary = new Array(Math.max(arguments.length - 2, 0));
for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = arguments[i + 2]; }
var func = recv['$' + mid];
if (func) {
return func.apply(recv, args_ary);
}
return recv.$method_missing.apply(recv, [mid].concat(args_ary));
};
Opal.block_send = function(recv, mid, block) {
var args_ary = new Array(Math.max(arguments.length - 3, 0));
for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = arguments[i + 3]; }
var func = recv['$' + mid];
if (func) {
func.$$p = block;
return func.apply(recv, args_ary);
}
return recv.$method_missing.apply(recv, [mid].concat(args_ary));
};
// 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 obj [Object, Class] the actual obj to define method for
// @param jsid [String] the JavaScript friendly method name (e.g. '$foo')
// @param body [JS.Function] the literal JavaScript function used as method
// @return [null]
//
Opal.defn = function(obj, jsid, body) {
obj.$$proto[jsid] = body;
// for super dispatcher, etc.
body.$$owner = obj;
if (obj.$$is_module) {
Opal.donate(obj, jsid);
if (obj.$$module_function) {
Opal.defs(obj, jsid, body);
}
}
if (obj.$__id__ && !obj.$__id__.$$stub) {
var bridged = bridges[obj.$__id__()];
if (bridged) {
for (var i = bridged.length - 1; i >= 0; i--) {
Opal.bridge_method(bridged[i], obj, jsid, body);
}
}
}
var singleton_of = obj.$$singleton_of;
if (obj.$method_added && !obj.$method_added.$$stub && !singleton_of) {
obj.$method_added(jsid.substr(1));
}
else if (singleton_of && singleton_of.$singleton_method_added && !singleton_of.$singleton_method_added.$$stub) {
singleton_of.$singleton_method_added(jsid.substr(1));
}
return nil;
};
// Define a singleton method on the given object.
Opal.defs = function(obj, jsid, body) {
Opal.defn(Opal.get_singleton_class(obj), jsid, body)
};
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);
}
};
// Called from #remove_method.
Opal.rdef = function(obj, jsid) {
// TODO: remove from bridges as well
if (!$hasOwn.call(obj.$$proto, jsid)) {
throw Opal.NameError.$new("method '" + jsid.substr(1) + "' not defined in " + obj.$name());
}
delete obj.$$proto[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 {
if (obj.$method_removed && !obj.$method_removed.$$stub) {
obj.$method_removed(jsid.substr(1));
}
}
};
// 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 {
if (obj.$method_undefined && !obj.$method_undefined.$$stub) {
obj.$method_undefined(jsid.substr(1));
}
}
};
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);
}
if (typeof(body) !== "function" || body.$$stub) {
var ancestor = obj.$$super;
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() + "'")
}
}
Opal.defn(obj, id, body);
return obj;
};
Opal.alias_native = function(obj, name, native_name) {
var id = '$' + name,
body = obj.$$proto[native_name];
if (typeof(body) !== "function" || body.$$stub) {
throw Opal.NameError.$new("undefined native method `" + native_name + "' for class `" + obj.$name() + "'")
}
Opal.defn(obj, id, body);
return obj;
};
// Hashes
// ------
Opal.hash_init = function(hash) {
hash.$$smap = {};
hash.$$map = {};
hash.$$keys = [];
};
Opal.hash_clone = function(from_hash, to_hash) {
to_hash.$$none = from_hash.$$none;
to_hash.$$proc = from_hash.$$proc;
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);
}
};
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;
}
var key_hash = key.$hash(), bucket, last_bucket;
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;
}
bucket = hash.$$map[key_hash];
while (bucket) {
if (key === bucket.key || key['$eql?'](bucket.key)) {
last_bucket = undefined;
bucket.value = value;
break;
}
last_bucket = bucket;
bucket = bucket.next;
}
if (last_bucket) {
bucket = {key: key, key_hash: key_hash, value: value};
hash.$$keys.push(bucket);
last_bucket.next = bucket;
}
};
Opal.hash_get = function(hash, key) {
if (key.$$is_string) {
if (hash.$$smap.hasOwnProperty(key)) {
return hash.$$smap[key];
}
return;
}
var key_hash = key.$hash(), bucket;
if (hash.$$map.hasOwnProperty(key_hash)) {
bucket = hash.$$map[key_hash];
while (bucket) {
if (key === bucket.key || key['$eql?'](bucket.key)) {
return bucket.value;
}
bucket = bucket.next;
}
}
};
Opal.hash_delete = function(hash, key) {
var i, keys = hash.$$keys, length = keys.length, value;
if (key.$$is_string) {
if (!hash.$$smap.hasOwnProperty(key)) {
return;
}
for (i = 0; i < length; i++) {
if (keys[i] === key) {
keys.splice(i, 1);
break;
}
}
value = hash.$$smap[key];
delete hash.$$smap[key];
return value;
}
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;
}
};
Opal.hash_rehash = function(hash) {
for (var i = 0, length = hash.$$keys.length, key_hash, bucket, last_bucket; i < length; i++) {
if (hash.$$keys[i].$$is_string) {
continue;
}
key_hash = hash.$$keys[i].key.$hash();
if (key_hash === hash.$$keys[i].key_hash) {
continue;
}
bucket = hash.$$map[hash.$$keys[i].key_hash];
last_bucket = undefined;
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;
}
hash.$$keys[i].key_hash = key_hash;
if (!hash.$$map.hasOwnProperty(key_hash)) {
hash.$$map[key_hash] = hash.$$keys[i];
continue;
}
bucket = hash.$$map[key_hash];
last_bucket = undefined;
while (bucket) {
if (bucket === hash.$$keys[i]) {
last_bucket = undefined;
break;
}
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 hash;
}
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 hash;
}
if (arguments_length % 2 !== 0) {
throw Opal.ArgumentError.$new("odd number of arguments for Hash");
}
for (i = 0; i < arguments_length; i += 2) {
key = arguments[i];
value = arguments[i + 1];
Opal.hash_put(hash, key, value);
}
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.$$smap = smap;
hash.$$map = {};
hash.$$keys = keys;
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
// --------------
Opal.modules = {};
Opal.loaded_features = ['corelib/runtime'];
Opal.current_dir = '.'
Opal.require_table = {'corelib/runtime': true};
Opal.normalize = function(path) {
var parts, part, new_parts = [], SEPARATOR = '/';
if (Opal.current_dir !== '.') {
path = Opal.current_dir.replace(/\/*$/, '/') + path;
}
path = path.replace(/\.(rb|opal|js)$/, '');
parts = path.split(SEPARATOR);
for (var i = 0, ii = parts.length; i < ii; i++) {
part = parts[i];
if (part === '') continue;
(part === '..') ? new_parts.pop() : new_parts.push(part)
}
return new_parts.join(SEPARATOR);
};
Opal.loaded = function(paths) {
var i, l, path;
for (i = 0, l = paths.length; i < l; i++) {
path = Opal.normalize(paths[i]);
if (Opal.require_table[path]) {
return;
}
Opal.loaded_features.push(path);
Opal.require_table[path] = true;
}
};
Opal.load = function(path) {
path = Opal.normalize(path);
Opal.loaded([path]);
var module = Opal.modules[path];
if (module) {
module(Opal);
}
else {
var severity = Opal.config.missing_require_severity;
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 = Opal.normalize(path);
if (Opal.require_table[path]) {
return false;
}
return Opal.load(path);
};
// Initialization
// --------------
// Constructors for *instances* of core objects
Opal.boot_class_alloc('BasicObject', BasicObject_alloc);
Opal.boot_class_alloc('Object', Object_alloc, BasicObject_alloc);
Opal.boot_class_alloc('Module', Module_alloc, Object_alloc);
Opal.boot_class_alloc('Class', Class_alloc, Module_alloc);
// Constructors for *classes* of core objects
Opal.BasicObject = BasicObject = Opal.setup_class_object('BasicObject', BasicObject_alloc, 'Class', Class_alloc);
Opal.Object = _Object = Opal.setup_class_object('Object', Object_alloc, 'BasicObject', BasicObject.constructor);
Opal.Module = Module = Opal.setup_class_object('Module', Module_alloc, 'Object', _Object.constructor);
Opal.Class = Class = Opal.setup_class_object('Class', Class_alloc, 'Module', Module.constructor);
Opal.constants.push("BasicObject");
Opal.constants.push("Object");
Opal.constants.push("Module");
Opal.constants.push("Class");
// Fix booted classes to use their metaclass
BasicObject.$$class = Class;
_Object.$$class = Class;
Module.$$class = Class;
Class.$$class = Class;
// Fix superclasses of booted classes
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;
// Forward .toString() to #to_s
_Object.$$proto.toString = function() {
return this.$to_s();
};
// Make Kernel#require immediately available as it's needed to require all the
// other corelib files.
_Object.$$proto.$require = Opal.require;
// Instantiate the top object
Opal.top = new _Object.$$alloc();
// Nil
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 (old)');
Opal.returner = new Error('unexpected return');
TypeError.$$super = Error;
}).call(this);
if (typeof(global) !== 'undefined') {
global.Opal = this.Opal;
Opal.global = global;
}
if (typeof(window) !== 'undefined') {
window.Opal = this.Opal;
Opal.global = window;
}
Opal.loaded(["corelib/runtime"]);
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/helpers"] = function(Opal) {
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', '$coerce_to!', '$!=', '$[]', '$upcase']);
return (function($base) {
var $Opal, self = $Opal = $module($base, 'Opal');
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;
Opal.defs(self, '$bridge', TMP_1 = function $$bridge(klass, constructor) {
var self = this;
return Opal.bridge(klass, constructor);
}, TMP_1.$$arity = 2);
Opal.defs(self, '$type_error', TMP_2 = function $$type_error(object, type, method, coerced) {
var $a, $b, self = this;
if (method == null) {
method = nil;
}
if (coerced == null) {
coerced = nil;
}
if ((($a = (($b = method !== false && method !== nil && method != null) ? coerced : method)) !== nil && $a != null && (!$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))
};
}, TMP_2.$$arity = -3);
Opal.defs(self, '$coerce_to', TMP_3 = function $$coerce_to(object, type, method) {
var $a, self = this;
if ((($a = type['$==='](object)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return object};
if ((($a = object['$respond_to?'](method)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type))
};
return object.$__send__(method);
}, TMP_3.$$arity = 3);
Opal.defs(self, '$coerce_to!', TMP_4 = function(object, type, method) {
var $a, self = this, coerced = nil;
coerced = self.$coerce_to(object, type, method);
if ((($a = type['$==='](coerced)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type, method, coerced))
};
return coerced;
}, TMP_4.$$arity = 3);
Opal.defs(self, '$coerce_to?', TMP_5 = function(object, type, method) {
var $a, self = this, coerced = nil;
if ((($a = object['$respond_to?'](method)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return nil
};
coerced = self.$coerce_to(object, type, method);
if ((($a = coerced['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil};
if ((($a = type['$==='](coerced)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type, method, coerced))
};
return coerced;
}, TMP_5.$$arity = 3);
Opal.defs(self, '$try_convert', TMP_6 = function $$try_convert(object, type, method) {
var $a, self = this;
if ((($a = type['$==='](object)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return object};
if ((($a = object['$respond_to?'](method)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return object.$__send__(method)
} else {
return nil
};
}, TMP_6.$$arity = 3);
Opal.defs(self, '$compare', TMP_7 = function $$compare(a, b) {
var $a, self = this, compare = nil;
compare = a['$<=>'](b);
if ((($a = compare === nil) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "comparison of " + (a.$class()) + " with " + (b.$class()) + " failed")};
return compare;
}, TMP_7.$$arity = 2);
Opal.defs(self, '$destructure', TMP_8 = function $$destructure(args) {
var self = this;
if (args.length == 1) {
return args[0];
}
else if (args.$$is_array) {
return args;
}
else {
var args_ary = new Array(args.length);
for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = args[i]; }
return args_ary;
}
}, TMP_8.$$arity = 1);
Opal.defs(self, '$respond_to?', TMP_9 = function(obj, method) {
var self = this;
if (obj == null || !obj.$$class) {
return false;
}
return obj['$respond_to?'](method);
}, TMP_9.$$arity = 2);
Opal.defs(self, '$inspect', TMP_10 = function $$inspect(obj) {
var self = this;
if (obj === undefined) {
return "undefined";
}
else if (obj === null) {
return "null";
}
else if (!obj.$$class) {
return obj.toString();
}
else {
return obj.$inspect();
}
}, TMP_10.$$arity = 1);
Opal.defs(self, '$instance_variable_name!', TMP_11 = 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 != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('NameError').$new("'" + (name) + "' is not allowed as an instance variable name", name))
};
return name;
}, TMP_11.$$arity = 1);
Opal.defs(self, '$const_name!', TMP_12 = function(const_name) {
var $a, self = this;
const_name = $scope.get('Opal')['$coerce_to!'](const_name, $scope.get('String'), "to_str");
if ((($a = const_name['$[]'](0)['$!='](const_name['$[]'](0).$upcase())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('NameError'), "wrong constant name " + (const_name))};
return const_name;
}, TMP_12.$$arity = 1);
Opal.defs(self, '$pristine', TMP_13 = function $$pristine(owner_class, $a_rest) {
var self = this, method_names;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
method_names = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
method_names[$arg_idx - 1] = arguments[$arg_idx];
}
var method_name;
for (var i = method_names.length - 1; i >= 0; i--) {
method_name = method_names[i];
owner_class.$$proto['$'+method_name].$$pristine = true
}
return nil;
}, TMP_13.$$arity = -2);
})($scope.base)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/module"] = function(Opal) {
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, $range = Opal.range, $hash2 = Opal.hash2;
Opal.add_stubs(['$===', '$raise', '$equal?', '$<', '$>', '$nil?', '$attr_reader', '$attr_writer', '$coerce_to!', '$new', '$const_name!', '$=~', '$inject', '$const_get', '$split', '$const_missing', '$==', '$!', '$start_with?', '$to_proc', '$lambda', '$bind', '$call', '$class', '$append_features', '$included', '$name', '$cover?', '$size', '$merge', '$compile', '$proc', '$to_s', '$__id__', '$constants', '$include?']);
return (function($base, $super) {
function $Module(){};
var self = $Module = $klass($base, $super, 'Module', $Module);
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_20, TMP_22, TMP_23, TMP_24, TMP_25, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_32, TMP_33, TMP_34, TMP_35, TMP_36, TMP_37, TMP_38, TMP_39, TMP_41, TMP_42, TMP_43, TMP_44, TMP_45, TMP_46, TMP_47, TMP_48, TMP_49;
Opal.defs(self, '$allocate', TMP_1 = function $$allocate() {
var self = this;
var module;
module = Opal.module_allocate(self);
Opal.create_scope(Opal.Module.$$scope, module, null);
return module;
}, TMP_1.$$arity = 0);
Opal.defn(self, '$initialize', TMP_2 = function $$initialize() {
var self = this, $iter = TMP_2.$$p, block = $iter || nil;
TMP_2.$$p = null;
return Opal.module_initialize(self, block);
}, TMP_2.$$arity = 0);
Opal.defn(self, '$===', TMP_3 = function(object) {
var $a, self = this;
if ((($a = object == null) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return false};
return Opal.is_a(object, self);
}, TMP_3.$$arity = 1);
Opal.defn(self, '$<', TMP_4 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Module')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('TypeError'), "compared with non class/module")
};
var working = self,
ancestors,
i, length;
if (working === other) {
return false;
}
for (i = 0, ancestors = Opal.ancestors(self), length = ancestors.length; i < length; i++) {
if (ancestors[i] === other) {
return true;
}
}
for (i = 0, ancestors = Opal.ancestors(other), length = ancestors.length; i < length; i++) {
if (ancestors[i] === self) {
return false;
}
}
return nil;
}, TMP_4.$$arity = 1);
Opal.defn(self, '$<=', TMP_5 = function(other) {
var $a, self = this;
return ((($a = self['$equal?'](other)) !== false && $a !== nil && $a != null) ? $a : $rb_lt(self, other));
}, TMP_5.$$arity = 1);
Opal.defn(self, '$>', TMP_6 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Module')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('TypeError'), "compared with non class/module")
};
return $rb_lt(other, self);
}, TMP_6.$$arity = 1);
Opal.defn(self, '$>=', TMP_7 = function(other) {
var $a, self = this;
return ((($a = self['$equal?'](other)) !== false && $a !== nil && $a != null) ? $a : $rb_gt(self, other));
}, TMP_7.$$arity = 1);
Opal.defn(self, '$<=>', TMP_8 = function(other) {
var $a, self = this, lt = nil;
if (self === other) {
return 0;
}
if ((($a = $scope.get('Module')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return nil
};
lt = $rb_lt(self, other);
if ((($a = lt['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil};
if (lt !== false && lt !== nil && lt != null) {
return -1
} else {
return 1
};
}, TMP_8.$$arity = 1);
Opal.defn(self, '$alias_method', TMP_9 = function $$alias_method(newname, oldname) {
var self = this;
Opal.alias(self, newname, oldname);
return self;
}, TMP_9.$$arity = 2);
Opal.defn(self, '$alias_native', TMP_10 = function $$alias_native(mid, jsid) {
var self = this;
if (jsid == null) {
jsid = mid;
}
Opal.alias_native(self, mid, jsid);
return self;
}, TMP_10.$$arity = -2);
Opal.defn(self, '$ancestors', TMP_11 = function $$ancestors() {
var self = this;
return Opal.ancestors(self);
}, TMP_11.$$arity = 0);
Opal.defn(self, '$append_features', TMP_12 = function $$append_features(klass) {
var self = this;
Opal.append_features(self, klass);
return self;
}, TMP_12.$$arity = 1);
Opal.defn(self, '$attr_accessor', TMP_13 = function $$attr_accessor($a_rest) {
var $b, $c, self = this, names;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
names = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
names[$arg_idx - 0] = arguments[$arg_idx];
}
($b = self).$attr_reader.apply($b, Opal.to_a(names));
return ($c = self).$attr_writer.apply($c, Opal.to_a(names));
}, TMP_13.$$arity = -1);
Opal.alias(self, 'attr', 'attr_accessor');
Opal.defn(self, '$attr_reader', TMP_14 = function $$attr_reader($a_rest) {
var self = this, names;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
names = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
names[$arg_idx - 0] = arguments[$arg_idx];
}
var proto = self.$$proto;
for (var i = names.length - 1; i >= 0; i--) {
var name = names[i],
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(ivar) {
return function() {
if (this[ivar] == null) {
return nil;
}
else {
return this[ivar];
}
};
})(ivar);
// initialize the instance variable as nil
proto[ivar] = nil;
body.$$parameters = [];
body.$$arity = 0;
if (self.$$is_singleton) {
proto.constructor.prototype[id] = body;
}
else {
Opal.defn(self, id, body);
}
}
return nil;
}, TMP_14.$$arity = -1);
Opal.defn(self, '$attr_writer', TMP_15 = function $$attr_writer($a_rest) {
var self = this, names;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
names = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
names[$arg_idx - 0] = arguments[$arg_idx];
}
var proto = self.$$proto;
for (var i = names.length - 1; i >= 0; i--) {
var name = names[i],
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(ivar){
return function(value) {
return this[ivar] = value;
}
})(ivar);
body.$$parameters = [['req']];
body.$$arity = 1;
// initialize the instance variable as nil
proto[ivar] = nil;
if (self.$$is_singleton) {
proto.constructor.prototype[id] = body;
}
else {
Opal.defn(self, id, body);
}
}
return nil;
}, TMP_15.$$arity = -1);
Opal.defn(self, '$autoload', TMP_16 = function $$autoload(const$, path) {
var self = this;
var autoloaders;
if (!(autoloaders = self.$$autoload)) {
autoloaders = self.$$autoload = {};
}
autoloaders[const$] = path;
return nil;
;
}, TMP_16.$$arity = 2);
Opal.defn(self, '$class_variable_get', TMP_17 = function $$class_variable_get(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 != null && (!$a.$$is_boolean || $a == true))) {
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 != null && (!$a.$$is_boolean || $a == true))) {
return self.$raise($scope.get('NameError').$new("uninitialized class variable @@a in", name))
} else {
return nil
}; return nil; })()
return value;
}, TMP_17.$$arity = 1);
Opal.defn(self, '$class_variable_set', TMP_18 = function $$class_variable_set(name, value) {
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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('NameError'))};
Opal.cvars[name.slice(2)] = value;
return value;
}, TMP_18.$$arity = 2);
Opal.defn(self, '$constants', TMP_19 = function $$constants() {
var self = this;
return self.$$scope.constants.slice(0);
}, TMP_19.$$arity = 0);
Opal.defn(self, '$const_defined?', TMP_20 = function(name, inherit) {
var $a, self = this;
if (inherit == null) {
inherit = true;
}
name = $scope.get('Opal')['$const_name!'](name);
if ((($a = name['$=~']((($scope.get('Opal')).$$scope.get('CONST_NAME_REGEXP')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name))
};
var scopes = [self.$$scope];
if (inherit || self === Opal.Object) {
var parent = self.$$super;
while (parent !== Opal.BasicObject) {
scopes.push(parent.$$scope);
parent = parent.$$super;
}
}
for (var i = 0, length = scopes.length; i < length; i++) {
if (scopes[i].hasOwnProperty(name)) {
return true;
}
}
return false;
}, TMP_20.$$arity = -2);
Opal.defn(self, '$const_get', TMP_22 = function $$const_get(name, inherit) {
var $a, $b, TMP_21, self = this;
if (inherit == null) {
inherit = true;
}
name = $scope.get('Opal')['$const_name!'](name);
if (name.indexOf('::') === 0 && name !== '::'){
name = name.slice(2);
}
if ((($a = name.indexOf('::') != -1 && name != '::') !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ($a = ($b = name.$split("::")).$inject, $a.$$p = (TMP_21 = function(o, c){var self = TMP_21.$$s || this;
if (o == null) o = nil;if (c == null) c = nil;
return o.$const_get(c)}, TMP_21.$$s = self, TMP_21.$$arity = 2, TMP_21), $a).call($b, self)};
if ((($a = name['$=~']((($scope.get('Opal')).$$scope.get('CONST_NAME_REGEXP')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name))
};
var scopes = [self.$$scope];
if (inherit || self == Opal.Object) {
var parent = self.$$super;
while (parent !== Opal.BasicObject) {
scopes.push(parent.$$scope);
parent = parent.$$super;
}
}
for (var i = 0, length = scopes.length; i < length; i++) {
if (scopes[i].hasOwnProperty(name)) {
return scopes[i][name];
}
}
return self.$const_missing(name);
}, TMP_22.$$arity = -2);
Opal.defn(self, '$const_missing', TMP_23 = function $$const_missing(name) {
var self = this, full_const_name = nil;
if (self.$$autoload) {
var file = self.$$autoload[name];
if (file) {
self.$require(file);
return self.$const_get(name);
}
}
full_const_name = (function() {if (self['$==']($scope.get('Object'))) {
return name
} else {
return "" + (self) + "::" + (name)
}; return nil; })();
return self.$raise($scope.get('NameError').$new("uninitialized constant " + (full_const_name), name));
}, TMP_23.$$arity = 1);
Opal.defn(self, '$const_set', TMP_24 = function $$const_set(name, value) {
var $a, $b, self = this;
name = $scope.get('Opal')['$const_name!'](name);
if ((($a = ((($b = (name['$=~']((($scope.get('Opal')).$$scope.get('CONST_NAME_REGEXP'))))['$!']()) !== false && $b !== nil && $b != null) ? $b : name['$start_with?']("::"))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('NameError').$new("wrong constant name " + (name), name))};
Opal.casgn(self, name, value);
return value;
}, TMP_24.$$arity = 2);
Opal.defn(self, '$define_method', TMP_25 = function $$define_method(name, method) {
var $a, $b, $c, TMP_26, self = this, $iter = TMP_25.$$p, block = $iter || nil, $case = nil;
TMP_25.$$p = null;
if ((($a = method === undefined && block === nil) !== nil && $a != null && (!$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 != null) ? $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_26 = function($d_rest){var self = TMP_26.$$s || this, args, $e, bound = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
bound = method.$bind(self);
return ($e = bound).$call.apply($e, Opal.to_a(args));}, TMP_26.$$s = self, TMP_26.$$arity = -1, TMP_26), $b).call($c)}else {return self.$raise($scope.get('TypeError'), "wrong argument type " + (block.$class()) + " (expected Proc/Method)")}})());
var id = '$' + name;
block.$$jsid = name;
block.$$s = null;
block.$$def = block;
block.$$define_meth = true;
Opal.defn(self, id, block);
return name;
}, TMP_25.$$arity = -2);
Opal.defn(self, '$remove_method', TMP_27 = function $$remove_method($a_rest) {
var self = this, names;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
names = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
names[$arg_idx - 0] = arguments[$arg_idx];
}
for (var i = 0, length = names.length; i < length; i++) {
Opal.rdef(self, "$" + names[i]);
}
return self;
}, TMP_27.$$arity = -1);
Opal.defn(self, '$singleton_class?', TMP_28 = function() {
var self = this;
return !!self.$$is_singleton;
}, TMP_28.$$arity = 0);
Opal.defn(self, '$include', TMP_29 = function $$include($a_rest) {
var self = this, mods;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
mods = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
mods[$arg_idx - 0] = arguments[$arg_idx];
}
for (var i = mods.length - 1; i >= 0; i--) {
var mod = mods[i];
if (mod === self) {
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;
}, TMP_29.$$arity = -1);
Opal.defn(self, '$included_modules', TMP_30 = function $$included_modules() {
var self = this;
var results;
var module_chain = function(klass) {
var included = [];
for (var i = 0; i != klass.$$inc.length; i++) {
var mod_or_class = klass.$$inc[i];
included.push(mod_or_class);
included = included.concat(module_chain(mod_or_class));
}
return included;
};
results = module_chain(self);
// need superclass's modules
if (self.$$is_class) {
for (var cls = self; cls; cls = cls.$$super) {
results = results.concat(module_chain(cls));
}
}
return results;
}, TMP_30.$$arity = 0);
Opal.defn(self, '$include?', TMP_31 = function(mod) {
var self = this;
for (var cls = self; cls; cls = cls.$$super) {
for (var i = 0; i != cls.$$inc.length; i++) {
var mod2 = cls.$$inc[i];
if (mod === mod2) {
return true;
}
}
}
return false;
}, TMP_31.$$arity = 1);
Opal.defn(self, '$instance_method', TMP_32 = function $$instance_method(name) {
var self = this;
var meth = self.$$proto['$' + name];
if (!meth || meth.$$stub) {
self.$raise($scope.get('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$name()) + "'", name));
}
return $scope.get('UnboundMethod').$new(self, meth, name);
}, TMP_32.$$arity = 1);
Opal.defn(self, '$instance_methods', TMP_33 = function $$instance_methods(include_super) {
var self = this;
if (include_super == null) {
include_super = true;
}
var methods = [],
proto = self.$$proto;
for (var prop in proto) {
if (prop.charAt(0) !== '$') {
continue;
}
if (typeof(proto[prop]) !== "function") {
continue;
}
if (proto[prop].$$stub) {
continue;
}
if (!self.$$is_module) {
if (self !== Opal.BasicObject && proto[prop] === Opal.BasicObject.$$proto[prop]) {
continue;
}
if (!include_super && !proto.hasOwnProperty(prop)) {
continue;
}
if (!include_super && proto[prop].$$donated) {
continue;
}
}
methods.push(prop.substr(1));
}
return methods;
}, TMP_33.$$arity = -1);
Opal.defn(self, '$included', TMP_34 = function $$included(mod) {
var self = this;
return nil;
}, TMP_34.$$arity = 1);
Opal.defn(self, '$extended', TMP_35 = function $$extended(mod) {
var self = this;
return nil;
}, TMP_35.$$arity = 1);
Opal.defn(self, '$method_added', TMP_36 = function $$method_added($a_rest) {
var self = this;
return nil;
}, TMP_36.$$arity = -1);
Opal.defn(self, '$method_removed', TMP_37 = function $$method_removed($a_rest) {
var self = this;
return nil;
}, TMP_37.$$arity = -1);
Opal.defn(self, '$method_undefined', TMP_38 = function $$method_undefined($a_rest) {
var self = this;
return nil;
}, TMP_38.$$arity = -1);
Opal.defn(self, '$module_eval', TMP_39 = function $$module_eval($a_rest) {
var $b, $c, TMP_40, self = this, args, $iter = TMP_39.$$p, block = $iter || nil, string = nil, file = nil, _lineno = nil, default_eval_options = nil, compiling_options = nil, compiled = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_39.$$p = null;
if ((($b = ($c = block['$nil?'](), $c !== false && $c !== nil && $c != null ?!!Opal.compile : $c)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
if ((($b = ($range(1, 3, false))['$cover?'](args.$size())) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
} else {
$scope.get('Kernel').$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)")
};
$b = Opal.to_a(args), string = ($b[0] == null ? nil : $b[0]), file = ($b[1] == null ? nil : $b[1]), _lineno = ($b[2] == null ? nil : $b[2]), $b;
default_eval_options = $hash2(["file", "eval"], {"file": (((($b = file) !== false && $b !== nil && $b != null) ? $b : "(eval)")), "eval": true});
compiling_options = Opal.hash({ arity_check: false }).$merge(default_eval_options);
compiled = $scope.get('Opal').$compile(string, compiling_options);
block = ($b = ($c = $scope.get('Kernel')).$proc, $b.$$p = (TMP_40 = function(){var self = TMP_40.$$s || this;
return (function(self) {
return eval(compiled);
})(self)
}, TMP_40.$$s = self, TMP_40.$$arity = 0, TMP_40), $b).call($c);
} else if ((($b = $rb_gt(args.$size(), 0)) !== nil && $b != null && (!$b.$$is_boolean || $b == 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.apply(self, [self]);
block.$$s = old;
return result;
}, TMP_39.$$arity = -1);
Opal.alias(self, 'class_eval', 'module_eval');
Opal.defn(self, '$module_exec', TMP_41 = function $$module_exec($a_rest) {
var self = this, args, $iter = TMP_41.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_41.$$p = null;
if (block === nil) {
self.$raise($scope.get('LocalJumpError'), "no block given")
}
var block_self = block.$$s, result;
block.$$s = null;
result = block.apply(self, args);
block.$$s = block_self;
return result;
;
}, TMP_41.$$arity = -1);
Opal.alias(self, 'class_exec', 'module_exec');
Opal.defn(self, '$method_defined?', TMP_42 = function(method) {
var self = this;
var body = self.$$proto['$' + method];
return (!!body) && !body.$$stub;
}, TMP_42.$$arity = 1);
Opal.defn(self, '$module_function', TMP_43 = function $$module_function($a_rest) {
var self = this, methods;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
methods = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
methods[$arg_idx - 0] = arguments[$arg_idx];
}
if (methods.length === 0) {
self.$$module_function = true;
}
else {
for (var i = 0, length = methods.length; i < length; i++) {
var meth = methods[i],
id = '$' + meth,
func = self.$$proto[id];
Opal.defs(self, id, func);
}
}
return self;
}, TMP_43.$$arity = -1);
Opal.defn(self, '$name', TMP_44 = function $$name() {
var self = this;
if (self.$$full_name) {
return self.$$full_name;
}
var result = [], base = self;
while (base) {
if (base.$$name === nil) {
return result.length === 0 ? nil : result.join('::');
}
result.unshift(base.$$name);
base = base.$$base_module;
if (base === Opal.Object) {
break;
}
}
if (result.length === 0) {
return nil;
}
return self.$$full_name = result.join('::');
}, TMP_44.$$arity = 0);
Opal.defn(self, '$remove_class_variable', TMP_45 = function $$remove_class_variable($a_rest) {
var self = this;
return nil;
}, TMP_45.$$arity = -1);
Opal.defn(self, '$remove_const', TMP_46 = function $$remove_const(name) {
var self = this;
var old = self.$$scope[name];
delete self.$$scope[name];
return old;
}, TMP_46.$$arity = 1);
Opal.defn(self, '$to_s', TMP_47 = function $$to_s() {
var $a, self = this;
return ((($a = Opal.Module.$name.call(self)) !== false && $a !== nil && $a != null) ? $a : "#<" + (self.$$is_module ? 'Module' : 'Class') + ":0x" + (self.$__id__().$to_s(16)) + ">");
}, TMP_47.$$arity = 0);
Opal.defn(self, '$undef_method', TMP_48 = function $$undef_method($a_rest) {
var self = this, names;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
names = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
names[$arg_idx - 0] = arguments[$arg_idx];
}
for (var i = 0, length = names.length; i < length; i++) {
Opal.udef(self, "$" + names[i]);
}
return self;
}, TMP_48.$$arity = -1);
return (Opal.defn(self, '$instance_variables', TMP_49 = function $$instance_variables() {
var self = this, consts = nil;
consts = self.$constants();
var result = [];
for (var name in self) {
if (self.hasOwnProperty(name) && name.charAt(0) !== '$' && name !== 'constructor' && !consts['$include?'](name)) {
result.push('@' + name);
}
}
return result;
}, TMP_49.$$arity = 0), nil) && 'instance_variables';
})($scope.base, null)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/class"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
Opal.add_stubs(['$require', '$allocate', '$name', '$to_s']);
self.$require("corelib/module");
return (function($base, $super) {
function $Class(){};
var self = $Class = $klass($base, $super, 'Class', $Class);
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6;
Opal.defs(self, '$new', TMP_1 = function(superclass) {
var self = this, $iter = TMP_1.$$p, block = $iter || nil;
if (superclass == null) {
superclass = $scope.get('Object');
}
TMP_1.$$p = null;
if (!superclass.$$is_class) {
throw Opal.TypeError.$new("superclass must be a Class");
}
var alloc = Opal.boot_class_alloc(null, function(){}, superclass)
var klass = Opal.setup_class_object(null, alloc, superclass.$$name, superclass.constructor);
klass.$$super = superclass;
klass.$$parent = superclass;
// inherit scope from parent
Opal.create_scope(superclass.$$scope, klass);
superclass.$inherited(klass);
Opal.module_initialize(klass, block);
return klass;
}, TMP_1.$$arity = -1);
Opal.defn(self, '$allocate', TMP_2 = function $$allocate() {
var self = this;
var obj = new self.$$alloc();
obj.$$id = Opal.uid();
return obj;
}, TMP_2.$$arity = 0);
Opal.defn(self, '$inherited', TMP_3 = function $$inherited(cls) {
var self = this;
return nil;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$new', TMP_4 = function($a_rest) {
var self = this, args, $iter = TMP_4.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_4.$$p = null;
var obj = self.$allocate();
obj.$initialize.$$p = block;
obj.$initialize.apply(obj, args);
return obj;
;
}, TMP_4.$$arity = -1);
Opal.defn(self, '$superclass', TMP_5 = function $$superclass() {
var self = this;
return self.$$super || nil;
}, TMP_5.$$arity = 0);
return (Opal.defn(self, '$to_s', TMP_6 = function $$to_s() {
var $a, $b, self = this, $iter = TMP_6.$$p, $yield = $iter || nil;
TMP_6.$$p = null;
var singleton_of = self.$$singleton_of;
if (singleton_of && (singleton_of.$$is_class || singleton_of.$$is_module)) {
return "#<Class:" + ((singleton_of).$name()) + ">";
}
else if (singleton_of) {
// a singleton class created from an object
return "#<Class:#<" + ((singleton_of.$$class).$name()) + ":0x" + ((singleton_of.$$id).$to_s(16)) + ">>";
}
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'to_s', TMP_6, false)), $a.$$p = null, $a).call($b);
}, TMP_6.$$arity = 0), nil) && 'to_s';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/basic_object"] = function(Opal) {
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(['$==', '$!', '$nil?', '$cover?', '$size', '$raise', '$merge', '$compile', '$proc', '$>', '$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, TMP_5, TMP_6, TMP_7, TMP_8, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14;
Opal.defn(self, '$initialize', TMP_1 = function $$initialize($a_rest) {
var self = this;
return nil;
}, TMP_1.$$arity = -1);
Opal.defn(self, '$==', TMP_2 = function(other) {
var self = this;
return self === other;
}, TMP_2.$$arity = 1);
Opal.defn(self, '$eql?', TMP_3 = function(other) {
var self = this;
return self['$=='](other);
}, TMP_3.$$arity = 1);
Opal.alias(self, 'equal?', '==');
Opal.defn(self, '$__id__', TMP_4 = function $$__id__() {
var self = this;
return self.$$id || (self.$$id = Opal.uid());
}, TMP_4.$$arity = 0);
Opal.defn(self, '$__send__', TMP_5 = function $$__send__(symbol, $a_rest) {
var self = this, args, $iter = TMP_5.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_5.$$p = null;
var func = self['$' + symbol]
if (func) {
if (block !== nil) {
func.$$p = block;
}
return func.apply(self, args);
}
if (block !== nil) {
self.$method_missing.$$p = block;
}
return self.$method_missing.apply(self, [symbol].concat(args));
}, TMP_5.$$arity = -2);
Opal.defn(self, '$!', TMP_6 = function() {
var self = this;
return false;
}, TMP_6.$$arity = 0);
Opal.defn(self, '$!=', TMP_7 = function(other) {
var self = this;
return (self['$=='](other))['$!']();
}, TMP_7.$$arity = 1);
Opal.alias(self, 'equal?', '==');
Opal.defn(self, '$instance_eval', TMP_8 = function $$instance_eval($a_rest) {
var $b, $c, TMP_9, self = this, args, $iter = TMP_8.$$p, block = $iter || nil, string = nil, file = nil, _lineno = nil, default_eval_options = nil, compiling_options = nil, compiled = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_8.$$p = null;
if ((($b = ($c = block['$nil?'](), $c !== false && $c !== nil && $c != null ?!!Opal.compile : $c)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
if ((($b = ($range(1, 3, false))['$cover?'](args.$size())) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
} else {
$scope.get('Kernel').$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)")
};
$b = Opal.to_a(args), string = ($b[0] == null ? nil : $b[0]), file = ($b[1] == null ? nil : $b[1]), _lineno = ($b[2] == null ? nil : $b[2]), $b;
default_eval_options = $hash2(["file", "eval"], {"file": (((($b = file) !== false && $b !== nil && $b != null) ? $b : "(eval)")), "eval": true});
compiling_options = Opal.hash({ arity_check: false }).$merge(default_eval_options);
compiled = $scope.get('Opal').$compile(string, compiling_options);
block = ($b = ($c = $scope.get('Kernel')).$proc, $b.$$p = (TMP_9 = function(){var self = TMP_9.$$s || this;
return (function(self) {
return eval(compiled);
})(self)
}, TMP_9.$$s = self, TMP_9.$$arity = 0, TMP_9), $b).call($c);
} else if ((($b = $rb_gt(args.$size(), 0)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
$scope.get('Kernel').$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$size()) + " for 0)")};
var old = block.$$s,
result;
block.$$s = null;
// 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;
}, TMP_8.$$arity = -1);
Opal.defn(self, '$instance_exec', TMP_10 = function $$instance_exec($a_rest) {
var self = this, args, $iter = TMP_10.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_10.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
$scope.get('Kernel').$raise($scope.get('ArgumentError'), "no block given")
};
var block_self = block.$$s,
result;
block.$$s = null;
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;
}, TMP_10.$$arity = -1);
Opal.defn(self, '$singleton_method_added', TMP_11 = function $$singleton_method_added($a_rest) {
var self = this;
return nil;
}, TMP_11.$$arity = -1);
Opal.defn(self, '$singleton_method_removed', TMP_12 = function $$singleton_method_removed($a_rest) {
var self = this;
return nil;
}, TMP_12.$$arity = -1);
Opal.defn(self, '$singleton_method_undefined', TMP_13 = function $$singleton_method_undefined($a_rest) {
var self = this;
return nil;
}, TMP_13.$$arity = -1);
return (Opal.defn(self, '$method_missing', TMP_14 = function $$method_missing(symbol, $a_rest) {
var $b, self = this, args, $iter = TMP_14.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_14.$$p = null;
return $scope.get('Kernel').$raise($scope.get('NoMethodError').$new((function() {if ((($b = self.$inspect && !self.$inspect.$$stub) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return "undefined method `" + (symbol) + "' for " + (self.$inspect()) + ":" + (self.$$class)
} else {
return "undefined method `" + (symbol) + "' for " + (self.$$class)
}; return nil; })(), symbol));
}, TMP_14.$$arity = -2), nil) && 'method_missing';
})($scope.base, null)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/kernel"] = function(Opal) {
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, $klass = Opal.klass;
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', '$>', '$size', '$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!', '$===', '$enum_for', '$print', '$format', '$puts', '$each', '$<=', '$empty?', '$exception', '$kind_of?', '$respond_to_missing?', '$try_convert!', '$expand_path', '$join', '$start_with?', '$sym', '$arg', '$open', '$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_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_21, 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_34, TMP_35, TMP_36, TMP_37, TMP_38, TMP_39, TMP_40, TMP_41, TMP_42, TMP_43, TMP_45, TMP_46, TMP_47, TMP_48, TMP_49, TMP_50, TMP_51, TMP_52, TMP_53, TMP_54, TMP_55, TMP_56, TMP_57, TMP_58, TMP_59, TMP_60, TMP_61, TMP_62, TMP_63;
Opal.defn(self, '$method_missing', TMP_1 = function $$method_missing(symbol, $a_rest) {
var self = this, args, $iter = TMP_1.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_1.$$p = null;
return self.$raise($scope.get('NoMethodError').$new("undefined method `" + (symbol) + "' for " + (self.$inspect()), symbol, args));
}, TMP_1.$$arity = -2);
Opal.defn(self, '$=~', TMP_2 = function(obj) {
var self = this;
return false;
}, TMP_2.$$arity = 1);
Opal.defn(self, '$!~', TMP_3 = function(obj) {
var self = this;
return (self['$=~'](obj))['$!']();
}, TMP_3.$$arity = 1);
Opal.defn(self, '$===', TMP_4 = function(other) {
var $a, self = this;
return ((($a = self.$object_id()['$=='](other.$object_id())) !== false && $a !== nil && $a != null) ? $a : self['$=='](other));
}, TMP_4.$$arity = 1);
Opal.defn(self, '$<=>', TMP_5 = function(other) {
var self = this;
// set guard for infinite recursion
self.$$comparable = true;
var x = self['$=='](other);
if (x && x !== nil) {
return 0;
}
return nil;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$method', TMP_6 = function $$method(name) {
var self = this;
var meth = self['$' + name];
if (!meth || meth.$$stub) {
self.$raise($scope.get('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$class()) + "'", name));
}
return $scope.get('Method').$new(self, meth, name);
}, TMP_6.$$arity = 1);
Opal.defn(self, '$methods', TMP_7 = function $$methods(all) {
var self = this;
if (all == null) {
all = true;
}
var methods = [];
for (var key in self) {
if (key[0] == "$" && typeof(self[key]) === "function") {
if (all == false || all === nil) {
if (!Opal.hasOwnProperty.call(self, key)) {
continue;
}
}
if (self[key].$$stub === undefined) {
methods.push(key.substr(1));
}
}
}
return methods;
}, TMP_7.$$arity = -1);
Opal.alias(self, 'public_methods', 'methods');
Opal.defn(self, '$Array', TMP_8 = function $$Array(object) {
var self = this;
var coerced;
if (object === nil) {
return [];
}
if (object.$$is_array) {
return object;
}
coerced = $scope.get('Opal')['$coerce_to?'](object, $scope.get('Array'), "to_ary");
if (coerced !== nil) { return coerced; }
coerced = $scope.get('Opal')['$coerce_to?'](object, $scope.get('Array'), "to_a");
if (coerced !== nil) { return coerced; }
return [object];
}, TMP_8.$$arity = 1);
Opal.defn(self, '$at_exit', TMP_9 = function $$at_exit() {
var $a, self = this, $iter = TMP_9.$$p, block = $iter || nil;
if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil;
TMP_9.$$p = null;
((($a = $gvars.__at_exit__) !== false && $a !== nil && $a != null) ? $a : $gvars.__at_exit__ = []);
return $gvars.__at_exit__['$<<'](block);
}, TMP_9.$$arity = 0);
Opal.defn(self, '$caller', TMP_10 = function $$caller() {
var self = this;
return [];
}, TMP_10.$$arity = 0);
Opal.defn(self, '$class', TMP_11 = function() {
var self = this;
return self.$$class;
}, TMP_11.$$arity = 0);
Opal.defn(self, '$copy_instance_variables', TMP_12 = function $$copy_instance_variables(other) {
var self = this;
for (var name in other) {
if (other.hasOwnProperty(name) && name.charAt(0) !== '$') {
self[name] = other[name];
}
}
}, TMP_12.$$arity = 1);
Opal.defn(self, '$copy_singleton_methods', TMP_13 = function $$copy_singleton_methods(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];
}
}
}, TMP_13.$$arity = 1);
Opal.defn(self, '$clone', TMP_14 = function $$clone() {
var self = this, copy = nil;
copy = self.$class().$allocate();
copy.$copy_instance_variables(self);
copy.$copy_singleton_methods(self);
copy.$initialize_clone(self);
return copy;
}, TMP_14.$$arity = 0);
Opal.defn(self, '$initialize_clone', TMP_15 = function $$initialize_clone(other) {
var self = this;
return self.$initialize_copy(other);
}, TMP_15.$$arity = 1);
Opal.defn(self, '$define_singleton_method', TMP_16 = function $$define_singleton_method(name, method) {
var $a, $b, self = this, $iter = TMP_16.$$p, block = $iter || nil;
TMP_16.$$p = null;
return ($a = ($b = self.$singleton_class()).$define_method, $a.$$p = block.$to_proc(), $a).call($b, name, method);
}, TMP_16.$$arity = -2);
Opal.defn(self, '$dup', TMP_17 = function $$dup() {
var self = this, copy = nil;
copy = self.$class().$allocate();
copy.$copy_instance_variables(self);
copy.$initialize_dup(self);
return copy;
}, TMP_17.$$arity = 0);
Opal.defn(self, '$initialize_dup', TMP_18 = function $$initialize_dup(other) {
var self = this;
return self.$initialize_copy(other);
}, TMP_18.$$arity = 1);
Opal.defn(self, '$enum_for', TMP_19 = function $$enum_for(method, $a_rest) {
var $b, $c, self = this, args, $iter = TMP_19.$$p, block = $iter || nil;
if (method == null) {
method = "each";
}
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_19.$$p = null;
return ($b = ($c = $scope.get('Enumerator')).$for, $b.$$p = block.$to_proc(), $b).apply($c, [self, method].concat(Opal.to_a(args)));
}, TMP_19.$$arity = -1);
Opal.alias(self, 'to_enum', 'enum_for');
Opal.defn(self, '$equal?', TMP_20 = function(other) {
var self = this;
return self === other;
}, TMP_20.$$arity = 1);
Opal.defn(self, '$exit', TMP_21 = function $$exit(status) {
var $a, $b, self = this, block = nil;
if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil;
if (status == null) {
status = true;
}
((($a = $gvars.__at_exit__) !== false && $a !== nil && $a != null) ? $a : $gvars.__at_exit__ = []);
while ((($b = $rb_gt($gvars.__at_exit__.$size(), 0)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
block = $gvars.__at_exit__.$pop();
block.$call();};
if ((($a = status === true) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
status = 0};
Opal.exit(status);
return nil;
}, TMP_21.$$arity = -1);
Opal.defn(self, '$extend', TMP_22 = function $$extend($a_rest) {
var self = this, mods;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
mods = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
mods[$arg_idx - 0] = arguments[$arg_idx];
}
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);
}
;
return self;
}, TMP_22.$$arity = -1);
Opal.defn(self, '$format', TMP_23 = function $$format(format_string, $a_rest) {
var $b, $c, self = this, args, ary = nil;
if ($gvars.DEBUG == null) $gvars.DEBUG = nil;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
if ((($b = (($c = args.$length()['$=='](1)) ? args['$[]'](0)['$respond_to?']("to_ary") : args.$length()['$=='](1))) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
ary = $scope.get('Opal')['$coerce_to?'](args['$[]'](0), $scope.get('Array'), "to_ary");
if ((($b = ary['$nil?']()) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
} else {
args = ary.$to_a()
};};
var result = '',
//used for slicing:
begin_slice = 0,
end_slice,
//used for iterating over the format string:
i,
len = format_string.length,
//used for processing field values:
arg,
str,
//used for processing %g and %G fields:
exponent,
//used for keeping track of width and precision:
width,
precision,
//used for holding temporary values:
tmp_num,
//used for processing %{} and %<> fileds:
hash_parameter_key,
closing_brace_char,
//used for processing %b, %B, %o, %x, and %X fields:
base_number,
base_prefix,
base_neg_zero_regex,
base_neg_zero_digit,
//used for processing arguments:
next_arg,
seq_arg_num = 1,
pos_arg_num = 0,
//used for keeping track of flags:
flags,
FNONE = 0,
FSHARP = 1,
FMINUS = 2,
FPLUS = 4,
FZERO = 8,
FSPACE = 16,
FWIDTH = 32,
FPREC = 64,
FPREC0 = 128;
function CHECK_FOR_FLAGS() {
if (flags&FWIDTH) { self.$raise($scope.get('ArgumentError'), "flag after width") }
if (flags&FPREC0) { self.$raise($scope.get('ArgumentError'), "flag after precision") }
}
function CHECK_FOR_WIDTH() {
if (flags&FWIDTH) { self.$raise($scope.get('ArgumentError'), "width given twice") }
if (flags&FPREC0) { self.$raise($scope.get('ArgumentError'), "width after precision") }
}
function GET_NTH_ARG(num) {
if (num >= args.length) { self.$raise($scope.get('ArgumentError'), "too few arguments") }
return args[num];
}
function GET_NEXT_ARG() {
switch (pos_arg_num) {
case -1: self.$raise($scope.get('ArgumentError'), "unnumbered(" + (seq_arg_num) + ") mixed with numbered")
case -2: self.$raise($scope.get('ArgumentError'), "unnumbered(" + (seq_arg_num) + ") mixed with named")
}
pos_arg_num = seq_arg_num++;
return GET_NTH_ARG(pos_arg_num - 1);
}
function GET_POS_ARG(num) {
if (pos_arg_num > 0) {
self.$raise($scope.get('ArgumentError'), "numbered(" + (num) + ") after unnumbered(" + (pos_arg_num) + ")")
}
if (pos_arg_num === -2) {
self.$raise($scope.get('ArgumentError'), "numbered(" + (num) + ") after named")
}
if (num < 1) {
self.$raise($scope.get('ArgumentError'), "invalid index - " + (num) + "$")
}
pos_arg_num = -1;
return GET_NTH_ARG(num - 1);
}
function GET_ARG() {
return (next_arg === undefined ? GET_NEXT_ARG() : next_arg);
}
function READ_NUM(label) {
var num, str = '';
for (;; i++) {
if (i === len) {
self.$raise($scope.get('ArgumentError'), "malformed format string - %*[0-9]")
}
if (format_string.charCodeAt(i) < 48 || format_string.charCodeAt(i) > 57) {
i--;
num = parseInt(str, 10) || 0;
if (num > 2147483647) {
self.$raise($scope.get('ArgumentError'), "" + (label) + " too big")
}
return num;
}
str += format_string.charAt(i);
}
}
function READ_NUM_AFTER_ASTER(label) {
var arg, num = READ_NUM(label);
if (format_string.charAt(i + 1) === '$') {
i++;
arg = GET_POS_ARG(num);
} else {
arg = GET_NEXT_ARG();
}
return (arg).$to_int();
}
for (i = format_string.indexOf('%'); i !== -1; i = format_string.indexOf('%', i)) {
str = undefined;
flags = FNONE;
width = -1;
precision = -1;
next_arg = undefined;
end_slice = i;
i++;
switch (format_string.charAt(i)) {
case '%':
begin_slice = i;
case '':
case '\n':
case '\0':
i++;
continue;
}
format_sequence: for (; i < len; i++) {
switch (format_string.charAt(i)) {
case ' ':
CHECK_FOR_FLAGS();
flags |= FSPACE;
continue format_sequence;
case '#':
CHECK_FOR_FLAGS();
flags |= FSHARP;
continue format_sequence;
case '+':
CHECK_FOR_FLAGS();
flags |= FPLUS;
continue format_sequence;
case '-':
CHECK_FOR_FLAGS();
flags |= FMINUS;
continue format_sequence;
case '0':
CHECK_FOR_FLAGS();
flags |= FZERO;
continue format_sequence;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
tmp_num = READ_NUM('width');
if (format_string.charAt(i + 1) === '$') {
if (i + 2 === len) {
str = '%';
i++;
break format_sequence;
}
if (next_arg !== undefined) {
self.$raise($scope.get('ArgumentError'), "value given twice - %" + (tmp_num) + "$")
}
next_arg = GET_POS_ARG(tmp_num);
i++;
} else {
CHECK_FOR_WIDTH();
flags |= FWIDTH;
width = tmp_num;
}
continue format_sequence;
case '<':
case '\{':
closing_brace_char = (format_string.charAt(i) === '<' ? '>' : '\}');
hash_parameter_key = '';
i++;
for (;; i++) {
if (i === len) {
self.$raise($scope.get('ArgumentError'), "malformed name - unmatched parenthesis")
}
if (format_string.charAt(i) === closing_brace_char) {
if (pos_arg_num > 0) {
self.$raise($scope.get('ArgumentError'), "named " + (hash_parameter_key) + " after unnumbered(" + (pos_arg_num) + ")")
}
if (pos_arg_num === -1) {
self.$raise($scope.get('ArgumentError'), "named " + (hash_parameter_key) + " after numbered")
}
pos_arg_num = -2;
if (args[0] === undefined || !args[0].$$is_hash) {
self.$raise($scope.get('ArgumentError'), "one hash required")
}
next_arg = (args[0]).$fetch(hash_parameter_key);
if (closing_brace_char === '>') {
continue format_sequence;
} else {
str = next_arg.toString();
if (precision !== -1) { str = str.slice(0, precision); }
if (flags&FMINUS) {
while (str.length < width) { str = str + ' '; }
} else {
while (str.length < width) { str = ' ' + str; }
}
break format_sequence;
}
}
hash_parameter_key += format_string.charAt(i);
}
case '*':
i++;
CHECK_FOR_WIDTH();
flags |= FWIDTH;
width = READ_NUM_AFTER_ASTER('width');
if (width < 0) {
flags |= FMINUS;
width = -width;
}
continue format_sequence;
case '.':
if (flags&FPREC0) {
self.$raise($scope.get('ArgumentError'), "precision given twice")
}
flags |= FPREC|FPREC0;
precision = 0;
i++;
if (format_string.charAt(i) === '*') {
i++;
precision = READ_NUM_AFTER_ASTER('precision');
if (precision < 0) {
flags &= ~FPREC;
}
continue format_sequence;
}
precision = READ_NUM('precision');
continue format_sequence;
case 'd':
case 'i':
case 'u':
arg = self.$Integer(GET_ARG());
if (arg >= 0) {
str = arg.toString();
while (str.length < precision) { str = '0' + str; }
if (flags&FMINUS) {
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && precision === -1) {
while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
} else {
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
while (str.length < width) { str = ' ' + str; }
}
}
} else {
str = (-arg).toString();
while (str.length < precision) { str = '0' + str; }
if (flags&FMINUS) {
str = '-' + str;
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && precision === -1) {
while (str.length < width - 1) { str = '0' + str; }
str = '-' + str;
} else {
str = '-' + str;
while (str.length < width) { str = ' ' + str; }
}
}
}
break format_sequence;
case 'b':
case 'B':
case 'o':
case 'x':
case 'X':
switch (format_string.charAt(i)) {
case 'b':
case 'B':
base_number = 2;
base_prefix = '0b';
base_neg_zero_regex = /^1+/;
base_neg_zero_digit = '1';
break;
case 'o':
base_number = 8;
base_prefix = '0';
base_neg_zero_regex = /^3?7+/;
base_neg_zero_digit = '7';
break;
case 'x':
case 'X':
base_number = 16;
base_prefix = '0x';
base_neg_zero_regex = /^f+/;
base_neg_zero_digit = 'f';
break;
}
arg = self.$Integer(GET_ARG());
if (arg >= 0) {
str = arg.toString(base_number);
while (str.length < precision) { str = '0' + str; }
if (flags&FMINUS) {
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && precision === -1) {
while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0) - ((flags&FSHARP && arg !== 0) ? base_prefix.length : 0)) { str = '0' + str; }
if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
} else {
if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
while (str.length < width) { str = ' ' + str; }
}
}
} else {
if (flags&FPLUS || flags&FSPACE) {
str = (-arg).toString(base_number);
while (str.length < precision) { str = '0' + str; }
if (flags&FMINUS) {
if (flags&FSHARP) { str = base_prefix + str; }
str = '-' + str;
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && precision === -1) {
while (str.length < width - 1 - (flags&FSHARP ? 2 : 0)) { str = '0' + str; }
if (flags&FSHARP) { str = base_prefix + str; }
str = '-' + str;
} else {
if (flags&FSHARP) { str = base_prefix + str; }
str = '-' + str;
while (str.length < width) { str = ' ' + str; }
}
}
} else {
str = (arg >>> 0).toString(base_number).replace(base_neg_zero_regex, base_neg_zero_digit);
while (str.length < precision - 2) { str = base_neg_zero_digit + str; }
if (flags&FMINUS) {
str = '..' + str;
if (flags&FSHARP) { str = base_prefix + str; }
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && precision === -1) {
while (str.length < width - 2 - (flags&FSHARP ? base_prefix.length : 0)) { str = base_neg_zero_digit + str; }
str = '..' + str;
if (flags&FSHARP) { str = base_prefix + str; }
} else {
str = '..' + str;
if (flags&FSHARP) { str = base_prefix + str; }
while (str.length < width) { str = ' ' + str; }
}
}
}
}
if (format_string.charAt(i) === format_string.charAt(i).toUpperCase()) {
str = str.toUpperCase();
}
break format_sequence;
case 'f':
case 'e':
case 'E':
case 'g':
case 'G':
arg = self.$Float(GET_ARG());
if (arg >= 0 || isNaN(arg)) {
if (arg === Infinity) {
str = 'Inf';
} else {
switch (format_string.charAt(i)) {
case 'f':
str = arg.toFixed(precision === -1 ? 6 : precision);
break;
case 'e':
case 'E':
str = arg.toExponential(precision === -1 ? 6 : precision);
break;
case 'g':
case 'G':
str = arg.toExponential();
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);
}
break;
}
}
if (flags&FMINUS) {
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && arg !== Infinity && !isNaN(arg)) {
while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
} else {
if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
while (str.length < width) { str = ' ' + str; }
}
}
} else {
if (arg === -Infinity) {
str = 'Inf';
} else {
switch (format_string.charAt(i)) {
case 'f':
str = (-arg).toFixed(precision === -1 ? 6 : precision);
break;
case 'e':
case 'E':
str = (-arg).toExponential(precision === -1 ? 6 : precision);
break;
case 'g':
case 'G':
str = (-arg).toExponential();
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);
}
break;
}
}
if (flags&FMINUS) {
str = '-' + str;
while (str.length < width) { str = str + ' '; }
} else {
if (flags&FZERO && arg !== -Infinity) {
while (str.length < width - 1) { str = '0' + str; }
str = '-' + str;
} else {
str = '-' + str;
while (str.length < width) { str = ' ' + str; }
}
}
}
if (format_string.charAt(i) === format_string.charAt(i).toUpperCase() && arg !== Infinity && arg !== -Infinity && !isNaN(arg)) {
str = str.toUpperCase();
}
str = str.replace(/([eE][-+]?)([0-9])$/, '$10$2');
break format_sequence;
case 'a':
case 'A':
// Not implemented because there are no specs for this field type.
self.$raise($scope.get('NotImplementedError'), "`A` and `a` format field types are not implemented in Opal yet")
case 'c':
arg = GET_ARG();
if ((arg)['$respond_to?']("to_ary")) { arg = (arg).$to_ary()[0]; }
if ((arg)['$respond_to?']("to_str")) {
str = (arg).$to_str();
} else {
str = String.fromCharCode($scope.get('Opal').$coerce_to(arg, $scope.get('Integer'), "to_int"));
}
if (str.length !== 1) {
self.$raise($scope.get('ArgumentError'), "%c requires a character")
}
if (flags&FMINUS) {
while (str.length < width) { str = str + ' '; }
} else {
while (str.length < width) { str = ' ' + str; }
}
break format_sequence;
case 'p':
str = (GET_ARG()).$inspect();
if (precision !== -1) { str = str.slice(0, precision); }
if (flags&FMINUS) {
while (str.length < width) { str = str + ' '; }
} else {
while (str.length < width) { str = ' ' + str; }
}
break format_sequence;
case 's':
str = (GET_ARG()).$to_s();
if (precision !== -1) { str = str.slice(0, precision); }
if (flags&FMINUS) {
while (str.length < width) { str = str + ' '; }
} else {
while (str.length < width) { str = ' ' + str; }
}
break format_sequence;
default:
self.$raise($scope.get('ArgumentError'), "malformed format string - %" + (format_string.charAt(i)))
}
}
if (str === undefined) {
self.$raise($scope.get('ArgumentError'), "malformed format string - %")
}
result += format_string.slice(begin_slice, end_slice) + str;
begin_slice = i + 1;
}
if ($gvars.DEBUG && pos_arg_num >= 0 && seq_arg_num < args.length) {
self.$raise($scope.get('ArgumentError'), "too many arguments for format string")
}
return result + format_string.slice(begin_slice);
;
}, TMP_23.$$arity = -2);
Opal.defn(self, '$hash', TMP_24 = function $$hash() {
var self = this;
return self.$__id__();
}, TMP_24.$$arity = 0);
Opal.defn(self, '$initialize_copy', TMP_25 = function $$initialize_copy(other) {
var self = this;
return nil;
}, TMP_25.$$arity = 1);
Opal.defn(self, '$inspect', TMP_26 = function $$inspect() {
var self = this;
return self.$to_s();
}, TMP_26.$$arity = 0);
Opal.defn(self, '$instance_of?', TMP_27 = 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;
;
}, TMP_27.$$arity = 1);
Opal.defn(self, '$instance_variable_defined?', TMP_28 = function(name) {
var self = this;
name = $scope.get('Opal')['$instance_variable_name!'](name);
return Opal.hasOwnProperty.call(self, name.substr(1));
}, TMP_28.$$arity = 1);
Opal.defn(self, '$instance_variable_get', TMP_29 = function $$instance_variable_get(name) {
var self = this;
name = $scope.get('Opal')['$instance_variable_name!'](name);
var ivar = self[Opal.ivar(name.substr(1))];
return ivar == null ? nil : ivar;
}, TMP_29.$$arity = 1);
Opal.defn(self, '$instance_variable_set', TMP_30 = function $$instance_variable_set(name, value) {
var self = this;
name = $scope.get('Opal')['$instance_variable_name!'](name);
return self[Opal.ivar(name.substr(1))] = value;
}, TMP_30.$$arity = 2);
Opal.defn(self, '$remove_instance_variable', TMP_31 = function $$remove_instance_variable(name) {
var self = this;
name = $scope.get('Opal')['$instance_variable_name!'](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");
}, TMP_31.$$arity = 1);
Opal.defn(self, '$instance_variables', TMP_32 = function $$instance_variables() {
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;
}, TMP_32.$$arity = 0);
Opal.defn(self, '$Integer', TMP_33 = function $$Integer(value, base) {
var self = this;
var i, str, base_digits;
if (!value.$$is_string) {
if (base !== undefined) {
self.$raise($scope.get('ArgumentError'), "base specified for non string value")
}
if (value === nil) {
self.$raise($scope.get('TypeError'), "can't convert nil into Integer")
}
if (value.$$is_number) {
if (value === Infinity || value === -Infinity || isNaN(value)) {
self.$raise($scope.get('FloatDomainError'), value)
}
return Math.floor(value);
}
if (value['$respond_to?']("to_int")) {
i = value.$to_int();
if (i !== nil) {
return i;
}
}
return $scope.get('Opal')['$coerce_to!'](value, $scope.get('Integer'), "to_i");
}
if (base === undefined) {
base = 0;
} else {
base = $scope.get('Opal').$coerce_to(base, $scope.get('Integer'), "to_int");
if (base === 1 || base < 0 || base > 36) {
self.$raise($scope.get('ArgumentError'), "invalid radix " + (base))
}
}
str = value.toLowerCase();
str = str.replace(/(\d)_(?=\d)/g, '$1');
str = str.replace(/^(\s*[+-]?)(0[bodx]?)/, function (_, head, flag) {
switch (flag) {
case '0b':
if (base === 0 || base === 2) {
base = 2;
return head;
}
case '0':
case '0o':
if (base === 0 || base === 8) {
base = 8;
return head;
}
case '0d':
if (base === 0 || base === 10) {
base = 10;
return head;
}
case '0x':
if (base === 0 || base === 16) {
base = 16;
return head;
}
}
self.$raise($scope.get('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"")
});
base = (base === 0 ? 10 : base);
base_digits = '0-' + (base <= 10 ? base - 1 : '9a-' + String.fromCharCode(97 + (base - 11)));
if (!(new RegExp('^\\s*[+-]?[' + base_digits + ']+\\s*$')).test(str)) {
self.$raise($scope.get('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"")
}
i = parseInt(str, base);
if (isNaN(i)) {
self.$raise($scope.get('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"")
}
return i;
;
}, TMP_33.$$arity = -2);
Opal.defn(self, '$Float', TMP_34 = function $$Float(value) {
var self = this;
var str;
if (value === nil) {
self.$raise($scope.get('TypeError'), "can't convert nil into Float")
}
if (value.$$is_string) {
str = value.toString();
str = str.replace(/(\d)_(?=\d)/g, '$1');
//Special case for hex strings only:
if (/^\s*[-+]?0[xX][0-9a-fA-F]+\s*$/.test(str)) {
return self.$Integer(str);
}
if (!/^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/.test(str)) {
self.$raise($scope.get('ArgumentError'), "invalid value for Float(): \"" + (value) + "\"")
}
return parseFloat(str);
}
return $scope.get('Opal')['$coerce_to!'](value, $scope.get('Float'), "to_f");
}, TMP_34.$$arity = 1);
Opal.defn(self, '$Hash', TMP_35 = function $$Hash(arg) {
var $a, $b, self = this;
if ((($a = ((($b = arg['$nil?']()) !== false && $b !== nil && $b != null) ? $b : arg['$==']([]))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return $hash2([], {})};
if ((($a = $scope.get('Hash')['$==='](arg)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return arg};
return $scope.get('Opal')['$coerce_to!'](arg, $scope.get('Hash'), "to_hash");
}, TMP_35.$$arity = 1);
Opal.defn(self, '$is_a?', TMP_36 = 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);
;
}, TMP_36.$$arity = 1);
Opal.alias(self, 'kind_of?', 'is_a?');
Opal.defn(self, '$lambda', TMP_37 = function $$lambda() {
var self = this, $iter = TMP_37.$$p, block = $iter || nil;
TMP_37.$$p = null;
block.$$is_lambda = true;
return block;
}, TMP_37.$$arity = 0);
Opal.defn(self, '$load', TMP_38 = function $$load(file) {
var self = this;
file = $scope.get('Opal')['$coerce_to!'](file, $scope.get('String'), "to_str");
return Opal.load(file);
}, TMP_38.$$arity = 1);
Opal.defn(self, '$loop', TMP_39 = function $$loop() {
var self = this, $iter = TMP_39.$$p, $yield = $iter || nil;
TMP_39.$$p = null;
if (($yield !== nil)) {
} else {
return self.$enum_for("loop")
};
while (true) {
Opal.yieldX($yield, [])
}
;
return self;
}, TMP_39.$$arity = 0);
Opal.defn(self, '$nil?', TMP_40 = function() {
var self = this;
return false;
}, TMP_40.$$arity = 0);
Opal.alias(self, 'object_id', '__id__');
Opal.defn(self, '$printf', TMP_41 = function $$printf($a_rest) {
var $b, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($b = $rb_gt(args.$length(), 0)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$print(($b = self).$format.apply($b, Opal.to_a(args)))};
return nil;
}, TMP_41.$$arity = -1);
Opal.defn(self, '$proc', TMP_42 = function $$proc() {
var self = this, $iter = TMP_42.$$p, block = $iter || nil;
TMP_42.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to create Proc object without a block")
};
block.$$is_lambda = false;
return block;
}, TMP_42.$$arity = 0);
Opal.defn(self, '$puts', TMP_43 = function $$puts($a_rest) {
var $b, self = this, strs;
if ($gvars.stdout == null) $gvars.stdout = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
strs = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
strs[$arg_idx - 0] = arguments[$arg_idx];
}
return ($b = $gvars.stdout).$puts.apply($b, Opal.to_a(strs));
}, TMP_43.$$arity = -1);
Opal.defn(self, '$p', TMP_45 = function $$p($a_rest) {
var $b, $c, TMP_44, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
($b = ($c = args).$each, $b.$$p = (TMP_44 = function(obj){var self = TMP_44.$$s || this;
if ($gvars.stdout == null) $gvars.stdout = nil;
if (obj == null) obj = nil;
return $gvars.stdout.$puts(obj.$inspect())}, TMP_44.$$s = self, TMP_44.$$arity = 1, TMP_44), $b).call($c);
if ((($b = $rb_le(args.$length(), 1)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return args['$[]'](0)
} else {
return args
};
}, TMP_45.$$arity = -1);
Opal.defn(self, '$print', TMP_46 = function $$print($a_rest) {
var $b, self = this, strs;
if ($gvars.stdout == null) $gvars.stdout = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
strs = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
strs[$arg_idx - 0] = arguments[$arg_idx];
}
return ($b = $gvars.stdout).$print.apply($b, Opal.to_a(strs));
}, TMP_46.$$arity = -1);
Opal.defn(self, '$warn', TMP_47 = function $$warn($a_rest) {
var $b, $c, self = this, strs;
if ($gvars.VERBOSE == null) $gvars.VERBOSE = nil;
if ($gvars.stderr == null) $gvars.stderr = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
strs = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
strs[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($b = ((($c = $gvars.VERBOSE['$nil?']()) !== false && $c !== nil && $c != null) ? $c : strs['$empty?']())) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return nil
} else {
return ($b = $gvars.stderr).$puts.apply($b, Opal.to_a(strs))
};
}, TMP_47.$$arity = -1);
Opal.defn(self, '$raise', TMP_48 = function $$raise(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["!"] !== nil) {
throw $gvars["!"];
}
if (exception == null) {
exception = $scope.get('RuntimeError').$new();
}
else if (exception.$$is_string) {
exception = $scope.get('RuntimeError').$new(exception);
}
// 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;
throw exception;
;
}, TMP_48.$$arity = -1);
Opal.alias(self, 'fail', 'raise');
Opal.defn(self, '$rand', TMP_49 = function $$rand(max) {
var self = this;
if (max === undefined) {
return Math.random();
}
else if (max.$$is_range) {
var min = max.begin, range = max.end - min;
if(!max.exclude) range++;
return self.$rand(range) + min;
}
else {
return Math.floor(Math.random() *
Math.abs($scope.get('Opal').$coerce_to(max, $scope.get('Integer'), "to_int")));
}
}, TMP_49.$$arity = -1);
Opal.defn(self, '$respond_to?', TMP_50 = function(name, include_all) {
var $a, self = this;
if (include_all == null) {
include_all = false;
}
if ((($a = self['$respond_to_missing?'](name, include_all)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return true};
var body = self['$' + name];
if (typeof(body) === "function" && !body.$$stub) {
return true;
}
return false;
}, TMP_50.$$arity = -2);
Opal.defn(self, '$respond_to_missing?', TMP_51 = function(method_name, include_all) {
var self = this;
if (include_all == null) {
include_all = false;
}
return false;
}, TMP_51.$$arity = -2);
Opal.defn(self, '$require', TMP_52 = function $$require(file) {
var self = this;
file = $scope.get('Opal')['$coerce_to!'](file, $scope.get('String'), "to_str");
return Opal.require(file);
}, TMP_52.$$arity = 1);
Opal.defn(self, '$require_relative', TMP_53 = function $$require_relative(file) {
var self = this;
$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(file);
}, TMP_53.$$arity = 1);
Opal.defn(self, '$require_tree', TMP_54 = function $$require_tree(path) {
var self = this;
path = $scope.get('File').$expand_path(path);
if (path['$=='](".")) {
path = ""};
for (var name in Opal.modules) {
if ((name)['$start_with?'](path)) {
Opal.require(name);
}
}
;
return nil;
}, TMP_54.$$arity = 1);
Opal.alias(self, 'send', '__send__');
Opal.alias(self, 'public_send', '__send__');
Opal.defn(self, '$singleton_class', TMP_55 = function $$singleton_class() {
var self = this;
return Opal.get_singleton_class(self);
}, TMP_55.$$arity = 0);
Opal.defn(self, '$sleep', TMP_56 = function $$sleep(seconds) {
var self = this;
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;
;
}, TMP_56.$$arity = -1);
Opal.alias(self, 'sprintf', 'format');
Opal.alias(self, 'srand', 'rand');
Opal.defn(self, '$String', TMP_57 = function $$String(str) {
var $a, self = this;
return ((($a = $scope.get('Opal')['$coerce_to?'](str, $scope.get('String'), "to_str")) !== false && $a !== nil && $a != null) ? $a : $scope.get('Opal')['$coerce_to!'](str, $scope.get('String'), "to_s"));
}, TMP_57.$$arity = 1);
Opal.defn(self, '$tap', TMP_58 = function $$tap() {
var self = this, $iter = TMP_58.$$p, block = $iter || nil;
TMP_58.$$p = null;
Opal.yield1(block, self);
return self;
}, TMP_58.$$arity = 0);
Opal.defn(self, '$to_proc', TMP_59 = function $$to_proc() {
var self = this;
return self;
}, TMP_59.$$arity = 0);
Opal.defn(self, '$to_s', TMP_60 = function $$to_s() {
var self = this;
return "#<" + (self.$class()) + ":0x" + (self.$__id__().$to_s(16)) + ">";
}, TMP_60.$$arity = 0);
Opal.defn(self, '$catch', TMP_61 = function(sym) {
var self = this, $iter = TMP_61.$$p, $yield = $iter || nil, e = nil;
TMP_61.$$p = null;
try {
return Opal.yieldX($yield, []);
} catch ($err) {
if (Opal.rescue($err, [$scope.get('UncaughtThrowError')])) {e = $err;
try {
if (e.$sym()['$=='](sym)) {
return e.$arg()};
return self.$raise();
} finally { Opal.pop_exception() }
} else { throw $err; }
};
}, TMP_61.$$arity = 1);
Opal.defn(self, '$throw', TMP_62 = function($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return self.$raise($scope.get('UncaughtThrowError').$new(args));
}, TMP_62.$$arity = -1);
Opal.defn(self, '$open', TMP_63 = function $$open($a_rest) {
var $b, $c, self = this, args, $iter = TMP_63.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_63.$$p = null;
return ($b = ($c = $scope.get('File')).$open, $b.$$p = block.$to_proc(), $b).apply($c, Opal.to_a(args));
}, TMP_63.$$arity = -1);
})($scope.base);
return (function($base, $super) {
function $Object(){};
var self = $Object = $klass($base, $super, 'Object', $Object);
var def = self.$$proto, $scope = self.$$scope;
return self.$include($scope.get('Kernel'))
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/error"] = function(Opal) {
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(['$new', '$clone', '$to_s', '$empty?', '$class', '$attr_reader', '$[]', '$>', '$length', '$inspect']);
(function($base, $super) {
function $Exception(){};
var self = $Exception = $klass($base, $super, 'Exception', $Exception);
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8;
def.message = nil;
Opal.defs(self, '$new', TMP_1 = function($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
var message = (args.length > 0) ? args[0] : nil;
var err = new self.$$alloc(message);
if (Error.captureStackTrace) {
Error.captureStackTrace(err);
}
err.name = self.$$name;
err.$initialize.apply(err, args);
return err;
}, TMP_1.$$arity = -1);
Opal.defs(self, '$exception', TMP_2 = function $$exception($a_rest) {
var $b, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return ($b = self).$new.apply($b, Opal.to_a(args));
}, TMP_2.$$arity = -1);
Opal.defn(self, '$initialize', TMP_3 = function $$initialize($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return self.message = (args.length > 0) ? args[0] : nil;
}, TMP_3.$$arity = -1);
Opal.defn(self, '$backtrace', TMP_4 = function $$backtrace() {
var self = this;
var backtrace = self.stack;
if (typeof(backtrace) === 'string') {
return backtrace.split("\n").slice(0, 15);
}
else if (backtrace) {
return backtrace.slice(0, 15);
}
return [];
}, TMP_4.$$arity = 0);
Opal.defn(self, '$exception', TMP_5 = function $$exception(str) {
var self = this;
if (str == null) {
str = nil;
}
if (str === nil || self === str) {
return self;
}
var cloned = self.$clone();
cloned.message = str;
return cloned;
}, TMP_5.$$arity = -1);
Opal.defn(self, '$message', TMP_6 = function $$message() {
var self = this;
return self.$to_s();
}, TMP_6.$$arity = 0);
Opal.defn(self, '$inspect', TMP_7 = function $$inspect() {
var $a, self = this, as_str = nil;
as_str = self.$to_s();
if ((($a = as_str['$empty?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$class().$to_s()
} else {
return "#<" + (self.$class().$to_s()) + ": " + (self.$to_s()) + ">"
};
}, TMP_7.$$arity = 0);
return (Opal.defn(self, '$to_s', TMP_8 = function $$to_s() {
var $a, $b, self = this;
return ((($a = (($b = self.message, $b !== false && $b !== nil && $b != null ?self.message.$to_s() : $b))) !== false && $a !== nil && $a != null) ? $a : self.$class().$to_s());
}, TMP_8.$$arity = 0), 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;
})($scope.base, $scope.get('Exception'));
(function($base, $super) {
function $SyntaxError(){};
var self = $SyntaxError = $klass($base, $super, 'SyntaxError', $SyntaxError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('ScriptError'));
(function($base, $super) {
function $LoadError(){};
var self = $LoadError = $klass($base, $super, 'LoadError', $LoadError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('ScriptError'));
(function($base, $super) {
function $NotImplementedError(){};
var self = $NotImplementedError = $klass($base, $super, 'NotImplementedError', $NotImplementedError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('ScriptError'));
(function($base, $super) {
function $SystemExit(){};
var self = $SystemExit = $klass($base, $super, 'SystemExit', $SystemExit);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('Exception'));
(function($base, $super) {
function $NoMemoryError(){};
var self = $NoMemoryError = $klass($base, $super, 'NoMemoryError', $NoMemoryError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('Exception'));
(function($base, $super) {
function $SignalException(){};
var self = $SignalException = $klass($base, $super, 'SignalException', $SignalException);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('Exception'));
(function($base, $super) {
function $Interrupt(){};
var self = $Interrupt = $klass($base, $super, 'Interrupt', $Interrupt);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($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);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($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);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $NoMethodError(){};
var self = $NoMethodError = $klass($base, $super, 'NoMethodError', $NoMethodError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('NameError'));
(function($base, $super) {
function $RuntimeError(){};
var self = $RuntimeError = $klass($base, $super, 'RuntimeError', $RuntimeError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $LocalJumpError(){};
var self = $LocalJumpError = $klass($base, $super, 'LocalJumpError', $LocalJumpError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $TypeError(){};
var self = $TypeError = $klass($base, $super, 'TypeError', $TypeError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $ArgumentError(){};
var self = $ArgumentError = $klass($base, $super, 'ArgumentError', $ArgumentError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $IndexError(){};
var self = $IndexError = $klass($base, $super, 'IndexError', $IndexError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $StopIteration(){};
var self = $StopIteration = $klass($base, $super, 'StopIteration', $StopIteration);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('IndexError'));
(function($base, $super) {
function $KeyError(){};
var self = $KeyError = $klass($base, $super, 'KeyError', $KeyError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('IndexError'));
(function($base, $super) {
function $RangeError(){};
var self = $RangeError = $klass($base, $super, 'RangeError', $RangeError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $FloatDomainError(){};
var self = $FloatDomainError = $klass($base, $super, 'FloatDomainError', $FloatDomainError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('RangeError'));
(function($base, $super) {
function $IOError(){};
var self = $IOError = $klass($base, $super, 'IOError', $IOError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $SystemCallError(){};
var self = $SystemCallError = $klass($base, $super, 'SystemCallError', $SystemCallError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base) {
var $Errno, self = $Errno = $module($base, 'Errno');
var def = self.$$proto, $scope = self.$$scope;
(function($base, $super) {
function $EINVAL(){};
var self = $EINVAL = $klass($base, $super, 'EINVAL', $EINVAL);
var def = self.$$proto, $scope = self.$$scope, TMP_9;
return (Opal.defs(self, '$new', TMP_9 = function() {
var $a, $b, self = this, $iter = TMP_9.$$p, $yield = $iter || nil;
TMP_9.$$p = null;
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'new', TMP_9, false, $EINVAL)), $a.$$p = null, $a).call($b, "Invalid argument");
}, TMP_9.$$arity = 0), nil) && 'new'
})($scope.base, $scope.get('SystemCallError'))
})($scope.base);
(function($base, $super) {
function $UncaughtThrowError(){};
var self = $UncaughtThrowError = $klass($base, $super, 'UncaughtThrowError', $UncaughtThrowError);
var def = self.$$proto, $scope = self.$$scope, TMP_10;
def.sym = nil;
self.$attr_reader("sym", "arg");
return (Opal.defn(self, '$initialize', TMP_10 = function $$initialize(args) {
var $a, $b, self = this, $iter = TMP_10.$$p, $yield = $iter || nil;
TMP_10.$$p = null;
self.sym = args['$[]'](0);
if ((($a = $rb_gt(args.$length(), 1)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.arg = args['$[]'](1)};
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'initialize', TMP_10, false)), $a.$$p = null, $a).call($b, "uncaught throw " + (self.sym.$inspect()));
}, TMP_10.$$arity = 1), nil) && 'initialize';
})($scope.base, $scope.get('ArgumentError'));
(function($base, $super) {
function $NameError(){};
var self = $NameError = $klass($base, $super, 'NameError', $NameError);
var def = self.$$proto, $scope = self.$$scope, TMP_11;
self.$attr_reader("name");
return (Opal.defn(self, '$initialize', TMP_11 = function $$initialize(message, name) {
var $a, $b, self = this, $iter = TMP_11.$$p, $yield = $iter || nil;
if (name == null) {
name = nil;
}
TMP_11.$$p = null;
($a = ($b = self, Opal.find_super_dispatcher(self, 'initialize', TMP_11, false)), $a.$$p = null, $a).call($b, message);
return self.name = name;
}, TMP_11.$$arity = -2), nil) && 'initialize';
})($scope.base, null);
return (function($base, $super) {
function $NoMethodError(){};
var self = $NoMethodError = $klass($base, $super, 'NoMethodError', $NoMethodError);
var def = self.$$proto, $scope = self.$$scope, TMP_12;
self.$attr_reader("args");
return (Opal.defn(self, '$initialize', TMP_12 = function $$initialize(message, name, args) {
var $a, $b, self = this, $iter = TMP_12.$$p, $yield = $iter || nil;
if (name == null) {
name = nil;
}
if (args == null) {
args = [];
}
TMP_12.$$p = null;
($a = ($b = self, Opal.find_super_dispatcher(self, 'initialize', TMP_12, false)), $a.$$p = null, $a).call($b, message, name);
return self.args = args;
}, TMP_12.$$arity = -2), nil) && 'initialize';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/constants"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
Opal.cdecl($scope, 'RUBY_PLATFORM', "opal");
Opal.cdecl($scope, 'RUBY_ENGINE', "opal");
Opal.cdecl($scope, 'RUBY_VERSION', "2.2.5");
Opal.cdecl($scope, 'RUBY_ENGINE_VERSION', "0.10.3");
Opal.cdecl($scope, 'RUBY_RELEASE_DATE', "2016-10-31");
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')) + ")");
};
/* Generated by Opal 0.10.3 */
Opal.modules["opal/base"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
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");
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/nil"] = function(Opal) {
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(['$raise', '$class', '$new', '$>', '$length', '$Rational']);
(function($base, $super) {
function $NilClass(){};
var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass);
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;
def.$$meta = self;
Opal.defn(self, '$!', TMP_1 = function() {
var self = this;
return true;
}, TMP_1.$$arity = 0);
Opal.defn(self, '$&', TMP_2 = function(other) {
var self = this;
return false;
}, TMP_2.$$arity = 1);
Opal.defn(self, '$|', TMP_3 = function(other) {
var self = this;
return other !== false && other !== nil;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$^', TMP_4 = function(other) {
var self = this;
return other !== false && other !== nil;
}, TMP_4.$$arity = 1);
Opal.defn(self, '$==', TMP_5 = function(other) {
var self = this;
return other === nil;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$dup', TMP_6 = function $$dup() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class()));
}, TMP_6.$$arity = 0);
Opal.defn(self, '$clone', TMP_7 = function $$clone() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class()));
}, TMP_7.$$arity = 0);
Opal.defn(self, '$inspect', TMP_8 = function $$inspect() {
var self = this;
return "nil";
}, TMP_8.$$arity = 0);
Opal.defn(self, '$nil?', TMP_9 = function() {
var self = this;
return true;
}, TMP_9.$$arity = 0);
Opal.defn(self, '$singleton_class', TMP_10 = function $$singleton_class() {
var self = this;
return $scope.get('NilClass');
}, TMP_10.$$arity = 0);
Opal.defn(self, '$to_a', TMP_11 = function $$to_a() {
var self = this;
return [];
}, TMP_11.$$arity = 0);
Opal.defn(self, '$to_h', TMP_12 = function $$to_h() {
var self = this;
return Opal.hash();
}, TMP_12.$$arity = 0);
Opal.defn(self, '$to_i', TMP_13 = function $$to_i() {
var self = this;
return 0;
}, TMP_13.$$arity = 0);
Opal.alias(self, 'to_f', 'to_i');
Opal.defn(self, '$to_s', TMP_14 = function $$to_s() {
var self = this;
return "";
}, TMP_14.$$arity = 0);
Opal.defn(self, '$to_c', TMP_15 = function $$to_c() {
var self = this;
return $scope.get('Complex').$new(0, 0);
}, TMP_15.$$arity = 0);
Opal.defn(self, '$rationalize', TMP_16 = function $$rationalize($a_rest) {
var $b, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($b = $rb_gt(args.$length(), 1)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$raise($scope.get('ArgumentError'))};
return self.$Rational(0, 1);
}, TMP_16.$$arity = -1);
Opal.defn(self, '$to_r', TMP_17 = function $$to_r() {
var self = this;
return self.$Rational(0, 1);
}, TMP_17.$$arity = 0);
return (Opal.defn(self, '$instance_variables', TMP_18 = function $$instance_variables() {
var self = this;
return [];
}, TMP_18.$$arity = 0), nil) && 'instance_variables';
})($scope.base, null);
return Opal.cdecl($scope, 'NIL', nil);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/boolean"] = function(Opal) {
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, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10;
def.$$is_boolean = true;
def.$$meta = self;
Opal.defn(self, '$__id__', TMP_1 = function $$__id__() {
var self = this;
return self.valueOf() ? 2 : 0;
}, TMP_1.$$arity = 0);
Opal.alias(self, 'object_id', '__id__');
Opal.defn(self, '$!', TMP_2 = function() {
var self = this;
return self != true;
}, TMP_2.$$arity = 0);
Opal.defn(self, '$&', TMP_3 = function(other) {
var self = this;
return (self == true) ? (other !== false && other !== nil) : false;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$|', TMP_4 = function(other) {
var self = this;
return (self == true) ? true : (other !== false && other !== nil);
}, TMP_4.$$arity = 1);
Opal.defn(self, '$^', TMP_5 = function(other) {
var self = this;
return (self == true) ? (other === false || other === nil) : (other !== false && other !== nil);
}, TMP_5.$$arity = 1);
Opal.defn(self, '$==', TMP_6 = function(other) {
var self = this;
return (self == true) === other.valueOf();
}, TMP_6.$$arity = 1);
Opal.alias(self, 'equal?', '==');
Opal.alias(self, 'eql?', '==');
Opal.defn(self, '$singleton_class', TMP_7 = function $$singleton_class() {
var self = this;
return $scope.get('Boolean');
}, TMP_7.$$arity = 0);
Opal.defn(self, '$to_s', TMP_8 = function $$to_s() {
var self = this;
return (self == true) ? 'true' : 'false';
}, TMP_8.$$arity = 0);
Opal.defn(self, '$dup', TMP_9 = function $$dup() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class()));
}, TMP_9.$$arity = 0);
return (Opal.defn(self, '$clone', TMP_10 = function $$clone() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class()));
}, TMP_10.$$arity = 0), 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.10.3 */
Opal.modules["corelib/comparable"] = function(Opal) {
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, $module = Opal.module;
Opal.add_stubs(['$===', '$>', '$<', '$equal?', '$<=>', '$normalize', '$raise', '$class']);
return (function($base) {
var $Comparable, self = $Comparable = $module($base, 'Comparable');
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7;
Opal.defs(self, '$normalize', TMP_1 = function $$normalize(what) {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](what)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return what};
if ((($a = $rb_gt(what, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 1};
if ((($a = $rb_lt(what, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return -1};
return 0;
}, TMP_1.$$arity = 1);
Opal.defn(self, '$==', TMP_2 = function(other) {
var $a, self = this, cmp = nil;
try {
if ((($a = self['$equal?'](other)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
} else {
return false
};
return $scope.get('Comparable').$normalize(cmp) == 0;
} catch ($err) {
if (Opal.rescue($err, [$scope.get('StandardError')])) {
try {
return false
} finally { Opal.pop_exception() }
} else { throw $err; }
};
}, TMP_2.$$arity = 1);
Opal.defn(self, '$>', TMP_3 = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.get('Comparable').$normalize(cmp) > 0;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$>=', TMP_4 = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.get('Comparable').$normalize(cmp) >= 0;
}, TMP_4.$$arity = 1);
Opal.defn(self, '$<', TMP_5 = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.get('Comparable').$normalize(cmp) < 0;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$<=', TMP_6 = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.get('Comparable').$normalize(cmp) <= 0;
}, TMP_6.$$arity = 1);
Opal.defn(self, '$between?', TMP_7 = function(min, max) {
var self = this;
if ($rb_lt(self, min)) {
return false};
if ($rb_gt(self, max)) {
return false};
return true;
}, TMP_7.$$arity = 2);
})($scope.base)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/regexp"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $gvars = Opal.gvars;
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;
return nil;
})($scope.base, $scope.get('StandardError'));
(function($base, $super) {
function $Regexp(){};
var self = $Regexp = $klass($base, $super, 'Regexp', $Regexp);
var def = self.$$proto, $scope = self.$$scope, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14, TMP_15;
Opal.cdecl($scope, 'IGNORECASE', 1);
Opal.cdecl($scope, 'MULTILINE', 4);
def.$$is_regexp = true;
(function(self) {
var $scope = self.$$scope, def = self.$$proto, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5;
Opal.defn(self, '$allocate', TMP_1 = function $$allocate() {
var $a, $b, self = this, $iter = TMP_1.$$p, $yield = $iter || nil, allocated = nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_1.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
allocated = ($a = ($b = self, Opal.find_super_dispatcher(self, 'allocate', TMP_1, false)), $a.$$p = $iter, $a).apply($b, $zuper);
allocated.uninitialized = true;
return allocated;
}, TMP_1.$$arity = 0);
Opal.defn(self, '$escape', TMP_2 = function $$escape(string) {
var self = this;
return string.replace(/([-[\]\/{}()*+?.^$\\| ])/g, '\\$1')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\f]/g, '\\f')
.replace(/[\t]/g, '\\t');
}, TMP_2.$$arity = 1);
Opal.defn(self, '$last_match', TMP_3 = function $$last_match(n) {
var $a, self = this;
if ($gvars["~"] == null) $gvars["~"] = nil;
if (n == null) {
n = nil;
}
if ((($a = n['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return $gvars["~"]
} else {
return $gvars["~"]['$[]'](n)
};
}, TMP_3.$$arity = -1);
Opal.alias(self, 'quote', 'escape');
Opal.defn(self, '$union', TMP_4 = function $$union($a_rest) {
var self = this, parts;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
parts = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
parts[$arg_idx - 0] = arguments[$arg_idx];
}
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);
}, TMP_4.$$arity = -1);
return (Opal.defn(self, '$new', TMP_5 = function(regexp, options) {
var self = this;
if (regexp.$$is_regexp) {
return new RegExp(regexp);
}
regexp = $scope.get('Opal')['$coerce_to!'](regexp, $scope.get('String'), "to_str");
if (regexp.charAt(regexp.length - 1) === '\\' && regexp.charAt(regexp.length - 2) !== '\\') {
self.$raise($scope.get('RegexpError'), "too short escape sequence: /" + (regexp) + "/")
}
if (options === undefined || options['$!']()) {
return new RegExp(regexp);
}
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';
}
return new RegExp(regexp, options);
;
}, TMP_5.$$arity = -2), nil) && 'new';
})(Opal.get_singleton_class(self));
Opal.defn(self, '$==', TMP_6 = function(other) {
var self = this;
return other.constructor == RegExp && self.toString() === other.toString();
}, TMP_6.$$arity = 1);
Opal.defn(self, '$===', TMP_7 = function(string) {
var self = this;
return self.$match($scope.get('Opal')['$coerce_to?'](string, $scope.get('String'), "to_str")) !== nil;
}, TMP_7.$$arity = 1);
Opal.defn(self, '$=~', TMP_8 = function(string) {
var $a, self = this;
if ($gvars["~"] == null) $gvars["~"] = nil;
return ($a = self.$match(string), $a !== false && $a !== nil && $a != null ?$gvars["~"].$begin(0) : $a);
}, TMP_8.$$arity = 1);
Opal.alias(self, 'eql?', '==');
Opal.defn(self, '$inspect', TMP_9 = function $$inspect() {
var self = this;
return self.toString();
}, TMP_9.$$arity = 0);
Opal.defn(self, '$match', TMP_10 = function $$match(string, pos) {
var self = this, $iter = TMP_10.$$p, block = $iter || nil;
if ($gvars["~"] == null) $gvars["~"] = nil;
TMP_10.$$p = null;
if (self.uninitialized) {
self.$raise($scope.get('TypeError'), "uninitialized Regexp")
}
if (pos === undefined) {
pos = 0;
} else {
pos = $scope.get('Opal').$coerce_to(pos, $scope.get('Integer'), "to_int");
}
if (string === nil) {
return $gvars["~"] = nil;
}
string = $scope.get('Opal').$coerce_to(string, $scope.get('String'), "to_str");
if (pos < 0) {
pos += string.length;
if (pos < 0) {
return $gvars["~"] = 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';
}
// global RegExp maintains state, so not using self/this
var md, re = new RegExp(source, flags + (self.ignoreCase ? 'i' : ''));
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;
}
;
}, TMP_10.$$arity = -2);
Opal.defn(self, '$~', TMP_11 = function() {
var self = this;
if ($gvars._ == null) $gvars._ = nil;
return self['$=~']($gvars._);
}, TMP_11.$$arity = 0);
Opal.defn(self, '$source', TMP_12 = function $$source() {
var self = this;
return self.source;
}, TMP_12.$$arity = 0);
Opal.defn(self, '$options', TMP_13 = function $$options() {
var self = this;
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;
;
}, TMP_13.$$arity = 0);
Opal.defn(self, '$casefold?', TMP_14 = function() {
var self = this;
return self.ignoreCase;
}, TMP_14.$$arity = 0);
Opal.alias(self, 'to_s', 'source');
return (Opal.defs(self, '$_load', TMP_15 = function $$_load(args) {
var $a, self = this;
return ($a = self).$new.apply($a, Opal.to_a(args));
}, TMP_15.$$arity = 1), nil) && '_load';
})($scope.base, RegExp);
return (function($base, $super) {
function $MatchData(){};
var self = $MatchData = $klass($base, $super, 'MatchData', $MatchData);
var def = self.$$proto, $scope = self.$$scope, TMP_16, TMP_17, TMP_18, TMP_19, TMP_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27;
def.matches = nil;
self.$attr_reader("post_match", "pre_match", "regexp", "string");
Opal.defn(self, '$initialize', TMP_16 = function $$initialize(regexp, match_groups) {
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];
if (group == null) {
self.matches.push(nil);
}
else {
self.matches.push(group);
}
}
}, TMP_16.$$arity = 2);
Opal.defn(self, '$[]', TMP_17 = function($a_rest) {
var $b, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return ($b = self.matches)['$[]'].apply($b, Opal.to_a(args));
}, TMP_17.$$arity = -1);
Opal.defn(self, '$offset', TMP_18 = function $$offset(n) {
var self = this;
if (n !== 0) {
self.$raise($scope.get('ArgumentError'), "MatchData#offset only supports 0th element")
}
return [self.begin, self.begin + self.matches[n].length];
;
}, TMP_18.$$arity = 1);
Opal.defn(self, '$==', TMP_19 = function(other) {
var $a, $b, $c, $d, self = this;
if ((($a = $scope.get('MatchData')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return false
};
return ($a = ($b = ($c = ($d = self.string == other.string, $d !== false && $d !== nil && $d != null ?self.regexp.toString() == other.regexp.toString() : $d), $c !== false && $c !== nil && $c != null ?self.pre_match == other.pre_match : $c), $b !== false && $b !== nil && $b != null ?self.post_match == other.post_match : $b), $a !== false && $a !== nil && $a != null ?self.begin == other.begin : $a);
}, TMP_19.$$arity = 1);
Opal.alias(self, 'eql?', '==');
Opal.defn(self, '$begin', TMP_20 = function $$begin(n) {
var self = this;
if (n !== 0) {
self.$raise($scope.get('ArgumentError'), "MatchData#begin only supports 0th element")
}
return self.begin;
;
}, TMP_20.$$arity = 1);
Opal.defn(self, '$end', TMP_21 = function $$end(n) {
var self = this;
if (n !== 0) {
self.$raise($scope.get('ArgumentError'), "MatchData#end only supports 0th element")
}
return self.begin + self.matches[n].length;
;
}, TMP_21.$$arity = 1);
Opal.defn(self, '$captures', TMP_22 = function $$captures() {
var self = this;
return self.matches.slice(1);
}, TMP_22.$$arity = 0);
Opal.defn(self, '$inspect', TMP_23 = function $$inspect() {
var self = this;
var str = "#<MatchData " + (self.matches[0]).$inspect();
for (var i = 1, length = self.matches.length; i < length; i++) {
str += " " + i + ":" + (self.matches[i]).$inspect();
}
return str + ">";
;
}, TMP_23.$$arity = 0);
Opal.defn(self, '$length', TMP_24 = function $$length() {
var self = this;
return self.matches.length;
}, TMP_24.$$arity = 0);
Opal.alias(self, 'size', 'length');
Opal.defn(self, '$to_a', TMP_25 = function $$to_a() {
var self = this;
return self.matches;
}, TMP_25.$$arity = 0);
Opal.defn(self, '$to_s', TMP_26 = function $$to_s() {
var self = this;
return self.matches[0];
}, TMP_26.$$arity = 0);
return (Opal.defn(self, '$values_at', TMP_27 = function $$values_at($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
var i, a, index, values = [];
for (i = 0; i < args.length; i++) {
if (args[i].$$is_range) {
a = (args[i]).$to_a();
a.unshift(i, 1);
Array.prototype.splice.apply(args, a);
}
index = $scope.get('Opal')['$coerce_to!'](args[i], $scope.get('Integer'), "to_int");
if (index < 0) {
index += self.matches.length;
if (index < 0) {
values.push(nil);
continue;
}
}
values.push(self.matches[index]);
}
return values;
}, TMP_27.$$arity = -1), nil) && 'values_at';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/string"] = function(Opal) {
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.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', '$each_line', '$class', '$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);
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_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_26, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_32, TMP_33, TMP_34, TMP_35, TMP_36, TMP_37, TMP_38, TMP_39, TMP_40, TMP_41, TMP_42, TMP_43, TMP_44, TMP_45, TMP_46, TMP_47, TMP_48, TMP_49, TMP_50, TMP_51, TMP_52, TMP_53, TMP_54, TMP_55, TMP_56, TMP_57, TMP_58, TMP_59, TMP_61, TMP_62, TMP_63, TMP_64, TMP_65, TMP_66, TMP_67, TMP_68;
def.length = nil;
self.$include($scope.get('Comparable'));
def.$$is_string = true;
Opal.defn(self, '$__id__', TMP_1 = function $$__id__() {
var self = this;
return self.toString();
}, TMP_1.$$arity = 0);
Opal.alias(self, 'object_id', '__id__');
Opal.defs(self, '$try_convert', TMP_2 = function $$try_convert(what) {
var self = this;
return $scope.get('Opal')['$coerce_to?'](what, $scope.get('String'), "to_str");
}, TMP_2.$$arity = 1);
Opal.defs(self, '$new', TMP_3 = function(str) {
var self = this;
if (str == null) {
str = "";
}
str = $scope.get('Opal').$coerce_to(str, $scope.get('String'), "to_str");
return new String(str);
}, TMP_3.$$arity = -1);
Opal.defn(self, '$initialize', TMP_4 = function $$initialize(str) {
var self = this;
if (str === undefined) {
return self;
}
return self.$raise($scope.get('NotImplementedError'), "Mutable strings are not supported in Opal.");
}, TMP_4.$$arity = -1);
Opal.defn(self, '$%', TMP_5 = function(data) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](data)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ($a = self).$format.apply($a, [self].concat(Opal.to_a(data)))
} else {
return self.$format(self, data)
};
}, TMP_5.$$arity = 1);
Opal.defn(self, '$*', TMP_6 = function(count) {
var self = this;
count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int");
if (count < 0) {
self.$raise($scope.get('ArgumentError'), "negative argument")
}
if (count === 0) {
return '';
}
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")
}
for (;;) {
if ((count & 1) === 1) {
result += string;
}
count >>>= 1;
if (count === 0) {
break;
}
string += string;
}
return result;
;
}, TMP_6.$$arity = 1);
Opal.defn(self, '$+', TMP_7 = function(other) {
var self = this;
other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str");
return self + other.$to_s();
}, TMP_7.$$arity = 1);
Opal.defn(self, '$<=>', TMP_8 = function(other) {
var $a, self = this;
if ((($a = other['$respond_to?']("to_str")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
other = other.$to_str().$to_s();
return self > other ? 1 : (self < other ? -1 : 0);
} else {
var cmp = other['$<=>'](self);
if (cmp === nil) {
return nil;
}
else {
return cmp > 0 ? -1 : (cmp < 0 ? 1 : 0);
}
;
};
}, TMP_8.$$arity = 1);
Opal.defn(self, '$==', TMP_9 = 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;
;
}, TMP_9.$$arity = 1);
Opal.alias(self, 'eql?', '==');
Opal.alias(self, '===', '==');
Opal.defn(self, '$=~', TMP_10 = function(other) {
var self = this;
if (other.$$is_string) {
self.$raise($scope.get('TypeError'), "type mismatch: String given");
}
return other['$=~'](self);
;
}, TMP_10.$$arity = 1);
Opal.defn(self, '$[]', TMP_11 = function(index, length) {
var self = this;
var size = self.length, exclude;
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 (Math.abs(index) > size) {
return nil;
}
if (index < 0) {
index += size;
}
if (length < 0) {
length += size;
}
if (!exclude) {
length += 1;
}
length = length - index;
if (length < 0) {
length = 0;
}
return self.substr(index, length);
}
if (index.$$is_string) {
if (length != null) {
self.$raise($scope.get('TypeError'))
}
return self.indexOf(index) !== -1 ? index : nil;
}
if (index.$$is_regexp) {
var match = self.match(index);
if (match === null) {
$gvars["~"] = nil
return nil;
}
$gvars["~"] = $scope.get('MatchData').$new(index, match)
if (length == null) {
return match[0];
}
length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int");
if (length < 0 && -length < match.length) {
return match[length += match.length];
}
if (length >= 0 && length < match.length) {
return match[length];
}
return nil;
}
index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (index < 0) {
index += size;
}
if (length == null) {
if (index >= size || index < 0) {
return nil;
}
return self.substr(index, 1);
}
length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int");
if (length < 0) {
return nil;
}
if (index > size || index < 0) {
return nil;
}
return self.substr(index, length);
}, TMP_11.$$arity = -2);
Opal.alias(self, 'byteslice', '[]');
Opal.defn(self, '$capitalize', TMP_12 = function $$capitalize() {
var self = this;
return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase();
}, TMP_12.$$arity = 0);
Opal.defn(self, '$casecmp', TMP_13 = function $$casecmp(other) {
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();
}
return self['$<=>'](other);
}, TMP_13.$$arity = 1);
Opal.defn(self, '$center', TMP_14 = function $$center(width, padstr) {
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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "zero width padding")};
if ((($a = width <= self.length) !== nil && $a != null && (!$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);
;
}, TMP_14.$$arity = -2);
Opal.defn(self, '$chars', TMP_15 = function $$chars() {
var $a, $b, self = this, $iter = TMP_15.$$p, block = $iter || nil;
TMP_15.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return self.$each_char().$to_a()
};
return ($a = ($b = self).$each_char, $a.$$p = block.$to_proc(), $a).call($b);
}, TMP_15.$$arity = 0);
Opal.defn(self, '$chomp', TMP_16 = function $$chomp(separator) {
var $a, self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"];
}
if ((($a = separator === nil || self.length === 0) !== nil && $a != null && (!$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 (tail === separator) {
return self.substr(0, self.length - separator.length);
}
}
return self;
}, TMP_16.$$arity = -1);
Opal.defn(self, '$chop', TMP_17 = function $$chop() {
var self = this;
var length = self.length;
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);
}
}, TMP_17.$$arity = 0);
Opal.defn(self, '$chr', TMP_18 = function $$chr() {
var self = this;
return self.charAt(0);
}, TMP_18.$$arity = 0);
Opal.defn(self, '$clone', TMP_19 = function $$clone() {
var self = this, copy = nil;
copy = self.slice();
copy.$copy_singleton_methods(self);
copy.$initialize_clone(self);
return copy;
}, TMP_19.$$arity = 0);
Opal.defn(self, '$dup', TMP_20 = function $$dup() {
var self = this, copy = nil;
copy = self.slice();
copy.$initialize_dup(self);
return copy;
}, TMP_20.$$arity = 0);
Opal.defn(self, '$count', TMP_21 = function $$count($a_rest) {
var self = this, sets;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
sets = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
sets[$arg_idx - 0] = arguments[$arg_idx];
}
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;
;
}, TMP_21.$$arity = -1);
Opal.defn(self, '$delete', TMP_22 = function($a_rest) {
var self = this, sets;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
sets = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
sets[$arg_idx - 0] = arguments[$arg_idx];
}
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'), '');
;
}, TMP_22.$$arity = -1);
Opal.defn(self, '$downcase', TMP_23 = function $$downcase() {
var self = this;
return self.toLowerCase();
}, TMP_23.$$arity = 0);
Opal.defn(self, '$each_char', TMP_24 = function $$each_char() {
var $a, $b, TMP_25, self = this, $iter = TMP_24.$$p, block = $iter || nil;
TMP_24.$$p = null;
if ((block !== nil)) {
} else {
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.$$arity = 0, TMP_25), $a).call($b, "each_char")
};
for (var i = 0, length = self.length; i < length; i++) {
Opal.yield1(block, self.charAt(i));
}
return self;
}, TMP_24.$$arity = 0);
Opal.defn(self, '$each_line', TMP_26 = function $$each_line(separator) {
var self = this, $iter = TMP_26.$$p, block = $iter || nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"];
}
TMP_26.$$p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each_line", separator)
};
if (separator === nil) {
Opal.yield1(block, self);
return self;
}
separator = $scope.get('Opal').$coerce_to(separator, $scope.get('String'), "to_str")
var a, i, n, length, chomped, trailing, splitted;
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]) {
Opal.yield1(block, (a[i] || "") + (a[i + 1] || ""));
}
}
return self;
}
chomped = self.$chomp(separator);
trailing = self.length != chomped.length;
splitted = chomped.split(separator);
for (i = 0, length = splitted.length; i < length; i++) {
if (i < length - 1 || trailing) {
Opal.yield1(block, splitted[i] + separator);
}
else {
Opal.yield1(block, splitted[i]);
}
}
return self;
}, TMP_26.$$arity = -1);
Opal.defn(self, '$empty?', TMP_27 = function() {
var self = this;
return self.length === 0;
}, TMP_27.$$arity = 0);
Opal.defn(self, '$end_with?', TMP_28 = function($a_rest) {
var self = this, suffixes;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
suffixes = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
suffixes[$arg_idx - 0] = arguments[$arg_idx];
}
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 (self.length >= suffix.length &&
self.substr(self.length - suffix.length, suffix.length) == suffix) {
return true;
}
}
return false;
}, TMP_28.$$arity = -1);
Opal.alias(self, 'eql?', '==');
Opal.alias(self, 'equal?', '===');
Opal.defn(self, '$gsub', TMP_29 = function $$gsub(pattern, replacement) {
var self = this, $iter = TMP_29.$$p, block = $iter || nil;
TMP_29.$$p = null;
if (replacement === undefined && block === nil) {
return self.$enum_for("gsub", pattern);
}
var result = '', match_data = nil, index = 0, match, _replacement;
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;
}
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, '\\');
}
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;
;
}, TMP_29.$$arity = -2);
Opal.defn(self, '$hash', TMP_30 = function $$hash() {
var self = this;
return self.toString();
}, TMP_30.$$arity = 0);
Opal.defn(self, '$hex', TMP_31 = function $$hex() {
var self = this;
return self.$to_i(16);
}, TMP_31.$$arity = 0);
Opal.defn(self, '$include?', TMP_32 = function(other) {
var self = this;
if (!other.$$is_string) {
other = $scope.get('Opal').$coerce_to(other, $scope.get('String'), "to_str")
}
return self.indexOf(other) !== -1;
;
}, TMP_32.$$arity = 1);
Opal.defn(self, '$index', TMP_33 = function $$index(search, offset) {
var self = this;
var index,
match,
regex;
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;
}
}
}
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);
}
}
return index === -1 ? nil : index;
}, TMP_33.$$arity = -2);
Opal.defn(self, '$inspect', TMP_34 = function $$inspect() {
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, '\\$&') + '"';
}, TMP_34.$$arity = 0);
Opal.defn(self, '$intern', TMP_35 = function $$intern() {
var self = this;
return self;
}, TMP_35.$$arity = 0);
Opal.defn(self, '$lines', TMP_36 = function $$lines(separator) {
var $a, $b, self = this, $iter = TMP_36.$$p, block = $iter || nil, e = nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"];
}
TMP_36.$$p = null;
e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator);
if (block !== false && block !== nil && block != null) {
return self
} else {
return e.$to_a()
};
}, TMP_36.$$arity = -1);
Opal.defn(self, '$length', TMP_37 = function $$length() {
var self = this;
return self.length;
}, TMP_37.$$arity = 0);
Opal.defn(self, '$ljust', TMP_38 = function $$ljust(width, padstr) {
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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "zero width padding")};
if ((($a = width <= self.length) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self};
var index = -1,
result = "";
width -= self.length;
while (++index < width) {
result += padstr;
}
return self + result.slice(0, width);
}, TMP_38.$$arity = -2);
Opal.defn(self, '$lstrip', TMP_39 = function $$lstrip() {
var self = this;
return self.replace(/^\s*/, '');
}, TMP_39.$$arity = 0);
Opal.defn(self, '$match', TMP_40 = function $$match(pattern, pos) {
var $a, $b, self = this, $iter = TMP_40.$$p, block = $iter || nil;
TMP_40.$$p = null;
if ((($a = ((($b = $scope.get('String')['$==='](pattern)) !== false && $b !== nil && $b != null) ? $b : pattern['$respond_to?']("to_str"))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
pattern = $scope.get('Regexp').$new(pattern.$to_str())};
if ((($a = $scope.get('Regexp')['$==='](pattern)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
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);
}, TMP_40.$$arity = -2);
Opal.defn(self, '$next', TMP_41 = function $$next() {
var self = this;
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;
}
}
return result;
}, TMP_41.$$arity = 0);
Opal.defn(self, '$oct', TMP_42 = function $$oct() {
var self = this;
var result,
string = self,
radix = 8;
if (/^\s*_/.test(string)) {
return 0;
}
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;
}, TMP_42.$$arity = 0);
Opal.defn(self, '$ord', TMP_43 = function $$ord() {
var self = this;
return self.charCodeAt(0);
}, TMP_43.$$arity = 0);
Opal.defn(self, '$partition', TMP_44 = function $$partition(sep) {
var self = this;
var i, m;
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);
}
if (i === -1) {
return [self, '', ''];
}
return [
self.slice(0, i),
self.slice(i, i + sep.length),
self.slice(i + sep.length)
];
}, TMP_44.$$arity = 1);
Opal.defn(self, '$reverse', TMP_45 = function $$reverse() {
var self = this;
return self.split('').reverse().join('');
}, TMP_45.$$arity = 0);
Opal.defn(self, '$rindex', TMP_46 = function $$rindex(search, offset) {
var self = this;
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;
}
}
}
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;
}
} else {
search = $scope.get('Opal').$coerce_to(search, $scope.get('String'), "to_str");
i = self.lastIndexOf(search, offset);
}
return i === -1 ? nil : i;
}, TMP_46.$$arity = -2);
Opal.defn(self, '$rjust', TMP_47 = function $$rjust(width, padstr) {
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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "zero width padding")};
if ((($a = width <= self.length) !== nil && $a != null && (!$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;
return result + padstr.slice(0, remaining) + self;
}, TMP_47.$$arity = -2);
Opal.defn(self, '$rpartition', TMP_48 = function $$rpartition(sep) {
var self = this;
var i, m, r, _m;
if (sep.$$is_regexp) {
m = null;
r = new RegExp(sep.source, 'gm' + (sep.ignoreCase ? 'i' : ''));
while (true) {
_m = r.exec(self);
if (_m === null) {
break;
}
m = _m;
r.lastIndex = m.index + 1;
}
if (m === null) {
i = -1;
} else {
$scope.get('MatchData').$new(r, m);
sep = m[0];
i = m.index;
}
} else {
sep = $scope.get('Opal').$coerce_to(sep, $scope.get('String'), "to_str");
i = self.lastIndexOf(sep);
}
if (i === -1) {
return ['', '', self];
}
return [
self.slice(0, i),
self.slice(i, i + sep.length),
self.slice(i + sep.length)
];
}, TMP_48.$$arity = 1);
Opal.defn(self, '$rstrip', TMP_49 = function $$rstrip() {
var self = this;
return self.replace(/[\s\u0000]*$/, '');
}, TMP_49.$$arity = 0);
Opal.defn(self, '$scan', TMP_50 = function $$scan(pattern) {
var self = this, $iter = TMP_50.$$p, block = $iter || nil;
TMP_50.$$p = null;
var result = [],
match_data = nil,
match;
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 ((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;
}
}
$gvars["~"] = match_data
return (block !== nil ? self : result);
}, TMP_50.$$arity = 1);
Opal.alias(self, 'size', 'length');
Opal.alias(self, 'slice', '[]');
Opal.defn(self, '$split', TMP_51 = function $$split(pattern, limit) {
var $a, self = this;
if ($gvars[";"] == null) $gvars[";"] = nil;
if (self.length === 0) {
return [];
}
if (limit === undefined) {
limit = 0;
} else {
limit = $scope.get('Opal')['$coerce_to!'](limit, $scope.get('Integer'), "to_int");
if (limit === 1) {
return [self];
}
}
if (pattern === undefined || pattern === nil) {
pattern = ((($a = $gvars[";"]) !== false && $a !== nil && $a != null) ? $a : " ");
}
var result = [],
string = self.toString(),
index = 0,
match,
i;
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');
}
}
result = string.split(pattern);
if (result.length === 1 && result[0] === string) {
return result;
}
while ((i = result.indexOf(undefined)) !== -1) {
result.splice(i, 1);
}
if (limit === 0) {
while (result[result.length - 1] === '') {
result.length -= 1;
}
return result;
}
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('');
}
}
return result;
}
if (match !== null && match[0] === '') {
result.splice(limit - 1, result.length - 1, result.slice(limit - 1).join(''));
return result;
}
if (limit >= result.length) {
return result;
}
i = 0;
while (match !== null) {
i++;
index = pattern.lastIndex;
if (i + 1 === limit) {
break;
}
match = pattern.exec(string);
}
result.splice(limit - 1, result.length - 1, string.slice(index));
return result;
}, TMP_51.$$arity = -1);
Opal.defn(self, '$squeeze', TMP_52 = function $$squeeze($a_rest) {
var self = this, sets;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
sets = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
sets[$arg_idx - 0] = arguments[$arg_idx];
}
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');
}, TMP_52.$$arity = -1);
Opal.defn(self, '$start_with?', TMP_53 = function($a_rest) {
var self = this, prefixes;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
prefixes = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
prefixes[$arg_idx - 0] = arguments[$arg_idx];
}
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;
}
}
return false;
}, TMP_53.$$arity = -1);
Opal.defn(self, '$strip', TMP_54 = function $$strip() {
var self = this;
return self.replace(/^\s*/, '').replace(/[\s\u0000]*$/, '');
}, TMP_54.$$arity = 0);
Opal.defn(self, '$sub', TMP_55 = function $$sub(pattern, replacement) {
var self = this, $iter = TMP_55.$$p, block = $iter || nil;
TMP_55.$$p = null;
if (!pattern.$$is_regexp) {
pattern = $scope.get('Opal').$coerce_to(pattern, $scope.get('String'), "to_str");
pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
}
var result = pattern.exec(self);
if (result === null) {
$gvars["~"] = nil
return self.toString();
}
$scope.get('MatchData').$new(pattern, result)
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);
}
if (replacement.$$is_hash) {
return self.slice(0, result.index) + (replacement)['$[]'](result[0]).$to_s() + self.slice(result.index + result[0].length);
}
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 = 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, '\\');
return self.slice(0, result.index) + replacement + self.slice(result.index + result[0].length);
;
}, TMP_55.$$arity = -2);
Opal.alias(self, 'succ', 'next');
Opal.defn(self, '$sum', TMP_56 = function $$sum(n) {
var self = this;
if (n == null) {
n = 16;
}
n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int");
var result = 0,
length = self.length,
i = 0;
for (; i < length; i++) {
result += self.charCodeAt(i);
}
if (n <= 0) {
return result;
}
return result & (Math.pow(2, n) - 1);
;
}, TMP_56.$$arity = -1);
Opal.defn(self, '$swapcase', TMP_57 = function $$swapcase() {
var self = this;
var str = self.replace(/([a-z]+)|([A-Z]+)/g, function($0,$1,$2) {
return $1 ? $0.toUpperCase() : $0.toLowerCase();
});
if (self.constructor === String) {
return str;
}
return self.$class().$new(str);
}, TMP_57.$$arity = 0);
Opal.defn(self, '$to_f', TMP_58 = function $$to_f() {
var self = this;
if (self.charAt(0) === '_') {
return 0;
}
var result = parseFloat(self.replace(/_/g, ''));
if (isNaN(result) || result == Infinity || result == -Infinity) {
return 0;
}
else {
return result;
}
}, TMP_58.$$arity = 0);
Opal.defn(self, '$to_i', TMP_59 = function $$to_i(base) {
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");
if (radix === 1 || radix < 0 || radix > 36) {
self.$raise($scope.get('ArgumentError'), "invalid radix " + (radix))
}
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
});
result = parseInt(string.replace(/_(?!_)/g, ''), radix);
return isNaN(result) ? 0 : result;
;
}, TMP_59.$$arity = -1);
Opal.defn(self, '$to_proc', TMP_61 = function $$to_proc() {
var $a, $b, TMP_60, self = this, sym = nil;
sym = self;
return ($a = ($b = self).$proc, $a.$$p = (TMP_60 = function($c_rest){var self = TMP_60.$$s || this, block, args, $d, $e, obj = nil;
block = TMP_60.$$p || nil, TMP_60.$$p = null;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($d = args['$empty?']()) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
self.$raise($scope.get('ArgumentError'), "no receiver given")};
obj = args.$shift();
return ($d = ($e = obj).$__send__, $d.$$p = block.$to_proc(), $d).apply($e, [sym].concat(Opal.to_a(args)));}, TMP_60.$$s = self, TMP_60.$$arity = -1, TMP_60), $a).call($b);
}, TMP_61.$$arity = 0);
Opal.defn(self, '$to_s', TMP_62 = function $$to_s() {
var self = this;
return self.toString();
}, TMP_62.$$arity = 0);
Opal.alias(self, 'to_str', 'to_s');
Opal.alias(self, 'to_sym', 'intern');
Opal.defn(self, '$tr', TMP_63 = function $$tr(from, to) {
var self = this;
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 || from === to) {
return self;
}
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;
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 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);
}
}
from_chars = from_chars_expanded;
from_length = from_chars.length;
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_to == null) {
last_to = 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_to.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_to = null;
}
else {
to_chars_expanded.push(ch);
}
}
to_chars = to_chars_expanded;
to_length = to_chars.length;
}
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];
}
}
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;
}, TMP_63.$$arity = 2);
Opal.defn(self, '$tr_s', TMP_64 = function $$tr_s(from, to) {
var self = this;
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 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;
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 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);
}
}
from_chars = from_chars_expanded;
from_length = from_chars.length;
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);
}
}
to_chars = to_chars_expanded;
to_length = to_chars.length;
}
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];
}
}
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;
}, TMP_64.$$arity = 2);
Opal.defn(self, '$upcase', TMP_65 = function $$upcase() {
var self = this;
return self.toUpperCase();
}, TMP_65.$$arity = 0);
Opal.defn(self, '$upto', TMP_66 = function $$upto(stop, excl) {
var self = this, $iter = TMP_66.$$p, block = $iter || nil;
if (excl == null) {
excl = false;
}
TMP_66.$$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();
if (s.length === 1 && stop.length === 1) {
a = s.charCodeAt(0);
b = stop.charCodeAt(0);
while (a <= b) {
if (excl && a === b) {
break;
}
block(String.fromCharCode(a));
a += 1;
}
} else if (parseInt(s, 10).toString() === s && parseInt(stop, 10).toString() === stop) {
a = parseInt(s, 10);
b = parseInt(stop, 10);
while (a <= b) {
if (excl && a === b) {
break;
}
block(a.toString());
a += 1;
}
} else {
while (s.length <= stop.length && s <= stop) {
if (excl && s === stop) {
break;
}
block(s);
s = (s).$succ();
}
}
return self;
}, TMP_66.$$arity = -2);
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;
}
var i, len, set, neg, chr, tmp,
pos_intersection = '',
neg_intersection = '';
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 {
pos_intersection = intersection(pos_intersection, set);
}
}
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 (pos_intersection.length > 0) {
return '[' + $scope.get('Regexp').$escape(pos_intersection) + ']';
}
if (neg_intersection.length > 0) {
return '[^' + $scope.get('Regexp').$escape(neg_intersection) + ']';
}
return null;
}
Opal.defn(self, '$instance_variables', TMP_67 = function $$instance_variables() {
var self = this;
return [];
}, TMP_67.$$arity = 0);
return (Opal.defs(self, '$_load', TMP_68 = function $$_load($a_rest) {
var $b, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return ($b = self).$new.apply($b, Opal.to_a(args));
}, TMP_68.$$arity = -1), nil) && '_load';
})($scope.base, String);
return Opal.cdecl($scope, 'Symbol', $scope.get('String'));
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/enumerable"] = function(Opal) {
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;
Opal.add_stubs(['$each', '$destructure', '$raise', '$new', '$yield', '$dup', '$enum_for', '$enumerator_size', '$flatten', '$map', '$proc', '$==', '$nil?', '$respond_to?', '$coerce_to!', '$>', '$*', '$coerce_to', '$try_convert', '$<', '$+', '$-', '$to_enum', '$ceil', '$/', '$size', '$===', '$<<', '$[]', '$[]=', '$inspect', '$__send__', '$<=>', '$first', '$reverse', '$sort', '$to_proc', '$compare', '$call', '$to_a', '$lambda', '$sort!', '$map!', '$zip']);
return (function($base) {
var $Enumerable, self = $Enumerable = $module($base, 'Enumerable');
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_4, TMP_7, TMP_10, TMP_12, TMP_15, TMP_19, TMP_21, TMP_23, TMP_24, TMP_25, TMP_27, TMP_29, TMP_31, TMP_33, TMP_35, TMP_36, TMP_38, TMP_43, TMP_44, TMP_45, TMP_48, TMP_49, TMP_51, TMP_52, TMP_53, TMP_54, TMP_56, TMP_57, TMP_59, TMP_61, TMP_62, TMP_65, TMP_68, TMP_70, TMP_72, TMP_74, TMP_76, TMP_78, TMP_83, TMP_84, TMP_86;
Opal.defn(self, '$all?', TMP_1 = function() {try {
var $a, $b, TMP_2, $c, TMP_3, self = this, $iter = TMP_1.$$p, block = $iter || nil;
TMP_1.$$p = null;
if ((block !== nil)) {
($a = ($b = self).$each, $a.$$p = (TMP_2 = function($c_rest){var self = TMP_2.$$s || this, value, $d;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($d = Opal.yieldX(block, Opal.to_a(value))) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
return nil
} else {
Opal.ret(false)
}}, TMP_2.$$s = self, TMP_2.$$arity = -1, TMP_2), $a).call($b)
} else {
($a = ($c = self).$each, $a.$$p = (TMP_3 = function($d_rest){var self = TMP_3.$$s || this, value, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($e = $scope.get('Opal').$destructure(value)) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
return nil
} else {
Opal.ret(false)
}}, TMP_3.$$s = self, TMP_3.$$arity = -1, TMP_3), $a).call($c)
};
return true;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_1.$$arity = 0);
Opal.defn(self, '$any?', TMP_4 = function() {try {
var $a, $b, TMP_5, $c, TMP_6, self = this, $iter = TMP_4.$$p, block = $iter || nil;
TMP_4.$$p = null;
if ((block !== nil)) {
($a = ($b = self).$each, $a.$$p = (TMP_5 = function($c_rest){var self = TMP_5.$$s || this, value, $d;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($d = Opal.yieldX(block, Opal.to_a(value))) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
Opal.ret(true)
} else {
return nil
}}, TMP_5.$$s = self, TMP_5.$$arity = -1, TMP_5), $a).call($b)
} else {
($a = ($c = self).$each, $a.$$p = (TMP_6 = function($d_rest){var self = TMP_6.$$s || this, value, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($e = $scope.get('Opal').$destructure(value)) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
Opal.ret(true)
} else {
return nil
}}, TMP_6.$$s = self, TMP_6.$$arity = -1, TMP_6), $a).call($c)
};
return false;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_4.$$arity = 0);
Opal.defn(self, '$chunk', TMP_7 = function $$chunk(state) {
var $a, $b, TMP_8, self = this, $iter = TMP_7.$$p, original_block = $iter || nil;
TMP_7.$$p = null;
if (original_block !== false && original_block !== nil && original_block != null) {
} else {
$scope.get('Kernel').$raise($scope.get('ArgumentError'), "no block given")
};
return ($a = ($b = Opal.get('Enumerator')).$new, $a.$$p = (TMP_8 = function(yielder){var self = TMP_8.$$s || this, $c, $d, TMP_9;
if (yielder == null) yielder = nil;
var block, previous = nil, accumulate = [];
if (state == undefined || state === nil) {
block = original_block;
} else {
block = ($c = ($d = $scope.get('Proc')).$new, $c.$$p = (TMP_9 = function(val){var self = TMP_9.$$s || this;
if (val == null) val = nil;
return original_block.$yield(val, state.$dup())}, TMP_9.$$s = self, TMP_9.$$arity = 1, TMP_9), $c).call($d)
}
function releaseAccumulate() {
if (accumulate.length > 0) {
yielder.$yield(previous, accumulate)
}
}
self.$each.$$p = function(value) {
var key = Opal.yield1(block, value);
if (key === nil) {
releaseAccumulate();
accumulate = [];
previous = nil;
} else {
if (previous === nil || previous === key) {
accumulate.push(value);
} else {
releaseAccumulate();
accumulate = [value];
}
previous = key;
}
}
self.$each();
releaseAccumulate();
;}, TMP_8.$$s = self, TMP_8.$$arity = 1, TMP_8), $a).call($b);
}, TMP_7.$$arity = -1);
Opal.defn(self, '$collect', TMP_10 = function $$collect() {
var $a, $b, TMP_11, self = this, $iter = TMP_10.$$p, block = $iter || nil;
TMP_10.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_11 = function(){var self = TMP_11.$$s || this;
return self.$enumerator_size()}, TMP_11.$$s = self, TMP_11.$$arity = 0, TMP_11), $a).call($b, "collect")
};
var result = [];
self.$each.$$p = function() {
var value = Opal.yieldX(block, arguments);
result.push(value);
};
self.$each();
return result;
}, TMP_10.$$arity = 0);
Opal.defn(self, '$collect_concat', TMP_12 = function $$collect_concat() {
var $a, $b, TMP_13, $c, TMP_14, self = this, $iter = TMP_12.$$p, block = $iter || 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;
return self.$enumerator_size()}, TMP_13.$$s = self, TMP_13.$$arity = 0, TMP_13), $a).call($b, "collect_concat")
};
return ($a = ($c = self).$map, $a.$$p = (TMP_14 = function(item){var self = TMP_14.$$s || this;
if (item == null) item = nil;
return Opal.yield1(block, item);}, TMP_14.$$s = self, TMP_14.$$arity = 1, TMP_14), $a).call($c).$flatten(1);
}, TMP_12.$$arity = 0);
Opal.defn(self, '$count', TMP_15 = function $$count(object) {
var $a, $b, TMP_16, $c, TMP_17, $d, TMP_18, self = this, $iter = TMP_15.$$p, block = $iter || nil, result = nil;
TMP_15.$$p = null;
result = 0;
if ((($a = object != null) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
block = ($a = ($b = self).$proc, $a.$$p = (TMP_16 = function($c_rest){var self = TMP_16.$$s || this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
return $scope.get('Opal').$destructure(args)['$=='](object)}, TMP_16.$$s = self, TMP_16.$$arity = -1, TMP_16), $a).call($b)
} else if ((($a = block['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
block = ($a = ($c = self).$proc, $a.$$p = (TMP_17 = function(){var self = TMP_17.$$s || this;
return true}, TMP_17.$$s = self, TMP_17.$$arity = 0, TMP_17), $a).call($c)};
($a = ($d = self).$each, $a.$$p = (TMP_18 = function($e_rest){var self = TMP_18.$$s || this, args, $f;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($f = Opal.yieldX(block, args)) !== nil && $f != null && (!$f.$$is_boolean || $f == true))) {
return result++;
} else {
return nil
}}, TMP_18.$$s = self, TMP_18.$$arity = -1, TMP_18), $a).call($d);
return result;
}, TMP_15.$$arity = -1);
Opal.defn(self, '$cycle', TMP_19 = function $$cycle(n) {
var $a, $b, TMP_20, self = this, $iter = TMP_19.$$p, block = $iter || nil;
if (n == null) {
n = nil;
}
TMP_19.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_20 = function(){var self = TMP_20.$$s || this, $c;
if (n['$=='](nil)) {
if ((($c = self['$respond_to?']("size")) !== nil && $c != null && (!$c.$$is_boolean || $c == 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 ((($c = $rb_gt(n, 0)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return $rb_times(self.$enumerator_size(), n)
} else {
return 0
};
}}, TMP_20.$$s = self, TMP_20.$$arity = 0, TMP_20), $a).call($b, "cycle", n)
};
if ((($a = n['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int");
if ((($a = n <= 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil};
};
var result,
all = [], i, length, value;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = Opal.yield1(block, param);
all.push(param);
}
self.$each();
if (result !== undefined) {
return result;
}
if (all.length === 0) {
return nil;
}
if (n === nil) {
while (true) {
for (i = 0, length = all.length; i < length; i++) {
value = Opal.yield1(block, all[i]);
}
}
}
else {
while (n > 1) {
for (i = 0, length = all.length; i < length; i++) {
value = Opal.yield1(block, all[i]);
}
n--;
}
}
}, TMP_19.$$arity = -1);
Opal.defn(self, '$detect', TMP_21 = function $$detect(ifnone) {try {
var $a, $b, TMP_22, self = this, $iter = TMP_21.$$p, block = $iter || nil;
TMP_21.$$p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("detect", ifnone)
};
($a = ($b = self).$each, $a.$$p = (TMP_22 = function($c_rest){var self = TMP_22.$$s || this, args, $d, value = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
value = $scope.get('Opal').$destructure(args);
if ((($d = Opal.yield1(block, value)) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
Opal.ret(value)
} else {
return nil
};}, TMP_22.$$s = self, TMP_22.$$arity = -1, TMP_22), $a).call($b);
if (ifnone !== undefined) {
if (typeof(ifnone) === 'function') {
return ifnone();
} else {
return ifnone;
}
}
return nil;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_21.$$arity = -1);
Opal.defn(self, '$drop', TMP_23 = function $$drop(number) {
var $a, self = this;
number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int");
if ((($a = number < 0) !== nil && $a != null && (!$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));
}
current++;
};
self.$each()
return result;
}, TMP_23.$$arity = 1);
Opal.defn(self, '$drop_while', TMP_24 = function $$drop_while() {
var $a, self = this, $iter = TMP_24.$$p, block = $iter || nil;
TMP_24.$$p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("drop_while")
};
var result = [],
dropping = true;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments);
if (dropping) {
var value = Opal.yield1(block, param);
if ((($a = value) === nil || $a == null || ($a.$$is_boolean && $a == false))) {
dropping = false;
result.push(param);
}
}
else {
result.push(param);
}
};
self.$each();
return result;
}, TMP_24.$$arity = 0);
Opal.defn(self, '$each_cons', TMP_25 = function $$each_cons(n) {
var $a, $b, TMP_26, self = this, $iter = TMP_25.$$p, block = $iter || nil;
TMP_25.$$p = null;
if ((($a = arguments.length != 1) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "invalid size")};
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_26 = function(){var self = TMP_26.$$s || this, $c, $d, enum_size = nil;
enum_size = self.$enumerator_size();
if ((($c = enum_size['$nil?']()) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return nil
} else if ((($c = ((($d = enum_size['$=='](0)) !== false && $d !== nil && $d != null) ? $d : $rb_lt(enum_size, n))) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return 0
} else {
return $rb_plus($rb_minus(enum_size, n), 1)
};}, TMP_26.$$s = self, TMP_26.$$arity = 0, TMP_26), $a).call($b, "each_cons", n)
};
var buffer = [], result = nil;
self.$each.$$p = function() {
var element = $scope.get('Opal').$destructure(arguments);
buffer.push(element);
if (buffer.length > n) {
buffer.shift();
}
if (buffer.length == n) {
Opal.yield1(block, buffer.slice(0, n));
}
}
self.$each();
return result;
}, TMP_25.$$arity = 1);
Opal.defn(self, '$each_entry', TMP_27 = function $$each_entry($a_rest) {
var $b, $c, TMP_28, self = this, data, $iter = TMP_27.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
data = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
data[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_27.$$p = null;
if ((block !== nil)) {
} else {
return ($b = ($c = self).$to_enum, $b.$$p = (TMP_28 = function(){var self = TMP_28.$$s || this;
return self.$enumerator_size()}, TMP_28.$$s = self, TMP_28.$$arity = 0, TMP_28), $b).apply($c, ["each_entry"].concat(Opal.to_a(data)))
};
self.$each.$$p = function() {
var item = $scope.get('Opal').$destructure(arguments);
Opal.yield1(block, item);
}
self.$each.apply(self, data);
return self;
;
}, TMP_27.$$arity = -1);
Opal.defn(self, '$each_slice', TMP_29 = function $$each_slice(n) {
var $a, $b, TMP_30, self = this, $iter = TMP_29.$$p, block = $iter || nil;
TMP_29.$$p = null;
n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int");
if ((($a = n <= 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "invalid slice size")};
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_30 = function(){var self = TMP_30.$$s || this, $c;
if ((($c = self['$respond_to?']("size")) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return ($rb_divide(self.$size(), n)).$ceil()
} else {
return nil
}}, TMP_30.$$s = self, TMP_30.$$arity = 0, TMP_30), $a).call($b, "each_slice", n)
};
var result,
slice = []
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments);
slice.push(param);
if (slice.length === n) {
Opal.yield1(block, slice);
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) {
Opal.yield1(block, slice);
}
;
return nil;
}, TMP_29.$$arity = 1);
Opal.defn(self, '$each_with_index', TMP_31 = function $$each_with_index($a_rest) {
var $b, $c, TMP_32, self = this, args, $iter = TMP_31.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_31.$$p = null;
if ((block !== nil)) {
} else {
return ($b = ($c = self).$enum_for, $b.$$p = (TMP_32 = function(){var self = TMP_32.$$s || this;
return self.$enumerator_size()}, TMP_32.$$s = self, TMP_32.$$arity = 0, TMP_32), $b).apply($c, ["each_with_index"].concat(Opal.to_a(args)))
};
var result,
index = 0;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments);
block(param, index);
index++;
};
self.$each.apply(self, args);
if (result !== undefined) {
return result;
}
return self;
}, TMP_31.$$arity = -1);
Opal.defn(self, '$each_with_object', TMP_33 = function $$each_with_object(object) {
var $a, $b, TMP_34, self = this, $iter = TMP_33.$$p, block = $iter || nil;
TMP_33.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_34 = function(){var self = TMP_34.$$s || this;
return self.$enumerator_size()}, TMP_34.$$s = self, TMP_34.$$arity = 0, TMP_34), $a).call($b, "each_with_object", object)
};
var result;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments);
block(param, object);
};
self.$each();
if (result !== undefined) {
return result;
}
return object;
}, TMP_33.$$arity = 1);
Opal.defn(self, '$entries', TMP_35 = function $$entries($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
var result = [];
self.$each.$$p = function() {
result.push($scope.get('Opal').$destructure(arguments));
};
self.$each.apply(self, args);
return result;
}, TMP_35.$$arity = -1);
Opal.alias(self, 'find', 'detect');
Opal.defn(self, '$find_all', TMP_36 = function $$find_all() {
var $a, $b, TMP_37, 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;
return self.$enumerator_size()}, TMP_37.$$s = self, TMP_37.$$arity = 0, TMP_37), $a).call($b, "find_all")
};
var result = [];
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = Opal.yield1(block, param);
if ((($a = value) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
result.push(param);
}
};
self.$each();
return result;
}, TMP_36.$$arity = 0);
Opal.defn(self, '$find_index', TMP_38 = function $$find_index(object) {try {
var $a, $b, TMP_39, $c, TMP_40, self = this, $iter = TMP_38.$$p, block = $iter || nil, index = nil;
TMP_38.$$p = null;
if ((($a = object === undefined && block === nil) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$enum_for("find_index")};
index = 0;
if ((($a = object != null) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
($a = ($b = self).$each, $a.$$p = (TMP_39 = function($c_rest){var self = TMP_39.$$s || this, value;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ($scope.get('Opal').$destructure(value)['$=='](object)) {
Opal.ret(index)};
return index += 1;}, TMP_39.$$s = self, TMP_39.$$arity = -1, TMP_39), $a).call($b)
} else {
($a = ($c = self).$each, $a.$$p = (TMP_40 = function($d_rest){var self = TMP_40.$$s || this, value, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($e = Opal.yieldX(block, Opal.to_a(value))) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
Opal.ret(index)};
return index += 1;}, TMP_40.$$s = self, TMP_40.$$arity = -1, TMP_40), $a).call($c)
};
return nil;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_38.$$arity = -1);
Opal.defn(self, '$first', TMP_43 = function $$first(number) {try {
var $a, $b, TMP_41, $c, TMP_42, self = this, result = nil, current = nil;
if ((($a = number === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ($a = ($b = self).$each, $a.$$p = (TMP_41 = function(value){var self = TMP_41.$$s || this;
if (value == null) value = nil;
Opal.ret(value)}, TMP_41.$$s = self, TMP_41.$$arity = 1, TMP_41), $a).call($b)
} else {
result = [];
number = $scope.get('Opal').$coerce_to(number, $scope.get('Integer'), "to_int");
if ((($a = number < 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "attempt to take negative size")};
if ((($a = number == 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return []};
current = 0;
($a = ($c = self).$each, $a.$$p = (TMP_42 = function($d_rest){var self = TMP_42.$$s || this, args, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
result.push($scope.get('Opal').$destructure(args));
if ((($e = number <= ++current) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
Opal.ret(result)
} else {
return nil
};}, TMP_42.$$s = self, TMP_42.$$arity = -1, TMP_42), $a).call($c);
return result;
};
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_43.$$arity = -1);
Opal.alias(self, 'flat_map', 'collect_concat');
Opal.defn(self, '$grep', TMP_44 = function $$grep(pattern) {
var $a, self = this, $iter = TMP_44.$$p, block = $iter || nil;
TMP_44.$$p = null;
var result = [];
if (block !== nil) {
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = pattern['$==='](param);
if ((($a = value) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
value = Opal.yield1(block, param);
result.push(value);
}
};
}
else {
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = pattern['$==='](param);
if ((($a = value) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
result.push(param);
}
};
}
self.$each();
return result;
;
}, TMP_44.$$arity = 1);
Opal.defn(self, '$group_by', TMP_45 = function $$group_by() {
var $a, $b, TMP_46, $c, $d, self = this, $iter = TMP_45.$$p, block = $iter || nil, hash = nil;
TMP_45.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_46 = function(){var self = TMP_46.$$s || this;
return self.$enumerator_size()}, TMP_46.$$s = self, TMP_46.$$arity = 0, TMP_46), $a).call($b, "group_by")
};
hash = $scope.get('Hash').$new();
var result;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = Opal.yield1(block, param);
(($a = value, $c = hash, ((($d = $c['$[]']($a)) !== false && $d !== nil && $d != null) ? $d : $c['$[]=']($a, []))))['$<<'](param);
}
self.$each();
if (result !== undefined) {
return result;
}
return hash;
}, TMP_45.$$arity = 0);
Opal.defn(self, '$include?', TMP_48 = function(obj) {try {
var $a, $b, TMP_47, self = this;
($a = ($b = self).$each, $a.$$p = (TMP_47 = function($c_rest){var self = TMP_47.$$s || this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ($scope.get('Opal').$destructure(args)['$=='](obj)) {
Opal.ret(true)
} else {
return nil
}}, TMP_47.$$s = self, TMP_47.$$arity = -1, TMP_47), $a).call($b);
return false;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_48.$$arity = 1);
Opal.defn(self, '$inject', TMP_49 = function $$inject(object, sym) {
var self = this, $iter = TMP_49.$$p, block = $iter || nil;
TMP_49.$$p = null;
var result = object;
if (block !== nil && sym === undefined) {
self.$each.$$p = function() {
var value = $scope.get('Opal').$destructure(arguments);
if (result === undefined) {
result = value;
return;
}
value = Opal.yieldX(block, [result, value]);
result = value;
};
}
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);
if (result === undefined) {
result = value;
return;
}
result = (result).$__send__(sym, value);
};
}
self.$each();
return result == undefined ? nil : result;
;
}, TMP_49.$$arity = -1);
Opal.defn(self, '$lazy', TMP_51 = function $$lazy() {
var $a, $b, TMP_50, self = this;
return ($a = ($b = (($scope.get('Enumerator')).$$scope.get('Lazy'))).$new, $a.$$p = (TMP_50 = function(enum$, $c_rest){var self = TMP_50.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
return ($d = enum$).$yield.apply($d, Opal.to_a(args))}, TMP_50.$$s = self, TMP_50.$$arity = -2, TMP_50), $a).call($b, self, self.$enumerator_size());
}, TMP_51.$$arity = 0);
Opal.defn(self, '$enumerator_size', TMP_52 = function $$enumerator_size() {
var $a, self = this;
if ((($a = self['$respond_to?']("size")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$size()
} else {
return nil
};
}, TMP_52.$$arity = 0);
Opal.alias(self, 'map', 'collect');
Opal.defn(self, '$max', TMP_53 = function $$max(n) {
var $a, $b, self = this, $iter = TMP_53.$$p, block = $iter || nil;
TMP_53.$$p = null;
if (n === undefined || n === nil) {
var result, value;
self.$each.$$p = function() {
var item = $scope.get('Opal').$destructure(arguments);
if (result === undefined) {
result = item;
return;
}
if (block !== nil) {
value = Opal.yieldX(block, [item, result]);
} else {
value = (item)['$<=>'](result);
}
if (value === nil) {
self.$raise($scope.get('ArgumentError'), "comparison failed");
}
if (value > 0) {
result = item;
}
}
self.$each();
if (result === undefined) {
return nil;
} else {
return result;
}
}
n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int");
return ($a = ($b = self).$sort, $a.$$p = block.$to_proc(), $a).call($b).$reverse().$first(n);
}, TMP_53.$$arity = -1);
Opal.defn(self, '$max_by', TMP_54 = function $$max_by() {
var $a, $b, TMP_55, self = this, $iter = TMP_54.$$p, block = $iter || nil;
TMP_54.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_55 = function(){var self = TMP_55.$$s || this;
return self.$enumerator_size()}, TMP_55.$$s = self, TMP_55.$$arity = 0, TMP_55), $a).call($b, "max_by")
};
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;
}
if ((value)['$<=>'](by) > 0) {
result = param
by = value;
}
};
self.$each();
return result === undefined ? nil : result;
}, TMP_54.$$arity = 0);
Opal.alias(self, 'member?', 'include?');
Opal.defn(self, '$min', TMP_56 = function $$min() {
var self = this, $iter = TMP_56.$$p, block = $iter || nil;
TMP_56.$$p = null;
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 === 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);
if (result === undefined) {
result = param;
return;
}
if ($scope.get('Opal').$compare(param, result) < 0) {
result = param;
}
};
}
self.$each();
return result === undefined ? nil : result;
}, TMP_56.$$arity = 0);
Opal.defn(self, '$min_by', TMP_57 = function $$min_by() {
var $a, $b, TMP_58, self = this, $iter = TMP_57.$$p, block = $iter || nil;
TMP_57.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_58 = function(){var self = TMP_58.$$s || this;
return self.$enumerator_size()}, TMP_58.$$s = self, TMP_58.$$arity = 0, TMP_58), $a).call($b, "min_by")
};
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;
}
if ((value)['$<=>'](by) < 0) {
result = param
by = value;
}
};
self.$each();
return result === undefined ? nil : result;
}, TMP_57.$$arity = 0);
Opal.defn(self, '$minmax', TMP_59 = function $$minmax() {
var $a, $b, $c, TMP_60, self = this, $iter = TMP_59.$$p, block = $iter || nil;
TMP_59.$$p = null;
((($a = block) !== false && $a !== nil && $a != null) ? $a : block = ($b = ($c = self).$proc, $b.$$p = (TMP_60 = function(a, b){var self = TMP_60.$$s || this;
if (a == null) a = nil;if (b == null) b = nil;
return a['$<=>'](b)}, TMP_60.$$s = self, TMP_60.$$arity = 2, TMP_60), $b).call($c));
var min = nil, max = nil, first_time = true;
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);
if (min_cmp === nil) {
self.$raise($scope.get('ArgumentError'), "comparison failed")
} else if (min_cmp > 0) {
min = element;
}
var max_cmp = block.$call(max, element);
if (max_cmp === nil) {
self.$raise($scope.get('ArgumentError'), "comparison failed")
} else if (max_cmp < 0) {
max = element;
}
}
}
self.$each();
return [min, max];
}, TMP_59.$$arity = 0);
Opal.defn(self, '$minmax_by', TMP_61 = function $$minmax_by() {
var self = this, $iter = TMP_61.$$p, block = $iter || nil;
TMP_61.$$p = null;
return self.$raise($scope.get('NotImplementedError'));
}, TMP_61.$$arity = 0);
Opal.defn(self, '$none?', TMP_62 = function() {try {
var $a, $b, TMP_63, $c, TMP_64, self = this, $iter = TMP_62.$$p, block = $iter || nil;
TMP_62.$$p = null;
if ((block !== nil)) {
($a = ($b = self).$each, $a.$$p = (TMP_63 = function($c_rest){var self = TMP_63.$$s || this, value, $d;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($d = Opal.yieldX(block, Opal.to_a(value))) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
Opal.ret(false)
} else {
return nil
}}, TMP_63.$$s = self, TMP_63.$$arity = -1, TMP_63), $a).call($b)
} else {
($a = ($c = self).$each, $a.$$p = (TMP_64 = function($d_rest){var self = TMP_64.$$s || this, value, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($e = $scope.get('Opal').$destructure(value)) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
Opal.ret(false)
} else {
return nil
}}, TMP_64.$$s = self, TMP_64.$$arity = -1, TMP_64), $a).call($c)
};
return true;
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_62.$$arity = 0);
Opal.defn(self, '$one?', TMP_65 = function() {try {
var $a, $b, TMP_66, $c, TMP_67, self = this, $iter = TMP_65.$$p, block = $iter || nil, count = nil;
TMP_65.$$p = null;
count = 0;
if ((block !== nil)) {
($a = ($b = self).$each, $a.$$p = (TMP_66 = function($c_rest){var self = TMP_66.$$s || this, value, $d;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($d = Opal.yieldX(block, Opal.to_a(value))) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
count = $rb_plus(count, 1);
if ((($d = $rb_gt(count, 1)) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
Opal.ret(false)
} else {
return nil
};
} else {
return nil
}}, TMP_66.$$s = self, TMP_66.$$arity = -1, TMP_66), $a).call($b)
} else {
($a = ($c = self).$each, $a.$$p = (TMP_67 = function($d_rest){var self = TMP_67.$$s || this, value, $e;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
value = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
value[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($e = $scope.get('Opal').$destructure(value)) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
count = $rb_plus(count, 1);
if ((($e = $rb_gt(count, 1)) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
Opal.ret(false)
} else {
return nil
};
} else {
return nil
}}, TMP_67.$$s = self, TMP_67.$$arity = -1, TMP_67), $a).call($c)
};
return count['$=='](1);
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_65.$$arity = 0);
Opal.defn(self, '$partition', TMP_68 = function $$partition() {
var $a, $b, TMP_69, self = this, $iter = TMP_68.$$p, block = $iter || nil;
TMP_68.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_69 = function(){var self = TMP_69.$$s || this;
return self.$enumerator_size()}, TMP_69.$$s = self, TMP_69.$$arity = 0, TMP_69), $a).call($b, "partition")
};
var truthy = [], falsy = [], result;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = Opal.yield1(block, param);
if ((($a = value) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
truthy.push(param);
}
else {
falsy.push(param);
}
};
self.$each();
return [truthy, falsy];
}, TMP_68.$$arity = 0);
Opal.alias(self, 'reduce', 'inject');
Opal.defn(self, '$reject', TMP_70 = function $$reject() {
var $a, $b, TMP_71, self = this, $iter = TMP_70.$$p, block = $iter || nil;
TMP_70.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_71 = function(){var self = TMP_71.$$s || this;
return self.$enumerator_size()}, TMP_71.$$s = self, TMP_71.$$arity = 0, TMP_71), $a).call($b, "reject")
};
var result = [];
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = Opal.yield1(block, param);
if ((($a = value) === nil || $a == null || ($a.$$is_boolean && $a == false))) {
result.push(param);
}
};
self.$each();
return result;
}, TMP_70.$$arity = 0);
Opal.defn(self, '$reverse_each', TMP_72 = function $$reverse_each() {
var $a, $b, TMP_73, self = this, $iter = TMP_72.$$p, block = $iter || nil;
TMP_72.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_73 = function(){var self = TMP_73.$$s || this;
return self.$enumerator_size()}, TMP_73.$$s = self, TMP_73.$$arity = 0, TMP_73), $a).call($b, "reverse_each")
};
var result = [];
self.$each.$$p = function() {
result.push(arguments);
};
self.$each();
for (var i = result.length - 1; i >= 0; i--) {
Opal.yieldX(block, result[i]);
}
return result;
}, TMP_72.$$arity = 0);
Opal.alias(self, 'select', 'find_all');
Opal.defn(self, '$slice_before', TMP_74 = function $$slice_before(pattern) {
var $a, $b, TMP_75, self = this, $iter = TMP_74.$$p, block = $iter || nil;
TMP_74.$$p = null;
if ((($a = pattern === undefined && block === nil || arguments.length > 1) !== nil && $a != null && (!$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_75 = function(e){var self = TMP_75.$$s || this, $c;
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);
if ((($c = value) !== nil && $c != null && (!$c.$$is_boolean || $c == 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 ((($c = value) !== nil && $c != null && (!$c.$$is_boolean || $c == true)) && slice.length > 0) {
e['$<<'](slice);
slice = [];
}
slice.push(param);
};
}
}
else {
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = pattern['$==='](param);
if ((($c = value) !== nil && $c != null && (!$c.$$is_boolean || $c == true)) && slice.length > 0) {
e['$<<'](slice);
slice = [];
}
slice.push(param);
};
}
self.$each();
if (slice.length > 0) {
e['$<<'](slice);
}
;}, TMP_75.$$s = self, TMP_75.$$arity = 1, TMP_75), $a).call($b);
}, TMP_74.$$arity = -1);
Opal.defn(self, '$sort', TMP_76 = function $$sort() {
var $a, $b, TMP_77, $c, self = this, $iter = TMP_76.$$p, block = $iter || nil, ary = nil;
TMP_76.$$p = null;
ary = self.$to_a();
if ((block !== nil)) {
} else {
block = ($a = ($b = self).$lambda, $a.$$p = (TMP_77 = function(a, b){var self = TMP_77.$$s || this;
if (a == null) a = nil;if (b == null) b = nil;
return a['$<=>'](b)}, TMP_77.$$s = self, TMP_77.$$arity = 2, TMP_77), $a).call($b)
};
return ($a = ($c = ary).$sort, $a.$$p = block.$to_proc(), $a).call($c);
}, TMP_76.$$arity = 0);
Opal.defn(self, '$sort_by', TMP_78 = function $$sort_by() {
var $a, $b, TMP_79, $c, TMP_80, $d, TMP_81, $e, TMP_82, self = this, $iter = TMP_78.$$p, block = $iter || nil, dup = nil;
TMP_78.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_79 = function(){var self = TMP_79.$$s || this;
return self.$enumerator_size()}, TMP_79.$$s = self, TMP_79.$$arity = 0, TMP_79), $a).call($b, "sort_by")
};
dup = ($a = ($c = self).$map, $a.$$p = (TMP_80 = function(){var self = TMP_80.$$s || this, $yielded, arg = nil;
arg = $scope.get('Opal').$destructure(arguments);
($yielded = Opal.yield1(block, arg));return [$yielded, arg];}, TMP_80.$$s = self, TMP_80.$$arity = 0, TMP_80), $a).call($c);
($a = ($d = dup)['$sort!'], $a.$$p = (TMP_81 = function(a, b){var self = TMP_81.$$s || this;
if (a == null) a = nil;if (b == null) b = nil;
return (a[0])['$<=>'](b[0])}, TMP_81.$$s = self, TMP_81.$$arity = 2, TMP_81), $a).call($d);
return ($a = ($e = dup)['$map!'], $a.$$p = (TMP_82 = function(i){var self = TMP_82.$$s || this;
if (i == null) i = nil;
return i[1];}, TMP_82.$$s = self, TMP_82.$$arity = 1, TMP_82), $a).call($e);
}, TMP_78.$$arity = 0);
Opal.defn(self, '$take', TMP_83 = function $$take(num) {
var self = this;
return self.$first(num);
}, TMP_83.$$arity = 1);
Opal.defn(self, '$take_while', TMP_84 = function $$take_while() {try {
var $a, $b, TMP_85, self = this, $iter = TMP_84.$$p, block = $iter || nil, result = nil;
TMP_84.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return self.$enum_for("take_while")
};
result = [];
return ($a = ($b = self).$each, $a.$$p = (TMP_85 = function($c_rest){var self = TMP_85.$$s || this, args, $d, value = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
value = $scope.get('Opal').$destructure(args);
if ((($d = Opal.yield1(block, value)) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
} else {
Opal.ret(result)
};
return result.push(value);}, TMP_85.$$s = self, TMP_85.$$arity = -1, TMP_85), $a).call($b);
} catch ($returner) { if ($returner === Opal.returner) { return $returner.$v } throw $returner; }
}, TMP_84.$$arity = 0);
Opal.alias(self, 'to_a', 'entries');
Opal.defn(self, '$zip', TMP_86 = function $$zip($a_rest) {
var $b, self = this, others, $iter = TMP_86.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
others = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
others[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_86.$$p = null;
return ($b = self.$to_a()).$zip.apply($b, Opal.to_a(others));
}, TMP_86.$$arity = -1);
})($scope.base)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/enumerator"] = function(Opal) {
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', '$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);
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_7;
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, $a_rest) {
var self = this, args, $iter = TMP_1.$$p, block = $iter || nil;
if (method == null) {
method = "each";
}
var $args_len = arguments.length, $rest_len = $args_len - 2;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 2; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 2] = arguments[$arg_idx];
}
TMP_1.$$p = null;
var obj = self.$allocate();
obj.object = object;
obj.size = block;
obj.method = method;
obj.args = args;
return obj;
;
}, TMP_1.$$arity = -2);
Opal.defn(self, '$initialize', TMP_2 = function $$initialize($a_rest) {
var $b, $c, self = this, $iter = TMP_2.$$p, block = $iter || nil;
TMP_2.$$p = null;
if (block !== false && block !== nil && block != null) {
self.object = ($b = ($c = $scope.get('Generator')).$new, $b.$$p = block.$to_proc(), $b).call($c);
self.method = "each";
self.args = [];
self.size = arguments[0] || nil;
if ((($b = self.size) !== nil && $b != null && (!$b.$$is_boolean || $b == 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;
};
}, TMP_2.$$arity = -1);
Opal.defn(self, '$each', TMP_3 = function $$each($a_rest) {
var $b, $c, $d, self = this, args, $iter = TMP_3.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_3.$$p = null;
if ((($b = ($c = block['$nil?'](), $c !== false && $c !== nil && $c != null ?args['$empty?']() : $c)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return self};
args = $rb_plus(self.args, args);
if ((($b = block['$nil?']()) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return ($b = self.$class()).$new.apply($b, [self.object, self.method].concat(Opal.to_a(args)))};
return ($c = ($d = self.object).$__send__, $c.$$p = block.$to_proc(), $c).apply($d, [self.method].concat(Opal.to_a(args)));
}, TMP_3.$$arity = -1);
Opal.defn(self, '$size', TMP_4 = function $$size() {
var $a, self = this;
if ((($a = $scope.get('Proc')['$==='](self.size)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ($a = self.size).$call.apply($a, Opal.to_a(self.args))
} else {
return self.size
};
}, TMP_4.$$arity = 0);
Opal.defn(self, '$with_index', TMP_5 = function $$with_index(offset) {
var $a, $b, TMP_6, self = this, $iter = TMP_5.$$p, block = $iter || nil;
if (offset == null) {
offset = 0;
}
TMP_5.$$p = null;
if (offset !== false && offset !== nil && offset != null) {
offset = $scope.get('Opal').$coerce_to(offset, $scope.get('Integer'), "to_int")
} else {
offset = 0
};
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_6 = function(){var self = TMP_6.$$s || this;
return self.$size()}, TMP_6.$$s = self, TMP_6.$$arity = 0, TMP_6), $a).call($b, "with_index", offset)
};
var result, index = offset;
self.$each.$$p = function() {
var param = $scope.get('Opal').$destructure(arguments),
value = block(param, index);
index++;
return value;
}
return self.$each();
}, TMP_5.$$arity = -1);
Opal.alias(self, 'with_object', 'each_with_object');
Opal.defn(self, '$inspect', TMP_7 = function $$inspect() {
var $a, self = this, result = nil;
result = "#<" + (self.$class()) + ": " + (self.object.$inspect()) + ":" + (self.method);
if ((($a = self.args['$empty?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
result = $rb_plus(result, "(" + (self.args.$inspect()['$[]']($scope.get('Range').$new(1, -2))) + ")")
};
return $rb_plus(result, ">");
}, TMP_7.$$arity = 0);
(function($base, $super) {
function $Generator(){};
var self = $Generator = $klass($base, $super, 'Generator', $Generator);
var def = self.$$proto, $scope = self.$$scope, TMP_8, TMP_9;
def.block = nil;
self.$include($scope.get('Enumerable'));
Opal.defn(self, '$initialize', TMP_8 = function $$initialize() {
var self = this, $iter = TMP_8.$$p, block = $iter || nil;
TMP_8.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('LocalJumpError'), "no block given")
};
return self.block = block;
}, TMP_8.$$arity = 0);
return (Opal.defn(self, '$each', TMP_9 = function $$each($a_rest) {
var $b, $c, self = this, args, $iter = TMP_9.$$p, block = $iter || nil, yielder = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_9.$$p = null;
yielder = ($b = ($c = $scope.get('Yielder')).$new, $b.$$p = block.$to_proc(), $b).call($c);
try {
args.unshift(yielder);
Opal.yieldX(self.block, args);
}
catch (e) {
if (e === $breaker) {
return $breaker.$v;
}
else {
throw e;
}
}
;
return self;
}, TMP_9.$$arity = -1), nil) && 'each';
})($scope.base, null);
(function($base, $super) {
function $Yielder(){};
var self = $Yielder = $klass($base, $super, 'Yielder', $Yielder);
var def = self.$$proto, $scope = self.$$scope, TMP_10, TMP_11, TMP_12;
def.block = nil;
Opal.defn(self, '$initialize', TMP_10 = function $$initialize() {
var self = this, $iter = TMP_10.$$p, block = $iter || nil;
TMP_10.$$p = null;
return self.block = block;
}, TMP_10.$$arity = 0);
Opal.defn(self, '$yield', TMP_11 = function($a_rest) {
var self = this, values;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
values = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
values[$arg_idx - 0] = arguments[$arg_idx];
}
var value = Opal.yieldX(self.block, values);
if (value === $breaker) {
throw $breaker;
}
return value;
;
}, TMP_11.$$arity = -1);
return (Opal.defn(self, '$<<', TMP_12 = function($a_rest) {
var $b, self = this, values;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
values = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
values[$arg_idx - 0] = arguments[$arg_idx];
}
($b = self).$yield.apply($b, Opal.to_a(values));
return self;
}, TMP_12.$$arity = -1), nil) && '<<';
})($scope.base, null);
return (function($base, $super) {
function $Lazy(){};
var self = $Lazy = $klass($base, $super, 'Lazy', $Lazy);
var def = self.$$proto, $scope = self.$$scope, TMP_13, TMP_16, TMP_17, TMP_19, TMP_24, TMP_25, TMP_27, TMP_28, TMP_30, TMP_33, TMP_36, TMP_37, TMP_39;
def.enumerator = nil;
(function($base, $super) {
function $StopLazyError(){};
var self = $StopLazyError = $klass($base, $super, 'StopLazyError', $StopLazyError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('Exception'));
Opal.defn(self, '$initialize', TMP_13 = function $$initialize(object, size) {
var $a, $b, TMP_14, self = this, $iter = TMP_13.$$p, block = $iter || nil;
if (size == null) {
size = nil;
}
TMP_13.$$p = null;
if ((block !== nil)) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to call lazy new without a block")
};
self.enumerator = object;
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'initialize', TMP_13, false)), $a.$$p = (TMP_14 = function(yielder, $c_rest){var self = TMP_14.$$s || this, each_args, $d, $e, TMP_15;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
each_args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
each_args[$arg_idx - 1] = arguments[$arg_idx];
}if (yielder == null) yielder = nil;
try {
return ($d = ($e = object).$each, $d.$$p = (TMP_15 = function($c_rest){var self = TMP_15.$$s || this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
args.unshift(yielder);
Opal.yieldX(block, args);
;}, TMP_15.$$s = self, TMP_15.$$arity = -1, TMP_15), $d).apply($e, Opal.to_a(each_args))
} catch ($err) {
if (Opal.rescue($err, [$scope.get('Exception')])) {
try {
return nil
} finally { Opal.pop_exception() }
} else { throw $err; }
}}, TMP_14.$$s = self, TMP_14.$$arity = -2, TMP_14), $a).call($b, size);
}, TMP_13.$$arity = -2);
Opal.alias(self, 'force', 'to_a');
Opal.defn(self, '$lazy', TMP_16 = function $$lazy() {
var self = this;
return self;
}, TMP_16.$$arity = 0);
Opal.defn(self, '$collect', TMP_17 = function $$collect() {
var $a, $b, TMP_18, self = this, $iter = TMP_17.$$p, block = $iter || nil;
TMP_17.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block")
};
return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_18 = function(enum$, $c_rest){var self = TMP_18.$$s || this, args;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var value = Opal.yieldX(block, args);
enum$.$yield(value);
}, TMP_18.$$s = self, TMP_18.$$arity = -2, TMP_18), $a).call($b, self, self.$enumerator_size());
}, TMP_17.$$arity = 0);
Opal.defn(self, '$collect_concat', TMP_19 = function $$collect_concat() {
var $a, $b, TMP_20, self = this, $iter = TMP_19.$$p, block = $iter || nil;
TMP_19.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to call lazy map without a block")
};
return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_20 = function(enum$, $c_rest){var self = TMP_20.$$s || this, args, $d, $e, TMP_21, $f, TMP_22;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var value = Opal.yieldX(block, args);
if ((value)['$respond_to?']("force") && (value)['$respond_to?']("each")) {
($d = ($e = (value)).$each, $d.$$p = (TMP_21 = function(v){var self = TMP_21.$$s || this;
if (v == null) v = nil;
return enum$.$yield(v)}, TMP_21.$$s = self, TMP_21.$$arity = 1, TMP_21), $d).call($e)
}
else {
var array = $scope.get('Opal').$try_convert(value, $scope.get('Array'), "to_ary");
if (array === nil) {
enum$.$yield(value);
}
else {
($d = ($f = (value)).$each, $d.$$p = (TMP_22 = function(v){var self = TMP_22.$$s || this;
if (v == null) v = nil;
return enum$.$yield(v)}, TMP_22.$$s = self, TMP_22.$$arity = 1, TMP_22), $d).call($f);
}
}
;}, TMP_20.$$s = self, TMP_20.$$arity = -2, TMP_20), $a).call($b, self, nil);
}, TMP_19.$$arity = 0);
Opal.defn(self, '$drop', TMP_24 = function $$drop(n) {
var $a, $b, TMP_23, self = this, current_size = nil, set_size = nil, dropped = nil;
n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int");
if ((($a = $rb_lt(n, 0)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $rb_lt(n, current_size)) !== nil && $a != null && (!$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_23 = function(enum$, $c_rest){var self = TMP_23.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
if ((($d = $rb_lt(dropped, n)) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
return dropped = $rb_plus(dropped, 1)
} else {
return ($d = enum$).$yield.apply($d, Opal.to_a(args))
}}, TMP_23.$$s = self, TMP_23.$$arity = -2, TMP_23), $a).call($b, self, set_size);
}, TMP_24.$$arity = 1);
Opal.defn(self, '$drop_while', TMP_25 = function $$drop_while() {
var $a, $b, TMP_26, self = this, $iter = TMP_25.$$p, block = $iter || nil, succeeding = nil;
TMP_25.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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_26 = function(enum$, $c_rest){var self = TMP_26.$$s || this, args, $d, $e;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
if (succeeding !== false && succeeding !== nil && succeeding != null) {
var value = Opal.yieldX(block, args);
if ((($d = value) === nil || $d == null || ($d.$$is_boolean && $d == false))) {
succeeding = false;
($d = enum$).$yield.apply($d, Opal.to_a(args));
}
} else {
return ($e = enum$).$yield.apply($e, Opal.to_a(args))
}}, TMP_26.$$s = self, TMP_26.$$arity = -2, TMP_26), $a).call($b, self, nil);
}, TMP_25.$$arity = 0);
Opal.defn(self, '$enum_for', TMP_27 = function $$enum_for(method, $a_rest) {
var $b, $c, self = this, args, $iter = TMP_27.$$p, block = $iter || nil;
if (method == null) {
method = "each";
}
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_27.$$p = null;
return ($b = ($c = self.$class()).$for, $b.$$p = block.$to_proc(), $b).apply($c, [self, method].concat(Opal.to_a(args)));
}, TMP_27.$$arity = -1);
Opal.defn(self, '$find_all', TMP_28 = function $$find_all() {
var $a, $b, TMP_29, self = this, $iter = TMP_28.$$p, block = $iter || nil;
TMP_28.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to call lazy select without a block")
};
return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_29 = function(enum$, $c_rest){var self = TMP_29.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var value = Opal.yieldX(block, args);
if ((($d = value) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
($d = enum$).$yield.apply($d, Opal.to_a(args));
}
;}, TMP_29.$$s = self, TMP_29.$$arity = -2, TMP_29), $a).call($b, self, nil);
}, TMP_28.$$arity = 0);
Opal.alias(self, 'flat_map', 'collect_concat');
Opal.defn(self, '$grep', TMP_30 = function $$grep(pattern) {
var $a, $b, TMP_31, $c, TMP_32, self = this, $iter = TMP_30.$$p, block = $iter || nil;
TMP_30.$$p = null;
if (block !== false && block !== nil && block != null) {
return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_31 = function(enum$, $c_rest){var self = TMP_31.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var param = $scope.get('Opal').$destructure(args),
value = pattern['$==='](param);
if ((($d = value) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
value = Opal.yield1(block, param);
enum$.$yield(Opal.yield1(block, param));
}
;}, TMP_31.$$s = self, TMP_31.$$arity = -2, TMP_31), $a).call($b, self, nil)
} else {
return ($a = ($c = $scope.get('Lazy')).$new, $a.$$p = (TMP_32 = function(enum$, $d_rest){var self = TMP_32.$$s || this, args, $e;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var param = $scope.get('Opal').$destructure(args),
value = pattern['$==='](param);
if ((($e = value) !== nil && $e != null && (!$e.$$is_boolean || $e == true))) {
enum$.$yield(param);
}
;}, TMP_32.$$s = self, TMP_32.$$arity = -2, TMP_32), $a).call($c, self, nil)
};
}, TMP_30.$$arity = 1);
Opal.alias(self, 'map', 'collect');
Opal.alias(self, 'select', 'find_all');
Opal.defn(self, '$reject', TMP_33 = function $$reject() {
var $a, $b, TMP_34, self = this, $iter = TMP_33.$$p, block = $iter || nil;
TMP_33.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to call lazy reject without a block")
};
return ($a = ($b = $scope.get('Lazy')).$new, $a.$$p = (TMP_34 = function(enum$, $c_rest){var self = TMP_34.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var value = Opal.yieldX(block, args);
if ((($d = value) === nil || $d == null || ($d.$$is_boolean && $d == false))) {
($d = enum$).$yield.apply($d, Opal.to_a(args));
}
;}, TMP_34.$$s = self, TMP_34.$$arity = -2, TMP_34), $a).call($b, self, nil);
}, TMP_33.$$arity = 0);
Opal.defn(self, '$take', TMP_36 = function $$take(n) {
var $a, $b, TMP_35, self = this, current_size = nil, set_size = nil, taken = nil;
n = $scope.get('Opal').$coerce_to(n, $scope.get('Integer'), "to_int");
if ((($a = $rb_lt(n, 0)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $rb_lt(n, current_size)) !== nil && $a != null && (!$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_35 = function(enum$, $c_rest){var self = TMP_35.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
if ((($d = $rb_lt(taken, n)) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
($d = enum$).$yield.apply($d, Opal.to_a(args));
return taken = $rb_plus(taken, 1);
} else {
return self.$raise($scope.get('StopLazyError'))
}}, TMP_35.$$s = self, TMP_35.$$arity = -2, TMP_35), $a).call($b, self, set_size);
}, TMP_36.$$arity = 1);
Opal.defn(self, '$take_while', TMP_37 = function $$take_while() {
var $a, $b, TMP_38, self = this, $iter = TMP_37.$$p, block = $iter || nil;
TMP_37.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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_38 = function(enum$, $c_rest){var self = TMP_38.$$s || this, args, $d;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}if (enum$ == null) enum$ = nil;
var value = Opal.yieldX(block, args);
if ((($d = value) !== nil && $d != null && (!$d.$$is_boolean || $d == true))) {
($d = enum$).$yield.apply($d, Opal.to_a(args));
}
else {
self.$raise($scope.get('StopLazyError'));
}
;}, TMP_38.$$s = self, TMP_38.$$arity = -2, TMP_38), $a).call($b, self, nil);
}, TMP_37.$$arity = 0);
Opal.alias(self, 'to_enum', 'enum_for');
return (Opal.defn(self, '$inspect', TMP_39 = function $$inspect() {
var self = this;
return "#<" + (self.$class()) + ": " + (self.enumerator.$inspect()) + ">";
}, TMP_39.$$arity = 0), nil) && 'inspect';
})($scope.base, self);
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/numeric"] = function(Opal) {
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;
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);
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_20, TMP_21, 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_34, TMP_35, TMP_36;
self.$include($scope.get('Comparable'));
Opal.defn(self, '$coerce', TMP_1 = function $$coerce(other) {
var $a, self = this;
if ((($a = other['$instance_of?'](self.$class())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return [other, self]};
return [self.$Float(other), self.$Float(self)];
}, TMP_1.$$arity = 1);
Opal.defn(self, '$__coerced__', TMP_2 = function $$__coerced__(method, other) {
var $a, $b, self = this, a = nil, b = nil, $case = nil;
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 (Opal.rescue($err, [$scope.get('StandardError')])) {
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.pop_exception() }
} else { throw $err; }
};
return a.$__send__(method, b);
}, TMP_2.$$arity = 2);
Opal.defn(self, '$<=>', TMP_3 = function(other) {
var $a, self = this;
if ((($a = self['$equal?'](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 0};
return nil;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$[]', TMP_4 = function(bit) {
var self = this, min = nil, max = nil;
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;
}, TMP_4.$$arity = 1);
Opal.defn(self, '$+@', TMP_5 = function() {
var self = this;
return self;
}, TMP_5.$$arity = 0);
Opal.defn(self, '$-@', TMP_6 = function() {
var self = this;
return $rb_minus(0, self);
}, TMP_6.$$arity = 0);
Opal.defn(self, '$%', TMP_7 = function(other) {
var self = this;
return $rb_minus(self, $rb_times(other, self.$div(other)));
}, TMP_7.$$arity = 1);
Opal.defn(self, '$abs', TMP_8 = function $$abs() {
var self = this;
if ($rb_lt(self, 0)) {
return self['$-@']()
} else {
return self
};
}, TMP_8.$$arity = 0);
Opal.defn(self, '$abs2', TMP_9 = function $$abs2() {
var self = this;
return $rb_times(self, self);
}, TMP_9.$$arity = 0);
Opal.defn(self, '$angle', TMP_10 = function $$angle() {
var self = this;
if ($rb_lt(self, 0)) {
return (($scope.get('Math')).$$scope.get('PI'))
} else {
return 0
};
}, TMP_10.$$arity = 0);
Opal.alias(self, 'arg', 'angle');
Opal.defn(self, '$ceil', TMP_11 = function $$ceil() {
var self = this;
return self.$to_f().$ceil();
}, TMP_11.$$arity = 0);
Opal.defn(self, '$conj', TMP_12 = function $$conj() {
var self = this;
return self;
}, TMP_12.$$arity = 0);
Opal.alias(self, 'conjugate', 'conj');
Opal.defn(self, '$denominator', TMP_13 = function $$denominator() {
var self = this;
return self.$to_r().$denominator();
}, TMP_13.$$arity = 0);
Opal.defn(self, '$div', TMP_14 = function $$div(other) {
var self = this;
if (other['$=='](0)) {
self.$raise($scope.get('ZeroDivisionError'), "divided by o")};
return ($rb_divide(self, other)).$floor();
}, TMP_14.$$arity = 1);
Opal.defn(self, '$divmod', TMP_15 = function $$divmod(other) {
var self = this;
return [self.$div(other), self['$%'](other)];
}, TMP_15.$$arity = 1);
Opal.defn(self, '$fdiv', TMP_16 = function $$fdiv(other) {
var self = this;
return $rb_divide(self.$to_f(), other);
}, TMP_16.$$arity = 1);
Opal.defn(self, '$floor', TMP_17 = function $$floor() {
var self = this;
return self.$to_f().$floor();
}, TMP_17.$$arity = 0);
Opal.defn(self, '$i', TMP_18 = function $$i() {
var self = this;
return self.$Complex(0, self);
}, TMP_18.$$arity = 0);
Opal.defn(self, '$imag', TMP_19 = function $$imag() {
var self = this;
return 0;
}, TMP_19.$$arity = 0);
Opal.alias(self, 'imaginary', 'imag');
Opal.defn(self, '$integer?', TMP_20 = function() {
var self = this;
return false;
}, TMP_20.$$arity = 0);
Opal.alias(self, 'magnitude', 'abs');
Opal.alias(self, 'modulo', '%');
Opal.defn(self, '$nonzero?', TMP_21 = function() {
var $a, self = this;
if ((($a = self['$zero?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil
} else {
return self
};
}, TMP_21.$$arity = 0);
Opal.defn(self, '$numerator', TMP_22 = function $$numerator() {
var self = this;
return self.$to_r().$numerator();
}, TMP_22.$$arity = 0);
Opal.alias(self, 'phase', 'arg');
Opal.defn(self, '$polar', TMP_23 = function $$polar() {
var self = this;
return [self.$abs(), self.$arg()];
}, TMP_23.$$arity = 0);
Opal.defn(self, '$quo', TMP_24 = function $$quo(other) {
var self = this;
return $rb_divide($scope.get('Opal')['$coerce_to!'](self, $scope.get('Rational'), "to_r"), other);
}, TMP_24.$$arity = 1);
Opal.defn(self, '$real', TMP_25 = function $$real() {
var self = this;
return self;
}, TMP_25.$$arity = 0);
Opal.defn(self, '$real?', TMP_26 = function() {
var self = this;
return true;
}, TMP_26.$$arity = 0);
Opal.defn(self, '$rect', TMP_27 = function $$rect() {
var self = this;
return [self, 0];
}, TMP_27.$$arity = 0);
Opal.alias(self, 'rectangular', 'rect');
Opal.defn(self, '$round', TMP_28 = function $$round(digits) {
var self = this;
return self.$to_f().$round(digits);
}, TMP_28.$$arity = -1);
Opal.defn(self, '$to_c', TMP_29 = function $$to_c() {
var self = this;
return self.$Complex(self, 0);
}, TMP_29.$$arity = 0);
Opal.defn(self, '$to_int', TMP_30 = function $$to_int() {
var self = this;
return self.$to_i();
}, TMP_30.$$arity = 0);
Opal.defn(self, '$truncate', TMP_31 = function $$truncate() {
var self = this;
return self.$to_f().$truncate();
}, TMP_31.$$arity = 0);
Opal.defn(self, '$zero?', TMP_32 = function() {
var self = this;
return self['$=='](0);
}, TMP_32.$$arity = 0);
Opal.defn(self, '$positive?', TMP_33 = function() {
var self = this;
return $rb_gt(self, 0);
}, TMP_33.$$arity = 0);
Opal.defn(self, '$negative?', TMP_34 = function() {
var self = this;
return $rb_lt(self, 0);
}, TMP_34.$$arity = 0);
Opal.defn(self, '$dup', TMP_35 = function $$dup() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't dup " + (self.$class()));
}, TMP_35.$$arity = 0);
return (Opal.defn(self, '$clone', TMP_36 = function $$clone() {
var self = this;
return self.$raise($scope.get('TypeError'), "can't clone " + (self.$class()));
}, TMP_36.$$arity = 0), nil) && 'clone';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/array"] = function(Opal) {
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_ge(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;
Opal.add_stubs(['$require', '$include', '$to_a', '$raise', '$===', '$replace', '$respond_to?', '$to_ary', '$coerce_to', '$coerce_to?', '$join', '$to_str', '$class', '$clone', '$hash', '$<=>', '$==', '$object_id', '$inspect', '$enum_for', '$coerce_to!', '$>', '$*', '$enumerator_size', '$empty?', '$size', '$eql?', '$length', '$begin', '$end', '$exclude_end?', '$flatten', '$__id__', '$[]', '$to_s', '$new', '$!', '$>=', '$**', '$delete_if', '$to_proc', '$each', '$reverse', '$rotate', '$rand', '$at', '$keep_if', '$shuffle!', '$dup', '$<', '$sort', '$sort_by', '$!=', '$times', '$[]=', '$<<', '$values', '$kind_of?', '$last', '$first', '$upto', '$reject', '$pristine']);
self.$require("corelib/enumerable");
self.$require("corelib/numeric");
return (function($base, $super) {
function $Array(){};
var self = $Array = $klass($base, $super, 'Array', $Array);
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_19, TMP_20, TMP_21, TMP_22, TMP_24, TMP_26, TMP_28, TMP_30, TMP_31, TMP_32, TMP_33, TMP_34, TMP_35, TMP_37, TMP_38, TMP_39, TMP_41, TMP_43, TMP_44, TMP_45, TMP_46, TMP_47, TMP_48, TMP_49, TMP_50, TMP_51, TMP_52, TMP_53, TMP_54, TMP_55, TMP_56, TMP_58, TMP_59, TMP_60, TMP_62, TMP_64, TMP_65, TMP_66, TMP_67, TMP_68, TMP_70, TMP_72, TMP_73, TMP_74, TMP_75, TMP_77, TMP_78, TMP_79, TMP_82, TMP_83, TMP_85, TMP_87, TMP_88, TMP_89, TMP_90, TMP_91, TMP_92, TMP_93, TMP_95, TMP_96, TMP_97, TMP_98, TMP_101, TMP_102, TMP_103, TMP_104, TMP_107, TMP_108, TMP_109, TMP_111;
def.length = nil;
self.$include($scope.get('Enumerable'));
def.$$is_array = true;
function toArraySubclass(obj, klass) {
if (klass.$$name === Opal.Array) {
return obj;
} else {
return klass.$allocate().$replace((obj).$to_a());
}
}
Opal.defs(self, '$[]', TMP_1 = function($a_rest) {
var self = this, objects;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
objects = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
objects[$arg_idx - 0] = arguments[$arg_idx];
}
return toArraySubclass(objects, self);
}, TMP_1.$$arity = -1);
Opal.defn(self, '$initialize', TMP_2 = function $$initialize(size, obj) {
var $a, self = this, $iter = TMP_2.$$p, block = $iter || nil;
if (size == null) {
size = nil;
}
if (obj == null) {
obj = nil;
}
TMP_2.$$p = null;
if ((($a = arguments.length > 2) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..2)")};
if (arguments.length === 0) {
self.splice(0, self.length);
return self;
}
if ((($a = arguments.length === 1) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $scope.get('Array')['$==='](size)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$replace(size.$to_a());
return self;
} else if ((($a = size['$respond_to?']("to_ary")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$replace(size.$to_ary());
return self;}};
size = $scope.get('Opal').$coerce_to(size, $scope.get('Integer'), "to_int");
if ((($a = size < 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "negative array size")};
self.splice(0, self.length);
var i, value;
if (block === nil) {
for (i = 0; i < size; i++) {
self.push(obj);
}
}
else {
for (i = 0, value; i < size; i++) {
value = block(i);
self[i] = value;
}
}
return self;
}, TMP_2.$$arity = -1);
Opal.defs(self, '$try_convert', TMP_3 = function $$try_convert(obj) {
var self = this;
return $scope.get('Opal')['$coerce_to?'](obj, $scope.get('Array'), "to_ary");
}, TMP_3.$$arity = 1);
Opal.defn(self, '$&', TMP_4 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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 = [], hash = $hash2([], {}), i, length, item;
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
}
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if (Opal.hash_delete(hash, item) !== undefined) {
result.push(item);
}
}
return result;
;
}, TMP_4.$$arity = 1);
Opal.defn(self, '$|', TMP_5 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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;
for (i = 0, length = self.length; i < length; i++) {
Opal.hash_put(hash, self[i], true);
}
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
}
return hash.$keys();
;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$*', TMP_6 = function(other) {
var $a, self = this;
if ((($a = other['$respond_to?']("to_str")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$join(other.$to_str())};
other = $scope.get('Opal').$coerce_to(other, $scope.get('Integer'), "to_int");
if ((($a = other < 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "negative argument")};
var result = [],
converted = self.$to_a();
for (var i = 0; i < other; i++) {
result = result.concat(converted);
}
return toArraySubclass(result, self.$class());
;
}, TMP_6.$$arity = 1);
Opal.defn(self, '$+', TMP_7 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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);
}, TMP_7.$$arity = 1);
Opal.defn(self, '$-', TMP_8 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
return []};
if ((($a = other.length === 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$clone().$to_a()};
var result = [], hash = $hash2([], {}), i, length, item;
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
}
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if (Opal.hash_get(hash, item) === undefined) {
result.push(item);
}
}
return result;
;
}, TMP_8.$$arity = 1);
Opal.defn(self, '$<<', TMP_9 = function(object) {
var self = this;
self.push(object);
return self;
}, TMP_9.$$arity = 1);
Opal.defn(self, '$<=>', TMP_10 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
other = other.$to_a()
} else if ((($a = other['$respond_to?']("to_ary")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
other = other.$to_ary().$to_a()
} else {
return nil
};
if (self.$hash() === other.$hash()) {
return 0;
}
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 (self.length)['$<=>'](other.length);
;
}, TMP_10.$$arity = 1);
Opal.defn(self, '$==', TMP_11 = function(other) {
var self = this;
var recursed = {};
function _eqeq(array, other) {
var i, length, a, b;
if (array === other)
return true;
if (!other.$$is_array) {
if ($scope.get('Opal')['$respond_to?'](other, "to_ary")) {
return (other)['$=='](array);
} else {
return false;
}
}
if (array.constructor !== Array)
array = (array).$to_a();
if (other.constructor !== Array)
other = (other).$to_a();
if (array.length !== other.length) {
return false;
}
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;
}
return _eqeq(self, other);
;
}, TMP_11.$$arity = 1);
Opal.defn(self, '$[]', TMP_12 = function(index, length) {
var self = this;
var size = self.length,
exclude, from, to, result;
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 (from < 0) {
from += size;
if (from < 0) {
return nil;
}
}
if (from > size) {
return nil;
}
if (to < 0) {
to += size;
if (to < 0) {
return [];
}
}
if (!exclude) {
to += 1;
}
result = self.slice(from, to)
}
else {
index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (index < 0) {
index += size;
if (index < 0) {
return nil;
}
}
if (length === undefined) {
if (index >= size || index < 0) {
return nil;
}
return self[index];
}
else {
length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int");
if (length < 0 || index > size || index < 0) {
return nil;
}
result = self.slice(index, index + length);
}
}
return toArraySubclass(result, self.$class())
;
}, TMP_12.$$arity = -2);
Opal.defn(self, '$[]=', TMP_13 = function(index, value, extra) {
var $a, self = this, data = nil, length = nil;
var i, size = self.length;
if ((($a = $scope.get('Range')['$==='](index)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $scope.get('Array')['$==='](value)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
data = value.$to_a()
} else if ((($a = value['$respond_to?']("to_ary")) !== nil && $a != null && (!$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");
if (from < 0) {
from += size;
if (from < 0) {
self.$raise($scope.get('RangeError'), "" + (index.$inspect()) + " out of range");
}
}
if (to < 0) {
to += size;
}
if (!exclude) {
to += 1;
}
if (from > size) {
for (i = size; i < from; i++) {
self[i] = nil;
}
}
if (to < 0) {
self.splice.apply(self, [from, 0].concat(data));
}
else {
self.splice.apply(self, [from, to - from].concat(data));
}
return value;
;
} else {
if ((($a = extra === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
length = 1
} else {
length = value;
value = extra;
if ((($a = $scope.get('Array')['$==='](value)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
data = value.$to_a()
} else if ((($a = value['$respond_to?']("to_ary")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
data = value.$to_ary().$to_a()
} else {
data = [value]
};
};
var old;
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 (index < 0) {
old = index;
index += size;
if (index < 0) {
self.$raise($scope.get('IndexError'), "index " + (old) + " too small for array; minimum " + (-self.length));
}
}
if (length < 0) {
self.$raise($scope.get('IndexError'), "negative length (" + (length) + ")")
}
if (index > size) {
for (i = size; i < index; i++) {
self[i] = nil;
}
}
if (extra === undefined) {
self[index] = value;
}
else {
self.splice.apply(self, [index, length].concat(data));
}
return value;
};
}, TMP_13.$$arity = -3);
Opal.defn(self, '$assoc', TMP_14 = function $$assoc(object) {
var self = this;
for (var i = 0, length = self.length, item; i < length; i++) {
if (item = self[i], item.length && (item[0])['$=='](object)) {
return item;
}
}
return nil;
}, TMP_14.$$arity = 1);
Opal.defn(self, '$at', TMP_15 = function $$at(index) {
var self = this;
index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (index < 0) {
index += self.length;
}
if (index < 0 || index >= self.length) {
return nil;
}
return self[index];
}, TMP_15.$$arity = 1);
Opal.defn(self, '$bsearch', TMP_16 = function $$bsearch() {
var self = this, $iter = TMP_16.$$p, block = $iter || nil;
TMP_16.$$p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("bsearch")
};
var min = 0,
max = self.length,
mid,
val,
ret,
smaller = false,
satisfied = nil;
while (min < max) {
mid = min + Math.floor((max - min) / 2);
val = self[mid];
ret = block(val);
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;
}, TMP_16.$$arity = 0);
Opal.defn(self, '$cycle', TMP_17 = function $$cycle(n) {
var $a, $b, TMP_18, $c, self = this, $iter = TMP_17.$$p, block = $iter || nil;
if (n == null) {
n = nil;
}
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, $c;
if (n['$=='](nil)) {
return (($scope.get('Float')).$$scope.get('INFINITY'))
} else {
n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int");
if ((($c = $rb_gt(n, 0)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return $rb_times(self.$enumerator_size(), n)
} else {
return 0
};
}}, TMP_18.$$s = self, TMP_18.$$arity = 0, TMP_18), $a).call($b, "cycle", n)
};
if ((($a = ((($c = self['$empty?']()) !== false && $c !== nil && $c != null) ? $c : n['$=='](0))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil};
var i, length, value;
if (n === nil) {
while (true) {
for (i = 0, length = self.length; i < length; i++) {
value = Opal.yield1(block, self[i]);
}
}
}
else {
n = $scope.get('Opal')['$coerce_to!'](n, $scope.get('Integer'), "to_int");
if (n <= 0) {
return self;
}
while (n > 0) {
for (i = 0, length = self.length; i < length; i++) {
value = Opal.yield1(block, self[i]);
}
n--;
}
}
return self;
}, TMP_17.$$arity = -1);
Opal.defn(self, '$clear', TMP_19 = function $$clear() {
var self = this;
self.splice(0, self.length);
return self;
}, TMP_19.$$arity = 0);
Opal.defn(self, '$count', TMP_20 = function $$count(object) {
var $a, $b, self = this, $iter = TMP_20.$$p, block = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
if (object == null) {
object = nil;
}
TMP_20.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
if ((($a = ((($b = object) !== false && $b !== nil && $b != null) ? $b : block)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'count', TMP_20, false)), $a.$$p = $iter, $a).apply($b, $zuper)
} else {
return self.$size()
};
}, TMP_20.$$arity = -1);
Opal.defn(self, '$initialize_copy', TMP_21 = function $$initialize_copy(other) {
var self = this;
return self.$replace(other);
}, TMP_21.$$arity = 1);
Opal.defn(self, '$collect', TMP_22 = function $$collect() {
var $a, $b, TMP_23, self = this, $iter = TMP_22.$$p, block = $iter || nil;
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;
return self.$size()}, TMP_23.$$s = self, TMP_23.$$arity = 0, TMP_23), $a).call($b, "collect")
};
var result = [];
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
result.push(value);
}
return result;
}, TMP_22.$$arity = 0);
Opal.defn(self, '$collect!', TMP_24 = function() {
var $a, $b, TMP_25, self = this, $iter = TMP_24.$$p, block = $iter || nil;
TMP_24.$$p = null;
if ((block !== nil)) {
} else {
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.$$arity = 0, TMP_25), $a).call($b, "collect!")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
self[i] = value;
}
return self;
}, TMP_24.$$arity = 0);
function binomial_coefficient(n, k) {
if (n === k || k === 0) {
return 1;
}
if (k > 0 && n > k) {
return binomial_coefficient(n - 1, k - 1) + binomial_coefficient(n - 1, k);
}
return 0;
}
Opal.defn(self, '$combination', TMP_26 = function $$combination(n) {
var $a, $b, TMP_27, self = this, $iter = TMP_26.$$p, $yield = $iter || nil, num = nil;
TMP_26.$$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_27 = function(){var self = TMP_27.$$s || this;
return binomial_coefficient(self.length, num);}, TMP_27.$$s = self, TMP_27.$$arity = 0, TMP_27), $a).call($b, "combination", num)
};
var i, length, stack, chosen, lev, done, next;
if (num === 0) {
Opal.yield1($yield, [])
} else if (num === 1) {
for (i = 0, length = self.length; i < length; i++) {
Opal.yield1($yield, [self[i]])
}
}
else if (num === self.length) {
Opal.yield1($yield, self.slice())
}
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;
while (!done) {
chosen[lev] = self[stack[lev+1]];
while (lev < num - 1) {
lev++;
next = stack[lev+1] = stack[lev] + 1;
chosen[lev] = self[next];
}
Opal.yield1($yield, chosen.slice())
lev++;
do {
done = (lev === 0);
stack[lev]++;
lev--;
} while ( stack[lev+1] + num === self.length + lev + 1 );
}
}
;
return self;
}, TMP_26.$$arity = 1);
Opal.defn(self, '$repeated_combination', TMP_28 = function $$repeated_combination(n) {
var $a, $b, TMP_29, self = this, $iter = TMP_28.$$p, $yield = $iter || nil, num = nil;
TMP_28.$$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_29 = function(){var self = TMP_29.$$s || this;
return binomial_coefficient(self.length + num - 1, num);}, TMP_29.$$s = self, TMP_29.$$arity = 0, TMP_29), $a).call($b, "repeated_combination", num)
};
function iterate(max, from, buffer, self) {
if (buffer.length == max) {
var copy = buffer.slice();
Opal.yield1($yield, copy)
return;
}
for (var i = from; i < self.length; i++) {
buffer.push(self[i]);
iterate(max, i, buffer, self);
buffer.pop();
}
}
if (num >= 0) {
iterate(num, 0, [], self);
}
return self;
}, TMP_28.$$arity = 1);
Opal.defn(self, '$compact', TMP_30 = function $$compact() {
var self = this;
var result = [];
for (var i = 0, length = self.length, item; i < length; i++) {
if ((item = self[i]) !== nil) {
result.push(item);
}
}
return result;
}, TMP_30.$$arity = 0);
Opal.defn(self, '$compact!', TMP_31 = function() {
var self = this;
var original = self.length;
for (var i = 0, length = self.length; i < length; i++) {
if (self[i] === nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self.length === original ? nil : self;
}, TMP_31.$$arity = 0);
Opal.defn(self, '$concat', TMP_32 = function $$concat(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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]);
}
return self;
}, TMP_32.$$arity = 1);
Opal.defn(self, '$delete', TMP_33 = function(object) {
var self = this, $iter = TMP_33.$$p, $yield = $iter || nil;
TMP_33.$$p = null;
var original = self.length;
for (var i = 0, length = original; i < length; i++) {
if ((self[i])['$=='](object)) {
self.splice(i, 1);
length--;
i--;
}
}
if (self.length === original) {
if (($yield !== nil)) {
return Opal.yieldX($yield, []);
}
return nil;
}
return object;
;
}, TMP_33.$$arity = 1);
Opal.defn(self, '$delete_at', TMP_34 = function $$delete_at(index) {
var self = this;
index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (index < 0) {
index += self.length;
}
if (index < 0 || index >= self.length) {
return nil;
}
var result = self[index];
self.splice(index, 1);
return result;
;
}, TMP_34.$$arity = 1);
Opal.defn(self, '$delete_if', TMP_35 = function $$delete_if() {
var $a, $b, TMP_36, self = this, $iter = TMP_35.$$p, block = $iter || nil;
TMP_35.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_36 = function(){var self = TMP_36.$$s || this;
return self.$size()}, TMP_36.$$s = self, TMP_36.$$arity = 0, TMP_36), $a).call($b, "delete_if")
};
for (var i = 0, length = self.length, value; i < length; i++) {
value = block(self[i]);
if (value !== false && value !== nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self;
}, TMP_35.$$arity = 0);
Opal.defn(self, '$drop', TMP_37 = function $$drop(number) {
var self = this;
if (number < 0) {
self.$raise($scope.get('ArgumentError'))
}
return self.slice(number);
;
}, TMP_37.$$arity = 1);
Opal.defn(self, '$dup', TMP_38 = function $$dup() {
var $a, $b, self = this, $iter = TMP_38.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_38.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
if (
self.$$class === Opal.Array &&
self.$allocate.$$pristine &&
self.$copy_instance_variables.$$pristine &&
self.$initialize_dup.$$pristine
) return self.slice(0);
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'dup', TMP_38, false)), $a.$$p = $iter, $a).apply($b, $zuper);
}, TMP_38.$$arity = 0);
Opal.defn(self, '$each', TMP_39 = function $$each() {
var $a, $b, TMP_40, self = this, $iter = TMP_39.$$p, block = $iter || nil;
TMP_39.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_40 = function(){var self = TMP_40.$$s || this;
return self.$size()}, TMP_40.$$s = self, TMP_40.$$arity = 0, TMP_40), $a).call($b, "each")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
}
return self;
}, TMP_39.$$arity = 0);
Opal.defn(self, '$each_index', TMP_41 = function $$each_index() {
var $a, $b, TMP_42, self = this, $iter = TMP_41.$$p, block = $iter || nil;
TMP_41.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_42 = function(){var self = TMP_42.$$s || this;
return self.$size()}, TMP_42.$$s = self, TMP_42.$$arity = 0, TMP_42), $a).call($b, "each_index")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, i);
}
return self;
}, TMP_41.$$arity = 0);
Opal.defn(self, '$empty?', TMP_43 = function() {
var self = this;
return self.length === 0;
}, TMP_43.$$arity = 0);
Opal.defn(self, '$eql?', TMP_44 = function(other) {
var self = this;
var recursed = {};
function _eql(array, other) {
var i, length, a, b;
if (!other.$$is_array) {
return false;
}
other = other.$to_a();
if (array.length !== other.length) {
return false;
}
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 true;
}
return _eql(self, other);
}, TMP_44.$$arity = 1);
Opal.defn(self, '$fetch', TMP_45 = function $$fetch(index, defaults) {
var self = this, $iter = TMP_45.$$p, block = $iter || nil;
TMP_45.$$p = null;
var original = index;
index = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (index < 0) {
index += self.length;
}
if (index >= 0 && index < self.length) {
return self[index];
}
if (block !== nil) {
return block(original);
}
if (defaults != null) {
return defaults;
}
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));
}
;
}, TMP_45.$$arity = -2);
Opal.defn(self, '$fill', TMP_46 = function $$fill($a_rest) {
var $b, $c, self = this, args, $iter = TMP_46.$$p, block = $iter || nil, one = nil, two = nil, obj = nil, left = nil, right = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_46.$$p = null;
var i, length, value;
if (block !== false && block !== nil && block != null) {
if ((($b = args.length > 2) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 0..2)")};
$c = args, $b = Opal.to_ary($c), one = ($b[0] == null ? nil : $b[0]), two = ($b[1] == null ? nil : $b[1]), $c;
} else {
if ((($b = args.length == 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (0 for 1..3)")
} else if ((($b = args.length > 3) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 1..3)")};
$c = args, $b = Opal.to_ary($c), obj = ($b[0] == null ? nil : $b[0]), one = ($b[1] == null ? nil : $b[1]), two = ($b[2] == null ? nil : $b[2]), $c;
};
if ((($b = $scope.get('Range')['$==='](one)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
if (two !== false && two !== nil && two != null) {
self.$raise($scope.get('TypeError'), "length invalid with range")};
left = $scope.get('Opal').$coerce_to(one.$begin(), $scope.get('Integer'), "to_int");
if ((($b = left < 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
left += self.length;};
if ((($b = left < 0) !== nil && $b != null && (!$b.$$is_boolean || $b == 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 ((($b = right < 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
right += self.length;};
if ((($b = one['$exclude_end?']()) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
} else {
right += 1;
};
if ((($b = right <= left) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return self};
} else if (one !== false && one !== nil && one != null) {
left = $scope.get('Opal').$coerce_to(one, $scope.get('Integer'), "to_int");
if ((($b = left < 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
left += self.length;};
if ((($b = left < 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
left = 0};
if (two !== false && two !== nil && two != null) {
right = $scope.get('Opal').$coerce_to(two, $scope.get('Integer'), "to_int");
if ((($b = right == 0) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return self};
right += left;
} else {
right = self.length
};
} else {
left = 0;
right = self.length;
};
if ((($b = left > self.length) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
for (i = self.length; i < right; i++) {
self[i] = nil;
}
;};
if ((($b = right > self.length) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.length = right};
if (block !== false && block !== nil && block != null) {
for (length = self.length; left < right; left++) {
value = block(left);
self[left] = value;
}
;
} else {
for (length = self.length; left < right; left++) {
self[left] = obj;
}
;
};
return self;
}, TMP_46.$$arity = -1);
Opal.defn(self, '$first', TMP_47 = function $$first(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");
}
return self.slice(0, count);
}, TMP_47.$$arity = -1);
Opal.defn(self, '$flatten', TMP_48 = function $$flatten(level) {
var self = this;
function _flatten(array, level) {
var result = [],
i, length,
item, ary;
array = (array).$to_a();
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;
}
ary = (item).$to_ary();
if (ary === nil) {
result.push(item);
continue;
}
if (!ary.$$is_array) {
self.$raise($scope.get('TypeError'));
}
if (ary === self) {
self.$raise($scope.get('ArgumentError'));
}
switch (level) {
case undefined:
result = result.concat(_flatten(ary));
break;
case 0:
result.push(ary);
break;
default:
result.push.apply(result, _flatten(ary, level - 1));
}
}
return result;
}
if (level !== undefined) {
level = $scope.get('Opal').$coerce_to(level, $scope.get('Integer'), "to_int");
}
return toArraySubclass(_flatten(self, level), self.$class());
}, TMP_48.$$arity = -1);
Opal.defn(self, '$flatten!', TMP_49 = function(level) {
var self = this;
var flattened = self.$flatten(level);
if (self.length == flattened.length) {
for (var i = 0, length = self.length; i < length; i++) {
if (self[i] !== flattened[i]) {
break;
}
}
if (i == length) {
return nil;
}
}
self.$replace(flattened);
;
return self;
}, TMP_49.$$arity = -1);
Opal.defn(self, '$hash', TMP_50 = function $$hash() {
var self = this;
var top = (Opal.hash_ids == undefined),
result = ['A'],
hash_id = self.$object_id(),
item, i, key;
try {
if (top) {
Opal.hash_ids = {};
}
if (Opal.hash_ids.hasOwnProperty(hash_id)) {
return 'self';
}
for (key in Opal.hash_ids) {
if (Opal.hash_ids.hasOwnProperty(key)) {
item = Opal.hash_ids[key];
if (self['$eql?'](item)) {
return 'self';
}
}
}
Opal.hash_ids[hash_id] = self;
for (i = 0; i < self.length; i++) {
item = self[i];
result.push(item.$hash());
}
return result.join(',');
} finally {
if (top) {
delete Opal.hash_ids;
}
}
}, TMP_50.$$arity = 0);
Opal.defn(self, '$include?', TMP_51 = function(member) {
var self = this;
for (var i = 0, length = self.length; i < length; i++) {
if ((self[i])['$=='](member)) {
return true;
}
}
return false;
}, TMP_51.$$arity = 1);
Opal.defn(self, '$index', TMP_52 = function $$index(object) {
var self = this, $iter = TMP_52.$$p, block = $iter || nil;
TMP_52.$$p = null;
var i, length, value;
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++) {
value = block(self[i]);
if (value !== false && value !== nil) {
return i;
}
}
}
else {
return self.$enum_for("index");
}
return nil;
}, TMP_52.$$arity = -1);
Opal.defn(self, '$insert', TMP_53 = function $$insert(index, $a_rest) {
var self = this, objects;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
objects = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
objects[$arg_idx - 1] = arguments[$arg_idx];
}
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");
}
}
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;
}, TMP_53.$$arity = -2);
Opal.defn(self, '$inspect', TMP_54 = function $$inspect() {
var self = this;
var result = [],
id = self.$__id__();
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 '[' + result.join(', ') + ']';
;
}, TMP_54.$$arity = 0);
Opal.defn(self, '$join', TMP_55 = function $$join(sep) {
var $a, self = this;
if ($gvars[","] == null) $gvars[","] = nil;
if (sep == null) {
sep = nil;
}
if ((($a = self.length === 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ""};
if ((($a = sep === nil) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
sep = $gvars[","]};
var result = [];
var i, length, item, tmp;
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if ($scope.get('Opal')['$respond_to?'](item, "to_str")) {
tmp = (item).$to_str();
if (tmp !== nil) {
result.push((tmp).$to_s());
continue;
}
}
if ($scope.get('Opal')['$respond_to?'](item, "to_ary")) {
tmp = (item).$to_ary();
if (tmp === self) {
self.$raise($scope.get('ArgumentError'));
}
if (tmp !== nil) {
result.push((tmp).$join(sep));
continue;
}
}
if ($scope.get('Opal')['$respond_to?'](item, "to_s")) {
tmp = (item).$to_s();
if (tmp !== nil) {
result.push(tmp);
continue;
}
}
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 (sep === nil) {
return result.join('');
}
else {
return result.join($scope.get('Opal')['$coerce_to!'](sep, $scope.get('String'), "to_str").$to_s());
}
;
}, TMP_55.$$arity = -1);
Opal.defn(self, '$keep_if', TMP_56 = function $$keep_if() {
var $a, $b, TMP_57, self = this, $iter = TMP_56.$$p, block = $iter || nil;
TMP_56.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_57 = function(){var self = TMP_57.$$s || this;
return self.$size()}, TMP_57.$$s = self, TMP_57.$$arity = 0, TMP_57), $a).call($b, "keep_if")
};
for (var i = 0, length = self.length, value; i < length; i++) {
value = block(self[i]);
if (value === false || value === nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self;
}, TMP_56.$$arity = 0);
Opal.defn(self, '$last', TMP_58 = function $$last(count) {
var self = this;
if (count == null) {
return self.length === 0 ? nil : self[self.length - 1];
}
count = $scope.get('Opal').$coerce_to(count, $scope.get('Integer'), "to_int");
if (count < 0) {
self.$raise($scope.get('ArgumentError'), "negative array size");
}
if (count > self.length) {
count = self.length;
}
return self.slice(self.length - count, self.length);
}, TMP_58.$$arity = -1);
Opal.defn(self, '$length', TMP_59 = function $$length() {
var self = this;
return self.length;
}, TMP_59.$$arity = 0);
Opal.alias(self, 'map', 'collect');
Opal.alias(self, 'map!', 'collect!');
// Returns the product of from, from-1, ..., from - how_many + 1.
function descending_factorial(from, how_many) {
var count = how_many >= 0 ? 1 : 0;
while (how_many) {
count *= from;
from--;
how_many--;
}
return count;
}
Opal.defn(self, '$permutation', TMP_60 = function $$permutation(num) {
var $a, $b, TMP_61, self = this, $iter = TMP_60.$$p, block = $iter || nil, perm = nil, used = nil;
TMP_60.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_61 = function(){var self = TMP_61.$$s || this;
return descending_factorial(self.length, num === undefined ? self.length : num);}, TMP_61.$$s = self, TMP_61.$$arity = 0, TMP_61), $a).call($b, "permutation", num)
};
var permute, offensive, output;
if (num === undefined) {
num = self.length;
}
else {
num = $scope.get('Opal').$coerce_to(num, $scope.get('Integer'), "to_int")
}
if (num < 0 || self.length < num) {
// no permutations, yield nothing
}
else if (num === 0) {
// exactly one permutation: the zero-length array
Opal.yield1(block, [])
}
else if (num === 1) {
// this is a special, easy case
for (var i = 0; i < self.length; i++) {
Opal.yield1(block, [self[i]])
}
}
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);
}
}
}
}
if ((block !== nil)) {
// offensive (both definitions) copy.
offensive = self.slice();
permute.call(offensive, num, perm, 0, used, block);
}
else {
permute.call(self, num, perm, 0, used, block);
}
}
;
return self;
}, TMP_60.$$arity = -1);
Opal.defn(self, '$repeated_permutation', TMP_62 = function $$repeated_permutation(n) {
var $a, $b, TMP_63, self = this, $iter = TMP_62.$$p, $yield = $iter || nil, num = nil;
TMP_62.$$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_63 = function(){var self = TMP_63.$$s || this, $c;
if ((($c = $rb_ge(num, 0)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return self.$size()['$**'](num)
} else {
return 0
}}, TMP_63.$$s = self, TMP_63.$$arity = 0, TMP_63), $a).call($b, "repeated_permutation", num)
};
function iterate(max, buffer, self) {
if (buffer.length == max) {
var copy = buffer.slice();
Opal.yield1($yield, copy)
return;
}
for (var i = 0; i < self.length; i++) {
buffer.push(self[i]);
iterate(max, buffer, self);
buffer.pop();
}
}
iterate(num, [], self.slice());
return self;
}, TMP_62.$$arity = 1);
Opal.defn(self, '$pop', TMP_64 = function $$pop(count) {
var $a, self = this;
if ((($a = count === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = self.length === 0) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "negative array size")};
if ((($a = self.length === 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return []};
if ((($a = count > self.length) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.splice(0, self.length);
} else {
return self.splice(self.length - count, self.length);
};
}, TMP_64.$$arity = -1);
Opal.defn(self, '$product', TMP_65 = function $$product($a_rest) {
var self = this, args, $iter = TMP_65.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_65.$$p = null;
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;
arrays[0] = self;
for (i = 1; i < n; i++) {
arrays[i] = $scope.get('Opal').$coerce_to(args[i - 1], $scope.get('Array'), "to_ary");
}
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")
}
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 {
Opal.yield1(block, subarray)
}
m = n - 1;
counters[m]++;
while (counters[m] === lengths[m]) {
counters[m] = 0;
if (--m < 0) break outer_loop;
counters[m]++;
}
}
return result || self;
;
}, TMP_65.$$arity = -1);
Opal.defn(self, '$push', TMP_66 = function $$push($a_rest) {
var self = this, objects;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
objects = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
objects[$arg_idx - 0] = arguments[$arg_idx];
}
for (var i = 0, length = objects.length; i < length; i++) {
self.push(objects[i]);
}
return self;
}, TMP_66.$$arity = -1);
Opal.defn(self, '$rassoc', TMP_67 = function $$rassoc(object) {
var self = this;
for (var i = 0, length = self.length, item; i < length; i++) {
item = self[i];
if (item.length && item[1] !== undefined) {
if ((item[1])['$=='](object)) {
return item;
}
}
}
return nil;
}, TMP_67.$$arity = 1);
Opal.defn(self, '$reject', TMP_68 = function $$reject() {
var $a, $b, TMP_69, self = this, $iter = TMP_68.$$p, block = $iter || nil;
TMP_68.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_69 = function(){var self = TMP_69.$$s || this;
return self.$size()}, TMP_69.$$s = self, TMP_69.$$arity = 0, TMP_69), $a).call($b, "reject")
};
var result = [];
for (var i = 0, length = self.length, value; i < length; i++) {
value = block(self[i]);
if (value === false || value === nil) {
result.push(self[i]);
}
}
return result;
}, TMP_68.$$arity = 0);
Opal.defn(self, '$reject!', TMP_70 = function() {
var $a, $b, TMP_71, $c, self = this, $iter = TMP_70.$$p, block = $iter || nil, original = nil;
TMP_70.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_71 = function(){var self = TMP_71.$$s || this;
return self.$size()}, TMP_71.$$s = self, TMP_71.$$arity = 0, TMP_71), $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
};
}, TMP_70.$$arity = 0);
Opal.defn(self, '$replace', TMP_72 = function $$replace(other) {
var $a, self = this;
if ((($a = $scope.get('Array')['$==='](other)) !== nil && $a != null && (!$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 self;
}, TMP_72.$$arity = 1);
Opal.defn(self, '$reverse', TMP_73 = function $$reverse() {
var self = this;
return self.slice(0).reverse();
}, TMP_73.$$arity = 0);
Opal.defn(self, '$reverse!', TMP_74 = function() {
var self = this;
return self.reverse();
}, TMP_74.$$arity = 0);
Opal.defn(self, '$reverse_each', TMP_75 = function $$reverse_each() {
var $a, $b, TMP_76, $c, self = this, $iter = TMP_75.$$p, block = $iter || nil;
TMP_75.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_76 = function(){var self = TMP_76.$$s || this;
return self.$size()}, TMP_76.$$s = self, TMP_76.$$arity = 0, TMP_76), $a).call($b, "reverse_each")
};
($a = ($c = self.$reverse()).$each, $a.$$p = block.$to_proc(), $a).call($c);
return self;
}, TMP_75.$$arity = 0);
Opal.defn(self, '$rindex', TMP_77 = function $$rindex(object) {
var self = this, $iter = TMP_77.$$p, block = $iter || nil;
TMP_77.$$p = null;
var i, value;
if (object != null) {
for (i = self.length - 1; i >= 0; i--) {
if (i >= self.length) {
break;
}
if ((self[i])['$=='](object)) {
return i;
}
}
}
else if (block !== nil) {
for (i = self.length - 1; i >= 0; i--) {
if (i >= self.length) {
break;
}
value = block(self[i]);
if (value !== false && value !== nil) {
return i;
}
}
}
else if (object == null) {
return self.$enum_for("rindex");
}
return nil;
}, TMP_77.$$arity = -1);
Opal.defn(self, '$rotate', TMP_78 = function $$rotate(n) {
var self = this;
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;
firstPart = ary.slice(idx);
lastPart = ary.slice(0, idx);
return firstPart.concat(lastPart);
}, TMP_78.$$arity = -1);
Opal.defn(self, '$rotate!', TMP_79 = function(cnt) {
var self = this, ary = nil;
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);
}, TMP_79.$$arity = -1);
(function($base, $super) {
function $SampleRandom(){};
var self = $SampleRandom = $klass($base, $super, 'SampleRandom', $SampleRandom);
var def = self.$$proto, $scope = self.$$scope, TMP_80, TMP_81;
def.rng = nil;
Opal.defn(self, '$initialize', TMP_80 = function $$initialize(rng) {
var self = this;
return self.rng = rng;
}, TMP_80.$$arity = 1);
return (Opal.defn(self, '$rand', TMP_81 = function $$rand(size) {
var $a, self = this, random = nil;
random = $scope.get('Opal').$coerce_to(self.rng.$rand(size), $scope.get('Integer'), "to_int");
if ((($a = random < 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('RangeError'), "random value must be >= 0")};
if ((($a = random < size) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('RangeError'), "random value must be less than Array size")
};
return random;
}, TMP_81.$$arity = 1), nil) && 'rand';
})($scope.base, null);
Opal.defn(self, '$sample', TMP_82 = function $$sample(count, options) {
var $a, $b, self = this, o = nil, rng = nil;
if ((($a = count === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$at($scope.get('Kernel').$rand(self.length))};
if ((($a = options === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = (o = $scope.get('Opal')['$coerce_to?'](count, $scope.get('Hash'), "to_hash"))) !== nil && $a != null && (!$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 != null) ? count < 0 : count)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "count must be greater than 0")};
if (options !== false && options !== nil && options != null) {
rng = options['$[]']("random")};
if ((($a = (($b = rng !== false && rng !== nil && rng != null) ? rng['$respond_to?']("rand") : rng)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
rng = $scope.get('SampleRandom').$new(rng)
} else {
rng = $scope.get('Kernel')
};
if (count !== false && count !== nil && count != null) {
} else {
return self[rng.$rand(self.length)]
};
var abandon, spin, result, i, j, k, targetIndex, oldValue;
if (count > self.length) {
count = self.length;
}
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; }
j++;
}
if (abandon) { break; }
result[i] = k;
i++;
}
if (!abandon) {
i = 0;
while (i < count) {
result[i] = self[result[i]];
i++;
}
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);
}
}, TMP_82.$$arity = -1);
Opal.defn(self, '$select', TMP_83 = function $$select() {
var $a, $b, TMP_84, self = this, $iter = TMP_83.$$p, block = $iter || nil;
TMP_83.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_84 = function(){var self = TMP_84.$$s || this;
return self.$size()}, TMP_84.$$s = self, TMP_84.$$arity = 0, TMP_84), $a).call($b, "select")
};
var result = [];
for (var i = 0, length = self.length, item, value; i < length; i++) {
item = self[i];
value = Opal.yield1(block, item);
if (value !== false && value !== nil) {
result.push(item);
}
}
return result;
}, TMP_83.$$arity = 0);
Opal.defn(self, '$select!', TMP_85 = function() {
var $a, $b, TMP_86, $c, self = this, $iter = TMP_85.$$p, block = $iter || nil;
TMP_85.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_86 = function(){var self = TMP_86.$$s || this;
return self.$size()}, TMP_86.$$s = self, TMP_86.$$arity = 0, TMP_86), $a).call($b, "select!")
};
var original = self.length;
($a = ($c = self).$keep_if, $a.$$p = block.$to_proc(), $a).call($c);
return self.length === original ? nil : self;
}, TMP_85.$$arity = 0);
Opal.defn(self, '$shift', TMP_87 = function $$shift(count) {
var $a, self = this;
if ((($a = count === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = self.length === 0) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "negative array size")};
if ((($a = self.length === 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return []};
return self.splice(0, count);
}, TMP_87.$$arity = -1);
Opal.alias(self, 'size', 'length');
Opal.defn(self, '$shuffle', TMP_88 = function $$shuffle(rng) {
var self = this;
return self.$dup().$to_a()['$shuffle!'](rng);
}, TMP_88.$$arity = -1);
Opal.defn(self, '$shuffle!', TMP_89 = function(rng) {
var self = this;
var randgen, i = self.length, j, tmp;
if (rng !== undefined) {
rng = $scope.get('Opal')['$coerce_to?'](rng, $scope.get('Hash'), "to_hash");
if (rng !== nil) {
rng = rng['$[]']("random");
if (rng !== nil && rng['$respond_to?']("rand")) {
randgen = rng;
}
}
}
while (i) {
if (randgen) {
j = randgen.$rand(i).$to_int();
if (j < 0) {
self.$raise($scope.get('RangeError'), "random number too small " + (j))
}
if (j >= i) {
self.$raise($scope.get('RangeError'), "random number too big " + (j))
}
}
else {
j = Math.floor(Math.random() * i);
}
tmp = self[--i];
self[i] = self[j];
self[j] = tmp;
}
return self;
;
}, TMP_89.$$arity = -1);
Opal.alias(self, 'slice', '[]');
Opal.defn(self, '$slice!', TMP_90 = function(index, length) {
var $a, self = this, result = nil, range = nil, range_start = nil, range_end = nil, start = nil;
result = nil;
if ((($a = length === undefined) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $scope.get('Range')['$==='](index)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
range = index;
result = self['$[]'](range);
range_start = $scope.get('Opal').$coerce_to(range.$begin(), $scope.get('Integer'), "to_int");
range_end = $scope.get('Opal').$coerce_to(range.$end(), $scope.get('Integer'), "to_int");
if (range_start < 0) {
range_start += self.length;
}
if (range_end < 0) {
range_end += self.length;
} else if (range_end >= self.length) {
range_end = self.length - 1;
if (range.exclude) {
range_end += 1;
}
}
var range_length = range_end - range_start;
if (range.exclude) {
range_end -= 1;
} else {
range_length += 1;
}
if (range_start < self.length && range_start >= 0 && range_end < self.length && range_end >= 0 && range_length > 0) {
self.splice(range_start, range_length);
}
} else {
start = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
if (start < 0) {
start += self.length;
}
if (start < 0 || start >= self.length) {
return nil;
}
result = self[start];
if (start === 0) {
self.shift();
} else {
self.splice(start, 1);
}
}
} else {
start = $scope.get('Opal').$coerce_to(index, $scope.get('Integer'), "to_int");
length = $scope.get('Opal').$coerce_to(length, $scope.get('Integer'), "to_int");
if (length < 0) {
return nil;
}
var end = start + length;
result = self['$[]'](start, length);
if (start < 0) {
start += self.length;
}
if (start + length > self.length) {
length = self.length - start;
}
if (start < self.length && start >= 0) {
self.splice(start, length);
}
};
return result;
}, TMP_90.$$arity = -2);
Opal.defn(self, '$sort', TMP_91 = function $$sort() {
var $a, self = this, $iter = TMP_91.$$p, block = $iter || nil;
TMP_91.$$p = null;
if ((($a = self.length > 1) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return self
};
if (block === nil) {
block = function(a, b) {
return (a)['$<=>'](b);
};
}
return self.slice().sort(function(x, y) {
var ret = block(x, y);
if (ret === nil) {
self.$raise($scope.get('ArgumentError'), "comparison of " + ((x).$inspect()) + " with " + ((y).$inspect()) + " failed");
}
return $rb_gt(ret, 0) ? 1 : ($rb_lt(ret, 0) ? -1 : 0);
});
;
}, TMP_91.$$arity = 0);
Opal.defn(self, '$sort!', TMP_92 = function() {
var $a, $b, self = this, $iter = TMP_92.$$p, block = $iter || nil;
TMP_92.$$p = null;
var result;
if ((block !== nil)) {
result = ($a = ($b = (self.slice())).$sort, $a.$$p = block.$to_proc(), $a).call($b);
}
else {
result = (self.slice()).$sort();
}
self.length = 0;
for(var i = 0, length = result.length; i < length; i++) {
self.push(result[i]);
}
return self;
;
}, TMP_92.$$arity = 0);
Opal.defn(self, '$sort_by!', TMP_93 = function() {
var $a, $b, TMP_94, $c, self = this, $iter = TMP_93.$$p, block = $iter || nil;
TMP_93.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_94 = function(){var self = TMP_94.$$s || this;
return self.$size()}, TMP_94.$$s = self, TMP_94.$$arity = 0, TMP_94), $a).call($b, "sort_by!")
};
return self.$replace(($a = ($c = self).$sort_by, $a.$$p = block.$to_proc(), $a).call($c));
}, TMP_93.$$arity = 0);
Opal.defn(self, '$take', TMP_95 = function $$take(count) {
var self = this;
if (count < 0) {
self.$raise($scope.get('ArgumentError'));
}
return self.slice(0, count);
;
}, TMP_95.$$arity = 1);
Opal.defn(self, '$take_while', TMP_96 = function $$take_while() {
var self = this, $iter = TMP_96.$$p, block = $iter || nil;
TMP_96.$$p = null;
var result = [];
for (var i = 0, length = self.length, item, value; i < length; i++) {
item = self[i];
value = block(item);
if (value === false || value === nil) {
return result;
}
result.push(item);
}
return result;
}, TMP_96.$$arity = 0);
Opal.defn(self, '$to_a', TMP_97 = function $$to_a() {
var self = this;
return self;
}, TMP_97.$$arity = 0);
Opal.alias(self, 'to_ary', 'to_a');
Opal.defn(self, '$to_h', TMP_98 = function $$to_h() {
var self = this;
var i, len = self.length, ary, key, val, hash = $hash2([], {});
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);
}
return hash;
;
}, TMP_98.$$arity = 0);
Opal.alias(self, 'to_s', 'inspect');
Opal.defn(self, '$transpose', TMP_101 = function $$transpose() {
var $a, $b, TMP_99, self = this, result = nil, max = nil;
if ((($a = self['$empty?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return []};
result = [];
max = nil;
($a = ($b = self).$each, $a.$$p = (TMP_99 = function(row){var self = TMP_99.$$s || this, $c, $d, TMP_100;
if (row == null) row = nil;
if ((($c = $scope.get('Array')['$==='](row)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
row = row.$to_a()
} else {
row = $scope.get('Opal').$coerce_to(row, $scope.get('Array'), "to_ary").$to_a()
};
((($c = max) !== false && $c !== nil && $c != null) ? $c : max = row.length);
if ((($c = (row.length)['$!='](max)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
self.$raise($scope.get('IndexError'), "element size differs (" + (row.length) + " should be " + (max))};
return ($c = ($d = (row.length)).$times, $c.$$p = (TMP_100 = function(i){var self = TMP_100.$$s || this, $e, $f, $g, entry = nil;
if (i == null) i = nil;
entry = (($e = i, $f = result, ((($g = $f['$[]']($e)) !== false && $g !== nil && $g != null) ? $g : $f['$[]=']($e, []))));
return entry['$<<'](row.$at(i));}, TMP_100.$$s = self, TMP_100.$$arity = 1, TMP_100), $c).call($d);}, TMP_99.$$s = self, TMP_99.$$arity = 1, TMP_99), $a).call($b);
return result;
}, TMP_101.$$arity = 0);
Opal.defn(self, '$uniq', TMP_102 = function $$uniq() {
var self = this, $iter = TMP_102.$$p, block = $iter || nil;
TMP_102.$$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);
}
}
}
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);
}
}
}
return toArraySubclass((hash).$values(), self.$class());
;
}, TMP_102.$$arity = 0);
Opal.defn(self, '$uniq!', TMP_103 = function() {
var self = this, $iter = TMP_103.$$p, block = $iter || nil;
TMP_103.$$p = null;
var original_length = self.length, hash = $hash2([], {}), i, length, item, key;
for (i = 0, length = original_length; i < length; i++) {
item = self[i];
key = (block === nil ? item : Opal.yield1(block, item));
if (Opal.hash_get(hash, key) === undefined) {
Opal.hash_put(hash, key, item);
continue;
}
self.splice(i, 1);
length--;
i--;
}
return self.length === original_length ? nil : self;
;
}, TMP_103.$$arity = 0);
Opal.defn(self, '$unshift', TMP_104 = function $$unshift($a_rest) {
var self = this, objects;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
objects = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
objects[$arg_idx - 0] = arguments[$arg_idx];
}
for (var i = objects.length - 1; i >= 0; i--) {
self.unshift(objects[i]);
}
return self;
}, TMP_104.$$arity = -1);
Opal.defn(self, '$values_at', TMP_107 = function $$values_at($a_rest) {
var $b, $c, TMP_105, self = this, args, out = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
out = [];
($b = ($c = args).$each, $b.$$p = (TMP_105 = function(elem){var self = TMP_105.$$s || this, $a, $d, TMP_106, finish = nil, start = nil, i = nil;
if (elem == null) elem = nil;
if ((($a = elem['$kind_of?']($scope.get('Range'))) !== nil && $a != null && (!$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 = ($d = start).$upto, $a.$$p = (TMP_106 = function(i){var self = TMP_106.$$s || this;
if (i == null) i = nil;
return out['$<<'](self.$at(i))}, TMP_106.$$s = self, TMP_106.$$arity = 1, TMP_106), $a).call($d, finish);
} else {
i = $scope.get('Opal').$coerce_to(elem, $scope.get('Integer'), "to_int");
return out['$<<'](self.$at(i));
}}, TMP_105.$$s = self, TMP_105.$$arity = 1, TMP_105), $b).call($c);
return out;
}, TMP_107.$$arity = -1);
Opal.defn(self, '$zip', TMP_108 = function $$zip($a_rest) {
var $b, self = this, others, $iter = TMP_108.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
others = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
others[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_108.$$p = null;
var result = [], size = self.length, part, o, i, j, jj;
for (j = 0, jj = others.length; j < jj; j++) {
o = others[j];
if (o.$$is_array) {
continue;
}
if (o.$$is_enumerator) {
if (o.$size() === Infinity) {
others[j] = o.$take(size);
} else {
others[j] = o.$to_a();
}
continue;
}
others[j] = (((($b = $scope.get('Opal')['$coerce_to?'](o, $scope.get('Array'), "to_ary")) !== false && $b !== nil && $b != null) ? $b : $scope.get('Opal')['$coerce_to!'](o, $scope.get('Enumerator'), "each"))).$to_a();
}
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;
}
if (block !== nil) {
for (i = 0; i < size; i++) {
block(result[i]);
}
return nil;
}
return result;
}, TMP_108.$$arity = -1);
Opal.defs(self, '$inherited', TMP_109 = function $$inherited(klass) {
var self = this;
klass.$$proto.$to_a = function() {
return this.slice(0, this.length);
}
}, TMP_109.$$arity = 1);
Opal.defn(self, '$instance_variables', TMP_111 = function $$instance_variables() {
var $a, $b, TMP_110, $c, $d, self = this, $iter = TMP_111.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_111.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
return ($a = ($b = ($c = ($d = self, Opal.find_super_dispatcher(self, 'instance_variables', TMP_111, false)), $c.$$p = $iter, $c).apply($d, $zuper)).$reject, $a.$$p = (TMP_110 = function(ivar){var self = TMP_110.$$s || this, $c;
if (ivar == null) ivar = nil;
return ((($c = /^@\d+$/.test(ivar)) !== false && $c !== nil && $c != null) ? $c : ivar['$==']("@length"))}, TMP_110.$$s = self, TMP_110.$$arity = 1, TMP_110), $a).call($b);
}, TMP_111.$$arity = 0);
return $scope.get('Opal').$pristine(self, "allocate", "copy_instance_variables", "initialize_dup");
})($scope.base, Array);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/hash"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
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);
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_18, TMP_20, TMP_22, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_32, TMP_33, TMP_34, TMP_36, TMP_37, TMP_38, TMP_39, TMP_40, TMP_41, TMP_42, TMP_44, TMP_46, TMP_47, TMP_49, TMP_51, TMP_52, TMP_53, TMP_54, TMP_55;
self.$include($scope.get('Enumerable'));
def.$$is_hash = true;
Opal.defs(self, '$[]', TMP_1 = function($a_rest) {
var self = this, argv;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
argv = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
argv[$arg_idx - 0] = arguments[$arg_idx];
}
var hash, argc = argv.length, i;
if (argc === 1) {
hash = $scope.get('Opal')['$coerce_to?'](argv['$[]'](0), $scope.get('Hash'), "to_hash");
if (hash !== nil) {
return self.$allocate()['$merge!'](hash);
}
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")
}
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)")
}
}
return hash;
}
if (argc % 2 !== 0) {
self.$raise($scope.get('ArgumentError'), "odd number of arguments for Hash")
}
hash = self.$allocate();
for (i = 0; i < argc; i += 2) {
hash.$store(argv[i], argv[i + 1]);
}
return hash;
;
}, TMP_1.$$arity = -1);
Opal.defs(self, '$allocate', TMP_2 = function $$allocate() {
var self = this;
var hash = new self.$$alloc();
Opal.hash_init(hash);
hash.$$none = nil;
hash.$$proc = nil;
return hash;
}, TMP_2.$$arity = 0);
Opal.defs(self, '$try_convert', TMP_3 = function $$try_convert(obj) {
var self = this;
return $scope.get('Opal')['$coerce_to?'](obj, $scope.get('Hash'), "to_hash");
}, TMP_3.$$arity = 1);
Opal.defn(self, '$initialize', TMP_4 = function $$initialize(defaults) {
var self = this, $iter = TMP_4.$$p, block = $iter || nil;
TMP_4.$$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;
}, TMP_4.$$arity = -1);
Opal.defn(self, '$==', TMP_5 = 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);
}
if (other_value === undefined || !value['$eql?'](other_value)) {
return false;
}
}
return true;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$[]', TMP_6 = function(key) {
var self = this;
var value = Opal.hash_get(self, key);
if (value !== undefined) {
return value;
}
return self.$default(key);
}, TMP_6.$$arity = 1);
Opal.defn(self, '$[]=', TMP_7 = function(key, value) {
var self = this;
Opal.hash_put(self, key, value);
return value;
}, TMP_7.$$arity = 2);
Opal.defn(self, '$assoc', TMP_8 = function $$assoc(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 {
if ((key.key)['$=='](object)) {
return [key.key, key.value];
}
}
}
return nil;
}, TMP_8.$$arity = 1);
Opal.defn(self, '$clear', TMP_9 = function $$clear() {
var self = this;
Opal.hash_init(self);
return self;
}, TMP_9.$$arity = 0);
Opal.defn(self, '$clone', TMP_10 = function $$clone() {
var self = this;
var hash = new self.$$class.$$alloc();
Opal.hash_init(hash);
Opal.hash_clone(self, hash);
return hash;
}, TMP_10.$$arity = 0);
Opal.defn(self, '$default', TMP_11 = function(key) {
var self = this;
if (key !== undefined && self.$$proc !== nil && self.$$proc !== undefined) {
return self.$$proc.$call(self, key);
}
if (self.$$none === undefined) {
return nil;
}
return self.$$none;
}, TMP_11.$$arity = -1);
Opal.defn(self, '$default=', TMP_12 = function(object) {
var self = this;
self.$$proc = nil;
self.$$none = object;
return object;
}, TMP_12.$$arity = 1);
Opal.defn(self, '$default_proc', TMP_13 = function $$default_proc() {
var self = this;
if (self.$$proc !== undefined) {
return self.$$proc;
}
return nil;
}, TMP_13.$$arity = 0);
Opal.defn(self, '$default_proc=', TMP_14 = function(proc) {
var self = this;
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");
}
}
self.$$none = nil;
self.$$proc = proc;
return proc;
;
}, TMP_14.$$arity = 1);
Opal.defn(self, '$delete', TMP_15 = function(key) {
var self = this, $iter = TMP_15.$$p, block = $iter || nil;
TMP_15.$$p = null;
var value = Opal.hash_delete(self, key);
if (value !== undefined) {
return value;
}
if (block !== nil) {
return block.$call(key);
}
return nil;
}, TMP_15.$$arity = 1);
Opal.defn(self, '$delete_if', TMP_16 = function $$delete_if() {
var $a, $b, TMP_17, self = this, $iter = TMP_16.$$p, block = $iter || nil;
TMP_16.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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.$$arity = 0, TMP_17), $a).call($b, "delete_if")
};
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 !== false && obj !== nil) {
if (Opal.hash_delete(self, key) !== undefined) {
length--;
i--;
}
}
}
return self;
}, TMP_16.$$arity = 0);
Opal.alias(self, 'dup', 'clone');
Opal.defn(self, '$each', TMP_18 = function $$each() {
var $a, $b, TMP_19, self = this, $iter = TMP_18.$$p, block = $iter || nil;
TMP_18.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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.$$arity = 0, TMP_19), $a).call($b, "each")
};
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;
}
Opal.yield1(block, [key, value]);
}
return self;
}, TMP_18.$$arity = 0);
Opal.defn(self, '$each_key', TMP_20 = function $$each_key() {
var $a, $b, TMP_21, self = this, $iter = TMP_20.$$p, block = $iter || nil;
TMP_20.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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.$$arity = 0, TMP_21), $a).call($b, "each_key")
};
for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) {
key = keys[i];
block(key.$$is_string ? key : key.key);
}
return self;
}, TMP_20.$$arity = 0);
Opal.alias(self, 'each_pair', 'each');
Opal.defn(self, '$each_value', TMP_22 = function $$each_value() {
var $a, $b, TMP_23, self = this, $iter = TMP_22.$$p, block = $iter || nil;
TMP_22.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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.$$arity = 0, TMP_23), $a).call($b, "each_value")
};
for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) {
key = keys[i];
block(key.$$is_string ? self.$$smap[key] : key.value);
}
return self;
}, TMP_22.$$arity = 0);
Opal.defn(self, '$empty?', TMP_24 = function() {
var self = this;
return self.$$keys.length === 0;
}, TMP_24.$$arity = 0);
Opal.alias(self, 'eql?', '==');
Opal.defn(self, '$fetch', TMP_25 = function $$fetch(key, defaults) {
var self = this, $iter = TMP_25.$$p, block = $iter || nil;
TMP_25.$$p = null;
var value = Opal.hash_get(self, key);
if (value !== undefined) {
return value;
}
if (block !== nil) {
return block(key);
}
if (defaults !== undefined) {
return defaults;
}
return self.$raise($scope.get('KeyError'), "key not found: " + (key.$inspect()));
}, TMP_25.$$arity = -2);
Opal.defn(self, '$flatten', TMP_26 = function $$flatten(level) {
var self = this;
if (level == null) {
level = 1;
}
level = $scope.get('Opal')['$coerce_to!'](level, $scope.get('Integer'), "to_int");
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);
if (value.$$is_array) {
if (level === 1) {
result.push(value);
continue;
}
result = result.concat((value).$flatten(level - 2));
continue;
}
result.push(value);
}
return result;
}, TMP_26.$$arity = -1);
Opal.defn(self, '$has_key?', TMP_27 = function(key) {
var self = this;
return Opal.hash_get(self, key) !== undefined;
}, TMP_27.$$arity = 1);
Opal.defn(self, '$has_value?', TMP_28 = function(value) {
var self = this;
for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) {
key = keys[i];
if (((key.$$is_string ? self.$$smap[key] : key.value))['$=='](value)) {
return true;
}
}
return false;
}, TMP_28.$$arity = 1);
Opal.defn(self, '$hash', TMP_29 = function $$hash() {
var self = this;
var top = (Opal.hash_ids === undefined),
hash_id = self.$object_id(),
result = ['Hash'],
key, item;
try {
if (top) {
Opal.hash_ids = {};
}
if (Opal.hash_ids.hasOwnProperty(hash_id)) {
return 'self';
}
for (key in Opal.hash_ids) {
if (Opal.hash_ids.hasOwnProperty(key)) {
item = Opal.hash_ids[key];
if (self['$eql?'](item)) {
return 'self';
}
}
}
Opal.hash_ids[hash_id] = self;
for (var i = 0, keys = self.$$keys, length = keys.length; i < length; i++) {
key = keys[i];
if (key.$$is_string) {
result.push([key, self.$$smap[key].$hash()]);
} else {
result.push([key.key_hash, key.value.$hash()]);
}
}
return result.sort().join();
} finally {
if (top) {
delete Opal.hash_ids;
}
}
}, TMP_29.$$arity = 0);
Opal.alias(self, 'include?', 'has_key?');
Opal.defn(self, '$index', TMP_30 = function $$index(object) {
var self = this;
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;
}
if ((value)['$=='](object)) {
return key;
}
}
return nil;
}, TMP_30.$$arity = 1);
Opal.defn(self, '$indexes', TMP_31 = function $$indexes($a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
var result = [];
for (var i = 0, length = args.length, key, value; i < length; i++) {
key = args[i];
value = Opal.hash_get(self, key);
if (value === undefined) {
result.push(self.$default());
continue;
}
result.push(value);
}
return result;
}, TMP_31.$$arity = -1);
Opal.alias(self, 'indices', 'indexes');
var inspect_ids;
Opal.defn(self, '$inspect', TMP_32 = function $$inspect() {
var self = this;
var top = (inspect_ids === undefined),
hash_id = self.$object_id(),
result = [];
try {
if (top) {
inspect_ids = {};
}
if (inspect_ids.hasOwnProperty(hash_id)) {
return '{...}';
}
inspect_ids[hash_id] = true;
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.$inspect() + '=>' + value.$inspect());
}
return '{' + result.join(', ') + '}';
} finally {
if (top) {
inspect_ids = undefined;
}
}
}, TMP_32.$$arity = 0);
Opal.defn(self, '$invert', TMP_33 = function $$invert() {
var self = this;
var hash = Opal.hash();
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;
}
Opal.hash_put(hash, value, key);
}
return hash;
}, TMP_33.$$arity = 0);
Opal.defn(self, '$keep_if', TMP_34 = function $$keep_if() {
var $a, $b, TMP_35, self = this, $iter = TMP_34.$$p, block = $iter || nil;
TMP_34.$$p = null;
if (block !== false && block !== nil && block != null) {
} 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.$$arity = 0, TMP_35), $a).call($b, "keep_if")
};
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 === false || obj === nil) {
if (Opal.hash_delete(self, key) !== undefined) {
length--;
i--;
}
}
}
return self;
}, TMP_34.$$arity = 0);
Opal.alias(self, 'key', 'index');
Opal.alias(self, 'key?', 'has_key?');
Opal.defn(self, '$keys', TMP_36 = function $$keys() {
var self = this;
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(key);
} else {
result.push(key.key);
}
}
return result;
}, TMP_36.$$arity = 0);
Opal.defn(self, '$length', TMP_37 = function $$length() {
var self = this;
return self.$$keys.length;
}, TMP_37.$$arity = 0);
Opal.alias(self, 'member?', 'has_key?');
Opal.defn(self, '$merge', TMP_38 = function $$merge(other) {
var $a, $b, self = this, $iter = TMP_38.$$p, block = $iter || nil;
TMP_38.$$p = null;
return ($a = ($b = self.$dup())['$merge!'], $a.$$p = block.$to_proc(), $a).call($b, other);
}, TMP_38.$$arity = 1);
Opal.defn(self, '$merge!', TMP_39 = function(other) {
var self = this, $iter = TMP_39.$$p, block = $iter || nil;
TMP_39.$$p = null;
if (!$scope.get('Hash')['$==='](other)) {
other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash");
}
var i, other_keys = other.$$keys, length = other_keys.length, key, value, other_value;
if (block === nil) {
for (i = 0; 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);
}
return self;
}
for (i = 0; i < length; i++) {
key = other_keys[i];
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));
}
return self;
;
}, TMP_39.$$arity = 1);
Opal.defn(self, '$rassoc', TMP_40 = function $$rassoc(object) {
var self = this;
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;
}
if ((value)['$=='](object)) {
return [key, value];
}
}
return nil;
}, TMP_40.$$arity = 1);
Opal.defn(self, '$rehash', TMP_41 = function $$rehash() {
var self = this;
Opal.hash_rehash(self);
return self;
}, TMP_41.$$arity = 0);
Opal.defn(self, '$reject', TMP_42 = function $$reject() {
var $a, $b, TMP_43, self = this, $iter = TMP_42.$$p, block = $iter || nil;
TMP_42.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_43 = function(){var self = TMP_43.$$s || this;
return self.$size()}, TMP_43.$$s = self, TMP_43.$$arity = 0, TMP_43), $a).call($b, "reject")
};
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 === false || obj === nil) {
Opal.hash_put(hash, key, value);
}
}
return hash;
}, TMP_42.$$arity = 0);
Opal.defn(self, '$reject!', TMP_44 = function() {
var $a, $b, TMP_45, self = this, $iter = TMP_44.$$p, block = $iter || nil;
TMP_44.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_45 = function(){var self = TMP_45.$$s || this;
return self.$size()}, TMP_45.$$s = self, TMP_45.$$arity = 0, TMP_45), $a).call($b, "reject!")
};
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 !== false && obj !== nil) {
if (Opal.hash_delete(self, key) !== undefined) {
changes_were_made = true;
length--;
i--;
}
}
}
return changes_were_made ? self : nil;
}, TMP_44.$$arity = 0);
Opal.defn(self, '$replace', TMP_46 = function $$replace(other) {
var $a, $b, self = this;
other = $scope.get('Opal')['$coerce_to!'](other, $scope.get('Hash'), "to_hash");
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 != null && (!$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;
}, TMP_46.$$arity = 1);
Opal.defn(self, '$select', TMP_47 = function $$select() {
var $a, $b, TMP_48, self = this, $iter = TMP_47.$$p, block = $iter || nil;
TMP_47.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_48 = function(){var self = TMP_48.$$s || this;
return self.$size()}, TMP_48.$$s = self, TMP_48.$$arity = 0, TMP_48), $a).call($b, "select")
};
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 !== false && obj !== nil) {
Opal.hash_put(hash, key, value);
}
}
return hash;
}, TMP_47.$$arity = 0);
Opal.defn(self, '$select!', TMP_49 = function() {
var $a, $b, TMP_50, self = this, $iter = TMP_49.$$p, block = $iter || nil;
TMP_49.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_50 = function(){var self = TMP_50.$$s || this;
return self.$size()}, TMP_50.$$s = self, TMP_50.$$arity = 0, TMP_50), $a).call($b, "select!")
};
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 === false || obj === nil) {
if (Opal.hash_delete(self, key) !== undefined) {
length--;
i--;
}
result = self;
}
}
return result;
}, TMP_49.$$arity = 0);
Opal.defn(self, '$shift', TMP_51 = function $$shift() {
var self = this;
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);
}, TMP_51.$$arity = 0);
Opal.alias(self, 'size', 'length');
self.$alias_method("store", "[]=");
Opal.defn(self, '$to_a', TMP_52 = function $$to_a() {
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, value]);
}
return result;
}, TMP_52.$$arity = 0);
Opal.defn(self, '$to_h', TMP_53 = function $$to_h() {
var self = this;
if (self.$$class === Opal.Hash) {
return self;
}
var hash = new Opal.Hash.$$alloc();
Opal.hash_init(hash);
Opal.hash_clone(self, hash);
return hash;
}, TMP_53.$$arity = 0);
Opal.defn(self, '$to_hash', TMP_54 = function $$to_hash() {
var self = this;
return self;
}, TMP_54.$$arity = 0);
Opal.alias(self, 'to_s', 'inspect');
Opal.alias(self, 'update', 'merge!');
Opal.alias(self, 'value?', 'has_value?');
Opal.alias(self, 'values_at', 'indexes');
return (Opal.defn(self, '$values', TMP_55 = function $$values() {
var self = this;
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;
}, TMP_55.$$arity = 0), nil) && 'values';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/number"] = function(Opal) {
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;
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_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_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_33, TMP_34, TMP_35, TMP_36, TMP_37, TMP_38, TMP_39, TMP_40, TMP_41, TMP_42, TMP_43, TMP_44, TMP_45, TMP_46, TMP_47, TMP_48, TMP_49, TMP_50, TMP_51, TMP_52, TMP_54, TMP_55, TMP_56, TMP_57, TMP_58, TMP_59, TMP_61, TMP_62, TMP_63, TMP_64, TMP_65, TMP_66, TMP_67;
$scope.get('Opal').$bridge(self, Number);
Number.prototype.$$is_number = true;
Opal.defn(self, '$coerce', TMP_1 = function $$coerce(other) {
var self = this;
if (other === nil) {
self.$raise($scope.get('TypeError'), "can't convert " + (other.$class()) + " into Float");
}
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 {
self.$raise($scope.get('TypeError'), "can't convert " + (other.$class()) + " into Float");
}
;
}, TMP_1.$$arity = 1);
Opal.defn(self, '$__id__', TMP_2 = function $$__id__() {
var self = this;
return (self * 2) + 1;
}, TMP_2.$$arity = 0);
Opal.alias(self, 'object_id', '__id__');
Opal.defn(self, '$+', TMP_3 = function(other) {
var self = this;
if (other.$$is_number) {
return self + other;
}
else {
return self.$__coerced__("+", other);
}
}, TMP_3.$$arity = 1);
Opal.defn(self, '$-', TMP_4 = function(other) {
var self = this;
if (other.$$is_number) {
return self - other;
}
else {
return self.$__coerced__("-", other);
}
}, TMP_4.$$arity = 1);
Opal.defn(self, '$*', TMP_5 = function(other) {
var self = this;
if (other.$$is_number) {
return self * other;
}
else {
return self.$__coerced__("*", other);
}
}, TMP_5.$$arity = 1);
Opal.defn(self, '$/', TMP_6 = function(other) {
var self = this;
if (other.$$is_number) {
return self / other;
}
else {
return self.$__coerced__("/", other);
}
}, TMP_6.$$arity = 1);
Opal.alias(self, 'fdiv', '/');
Opal.defn(self, '$%', TMP_7 = function(other) {
var self = this;
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);
}
}, TMP_7.$$arity = 1);
Opal.defn(self, '$&', TMP_8 = function(other) {
var self = this;
if (other.$$is_number) {
return self & other;
}
else {
return self.$__coerced__("&", other);
}
}, TMP_8.$$arity = 1);
Opal.defn(self, '$|', TMP_9 = function(other) {
var self = this;
if (other.$$is_number) {
return self | other;
}
else {
return self.$__coerced__("|", other);
}
}, TMP_9.$$arity = 1);
Opal.defn(self, '$^', TMP_10 = function(other) {
var self = this;
if (other.$$is_number) {
return self ^ other;
}
else {
return self.$__coerced__("^", other);
}
}, TMP_10.$$arity = 1);
Opal.defn(self, '$<', TMP_11 = function(other) {
var self = this;
if (other.$$is_number) {
return self < other;
}
else {
return self.$__coerced__("<", other);
}
}, TMP_11.$$arity = 1);
Opal.defn(self, '$<=', TMP_12 = function(other) {
var self = this;
if (other.$$is_number) {
return self <= other;
}
else {
return self.$__coerced__("<=", other);
}
}, TMP_12.$$arity = 1);
Opal.defn(self, '$>', TMP_13 = function(other) {
var self = this;
if (other.$$is_number) {
return self > other;
}
else {
return self.$__coerced__(">", other);
}
}, TMP_13.$$arity = 1);
Opal.defn(self, '$>=', TMP_14 = function(other) {
var self = this;
if (other.$$is_number) {
return self >= other;
}
else {
return self.$__coerced__(">=", other);
}
}, TMP_14.$$arity = 1);
var spaceship_operator = function(self, other) {
if (other.$$is_number) {
if (isNaN(self) || isNaN(other)) {
return nil;
}
if (self > other) {
return 1;
} else if (self < other) {
return -1;
} else {
return 0;
}
}
else {
return self.$__coerced__("<=>", other);
}
}
Opal.defn(self, '$<=>', TMP_15 = function(other) {
var self = this;
try {
return spaceship_operator(self, other);
} catch ($err) {
if (Opal.rescue($err, [$scope.get('ArgumentError')])) {
try {
return nil
} finally { Opal.pop_exception() }
} else { throw $err; }
};
}, TMP_15.$$arity = 1);
Opal.defn(self, '$<<', TMP_16 = function(count) {
var self = this;
count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int");
return count > 0 ? self << count : self >> -count;
}, TMP_16.$$arity = 1);
Opal.defn(self, '$>>', TMP_17 = function(count) {
var self = this;
count = $scope.get('Opal')['$coerce_to!'](count, $scope.get('Integer'), "to_int");
return count > 0 ? self >> count : self << -count;
}, TMP_17.$$arity = 1);
Opal.defn(self, '$[]', TMP_18 = function(bit) {
var self = this;
bit = $scope.get('Opal')['$coerce_to!'](bit, $scope.get('Integer'), "to_int");
if (bit < 0) {
return 0;
}
if (bit >= 32) {
return self < 0 ? 1 : 0;
}
return (self >> bit) & 1;
;
}, TMP_18.$$arity = 1);
Opal.defn(self, '$+@', TMP_19 = function() {
var self = this;
return +self;
}, TMP_19.$$arity = 0);
Opal.defn(self, '$-@', TMP_20 = function() {
var self = this;
return -self;
}, TMP_20.$$arity = 0);
Opal.defn(self, '$~', TMP_21 = function() {
var self = this;
return ~self;
}, TMP_21.$$arity = 0);
Opal.defn(self, '$**', TMP_22 = function(other) {
var $a, $b, $c, self = this;
if ((($a = $scope.get('Integer')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = ((($b = ($scope.get('Integer')['$==='](self))['$!']()) !== false && $b !== nil && $b != null) ? $b : $rb_gt(other, 0))) !== nil && $a != null && (!$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 != null) ? $c : $scope.get('Rational')['$==='](other))) : $rb_lt(self, 0))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return $scope.get('Complex').$new(self, 0)['$**'](other.$to_f())
} else if ((($a = other.$$is_number != null) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return Math.pow(self, other);
} else {
return self.$__coerced__("**", other)
};
}, TMP_22.$$arity = 1);
Opal.defn(self, '$==', TMP_23 = function(other) {
var self = this;
if (other.$$is_number) {
return self == Number(other);
}
else if (other['$respond_to?']("==")) {
return other['$=='](self);
}
else {
return false;
}
;
}, TMP_23.$$arity = 1);
Opal.defn(self, '$abs', TMP_24 = function $$abs() {
var self = this;
return Math.abs(self);
}, TMP_24.$$arity = 0);
Opal.defn(self, '$abs2', TMP_25 = function $$abs2() {
var self = this;
return Math.abs(self * self);
}, TMP_25.$$arity = 0);
Opal.defn(self, '$angle', TMP_26 = function $$angle() {
var $a, self = this;
if ((($a = self['$nan?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self};
if (self == 0) {
if (1 / self > 0) {
return 0;
}
else {
return Math.PI;
}
}
else if (self < 0) {
return Math.PI;
}
else {
return 0;
}
}, TMP_26.$$arity = 0);
Opal.alias(self, 'arg', 'angle');
Opal.alias(self, 'phase', 'angle');
Opal.defn(self, '$bit_length', TMP_27 = function $$bit_length() {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](self)) !== nil && $a != null && (!$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 result = 0,
value = self < 0 ? ~self : self;
while (value != 0) {
result += 1;
value >>>= 1;
}
return result;
}, TMP_27.$$arity = 0);
Opal.defn(self, '$ceil', TMP_28 = function $$ceil() {
var self = this;
return Math.ceil(self);
}, TMP_28.$$arity = 0);
Opal.defn(self, '$chr', TMP_29 = function $$chr(encoding) {
var self = this;
return String.fromCharCode(self);
}, TMP_29.$$arity = -1);
Opal.defn(self, '$denominator', TMP_30 = function $$denominator() {
var $a, $b, self = this, $iter = TMP_30.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_30.$$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 != null) ? $b : self['$infinite?']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 1
} else {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'denominator', TMP_30, false)), $a.$$p = $iter, $a).apply($b, $zuper)
};
}, TMP_30.$$arity = 0);
Opal.defn(self, '$downto', TMP_31 = function $$downto(stop) {
var $a, $b, TMP_32, 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, $c;
if ((($c = $scope.get('Numeric')['$==='](stop)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed")
};
if ((($c = $rb_gt(stop, self)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return 0
} else {
return $rb_plus($rb_minus(self, stop), 1)
};}, TMP_32.$$s = self, TMP_32.$$arity = 0, TMP_32), $a).call($b, "downto", stop)
};
if (!stop.$$is_number) {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed")
}
for (var i = self; i >= stop; i--) {
block(i);
}
;
return self;
}, TMP_31.$$arity = 1);
Opal.alias(self, 'eql?', '==');
Opal.defn(self, '$equal?', TMP_33 = function(other) {
var $a, self = this;
return ((($a = self['$=='](other)) !== false && $a !== nil && $a != null) ? $a : isNaN(self) && isNaN(other));
}, TMP_33.$$arity = 1);
Opal.defn(self, '$even?', TMP_34 = function() {
var self = this;
return self % 2 === 0;
}, TMP_34.$$arity = 0);
Opal.defn(self, '$floor', TMP_35 = function $$floor() {
var self = this;
return Math.floor(self);
}, TMP_35.$$arity = 0);
Opal.defn(self, '$gcd', TMP_36 = function $$gcd(other) {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](other)) !== nil && $a != null && (!$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;
}
return max;
}, TMP_36.$$arity = 1);
Opal.defn(self, '$gcdlcm', TMP_37 = function $$gcdlcm(other) {
var self = this;
return [self.$gcd(), self.$lcm()];
}, TMP_37.$$arity = 1);
Opal.defn(self, '$integer?', TMP_38 = function() {
var self = this;
return self % 1 === 0;
}, TMP_38.$$arity = 0);
Opal.defn(self, '$is_a?', TMP_39 = function(klass) {
var $a, $b, self = this, $iter = TMP_39.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_39.$$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 != null && (!$a.$$is_boolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Integer')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : klass['$==']($scope.get('Float')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return true};
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'is_a?', TMP_39, false)), $a.$$p = $iter, $a).apply($b, $zuper);
}, TMP_39.$$arity = 1);
Opal.alias(self, 'kind_of?', 'is_a?');
Opal.defn(self, '$instance_of?', TMP_40 = function(klass) {
var $a, $b, self = this, $iter = TMP_40.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_40.$$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 != null && (!$a.$$is_boolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.get('Integer'))) ? $scope.get('Integer')['$==='](self) : klass['$==']($scope.get('Integer')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.get('Float'))) ? $scope.get('Float')['$==='](self) : klass['$==']($scope.get('Float')))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return true};
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'instance_of?', TMP_40, false)), $a.$$p = $iter, $a).apply($b, $zuper);
}, TMP_40.$$arity = 1);
Opal.defn(self, '$lcm', TMP_41 = function $$lcm(other) {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](other)) !== nil && $a != null && (!$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));
}
}, TMP_41.$$arity = 1);
Opal.alias(self, 'magnitude', 'abs');
Opal.alias(self, 'modulo', '%');
Opal.defn(self, '$next', TMP_42 = function $$next() {
var self = this;
return self + 1;
}, TMP_42.$$arity = 0);
Opal.defn(self, '$nonzero?', TMP_43 = function() {
var self = this;
return self == 0 ? nil : self;
}, TMP_43.$$arity = 0);
Opal.defn(self, '$numerator', TMP_44 = function $$numerator() {
var $a, $b, self = this, $iter = TMP_44.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_44.$$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 != null) ? $b : self['$infinite?']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self
} else {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'numerator', TMP_44, false)), $a.$$p = $iter, $a).apply($b, $zuper)
};
}, TMP_44.$$arity = 0);
Opal.defn(self, '$odd?', TMP_45 = function() {
var self = this;
return self % 2 !== 0;
}, TMP_45.$$arity = 0);
Opal.defn(self, '$ord', TMP_46 = function $$ord() {
var self = this;
return self;
}, TMP_46.$$arity = 0);
Opal.defn(self, '$pred', TMP_47 = function $$pred() {
var self = this;
return self - 1;
}, TMP_47.$$arity = 0);
Opal.defn(self, '$quo', TMP_48 = function $$quo(other) {
var $a, $b, self = this, $iter = TMP_48.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_48.$$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 != null && (!$a.$$is_boolean || $a == true))) {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'quo', TMP_48, false)), $a.$$p = $iter, $a).apply($b, $zuper)
} else {
return $rb_divide(self, other)
};
}, TMP_48.$$arity = 1);
Opal.defn(self, '$rationalize', TMP_49 = function $$rationalize(eps) {
var $a, $b, self = this, f = nil, n = nil;
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 != null && (!$a.$$is_boolean || $a == true))) {
return $scope.get('Rational').$new(self, 1)
} else if ((($a = self['$infinite?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$raise($scope.get('FloatDomainError'), "Infinity")
} else if ((($a = self['$nan?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$raise($scope.get('FloatDomainError'), "NaN")
} else if ((($a = eps == null) !== nil && $a != null && (!$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)
};
}, TMP_49.$$arity = -1);
Opal.defn(self, '$round', TMP_50 = function $$round(ndigits) {
var $a, $b, self = this, _ = nil, exp = nil;
if ((($a = $scope.get('Integer')['$==='](self)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = ndigits == null) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self};
if ((($a = ($b = $scope.get('Float')['$==='](ndigits), $b !== false && $b !== nil && $b != null ?ndigits['$infinite?']() : $b)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('RangeError'), "out of bounds")};
if ((($a = ndigits >= 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self};
ndigits = ndigits['$-@']();
if (0.415241 * ndigits - 0.125 > self.$size()) {
return 0;
}
var f = Math.pow(10, ndigits),
x = Math.floor((Math.abs(x) + f / 2) / f) * f;
return self < 0 ? -x : x;
;
} else {
if ((($a = ($b = self['$nan?'](), $b !== false && $b !== nil && $b != null ?ndigits == null : $b)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = self['$nan?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('RangeError'), "NaN")
} else if ((($a = self['$infinite?']()) !== nil && $a != null && (!$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 != null) ? $b : self['$infinite?']())) !== nil && $a != null && (!$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 != null && (!$b.$$is_boolean || $b == true))) {
return $rb_divide(exp, 4)
} else {
return $rb_minus($rb_divide(exp, 3), 1)
}; return nil; })())))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self};
if ((($a = $rb_lt(ndigits, ((function() {if ((($b = $rb_gt(exp, 0)) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return $rb_plus($rb_divide(exp, 3), 1)
} else {
return $rb_divide(exp, 4)
}; return nil; })())['$-@']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 0};
return Math.round(self * Math.pow(10, ndigits)) / Math.pow(10, ndigits);
};
}, TMP_50.$$arity = -1);
Opal.defn(self, '$step', TMP_51 = function $$step(limit, step) {
var $a, self = this, $iter = TMP_51.$$p, block = $iter || nil;
if (step == null) {
step = 1;
}
TMP_51.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return self.$enum_for("step", limit, step)
};
if ((($a = step == 0) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "step cannot be 0")};
var value = self;
if (limit === Infinity || limit === -Infinity) {
block(value);
return self;
}
if (step > 0) {
while (value <= limit) {
block(value);
value += step;
}
}
else {
while (value >= limit) {
block(value);
value += step;
}
}
return self;
}, TMP_51.$$arity = -2);
Opal.alias(self, 'succ', 'next');
Opal.defn(self, '$times', TMP_52 = function $$times() {
var $a, $b, TMP_53, self = this, $iter = TMP_52.$$p, block = $iter || nil;
TMP_52.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_53 = function(){var self = TMP_53.$$s || this;
return self}, TMP_53.$$s = self, TMP_53.$$arity = 0, TMP_53), $a).call($b, "times")
};
for (var i = 0; i < self; i++) {
block(i);
}
return self;
}, TMP_52.$$arity = 0);
Opal.defn(self, '$to_f', TMP_54 = function $$to_f() {
var self = this;
return self;
}, TMP_54.$$arity = 0);
Opal.defn(self, '$to_i', TMP_55 = function $$to_i() {
var self = this;
return parseInt(self, 10);
}, TMP_55.$$arity = 0);
Opal.alias(self, 'to_int', 'to_i');
Opal.defn(self, '$to_r', TMP_56 = function $$to_r() {
var $a, $b, self = this, f = nil, e = nil;
if ((($a = $scope.get('Integer')['$==='](self)) !== nil && $a != null && (!$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();
};
}, TMP_56.$$arity = 0);
Opal.defn(self, '$to_s', TMP_57 = function $$to_s(base) {
var $a, $b, self = this;
if (base == null) {
base = 10;
}
if ((($a = ((($b = $rb_lt(base, 2)) !== false && $b !== nil && $b != null) ? $b : $rb_gt(base, 36))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "base must be between 2 and 36")};
return self.toString(base);
}, TMP_57.$$arity = -1);
Opal.alias(self, 'truncate', 'to_i');
Opal.alias(self, 'inspect', 'to_s');
Opal.defn(self, '$divmod', TMP_58 = function $$divmod(other) {
var $a, $b, self = this, $iter = TMP_58.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_58.$$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 != null) ? $b : other['$nan?']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$raise($scope.get('FloatDomainError'), "NaN")
} else if ((($a = self['$infinite?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$raise($scope.get('FloatDomainError'), "Infinity")
} else {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'divmod', TMP_58, false)), $a.$$p = $iter, $a).apply($b, $zuper)
};
}, TMP_58.$$arity = 1);
Opal.defn(self, '$upto', TMP_59 = function $$upto(stop) {
var $a, $b, TMP_60, self = this, $iter = TMP_59.$$p, block = $iter || nil;
TMP_59.$$p = null;
if ((block !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_60 = function(){var self = TMP_60.$$s || this, $c;
if ((($c = $scope.get('Numeric')['$==='](stop)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
} else {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed")
};
if ((($c = $rb_lt(stop, self)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
return 0
} else {
return $rb_plus($rb_minus(stop, self), 1)
};}, TMP_60.$$s = self, TMP_60.$$arity = 0, TMP_60), $a).call($b, "upto", stop)
};
if (!stop.$$is_number) {
self.$raise($scope.get('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed")
}
for (var i = self; i <= stop; i++) {
block(i);
}
;
return self;
}, TMP_59.$$arity = 1);
Opal.defn(self, '$zero?', TMP_61 = function() {
var self = this;
return self == 0;
}, TMP_61.$$arity = 0);
Opal.defn(self, '$size', TMP_62 = function $$size() {
var self = this;
return 4;
}, TMP_62.$$arity = 0);
Opal.defn(self, '$nan?', TMP_63 = function() {
var self = this;
return isNaN(self);
}, TMP_63.$$arity = 0);
Opal.defn(self, '$finite?', TMP_64 = function() {
var self = this;
return self != Infinity && self != -Infinity && !isNaN(self);
}, TMP_64.$$arity = 0);
Opal.defn(self, '$infinite?', TMP_65 = function() {
var self = this;
if (self == Infinity) {
return +1;
}
else if (self == -Infinity) {
return -1;
}
else {
return nil;
}
}, TMP_65.$$arity = 0);
Opal.defn(self, '$positive?', TMP_66 = function() {
var self = this;
return self == Infinity || 1 / self > 0;
}, TMP_66.$$arity = 0);
return (Opal.defn(self, '$negative?', TMP_67 = function() {
var self = this;
return self == -Infinity || 1 / self < 0;
}, TMP_67.$$arity = 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, TMP_68;
Opal.defs(self, '$===', TMP_68 = function(other) {
var self = this;
if (!other.$$is_number) {
return false;
}
return (other % 1) === 0;
}, TMP_68.$$arity = 1);
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);
var def = self.$$proto, $scope = self.$$scope, TMP_69, $a;
Opal.defs(self, '$===', TMP_69 = function(other) {
var self = this;
return !!other.$$is_number;
}, TMP_69.$$arity = 1);
Opal.cdecl($scope, 'INFINITY', Infinity);
Opal.cdecl($scope, 'MAX', Number.MAX_VALUE);
Opal.cdecl($scope, 'MIN', Number.MIN_VALUE);
Opal.cdecl($scope, 'NAN', NaN);
Opal.cdecl($scope, 'DIG', 15);
Opal.cdecl($scope, 'MANT_DIG', 53);
Opal.cdecl($scope, 'RADIX', 2);
if ((($a = (typeof(Number.EPSILON) !== "undefined")) !== nil && $a != null && (!$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'));
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/range"] = function(Opal) {
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.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);
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;
def.begin = def.exclude = def.end = nil;
self.$include($scope.get('Enumerable'));
def.$$is_range = true;
self.$attr_reader("begin", "end");
Opal.defn(self, '$initialize', TMP_1 = function $$initialize(first, last, exclude) {
var $a, self = this;
if (exclude == null) {
exclude = false;
}
if ((($a = first['$<=>'](last)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('ArgumentError'))
};
self.begin = first;
self.end = last;
return self.exclude = exclude;
}, TMP_1.$$arity = -3);
Opal.defn(self, '$==', TMP_2 = function(other) {
var self = this;
if (!other.$$is_range) {
return false;
}
return self.exclude === other.exclude &&
self.begin == other.begin &&
self.end == other.end;
}, TMP_2.$$arity = 1);
Opal.defn(self, '$===', TMP_3 = function(value) {
var self = this;
return self['$include?'](value);
}, TMP_3.$$arity = 1);
Opal.defn(self, '$cover?', TMP_4 = function(value) {
var $a, $b, self = this;
return ($a = $rb_le(self.begin, value), $a !== false && $a !== nil && $a != null ?((function() {if ((($b = self.exclude) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return $rb_lt(value, self.end)
} else {
return $rb_le(value, self.end)
}; return nil; })()) : $a);
}, TMP_4.$$arity = 1);
Opal.defn(self, '$each', TMP_5 = function $$each() {
var $a, $b, $c, self = this, $iter = TMP_5.$$p, block = $iter || nil, current = nil, last = nil;
TMP_5.$$p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each")
};
var i, limit;
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 != null && (!$a.$$is_boolean || $a == true))) {
return 0
} else {
return 1
}; return nil; })(); i < limit; i++) {
block(i);
}
return self;
}
if (self.begin.$$is_string && self.end.$$is_string) {
($a = ($b = self.begin).$upto, $a.$$p = block.$to_proc(), $a).call($b, self.end, self.exclude)
return self;
}
;
current = self.begin;
last = self.end;
while ((($c = $rb_lt(current, last)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
Opal.yield1(block, current);
current = current.$succ();};
if ((($a = ($c = self.exclude['$!'](), $c !== false && $c !== nil && $c != null ?current['$=='](last) : $c)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
Opal.yield1(block, current)};
return self;
}, TMP_5.$$arity = 0);
Opal.defn(self, '$eql?', TMP_6 = function(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Range')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return false
};
return ($a = ($b = self.exclude['$==='](other['$exclude_end?']()), $b !== false && $b !== nil && $b != null ?self.begin['$eql?'](other.$begin()) : $b), $a !== false && $a !== nil && $a != null ?self.end['$eql?'](other.$end()) : $a);
}, TMP_6.$$arity = 1);
Opal.defn(self, '$exclude_end?', TMP_7 = function() {
var self = this;
return self.exclude;
}, TMP_7.$$arity = 0);
Opal.alias(self, 'first', 'begin');
Opal.alias(self, 'include?', 'cover?');
Opal.alias(self, 'last', 'end');
Opal.defn(self, '$max', TMP_8 = function $$max() {
var $a, $b, self = this, $iter = TMP_8.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_8.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
if (($yield !== nil)) {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'max', TMP_8, false)), $a.$$p = $iter, $a).apply($b, $zuper)
} else {
return self.exclude ? self.end - 1 : self.end;
};
}, TMP_8.$$arity = 0);
Opal.alias(self, 'member?', 'cover?');
Opal.defn(self, '$min', TMP_9 = function $$min() {
var $a, $b, self = this, $iter = TMP_9.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_9.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
if (($yield !== nil)) {
return ($a = ($b = self, Opal.find_super_dispatcher(self, 'min', TMP_9, false)), $a.$$p = $iter, $a).apply($b, $zuper)
} else {
return self.begin
};
}, TMP_9.$$arity = 0);
Opal.alias(self, 'member?', 'include?');
Opal.defn(self, '$size', TMP_10 = function $$size() {
var $a, $b, self = this, _begin = nil, _end = nil, infinity = nil;
_begin = self.begin;
_end = self.end;
if ((($a = self.exclude) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
_end = $rb_minus(_end, 1)};
if ((($a = ($b = $scope.get('Numeric')['$==='](_begin), $b !== false && $b !== nil && $b != null ?$scope.get('Numeric')['$==='](_end) : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
return nil
};
if ((($a = $rb_lt(_end, _begin)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 0};
infinity = (($scope.get('Float')).$$scope.get('INFINITY'));
if ((($a = ((($b = infinity['$=='](_begin.$abs())) !== false && $b !== nil && $b != null) ? $b : _end.$abs()['$=='](infinity))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return infinity};
return ((Math.abs(_end - _begin) + 1)).$to_i();
}, TMP_10.$$arity = 0);
Opal.defn(self, '$step', TMP_11 = function $$step(n) {
var self = this;
if (n == null) {
n = 1;
}
return self.$raise($scope.get('NotImplementedError'));
}, TMP_11.$$arity = -1);
Opal.defn(self, '$to_s', TMP_12 = function $$to_s() {
var self = this;
return self.begin.$inspect() + (self.exclude ? '...' : '..') + self.end.$inspect();
}, TMP_12.$$arity = 0);
Opal.alias(self, 'inspect', 'to_s');
return (Opal.defn(self, '$marshal_load', TMP_13 = function $$marshal_load(args) {
var self = this;
self.begin = args['$[]']("begin");
self.end = args['$[]']("end");
return self.exclude = args['$[]']("excl");
}, TMP_13.$$arity = 1), nil) && 'marshal_load';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/proc"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
Opal.add_stubs(['$raise', '$coerce_to!']);
return (function($base, $super) {
function $Proc(){};
var self = $Proc = $klass($base, $super, 'Proc', $Proc);
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;
def.$$is_proc = true;
def.$$is_lambda = false;
Opal.defs(self, '$new', TMP_1 = function() {
var self = this, $iter = TMP_1.$$p, block = $iter || nil;
TMP_1.$$p = null;
if (block !== false && block !== nil && block != null) {
} else {
self.$raise($scope.get('ArgumentError'), "tried to create a Proc object without a block")
};
return block;
}, TMP_1.$$arity = 0);
Opal.defn(self, '$call', TMP_2 = function $$call($a_rest) {
var self = this, args, $iter = TMP_2.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_2.$$p = null;
if (block !== nil) {
self.$$p = block;
}
var result, $brk = self.$$brk;
if ($brk) {
try {
if (self.$$is_lambda) {
result = self.apply(null, args);
}
else {
result = Opal.yieldX(self, args);
}
} catch (err) {
if (err === $brk) {
return $brk.$v
}
else {
throw err
}
}
}
else {
if (self.$$is_lambda) {
result = self.apply(null, args);
}
else {
result = Opal.yieldX(self, args);
}
}
return result;
}, TMP_2.$$arity = -1);
Opal.alias(self, '[]', 'call');
Opal.alias(self, '===', 'call');
Opal.alias(self, 'yield', 'call');
Opal.defn(self, '$to_proc', TMP_3 = function $$to_proc() {
var self = this;
return self;
}, TMP_3.$$arity = 0);
Opal.defn(self, '$lambda?', TMP_4 = function() {
var self = this;
return !!self.$$is_lambda;
}, TMP_4.$$arity = 0);
Opal.defn(self, '$arity', TMP_5 = function $$arity() {
var self = this;
if (self.$$is_curried) {
return -1;
} else {
return self.$$arity;
}
}, TMP_5.$$arity = 0);
Opal.defn(self, '$source_location', TMP_6 = function $$source_location() {
var self = this;
if (self.$$is_curried) { return nil; }
return nil;
}, TMP_6.$$arity = 0);
Opal.defn(self, '$binding', TMP_7 = function $$binding() {
var self = this;
if (self.$$is_curried) { self.$raise($scope.get('ArgumentError'), "Can't create Binding") };
return nil;
}, TMP_7.$$arity = 0);
Opal.defn(self, '$parameters', TMP_8 = function $$parameters() {
var self = this;
if (self.$$is_curried) {
return [["rest"]];
} else if (self.$$parameters) {
if (self.$$is_lambda) {
return self.$$parameters;
} else {
var result = [], i, length;
for (i = 0, length = self.$$parameters.length; i < length; i++) {
var parameter = self.$$parameters[i];
if (parameter[0] === 'req') {
// required arguments always have name
parameter = ['opt', parameter[1]];
}
result.push(parameter);
}
return result;
}
} else {
return [];
}
;
}, TMP_8.$$arity = 0);
Opal.defn(self, '$curry', TMP_9 = function $$curry(arity) {
var self = this;
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) + ")")
}
}
function curried () {
var args = $slice.call(arguments),
length = args.length,
result;
if (length > arity && self.$$is_lambda && !self.$$is_curried) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (length) + " for " + (arity) + ")")
}
if (length >= arity) {
return self.$call.apply(self, args);
}
result = function () {
return curried.apply(null,
args.concat($slice.call(arguments)));
}
result.$$is_lambda = self.$$is_lambda;
result.$$is_curried = true;
return result;
};
curried.$$is_lambda = self.$$is_lambda;
curried.$$is_curried = true;
return curried;
}, TMP_9.$$arity = -1);
Opal.defn(self, '$dup', TMP_10 = function $$dup() {
var self = this;
var original_proc = self.$$original_proc || self,
proc = function () {
return original_proc.apply(this, arguments);
};
for (var prop in self) {
if (self.hasOwnProperty(prop)) {
proc[prop] = self[prop];
}
}
return proc;
}, TMP_10.$$arity = 0);
return Opal.alias(self, 'clone', 'dup');
})($scope.base, Function)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/method"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
Opal.add_stubs(['$attr_reader', '$class', '$arity', '$new', '$name']);
(function($base, $super) {
function $Method(){};
var self = $Method = $klass($base, $super, 'Method', $Method);
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7;
def.method = def.receiver = def.owner = def.name = nil;
self.$attr_reader("owner", "receiver", "name");
Opal.defn(self, '$initialize', TMP_1 = function $$initialize(receiver, method, name) {
var self = this;
self.receiver = receiver;
self.owner = receiver.$class();
self.name = name;
return self.method = method;
}, TMP_1.$$arity = 3);
Opal.defn(self, '$arity', TMP_2 = function $$arity() {
var self = this;
return self.method.$arity();
}, TMP_2.$$arity = 0);
Opal.defn(self, '$parameters', TMP_3 = function $$parameters() {
var self = this;
return self.method.$$parameters;
}, TMP_3.$$arity = 0);
Opal.defn(self, '$call', TMP_4 = function $$call($a_rest) {
var self = this, args, $iter = TMP_4.$$p, block = $iter || nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_4.$$p = null;
self.method.$$p = block;
return self.method.apply(self.receiver, args);
;
}, TMP_4.$$arity = -1);
Opal.alias(self, '[]', 'call');
Opal.defn(self, '$unbind', TMP_5 = function $$unbind() {
var self = this;
return $scope.get('UnboundMethod').$new(self.owner, self.method, self.name);
}, TMP_5.$$arity = 0);
Opal.defn(self, '$to_proc', TMP_6 = function $$to_proc() {
var self = this;
var proc = function () { return self.$call.apply(self, $slice.call(arguments)); };
proc.$$unbound = self.method;
proc.$$is_lambda = true;
return proc;
}, TMP_6.$$arity = 0);
return (Opal.defn(self, '$inspect', TMP_7 = function $$inspect() {
var self = this;
return "#<Method: " + (self.receiver.$class()) + "#" + (self.name) + ">";
}, TMP_7.$$arity = 0), nil) && 'inspect';
})($scope.base, null);
return (function($base, $super) {
function $UnboundMethod(){};
var self = $UnboundMethod = $klass($base, $super, 'UnboundMethod', $UnboundMethod);
var def = self.$$proto, $scope = self.$$scope, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12;
def.method = def.name = def.owner = nil;
self.$attr_reader("owner", "name");
Opal.defn(self, '$initialize', TMP_8 = function $$initialize(owner, method, name) {
var self = this;
self.owner = owner;
self.method = method;
return self.name = name;
}, TMP_8.$$arity = 3);
Opal.defn(self, '$arity', TMP_9 = function $$arity() {
var self = this;
return self.method.$arity();
}, TMP_9.$$arity = 0);
Opal.defn(self, '$parameters', TMP_10 = function $$parameters() {
var self = this;
return self.method.$$parameters;
}, TMP_10.$$arity = 0);
Opal.defn(self, '$bind', TMP_11 = function $$bind(object) {
var self = this;
return $scope.get('Method').$new(object, self.method, self.name);
}, TMP_11.$$arity = 1);
return (Opal.defn(self, '$inspect', TMP_12 = function $$inspect() {
var self = this;
return "#<UnboundMethod: " + (self.owner.$name()) + "#" + (self.name) + ">";
}, TMP_12.$$arity = 0), nil) && 'inspect';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/variables"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $gvars = Opal.gvars, $hash2 = Opal.hash2;
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;
};
/* Generated by Opal 0.10.3 */
Opal.modules["opal/regexp_anchors"] = function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $module = Opal.module;
Opal.add_stubs(['$==', '$new']);
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; })());
Opal.cdecl($scope, 'FORBIDDEN_STARTING_IDENTIFIER_CHARS', "\\u0001-\\u002F\\u003A-\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F");
Opal.cdecl($scope, 'FORBIDDEN_ENDING_IDENTIFIER_CHARS', "\\u0001-\\u0020\\u0022-\\u002F\\u003A-\\u003E\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F");
Opal.cdecl($scope, 'INLINE_IDENTIFIER_REGEXP', $scope.get('Regexp').$new("[^" + ($scope.get('FORBIDDEN_STARTING_IDENTIFIER_CHARS')) + "]*[^" + ($scope.get('FORBIDDEN_ENDING_IDENTIFIER_CHARS')) + "]"));
Opal.cdecl($scope, 'FORBIDDEN_CONST_NAME_CHARS', "\\u0001-\\u0020\\u0021-\\u002F\\u003B-\\u003F\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F");
Opal.cdecl($scope, 'CONST_NAME_REGEXP', $scope.get('Regexp').$new("" + ($scope.get('REGEXP_START')) + "(::)?[A-Z][^" + ($scope.get('FORBIDDEN_CONST_NAME_CHARS')) + "]*" + ($scope.get('REGEXP_END'))));
})($scope.base)
};
/* Generated by Opal 0.10.3 */
Opal.modules["opal/mini"] = function(Opal) {
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("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");
self.$require("corelib/variables");
return self.$require("opal/regexp_anchors");
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/string/inheritance"] = function(Opal) {
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_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, $gvars = Opal.gvars;
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 $String(){};
var self = $String = $klass($base, $super, 'String', $String);
var def = self.$$proto, $scope = self.$$scope, TMP_1;
return (Opal.defs(self, '$inherited', TMP_1 = function $$inherited(klass) {
var self = this, replace = nil;
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'));
klass.$allocate = replace.$allocate;
klass.$new = replace.$new;
}, TMP_1.$$arity = 1), nil) && 'inherited'
})($scope.base, null);
return (function($base, $super) {
function $Wrapper(){};
var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper);
var def = self.$$proto, $scope = self.$$scope, 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_15, TMP_16, TMP_17, TMP_19, TMP_20, TMP_21;
def.literal = nil;
def.$$is_string = true;
Opal.defs(self, '$allocate', TMP_2 = function $$allocate(string) {
var $a, $b, self = this, $iter = TMP_2.$$p, $yield = $iter || nil, obj = nil;
if (string == null) {
string = "";
}
TMP_2.$$p = null;
obj = ($a = ($b = self, Opal.find_super_dispatcher(self, 'allocate', TMP_2, false, $Wrapper)), $a.$$p = null, $a).call($b);
obj.literal = string;
return obj;
}, TMP_2.$$arity = -1);
Opal.defs(self, '$new', TMP_3 = function($a_rest) {
var $b, $c, self = this, args, $iter = TMP_3.$$p, block = $iter || nil, obj = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_3.$$p = null;
obj = self.$allocate();
($b = ($c = obj).$initialize, $b.$$p = block.$to_proc(), $b).apply($c, Opal.to_a(args));
return obj;
}, TMP_3.$$arity = -1);
Opal.defs(self, '$[]', TMP_4 = function($a_rest) {
var self = this, objects;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
objects = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
objects[$arg_idx - 0] = arguments[$arg_idx];
}
return self.$allocate(objects);
}, TMP_4.$$arity = -1);
Opal.defn(self, '$initialize', TMP_5 = function $$initialize(string) {
var self = this;
if (string == null) {
string = "";
}
return self.literal = string;
}, TMP_5.$$arity = -1);
Opal.defn(self, '$method_missing', TMP_6 = function $$method_missing($a_rest) {
var $b, $c, self = this, args, $iter = TMP_6.$$p, block = $iter || nil, result = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
TMP_6.$$p = null;
result = ($b = ($c = self.literal).$__send__, $b.$$p = block.$to_proc(), $b).apply($c, Opal.to_a(args));
if ((($b = result.$$is_string != null) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
if ((($b = result == self.literal) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
return self
} else {
return self.$class().$allocate(result)
}
} else {
return result
};
}, TMP_6.$$arity = -1);
Opal.defn(self, '$initialize_copy', TMP_7 = function $$initialize_copy(other) {
var self = this;
return self.literal = (other.literal).$clone();
}, TMP_7.$$arity = 1);
Opal.defn(self, '$respond_to?', TMP_8 = function(name, $a_rest) {
var $b, $c, $d, self = this, $iter = TMP_8.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_8.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
return ((($b = ($c = ($d = self, Opal.find_super_dispatcher(self, 'respond_to?', TMP_8, false)), $c.$$p = $iter, $c).apply($d, $zuper)) !== false && $b !== nil && $b != null) ? $b : self.literal['$respond_to?'](name));
}, TMP_8.$$arity = -2);
Opal.defn(self, '$==', TMP_9 = function(other) {
var self = this;
return self.literal['$=='](other);
}, TMP_9.$$arity = 1);
Opal.alias(self, 'eql?', '==');
Opal.alias(self, '===', '==');
Opal.defn(self, '$to_s', TMP_10 = function $$to_s() {
var self = this;
return self.literal;
}, TMP_10.$$arity = 0);
Opal.alias(self, 'to_str', 'to_s');
Opal.defn(self, '$inspect', TMP_11 = function $$inspect() {
var self = this;
return self.literal.$inspect();
}, TMP_11.$$arity = 0);
Opal.defn(self, '$+', TMP_12 = function(other) {
var self = this;
return $rb_plus(self.literal, other);
}, TMP_12.$$arity = 1);
Opal.defn(self, '$*', TMP_13 = function(other) {
var self = this;
var result = $rb_times(self.literal, other);
if (result.$$is_string) {
return self.$class().$allocate(result)
}
else {
return result;
}
;
}, TMP_13.$$arity = 1);
Opal.defn(self, '$split', TMP_15 = function $$split(pattern, limit) {
var $a, $b, TMP_14, self = this;
return ($a = ($b = self.literal.$split(pattern, limit)).$map, $a.$$p = (TMP_14 = function(str){var self = TMP_14.$$s || this;
if (str == null) str = nil;
return self.$class().$allocate(str)}, TMP_14.$$s = self, TMP_14.$$arity = 1, TMP_14), $a).call($b);
}, TMP_15.$$arity = -1);
Opal.defn(self, '$replace', TMP_16 = function $$replace(string) {
var self = this;
return self.literal = string;
}, TMP_16.$$arity = 1);
Opal.defn(self, '$each_line', TMP_17 = function $$each_line(separator) {
var $a, $b, TMP_18, self = this, $iter = TMP_17.$$p, $yield = $iter || nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"];
}
TMP_17.$$p = null;
if (($yield !== nil)) {
} else {
return self.$enum_for("each_line", separator)
};
return ($a = ($b = self.literal).$each_line, $a.$$p = (TMP_18 = function(str){var self = TMP_18.$$s || this;
if (str == null) str = nil;
return Opal.yield1($yield, self.$class().$allocate(str));}, TMP_18.$$s = self, TMP_18.$$arity = 1, TMP_18), $a).call($b, separator);
}, TMP_17.$$arity = -1);
Opal.defn(self, '$lines', TMP_19 = function $$lines(separator) {
var $a, $b, self = this, $iter = TMP_19.$$p, block = $iter || nil, e = nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"];
}
TMP_19.$$p = null;
e = ($a = ($b = self).$each_line, $a.$$p = block.$to_proc(), $a).call($b, separator);
if (block !== false && block !== nil && block != null) {
return self
} else {
return e.$to_a()
};
}, TMP_19.$$arity = -1);
Opal.defn(self, '$%', TMP_20 = function(data) {
var self = this;
return self.literal['$%'](data);
}, TMP_20.$$arity = 1);
return (Opal.defn(self, '$instance_variables', TMP_21 = function $$instance_variables() {
var $a, $b, self = this, $iter = TMP_21.$$p, $yield = $iter || nil, $zuper = nil, $zuper_index = nil, $zuper_length = nil;
TMP_21.$$p = null;
$zuper = [];
for($zuper_index = 0; $zuper_index < arguments.length; $zuper_index++) {
$zuper[$zuper_index] = arguments[$zuper_index];
}
return $rb_minus(($a = ($b = self, Opal.find_super_dispatcher(self, 'instance_variables', TMP_21, false)), $a.$$p = $iter, $a).apply($b, $zuper), ["@literal"]);
}, TMP_21.$$arity = 0), nil) && 'instance_variables';
})($scope.get('String'), null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/string/encoding"] = function(Opal) {
function $rb_plus(lhs, rhs) {
return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs);
}
var $a, $b, TMP_13, $c, TMP_16, $d, TMP_19, 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', '$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, TMP_1, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12;
def.ascii = def.dummy = def.name = nil;
Opal.defs(self, '$register', TMP_1 = function $$register(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 != null) ? $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 != null) ? $a : false), ((($a = options['$[]']("dummy")) !== false && $a !== nil && $a != null) ? $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.$$arity = 1, TMP_2), $a).call($c);
}, TMP_1.$$arity = -2);
Opal.defs(self, '$find', TMP_4 = function $$find(name) {try {
var $a, $b, TMP_3, self = this, upcase = nil;
upcase = name.$upcase();
($a = ($b = self.$constants()).$each, $a.$$p = (TMP_3 = function(const$){var self = TMP_3.$$s || this, $c, $d, encoding = nil;
if (const$ == null) const$ = nil;
encoding = self.$const_get(const$);
if ((($c = $scope.get('Encoding')['$==='](encoding)) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
} else {
return nil;
};
if ((($c = ((($d = encoding.$name()['$=='](upcase)) !== false && $d !== nil && $d != null) ? $d : encoding.$names()['$include?'](upcase))) !== nil && $c != null && (!$c.$$is_boolean || $c == true))) {
Opal.ret(encoding)
} else {
return nil
};}, TMP_3.$$s = self, TMP_3.$$arity = 1, 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; }
}, TMP_4.$$arity = 1);
(function(self) {
var $scope = self.$$scope, def = self.$$proto;
return self.$attr_accessor("default_external")
})(Opal.get_singleton_class(self));
self.$attr_reader("name", "names");
Opal.defn(self, '$initialize', TMP_5 = function $$initialize(name, names, ascii, dummy) {
var self = this;
self.name = name;
self.names = names;
self.ascii = ascii;
return self.dummy = dummy;
}, TMP_5.$$arity = 4);
Opal.defn(self, '$ascii_compatible?', TMP_6 = function() {
var self = this;
return self.ascii;
}, TMP_6.$$arity = 0);
Opal.defn(self, '$dummy?', TMP_7 = function() {
var self = this;
return self.dummy;
}, TMP_7.$$arity = 0);
Opal.defn(self, '$to_s', TMP_8 = function $$to_s() {
var self = this;
return self.name;
}, TMP_8.$$arity = 0);
Opal.defn(self, '$inspect', TMP_9 = function $$inspect() {
var $a, self = this;
return "#<Encoding:" + (self.name) + ((function() {if ((($a = self.dummy) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return " (dummy)"
} else {
return nil
}; return nil; })()) + ">";
}, TMP_9.$$arity = 0);
Opal.defn(self, '$each_byte', TMP_10 = function $$each_byte($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'));
}, TMP_10.$$arity = -1);
Opal.defn(self, '$getbyte', TMP_11 = function $$getbyte($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'));
}, TMP_11.$$arity = -1);
Opal.defn(self, '$bytesize', TMP_12 = function $$bytesize($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'));
}, TMP_12.$$arity = -1);
(function($base, $super) {
function $EncodingError(){};
var self = $EncodingError = $klass($base, $super, 'EncodingError', $EncodingError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('StandardError'));
return (function($base, $super) {
function $CompatibilityError(){};
var self = $CompatibilityError = $klass($base, $super, 'CompatibilityError', $CompatibilityError);
var def = self.$$proto, $scope = self.$$scope;
return nil;
})($scope.base, $scope.get('EncodingError'));
})($scope.base, null);
($a = ($b = $scope.get('Encoding')).$register, $a.$$p = (TMP_13 = function(){var self = TMP_13.$$s || this, TMP_14, TMP_15;
Opal.def(self, '$each_byte', TMP_14 = function $$each_byte(string) {
var self = this, $iter = TMP_14.$$p, block = $iter || nil;
TMP_14.$$p = null;
for (var i = 0, length = string.length; i < length; i++) {
var code = string.charCodeAt(i);
if (code <= 0x7f) {
Opal.yield1(block, code);
}
else {
var encoded = encodeURIComponent(string.charAt(i)).substr(1).split('%');
for (var j = 0, encoded_length = encoded.length; j < encoded_length; j++) {
Opal.yield1(block, parseInt(encoded[j], 16));
}
}
}
}, TMP_14.$$arity = 1);
return (Opal.def(self, '$bytesize', TMP_15 = function $$bytesize() {
var self = this;
return self.$bytes().$length();
}, TMP_15.$$arity = 0), nil) && 'bytesize';}, TMP_13.$$s = self, TMP_13.$$arity = 0, TMP_13), $a).call($b, "UTF-8", $hash2(["aliases", "ascii"], {"aliases": ["CP65001"], "ascii": true}));
($a = ($c = $scope.get('Encoding')).$register, $a.$$p = (TMP_16 = function(){var self = TMP_16.$$s || this, TMP_17, TMP_18;
Opal.def(self, '$each_byte', TMP_17 = function $$each_byte(string) {
var self = this, $iter = TMP_17.$$p, block = $iter || nil;
TMP_17.$$p = null;
for (var i = 0, length = string.length; i < length; i++) {
var code = string.charCodeAt(i);
Opal.yield1(block, code & 0xff);
Opal.yield1(block, code >> 8);
}
}, TMP_17.$$arity = 1);
return (Opal.def(self, '$bytesize', TMP_18 = function $$bytesize() {
var self = this;
return self.$bytes().$length();
}, TMP_18.$$arity = 0), nil) && 'bytesize';}, TMP_16.$$s = self, TMP_16.$$arity = 0, TMP_16), $a).call($c, "UTF-16LE");
($a = ($d = $scope.get('Encoding')).$register, $a.$$p = (TMP_19 = function(){var self = TMP_19.$$s || this, TMP_20, TMP_21;
Opal.def(self, '$each_byte', TMP_20 = function $$each_byte(string) {
var self = this, $iter = TMP_20.$$p, block = $iter || nil;
TMP_20.$$p = null;
for (var i = 0, length = string.length; i < length; i++) {
Opal.yield1(block, string.charCodeAt(i) & 0xff);
}
}, TMP_20.$$arity = 1);
return (Opal.def(self, '$bytesize', TMP_21 = function $$bytesize() {
var self = this;
return self.$bytes().$length();
}, TMP_21.$$arity = 0), nil) && 'bytesize';}, TMP_19.$$s = self, TMP_19.$$arity = 0, TMP_19), $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);
var def = self.$$proto, $scope = self.$$scope, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28;
def.encoding = nil;
String.prototype.encoding = (($scope.get('Encoding')).$$scope.get('UTF_16LE'));
Opal.defn(self, '$bytes', TMP_22 = function $$bytes() {
var self = this;
return self.$each_byte().$to_a();
}, TMP_22.$$arity = 0);
Opal.defn(self, '$bytesize', TMP_23 = function $$bytesize() {
var self = this;
return self.encoding.$bytesize(self);
}, TMP_23.$$arity = 0);
Opal.defn(self, '$each_byte', TMP_24 = function $$each_byte() {
var $a, $b, self = this, $iter = TMP_24.$$p, block = $iter || nil;
TMP_24.$$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;
}, TMP_24.$$arity = 0);
Opal.defn(self, '$encode', TMP_25 = function $$encode(encoding) {
var self = this;
return self.$dup().$force_encoding(encoding);
}, TMP_25.$$arity = 1);
Opal.defn(self, '$encoding', TMP_26 = function $$encoding() {
var self = this;
return self.encoding;
}, TMP_26.$$arity = 0);
Opal.defn(self, '$force_encoding', TMP_27 = function $$force_encoding(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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('ArgumentError'), "unknown encoding name - " + (encoding))};
var result = new String(self);
result.encoding = encoding;
return result;
}, TMP_27.$$arity = 1);
return (Opal.defn(self, '$getbyte', TMP_28 = function $$getbyte(idx) {
var self = this;
return self.encoding.$getbyte(self, idx);
}, TMP_28.$$arity = 1), nil) && 'getbyte';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/math"] = function(Opal) {
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;
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 def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_2, TMP_3, TMP_4, $a, 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_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29;
Opal.cdecl($scope, 'E', Math.E);
Opal.cdecl($scope, 'PI', Math.PI);
Opal.cdecl($scope, 'DomainError', $scope.get('Class').$new($scope.get('StandardError')));
Opal.defs(self, '$checked', TMP_1 = function $$checked(method, $a_rest) {
var self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
if (isNaN(args[0]) || (args.length == 2 && isNaN(args[1]))) {
return NaN;
}
var result = Math[method].apply(null, args);
if (isNaN(result)) {
self.$raise($scope.get('DomainError'), "Numerical argument is out of domain - \"" + (method) + "\"");
}
return result;
}, TMP_1.$$arity = -2);
Opal.defs(self, '$float!', TMP_2 = function(value) {
var self = this;
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.pop_exception() }
} else { throw $err; }
};
}, TMP_2.$$arity = 1);
Opal.defs(self, '$integer!', TMP_3 = function(value) {
var self = this;
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.pop_exception() }
} else { throw $err; }
};
}, TMP_3.$$arity = 1);
self.$module_function();
Opal.defn(self, '$acos', TMP_4 = function $$acos(x) {
var self = this;
return $scope.get('Math').$checked("acos", $scope.get('Math')['$float!'](x));
}, TMP_4.$$arity = 1);
if ((($a = (typeof(Math.acosh) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.acosh = function(x) {
return Math.log(x + Math.sqrt(x * x - 1));
}
};
Opal.defn(self, '$acosh', TMP_5 = function $$acosh(x) {
var self = this;
return $scope.get('Math').$checked("acosh", $scope.get('Math')['$float!'](x));
}, TMP_5.$$arity = 1);
Opal.defn(self, '$asin', TMP_6 = function $$asin(x) {
var self = this;
return $scope.get('Math').$checked("asin", $scope.get('Math')['$float!'](x));
}, TMP_6.$$arity = 1);
if ((($a = (typeof(Math.asinh) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.asinh = function(x) {
return Math.log(x + Math.sqrt(x * x + 1))
}
;
};
Opal.defn(self, '$asinh', TMP_7 = function $$asinh(x) {
var self = this;
return $scope.get('Math').$checked("asinh", $scope.get('Math')['$float!'](x));
}, TMP_7.$$arity = 1);
Opal.defn(self, '$atan', TMP_8 = function $$atan(x) {
var self = this;
return $scope.get('Math').$checked("atan", $scope.get('Math')['$float!'](x));
}, TMP_8.$$arity = 1);
Opal.defn(self, '$atan2', TMP_9 = function $$atan2(y, x) {
var self = this;
return $scope.get('Math').$checked("atan2", $scope.get('Math')['$float!'](y), $scope.get('Math')['$float!'](x));
}, TMP_9.$$arity = 2);
if ((($a = (typeof(Math.atanh) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.atanh = function(x) {
return 0.5 * Math.log((1 + x) / (1 - x));
}
};
Opal.defn(self, '$atanh', TMP_10 = function $$atanh(x) {
var self = this;
return $scope.get('Math').$checked("atanh", $scope.get('Math')['$float!'](x));
}, TMP_10.$$arity = 1);
if ((($a = (typeof(Math.cbrt) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.cbrt = function(x) {
if (x == 0) {
return 0;
}
if (x < 0) {
return -Math.cbrt(-x);
}
var r = x,
ex = 0;
while (r < 0.125) {
r *= 8;
ex--;
}
while (r > 1.0) {
r *= 0.125;
ex++;
}
r = (-0.46946116 * r + 1.072302) * r + 0.3812513;
while (ex < 0) {
r *= 0.5;
ex++;
}
while (ex > 0) {
r *= 2;
ex--;
}
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);
return r;
}
};
Opal.defn(self, '$cbrt', TMP_11 = function $$cbrt(x) {
var self = this;
return $scope.get('Math').$checked("cbrt", $scope.get('Math')['$float!'](x));
}, TMP_11.$$arity = 1);
Opal.defn(self, '$cos', TMP_12 = function $$cos(x) {
var self = this;
return $scope.get('Math').$checked("cos", $scope.get('Math')['$float!'](x));
}, TMP_12.$$arity = 1);
if ((($a = (typeof(Math.cosh) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.cosh = function(x) {
return (Math.exp(x) + Math.exp(-x)) / 2;
}
};
Opal.defn(self, '$cosh', TMP_13 = function $$cosh(x) {
var self = this;
return $scope.get('Math').$checked("cosh", $scope.get('Math')['$float!'](x));
}, TMP_13.$$arity = 1);
if ((($a = (typeof(Math.erf) !== "undefined")) !== nil && $a != null && (!$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;
var sign = 1;
if (x < 0) {
sign = -1;
}
x = Math.abs(x);
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);
return sign * y;
}
};
Opal.defn(self, '$erf', TMP_14 = function $$erf(x) {
var self = this;
return $scope.get('Math').$checked("erf", $scope.get('Math')['$float!'](x));
}, TMP_14.$$arity = 1);
if ((($a = (typeof(Math.erfc) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.erfc = function(x) {
var z = Math.abs(x),
t = 1.0 / (0.5 * z + 1.0);
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;
var a = t * Math.exp(A10);
if (x < 0.0) {
return 2.0 - a;
}
else {
return a;
}
}
};
Opal.defn(self, '$erfc', TMP_15 = function $$erfc(x) {
var self = this;
return $scope.get('Math').$checked("erfc", $scope.get('Math')['$float!'](x));
}, TMP_15.$$arity = 1);
Opal.defn(self, '$exp', TMP_16 = function $$exp(x) {
var self = this;
return $scope.get('Math').$checked("exp", $scope.get('Math')['$float!'](x));
}, TMP_16.$$arity = 1);
Opal.defn(self, '$frexp', TMP_17 = function $$frexp(x) {
var self = this;
x = $scope.get('Math')['$float!'](x);
if (isNaN(x)) {
return [NaN, 0];
}
var ex = Math.floor(Math.log(Math.abs(x)) / Math.log(2)) + 1,
frac = x / Math.pow(2, ex);
return [frac, ex];
}, TMP_17.$$arity = 1);
Opal.defn(self, '$gamma', TMP_18 = function $$gamma(n) {
var self = this;
n = $scope.get('Math')['$float!'](n);
var i, t, x, value, result, twoN, threeN, fourN, fiveN;
var G = 4.7421875;
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
];
if (isNaN(n)) {
return NaN;
}
if (n === 0 && 1 / n < 0) {
return -Infinity;
}
if (n === -1 || n === -Infinity) {
self.$raise($scope.get('DomainError'), "Numerical argument is out of domain - \"gamma\"");
}
if ($scope.get('Integer')['$==='](n)) {
if (n <= 0) {
return isFinite(n) ? Infinity : NaN;
}
if (n > 171) {
return Infinity;
}
value = n - 2;
result = n - 1;
while (value > 1) {
result *= value;
value--;
}
if (result == 0) {
result = 1;
}
return result;
}
if (n < 0.5) {
return Math.PI / (Math.sin(Math.PI * n) * $scope.get('Math').$gamma($rb_minus(1, n)));
}
if (n >= 171.35) {
return Infinity;
}
if (n > 85.0) {
twoN = n * n;
threeN = twoN * n;
fourN = threeN * n;
fiveN = fourN * n;
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));
}
n -= 1;
x = P[0];
for (i = 1; i < P.length; ++i) {
x += P[i] / (n + i);
}
t = n + G + 0.5;
return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;
}, TMP_18.$$arity = 1);
if ((($a = (typeof(Math.hypot) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.hypot = function(x, y) {
return Math.sqrt(x * x + y * y)
}
;
};
Opal.defn(self, '$hypot', TMP_19 = function $$hypot(x, y) {
var self = this;
return $scope.get('Math').$checked("hypot", $scope.get('Math')['$float!'](x), $scope.get('Math')['$float!'](y));
}, TMP_19.$$arity = 2);
Opal.defn(self, '$ldexp', TMP_20 = function $$ldexp(mantissa, exponent) {
var self = this;
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");
}
return mantissa * Math.pow(2, exponent);
;
}, TMP_20.$$arity = 2);
Opal.defn(self, '$lgamma', TMP_21 = function $$lgamma(n) {
var 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];
}
;
}, TMP_21.$$arity = 1);
Opal.defn(self, '$log', TMP_22 = function $$log(x, base) {
var $a, self = this;
if ((($a = $scope.get('String')['$==='](x)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('Opal').$type_error(x, $scope.get('Float')))};
if ((($a = base == null) !== nil && $a != null && (!$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 != null && (!$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)));
};
}, TMP_22.$$arity = -2);
if ((($a = (typeof(Math.log10) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.log10 = function(x) {
return Math.log(x) / Math.LN10;
}
};
Opal.defn(self, '$log10', TMP_23 = function $$log10(x) {
var $a, self = this;
if ((($a = $scope.get('String')['$==='](x)) !== nil && $a != null && (!$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));
}, TMP_23.$$arity = 1);
if ((($a = (typeof(Math.log2) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.log2 = function(x) {
return Math.log(x) / Math.LN2;
}
};
Opal.defn(self, '$log2', TMP_24 = function $$log2(x) {
var $a, self = this;
if ((($a = $scope.get('String')['$==='](x)) !== nil && $a != null && (!$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));
}, TMP_24.$$arity = 1);
Opal.defn(self, '$sin', TMP_25 = function $$sin(x) {
var self = this;
return $scope.get('Math').$checked("sin", $scope.get('Math')['$float!'](x));
}, TMP_25.$$arity = 1);
if ((($a = (typeof(Math.sinh) !== "undefined")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
Math.sinh = function(x) {
return (Math.exp(x) - Math.exp(-x)) / 2;
}
};
Opal.defn(self, '$sinh', TMP_26 = function $$sinh(x) {
var self = this;
return $scope.get('Math').$checked("sinh", $scope.get('Math')['$float!'](x));
}, TMP_26.$$arity = 1);
Opal.defn(self, '$sqrt', TMP_27 = function $$sqrt(x) {
var self = this;
return $scope.get('Math').$checked("sqrt", $scope.get('Math')['$float!'](x));
}, TMP_27.$$arity = 1);
Opal.defn(self, '$tan', TMP_28 = function $$tan(x) {
var $a, self = this;
x = $scope.get('Math')['$float!'](x);
if ((($a = x['$infinite?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return (($scope.get('Float')).$$scope.get('NAN'))};
return $scope.get('Math').$checked("tan", $scope.get('Math')['$float!'](x));
}, TMP_28.$$arity = 1);
if ((($a = (typeof(Math.tanh) !== "undefined")) !== nil && $a != null && (!$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));
}
}
};
Opal.defn(self, '$tanh', TMP_29 = function $$tanh(x) {
var self = this;
return $scope.get('Math').$checked("tanh", $scope.get('Math')['$float!'](x));
}, TMP_29.$$arity = 1);
})($scope.base)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/complex"] = function(Opal) {
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_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_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', '$===', '$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, 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_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29;
def.real = def.imag = nil;
Opal.defs(self, '$rect', TMP_1 = function $$rect(real, imag) {
var $a, $b, $c, $d, self = this;
if (imag == null) {
imag = 0;
}
if ((($a = ($b = ($c = ($d = $scope.get('Numeric')['$==='](real), $d !== false && $d !== nil && $d != null ?real['$real?']() : $d), $c !== false && $c !== nil && $c != null ?$scope.get('Numeric')['$==='](imag) : $c), $b !== false && $b !== nil && $b != null ?imag['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('TypeError'), "not a real")
};
return self.$new(real, imag);
}, TMP_1.$$arity = -2);
(function(self) {
var $scope = self.$$scope, def = self.$$proto;
return Opal.alias(self, 'rectangular', 'rect')
})(Opal.get_singleton_class(self));
Opal.defs(self, '$polar', TMP_2 = function $$polar(r, theta) {
var $a, $b, $c, $d, self = this;
if (theta == null) {
theta = 0;
}
if ((($a = ($b = ($c = ($d = $scope.get('Numeric')['$==='](r), $d !== false && $d !== nil && $d != null ?r['$real?']() : $d), $c !== false && $c !== nil && $c != null ?$scope.get('Numeric')['$==='](theta) : $c), $b !== false && $b !== nil && $b != null ?theta['$real?']() : $b)) !== nil && $a != null && (!$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)));
}, TMP_2.$$arity = -2);
self.$attr_reader("real", "imag");
Opal.defn(self, '$initialize', TMP_3 = function $$initialize(real, imag) {
var self = this;
if (imag == null) {
imag = 0;
}
self.real = real;
return self.imag = imag;
}, TMP_3.$$arity = -2);
Opal.defn(self, '$coerce', TMP_4 = function $$coerce(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return [other, self]
} else if ((($a = ($b = $scope.get('Numeric')['$==='](other), $b !== false && $b !== nil && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$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")
};
}, TMP_4.$$arity = 1);
Opal.defn(self, '$==', TMP_5 = function(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$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 && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return (($a = self.real['$=='](other)) ? self.imag['$=='](0) : self.real['$=='](other))
} else {
return other['$=='](self)
};
}, TMP_5.$$arity = 1);
Opal.defn(self, '$-@', TMP_6 = function() {
var self = this;
return self.$Complex(self.real['$-@'](), self.imag['$-@']());
}, TMP_6.$$arity = 0);
Opal.defn(self, '$+', TMP_7 = function(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$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 && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$Complex($rb_plus(self.real, other), self.imag)
} else {
return self.$__coerced__("+", other)
};
}, TMP_7.$$arity = 1);
Opal.defn(self, '$-', TMP_8 = function(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$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 && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$Complex($rb_minus(self.real, other), self.imag)
} else {
return self.$__coerced__("-", other)
};
}, TMP_8.$$arity = 1);
Opal.defn(self, '$*', TMP_9 = function(other) {
var $a, $b, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$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 && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$Complex($rb_times(self.real, other), $rb_times(self.imag, other))
} else {
return self.$__coerced__("*", other)
};
}, TMP_9.$$arity = 1);
Opal.defn(self, '$/', TMP_10 = function(other) {
var $a, $b, $c, $d, $e, self = this;
if ((($a = $scope.get('Complex')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = ((($b = ((($c = ((($d = (($e = $scope.get('Number')['$==='](self.real), $e !== false && $e !== nil && $e != null ?self.real['$nan?']() : $e))) !== false && $d !== nil && $d != null) ? $d : (($e = $scope.get('Number')['$==='](self.imag), $e !== false && $e !== nil && $e != null ?self.imag['$nan?']() : $e)))) !== false && $c !== nil && $c != null) ? $c : (($d = $scope.get('Number')['$==='](other.$real()), $d !== false && $d !== nil && $d != null ?other.$real()['$nan?']() : $d)))) !== false && $b !== nil && $b != null) ? $b : (($c = $scope.get('Number')['$==='](other.$imag()), $c !== false && $c !== nil && $c != null ?other.$imag()['$nan?']() : $c)))) !== nil && $a != null && (!$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 && $b != null ?other['$real?']() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$Complex(self.real.$quo(other), self.imag.$quo(other))
} else {
return self.$__coerced__("/", other)
};
}, TMP_10.$$arity = 1);
Opal.defn(self, '$**', TMP_11 = 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 != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $rb_gt(other, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
x = self;
z = x;
n = $rb_minus(other, 1);
while ((($b = n['$!='](0)) !== nil && $b != null && (!$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 != null && (!$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 != null) ? $b : $scope.get('Rational')['$==='](other))) !== nil && $a != null && (!$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.$__coerced__("**", other)
};
}, TMP_11.$$arity = 1);
Opal.defn(self, '$abs', TMP_12 = function $$abs() {
var self = this;
return $scope.get('Math').$hypot(self.real, self.imag);
}, TMP_12.$$arity = 0);
Opal.defn(self, '$abs2', TMP_13 = function $$abs2() {
var self = this;
return $rb_plus($rb_times(self.real, self.real), $rb_times(self.imag, self.imag));
}, TMP_13.$$arity = 0);
Opal.defn(self, '$angle', TMP_14 = function $$angle() {
var self = this;
return $scope.get('Math').$atan2(self.imag, self.real);
}, TMP_14.$$arity = 0);
Opal.alias(self, 'arg', 'angle');
Opal.defn(self, '$conj', TMP_15 = function $$conj() {
var self = this;
return self.$Complex(self.real, self.imag['$-@']());
}, TMP_15.$$arity = 0);
Opal.alias(self, 'conjugate', 'conj');
Opal.defn(self, '$denominator', TMP_16 = function $$denominator() {
var self = this;
return self.real.$denominator().$lcm(self.imag.$denominator());
}, TMP_16.$$arity = 0);
Opal.alias(self, 'divide', '/');
Opal.defn(self, '$eql?', TMP_17 = function(other) {
var $a, $b, self = this;
return ($a = ($b = $scope.get('Complex')['$==='](other), $b !== false && $b !== nil && $b != null ?self.real.$class()['$=='](self.imag.$class()) : $b), $a !== false && $a !== nil && $a != null ?self['$=='](other) : $a);
}, TMP_17.$$arity = 1);
Opal.defn(self, '$fdiv', TMP_18 = function $$fdiv(other) {
var $a, self = this;
if ((($a = $scope.get('Numeric')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('TypeError'), "" + (other.$class()) + " can't be coerced into Complex")
};
return $rb_divide(self, other);
}, TMP_18.$$arity = 1);
Opal.defn(self, '$hash', TMP_19 = function $$hash() {
var self = this;
return "Complex:" + (self.real) + ":" + (self.imag);
}, TMP_19.$$arity = 0);
Opal.alias(self, 'imaginary', 'imag');
Opal.defn(self, '$inspect', TMP_20 = function $$inspect() {
var self = this;
return "(" + (self.$to_s()) + ")";
}, TMP_20.$$arity = 0);
Opal.alias(self, 'magnitude', 'abs');
Opal.defn(self, '$numerator', TMP_21 = function $$numerator() {
var self = this, d = nil;
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()))));
}, TMP_21.$$arity = 0);
Opal.alias(self, 'phase', 'arg');
Opal.defn(self, '$polar', TMP_22 = function $$polar() {
var self = this;
return [self.$abs(), self.$arg()];
}, TMP_22.$$arity = 0);
Opal.alias(self, 'quo', '/');
Opal.defn(self, '$rationalize', TMP_23 = function $$rationalize(eps) {
var $a, self = this;
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 != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('RangeError'), "can't' convert " + (self) + " into Rational")};
return self.$real().$rationalize(eps);
}, TMP_23.$$arity = -1);
Opal.defn(self, '$real?', TMP_24 = function() {
var self = this;
return false;
}, TMP_24.$$arity = 0);
Opal.defn(self, '$rect', TMP_25 = function $$rect() {
var self = this;
return [self.real, self.imag];
}, TMP_25.$$arity = 0);
Opal.alias(self, 'rectangular', 'rect');
Opal.defn(self, '$to_f', TMP_26 = function $$to_f() {
var self = this;
if (self.imag['$=='](0)) {
} else {
self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Float")
};
return self.real.$to_f();
}, TMP_26.$$arity = 0);
Opal.defn(self, '$to_i', TMP_27 = function $$to_i() {
var self = this;
if (self.imag['$=='](0)) {
} else {
self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Integer")
};
return self.real.$to_i();
}, TMP_27.$$arity = 0);
Opal.defn(self, '$to_r', TMP_28 = function $$to_r() {
var self = this;
if (self.imag['$=='](0)) {
} else {
self.$raise($scope.get('RangeError'), "can't convert " + (self) + " into Rational")
};
return self.real.$to_r();
}, TMP_28.$$arity = 0);
Opal.defn(self, '$to_s', TMP_29 = function $$to_s() {
var $a, $b, $c, self = this, result = nil;
result = self.real.$inspect();
if ((($a = ((($b = (($c = $scope.get('Number')['$==='](self.imag), $c !== false && $c !== nil && $c != null ?self.imag['$nan?']() : $c))) !== false && $b !== nil && $b != null) ? $b : self.imag['$positive?']())) !== nil && $a != null && (!$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 && $b != null ?(((($c = self.imag['$nan?']()) !== false && $c !== nil && $c != null) ? $c : self.imag['$infinite?']())) : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
result = $rb_plus(result, "*")};
return $rb_plus(result, "i");
}, TMP_29.$$arity = 0);
return Opal.cdecl($scope, 'I', self.$new(0, 1));
})($scope.base, $scope.get('Numeric'));
return (function($base) {
var $Kernel, self = $Kernel = $module($base, 'Kernel');
var def = self.$$proto, $scope = self.$$scope, TMP_30;
Opal.defn(self, '$Complex', TMP_30 = function $$Complex(real, imag) {
var self = this;
if (imag == null) {
imag = nil;
}
if (imag !== false && imag !== nil && imag != null) {
return $scope.get('Complex').$new(real, imag)
} else {
return $scope.get('Complex').$new(real, 0)
};
}, TMP_30.$$arity = -2)
})($scope.base);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/rational"] = function(Opal) {
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(['$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, 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_20, TMP_21, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26;
def.num = def.den = nil;
Opal.defs(self, '$reduce', TMP_1 = function $$reduce(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 != null && (!$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));
}, TMP_1.$$arity = 2);
Opal.defs(self, '$convert', TMP_2 = function $$convert(num, den) {
var $a, $b, $c, self = this;
if ((($a = ((($b = num['$nil?']()) !== false && $b !== nil && $b != null) ? $b : den['$nil?']())) !== nil && $a != null && (!$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 && $b != null ?$scope.get('Integer')['$==='](den) : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$reduce(num, den)};
if ((($a = ((($b = ((($c = $scope.get('Float')['$==='](num)) !== false && $c !== nil && $c != null) ? $c : $scope.get('String')['$==='](num))) !== false && $b !== nil && $b != null) ? $b : $scope.get('Complex')['$==='](num))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
num = num.$to_r()};
if ((($a = ((($b = ((($c = $scope.get('Float')['$==='](den)) !== false && $c !== nil && $c != null) ? $c : $scope.get('String')['$==='](den))) !== false && $b !== nil && $b != null) ? $b : $scope.get('Complex')['$==='](den))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
den = den.$to_r()};
if ((($a = ($b = den['$equal?'](1), $b !== false && $b !== nil && $b != null ?($scope.get('Integer')['$==='](num))['$!']() : $b)) !== nil && $a != null && (!$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 && $b != null ?$scope.get('Numeric')['$==='](den) : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return $rb_divide(num, den)
} else {
return self.$reduce(num, den)
};
}, TMP_2.$$arity = 2);
self.$attr_reader("numerator", "denominator");
Opal.defn(self, '$initialize', TMP_3 = function $$initialize(num, den) {
var self = this;
self.num = num;
return self.den = den;
}, TMP_3.$$arity = 2);
Opal.defn(self, '$numerator', TMP_4 = function $$numerator() {
var self = this;
return self.num;
}, TMP_4.$$arity = 0);
Opal.defn(self, '$denominator', TMP_5 = function $$denominator() {
var self = this;
return self.den;
}, TMP_5.$$arity = 0);
Opal.defn(self, '$coerce', TMP_6 = function $$coerce(other) {
var self = this, $case = nil;
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 }})();
}, TMP_6.$$arity = 1);
Opal.defn(self, '$==', TMP_7 = function(other) {
var $a, self = this, $case = nil;
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)}})();
}, TMP_7.$$arity = 1);
Opal.defn(self, '$<=>', TMP_8 = function(other) {
var self = this, $case = nil;
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)}})();
}, TMP_8.$$arity = 1);
Opal.defn(self, '$+', TMP_9 = function(other) {
var self = this, $case = nil, num = nil, den = nil;
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)}})();
}, TMP_9.$$arity = 1);
Opal.defn(self, '$-', TMP_10 = function(other) {
var self = this, $case = nil, num = nil, den = nil;
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)}})();
}, TMP_10.$$arity = 1);
Opal.defn(self, '$*', TMP_11 = function(other) {
var self = this, $case = nil, num = nil, den = nil;
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)}})();
}, TMP_11.$$arity = 1);
Opal.defn(self, '$/', TMP_12 = function(other) {
var self = this, $case = nil, num = nil, den = nil;
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)}})();
}, TMP_12.$$arity = 1);
Opal.defn(self, '$**', TMP_13 = 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 != null && (!$a.$$is_boolean || $a == true))) {
return (($scope.get('Float')).$$scope.get('INFINITY'))
} else if ((($a = $rb_gt(other, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$Rational(self.num['$**'](other), self.den['$**'](other))
} else if ((($a = $rb_lt(other, 0)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
return self.$Rational(self.den['$**'](other.$numerator().$abs()), self.num['$**'](other.$numerator().$abs()))
} else {
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 != null && (!$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)}})();
}, TMP_13.$$arity = 1);
Opal.defn(self, '$abs', TMP_14 = function $$abs() {
var self = this;
return self.$Rational(self.num.$abs(), self.den.$abs());
}, TMP_14.$$arity = 0);
Opal.defn(self, '$ceil', TMP_15 = function $$ceil(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)
};
}, TMP_15.$$arity = -1);
Opal.alias(self, 'divide', '/');
Opal.defn(self, '$floor', TMP_16 = function $$floor(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)
};
}, TMP_16.$$arity = -1);
Opal.defn(self, '$hash', TMP_17 = function $$hash() {
var self = this;
return "Rational:" + (self.num) + ":" + (self.den);
}, TMP_17.$$arity = 0);
Opal.defn(self, '$inspect', TMP_18 = function $$inspect() {
var self = this;
return "(" + (self.$to_s()) + ")";
}, TMP_18.$$arity = 0);
Opal.alias(self, 'quo', '/');
Opal.defn(self, '$rationalize', TMP_19 = function $$rationalize(eps) {
var self = this;
if (arguments.length > 1) {
self.$raise($scope.get('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)");
}
if (eps == null) {
return self;
}
var e = eps.$abs(),
a = $rb_minus(self, e),
b = $rb_plus(self, e);
var p0 = 0,
p1 = 1,
q0 = 1,
q1 = 0,
p2, q2;
var c, k, t;
while (true) {
c = (a).$ceil();
if ($rb_le(c, b)) {
break;
}
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;
p0 = p1;
q0 = q1;
p1 = p2;
q1 = q2;
}
return self.$Rational(c * p1 + p0, c * q1 + q0);
;
}, TMP_19.$$arity = -1);
Opal.defn(self, '$round', TMP_20 = function $$round(precision) {
var $a, self = this, num = nil, den = nil, approx = nil;
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 != null && (!$a.$$is_boolean || $a == true))) {
return approx['$-@']()
} else {
return approx
};
}, TMP_20.$$arity = -1);
Opal.defn(self, '$to_f', TMP_21 = function $$to_f() {
var self = this;
return $rb_divide(self.num, self.den);
}, TMP_21.$$arity = 0);
Opal.defn(self, '$to_i', TMP_22 = function $$to_i() {
var self = this;
return self.$truncate();
}, TMP_22.$$arity = 0);
Opal.defn(self, '$to_r', TMP_23 = function $$to_r() {
var self = this;
return self;
}, TMP_23.$$arity = 0);
Opal.defn(self, '$to_s', TMP_24 = function $$to_s() {
var self = this;
return "" + (self.num) + "/" + (self.den);
}, TMP_24.$$arity = 0);
Opal.defn(self, '$truncate', TMP_25 = function $$truncate(precision) {
var $a, self = this;
if (precision == null) {
precision = 0;
}
if (precision['$=='](0)) {
if ((($a = $rb_lt(self.num, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$ceil()
} else {
return self.$floor()
}
} else {
return self.$with_precision("truncate", precision)
};
}, TMP_25.$$arity = -1);
return (Opal.defn(self, '$with_precision', TMP_26 = function $$with_precision(method, precision) {
var $a, self = this, p = nil, s = nil;
if ((($a = $scope.get('Integer')['$==='](precision)) !== nil && $a != null && (!$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 != null && (!$a.$$is_boolean || $a == true))) {
return ($rb_divide(s.$send(method), p)).$to_i()
} else {
return self.$Rational(s.$send(method), p)
};
}, TMP_26.$$arity = 2), nil) && 'with_precision';
})($scope.base, $scope.get('Numeric'));
return (function($base) {
var $Kernel, self = $Kernel = $module($base, 'Kernel');
var def = self.$$proto, $scope = self.$$scope, TMP_27;
Opal.defn(self, '$Rational', TMP_27 = function $$Rational(numerator, denominator) {
var self = this;
if (denominator == null) {
denominator = 1;
}
return $scope.get('Rational').$convert(numerator, denominator);
}, TMP_27.$$arity = -2)
})($scope.base);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/time"] = function(Opal) {
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;
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);
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_20, TMP_21, 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_34, TMP_35, TMP_36, TMP_37, TMP_38, TMP_39, TMP_40, TMP_41, TMP_42;
self.$include($scope.get('Comparable'));
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"];
;
Opal.defs(self, '$at', TMP_1 = function $$at(seconds, frac) {
var self = this;
var result;
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;
}
if (!seconds.$$is_number) {
seconds = $scope.get('Opal')['$coerce_to!'](seconds, $scope.get('Integer'), "to_int");
}
if (frac === undefined) {
return new Date(seconds * 1000);
}
if (!frac.$$is_number) {
frac = $scope.get('Opal')['$coerce_to!'](frac, $scope.get('Integer'), "to_int");
}
return new Date(seconds * 1000 + (frac / 1000));
;
}, TMP_1.$$arity = -2);
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");
}
}
if (month < 1 || month > 12) {
self.$raise($scope.get('ArgumentError'), "month out of range: " + (month))
}
month = month - 1;
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");
}
if (day < 1 || day > 31) {
self.$raise($scope.get('ArgumentError'), "day out of range: " + (day))
}
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");
}
if (hour < 0 || hour > 24) {
self.$raise($scope.get('ArgumentError'), "hour out of range: " + (hour))
}
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");
}
if (min < 0 || min > 59) {
self.$raise($scope.get('ArgumentError'), "min out of range: " + (min))
}
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");
}
}
if (sec < 0 || sec > 60) {
self.$raise($scope.get('ArgumentError'), "sec out of range: " + (sec))
}
return [year, month, day, hour, min, sec];
}
;
Opal.defs(self, '$new', TMP_2 = function(year, month, day, hour, min, sec, utc_offset) {
var self = this;
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;
if (year === undefined) {
return new Date();
}
if (utc_offset !== nil) {
self.$raise($scope.get('ArgumentError'), "Opal does not support explicitly specifying UTC offset for Time")
}
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];
result = new Date(year, month, day, hour, min, 0, sec * 1000);
if (year < 100) {
result.setFullYear(year);
}
return result;
}, TMP_2.$$arity = -1);
Opal.defs(self, '$local', TMP_3 = function $$local(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) {
var self = this;
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;
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];
}
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];
result = new Date(year, month, day, hour, min, 0, sec * 1000);
if (year < 100) {
result.setFullYear(year);
}
return result;
}, TMP_3.$$arity = -2);
Opal.defs(self, '$gm', TMP_4 = function $$gm(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) {
var self = this;
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;
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];
}
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];
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;
}, TMP_4.$$arity = -2);
(function(self) {
var $scope = self.$$scope, def = self.$$proto;
Opal.alias(self, 'mktime', 'local');
return Opal.alias(self, 'utc', 'gm');
})(Opal.get_singleton_class(self));
Opal.defs(self, '$now', TMP_5 = function $$now() {
var self = this;
return self.$new();
}, TMP_5.$$arity = 0);
Opal.defn(self, '$+', TMP_6 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Time')['$==='](other)) !== nil && $a != null && (!$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;
;
}, TMP_6.$$arity = 1);
Opal.defn(self, '$-', TMP_7 = function(other) {
var $a, self = this;
if ((($a = $scope.get('Time')['$==='](other)) !== nil && $a != null && (!$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;
;
}, TMP_7.$$arity = 1);
Opal.defn(self, '$<=>', TMP_8 = function(other) {
var $a, self = this, r = nil;
if ((($a = $scope.get('Time')['$==='](other)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return self.$to_f()['$<=>'](other.$to_f())
} else {
r = other['$<=>'](self);
if ((($a = r['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return nil
} else if ((($a = $rb_gt(r, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return -1
} else if ((($a = $rb_lt(r, 0)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return 1
} else {
return 0
};
};
}, TMP_8.$$arity = 1);
Opal.defn(self, '$==', TMP_9 = function(other) {
var self = this;
return self.$to_f() === other.$to_f();
}, TMP_9.$$arity = 1);
Opal.defn(self, '$asctime', TMP_10 = function $$asctime() {
var self = this;
return self.$strftime("%a %b %e %H:%M:%S %Y");
}, TMP_10.$$arity = 0);
Opal.alias(self, 'ctime', 'asctime');
Opal.defn(self, '$day', TMP_11 = function $$day() {
var self = this;
return self.is_utc ? self.getUTCDate() : self.getDate();
}, TMP_11.$$arity = 0);
Opal.defn(self, '$yday', TMP_12 = function $$yday() {
var self = this, start_of_year = nil, start_of_day = nil, one_day = nil;
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);
}, TMP_12.$$arity = 0);
Opal.defn(self, '$isdst', TMP_13 = function $$isdst() {
var self = this;
var jan = new Date(self.getFullYear(), 0, 1),
jul = new Date(self.getFullYear(), 6, 1);
return self.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}, TMP_13.$$arity = 0);
Opal.alias(self, 'dst?', 'isdst');
Opal.defn(self, '$dup', TMP_14 = function $$dup() {
var self = this, copy = nil;
copy = new Date(self.getTime());
copy.$copy_instance_variables(self);
copy.$initialize_dup(self);
return copy;
}, TMP_14.$$arity = 0);
Opal.defn(self, '$eql?', TMP_15 = function(other) {
var $a, self = this;
return ($a = other['$is_a?']($scope.get('Time')), $a !== false && $a !== nil && $a != null ?(self['$<=>'](other))['$zero?']() : $a);
}, TMP_15.$$arity = 1);
Opal.defn(self, '$friday?', TMP_16 = function() {
var self = this;
return self.$wday() == 5;
}, TMP_16.$$arity = 0);
Opal.defn(self, '$hash', TMP_17 = function $$hash() {
var self = this;
return 'Time:' + self.getTime();
}, TMP_17.$$arity = 0);
Opal.defn(self, '$hour', TMP_18 = function $$hour() {
var self = this;
return self.is_utc ? self.getUTCHours() : self.getHours();
}, TMP_18.$$arity = 0);
Opal.defn(self, '$inspect', TMP_19 = function $$inspect() {
var $a, self = this;
if ((($a = self['$utc?']()) !== nil && $a != null && (!$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")
};
}, TMP_19.$$arity = 0);
Opal.alias(self, 'mday', 'day');
Opal.defn(self, '$min', TMP_20 = function $$min() {
var self = this;
return self.is_utc ? self.getUTCMinutes() : self.getMinutes();
}, TMP_20.$$arity = 0);
Opal.defn(self, '$mon', TMP_21 = function $$mon() {
var self = this;
return (self.is_utc ? self.getUTCMonth() : self.getMonth()) + 1;
}, TMP_21.$$arity = 0);
Opal.defn(self, '$monday?', TMP_22 = function() {
var self = this;
return self.$wday() == 1;
}, TMP_22.$$arity = 0);
Opal.alias(self, 'month', 'mon');
Opal.defn(self, '$saturday?', TMP_23 = function() {
var self = this;
return self.$wday() == 6;
}, TMP_23.$$arity = 0);
Opal.defn(self, '$sec', TMP_24 = function $$sec() {
var self = this;
return self.is_utc ? self.getUTCSeconds() : self.getSeconds();
}, TMP_24.$$arity = 0);
Opal.defn(self, '$succ', TMP_25 = function $$succ() {
var self = this;
var result = new Date(self.getTime() + 1000);
result.is_utc = self.is_utc;
return result;
}, TMP_25.$$arity = 0);
Opal.defn(self, '$usec', TMP_26 = function $$usec() {
var self = this;
return self.getMilliseconds() * 1000;
}, TMP_26.$$arity = 0);
Opal.defn(self, '$zone', TMP_27 = function $$zone() {
var self = this;
var string = self.toString(),
result;
if (string.indexOf('(') == -1) {
result = string.match(/[A-Z]{3,4}/)[0];
}
else {
result = string.match(/\([^)]+\)/)[0].match(/[A-Z]/g).join('');
}
if (result == "GMT" && /(GMT\W*\d{4})/.test(string)) {
return RegExp.$1;
}
else {
return result;
}
}, TMP_27.$$arity = 0);
Opal.defn(self, '$getgm', TMP_28 = function $$getgm() {
var self = this;
var result = new Date(self.getTime());
result.is_utc = true;
return result;
}, TMP_28.$$arity = 0);
Opal.alias(self, 'getutc', 'getgm');
Opal.defn(self, '$gmtime', TMP_29 = function $$gmtime() {
var self = this;
self.is_utc = true;
return self;
}, TMP_29.$$arity = 0);
Opal.alias(self, 'utc', 'gmtime');
Opal.defn(self, '$gmt?', TMP_30 = function() {
var self = this;
return self.is_utc === true;
}, TMP_30.$$arity = 0);
Opal.defn(self, '$gmt_offset', TMP_31 = function $$gmt_offset() {
var self = this;
return -self.getTimezoneOffset() * 60;
}, TMP_31.$$arity = 0);
Opal.defn(self, '$strftime', TMP_32 = function $$strftime(format) {
var self = this;
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;
width = parseInt(width, 10);
if (zero && blank) {
if (flags.indexOf('0') < flags.indexOf('_')) {
zero = false;
}
else {
blank = false;
}
}
switch (conv) {
case 'Y':
result += self.$year();
break;
case 'C':
zero = !blank;
result += Math.round(self.$year() / 100);
break;
case 'y':
zero = !blank;
result += (self.$year() % 100);
break;
case 'm':
zero = !blank;
result += self.$mon();
break;
case 'B':
result += long_months[self.$mon() - 1];
break;
case 'b':
case 'h':
blank = !zero;
result += short_months[self.$mon() - 1];
break;
case 'd':
zero = !blank
result += self.$day();
break;
case 'e':
blank = !zero
result += self.$day();
break;
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 += ":";
}
result += minutes < 10 ? "0" : "";
result += minutes;
if (colons > 1) {
result += ":00";
}
break;
case 'Z':
result += self.$zone();
break;
case 'A':
result += days_of_week[self.$wday()];
break;
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;
});
}, TMP_32.$$arity = 1);
Opal.defn(self, '$sunday?', TMP_33 = function() {
var self = this;
return self.$wday() == 0;
}, TMP_33.$$arity = 0);
Opal.defn(self, '$thursday?', TMP_34 = function() {
var self = this;
return self.$wday() == 4;
}, TMP_34.$$arity = 0);
Opal.defn(self, '$to_a', TMP_35 = function $$to_a() {
var self = this;
return [self.$sec(), self.$min(), self.$hour(), self.$day(), self.$month(), self.$year(), self.$wday(), self.$yday(), self.$isdst(), self.$zone()];
}, TMP_35.$$arity = 0);
Opal.defn(self, '$to_f', TMP_36 = function $$to_f() {
var self = this;
return self.getTime() / 1000;
}, TMP_36.$$arity = 0);
Opal.defn(self, '$to_i', TMP_37 = function $$to_i() {
var self = this;
return parseInt(self.getTime() / 1000, 10);
}, TMP_37.$$arity = 0);
Opal.alias(self, 'to_s', 'inspect');
Opal.defn(self, '$tuesday?', TMP_38 = function() {
var self = this;
return self.$wday() == 2;
}, TMP_38.$$arity = 0);
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', TMP_39 = function $$wday() {
var self = this;
return self.is_utc ? self.getUTCDay() : self.getDay();
}, TMP_39.$$arity = 0);
Opal.defn(self, '$wednesday?', TMP_40 = function() {
var self = this;
return self.$wday() == 3;
}, TMP_40.$$arity = 0);
Opal.defn(self, '$year', TMP_41 = function $$year() {
var self = this;
return self.is_utc ? self.getUTCFullYear() : self.getFullYear();
}, TMP_41.$$arity = 0);
return (Opal.defn(self, '$cweek_cyear', TMP_42 = function $$cweek_cyear() {
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 && $b != null ?jan01_wday['$!='](0) : $b)) !== nil && $a != null && (!$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 != null && (!$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 && $b != null ?dec31_wday['$!='](0) : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
week = 1;
year = $rb_plus(year, 1);};};
return [week, year];
}, TMP_42.$$arity = 0), nil) && 'cweek_cyear';
})($scope.base, Date);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/struct"] = function(Opal) {
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_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;
Opal.add_stubs(['$require', '$include', '$const_name!', '$unshift', '$map', '$coerce_to!', '$new', '$each', '$define_struct_attribute', '$allocate', '$initialize', '$module_eval', '$to_proc', '$const_set', '$==', '$raise', '$<<', '$members', '$define_method', '$instance_eval', '$>', '$length', '$class', '$each_with_index', '$[]=', '$[]', '$hash', '$===', '$<', '$-@', '$size', '$>=', '$include?', '$to_sym', '$instance_of?', '$__id__', '$eql?', '$enum_for', '$name', '$+', '$join', '$inspect', '$each_pair', '$inject', '$flatten', '$to_a', '$values_at']);
self.$require("corelib/enumerable");
return (function($base, $super) {
function $Struct(){};
var self = $Struct = $klass($base, $super, 'Struct', $Struct);
var def = self.$$proto, $scope = self.$$scope, TMP_1, TMP_8, TMP_9, TMP_11, TMP_13, TMP_14, TMP_15, TMP_16, TMP_17, TMP_18, TMP_19, TMP_20, TMP_23, TMP_26, TMP_28, TMP_30, TMP_32, TMP_34, TMP_35;
self.$include($scope.get('Enumerable'));
Opal.defs(self, '$new', TMP_1 = function(const_name, $a_rest) {
var $b, $c, TMP_2, $d, TMP_3, $e, self = this, args, $iter = TMP_1.$$p, block = $iter || nil, klass = nil;
var $args_len = arguments.length, $rest_len = $args_len - 1;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 1; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 1] = arguments[$arg_idx];
}
TMP_1.$$p = null;
if (const_name !== false && const_name !== nil && const_name != null) {
try {
const_name = $scope.get('Opal')['$const_name!'](const_name)
} catch ($err) {
if (Opal.rescue($err, [$scope.get('TypeError'), $scope.get('NameError')])) {
try {
args.$unshift(const_name);
const_name = nil;
} finally { Opal.pop_exception() }
} else { throw $err; }
}};
($b = ($c = args).$map, $b.$$p = (TMP_2 = function(arg){var self = TMP_2.$$s || this;
if (arg == null) arg = nil;
return $scope.get('Opal')['$coerce_to!'](arg, $scope.get('String'), "to_str")}, TMP_2.$$s = self, TMP_2.$$arity = 1, TMP_2), $b).call($c);
klass = ($b = ($d = $scope.get('Class')).$new, $b.$$p = (TMP_3 = function(){var self = TMP_3.$$s || this, $a, $e, TMP_4;
($a = ($e = args).$each, $a.$$p = (TMP_4 = function(arg){var self = TMP_4.$$s || this;
if (arg == null) arg = nil;
return self.$define_struct_attribute(arg)}, TMP_4.$$s = self, TMP_4.$$arity = 1, TMP_4), $a).call($e);
return (function(self) {
var $scope = self.$$scope, def = self.$$proto, TMP_5;
Opal.defn(self, '$new', TMP_5 = function($a_rest) {
var $b, self = this, args, instance = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
instance = self.$allocate();
instance.$$data = {};;
($b = instance).$initialize.apply($b, Opal.to_a(args));
return instance;
}, TMP_5.$$arity = -1);
return Opal.alias(self, '[]', 'new');
})(Opal.get_singleton_class(self));}, TMP_3.$$s = self, TMP_3.$$arity = 0, TMP_3), $b).call($d, self);
if (block !== false && block !== nil && block != null) {
($b = ($e = klass).$module_eval, $b.$$p = block.$to_proc(), $b).call($e)};
if (const_name !== false && const_name !== nil && const_name != null) {
$scope.get('Struct').$const_set(const_name, klass)};
return klass;
}, TMP_1.$$arity = -2);
Opal.defs(self, '$define_struct_attribute', TMP_8 = function $$define_struct_attribute(name) {
var $a, $b, TMP_6, $c, TMP_7, 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_6 = function(){var self = TMP_6.$$s || this;
return self.$$data[name];}, TMP_6.$$s = self, TMP_6.$$arity = 0, TMP_6), $a).call($b, name);
return ($a = ($c = self).$define_method, $a.$$p = (TMP_7 = function(value){var self = TMP_7.$$s || this;
if (value == null) value = nil;
return self.$$data[name] = value;}, TMP_7.$$s = self, TMP_7.$$arity = 1, TMP_7), $a).call($c, "" + (name) + "=");
}, TMP_8.$$arity = 1);
Opal.defs(self, '$members', TMP_9 = function $$members() {
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 != null) ? $a : self.members = []);
}, TMP_9.$$arity = 0);
Opal.defs(self, '$inherited', TMP_11 = function $$inherited(klass) {
var $a, $b, TMP_10, self = this, members = nil;
if (self.members == null) self.members = nil;
members = self.members;
return ($a = ($b = klass).$instance_eval, $a.$$p = (TMP_10 = function(){var self = TMP_10.$$s || this;
return self.members = members}, TMP_10.$$s = self, TMP_10.$$arity = 0, TMP_10), $a).call($b);
}, TMP_11.$$arity = 1);
Opal.defn(self, '$initialize', TMP_13 = function $$initialize($a_rest) {
var $b, $c, TMP_12, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
if ((($b = $rb_gt(args.$length(), self.$class().$members().$length())) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$raise($scope.get('ArgumentError'), "struct size differs")};
return ($b = ($c = self.$class().$members()).$each_with_index, $b.$$p = (TMP_12 = function(name, index){var self = TMP_12.$$s || this;
if (name == null) name = nil;if (index == null) index = nil;
return self['$[]='](name, args['$[]'](index))}, TMP_12.$$s = self, TMP_12.$$arity = 2, TMP_12), $b).call($c);
}, TMP_13.$$arity = -1);
Opal.defn(self, '$members', TMP_14 = function $$members() {
var self = this;
return self.$class().$members();
}, TMP_14.$$arity = 0);
Opal.defn(self, '$hash', TMP_15 = function $$hash() {
var self = this;
return $scope.get('Hash').$new(self.$$data).$hash();
}, TMP_15.$$arity = 0);
Opal.defn(self, '$[]', TMP_16 = function(name) {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](name)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $rb_lt(name, self.$class().$members().$size()['$-@']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$class().$members().$size()) + ")")};
if ((($a = $rb_ge(name, self.$class().$members().$size())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$class().$members().$size()) + ")")};
name = self.$class().$members()['$[]'](name);
} else if ((($a = $scope.get('String')['$==='](name)) !== nil && $a != null && (!$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];
}, TMP_16.$$arity = 1);
Opal.defn(self, '$[]=', TMP_17 = function(name, value) {
var $a, self = this;
if ((($a = $scope.get('Integer')['$==='](name)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = $rb_lt(name, self.$class().$members().$size()['$-@']())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$class().$members().$size()) + ")")};
if ((($a = $rb_ge(name, self.$class().$members().$size())) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$class().$members().$size()) + ")")};
name = self.$class().$members()['$[]'](name);
} else if ((($a = $scope.get('String')['$==='](name)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
if ((($a = self.$class().$members()['$include?'](name.$to_sym())) !== nil && $a != null && (!$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;
}, TMP_17.$$arity = 2);
Opal.defn(self, '$==', TMP_18 = function(other) {
var $a, self = this;
if ((($a = other['$instance_of?'](self.$class())) !== nil && $a != null && (!$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);
;
}, TMP_18.$$arity = 1);
Opal.defn(self, '$eql?', TMP_19 = function(other) {
var $a, self = this;
if ((($a = other['$instance_of?'](self.$class())) !== nil && $a != null && (!$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);
;
}, TMP_19.$$arity = 1);
Opal.defn(self, '$each', TMP_20 = function $$each() {
var $a, $b, TMP_21, $c, TMP_22, self = this, $iter = TMP_20.$$p, $yield = $iter || nil;
TMP_20.$$p = null;
if (($yield !== 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.$$arity = 0, TMP_21), $a).call($b, "each")
};
($a = ($c = self.$class().$members()).$each, $a.$$p = (TMP_22 = function(name){var self = TMP_22.$$s || this;
if (name == null) name = nil;
return Opal.yield1($yield, self['$[]'](name));}, TMP_22.$$s = self, TMP_22.$$arity = 1, TMP_22), $a).call($c);
return self;
}, TMP_20.$$arity = 0);
Opal.defn(self, '$each_pair', TMP_23 = function $$each_pair() {
var $a, $b, TMP_24, $c, TMP_25, self = this, $iter = TMP_23.$$p, $yield = $iter || nil;
TMP_23.$$p = null;
if (($yield !== nil)) {
} else {
return ($a = ($b = self).$enum_for, $a.$$p = (TMP_24 = function(){var self = TMP_24.$$s || this;
return self.$size()}, TMP_24.$$s = self, TMP_24.$$arity = 0, TMP_24), $a).call($b, "each_pair")
};
($a = ($c = self.$class().$members()).$each, $a.$$p = (TMP_25 = function(name){var self = TMP_25.$$s || this;
if (name == null) name = nil;
return Opal.yield1($yield, [name, self['$[]'](name)]);}, TMP_25.$$s = self, TMP_25.$$arity = 1, TMP_25), $a).call($c);
return self;
}, TMP_23.$$arity = 0);
Opal.defn(self, '$length', TMP_26 = function $$length() {
var self = this;
return self.$class().$members().$length();
}, TMP_26.$$arity = 0);
Opal.alias(self, 'size', 'length');
Opal.defn(self, '$to_a', TMP_28 = function $$to_a() {
var $a, $b, TMP_27, self = this;
return ($a = ($b = self.$class().$members()).$map, $a.$$p = (TMP_27 = function(name){var self = TMP_27.$$s || this;
if (name == null) name = nil;
return self['$[]'](name)}, TMP_27.$$s = self, TMP_27.$$arity = 1, TMP_27), $a).call($b);
}, TMP_28.$$arity = 0);
Opal.alias(self, 'values', 'to_a');
Opal.defn(self, '$inspect', TMP_30 = function $$inspect() {
var $a, $b, TMP_29, self = this, result = nil;
result = "#<struct ";
if ((($a = ($b = $scope.get('Struct')['$==='](self), $b !== false && $b !== nil && $b != null ?self.$class().$name() : $b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
result = $rb_plus(result, "" + (self.$class()) + " ")};
result = $rb_plus(result, ($a = ($b = self.$each_pair()).$map, $a.$$p = (TMP_29 = function(name, value){var self = TMP_29.$$s || this;
if (name == null) name = nil;if (value == null) value = nil;
return "" + (name) + "=" + (value.$inspect())}, TMP_29.$$s = self, TMP_29.$$arity = 2, TMP_29), $a).call($b).$join(", "));
result = $rb_plus(result, ">");
return result;
}, TMP_30.$$arity = 0);
Opal.alias(self, 'to_s', 'inspect');
Opal.defn(self, '$to_h', TMP_32 = function $$to_h() {
var $a, $b, TMP_31, self = this;
return ($a = ($b = self.$class().$members()).$inject, $a.$$p = (TMP_31 = function(h, name){var self = TMP_31.$$s || this;
if (h == null) h = nil;if (name == null) name = nil;
h['$[]='](name, self['$[]'](name));
return h;}, TMP_31.$$s = self, TMP_31.$$arity = 2, TMP_31), $a).call($b, $hash2([], {}));
}, TMP_32.$$arity = 0);
Opal.defn(self, '$values_at', TMP_34 = function $$values_at($a_rest) {
var $b, $c, TMP_33, self = this, args;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
args = ($b = ($c = args).$map, $b.$$p = (TMP_33 = function(arg){var self = TMP_33.$$s || this;
if (arg == null) arg = nil;
return arg.$$is_range ? arg.$to_a() : arg;}, TMP_33.$$s = self, TMP_33.$$arity = 1, TMP_33), $b).call($c).$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;
;
}, TMP_34.$$arity = -1);
return (Opal.defs(self, '$_load', TMP_35 = function $$_load(args) {
var $a, $b, self = this, attributes = nil;
attributes = ($a = args).$values_at.apply($a, Opal.to_a(self.$members()));
return ($b = self).$new.apply($b, Opal.to_a(attributes));
}, TMP_35.$$arity = 1), nil) && '_load';
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/io"] = function(Opal) {
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, TMP_1, TMP_2, TMP_3, TMP_4;
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?', TMP_1 = function() {
var self = this;
return self.tty;
}, TMP_1.$$arity = 0);
Opal.defn(self, '$closed?', TMP_2 = function() {
var self = this;
return self.closed;
}, TMP_2.$$arity = 0);
self.$attr_accessor("write_proc");
Opal.defn(self, '$write', TMP_3 = function $$write(string) {
var self = this;
self.write_proc(string);
return string.$size();
}, TMP_3.$$arity = 1);
self.$attr_accessor("sync", "tty");
Opal.defn(self, '$flush', TMP_4 = function $$flush() {
var self = this;
return nil;
}, TMP_4.$$arity = 0);
(function($base) {
var $Writable, self = $Writable = $module($base, 'Writable');
var def = self.$$proto, $scope = self.$$scope, TMP_5, TMP_7, TMP_9;
Opal.defn(self, '$<<', TMP_5 = function(string) {
var self = this;
self.$write(string);
return self;
}, TMP_5.$$arity = 1);
Opal.defn(self, '$print', TMP_7 = function $$print($a_rest) {
var $b, $c, TMP_6, self = this, args;
if ($gvars[","] == null) $gvars[","] = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
self.$write(($b = ($c = args).$map, $b.$$p = (TMP_6 = function(arg){var self = TMP_6.$$s || this;
if (arg == null) arg = nil;
return self.$String(arg)}, TMP_6.$$s = self, TMP_6.$$arity = 1, TMP_6), $b).call($c).$join($gvars[","]));
return nil;
}, TMP_7.$$arity = -1);
Opal.defn(self, '$puts', TMP_9 = function $$puts($a_rest) {
var $b, $c, TMP_8, self = this, args, newline = nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
args = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
args[$arg_idx - 0] = arguments[$arg_idx];
}
newline = $gvars["/"];
if ((($b = args['$empty?']()) !== nil && $b != null && (!$b.$$is_boolean || $b == true))) {
self.$write($gvars["/"])
} else {
self.$write(($b = ($c = args).$map, $b.$$p = (TMP_8 = function(arg){var self = TMP_8.$$s || this;
if (arg == null) arg = nil;
return self.$String(arg).$chomp()}, TMP_8.$$s = self, TMP_8.$$arity = 1, TMP_8), $b).call($c).$concat([nil]).$join(newline))
};
return nil;
}, TMP_9.$$arity = -1);
})($scope.base);
return (function($base) {
var $Readable, self = $Readable = $module($base, 'Readable');
var def = self.$$proto, $scope = self.$$scope, TMP_10, TMP_11, TMP_12, TMP_13;
Opal.defn(self, '$readbyte', TMP_10 = function $$readbyte() {
var self = this;
return self.$getbyte();
}, TMP_10.$$arity = 0);
Opal.defn(self, '$readchar', TMP_11 = function $$readchar() {
var self = this;
return self.$getc();
}, TMP_11.$$arity = 0);
Opal.defn(self, '$readline', TMP_12 = function $$readline(sep) {
var self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (sep == null) {
sep = $gvars["/"];
}
return self.$raise($scope.get('NotImplementedError'));
}, TMP_12.$$arity = -1);
Opal.defn(self, '$readpartial', TMP_13 = function $$readpartial(integer, outbuf) {
var self = this;
if (outbuf == null) {
outbuf = nil;
}
return self.$raise($scope.get('NotImplementedError'));
}, TMP_13.$$arity = -2);
})($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.10.3 */
Opal.modules["corelib/main"] = function(Opal) {
var TMP_1, TMP_2, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
Opal.add_stubs(['$include']);
Opal.defs(self, '$to_s', TMP_1 = function $$to_s() {
var self = this;
return "main";
}, TMP_1.$$arity = 0);
return (Opal.defs(self, '$include', TMP_2 = function $$include(mod) {
var self = this;
return $scope.get('Object').$include(mod);
}, TMP_2.$$arity = 1), nil) && 'include';
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/dir"] = function(Opal) {
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, TMP_2, TMP_3;
Opal.defn(self, '$chdir', TMP_1 = function $$chdir(dir) {
var 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 Opal.yieldX($yield, []);;
} finally {
Opal.current_dir = prev_cwd;
};
}, TMP_1.$$arity = 1);
Opal.defn(self, '$pwd', TMP_2 = function $$pwd() {
var self = this;
return Opal.current_dir || '.';
}, TMP_2.$$arity = 0);
Opal.alias(self, 'getwd', 'pwd');
return (Opal.defn(self, '$home', TMP_3 = function $$home() {
var $a, self = this;
return ((($a = $scope.get('ENV')['$[]']("HOME")) !== false && $a !== nil && $a != null) ? $a : ".");
}, TMP_3.$$arity = 0), nil) && 'home';
})(Opal.get_singleton_class(self))
})($scope.base, null)
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/file"] = function(Opal) {
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, $klass = Opal.klass, $range = Opal.range;
Opal.add_stubs(['$join', '$compact', '$split', '$==', '$first', '$[]=', '$home', '$pwd', '$each', '$pop', '$<<', '$raise', '$respond_to?', '$to_path', '$class', '$nil?', '$is_a?', '$basename', '$empty?', '$rindex', '$[]', '$+', '$-', '$length', '$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', ":");
Opal.cdecl($scope, 'FNM_SYSCASE', 0);
return (function(self) {
var $scope = self.$$scope, def = self.$$proto, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_8, TMP_9, TMP_10;
Opal.defn(self, '$expand_path', TMP_2 = function $$expand_path(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())};
if (parts.$first()['$=='](".")) {
parts['$[]='](0, $scope.get('Dir').$pwd())};
($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.$$arity = 1, TMP_1), $a).call($b);
return new_parts.$join($scope.get('SEPARATOR'));
}, TMP_2.$$arity = -2);
Opal.alias(self, 'realpath', 'expand_path');
function chompdirsep(path) {
var last;
while (path.length > 0) {
if (isDirSep(path)) {
last = path;
path = path.substring(1, path.length);
while (path.length > 0 && isDirSep(path)) {
path = inc(path);
}
if (path.length == 0) {
return last;
}
}
else {
path = inc(path);
}
}
return path;
}
function inc(a) {
return a.substring(1, a.length);
}
function skipprefix(path) {
return path;
}
function lastSeparator(path) {
var tmp, last;
while (path.length > 0) {
if (isDirSep(path)) {
tmp = path;
path = inc(path);
while (path.length > 0 && isDirSep(path)) {
path = inc(path);
}
if (!path) {
break;
}
last = tmp;
}
else {
path = inc(path);
}
}
return last;
}
function isDirSep(sep) {
return sep.charAt(0) === $scope.get('SEPARATOR');
}
function skipRoot(path) {
while (path.length > 0 && isDirSep(path)) {
path = inc(path);
}
return path;
}
function pointerSubtract(a, b) {
if (a.length == 0) {
return b.length;
}
return b.indexOf(a);
}
function handleSuffix(n, f, p, suffix, name, origName) {
var suffixMatch;
if (n >= 0) {
if (suffix === nil) {
f = n;
}
else {
suffixMatch = suffix === '.*' ? '\\.\\w+' : suffix.replace(/\?/g, '\\?');
suffixMatch = new RegExp(suffixMatch + $scope.get('Separator') + '*$').exec(p);
if (suffixMatch) {
f = suffixMatch.index;
}
else {
f = n;
}
}
if (f === origName.length) {
return name;
}
}
return p.substring(0, f);
}
Opal.defn(self, '$dirname', TMP_3 = function $$dirname(path) {
var self = this;
if (path === nil) {
self.$raise($scope.get('TypeError'), "no implicit conversion of nil into String")
}
if (path['$respond_to?']("to_path")) {
path = path.$to_path();
}
if (!path.$$is_string) {
self.$raise($scope.get('TypeError'), "no implicit conversion of " + (path.$class()) + " into String")
}
var root, p;
root = skipRoot(path);
// if (root > name + 1) in the C code
if (root.length == 0) {
path = path.substring(path.length - 1, path.length);
}
else if (root.length - path.length < 0) {
path = path.substring(path.indexOf(root)-1, path.length);
}
p = lastSeparator(root);
if (!p) {
p = root;
}
if (p === path) {
return '.';
}
return path.substring(0, path.length - p.length);
;
}, TMP_3.$$arity = 1);
Opal.defn(self, '$basename', TMP_4 = function $$basename(name, suffix) {
var self = this;
if (suffix == null) {
suffix = nil;
}
var p, q, e, f = 0, n = -1, tmp, pointerMath, origName;
if (name === nil) {
self.$raise($scope.get('TypeError'), "no implicit conversion of nil into String")
}
if (name['$respond_to?']("to_path")) {
name = name.$to_path();
}
if (!name.$$is_string) {
self.$raise($scope.get('TypeError'), "no implicit conversion of " + (name.$class()) + " into String")
}
if (suffix !== nil && !suffix.$$is_string) {
self.$raise($scope.get('TypeError'), "no implicit conversion of " + (suffix.$class()) + " into String")
}
if (name.length == 0) {
return name;
}
origName = name;
name = skipprefix(name);
while (isDirSep(name)) {
tmp = name;
name = inc(name);
}
if (!name) {
p = tmp;
f = 1;
}
else {
if (!(p = lastSeparator(name))) {
p = name;
}
else {
while (isDirSep(p)) {
p = inc(p);
}
}
n = pointerSubtract(chompdirsep(p), p);
for (q = p; pointerSubtract(q, p) < n && q.charAt(0) === '.'; q = inc(q)) {
}
for (e = null; pointerSubtract(q, p) < n; q = inc(q)) {
if (q.charAt(0) === '.') {
e = q;
}
}
if (e) {
f = pointerSubtract(e, p);
}
else {
f = n;
}
}
return handleSuffix(n, f, p, suffix, name, origName);
;
}, TMP_4.$$arity = -2);
Opal.defn(self, '$extname', TMP_5 = function $$extname(path) {
var $a, $b, self = this, filename = nil, last_dot_idx = nil;
if ((($a = path['$nil?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
self.$raise($scope.get('TypeError'), "no implicit conversion of nil into String")};
if ((($a = path['$respond_to?']("to_path")) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
path = path.$to_path()};
if ((($a = path['$is_a?']($scope.get('String'))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
} else {
self.$raise($scope.get('TypeError'), "no implicit conversion of " + (path.$class()) + " into String")
};
filename = self.$basename(path);
if ((($a = filename['$empty?']()) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ""};
last_dot_idx = filename['$[]']($range(1, -1, false)).$rindex(".");
if ((($a = (((($b = last_dot_idx['$nil?']()) !== false && $b !== nil && $b != null) ? $b : $rb_plus(last_dot_idx, 1)['$==']($rb_minus(filename.$length(), 1))))) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
return ""
} else {
return filename['$[]']($range(($rb_plus(last_dot_idx, 1)), -1, false))
};
}, TMP_5.$$arity = 1);
Opal.defn(self, '$exist?', TMP_6 = function(path) {
var self = this;
return Opal.modules[path] != null;
}, TMP_6.$$arity = 1);
Opal.alias(self, 'exists?', 'exist?');
Opal.defn(self, '$directory?', TMP_8 = function(path) {
var $a, $b, TMP_7, 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_7 = function(file){var self = TMP_7.$$s || this;
if (file == null) file = nil;
return file['$=~']((new RegExp("^" + path)))}, TMP_7.$$s = self, TMP_7.$$arity = 1, TMP_7), $a).call($b);
return file;
}, TMP_8.$$arity = 1);
Opal.defn(self, '$join', TMP_9 = function $$join($a_rest) {
var self = this, paths;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
paths = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
paths[$arg_idx - 0] = arguments[$arg_idx];
}
return paths.$join($scope.get('SEPARATOR')).$gsub((new RegExp("" + $scope.get('SEPARATOR') + "+")), $scope.get('SEPARATOR'));
}, TMP_9.$$arity = -1);
return (Opal.defn(self, '$split', TMP_10 = function $$split(path) {
var self = this;
return path.$split($scope.get('SEPARATOR'));
}, TMP_10.$$arity = 1), nil) && 'split';
})(Opal.get_singleton_class(self));
})($scope.base, $scope.get('IO'))
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/process"] = function(Opal) {
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, TMP_1, TMP_2, TMP_3;
Opal.cdecl($scope, 'CLOCK_REALTIME', 0);
Opal.cdecl($scope, 'CLOCK_MONOTONIC', 1);
Opal.defs(self, '$pid', TMP_1 = function $$pid() {
var self = this;
return 0;
}, TMP_1.$$arity = 0);
Opal.defs(self, '$times', TMP_2 = function $$times() {
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);
}, TMP_2.$$arity = 0);
return (Opal.defs(self, '$clock_gettime', TMP_3 = function $$clock_gettime(clock_id, unit) {
var self = this;
if (unit == null) {
unit = nil;
}
return $scope.get('Time').$now().$to_f();
}, TMP_3.$$arity = -2), 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, TMP_4;
return (Opal.defs(self, '$trap', TMP_4 = function $$trap($a_rest) {
var self = this;
return nil;
}, TMP_4.$$arity = -1), 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, TMP_5;
return (Opal.defs(self, '$start', TMP_5 = function $$start() {
var self = this;
return nil;
}, TMP_5.$$arity = 0), nil) && 'start'
})($scope.base, null);
};
/* Generated by Opal 0.10.3 */
Opal.modules["corelib/unsupported"] = function(Opal) {
var TMP_30, TMP_31, self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass, $module = Opal.module;
Opal.add_stubs(['$raise', '$warn', '$%']);
var warnings = {};
function handle_unsupported_feature(message) {
switch (Opal.config.unsupported_features_severity) {
case 'error':
$scope.get('Kernel').$raise($scope.get('NotImplementedError'), message)
break;
case 'warning':
warn(message)
break;
default: // ignore
// noop
}
}
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, 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;
var ERROR = "String#%s not supported. Mutable String methods are not supported in Opal.";
Opal.defn(self, '$<<', TMP_1 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("<<"));
}, TMP_1.$$arity = -1);
Opal.defn(self, '$capitalize!', TMP_2 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("capitalize!"));
}, TMP_2.$$arity = -1);
Opal.defn(self, '$chomp!', TMP_3 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("chomp!"));
}, TMP_3.$$arity = -1);
Opal.defn(self, '$chop!', TMP_4 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("chop!"));
}, TMP_4.$$arity = -1);
Opal.defn(self, '$downcase!', TMP_5 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("downcase!"));
}, TMP_5.$$arity = -1);
Opal.defn(self, '$gsub!', TMP_6 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("gsub!"));
}, TMP_6.$$arity = -1);
Opal.defn(self, '$lstrip!', TMP_7 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("lstrip!"));
}, TMP_7.$$arity = -1);
Opal.defn(self, '$next!', TMP_8 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("next!"));
}, TMP_8.$$arity = -1);
Opal.defn(self, '$reverse!', TMP_9 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("reverse!"));
}, TMP_9.$$arity = -1);
Opal.defn(self, '$slice!', TMP_10 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("slice!"));
}, TMP_10.$$arity = -1);
Opal.defn(self, '$squeeze!', TMP_11 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("squeeze!"));
}, TMP_11.$$arity = -1);
Opal.defn(self, '$strip!', TMP_12 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("strip!"));
}, TMP_12.$$arity = -1);
Opal.defn(self, '$sub!', TMP_13 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("sub!"));
}, TMP_13.$$arity = -1);
Opal.defn(self, '$succ!', TMP_14 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("succ!"));
}, TMP_14.$$arity = -1);
Opal.defn(self, '$swapcase!', TMP_15 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("swapcase!"));
}, TMP_15.$$arity = -1);
Opal.defn(self, '$tr!', TMP_16 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("tr!"));
}, TMP_16.$$arity = -1);
Opal.defn(self, '$tr_s!', TMP_17 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("tr_s!"));
}, TMP_17.$$arity = -1);
return (Opal.defn(self, '$upcase!', TMP_18 = function($a_rest) {
var self = this;
return self.$raise($scope.get('NotImplementedError'), (ERROR)['$%']("upcase!"));
}, TMP_18.$$arity = -1), nil) && 'upcase!';
})($scope.base, null);
(function($base) {
var $Kernel, self = $Kernel = $module($base, 'Kernel');
var def = self.$$proto, $scope = self.$$scope, TMP_19, TMP_20;
var ERROR = "Object freezing is not supported by Opal";
Opal.defn(self, '$freeze', TMP_19 = function $$freeze() {
var self = this;
handle_unsupported_feature(ERROR);
return self;
}, TMP_19.$$arity = 0);
Opal.defn(self, '$frozen?', TMP_20 = function() {
var self = this;
handle_unsupported_feature(ERROR);
return false;
}, TMP_20.$$arity = 0);
})($scope.base);
(function($base) {
var $Kernel, self = $Kernel = $module($base, 'Kernel');
var def = self.$$proto, $scope = self.$$scope, TMP_21, TMP_22, TMP_23;
var ERROR = "Object tainting is not supported by Opal";
Opal.defn(self, '$taint', TMP_21 = function $$taint() {
var self = this;
handle_unsupported_feature(ERROR);
return self;
}, TMP_21.$$arity = 0);
Opal.defn(self, '$untaint', TMP_22 = function $$untaint() {
var self = this;
handle_unsupported_feature(ERROR);
return self;
}, TMP_22.$$arity = 0);
Opal.defn(self, '$tainted?', TMP_23 = function() {
var self = this;
handle_unsupported_feature(ERROR);
return false;
}, TMP_23.$$arity = 0);
})($scope.base);
(function($base, $super) {
function $Module(){};
var self = $Module = $klass($base, $super, 'Module', $Module);
var def = self.$$proto, $scope = self.$$scope, TMP_24, TMP_25, TMP_26, TMP_27;
Opal.defn(self, '$public', TMP_24 = function($a_rest) {
var self = this, methods;
var $args_len = arguments.length, $rest_len = $args_len - 0;
if ($rest_len < 0) { $rest_len = 0; }
methods = new Array($rest_len);
for (var $arg_idx = 0; $arg_idx < $args_len; $arg_idx++) {
methods[$arg_idx - 0] = arguments[$arg_idx];
}
if (methods.length === 0) {
self.$$module_function = false;
}
return nil;
}, TMP_24.$$arity = -1);
Opal.alias(self, 'private', 'public');
Opal.alias(self, 'protected', 'public');
Opal.alias(self, 'nesting', 'public');
Opal.defn(self, '$private_class_method', TMP_25 = function $$private_class_method($a_rest) {
var self = this;
return self;
}, TMP_25.$$arity = -1);
Opal.alias(self, 'public_class_method', 'private_class_method');
Opal.defn(self, '$private_method_defined?', TMP_26 = function(obj) {
var self = this;
return false;
}, TMP_26.$$arity = 1);
Opal.defn(self, '$private_constant', TMP_27 = function $$private_constant($a_rest) {
var self = this;
return nil;
}, TMP_27.$$arity = -1);
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, TMP_28;
Opal.defn(self, '$private_methods', TMP_28 = function $$private_methods($a_rest) {
var self = this;
return [];
}, TMP_28.$$arity = -1);
Opal.alias(self, 'private_instance_methods', 'private_methods');
})($scope.base);
(function($base) {
var $Kernel, self = $Kernel = $module($base, 'Kernel');
var def = self.$$proto, $scope = self.$$scope, TMP_29;
Opal.defn(self, '$eval', TMP_29 = function($a_rest) {
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."));
}, TMP_29.$$arity = -1)
})($scope.base);
Opal.defs(self, '$public', TMP_30 = function($a_rest) {
var self = this;
return nil;
}, TMP_30.$$arity = -1);
return (Opal.defs(self, '$private', TMP_31 = function($a_rest) {
var self = this;
return nil;
}, TMP_31.$$arity = -1), nil) && 'private';
};
/* Generated by Opal 0.10.3 */
(function(Opal) {
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/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.10.3 */
(function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
Opal.add_stubs(['$puts']);
return self.$puts("Hello world!")
})(Opal);
/* Generated by Opal 0.10.3 */
(function(Opal) {
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
Opal.add_stubs(['$exit']);
return $scope.get('Kernel').$exit()
})(Opal);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment