def collectReturnTypes(self, context, types): itype = self.instructions.check(context, None) if itype != VoidType.instance: types[itype.getName()] = itype local = context.newLocalContext() local.registerValue(ErrorVariable(self.errorName)) super().collectReturnTypes(local, types) if self.alwaysInstructions != None: itype = self.alwaysInstructions.check(context, None) if itype != VoidType.instance: types[itype.getName()] = itype
def populateError(self, e, context): error = e.getExpression(context) if error == None: exp = ConstructorExpression(CategoryType("Error"), None, None) args = ArgumentList() args.append(Argument(UnresolvedParameter("name"), TextLiteral(type(e).__name__))) args.append(Argument(UnresolvedParameter("text"), TextLiteral(e.getMessage()))) exp.setArguments(args) error = exp if context.getRegisteredValue(INamedInstance, self.errorName) == None: context.registerValue(ErrorVariable(self.errorName)) if isinstance(error, IExpression): error = error.interpret(context) context.setValue(self.errorName, error) return error
def interpret(self, context, errorName): exp = self.getExpression(context) if exp is None: from prompto.grammar.Argument import Argument from prompto.grammar.ArgumentList import ArgumentList from prompto.expression.ConstructorExpression import ConstructorExpression from prompto.param.UnresolvedParameter import UnresolvedParameter from prompto.literal.TextLiteral import TextLiteral from prompto.type.CategoryType import CategoryType args = ArgumentList() args.append( Argument(UnresolvedParameter("name"), TextLiteral(type(self).__name__))) args.append( Argument(UnresolvedParameter("text"), TextLiteral(self.message))) exp = ConstructorExpression(CategoryType("Error"), args, None) if context.getRegisteredValue(object, errorName) is None: from prompto.runtime.ErrorVariable import ErrorVariable context.registerValue(ErrorVariable(errorName)) error = exp.interpret(context) context.setValue(errorName, error) return error
def toDialect(self, writer): writer = writer.newLocalWriter() writer.context.registerValue(ErrorVariable(self.errorName)) super().toDialect(writer)
def checkSwitchCasesType(self, context): local = context.newLocalContext() local.registerValue(ErrorVariable(self.errorName)) super().checkSwitchCasesType(local)