
js.prompto.statement.BaseSwitchStatement.js Maven / Gradle / Ivy
var BaseStatement = require("./BaseStatement").BaseStatement;
var ObjectList = require("../utils/ObjectList").ObjectList;
var TypeMap = require("../type/TypeMap").TypeMap;
var VoidType = require("../type/VoidType").VoidType;
function BaseSwitchStatement(switchCases, defaultCase) {
BaseStatement.call(this);
this.switchCases = switchCases || new SwitchCaseList();
this.defaultCase = defaultCase || null;
return this;
}
BaseSwitchStatement.prototype = Object.create(BaseStatement.prototype);
BaseSwitchStatement.prototype.constructor = BaseSwitchStatement;
/*
public void addSwitchCase(SwitchCase switchCase) {
switchCases.add(switchCase);
}
public void setDefaultCase(StatementList defaultCase) {
this.defaultCase = defaultCase;
}
*/
BaseSwitchStatement.prototype.check = function(context) {
this.checkSwitchCasesType(context);
return this.checkReturnType(context);
};
BaseSwitchStatement.prototype.checkSwitchCasesType = function(context) {
var type = this.checkSwitchType(context);
this.switchCases.forEach(function(switchCase) {
switchCase.checkSwitchType(context, type);
});
};
BaseSwitchStatement.prototype.checkReturnType = function(context) {
var types = new TypeMap();
this.collectReturnTypes(context, types);
return types.inferType(context);
};
BaseSwitchStatement.prototype.collectReturnTypes = function(context, types) {
this.switchCases.forEach(function(switchCase) {
var type = switchCase.checkReturnType(context);
if(type!=VoidType.instance) {
types[type.name] = type;
}
});
if(this.defaultCase!=null) {
var type = this.defaultCase.check(context, null);
if(type!=VoidType.instance) {
types[type.name] = type;
}
}
};
BaseSwitchStatement.prototype.interpretSwitch = function(context, switchValue, toThrow) {
for(var i=0;i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy