def getSortKeyReader(self, context, key): if key is None: key = TextLiteral('"key"') if self.globalMethodExists(context, str(key)): return self.getGlobalMethodSortKeyReader(context, str(key)) elif isinstance(key, TextLiteral): return self.getEntrySortKeyReader(context, key.getValue().getStorableData()) else: return self.getExpressionSortKeyReader(context, key)
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 __init__(self): from prompto.param.CategoryParameter import CategoryParameter from prompto.literal.TextLiteral import TextLiteral SINGLE_SPACE_ARGUMENT = CategoryParameter(TextType.instance, "separator", TextLiteral('" "')) super().__init__("split", SINGLE_SPACE_ARGUMENT)
def __init__(self): from prompto.param.CategoryParameter import CategoryParameter from prompto.literal.TextLiteral import TextLiteral FORMAT_ARGUMENT = CategoryParameter(TextType.instance, "format", TextLiteral('"format"')) super(FormatMethodDeclaration, self).__init__("format", FORMAT_ARGUMENT)
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 testSystemOutPrint(self): parser = ECleverParser(text='print(objects=value,end="")') parser._input.tokenSource.addLF = False tree = parser.python_statement() builder = EPromptoBuilder(parser) walker = ParseTreeWalker() walker.walk(builder, tree) statement = builder.getNodeValue(tree) context = Context.newGlobalContext() arg = CategoryParameter(TextType.instance, "value") arg.register(context) context.setValue("value", TextLiteral('"test"')) # StringLiteral trims enclosing quotes result = statement.interpret(context, None, None) # no module self.assertIsNone(result) self.assertEqual("test", Out.read())
def getExpression(self, context): s = self.message.replace( '"', "'") # ensure TextLiteral interprets the full string return TextLiteral('"' + s + '"')