Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix compare enums, fixed #3845 #3847

Merged
merged 1 commit into from Jan 6, 2017
Merged

Conversation

kostya
Copy link
Contributor

@kostya kostya commented Jan 6, 2017

No description provided.

@kostya
Copy link
Contributor Author

kostya commented Jan 6, 2017

actually, may be someone want to compare with int, and it would always false. which is hard to debug later. but don't know how to better fix it.

@asterite
Copy link
Member

asterite commented Jan 6, 2017

Thanks!

I think there's actually a compiler bug involving enums and the self restriction, but for now let's fix this particular bug :-)

@asterite asterite merged commit 1e7f46e into crystal-lang:master Jan 6, 2017
makenowjust added a commit to makenowjust/crystal that referenced this pull request Feb 2, 2017
Ref: crystal-lang#3847

Now, we can get a compile error with such a code:

    module Foo(T)
      def foo(x : T)
        x
      end
    end

    abstract struct Bar
      include Foo(self)
    end

    struct Baz1 < Bar
    end

    struct Baz2 < Bar
    end

    Baz1.new.foo Baz2.new # => no overload matches 'Baz1#foo' with type Baz2

This commit adds `lazy_self` parameter to `lookup_type`. When `lazy_self`
is `true`, `lookup_type` keeps `self` in generics type. It is used to
look up type for `include` and `extend`.
makenowjust added a commit to makenowjust/crystal that referenced this pull request Feb 2, 2017
Ref: crystal-lang#3847

Now, we can get a compile error with such a code:

    module Foo(T)
      def foo(x : T)
        x
      end
    end

    abstract struct Bar
      include Foo(self)
    end

    struct Baz1 < Bar
    end

    struct Baz2 < Bar
    end

    Baz1.new.foo Baz2.new # => no overload matches 'Baz1#foo' with type Baz2

This commit adds `lazy_self` parameter to `lookup_type`. When `lazy_self`
is `true`, `lookup_type` keeps `self` in generics type. It is used to
look up type for `include` and `extend`.
makenowjust added a commit to makenowjust/crystal that referenced this pull request Feb 4, 2017
Ref: crystal-lang#3847

Now, we can get a compile error with such a code:

    module Foo(T)
      def foo(x : T)
        x
      end
    end

    abstract struct Bar
      include Foo(self)
    end

    struct Baz1 < Bar
    end

    struct Baz2 < Bar
    end

    Baz1.new.foo Baz2.new # => no overload matches 'Baz1#foo' with type Baz2

This commit adds `lazy_self` parameter to `lookup_type`. When `lazy_self`
is `true`, `lookup_type` keeps `self` in generics type. It is used to
look up type for `include` and `extend`.
makenowjust added a commit to makenowjust/crystal that referenced this pull request Feb 10, 2017
Ref: crystal-lang#3847

Now, we can get a compile error with such a code:

    module Foo(T)
      def foo(x : T)
        x
      end
    end

    abstract struct Bar
      include Foo(self)
    end

    struct Baz1 < Bar
    end

    struct Baz2 < Bar
    end

    Baz1.new.foo Baz2.new # => no overload matches 'Baz1#foo' with type Baz2

This commit adds `lazy_self` parameter to `lookup_type`. When `lazy_self`
is `true`, `lookup_type` keeps `self` in generics type. It is used to
look up type for `include` and `extend`.
bcardiff pushed a commit to makenowjust/crystal that referenced this pull request Mar 23, 2017
Ref: crystal-lang#3847

Now, we can get a compile error with such a code:

    module Foo(T)
      def foo(x : T)
        x
      end
    end

    abstract struct Bar
      include Foo(self)
    end

    struct Baz1 < Bar
    end

    struct Baz2 < Bar
    end

    Baz1.new.foo Baz2.new # => no overload matches 'Baz1#foo' with type Baz2

This commit adds `lazy_self` parameter to `lookup_type`. When `lazy_self`
is `true`, `lookup_type` keeps `self` in generics type. It is used to
look up type for `include` and `extend`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants