MCPcopy Create free account
hub / github.com/OpenEndedGroup/Field2 / arrayLiteralType

Function arrayLiteralType

lib/web/tern/infer.js:1327–1356  ·  view source on GitHub ↗
(elements, scope, inner)

Source from the content-addressed store, hash-verified

1325 }
1326
1327 function arrayLiteralType(elements, scope, inner) {
1328 var tuple = elements.length > 1 && elements.length < 6
1329 if (tuple) {
1330 var homogenous = true, litType
1331 for (var i = 0; i < elements.length; i++) {
1332 var elt = elements[i]
1333 if (!elt)
1334 tuple = false
1335 else if (elt.type != "Literal" || (litType && litType != typeof elt.value))
1336 homogenous = false
1337 else
1338 litType = typeof elt.value
1339 }
1340 if (homogenous) tuple = false
1341 }
1342
1343 if (tuple) {
1344 var types = []
1345 for (var i = 0; i < elements.length; ++i)
1346 types.push(inner(elements[i], scope))
1347 return new Arr(types)
1348 } else if (elements.length < 2) {
1349 return new Arr(elements[0] && inner(elements[0], scope))
1350 } else {
1351 var eltVal = new AVal
1352 for (var i = 0; i < elements.length; i++)
1353 if (elements[i]) inner(elements[i], scope).propagate(eltVal)
1354 return new Arr(eltVal)
1355 }
1356 }
1357
1358 function ret(f) {
1359 return function(node, scope, out, name) {

Callers 1

infer.jsFile · 0.85

Calls 3

innerFunction · 0.85
propagateMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected