Improve output
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 12 Nov 2014 07:33:31 +0000 (02:33 -0500)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 12 Nov 2014 07:33:31 +0000 (02:33 -0500)
barectf/cli.py
barectf/templates.py

index 3108413504bf037304cd2836e014f494a2a60722..c39dad44f2c544fe550914e02f2ec67253b1f265 100644 (file)
@@ -140,6 +140,15 @@ class BarectfCodeGenerator:
             pytsdl.tsdl.Sequence: self._write_field_sequence,
             pytsdl.tsdl.String: self._write_field_string,
         }
+        self._get_src_name_funcs = {
+            'trace.packet.header.': self._get_tph_src_name,
+            'env.': self._get_env_src_name,
+            'stream.packet.context.': self._get_spc_src_name,
+            'stream.event.header.': self._get_seh_src_name,
+            'stream.event.context.': self._get_sec_src_name,
+            'event.context.': self._get_ec_src_name,
+            'event.fields.': self._get_ef_src_name,
+        }
 
     # TODO: prettify this function
     def _validate_struct(self, struct):
@@ -648,6 +657,17 @@ class BarectfCodeGenerator:
     def _get_align_offset_cline(self, size):
         return _CLine(self._get_align_offset(size))
 
+    def _str_to_clines(self, s):
+        lines = s.split('\n')
+
+        return [_CLine(line) for line in lines]
+
+    def _template_to_clines(self, tmpl, **kwargs):
+        s = tmpl.format(prefix=self._prefix, ucprefix=self._prefix.upper(),
+                        **kwargs)
+
+        return self._str_to_clines(s)
+
     def _write_field_struct(self, fname, src_name, struct, scope_prefix):
         size = self._get_struct_size(struct)
         size_bytes = self._get_alignment(size, 8) // 8
@@ -663,17 +683,12 @@ class BarectfCodeGenerator:
 
     def _write_field_integer(self, fname, src_name, integer, scope_prefix=None):
         bo = self._bo_suffixes_map[integer.byte_order]
-        ptr = self._CTX_BUF
         t = self._get_obj_param_ctype(integer)
-        start = self._CTX_AT
         length = self._get_obj_size(integer)
-        fmt = 'barectf_bitfield_write_{}({}, {}, {}, {}, {});'
 
-        return [
-            self._get_chk_offset_v_cline(length),
-            _CLine(fmt.format(bo, ptr, t, start, length, src_name)),
-            _CLine('{} += {};'.format(self._CTX_AT, length))
-        ]
+        return self._template_to_clines(barectf.templates.WRITE_INTEGER,
+                                        sz=length, bo=bo, type=t,
+                                        src_name=src_name)
 
     def _write_field_enum(self, fname, src_name, enum, scope_prefix=None):
         return self._write_field_obj(fname, src_name, enum.integer)
@@ -681,17 +696,12 @@ class BarectfCodeGenerator:
     def _write_field_floating_point(self, fname, src_name, floating_point,
                                     scope_prefix=None):
         bo = self._bo_suffixes_map[floating_point.byte_order]
-        ptr = self._CTX_BUF
         t = self._get_obj_param_ctype(floating_point)
-        start = self._CTX_AT
         length = self._get_obj_size(floating_point)
-        fmt = 'barectf_bitfield_write_{}({}, {}, {}, {}, {});'
 
-        return [
-            self._get_chk_offset_v_cline(length),
-            _CLine(fmt.format(bo, ptr, t, start, length, src_name)),
-            _CLine('{} += {};'.format(self._CTX_AT, length))
-        ]
+        return self._template_to_clines(barectf.templates.WRITE_INTEGER,
+                                        sz=length, bo=bo, type=t,
+                                        src_name=src_name)
 
     def _write_field_array(self, fname, src_name, array, scope_prefix=None):
         clines = []
@@ -723,51 +733,43 @@ class BarectfCodeGenerator:
 
         return clines
 
-    def _seq_length_to_src_name(self, length, scope_prefix=None):
-        def get_tph_src_name(length):
-            offvar = self._get_offvar_name_from_expr(length[3:], 'tph')
-            return 'ctx->{}'.format(offvar)
+    def _get_tph_src_name(self, length):
+        offvar = self._get_offvar_name_from_expr(length[3:], 'tph')
 
-        def get_env_src_name(length):
-            if len(length) != 2:
-                _perror('invalid sequence length: "{}"'.format(self._dot_name_to_str(length)))
+        return 'ctx->{}'.format(offvar)
 
-            fname = length[1]
+    def _get_env_src_name(self, length):
+        if len(length) != 2:
+            _perror('invalid sequence length: "{}"'.format(self._dot_name_to_str(length)))
 
