TIP 501: string is dict

Login
FlightAware bounty program for improvements to Tcl and certain Tcl packages.
Author:         Sean Woods <yoda@etoyoc.com>
State:          Draft
Type:           Project
Vote:           Pending
Created:        12-Feb-2018
Post-History:
Keywords:       Tcl,string
Tcl-Version:    8.7

Abstract

This tip proposes the addition of an is dict test to the string ensemble. The command will return true if the value is a valid dict, and false otherwise.

Rationale

Currently the means to test of a string is a leaf node is to check if the string is a list and it's length is divisible by 2. The problem is that this requires 2 different calls from the interpreter, and generates a dict to list conversion for the most common case (namely that the value is, indeed, a dict.)

This tip proposes a shortcut in C to check to see if the internal representation is already a dict, and provide a shortcut for the most common case.

Implementation

A new branch has been added to the tcl fossil system tip-501

The crux of the implementation is adding "dict" to the IS ensemble:

case STR_IS_DICT:
/*
 * We ignore the strictness here, since empty strings are always
 * well-formed lists.
 */
int dresult, dsize;
dresult = Tcl_DictObjSize(NULL, objPtr, &dsize);
result = (dresult==TCL_OK) ? 1 : 0;
break;