Diff
Not logged in

Differences From Artifact [d97f8b0c8b]:

To Artifact [c6776a4821]:


543
544
545
546
547
548
549
550
551
552
553

554
555
556
557
558
559
560
561
562

563
564
565
566
567
568
569

    /*
     * Initialize bytes to start of the object's string rep if the caller
     * didn't pass anything else.
     */

    if (bytes == NULL) {
	if (interp == NULL && endPtrPtr == NULL) {
	    if (TclHasInternalRep(objPtr, &tclDictType)) {
		/* A dict can never be a (single) number */
		return TCL_ERROR;

	    }
	    if (TclHasInternalRep(objPtr, &tclListType)) {
		Tcl_Size length;
		/* A list can only be a (single) number if its length == 1 */
		TclListObjLength(NULL, objPtr, &length);
		if (length != 1) {
		    return TCL_ERROR;
		}
	    }

	}
	bytes = TclGetString(objPtr);
    }

    p = bytes;
    len = numBytes;
    acceptPoint = p;







<
|
|
|
>
|
|
<
<
<
|
|
<
<
>







543
544
545
546
547
548
549

550
551
552
553
554
555



556
557


558
559
560
561
562
563
564
565

    /*
     * Initialize bytes to start of the object's string rep if the caller
     * didn't pass anything else.
     */

    if (bytes == NULL) {

	if (TclHasInternalRep(objPtr, &tclDictType)) {
	    /* A dict can never be a (single) number */
	    status = TCL_ERROR;
	    goto formaterr;
	}
	Tcl_ObjTypeLengthProc *lengthProc = TclObjTypeHasProc(objPtr, lengthProc);



	if (lengthProc && lengthProc(objPtr) > 1) {
	    status = TCL_ERROR;


	    goto formaterr;
	}
	bytes = TclGetString(objPtr);
    }

    p = bytes;
    len = numBytes;
    acceptPoint = p;
1519
1520
1521
1522
1523
1524
1525

1526
1527
1528
1529
1530
1531
1532
1533

1534

1535
1536
1537
1538
1539
1540
1541
	}
    }

    /*
     * Format an error message when an invalid number is encountered.
     */


    if (status != TCL_OK) {
	if (interp != NULL) {
	    Tcl_Obj *msg = Tcl_ObjPrintf("expected %s but got ",
		    expected);
	    Tcl_Size argc;
	    const char **argv;
	    if ((TclMaxListLength(bytes, TCL_INDEX_NONE, NULL) > 1)
		    && Tcl_SplitList(NULL, bytes, &argc, &argv) == TCL_OK) {

		Tcl_Free(argv);

		Tcl_AppendToObj(msg, "a list", -1);
	    } else {
		Tcl_AppendToObj(msg, "\"", -1);
		Tcl_AppendLimitedToObj(msg, bytes, numBytes, 50, "");
		Tcl_AppendToObj(msg, "\"", -1);
	    }
	    Tcl_SetObjResult(interp, msg);







>





|
|
|
>
|
>







1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
	}
    }

    /*
     * Format an error message when an invalid number is encountered.
     */

formaterr:
    if (status != TCL_OK) {
	if (interp != NULL) {
	    Tcl_Obj *msg = Tcl_ObjPrintf("expected %s but got ",
		    expected);
	    Tcl_Size argc;
	    const char **argv = NULL;
	    if (!bytes || ((TclMaxListLength(bytes, TCL_INDEX_NONE, NULL) > 1)
		    && Tcl_SplitList(NULL, bytes, &argc, &argv) == TCL_OK)) {
		if (argv) {
		    Tcl_Free(argv);
		}
		Tcl_AppendToObj(msg, "a list", -1);
	    } else {
		Tcl_AppendToObj(msg, "\"", -1);
		Tcl_AppendLimitedToObj(msg, bytes, numBytes, 50, "");
		Tcl_AppendToObj(msg, "\"", -1);
	    }
	    Tcl_SetObjResult(interp, msg);