@@ -112,86 +112,7 @@ explicit String(NSString *s)
112
112
{}
113
113
#endif
114
114
};
115
-
116
- struct Array {
117
- // Keep the details of Array's implementation opaque to the runtime.
118
- const void *x;
119
- };
120
-
121
- struct PlaygroundQuickLook {
122
- struct RawData {
123
- Array Data;
124
- String Type;
125
- };
126
- struct Rectangle {
127
- double x, y, w, h;
128
- };
129
- struct Point {
130
- double x, y;
131
- };
132
- struct Interval {
133
- int64_t loc,len;
134
- };
135
-
136
- union {
137
- String TextOrURL;
138
- int64_t Int;
139
- uint64_t UInt;
140
- float Float;
141
- double Double;
142
- Any Any;
143
- RawData Raw;
144
- Rectangle Rect;
145
- Point PointOrSize;
146
- bool Logical;
147
- Interval Range;
148
- };
149
- enum class Tag : uint8_t {
150
- Text,
151
- Int,
152
- UInt,
153
- Float,
154
- Double,
155
- Image,
156
- Sound,
157
- Color,
158
- BezierPath,
159
- AttributedString,
160
- Rectangle,
161
- Point,
162
- Size,
163
- Logical,
164
- Range,
165
- View,
166
- Sprite,
167
- URL,
168
- Raw,
169
- } Kind;
170
- };
171
-
172
- struct OptionalPlaygroundQuickLook {
173
- union {
174
- struct {
175
- union {
176
- String TextOrURL;
177
- int64_t Int;
178
- uint64_t UInt;
179
- float Float;
180
- double Double;
181
- Any Any;
182
- PlaygroundQuickLook::RawData Raw;
183
- PlaygroundQuickLook::Rectangle Rect;
184
- PlaygroundQuickLook::Point PointOrSize;
185
- bool Logical;
186
- PlaygroundQuickLook::Interval Range;
187
- };
188
- PlaygroundQuickLook::Tag Kind;
189
- bool isNone;
190
- } optional;
191
- PlaygroundQuickLook payload;
192
- };
193
- };
194
-
115
+
195
116
// / A Mirror witness table for use by MagicMirror.
196
117
struct MirrorWitnessTable ;
197
118
@@ -980,99 +901,30 @@ void swift_ObjCMirror_subscript(String *outString,
980
901
}
981
902
982
903
SWIFT_RUNTIME_STDLIB_INTERFACE
983
- extern " C" void
984
- swift_ClassMirror_quickLookObject (OptionalPlaygroundQuickLook &result,
985
- HeapObject *owner, const OpaqueValue *value,
904
+ extern " C" id
905
+ swift_ClassMirror_quickLookObject (HeapObject *owner, const OpaqueValue *value,
986
906
const Metadata *type) {
987
- memset (&result, 0 , sizeof (result));
988
-
989
907
id object = [*reinterpret_cast<const id *>(value) retain ];
990
908
swift_release (owner);
991
909
if ([object respondsToSelector: @selector (debugQuickLookObject )]) {
992
910
id quickLookObject = [object debugQuickLookObject ];
993
911
[quickLookObject retain ];
994
912
[object release ];
995
- object = quickLookObject;
913
+ return quickLookObject;
996
914
}
997
-
998
- // NSNumbers quick-look as integers or doubles, depending on type.
999
- if ([object isKindOfClass: [NSNumber class ]]) {
1000
- NSNumber *n = object;
1001
-
1002
- switch ([n objCType ][0 ]) {
1003
- case ' d' : // double
1004
- result.payload .Double = [n doubleValue ];
1005
- result.payload .Kind = PlaygroundQuickLook::Tag::Double;
1006
- break ;
1007
- case ' f' : // float
1008
- result.payload .Float = [n floatValue ];
1009
- result.payload .Kind = PlaygroundQuickLook::Tag::Float;
1010
- break ;
1011
-
1012
- case ' Q' : // unsigned long long
1013
- result.payload .UInt = [n unsignedLongLongValue ];
1014
- result.payload .Kind = PlaygroundQuickLook::Tag::UInt;
1015
- break ;
1016
915
1017
- // FIXME: decimals?
1018
- default :
1019
- result.payload .Int = [n longLongValue ];
1020
- result.payload .Kind = PlaygroundQuickLook::Tag::Int;
1021
- break ;
1022
- }
1023
-
1024
- [object release ];
1025
- result.optional .isNone = false ;
1026
- return ;
1027
- }
1028
-
1029
- // Various other framework types are used for rich representations.
1030
-
1031
- // / Store an ObjC reference into an Any.
1032
- auto initializeAnyWithTakeOfObject = [](Any &any, id obj) {
1033
- any.Type = swift_getObjCClassMetadata (_swift_getClass ((const void *) obj));
1034
- *reinterpret_cast <id *>(&any.Buffer ) = obj;
1035
- };
1036
-
1037
- if ([object isKindOfClass: NSClassFromString (@" NSAttributedString" )]) {
1038
- initializeAnyWithTakeOfObject (result.payload .Any , object);
1039
- result.payload .Kind = PlaygroundQuickLook::Tag::AttributedString;
1040
- result.optional .isNone = false ;
1041
- return ;
1042
- } else if ([object isKindOfClass: NSClassFromString (@" NSImage" )]
1043
- || [object isKindOfClass: NSClassFromString (@" UIImage" )]
1044
- || [object isKindOfClass: NSClassFromString (@" NSImageView" )]
1045
- || [object isKindOfClass: NSClassFromString (@" UIImageView" )]
1046
- || [object isKindOfClass: NSClassFromString (@" CIImage" )]
1047
- || [object isKindOfClass: NSClassFromString (@" NSBitmapImageRep" )]) {
1048
- initializeAnyWithTakeOfObject (result.payload .Any , object);
1049
- result.payload .Kind = PlaygroundQuickLook::Tag::Image;
1050
- result.optional .isNone = false ;
1051
- return ;
1052
- } else if ([object isKindOfClass: NSClassFromString (@" NSColor" )]
1053
- || [object isKindOfClass: NSClassFromString (@" UIColor" )]) {
1054
- initializeAnyWithTakeOfObject (result.payload .Any , object);
1055
- result.payload .Kind = PlaygroundQuickLook::Tag::Color;
1056
- result.optional .isNone = false ;
1057
- return ;
1058
- } else if ([object isKindOfClass: NSClassFromString (@" NSBezierPath" )]
1059
- || [object isKindOfClass: NSClassFromString (@" UIBezierPath" )]) {
1060
- initializeAnyWithTakeOfObject (result.payload .Any , object);
1061
- result.payload .Kind = PlaygroundQuickLook::Tag::BezierPath;
1062
- result.optional .isNone = false ;
1063
- return ;
1064
- } else if ([object isKindOfClass: [NSString class ]]) {
1065
- result.payload .TextOrURL = String ((NSString *)object);
1066
- [object release ];
1067
- result.payload .Kind = PlaygroundQuickLook::Tag::Text;
1068
- result.optional .isNone = false ;
1069
- return ;
1070
- }
1071
-
1072
- // Return none if we didn't get a suitable object.
916
+ return object;
917
+ }
918
+
919
+ SWIFT_RUNTIME_STDLIB_INTERFACE
920
+ extern " C" bool swift_isKind (id object, NSString *className) {
921
+ bool result = [object isKindOfClass: NSClassFromString (className)];
1073
922
[object release ];
1074
- result.optional .isNone = true ;
923
+ [className release ];
924
+
925
+ return result;
1075
926
}
927
+
1076
928
#endif
1077
929
1078
930
// -- MagicMirror implementation.
0 commit comments