def prep_string(s): """Takes a Pixie string and returns a VoidP to that string. The string should be freed via dispose!, otherwise memory leaks could result.""" affirm(isinstance(s, String), u"Can only prep strings with prep-string") utf8 = unicode_to_utf8(rt.name(s)) raw = rffi.str2charp(utf8) return VoidP(rffi.cast(rffi.VOIDP, raw))
def inner_invoke(self, args): from pixie.vm.keyword import keyword import pixie.vm.rt as rt from pixie.vm.string import String import pixie.vm.persistent_vector as vector print "Pixie 0.1 - Interactive REPL" print "(" + platform.name + ", " + platform.cc + ")" print ":exit-repl or Ctrl-D to quit" print "----------------------------" with with_ns(u"user"): NS_VAR.deref().include_stdlib() acc = vector.EMPTY for x in self._argv: acc = rt.conj(acc, rt.wrap(x)) PROGRAM_ARGUMENTS.set_root(acc) rdr = MetaDataReader(PromptReader()) with with_ns(u"user"): while True: try: val = read(rdr, False) if val is eof: break val = interpret(compile(val)) self.set_recent_vars(val) except WrappedException as ex: print "Error: ", ex._ex.__repr__() rdr.reset_line() self.set_error_var(ex._ex) continue if val is keyword(u"exit-repl"): break val = rt._repr(val) assert isinstance(val, String), "str should always return a string" print unicode_to_utf8(val._str)
def ffi_set_value(self, ptr, val): pnt = rffi.cast(rffi.VOIDPP, ptr) if isinstance(val, String): pnt = rffi.cast(rffi.CCHARPP, ptr) utf8 = unicode_to_utf8(rt.name(val)) raw = rffi.str2charp(utf8) pnt[0] = raw return CCharPToken(raw) elif isinstance(val, Buffer): pnt[0] = val.buffer() elif isinstance(val, VoidP): pnt[0] = val.raw_data() elif val is nil: pnt[0] = rffi.cast(rffi.VOIDP, 0) elif isinstance(val, CStruct): pnt[0] = rffi.cast(rffi.VOIDP, val.raw_data()) else: frm_name = rt.name(rt.str(val.type())) to_name = rt.name(rt.str(self)) affirm(False, u"Cannot encode " + frm_name + u" as " + to_name)
def ffi_set_value(self, ptr, val): if isinstance(val, String): pnt = rffi.cast(rffi.CCHARPP, ptr) utf8 = unicode_to_utf8(rt.name(val)) raw = rffi.str2charp(utf8) pnt[0] = raw return CCharPToken(raw) elif isinstance(val, Buffer): vpnt = rffi.cast(rffi.VOIDPP, ptr) vpnt[0] = val.buffer() elif isinstance(val, VoidP): vpnt = rffi.cast(rffi.VOIDPP, ptr) vpnt[0] = val.raw_data() elif val is nil: vpnt = rffi.cast(rffi.VOIDPP, ptr) vpnt[0] = rffi.cast(rffi.VOIDP, 0) elif isinstance(val, CStruct): vpnt = rffi.cast(rffi.VOIDPP, ptr) vpnt[0] = rffi.cast(rffi.VOIDP, val.raw_data()) else: print val affirm(False, u"Cannot encode this type")
def ffi_set_value(self, ptr, val): pnt = rffi.cast(rffi.CCHARPP, ptr) utf8 = unicode_to_utf8(rt.name(val)) raw = rffi.str2charp(utf8) pnt[0] = raw return CCharPToken(raw)