-            if fname not in self._doc.env:
-                _perror('cannot find field env.{}'.format(fname))
+        fname = length[1]
 
-            return str(self._doc.env[fname])
+        if fname not in self._doc.env:
+            _perror('cannot find field env.{}'.format(fname))
 
-        def get_spc_src_name(length):
-            offvar = self._get_offvar_name_from_expr(length[3:], 'spc')
-            return 'ctx->{}'.format(offvar)
+        return str(self._doc.env[fname])
 
-        def get_seh_src_name(length):
-            return self._get_offvar_name_from_expr(length[3:], 'seh')
+    def _get_spc_src_name(self, length):
+        offvar = self._get_offvar_name_from_expr(length[3:], 'spc')
 
-        def get_sec_src_name(length):
-            return self._get_offvar_name_from_expr(length[3:], 'sec')
+        return 'ctx->{}'.format(offvar)
 
-        def get_ec_src_name(length):
-            return self._get_offvar_name_from_expr(length[2:], 'ec')
+    def _get_seh_src_name(self, length):
+        return self._get_offvar_name_from_expr(length[3:], 'seh')
 
-        def get_ef_src_name(length):
-            return self._get_offvar_name_from_expr(length[2:], 'ef')
+    def _get_sec_src_name(self, length):
+        return self._get_offvar_name_from_expr(length[3:], 'sec')
 
-        dyn_scope_map = {
-            'trace.packet.header.': get_tph_src_name,
-            'env.': get_env_src_name,
-            'stream.packet.context.': get_spc_src_name,
-            'stream.event.header.': get_seh_src_name,
-            'stream.event.context.': get_sec_src_name,
-            'event.context.': get_ec_src_name,
-            'event.fields.': get_ef_src_name,
-        }
+    def _get_ec_src_name(self, length):
+        return self._get_offvar_name_from_expr(length[2:], 'ec')
+
+    def _get_ef_src_name(self, length):
+        return self._get_offvar_name_from_expr(length[2:], 'ef')
 
+    def _seq_length_to_src_name(self, length, scope_prefix=None):
         length_dot = self._dot_name_to_str(length)
 
-        for prefix, get_src_name in dyn_scope_map.items():
+        for prefix, get_src_name in self._get_src_name_funcs.items():
             if length_dot.startswith(prefix):
                 return get_src_name(length)
 
@@ -1053,6 +1055,9 @@ class BarectfCodeGenerator:
                                                 self._spc_fname_to_pname)
                 fcline_groups.append(fclines)
 
+        # return 0
+        fcline_groups.append([_CLine('return 0;')])
+
         clines += self._join_cline_groups(fcline_groups)
 
         # get source
@@ -1160,6 +1165,9 @@ class BarectfCodeGenerator:
                                                 lambda x: str(stream.id))
                 fcline_groups.append(fclines)
 
+        # return 0
+        fcline_groups.append([_CLine('return 0;')])
+
         clines += self._join_cline_groups(fcline_groups)
 
         # get source
@@ -1368,6 +1376,9 @@ class BarectfCodeGenerator:
                                              self._ef_fname_to_pname)
             fcline_groups.append(fclines)
 
+        # return 0
+        fcline_groups.append([_CLine('return 0;')])
+
         clines += self._join_cline_groups(fcline_groups)
 
         # get source
index 1133a0c707384fd03ba9a65ca1506a42192c8007..84bc85d44806cc0294da203b3d9c9e343353ce6d 100644 (file)
@@ -24,7 +24,7 @@ FUNC_INIT = """{si}int {prefix}{sid}_init(
        uint32_t buf_size{params}
 )"""
 
-FUNC_OPEN = """{si}void {prefix}{sid}_open(
+FUNC_OPEN = """{si}int {prefix}{sid}_open(
        struct {prefix}{sid}_ctx* ctx{params}
 )"""
 
@@ -36,6 +36,10 @@ FUNC_TRACE = """{si}int {prefix}{sid}_trace_{evname}(
        struct {prefix}{sid}_ctx* ctx{params}
 )"""
 
+WRITE_INTEGER = """{ucprefix}_CHK_OFFSET_V(ctx->at, ctx->buf_size, {sz});
+{prefix}_bitfield_write_{bo}(ctx->buf, {type}, ctx->at, {sz}, {src_name});
+ctx->at += {sz};"""
+
 HEADER = """#ifndef _{ucprefix}_H
 #define _{ucprefix}_H
 
This page took 0.026524 seconds and 4 git commands to generate.