All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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