Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: opal/opal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 6a62d0bf7162
Choose a base ref
...
head repository: opal/opal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1174f5bebba0
Choose a head ref
  • 5 commits
  • 5 files changed
  • 1 contributor

Commits on Oct 24, 2013

  1. Fix Integer#=== and Float#===

    meh committed Oct 24, 2013
    Copy the full SHA
    5575cda View commit details
  2. Copy the full SHA
    53c5683 View commit details
  3. Copy the full SHA
    36d2ec2 View commit details
  4. Implement Array#cycle

    meh committed Oct 24, 2013
    Copy the full SHA
    1ef57c6 View commit details
  5. Cleanup spec/rubyspecs

    meh committed Oct 24, 2013
    Copy the full SHA
    1174f5b View commit details
Showing with 125 additions and 54 deletions.
  1. +31 −0 corelib/array.rb
  2. +26 −6 corelib/enumerator.rb
  3. +2 −2 corelib/numeric.rb
  4. +1 −1 spec/ospec/main.rb.erb
  5. +65 −45 spec/rubyspecs
31 changes: 31 additions & 0 deletions corelib/array.rb
Original file line number Diff line number Diff line change
@@ -346,6 +346,37 @@ def at(index)
}
end

def cycle(n = nil, &block)
return if `self.length === 0 || n === 0`
return enum_for :cycle, n unless block

if `n === nil`
while true
if `#{(value = each(&block))} !== self`
return value
end
end
else
unless n.respond_to? :to_int
raise TypeError, "no implicit conversion of #{n.class} into Integer"
end

cycles = n.to_int

unless Integer === cycles
raise TypeError, "can't convert #{n.class} into Integer (#{n.class}#to_int gives #{cycles.class}"
end

while cycles > 0
each(&block)

cycles -= 1
end
end

self
end

def clear
`#{self}.splice(0, #{self}.length)`

32 changes: 26 additions & 6 deletions corelib/enumerator.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,36 @@
class Enumerator
include Enumerable

def initialize(obj, method = :each, *args)
@object = obj
@method = method
@args = args
class Yielder
def initialize(enumerator = nil, &block)
@enumerator = enumerator
@block = block
end

def yield(*values)
@block.call(*values)
end

alias << yield
end

def initialize(obj = nil, method = :each, *args, &block)
if block
@block = block
else
@object = obj
@method = method
@args = args
end
end

def each(&block)
return enum_for :each unless block_given?

@object.__send__(@method, *@args) do |*e|
block.call(*e)
if @block
@block.call(Yielder.new(self, &block))
else
@object.__send__(@method, *@args, &block)
end
end

@@ -25,6 +44,7 @@ def next

def rewind
@cache = nil

self
end
end
4 changes: 2 additions & 2 deletions corelib/numeric.rb
Original file line number Diff line number Diff line change
@@ -430,12 +430,12 @@ def infinite?

class Integer < Numeric
def self.===(other)
`other._isNumber && (other % 1) == 0`
`!!(other._isNumber && (other % 1) == 0)`
end
end

class Float < Numeric
def self.===(other)
`other._isNumber && (other % 1) != 0`
`!!(other._isNumber && (other % 1) != 0)`
end
end
2 changes: 1 addition & 1 deletion spec/ospec/main.rb.erb
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@
<% end %>
<% end %>

<% File.read('spec/rubyspecs').split("\n").each do |s| %>
<% File.read('spec/rubyspecs').split("\n").reject(&:empty?).each do |s| %>
<% require_asset s %>
<% end %>

110 changes: 65 additions & 45 deletions spec/rubyspecs
Original file line number Diff line number Diff line change
@@ -5,14 +5,15 @@ core/array/assoc_spec
core/array/at_spec
core/array/choice_spec
core/array/clear_spec
core/array/collect_spec
core/array/clone_spec
core/array/collect_spec
core/array/combination_spec
core/array/compact_spec
core/array/comparison_spec
core/array/concat_spec
core/array/constructor_spec
core/array/count_spec
core/array/cycle_spec
core/array/delete_at_spec
core/array/delete_if_spec
core/array/delete_spec
@@ -70,16 +71,19 @@ core/array/uniq_spec
core/array/unshift_spec
core/array/values_at_spec
core/array/zip_spec

