emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals-release/org c43041c: ob-C.el: Fix regression which mixe


From: ELPA Syncer
Subject: [elpa] externals-release/org c43041c: ob-C.el: Fix regression which mixes int, double, char* types
Date: Sun, 25 Apr 2021 08:57:09 -0400 (EDT)

branch: externals-release/org
commit c43041cf1ae6b338bef772ee67718f482b404197
Author: tbanel <tbanelwebmin@free.fr>
Commit: tbanel <tbanelwebmin@free.fr>

    ob-C.el: Fix regression which mixes int, double, char* types
    
    * lisp/ob-C.el (org-babel-C-val-to-C-type): Distinguish C, C++, D
      declarations of two-dimensions data.  C and C++ are row major,
      whereas D is column major.
    
      (org-babel-C-var-to-C): Generate a `typedef' (in C, C++) or an
      `alias' (in D) to carry the type of every two-dimensions matrices.
    
      (org-babel-C-header-to-C): Move to preferred D declaration,
      `string[n] header;' instead of `string header[n];'.  Use previously
      generated `typedef' or `alias' as the return type of the `data_h()'
      generated access utility functions.
    
    Reported-by: Richard Sent <richard.j.sent@tutamail.com>
---
 lisp/ob-C.el | 50 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 34 insertions(+), 16 deletions(-)

diff --git a/lisp/ob-C.el b/lisp/ob-C.el
index 1dde289..ad6da03 100644
--- a/lisp/ob-C.el
+++ b/lisp/ob-C.el
@@ -342,7 +342,9 @@ FORMAT can be either a format string or a function which is 
called with VAL."
       `(,(car type)
        (lambda (val)
          (cons
-          (format "[%d][%d]" (length val) (length (car val)))
+           (pcase org-babel-c-variant
+             ((or `c `cpp) (format "[%d][%d]" (length val) (length (car val))))
+             (`d           (format "[%d][%d]" (length (car val)) (length 
val))))
           (concat
            (if (eq org-babel-c-variant 'd) "[\n" "{\n")
            (mapconcat
@@ -403,11 +405,23 @@ of the same value."
           (formatted (org-babel-C-format-val type-data val))
           (suffix (car formatted))
           (data (cdr formatted)))
-      (format "%s %s%s = %s;"
-             type
-             var
-             suffix
-             data))))
+      (pcase org-babel-c-variant
+        ((or `c `cpp)
+         (format "%s\n%s"
+                (format "typedef %s %s_type;" type var)
+                 (format "%s %s%s = %s;"
+                        type
+                        var
+                        suffix
+                        data)))
+        (`d
+         (format "%s\n%s"
+                 (format "alias %s_type = %s;" var type)
+                 (format "%s%s %s = %s;"
+                     type
+                     suffix
+                     var
+                     data)))))))
 
 (defun org-babel-C-table-sizes-to-C (pair)
   "Create constants of table dimensions, if PAIR is a table."
@@ -456,23 +470,27 @@ specifying a variable with the name of the table."
   (let ((table (car head))
         (headers (cdr head)))
     (concat
-     (format
       (pcase org-babel-c-variant
-       ((or `c `cpp) "const char* %s_header[%d] = {%s};")
-       (`d "string %s_header[%d] = [%s];"))
-      table
-      (length headers)
-      (mapconcat (lambda (h) (format "%S" h)) headers ","))
+       ((or `c `cpp)
+         (format "const char* %s_header[%d] = {%s};"
+                 table
+                 (length headers)
+                 (mapconcat (lambda (h) (format "%S" h)) headers ",")))
+       (`d
+         (format "string[%d] %s_header = [%s];"
+                 (length headers)
+                 table
+                 (mapconcat (lambda (h) (format "%S" h)) headers ","))))
      "\n"
      (pcase org-babel-c-variant
        ((or `c `cpp)
        (format
-        "const char* %s_h (int row, const char* col) { return 
%s[row][get_column_num(%d,%s_header,col)]; }"
-        table table (length headers) table))
+        "%s_type %s_h (int row, const char* col) { return 
%s[row][get_column_num(%d,%s_header,col)]; }"
+        table table table (length headers) table))
        (`d
        (format
-        "string %s_h (size_t row, string col) { return 
%s[row][get_column_num(%s_header,col)]; }"
-        table table table))))))
+        "%s_type %s_h (size_t row, string col) { return 
%s[row][get_column_num(%s_header,col)]; }"
+        table table table table))))))
 
 (provide 'ob-C)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]