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