예제 #1
0
 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)
예제 #2
0
 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
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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
예제 #6
0
 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())
예제 #7
0
 def getExpression(self, context):
     s = self.message.replace(
         '"', "'")  # ensure TextLiteral interprets the full string
     return TextLiteral('"' + s + '"')