diff --git a/lisp/ob-C.el b/lisp/ob-C.el index 1dde289a7..ad6da03b0 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)