[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals-release/org 38f87a2: ob-C.el: Fix a number a regression
From: |
ELPA Syncer |
Subject: |
[elpa] externals-release/org 38f87a2: ob-C.el: Fix a number a regressions related to table parameters |
Date: |
Thu, 29 Apr 2021 10:57:17 -0400 (EDT) |
branch: externals-release/org
commit 38f87a26b5b825b34bd25bf9ce3d2993f65cade5
Author: tbanel <tbanelwebmin@free.fr>
Commit: tbanel <tbanelwebmin@free.fr>
ob-C.el: Fix a number a regressions related to table parameters
* ob-C.el (org-babel-C-expand-C, org-babel-C-header-to-C,
org-babel-C-expand-D): Add a `TYPE' parameter to
`org-babel-C-header-to-C' so that the helper functions return the
correct type. Previoulsy for tables of non-strings the helper
functions would attempt to return a string, leading to compilation
errors.
* ob-C.el (org-babel-C-header-to-C): Correctly quote header elements.
Before, if the elisp value was not a string, it would not quote it,
leading to a syntax error.
* ob-C.el (org-babel-C-utility-header-to-C): Include `string.h' in
header `get_column_num' requires `strcmp', leading to compilation
errors.
* ob-C.el (org-babel-C-var-to-C): prefered declaration of a table in D
differs from C and C++. Example in C: `int table[2][3] = ...;'. In D:
`int[3][2] table=...;'
This patch is mainly based on Asa Zeren <asaizeren@gmail.com> patch of
Nov 5 2020, which was not commited at that time.
---
lisp/ob-C.el | 75 +++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 46 insertions(+), 29 deletions(-)
diff --git a/lisp/ob-C.el b/lisp/ob-C.el
index ad6da03..c44aedb 100644
--- a/lisp/ob-C.el
+++ b/lisp/ob-C.el
@@ -258,7 +258,14 @@ its header arguments."
(when colnames
(org-babel-C-utility-header-to-C))
;; tables headers
- (mapconcat 'org-babel-C-header-to-C colnames "\n")
+ (mapconcat (lambda (head)
+ (let* ((tblnm (car head))
+ (tbl (cdr (car (let* ((el vars))
+ (while (not (or (equal
tblnm (caar el)) (not el)))
+ (setq el (cdr el)))
+ el))))
+ (type (org-babel-C-val-to-base-type tbl)))
+ (org-babel-C-header-to-C head type))) colnames
"\n")
;; body
(if main-p
(org-babel-C-ensure-main-wrap body)
@@ -290,7 +297,14 @@ its header arguments."
(when colnames
(org-babel-C-utility-header-to-C))
;; tables headers
- (mapconcat 'org-babel-C-header-to-C colnames "\n")
+ (mapconcat (lambda (head)
+ (let* ((tblnm (car head))
+ (tbl (cdr (car (let* ((el vars))
+ (while (not (or (equal
tblnm (caar el)) (not el)))
+ (setq el (cdr el)))
+ el))))
+ (type (org-babel-C-val-to-base-type tbl)))
+ (org-babel-C-header-to-C head type))) colnames
"\n")
;; body
(if main-p
(org-babel-C-ensure-main-wrap body)
@@ -407,21 +421,17 @@ of the same value."
(data (cdr formatted)))
(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)))
+ (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)))))))
+ (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."
@@ -441,10 +451,10 @@ into a column number."
(pcase org-babel-c-variant
((or `c `cpp)
(concat
- (if (eq org-babel-c-variant 'c)
- "extern "
- "extern \"C\" ")
- "int strcmp (const char *, const char *);
+ "
+#ifndef _STRING_H
+#include <string.h>
+#endif
int get_column_num (int nbcols, const char** header, const char* column)
{
int c;
@@ -464,33 +474,40 @@ int get_column_num (int nbcols, const char** header,
const char* column)
}
")))
-(defun org-babel-C-header-to-C (head)
+(defun org-babel-C-header-to-C (head type)
"Convert an elisp list of header table into a C or D vector
specifying a variable with the name of the table."
+ (message "%S" type)
(let ((table (car head))
- (headers (cdr head)))
+ (headers (cdr head))
+ (typename (pcase type
+ ('integerp "int")
+ ('floatp "double")
+ ('stringp (pcase org-babel-c-variant
+ ((or 'c 'cpp) "const char*")
+ ('d "string"))))))
(concat
(pcase org-babel-c-variant
((or `c `cpp)
(format "const char* %s_header[%d] = {%s};"
table
(length headers)
- (mapconcat (lambda (h) (format "%S" h)) 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"
+ (mapconcat (lambda (h) (format "\"%s\"" h)) headers ","))))
+ "\n"
(pcase org-babel-c-variant
((or `c `cpp)
(format
- "%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))
+ "%s %s_h (int row, const char* col) { return
%s[row][get_column_num(%d,%s_header,col)]; }"
+ typename table table (length headers) table))
(`d
(format
- "%s_type %s_h (size_t row, string col) { return
%s[row][get_column_num(%s_header,col)]; }"
- table table table table))))))
+ "%s %s_h (size_t row, string col) { return
%s[row][get_column_num(%s_header,col)]; }"
+ typename table table table))))))
(provide 'ob-C)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals-release/org 38f87a2: ob-C.el: Fix a number a regressions related to table parameters,
ELPA Syncer <=