Commit de1f0fd7 authored by Stefan Marr's avatar Stefan Marr

Moved StringStream to rlib

Signed-off-by: default avatarStefan Marr <git@stefan-marr.de>
parent d3e822d9
from rpython.rlib.streamio import Stream, StreamError
class StringStream(Stream):
def __init__(self, string):
self._string = string
self.pos = 0
self.max = len(string) - 1
def write(self, data):
raise StreamError("StringStream is not writable")
def truncate(self, size):
raise StreamError("StringStream is immutable")
def peek(self):
if self.pos < self.max:
return self._string[self.pos:]
else:
return ''
def tell(self):
return self.pos
def seek(self, offset, whence):
if whence == 0:
self.pos = max(0, offset)
elif whence == 1:
self.pos = max(0, self.pos + offset)
elif whence == 2:
self.pos = max(0, self.max + offset)
else:
raise StreamError("seek(): whence must be 0, 1 or 2")
def read(self, n):
assert isinstance(n, int)
end = self.pos + n
data = self._string[self.pos:end]
self.pos += len(data)
return data
\ No newline at end of file
import os
from rpython.rlib.streamio import open_file_as_stream, Stream, StreamError
from rpython.rlib.streamio import open_file_as_stream
from rlib.string_stream import StringStream
from som.compiler.parser import Parser
from som.compiler.class_generation_context import ClassGenerationContext
class _StringStream(Stream):
def __init__(self, string):
self._string = string
self.pos = 0
self.max = len(string) - 1
def write(self, data):
raise StreamError("StringStream is not writable")
def truncate(self, size):
raise StreamError("StringStream is immutable")
def peek(self):
if self.pos < self.max:
return self._string[self.pos:]
else:
return ''
def tell(self):
return self.pos
def seek(self, offset, whence):
if whence == 0:
self.pos = max(0, offset)
elif whence == 1:
self.pos = max(0, self.pos + offset)
elif whence == 2:
self.pos = max(0, self.max + offset)
else:
raise StreamError("seek(): whence must be 0, 1 or 2")
def read(self, n):
assert isinstance(n, int)
end = self.pos + n
data = self._string[self.pos:end]
self.pos += len(data)
return data
def compile_class_from_file(path, filename, system_class, universe):
return _SourcecodeCompiler().compile(path, filename, system_class, universe)
......@@ -64,7 +28,7 @@ class _SourcecodeCompiler(object):
result = self._compile(system_class, universe)
finally:
input_file.close()
except OSError as e:
except OSError:
raise IOError()
cname = result.get_name()
......@@ -76,7 +40,7 @@ class _SourcecodeCompiler(object):
return result
def compile_class_string(self, stream, system_class, universe):
self._parser = Parser(_StringStream(stream), universe)
self._parser = Parser(StringStream(stream), universe)
result = self._compile(system_class, universe)
return result
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment