use of com.google.javascript.jscomp.newtypes.JSType in project closure-compiler by google.
the class NTIScope method freezeScope.
void freezeScope() {
Preconditions.checkNotNull(this.declaredType, "No declared type for scope: %s", this.root);
unknownTypeNames = ImmutableSet.of();
// Alternatively, we could move this into NewTypeInference.initEdgeEnvs
for (Map.Entry<String, Namespace> entry : localNamespaces.entrySet()) {
String name = entry.getKey();
Namespace ns = entry.getValue();
if (ns instanceof NamespaceLit) {
constVars.add(name);
}
JSType t = ns.toJSType();
if (externs.containsKey(name)) {
externs.put(name, t);
} else {
locals.put(name, LocalVarInfo.makeDeclared(t));
}
}
for (String typedefName : localTypedefs.keySet()) {
locals.put(typedefName, LocalVarInfo.makeDeclared(this.commonTypes.UNDEFINED));
}
copyOuterVarsTransitively(this);
preservedNamespaces = localNamespaces;
localNamespaces = ImmutableMap.of();
isFrozen = true;
}
use of com.google.javascript.jscomp.newtypes.JSType in project closure-compiler by google.
the class NewTypeInference method analyzeEnumObjLitBwd.
private EnvTypePair analyzeEnumObjLitBwd(Node objLit, TypeEnv outEnv, JSType requiredType) {
if (objLit.getFirstChild() == null) {
return new EnvTypePair(outEnv, requiredType);
}
String pname = NodeUtil.getObjectLitKeyName(objLit.getFirstChild());
JSType enumeratedType = requiredType.getProp(new QualifiedName(pname)).getEnumeratedTypeOfEnumElement();
if (enumeratedType == null) {
return new EnvTypePair(outEnv, requiredType);
}
TypeEnv env = outEnv;
for (Node prop = objLit.getLastChild(); prop != null; prop = prop.getPrevious()) {
env = analyzeExprBwd(prop, env, enumeratedType).env;
}
return new EnvTypePair(env, requiredType);
}
use of com.google.javascript.jscomp.newtypes.JSType in project closure-compiler by google.
the class NewTypeInference method analyzeForInFwd.
private TypeEnv analyzeForInFwd(Node n, TypeEnv inEnv) {
Node obj = n.getSecondChild();
EnvTypePair pair = analyzeExprFwd(obj, inEnv, pickReqObjType(n));
pair = mayWarnAboutNullableReferenceAndTighten(n, pair.type, null, inEnv);
JSType objType = pair.type;
if (!objType.isSubtypeOf(TOP_OBJECT)) {
warnings.add(JSError.make(obj, FORIN_EXPECTS_OBJECT, objType.toString()));
} else if (objType.isStruct()) {
warnings.add(JSError.make(obj, IN_USED_WITH_STRUCT));
}
Node lhs = n.getFirstChild();
LValueResultFwd lval = analyzeLValueFwd(lhs, inEnv, STRING);
TypeEnv outEnv;
if (lval.declType != null && !commonTypes.isStringScalarOrObj(lval.declType)) {
warnings.add(JSError.make(lhs, FORIN_EXPECTS_STRING_KEY, lval.declType.toString()));
outEnv = lval.env;
} else {
outEnv = updateLvalueTypeInEnv(lval.env, lhs, lval.ptr, STRING);
}
return outEnv;
}
use of com.google.javascript.jscomp.newtypes.JSType in project closure-compiler by google.
the class NewTypeInference method createDeferredCheckBwd.
private void createDeferredCheckBwd(Node expr, JSType requiredType) {
checkArgument(expr.isCall() || expr.isTaggedTemplateLit());
checkArgument(expr.getFirstChild().isName());
String calleeName = expr.getFirstChild().getString();
// exactly using their summaries, and don't need deferred checks
if (this.currentScope.isKnownFunction(calleeName) && !this.currentScope.isLocalFunDef(calleeName) && !this.currentScope.isExternalFunction(calleeName)) {
NTIScope s = this.currentScope.getScope(calleeName);
JSType expectedRetType;
if (s.getDeclaredFunctionType().getReturnType() == null) {
expectedRetType = requiredType;
} else {
// No deferred check if the return type is declared
expectedRetType = null;
}
println("Putting deferred check of function: ", calleeName, " with ret: ", expectedRetType);
DeferredCheck dc = new DeferredCheck(expr, expectedRetType, currentScope, s);
deferredChecks.put(expr, dc);
}
}
use of com.google.javascript.jscomp.newtypes.JSType in project closure-compiler by google.
the class NewTypeInference method analyzeArrayLitFwd.
private EnvTypePair analyzeArrayLitFwd(Node expr, TypeEnv inEnv) {
TypeEnv env = inEnv;
JSType elementType = BOTTOM;
for (Node arrayElm = expr.getFirstChild(); arrayElm != null; arrayElm = arrayElm.getNext()) {
EnvTypePair pair = analyzeExprFwd(arrayElm, env);
env = pair.env;
elementType = JSType.join(elementType, pair.type);
}
elementType = firstNonBottom(elementType, UNKNOWN);
return new EnvTypePair(env, commonTypes.getArrayInstance(elementType));
}
Aggregations