Skip to content

Commit c27629f

Browse files
rockwyc992Martin Verzilli
authored andcommitted
Compiler: fixed VirtualMetaclassType#metaclass (#4375)
Compiler: fixed VirtualMetaclassType#metaclass Fixes #4374
1 parent 08c6e8f commit c27629f

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

spec/compiler/codegen/is_a_spec.cr

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,4 +715,16 @@ describe "Codegen: is_a?" do
715715
1.to_s.is_a?(B)
716716
)).to_b.should be_true
717717
end
718+
719+
it "says true for Class.is_a?(Class.class) (#4374)" do
720+
run("
721+
Class.is_a?(Class.class)
722+
").to_b.should be_true
723+
end
724+
725+
it "says true for Class.is_a?(Class.class.class) (#4374)" do
726+
run("
727+
Class.is_a?(Class.class.class)
728+
").to_b.should be_true
729+
end
718730
end

src/compiler/crystal/program.cr

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ module Crystal
179179
string.declare_instance_var("@c", uint8)
180180

181181
types["Class"] = klass = @class = MetaclassType.new(self, object, value, "Class")
182-
klass.metaclass = klass
183182
klass.allowed_in_generics = false
184183

185184
types["Struct"] = struct_t = @struct_t = NonGenericClassType.new self, self, "Struct", value

src/compiler/crystal/types.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2900,6 +2900,10 @@ module Crystal
29002900
super(program)
29012901
end
29022902

2903+
def metaclass
2904+
program.class_type
2905+
end
2906+
29032907
def parents
29042908
@parents ||= [instance_type.superclass.try(&.metaclass) || program.class_type] of Type
29052909
end

0 commit comments

Comments
 (0)