diff --git a/builtins.simple b/builtins.simple index 95d3387..1276b19 100644 --- a/builtins.simple +++ b/builtins.simple @@ -69,6 +69,8 @@ object strtrait: def add(other): self $str_add(other) + def substr(s, e): + self $str_subs(s, e) def rev: self $str_rev def len: diff --git a/de.churl.simple/objmodel.py b/de.churl.simple/objmodel.py index c2ed1bd..373d71d 100644 --- a/de.churl.simple/objmodel.py +++ b/de.churl.simple/objmodel.py @@ -104,7 +104,7 @@ class PrimitiveObject(AbstractObject): class W_Integer(PrimitiveObject): def __init__(self, value, space=None): - super().__init__(int(value), "inttrait", space) + super().__init__(int(value), "inttrait", space=space) class W_Boolean(PrimitiveObject): @@ -119,12 +119,12 @@ class W_Boolean(PrimitiveObject): class W_String(PrimitiveObject): def __init__(self, value, space=None): - super().__init__(str(value), "strtrait", space) + super().__init__(str(value), "strtrait", space=space) class W_Double(PrimitiveObject): def __init__(self, value, space=None): - super().__init__(float(value), "doubletrait", space) + super().__init__(float(value), "doubletrait", space=space) # ------------- diff --git a/de.churl.simple/primitives.py b/de.churl.simple/primitives.py index 3bac0da..c4a0806 100644 --- a/de.churl.simple/primitives.py +++ b/de.churl.simple/primitives.py @@ -173,6 +173,11 @@ def simple_str_add(a, b): return a + b +@primitive("str_subs", [str, int, int], str) +def simple_str_subs(a, s, e): + return a[s:e] + + @primitive("str_rev", [str], str) def simple_str_eq(a): return a[::-1] diff --git a/de.churl.simple/simplelexer.py b/de.churl.simple/simplelexer.py index 4620e99..69e7b4e 100644 --- a/de.churl.simple/simplelexer.py +++ b/de.churl.simple/simplelexer.py @@ -173,10 +173,10 @@ Plus = r'\+' Minus = r'-' Multiply = r'\*' Divide = r'/' -Increment = r'\+\+' -Decrement = r'--' Modulo = r'%' +Increment = r'\+\+' +Decrement = r'--' PlusInplace = r'\+=' MinusInplace = r'-=' MultiplyInplace = r'\*=' @@ -206,15 +206,14 @@ Object = r'object' tokens = ["If", "Else", "While", "Def", "Object", "Ignore", "String", "Boolean", "Double", - "Number", # after Double + "Number", "GC", "NewlineAndWhitespace", "OpenBracket", "CloseBracket", "Comma", "Colon", "And", "Or", "LessEqual", "Less", "GreaterEqual", "Greater", "Equal", "NotEqual", "Decrement", "PlusInplace", "MinusInplace", "MultiplyInplace", "DivideInplace", "Increment", "Plus", "Minus", "Multiply", "Divide", "Modulo", "Assign", "Not", - "Name", "PrimitiveName", - ] + "Name", "PrimitiveName"] def make_lexer():