From b4ae2a0bff9db405f759381f20b87acb5ae84269 Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Tue, 13 Aug 2013 23:00:43 -0700 Subject: [PATCH] Allow import paths in the schema loader --- capnp/capnp.pyx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/capnp/capnp.pyx b/capnp/capnp.pyx index 4d44c45..184b83a 100644 --- a/capnp/capnp.pyx +++ b/capnp/capnp.pyx @@ -28,6 +28,7 @@ ctypedef char * Object ctypedef bint Bool ctypedef float Float32 ctypedef double Float64 +from libc.stdlib cimport malloc, free ctypedef fused valid_values: int @@ -524,12 +525,18 @@ cdef class SchemaParser: def __dealloc__(self): del self.thisptr - def parseDiskFile(self, displayName, diskPath): - cdef StringPtr * importArray = [] - cdef ArrayPtr[StringPtr] imports = ArrayPtr[StringPtr](importArray, 0) + def parseDiskFile(self, displayName, diskPath, imports): + cdef StringPtr * importArray = malloc(sizeof(StringPtr) * len(imports)) + + for i in range(len(imports)): + importArray[i] = StringPtr(imports[i]) + + cdef ArrayPtr[StringPtr] importsPtr = ArrayPtr[StringPtr](importArray, len(imports)) ret = ParsedSchema() - ret._init(self.thisptr.parseDiskFile(displayName, diskPath, imports)) + ret._init(self.thisptr.parseDiskFile(displayName, diskPath, importsPtr)) + + free(importArray) return ret @@ -629,7 +636,7 @@ def _load(nodeSchema, module): _load(schema, local_module) -def load(file_name, display_name=None): +def load(file_name, display_name=None, imports=[]): if display_name is None: display_name = os.path.basename(file_name) module = ModuleType(display_name) @@ -637,7 +644,7 @@ def load(file_name, display_name=None): module._parser = parser - fileSchema = parser.parseDiskFile(display_name, file_name) + fileSchema = parser.parseDiskFile(display_name, file_name, imports) _load(fileSchema, module) return module