@@ -1303,10 +1303,7 @@ public abstract static class GetShapeFlagsNode extends Node {
13031303 * }
13041304 * }
13051305 *
1306- * Note that {@link HasShapeFlagsNode} is more convenient for that particular pattern.
1307- *
13081306 * @return shape flags
1309- * @see HasShapeFlagsNode
13101307 * @see SetShapeFlagsNode
13111308 * @see Shape.Builder#shapeFlags(int)
13121309 * @see Shape#getFlags()
@@ -1344,85 +1341,6 @@ public static GetShapeFlagsNode getUncached() {
13441341 }
13451342 }
13461343
1347- /**
1348- * Checks if the language-specific object shape flags include the given flags.
1349- *
1350- * @see #execute(DynamicObject, int)
1351- * @since 25.1
1352- */
1353- @ ImportStatic (DynamicObject .class )
1354- @ GeneratePackagePrivate
1355- @ GenerateUncached
1356- @ GenerateInline (false )
1357- public abstract static class HasShapeFlagsNode extends Node {
1358-
1359- HasShapeFlagsNode () {
1360- }
1361-
1362- // @formatter:off
1363- /**
1364- * Checks if the language-specific object shape flags contains the given flags, previously set using
1365- * {@link SetShapeFlagsNode} or
1366- * {@link Shape.Builder#shapeFlags(int)}. If no shape flags were explicitly set, the default of
1367- * false is returned.
1368- *
1369- * These flags may be used to tag objects that possess characteristics that need to be queried
1370- * efficiently on fast and slow paths. For example, they can be used to mark objects as frozen.
1371- *
1372- * <h3>Usage example:</h3>
1373- *
1374- * {@snippet :
1375- * @ExportMessage
1376- * Object writeMember(String member, Object value,
1377- * @Cached DynamicObject.HasShapeFlagsNode hasShapeFlagsNode,
1378- * @Cached DynamicObject.PutNode putNode)
1379- * throws UnsupportedMessageException {
1380- * if (hasShapeFlagsNode.execute(receiver, FROZEN)) {
1381- * throw UnsupportedMessageException.create();
1382- * }
1383- * putNode.execute(this, member, value);
1384- * }
1385- * }
1386- *
1387- * @return whether the shape flags contain (all of) the given flags
1388- * @see GetShapeFlagsNode
1389- * @see SetShapeFlagsNode
1390- * @see Shape.Builder#shapeFlags(int)
1391- * @see Shape#getFlags()
1392- */
1393- // @formatter:on
1394- public abstract boolean execute (DynamicObject receiver , int flags );
1395-
1396- @ SuppressWarnings ("unused" )
1397- @ Specialization (guards = "shape == cachedShape" , limit = "1" )
1398- static boolean doCached (DynamicObject receiver , int flags ,
1399- @ Bind ("receiver.getShape()" ) Shape shape ,
1400- @ Cached ("shape" ) Shape cachedShape ) {
1401- return (cachedShape .getFlags () & flags ) == flags ;
1402- }
1403-
1404- @ Specialization (replaces = "doCached" )
1405- static boolean doGeneric (DynamicObject receiver , int flags ) {
1406- return (receiver .getShape ().getFlags () & flags ) == flags ;
1407- }
1408-
1409- /**
1410- * @since 25.1
1411- */
1412- @ NeverDefault
1413- public static HasShapeFlagsNode create () {
1414- return DynamicObjectFactory .HasShapeFlagsNodeGen .create ();
1415- }
1416-
1417- /**
1418- * @since 25.1
1419- */
1420- @ NeverDefault
1421- public static HasShapeFlagsNode getUncached () {
1422- return DynamicObjectFactory .HasShapeFlagsNodeGen .getUncached ();
1423- }
1424- }
1425-
14261344 /**
14271345 * Sets language-specific object shape flags.
14281346 *
0 commit comments