core/true/and_spec
core/true/inspect_spec
core/true/or_spec
core/true/to_s_spec
core/true/xor_spec

core/false/and_spec
core/false/inspect_spec
core/false/or_spec
core/false/to_s_spec
core/false/xor_spec

core/nil/and_spec
core/nil/dup_spec
core/nil/inspect_spec
@@ -91,6 +95,7 @@ core/nil/to_h_spec
core/nil/to_i_spec
core/nil/to_s_spec
core/nil/xor_spec

core/enumerable/all_spec
core/enumerable/any_spec
core/enumerable/collect_spec
@@ -120,35 +125,7 @@ core/enumerable/select_spec
core/enumerable/sort_by_spec
core/enumerable/take_spec
core/enumerable/to_a_spec
language/alias_spec
language/and_spec
language/array_spec
language/break_spec
language/case_spec
language/class_spec
language/class_variable_spec
language/def_spec
language/ensure_spec
language/if_spec
language/hash_spec
language/literal_lambda_spec
language/loop_spec
language/metaclass_spec
language/module_spec
language/next_spec
language/not_spec
language/or_spec
language/redo_spec
language/rescue_spec
language/retry_spec
language/return_spec
language/send_spec
language/singleton_class_spec
language/super_spec
language/unless_spec
language/until_spec
language/while_spec
language/yield_spec

core/hash/allocate_spec
core/hash/assoc_spec
core/hash/clear_spec
@@ -192,6 +169,58 @@ core/hash/update_spec
core/hash/value_spec
core/hash/values_at_spec
core/hash/values_spec

core/kernel/comparison_spec

core/matchdata/to_a_spec

core/range/begin_spec
core/range/end_spec

core/symbol/to_proc_spec

core/class/new_spec

core/time/mktime_spec
core/time/day_spec
core/time/monday_spec
core/time/tuesday_spec
core/time/wednesday_spec
core/time/thursday_spec
core/time/friday_spec
core/time/saturday_spec

language/alias_spec
language/and_spec
language/array_spec
language/break_spec
language/case_spec
language/class_spec
language/class_variable_spec
language/def_spec
language/defined_spec
language/ensure_spec
language/if_spec
language/hash_spec
language/literal_lambda_spec
language/loop_spec
language/metaclass_spec
language/module_spec
language/next_spec
language/not_spec
language/or_spec
language/redo_spec
language/rescue_spec
language/retry_spec
language/return_spec
language/send_spec
language/singleton_class_spec
language/super_spec
language/unless_spec
language/until_spec
language/while_spec
language/yield_spec

library/singleton/allocate_spec
library/singleton/clone_spec
library/singleton/dump_spec
@@ -200,19 +229,24 @@ library/singleton/instance_spec
library/singleton/instantiate_spec
library/singleton/load_spec
library/singleton/new_spec

library/stringscanner/check_spec
library/stringscanner/element_reference_spec
library/stringscanner/get_byte_spec
library/stringscanner/pos_spec
library/stringscanner/scan_spec
library/stringscanner/skip_spec

library/observer/add_observer_spec
library/observer/count_observers_spec
library/observer/delete_observer_spec
library/observer/delete_observers_spec
library/observer/notify_observers_spec

library/delegate/delegator/send_spec

library/erb/util/html_escape_spec

library/set/initialize_spec
library/set/add_spec
library/set/append_spec
@@ -228,22 +262,8 @@ library/set/merge_spec
library/set/size_spec
library/set/to_a_spec
library/set/enumerable/to_set_spec
core/kernel/comparison_spec
core/matchdata/to_a_spec
core/range/begin_spec
core/range/end_spec
core/symbol/to_proc_spec
core/class/new_spec
core/time/mktime_spec
core/time/day_spec
core/time/monday_spec
core/time/tuesday_spec
core/time/wednesday_spec
core/time/thursday_spec
core/time/friday_spec
core/time/saturday_spec

library/pathname/new_spec
library/pathname/equal_value_spec
library/pathname/absolute_spec
library/pathname/relative_spec
language/defined_spec