+ case O_ASRT:
+ if (!opt('t'))
+ return;
+ if (argc == 0 || argc > 2) {
+ error("Assert expects one or two arguments");
+ return;
+ }
+ putleaf( P2ICON , 0 , 0
+ , ADDTYPE( P2FTN | P2INT , P2PTR ) , "_ASRT" );
+ ap = stkrval(argv[1], NIL , RREQ );
+ if (ap == NIL)
+ return;
+ if (isnta(ap, "b"))
+ error("Assert expression must be Boolean, not %ss", nameof(ap));
+ if (argc == 2) {
+ /*
+ * Optional second argument is a string specifying
+ * why the assertion failed.
+ */
+ al = argv[2];
+ al = stkrval(al[1], NIL , RREQ );
+ if (al == NIL)
+ return;
+ if (classify(al) != TSTR) {
+ error("Second argument to assert must be a string, not %s", nameof(al));
+ return;
+ }
+ } else {
+ putleaf( P2ICON , 0 , 0 , P2INT , 0 );
+ }
+ putop( P2LISTOP , P2INT );
+ putop( P2CALL , P2INT );
+ putdot( filename , line );
+ return;
+