Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
2f9eca3
[0072] 添加 s7i_apply_boolean_method 桥接函数
da-liii May 29, 2026
ab90d10
[0072] 迁移 g_not 到 s7_scheme_predicate.c
da-liii May 29, 2026
035f7be
[0072] 迁移 g_is_boolean 到 s7_scheme_predicate.c
da-liii May 29, 2026
e754769
[0072] 迁移 10 个类型谓词函数到 s7_scheme_predicate.c
da-liii May 29, 2026
7d7e2c8
[0072] 迁移 g_is_symbol/input_port?/output_port?/macro? 到 s7_scheme_pre…
da-liii May 29, 2026
7ce35f1
[0072] 迁移 7 个类型谓词到 s7_scheme_predicate.c (undefined?/eof?/byte?/float…
da-liii May 29, 2026
1afabf7
[0072] 迁移 g_is_gensym/g_is_syntax/g_is_let 到 s7_scheme_predicate.c
da-liii May 29, 2026
5a7d322
[0072] 迁移 g_arity/g_is_goto/g_is_constant/g_is_c_object/g_help 到 s7_s…
da-liii May 29, 2026
f9c8393
[0072] 迁移 g_is_c_pointer/g_is_openlet/g_is_funclet 到 s7_scheme_predic…
da-liii May 29, 2026
29540fe
[0072] 迁移 g_tree_is_cyclic/g_type_of/g_is_eq/g_is_eqv 到 s7_scheme_pre…
da-liii May 29, 2026
0088ec0
[0072] 迁移 g_is_equal/g_is_equivalent 到 s7_scheme_predicate.c
da-liii May 29, 2026
4170e92
[0072] 迁移 g_rootlet/g_is_port_closed 到 s7_scheme_predicate.c
da-liii May 29, 2026
8a85994
[0072] 迁移 g_numerator/g_denominator/g_iterator_sequence 到 s7_scheme_p…
da-liii May 29, 2026
cde612e
[0072] 迁移 g_c_pointer_info/g_c_pointer_type 到 s7_scheme_predicate.c
da-liii May 29, 2026
6fc6b5a
[0072] 迁移 g_c_object_type/g_c_object_let 到 s7_scheme_predicate.c
da-liii May 29, 2026
dd62d22
[0072] 迁移 g_current_input_port/g_current_output_port/g_current_error_…
da-liii May 29, 2026
89d76e9
[0072] 迁移 dtoa (Grisu2) 双精度浮点转字符串算法到 s7_dtoa.c
da-liii May 30, 2026
0419d0a
[0072] 迁移 op_names[] 操作码名称表到 s7_op_names.c
da-liii May 30, 2026
4d860b9
[0072] 迁移 init_ctables 字符分类表到 s7_ctables.c
da-liii May 30, 2026
00d0070
[0072] 迁移 13 个函数到 s7_scheme_predicate.c (c_pointer_weak/tree_leaves/c…
da-liii May 30, 2026
d4d996b
[0072] 迁移 10 个函数到 s7_scheme_predicate.c (memv/assq/assv/tree_set_memq…
da-liii May 30, 2026
a3f8fb5
[0072] 迁移 5 个函数到 s7_scheme_predicate.c (unlet_ref/sv_unlet_ref/list_0…
da-liii May 30, 2026
83bfadb
[0072] 迁移 g_leq_2/g_geq_2 到 s7_scheme_predicate.c,新增 leq_b_7pp/geq_b_…
da-liii May 30, 2026
cfadcaf
[0072] 迁移 14 个算术快捷函数到 s7_scheme_predicate.c (add/subtract/multiply/di…
da-liii May 30, 2026
fdd050e
[0072] 将 g_numerator/g_denominator 从 s7_scheme_predicate.c 迁移到 s7_sch…
da-liii May 30, 2026
309e2c7
[0072] 将 g_reverse 从 s7_scheme_predicate.c 迁移到 s7_scheme_base.c
da-liii May 30, 2026
f41cd7e
[0072] 将 g_assq/g_assv/g_memv 从 s7_scheme_predicate.c 迁移到 s7_scheme_b…
da-liii May 30, 2026
3ced62d
[0072] 将 g_list_0/g_list_1/g_append_2/g_leq_2/g_geq_2 从 s7_scheme_pre…
da-liii May 30, 2026
bda7eab
[0072] 将 14 个算术快捷函数从 s7_scheme_predicate.c 迁移到 s7_scheme_base.c
da-liii May 30, 2026
4c1680f
[0072] 将 g_unlet_ref/g_sv_unlet_ref 从 s7_scheme_predicate.c 迁移到 s7_sc…
da-liii May 30, 2026
b51fd98
[0072] 将 g_rootlet/g_curlet/g_unlet_disabled/g_outlet_unlet 从 s7_sche…
da-liii May 30, 2026
c46b3ed
[0072] 迁移 g_int_log2 到 s7_scheme_inexact.c
da-liii May 30, 2026
a1e53c5
[0072] 迁移 g_is_defined_in_unlet/g_is_defined_in_rootlet 到 s7_scheme_p…
da-liii May 30, 2026
c99a737
[0072] 迁移 g_list_2/g_list_3/g_list_4 到 s7_scheme_base.c
da-liii May 30, 2026
4d315bb
[0072] 迁移 g_num_eq_2 到 s7_scheme_base.c
da-liii May 30, 2026
05c41f5
[0072] 迁移 g_less_2 到 s7_scheme_base.c,新增 s7i_lt_p_pp bridge
da-liii May 30, 2026
fccf283
[0072] 迁移 g_num_eq_xi/g_num_eq_ix 到 s7_scheme_base.c,新增 s7i_num_eq_xx…
da-liii May 30, 2026
523d66e
[0072] 迁移 g_memq_2/g_memq_4 到 s7_scheme_base.c,新增 memq bridge
da-liii May 30, 2026
451e2b6
[0072] 迁移 g_add_4 到 s7_scheme_base.c
da-liii May 30, 2026
63b1c6b
[0072] 迁移 g_subtract_3 到 s7_scheme_base.c
da-liii May 30, 2026
b5ba55a
[0072] 迁移 g_abort 到 s7_scheme_base.c
da-liii May 30, 2026
c382bf4
[0072] 迁移 g_cv_ref_2 到 s7_liii_vector.c,新增 s7i_complex_vector_ref_p_p…
da-liii May 30, 2026
18e1aa5
[0072] 迁移 g_fv_ref_2/g_iv_ref_2 到 s7_liii_vector.c
da-liii May 30, 2026
ca5dda3
[0072] 迁移 g_cv_set_3 到 s7_liii_vector.c
da-liii May 30, 2026
4b21d07
[0072] 迁移 g_outlet 到 s7_scheme_base.c
da-liii May 30, 2026
604d6c5
[0072] 迁移 g_quotient 到 s7_scheme_base.c
da-liii May 30, 2026
0b6e254
[0072] 迁移 g_remainder/g_modulo 到 s7_scheme_base.c
da-liii May 30, 2026
6009d55
[0072] 迁移 g_curlet_ref 到 s7_scheme_base.c
da-liii May 30, 2026
25493e8
[0072] 迁移 c_rationalize 到 s7_scheme_base.c
da-liii May 30, 2026
59ea06b
[0072] 迁移 safe_strlen/copy_string/local_strncmp/catstrs 等 C 字符串辅助函数到 …
da-liii May 30, 2026
e119358
[0072] 迁移 nan_with_payload/nan_payload 到 s7_scheme_base.c
da-liii May 30, 2026
ba6f176
[0072] 迁移 g_error 到 s7_scheme_base.c
da-liii May 31, 2026
d1d9e6e
[0072] 简化 s7_scheme_predicate.c 中的重复类型谓词模式,提取共享宏到 s7_internal_helpers.h
da-liii May 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,791 changes: 341 additions & 1,450 deletions src/s7.c

Large diffs are not rendered by default.

114 changes: 114 additions & 0 deletions src/s7_ctables.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/* s7_ctables.c - character classification tables for s7 Scheme interpreter
*
* derived from s7, a Scheme interpreter
* SPDX-License-Identifier: 0BSD
*/

#include "s7_ctables.h"

#include <stdlib.h>
#include <stdint.h>
#include <math.h>

/* Configuration macros - must match s7.c */
#ifndef WITH_PURE_S7
#define WITH_PURE_S7 0
#endif
#if WITH_PURE_S7
#define WITH_EXTRA_EXPONENT_MARKERS 0
#endif

#ifndef WITH_R7RS
#define WITH_R7RS !WITH_PURE_S7
#endif

#ifndef WITH_EXTRA_EXPONENT_MARKERS
#define WITH_EXTRA_EXPONENT_MARKERS 0
#endif

/* Global character classification tables */
bool *exponent_table;
bool *slashify_table;
bool *char_ok_in_a_name;
bool *white_space;
bool *number_table;
bool *symbol_slashify_table;
int32_t *digits;

void init_ctables(void)
{
exponent_table = (bool *)calloc(S7_CTABLE_SIZE, sizeof(bool));
slashify_table = (bool *)calloc(S7_CTABLE_SIZE, sizeof(bool));
symbol_slashify_table = (bool *)calloc(S7_CTABLE_SIZE, sizeof(bool));
char_ok_in_a_name = (bool *)malloc(S7_CTABLE_SIZE * sizeof(bool));
white_space = (bool *)calloc(S7_CTABLE_SIZE + 1, sizeof(bool));
white_space++; /* leave white_space[-1] false for white_space[EOF] */
number_table = (bool *)calloc(S7_CTABLE_SIZE, sizeof(bool));
digits = (int32_t *)malloc(S7_CTABLE_SIZE * sizeof(int32_t));

for (int32_t i = 0; i < S7_CTABLE_SIZE; i++)
{
char_ok_in_a_name[i] = true;
/* white_space[i] = false; */
digits[i] = 256;
/* number_table[i] = false; */
}

char_ok_in_a_name[0] = false;
char_ok_in_a_name[(uint8_t)'('] = false; /* cast for C++ */
char_ok_in_a_name[(uint8_t)')'] = false;
char_ok_in_a_name[(uint8_t)';'] = false;
char_ok_in_a_name[(uint8_t)'\t'] = false;
char_ok_in_a_name[(uint8_t)'\n'] = false;
char_ok_in_a_name[(uint8_t)'\r'] = false;
char_ok_in_a_name[(uint8_t)' '] = false;
char_ok_in_a_name[(uint8_t)'"'] = false;

white_space[(uint8_t)'\t'] = true;
white_space[(uint8_t)'\n'] = true;
white_space[(uint8_t)'\r'] = true;
white_space[(uint8_t)'\f'] = true;
white_space[(uint8_t)'\v'] = true;
white_space[(uint8_t)' '] = true;
white_space[(uint8_t)'\205'] = true; /* 133 */
white_space[(uint8_t)'\240'] = true; /* 160 */

/* surely only 'e' is needed... */
exponent_table[(uint8_t)'e'] = true; exponent_table[(uint8_t)'E'] = true;
exponent_table[(uint8_t)'@'] = true;
#if WITH_EXTRA_EXPONENT_MARKERS
exponent_table[(uint8_t)'s'] = true; exponent_table[(uint8_t)'S'] = true;
exponent_table[(uint8_t)'f'] = true; exponent_table[(uint8_t)'F'] = true;
exponent_table[(uint8_t)'d'] = true; exponent_table[(uint8_t)'D'] = true;
exponent_table[(uint8_t)'l'] = true; exponent_table[(uint8_t)'L'] = true;
#endif
for (int32_t i = 0; i < 32; i++) slashify_table[i] = true;
/* for (int32_t i = 127; i < 160; i++) slashify_table[i] = true; */ /* 6-Apr-24 for utf-8, but this has no effect on s7test?? */
slashify_table[(uint8_t)'\\'] = true;
slashify_table[(uint8_t)'"'] = true;
#if WITH_R7RS
/* In R7RS mode, newlines should be escaped to ensure proper serialization */
slashify_table[(uint8_t)'\n'] = true;
#else
slashify_table[(uint8_t)'\n'] = false;
#endif

for (int32_t i = 0; i < S7_CTABLE_SIZE; i++)
symbol_slashify_table[i] = ((slashify_table[i]) || (!char_ok_in_a_name[i])); /* force use of (symbol ...) for cases like '(ab) as symbol */

digits[(uint8_t)'0'] = 0; digits[(uint8_t)'1'] = 1; digits[(uint8_t)'2'] = 2; digits[(uint8_t)'3'] = 3; digits[(uint8_t)'4'] = 4;
digits[(uint8_t)'5'] = 5; digits[(uint8_t)'6'] = 6; digits[(uint8_t)'7'] = 7; digits[(uint8_t)'8'] = 8; digits[(uint8_t)'9'] = 9;
digits[(uint8_t)'a'] = 10; digits[(uint8_t)'A'] = 10;
digits[(uint8_t)'b'] = 11; digits[(uint8_t)'B'] = 11;
digits[(uint8_t)'c'] = 12; digits[(uint8_t)'C'] = 12;
digits[(uint8_t)'d'] = 13; digits[(uint8_t)'D'] = 13;
digits[(uint8_t)'e'] = 14; digits[(uint8_t)'E'] = 14;
digits[(uint8_t)'f'] = 15; digits[(uint8_t)'F'] = 15;

number_table[(uint8_t)'0'] = true; number_table[(uint8_t)'1'] = true; number_table[(uint8_t)'2'] = true; number_table[(uint8_t)'3'] = true;
number_table[(uint8_t)'4'] = true; number_table[(uint8_t)'5'] = true; number_table[(uint8_t)'6'] = true; number_table[(uint8_t)'7'] = true;
number_table[(uint8_t)'8'] = true; number_table[(uint8_t)'9'] = true; number_table[(uint8_t)'.'] = true;
number_table[(uint8_t)'+'] = true;
number_table[(uint8_t)'-'] = true;
number_table[(uint8_t)'#'] = true;
}
32 changes: 32 additions & 0 deletions src/s7_ctables.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/* s7_ctables.h - character classification table declarations for s7 Scheme interpreter
*
* derived from s7, a Scheme interpreter
* SPDX-License-Identifier: 0BSD
*/

#ifndef S7_CTABLES_H
#define S7_CTABLES_H

#include "s7.h"

#ifdef __cplusplus
extern "C" {
#endif

#define S7_CTABLE_SIZE 256

extern bool *exponent_table;
extern bool *slashify_table;
extern bool *char_ok_in_a_name;
extern bool *white_space;
extern bool *number_table;
extern bool *symbol_slashify_table;
extern int32_t *digits;

void init_ctables(void);

#ifdef __cplusplus
}
#endif

#endif /* S7_CTABLES_H */
Loading
Loading