(function() { var domStatus = document.getElementById("status"); var domSectNav = document.getElementById("sectNav"); var domListNav = document.getElementById("listNav"); var domSectPkgs = document.getElementById("sectPkgs"); var domListPkgs = document.getElementById("listPkgs"); var domSectTypes = document.getElementById("sectTypes"); var domListTypes = document.getElementById("listTypes"); var domSectNamespaces = document.getElementById("sectNamespaces"); var domListNamespaces = document.getElementById("listNamespaces"); var domSectErrSets = document.getElementById("sectErrSets"); var domListErrSets = document.getElementById("listErrSets"); var domSectFns = document.getElementById("sectFns"); var domListFns = document.getElementById("listFns"); var domSectFields = document.getElementById("sectFields"); var domListFields = document.getElementById("listFields"); var domSectGlobalVars = document.getElementById("sectGlobalVars"); var domListGlobalVars = document.getElementById("listGlobalVars"); var domSectValues = document.getElementById("sectValues"); var domListValues = document.getElementById("listValues"); var domFnProto = document.getElementById("fnProto"); var domFnProtoCode = document.getElementById("fnProtoCode"); var domSectParams = document.getElementById("sectParams"); var domListParams = document.getElementById("listParams"); var domTldDocs = document.getElementById("tldDocs"); var domSectFnErrors = document.getElementById("sectFnErrors"); var domListFnErrors = document.getElementById("listFnErrors"); var domTableFnErrors = document.getElementById("tableFnErrors"); var domFnErrorsAnyError = document.getElementById("fnErrorsAnyError"); var domFnExamples = document.getElementById("fnExamples"); var domListFnExamples = document.getElementById("listFnExamples"); var domFnNoExamples = document.getElementById("fnNoExamples"); var domDeclNoRef = document.getElementById("declNoRef"); var domSearch = document.getElementById("search"); var domSectSearchResults = document.getElementById("sectSearchResults"); var domListSearchResults = document.getElementById("listSearchResults"); var domSectSearchNoResults = document.getElementById("sectSearchNoResults"); var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink"); var domSectInfo = document.getElementById("sectInfo"); var domTdTarget = document.getElementById("tdTarget"); var domTdZigVer = document.getElementById("tdZigVer"); var domHdrName = document.getElementById("hdrName"); var domHelpModal = document.getElementById("helpDialog"); var searchTimer = null; var searchTrimResults = true; var escapeHtmlReplacements = { "&": "&", '"': """, "<": "<", ">": ">" }; var typeKinds = indexTypeKinds(); var typeTypeId = findTypeTypeId(); var pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 }; var tokenKinds = { Keyword: 'tok-kw', String: 'tok-str', Builtin: 'tok-builtin', Comment: 'tok-comment', Function: 'tok-fn', Null: 'tok-null', Number: 'tok-number', Type: 'tok-type', }; // for each package, is an array with packages to get to this one var canonPkgPaths = computeCanonicalPackagePaths(); // for each decl, is an array with {declNames, pkgNames} to get to this one var canonDeclPaths = null; // lazy; use getCanonDeclPath // for each type, is an array with {declNames, pkgNames} to get to this one var canonTypeDecls = null; // lazy; use getCanonTypeDecl var curNav = { // each element is a package name, e.g. @import("a") then within there @import("b") // starting implicitly from root package pkgNames: [], // same as above except actual packages, not names pkgObjs: [], // Each element is a decl name, `a.b.c`, a is 0, b is 1, c is 2, etc. // empty array means refers to the package itself declNames: [], // these will be all types, except the last one may be a type or a decl declObjs: [], // (a, b, c, d) comptime call; result is the value the docs refer to callName: null, }; var curNavSearch = ""; var curSearchIndex = -1; var imFeelingLucky = false; var rootIsStd = detectRootIsStd(); // map of decl index to list of non-generic fn indexes var nodesToFnsMap = indexNodesToFns(); // map of decl index to list of comptime fn calls var nodesToCallsMap = indexNodesToCalls(); domSearch.addEventListener('keydown', onSearchKeyDown, false); domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false); window.addEventListener('hashchange', onHashChange, false); window.addEventListener('keydown', onWindowKeyDown, false); onHashChange(); function renderTitle() { var list = curNav.pkgNames.concat(curNav.declNames); var suffix = " - Zig"; if (list.length === 0) { if (rootIsStd) { document.title = "std" + suffix; } else { document.title = zigAnalysis.params.rootName + suffix; } } else { document.title = list.join('.') + suffix; } } function render() { domStatus.classList.add("hidden"); domFnProto.classList.add("hidden"); domSectParams.classList.add("hidden"); domTldDocs.classList.add("hidden"); domSectPkgs.classList.add("hidden"); domSectTypes.classList.add("hidden"); domSectNamespaces.classList.add("hidden"); domSectErrSets.classList.add("hidden"); domSectFns.classList.add("hidden"); domSectFields.classList.add("hidden"); domSectSearchResults.classList.add("hidden"); domSectSearchNoResults.classList.add("hidden"); domSectSearchAllResultsLink.classList.add("hidden"); domSectInfo.classList.add("hidden"); domHdrName.classList.add("hidden"); domSectNav.classList.add("hidden"); domSectFnErrors.classList.add("hidden"); domFnExamples.classList.add("hidden"); domFnNoExamples.classList.add("hidden"); domDeclNoRef.classList.add("hidden"); domFnErrorsAnyError.classList.add("hidden"); domTableFnErrors.classList.add("hidden"); domSectGlobalVars.classList.add("hidden"); domSectValues.classList.add("hidden"); renderTitle(); renderInfo(); renderPkgList(); if (curNavSearch !== "") { return renderSearch(); } var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg]; var pkg = rootPkg; curNav.pkgObjs = [pkg]; for (var i = 0; i < curNav.pkgNames.length; i += 1) { var childPkg = zigAnalysis.packages[pkg.table[curNav.pkgNames[i]]]; if (childPkg == null) { return render404(); } pkg = childPkg; curNav.pkgObjs.push(pkg); } var decl = zigAnalysis.types[pkg.main]; curNav.declObjs = [decl]; for (var i = 0; i < curNav.declNames.length; i += 1) { var childDecl = findSubDecl(decl, curNav.declNames[i]); if (childDecl == null) { return render404(); } var container = getDeclContainerType(childDecl); if (container == null) { if (i + 1 === curNav.declNames.length) { curNav.declObjs.push(childDecl); break; } else { return render404(); } } decl = container; curNav.declObjs.push(decl); } renderNav(); var lastDecl = curNav.declObjs[curNav.declObjs.length - 1]; if (lastDecl.pubDecls != null) { renderContainer(lastDecl); } if (lastDecl.kind == null) { return renderUnknownDecl(lastDecl); } else if (lastDecl.kind === 'var') { return renderVar(lastDecl); } else if (lastDecl.kind === 'const' && lastDecl.type != null) { var typeObj = zigAnalysis.types[lastDecl.type]; if (typeObj.kind === typeKinds.Fn) { return renderFn(lastDecl); } else { return renderValue(lastDecl); } } else { renderType(lastDecl); } } function renderUnknownDecl(decl) { domDeclNoRef.classList.remove("hidden"); var docs = zigAnalysis.astNodes[decl.src].docs; if (docs != null) { domTldDocs.innerHTML = markdown(docs); } else { domTldDocs.innerHTML = '
There are no doc comments for this declaration.
'; } domTldDocs.classList.remove("hidden"); } function typeIsErrSet(typeIndex) { var typeObj = zigAnalysis.types[typeIndex]; return typeObj.kind === typeKinds.ErrorSet; } function typeIsStructWithNoFields(typeIndex) { var typeObj = zigAnalysis.types[typeIndex]; if (typeObj.kind !== typeKinds.Struct) return false; return typeObj.fields == null || typeObj.fields.length === 0; } function typeIsGenericFn(typeIndex) { var typeObj = zigAnalysis.types[typeIndex]; if (typeObj.kind !== typeKinds.Fn) { return false; } return typeObj.generic; } function renderFn(fnDecl) { domFnProtoCode.innerHTML = typeIndexName(fnDecl.type, true, true, fnDecl); var docsSource = null; var srcNode = zigAnalysis.astNodes[fnDecl.src]; if (srcNode.docs != null) { docsSource = srcNode.docs; } var typeObj = zigAnalysis.types[fnDecl.type]; renderFnParamDocs(fnDecl, typeObj); var errSetTypeIndex = null; if (typeObj.ret != null) { var retType = zigAnalysis.types[typeObj.ret]; if (retType.kind === typeKinds.ErrorSet) { errSetTypeIndex = typeObj.ret; } else if (retType.kind === typeKinds.ErrorUnion) { errSetTypeIndex = retType.err; } } if (errSetTypeIndex != null) { var errSetType = zigAnalysis.types[errSetTypeIndex]; renderErrorSet(errSetType); } var fnObj = zigAnalysis.fns[fnDecl.value]; var protoSrcIndex = fnObj.src; if (typeIsGenericFn(fnDecl.type)) { var instantiations = nodesToFnsMap[protoSrcIndex]; var calls = nodesToCallsMap[protoSrcIndex]; if (instantiations == null && calls == null) { domFnNoExamples.classList.remove("hidden"); } else if (calls != null) { if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls); if (fnObj.combined != null) renderContainer(fnObj.combined); var domListFnExamplesFragment = createDomListFragment(calls.length, ''); for (var callI = 0; callI < calls.length; callI += 1) { var liDom = domListFnExamplesFragment.children[callI]; liDom.innerHTML = getCallHtml(fnDecl, calls[callI]); } domListFnExamples.innerHTML = ""; domListFnExamples.appendChild(domListFnExamplesFragment); domFnExamples.classList.remove("hidden"); } else if (instantiations != null) { // TODO } } else { domFnExamples.classList.add("hidden"); domFnNoExamples.classList.add("hidden"); } var protoSrcNode = zigAnalysis.astNodes[protoSrcIndex]; if (docsSource == null && protoSrcNode != null && protoSrcNode.docs != null) { docsSource = protoSrcNode.docs; } if (docsSource != null) { domTldDocs.innerHTML = markdown(docsSource); domTldDocs.classList.remove("hidden"); } domFnProto.classList.remove("hidden"); } function renderFnParamDocs(fnDecl, typeObj) { var docCount = 0; var fnObj = zigAnalysis.fns[fnDecl.value]; var fnNode = zigAnalysis.astNodes[fnObj.src]; var fields = fnNode.fields; var isVarArgs = fnNode.varArgs; for (var i = 0; i < fields.length; i += 1) { var field = fields[i]; var fieldNode = zigAnalysis.astNodes[field]; if (fieldNode.docs != null) { docCount += 1; } } if (docCount == 0) { return; } var domListParamsFragment = createDomListFragment(docCount, ''); var domIndex = 0; for (var i = 0; i < fields.length; i += 1) { var field = fields[i]; var fieldNode = zigAnalysis.astNodes[field]; if (fieldNode.docs == null) { continue; } var divDom = domListParamsFragment.children[domIndex]; domIndex += 1; var argTypeIndex = typeObj.args[i]; var html = '' + escapeHtml(fieldNode.name) + ": ";
if (isVarArgs && i === typeObj.args.length - 1) {
html += '...';
} else if (argTypeIndex != null) {
html += typeIndexName(argTypeIndex, true, true);
} else {
html += 'var';
}
html += ',
';
var docs = fieldNode.docs;
if (docs != null) {
html += markdown(docs);
}
divDom.innerHTML = html;
}
domListParams.innerHTML = "";
domListParams.appendChild(domListParamsFragment);
domSectParams.classList.remove("hidden");
}
function renderNav() {
var len = curNav.pkgNames.length + curNav.declNames.length;
var domListNavFragment = createDomListFragment(len, '' + escapeHtml(fieldNode.name); if (container.kind === typeKinds.Enum) { html += ' = ' + field + ''; } else { html += ": "; if (typeof(field) === 'object') { html += 'var'; } else { html += typeIndexName(field, true, true); } } html += ',
// [{INLINE}]({URL}) :
//  :
// [[std;format.fmt]] : (inner link)
const formats = [
{
marker: "**",
tag: "strong",
},
{
marker: "~~",
tag: "s",
},
{
marker: "__",
tag: "u",
},
{
marker: "*",
tag: "em",
}
];
// Links, images and inner links don't use the same marker to wrap their content.
const linksFormat = [
{
prefix: "[",
regex: /\[([^\]]*)\]\(([^\)]*)\)/,
urlIndex: 2, // Index in the match that contains the link URL
textIndex: 1 // Index in the match that contains the link text
},
{
prefix: "h",
regex: /http[s]?:\/\/[^\s]+/,
urlIndex: 0,
textIndex: 0
}
];
const stack = [];
var innerHTML = "";
var currentRun = "";
function flushRun() {
if (currentRun != "") {
innerHTML += escapeHtml(currentRun);
}
currentRun = "";
}
var parsing_code = false;
var codetag = "";
var in_code = false;
for (var i = 0; i < innerText.length; i++) {
if (parsing_code && in_code) {
if (innerText.substr(i, codetag.length) == codetag) {
// remove leading and trailing whitespace if string both starts and ends with one.
if (currentRun[0] == " " && currentRun[currentRun.length - 1] == " ") {
currentRun = currentRun.substr(1, currentRun.length - 2);
}
flushRun();
i += codetag.length - 1;
in_code = false;
parsing_code = false;
innerHTML += "
";
codetag = "";
} else {
currentRun += innerText[i];
}
continue;
}
if (innerText[i] == "`") {
flushRun();
if (!parsing_code) {
innerHTML += "";
}
parsing_code = true;
codetag += "`";
continue;
}
if (parsing_code) {
currentRun += innerText[i];
in_code = true;
} else {
var foundMatches = false;
for (var j = 0; j < linksFormat.length; j++) {
const linkFmt = linksFormat[j];
if (linkFmt.prefix == innerText[i]) {
var remaining = innerText.substring(i);
var matches = remaining.match(linkFmt.regex);
if (matches) {
flushRun();
innerHTML += ' ' + matches[linkFmt.textIndex] + ' ';
i += matches[0].length; // Skip the fragment we just consumed
foundMatches = true;
break;
}
}
}
if (foundMatches) {
continue;
}
var any = false;
for (var idx = (stack.length > 0 ? -1 : 0); idx < formats.length; idx++) {
const fmt = idx >= 0 ? formats[idx] : stack[stack.length - 1];
if (innerText.substr(i, fmt.marker.length) == fmt.marker) {
flushRun();
if (stack[stack.length - 1] == fmt) {
stack.pop();
innerHTML += "" + fmt.tag + ">";
} else {
stack.push(fmt);
innerHTML += "<" + fmt.tag + ">";
}
i += fmt.marker.length - 1;
any = true;
break;
}
}
if (!any) {
currentRun += innerText[i];
}
}
}
flushRun();
while (stack.length > 0) {
const fmt = stack.pop();
innerHTML += "" + fmt.tag + ">";
}
return innerHTML;
}
var html = "";
for (var line_no = 0; line_no < lines.length; line_no++) {
const line = lines[line_no];
function previousLineIs(type) {
if (line_no > 0) {
return (lines[line_no - 1].type == type);
} else {
return false;
}
}
function nextLineIs(type) {
if (line_no < (lines.length - 1)) {
return (lines[line_no + 1].type == type);
} else {
return false;
}
}
function getPreviousLineIndent() {
if (line_no > 0) {
return lines[line_no - 1].indent;
} else {
return 0;
}
}
function getNextLineIndent() {
if (line_no < (lines.length - 1)) {
return lines[line_no + 1].indent;
} else {
return 0;
}
}
switch (line.type) {
case "h1":
case "h2":
case "h3":
case "h4":
case "h5":
case "h6":
html += "<" + line.type + ">" + markdownInlines(line.text) + "" + line.type + ">\n";
break;
case "ul":
case "ol":
if (!previousLineIs("ul") || getPreviousLineIndent() < line.indent) {
html += "<" + line.type + ">\n";
}
html += "" + markdownInlines(line.text) + " \n";
if (!nextLineIs("ul") || getNextLineIndent() < line.indent) {
html += "" + line.type + ">\n";
}
break;
case "p":
if (!previousLineIs("p")) {
html += "\n";
}
html += markdownInlines(line.text) + "\n";
if (!nextLineIs("p")) {
html += "
\n";
}
break;
case "code":
if (!previousLineIs("code")) {
html += "";
}
html += escapeHtml(line.text) + "\n";
if (!nextLineIs("code")) {
html += "
\n";
}
break;
}
}
return html;
}
function activateSelectedResult() {
if (domSectSearchResults.classList.contains("hidden")) {
return;
}
var liDom = domListSearchResults.children[curSearchIndex];
if (liDom == null && domListSearchResults.children.length !== 0) {
liDom = domListSearchResults.children[0];
}
if (liDom != null) {
var aDom = liDom.children[0];
location.href = aDom.getAttribute("href");
curSearchIndex = -1;
}
domSearch.blur();
}
function onSearchKeyDown(ev) {
switch (getKeyString(ev)) {
case "Enter":
// detect if this search changes anything
var terms1 = getSearchTerms();
startSearch();
updateCurNav();
var terms2 = getSearchTerms();
// we might have to wait for onHashChange to trigger
imFeelingLucky = (terms1.join(' ') !== terms2.join(' '));
if (!imFeelingLucky) activateSelectedResult();
ev.preventDefault();
ev.stopPropagation();
return;
case "Esc":
domSearch.value = "";
domSearch.blur();
curSearchIndex = -1;
ev.preventDefault();
ev.stopPropagation();
startSearch();
return;
case "Up":
moveSearchCursor(-1);
ev.preventDefault();
ev.stopPropagation();
return;
case "Down":
moveSearchCursor(1);
ev.preventDefault();
ev.stopPropagation();
return;
default:
if (ev.shiftKey || ev.ctrlKey || ev.altKey) return;
curSearchIndex = -1;
ev.stopPropagation();
startAsyncSearch();
return;
}
}
function moveSearchCursor(dir) {
if (curSearchIndex < 0 || curSearchIndex >= domListSearchResults.children.length) {
if (dir > 0) {
curSearchIndex = -1 + dir;
} else if (dir < 0) {
curSearchIndex = domListSearchResults.children.length + dir;
}
} else {
curSearchIndex += dir;
}
if (curSearchIndex < 0) {
curSearchIndex = 0;
}
if (curSearchIndex >= domListSearchResults.children.length) {
curSearchIndex = domListSearchResults.children.length - 1;
}
renderSearchCursor();
}
function getKeyString(ev) {
var name;
var ignoreShift = false;
switch (ev.which) {
case 13:
name = "Enter";
break;
case 27:
name = "Esc";
break;
case 38:
name = "Up";
break;
case 40:
name = "Down";
break;
default:
ignoreShift = true;
name = (ev.key != null) ? ev.key : String.fromCharCode(ev.charCode || ev.keyCode);
}
if (!ignoreShift && ev.shiftKey) name = "Shift+" + name;
if (ev.altKey) name = "Alt+" + name;
if (ev.ctrlKey) name = "Ctrl+" + name;
return name;
}
function onWindowKeyDown(ev) {
switch (getKeyString(ev)) {
case "Esc":
if (!domHelpModal.classList.contains("hidden")) {
domHelpModal.classList.add("hidden");
ev.preventDefault();
ev.stopPropagation();
}
break;
case "s":
domSearch.focus();
domSearch.select();
ev.preventDefault();
ev.stopPropagation();
startAsyncSearch();
break;
case "?":
ev.preventDefault();
ev.stopPropagation();
showHelpModal();
break;
}
}
function showHelpModal() {
domHelpModal.classList.remove("hidden");
domHelpModal.style.left = (window.innerWidth / 2 - domHelpModal.clientWidth / 2) + "px";
domHelpModal.style.top = (window.innerHeight / 2 - domHelpModal.clientHeight / 2) + "px";
domHelpModal.focus();
}
function onClickSearchShowAllResults(ev) {
ev.preventDefault();
ev.stopPropagation();
searchTrimResults = false;
onHashChange();
}
function clearAsyncSearch() {
if (searchTimer != null) {
clearTimeout(searchTimer);
searchTimer = null;
}
}
function startAsyncSearch() {
clearAsyncSearch();
searchTrimResults = true;
searchTimer = setTimeout(startSearch, 10);
}
function startSearch() {
clearAsyncSearch();
var oldHash = location.hash;
var parts = oldHash.split("?");
var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value);
location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2);
}
function getSearchTerms() {
var list = curNavSearch.trim().split(/[ \r\n\t]+/);
list.sort();
return list;
}
function renderSearch() {
var matchedItems = [];
var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch);
var terms = getSearchTerms();
decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) {
var canonPath = getCanonDeclPath(declIndex);
if (canonPath == null) continue;
var decl = zigAnalysis.decls[declIndex];
var lastPkgName = canonPath.pkgNames[canonPath.pkgNames.length - 1];
var fullPathSearchText = lastPkgName + "." + canonPath.declNames.join('.');
var astNode = zigAnalysis.astNodes[decl.src];
var fileAndDocs = zigAnalysis.files[astNode.file];
if (astNode.docs != null) {
fileAndDocs += "\n" + astNode.docs;
}
var fullPathSearchTextLower = fullPathSearchText;
if (ignoreCase) {
fullPathSearchTextLower = fullPathSearchTextLower.toLowerCase();
fileAndDocs = fileAndDocs.toLowerCase();
}
var points = 0;
for (var termIndex = 0; termIndex < terms.length; termIndex += 1) {
var term = terms[termIndex];
// exact, case sensitive match of full decl path
if (fullPathSearchText === term) {
points += 4;
continue;
}
// exact, case sensitive match of just decl name
if (decl.name == term) {
points += 3;
continue;
}
// substring, case insensitive match of full decl path
if (fullPathSearchTextLower.indexOf(term) >= 0) {
points += 2;
continue;
}
if (fileAndDocs.indexOf(term) >= 0) {
points += 1;
continue;
}
continue decl_loop;
}
matchedItems.push({
decl: decl,
path: canonPath,
points: points,
});
}
if (matchedItems.length !== 0) {
matchedItems.sort(function(a, b) {
var cmp = operatorCompare(b.points, a.points);
if (cmp != 0) return cmp;
return operatorCompare(a.decl.name, b.decl.name);
});
var searchTrimmed = false
var searchTrimResultsMaxItems = 200
if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems)
searchTrimmed = true
}
var domListSearchResultsFragment = createDomListFragment(matchedItems.length, ' ');
for (var i = 0; i < matchedItems.length; i += 1) {
var liDom = domListSearchResultsFragment.children[i];
var aDom = liDom.children[0];
var match = matchedItems[i];
var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];
aDom.textContent = lastPkgName + "." + match.path.declNames.join('.');
aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames));
}
domListSearchResults.innerHTML = "";
domListSearchResults.appendChild(domListSearchResultsFragment);
domSectSearchResults.classList.remove("hidden");
if (searchTrimmed) {
domSectSearchAllResultsLink.classList.remove("hidden");
}
renderSearchCursor();
} else {
domSectSearchNoResults.classList.remove("hidden");
}
}
function renderSearchCursor() {
for (var i = 0; i < domListSearchResults.children.length; i += 1) {
var liDom = domListSearchResults.children[i];
if (curSearchIndex === i) {
liDom.classList.add("selected");
} else {
liDom.classList.remove("selected");
}
}
}
function indexNodesToFns() {
var map = {};
for (var i = 0; i < zigAnalysis.fns.length; i += 1) {
var fn = zigAnalysis.fns[i];
if (typeIsGenericFn(fn.type)) continue;
if (map[fn.src] == null) {
map[fn.src] = [i];
} else {
map[fn.src].push(i);
}
}
return map;
}
function indexNodesToCalls() {
var map = {};
for (var i = 0; i < zigAnalysis.calls.length; i += 1) {
var call = zigAnalysis.calls[i];
var fn = zigAnalysis.fns[call.fn];
if (map[fn.src] == null) {
map[fn.src] = [i];
} else {
map[fn.src].push(i);
}
}
return map;
}
function byNameProperty(a, b) {
return operatorCompare(a.name, b.name);
}
function clone(obj) {
var res = {};
for (var key in obj) {
res[key] = obj[key];
}
return res;
}
function firstObjectKey(obj) {
for (var key in obj) {
return key;
}
}
function token(value, tokenClass, wantHtml){
if(wantHtml){
return '' + value + '';
} else {
return value + '';
}
}
})();