tioga 1.4 → 1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Tioga_README +177 -139
  2. data/split/Dtable/dtable.c +3 -0
  3. data/split/Dtable/namespace.h +7 -3
  4. data/split/Dtable/symbols.h +2 -2
  5. data/split/Dvector/dvector.c +3 -2
  6. data/split/Dvector/namespace.h +7 -3
  7. data/split/Dvector/symbols.h +2 -2
  8. data/split/Flate/flate.c +2 -1
  9. data/split/Flate/namespace.h +7 -3
  10. data/split/Flate/symbols.h +2 -2
  11. data/split/Function/extconf.rb +1 -1
  12. data/split/Function/function.c +38 -6
  13. data/split/Function/joint_qsort.c +1 -2
  14. data/split/Function/namespace.h +7 -3
  15. data/split/Function/symbols.h +2 -2
  16. data/split/Tioga/axes.c +4 -5
  17. data/split/Tioga/figures.c +1 -0
  18. data/split/Tioga/figures.h +5 -3
  19. data/split/Tioga/lib/Arcs_and_Circles.rb +1 -1
  20. data/split/Tioga/lib/ColorConstants.rb +9 -9
  21. data/split/Tioga/lib/Creating_Paths.rb +1 -1
  22. data/split/Tioga/lib/FigMkr.rb +25 -23
  23. data/split/Tioga/lib/FigureConstants.rb +2 -2
  24. data/split/Tioga/lib/Figures_and_Plots.rb +6 -6
  25. data/split/Tioga/lib/Images.rb +2 -2
  26. data/split/Tioga/lib/MarkerConstants.rb +3 -3
  27. data/split/Tioga/lib/Markers.rb +6 -6
  28. data/split/Tioga/lib/Page_Frame_Bounds.rb +1 -1
  29. data/split/Tioga/lib/Rectangles.rb +1 -1
  30. data/split/Tioga/lib/Shading.rb +2 -2
  31. data/split/Tioga/lib/Special_Paths.rb +5 -5
  32. data/split/Tioga/lib/Strokes.rb +2 -2
  33. data/split/Tioga/lib/TeX_Text.rb +5 -5
  34. data/split/Tioga/lib/TexPreamble.rb +116 -116
  35. data/split/Tioga/lib/Transparency.rb +2 -2
  36. data/split/Tioga/lib/Using_Paths.rb +1 -1
  37. data/split/Tioga/lib/X_and_Y_Axes.rb +19 -15
  38. data/split/Tioga/lib/irb_tioga.rb +36 -11
  39. data/split/Tioga/lib/maker.rb +201 -0
  40. data/split/Tioga/lib/tioga_ui_cmds.rb +6 -2
  41. data/split/Tioga/namespace.h +7 -3
  42. data/split/Tioga/pdfcoords.c +20 -2
  43. data/split/Tioga/pdfs.h +1 -1
  44. data/split/Tioga/symbols.h +2 -2
  45. data/split/extconf.rb +7 -5
  46. data/split/namespace.h +7 -3
  47. data/split/symbols.c +1 -9
  48. data/split/symbols.h +2 -2
  49. metadata +19 -23
  50. data/split/Dtable/symbols.c +0 -92
  51. data/split/Dvector/symbols.c +0 -92
  52. data/split/Flate/symbols.c +0 -92
  53. data/split/Function/symbols.c +0 -92
  54. data/split/Tioga/symbols.c +0 -92
data/split/Tioga/pdfs.h CHANGED
@@ -221,7 +221,7 @@ extern void End_Axis_Standard_State(void);
221
221
  extern void Write_gsave(void);
222
222
  extern void Write_grestore(void);
223
223
 
224
- PRIVATE void c_private_set_default_font_size(FM *p, double size);
224
+ extern void c_private_set_default_font_size(FM *p, double size);
225
225
 
226
226
  void Init_Font_Dictionary(void);
227
227
 
@@ -22,10 +22,10 @@ PRIVATE void * rb_import_symbol_no_raise(VALUE module,
22
22
 
23
23
  #define DECLARE_SYMBOL(ret_type,name,args) \
24
24
  typedef ret_type (*rb_export_##name##_type) args;\
25
- PRIVATE rb_export_##name##_type name
25
+ INTERN rb_export_##name##_type name
26
26
 
27
27
  #define IMPLEMENT_SYMBOL(name)\
28
- PRIVATE rb_export_##name##_type name = 0;
28
+ INTERN rb_export_##name##_type name = 0;
29
29
 
30
30
  #define RB_IMPORT_SYMBOL(module, name) \
31
31
  name = (rb_export_##name##_type) rb_import_symbol(module, #name)
data/split/extconf.rb CHANGED
@@ -14,22 +14,22 @@ end
14
14
  # and builds Dvector.so
15
15
  setup_dir("Dvector", "Dobjects",
16
16
  "Dobjects/Dvector", include) do |l,b,i|
17
- b.add_sources("symbols.c")
17
+ # b.add_sources("symbols.c")
18
18
  end
19
19
  # the same for Dtable
20
20
  setup_dir("Dtable", "Dobjects",
21
21
  "Dobjects/Dtable", include) do |l,b,i|
22
- b.add_sources("symbols.c")
22
+ # b.add_sources("symbols.c")
23
23
  end
24
24
 
25
25
  setup_dir("Flate", "", "Flate", include) do |l,b,i|
26
- b.add_sources("symbols.c")
26
+ # b.add_sources("symbols.c")
27
27
  end
28
28
 
29
29
 
30
30
  setup_dir("Function", "Dobjects",
31
31
  "Dobjects/Function", include) do |l,b,i|
32
- b.add_sources("symbols.c")
32
+ # b.add_sources("symbols.c")
33
33
  end
34
34
 
35
35
 
@@ -41,6 +41,7 @@ declare_library("Tioga",
41
41
  "Tioga/lib/FigMkr.rb",
42
42
  "Tioga/lib/FigureConstants.rb",
43
43
  "Tioga/lib/MarkerConstants.rb",
44
+ "Tioga/lib/maker.rb",
44
45
  "Tioga/lib/irb_tioga.rb",
45
46
  "Tioga/lib/tioga_ui_cmds.rb",
46
47
  "Tioga/lib/tioga_ui.rb",
@@ -48,7 +49,7 @@ declare_library("Tioga",
48
49
  "Tioga/lib/TexPreamble.rb")
49
50
 
50
51
  declare_binary_library("Tioga/FigureMaker",
51
- "Tioga/**/*.c", "symbols.c")
52
+ "Tioga/**/*.c")
52
53
 
53
54
  # The preamble stuff:
54
55
  custom_rule("Tioga/lib/TexPreamble.rb",
@@ -84,6 +85,7 @@ have_func("isnan","math.h")
84
85
 
85
86
  # Installing scripts
86
87
  declare_exec 'scripts/tioga'
88
+ declare_exec 'scripts/irb_tioga'
87
89
 
88
90
 
89
91
  if Config::CONFIG["target"] =~ /darwin/i
data/split/namespace.h CHANGED
@@ -34,14 +34,18 @@
34
34
  */
35
35
 
36
36
  #ifdef __APPLE__
37
- # define PRIVATE __private_extern__
37
+ # define INTERN __private_extern__
38
38
  # define PUBLIC
39
39
  #elif __GNUC__ >= 4 /* we have the visibility attribute */
40
- # define PRIVATE __attribute__ ((visibility ("hidden")))
40
+ # define INTERN __attribute__ ((visibility ("hidden")))
41
41
  # define PUBLIC __attribute__ ((visibility ("default")))
42
42
  #else /* not really good */
43
- # define PRIVATE
43
+ # define INTERN
44
44
  # define PUBLIC
45
45
  #endif /* __APPLE__ and __GNU_C_ >= 4*/
46
46
 
47
+ /* In any case, PRIVATE is static */
48
+
49
+ #define PRIVATE static
50
+
47
51
  #endif
data/split/symbols.c CHANGED
@@ -39,11 +39,7 @@ static VALUE get_symbol_hash(VALUE module)
39
39
  VALUE hash;
40
40
  ID mv_id = rb_intern(MV_SYMBOLS);
41
41
  if(RTEST(rb_ivar_defined(module, mv_id)))
42
- {
43
- hash = rb_ivar_get(module, mv_id);
44
- Check_Type(hash, T_HASH);
45
- return hash;
46
- }
42
+ return rb_ivar_get(module, mv_id);
47
43
  else
48
44
  {
49
45
  /* module variable uninitialized, we need to make sure it's here */
@@ -66,10 +62,6 @@ PRIVATE void * rb_import_symbol_no_raise(VALUE module,
66
62
  const char * symbol_name)
67
63
  {
68
64
  VALUE hash = rb_iv_get(module, MV_SYMBOLS);
69
- if(TYPE(hash) != T_HASH)
70
- return NULL; /* doesn't fail, but the importing module
71
- should definitely check the return value. Beware
72
- of segfaults ! */
73
65
  VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
74
66
 
75
67
  if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
data/split/symbols.h CHANGED
@@ -22,10 +22,10 @@ PRIVATE void * rb_import_symbol_no_raise(VALUE module,
22
22
 
23
23
  #define DECLARE_SYMBOL(ret_type,name,args) \
24
24
  typedef ret_type (*rb_export_##name##_type) args;\
25
- PRIVATE rb_export_##name##_type name
25
+ INTERN rb_export_##name##_type name
26
26
 
27
27
  #define IMPLEMENT_SYMBOL(name)\
28
- PRIVATE rb_export_##name##_type name = 0;
28
+ INTERN rb_export_##name##_type name = 0;
29
29
 
30
30
  #define RB_IMPORT_SYMBOL(module, name) \
31
31
  name = (rb_export_##name##_type) rb_import_symbol(module, #name)
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: tioga
5
5
  version: !ruby/object:Gem::Version
6
- version: "1.4"
7
- date: 2007-01-25 00:00:00 +01:00
6
+ version: "1.5"
7
+ date: 2007-03-17 00:00:00 +01:00
8
8
  summary: Tioga - a powerful scientific plotting library
9
9
  require_paths:
10
10
  - lib
@@ -29,7 +29,6 @@ post_install_message:
29
29
  authors: []
30
30
 
31
31
  files:
32
- - split/symbols.c
33
32
  - split/Tioga/pdfcoords.c
34
33
  - split/Tioga/makers.c
35
34
  - split/Tioga/axes.c
@@ -40,22 +39,14 @@ files:
40
39
  - split/Tioga/pdf_font_dicts.c
41
40
  - split/Tioga/pdfimage.c
42
41
  - split/Tioga/pdftext.c
43
- - split/Tioga/symbols.c
44
42
  - split/Tioga/pdfpath.c
45
43
  - split/Tioga/texout.c
46
- - split/Function/symbols.c
47
44
  - split/Function/function.c
48
45
  - split/Function/joint_qsort.c
49
46
  - split/Dvector/dvector.c
50
- - split/Dvector/symbols.c
51
- - split/Dtable/symbols.c
52
47
  - split/Dtable/dtable.c
53
- - split/Flate/symbols.c
54
48
  - split/Flate/flate.c
55
- - split/namespace.h
56
- - split/defs.h
57
- - split/symbols.h
58
- - split/safe_double.h
49
+ - split/symbols.c
59
50
  - split/Tioga/pdfs.h
60
51
  - split/Tioga/figures.h
61
52
  - split/Tioga/symbols.h
@@ -65,34 +56,35 @@ files:
65
56
  - split/Tioga/dvector.h
66
57
  - split/Tioga/dtable.h
67
58
  - split/Tioga/flate.h
68
- - split/Function/defs.h
69
59
  - split/Function/symbols.h
60
+ - split/Function/defs.h
70
61
  - split/Function/safe_double.h
71
62
  - split/Function/namespace.h
72
63
  - split/Function/dvector.h
64
+ - split/namespace.h
65
+ - split/Dvector/include/dvector.h
73
66
  - split/Dvector/dvector_intern.h
74
67
  - split/Dvector/symbols.h
75
68
  - split/Dvector/defs.h
76
69
  - split/Dvector/safe_double.h
77
70
  - split/Dvector/namespace.h
78
- - split/Dvector/include/dvector.h
71
+ - split/Dtable/include/dtable.h
79
72
  - split/Dtable/dtable_intern.h
80
73
  - split/Dtable/symbols.h
81
74
  - split/Dtable/defs.h
82
75
  - split/Dtable/safe_double.h
83
76
  - split/Dtable/namespace.h
84
77
  - split/Dtable/dvector.h
85
- - split/Dtable/include/dtable.h
78
+ - split/defs.h
79
+ - split/Flate/include/flate.h
86
80
  - split/Flate/flate_intern.h
87
81
  - split/Flate/symbols.h
88
82
  - split/Flate/defs.h
89
83
  - split/Flate/safe_double.h
90
84
  - split/Flate/namespace.h
91
- - split/Flate/include/flate.h
92
- - split/extconf.rb
93
- - split/mkmf2.rb
85
+ - split/symbols.h
86
+ - split/safe_double.h
94
87
  - split/Tioga/mk_tioga_sty.rb
95
- - split/Tioga/extconf.rb
96
88
  - split/Tioga/lib/Rectangles.rb
97
89
  - split/Tioga/lib/Colorbars.rb
98
90
  - split/Tioga/lib/Shading.rb
@@ -109,6 +101,7 @@ files:
109
101
  - split/Tioga/lib/X_and_Y_Axes.rb
110
102
  - split/Tioga/lib/irb_tioga.rb
111
103
  - split/Tioga/lib/Colormaps.rb
104
+ - split/Tioga/lib/maker.rb
112
105
  - split/Tioga/lib/tioga_ui.rb
113
106
  - split/Tioga/lib/Utils.rb
114
107
  - split/Tioga/lib/Figures_and_Plots.rb
@@ -120,18 +113,21 @@ files:
120
113
  - split/Tioga/lib/tioga_ui_cmds.rb
121
114
  - split/Tioga/lib/Images.rb
122
115
  - split/Tioga/lib/Doc.rb
123
- - split/Tioga/lib/TexPreamble.rb
124
116
  - split/Tioga/lib/Titles_and_Labels.rb
125
117
  - split/Tioga/lib/Transparency.rb
126
118
  - split/Tioga/lib/ColorConstants.rb
127
- - split/Function/extconf.rb
119
+ - split/Tioga/lib/TexPreamble.rb
120
+ - split/Tioga/extconf.rb
128
121
  - split/Function/lib/Function_extras.rb
129
- - split/Dvector/extconf.rb
122
+ - split/Function/extconf.rb
130
123
  - split/Dvector/lib/Numeric_extras.rb
131
124
  - split/Dvector/lib/Dvector_extras.rb
132
- - split/Dtable/extconf.rb
125
+ - split/Dvector/extconf.rb
133
126
  - split/Dtable/lib/Dtable_extras.rb
127
+ - split/Dtable/extconf.rb
134
128
  - split/Flate/extconf.rb
129
+ - split/extconf.rb
130
+ - split/mkmf2.rb
135
131
  - tests/dvector_test.data
136
132
  - tests/dtable_test.data
137
133
  - tests/tc_Dtable.rb
@@ -1,92 +0,0 @@
1
- /*
2
- Copyright (C) 2006 Vincent Fourmond
3
-
4
- Symbols is free software; you can redistribute it and/or modify
5
- it under the terms of the GNU General Library Public License as published
6
- by the Free Software Foundation; either version 2 of the License, or
7
- (at your option) any later version.
8
-
9
- Symbols is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU Library General Public License for more details.
13
-
14
- You should have received a copy of the GNU Library General Public License
15
- along with Dvector; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
- */
18
-
19
-
20
- /* Simple code for sharing C symbols across different Ruby libraries */
21
-
22
- #include <ruby.h>
23
- #include <intern.h>
24
-
25
- #include <namespace.h>
26
-
27
-
28
- /* MV stands for Module Variable */
29
- #define MV_SYMBOLS "@_exported_C_symbols"
30
- /* modified to use instance variables instead of global class variables:
31
- this way, children don't overwrite the parent's export table
32
- */
33
-
34
-
35
- /* makes sure that the hash is registered for the given
36
- module and returns it */
37
- static VALUE get_symbol_hash(VALUE module)
38
- {
39
- VALUE hash;
40
- ID mv_id = rb_intern(MV_SYMBOLS);
41
- if(RTEST(rb_ivar_defined(module, mv_id)))
42
- {
43
- hash = rb_ivar_get(module, mv_id);
44
- Check_Type(hash, T_HASH);
45
- return hash;
46
- }
47
- else
48
- {
49
- /* module variable uninitialized, we need to make sure it's here */
50
- hash = rb_hash_new();
51
- rb_ivar_set(module, mv_id, hash);
52
- return hash;
53
- }
54
- }
55
-
56
- /* registers a symbol in the given module. This one is the internal
57
- function */
58
- PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
59
- void * symbol)
60
- {
61
- VALUE hash = get_symbol_hash(module);
62
- rb_hash_aset(hash, rb_str_new2(symbol_name),LONG2NUM((long) symbol));
63
- }
64
-
65
- PRIVATE void * rb_import_symbol_no_raise(VALUE module,
66
- const char * symbol_name)
67
- {
68
- VALUE hash = rb_iv_get(module, MV_SYMBOLS);
69
- if(TYPE(hash) != T_HASH)
70
- return NULL; /* doesn't fail, but the importing module
71
- should definitely check the return value. Beware
72
- of segfaults ! */
73
- VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
74
-
75
- if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
76
- return (void *) NUM2LONG(symbol);
77
- return NULL;
78
- }
79
-
80
- /* same as before, but raises something is the return value is NULL,
81
- which is probably best as a default behavior*/
82
- PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name)
83
- {
84
- void * symbol = rb_import_symbol_no_raise(module, symbol_name);
85
- if(symbol)
86
- return symbol;
87
- /* we get the name of the module: */
88
- VALUE module_name = rb_funcall(module, rb_intern("to_s"), 0);
89
- rb_raise(rb_eRuntimeError, "The symbol %s was not found in "
90
- "module %s", symbol_name,
91
- rb_string_value_cstr(&module_name));
92
- }
@@ -1,92 +0,0 @@
1
- /*
2
- Copyright (C) 2006 Vincent Fourmond
3
-
4
- Symbols is free software; you can redistribute it and/or modify
5
- it under the terms of the GNU General Library Public License as published
6
- by the Free Software Foundation; either version 2 of the License, or
7
- (at your option) any later version.
8
-
9
- Symbols is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU Library General Public License for more details.
13
-
14
- You should have received a copy of the GNU Library General Public License
15
- along with Dvector; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
- */
18
-
19
-
20
- /* Simple code for sharing C symbols across different Ruby libraries */
21
-
22
- #include <ruby.h>
23
- #include <intern.h>
24
-
25
- #include <namespace.h>
26
-
27
-
28
- /* MV stands for Module Variable */
29
- #define MV_SYMBOLS "@_exported_C_symbols"
30
- /* modified to use instance variables instead of global class variables:
31
- this way, children don't overwrite the parent's export table
32
- */
33
-
34
-
35
- /* makes sure that the hash is registered for the given
36
- module and returns it */
37
- static VALUE get_symbol_hash(VALUE module)
38
- {
39
- VALUE hash;
40
- ID mv_id = rb_intern(MV_SYMBOLS);
41
- if(RTEST(rb_ivar_defined(module, mv_id)))
42
- {
43
- hash = rb_ivar_get(module, mv_id);
44
- Check_Type(hash, T_HASH);
45
- return hash;
46
- }
47
- else
48
- {
49
- /* module variable uninitialized, we need to make sure it's here */
50
- hash = rb_hash_new();
51
- rb_ivar_set(module, mv_id, hash);
52
- return hash;
53
- }
54
- }
55
-
56
- /* registers a symbol in the given module. This one is the internal
57
- function */
58
- PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
59
- void * symbol)
60
- {
61
- VALUE hash = get_symbol_hash(module);
62
- rb_hash_aset(hash, rb_str_new2(symbol_name),LONG2NUM((long) symbol));
63
- }
64
-
65
- PRIVATE void * rb_import_symbol_no_raise(VALUE module,
66
- const char * symbol_name)
67
- {
68
- VALUE hash = rb_iv_get(module, MV_SYMBOLS);
69
- if(TYPE(hash) != T_HASH)
70
- return NULL; /* doesn't fail, but the importing module
71
- should definitely check the return value. Beware
72
- of segfaults ! */
73
- VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
74
-
75
- if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
76
- return (void *) NUM2LONG(symbol);
77
- return NULL;
78
- }
79
-
80
- /* same as before, but raises something is the return value is NULL,
81
- which is probably best as a default behavior*/
82
- PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name)
83
- {
84
- void * symbol = rb_import_symbol_no_raise(module, symbol_name);
85
- if(symbol)
86
- return symbol;
87
- /* we get the name of the module: */
88
- VALUE module_name = rb_funcall(module, rb_intern("to_s"), 0);
89
- rb_raise(rb_eRuntimeError, "The symbol %s was not found in "
90
- "module %s", symbol_name,
91
- rb_string_value_cstr(&module_name));
92
- }
@@ -1,92 +0,0 @@
1
- /*
2
- Copyright (C) 2006 Vincent Fourmond
3
-
4
- Symbols is free software; you can redistribute it and/or modify
5
- it under the terms of the GNU General Library Public License as published
6
- by the Free Software Foundation; either version 2 of the License, or
7
- (at your option) any later version.
8
-
9
- Symbols is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU Library General Public License for more details.
13
-
14
- You should have received a copy of the GNU Library General Public License
15
- along with Dvector; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
- */
18
-
19
-
20
- /* Simple code for sharing C symbols across different Ruby libraries */
21
-
22
- #include <ruby.h>
23
- #include <intern.h>
24
-
25
- #include <namespace.h>
26
-
27
-
28
- /* MV stands for Module Variable */
29
- #define MV_SYMBOLS "@_exported_C_symbols"
30
- /* modified to use instance variables instead of global class variables:
31
- this way, children don't overwrite the parent's export table
32
- */
33
-
34
-
35
- /* makes sure that the hash is registered for the given
36
- module and returns it */
37
- static VALUE get_symbol_hash(VALUE module)
38
- {
39
- VALUE hash;
40
- ID mv_id = rb_intern(MV_SYMBOLS);
41
- if(RTEST(rb_ivar_defined(module, mv_id)))
42
- {
43
- hash = rb_ivar_get(module, mv_id);
44
- Check_Type(hash, T_HASH);
45
- return hash;
46
- }
47
- else
48
- {
49
- /* module variable uninitialized, we need to make sure it's here */
50
- hash = rb_hash_new();
51
- rb_ivar_set(module, mv_id, hash);
52
- return hash;
53
- }
54
- }
55
-
56
- /* registers a symbol in the given module. This one is the internal
57
- function */
58
- PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
59
- void * symbol)
60
- {
61
- VALUE hash = get_symbol_hash(module);
62
- rb_hash_aset(hash, rb_str_new2(symbol_name),LONG2NUM((long) symbol));
63
- }
64
-
65
- PRIVATE void * rb_import_symbol_no_raise(VALUE module,
66
- const char * symbol_name)
67
- {
68
- VALUE hash = rb_iv_get(module, MV_SYMBOLS);
69
- if(TYPE(hash) != T_HASH)
70
- return NULL; /* doesn't fail, but the importing module
71
- should definitely check the return value. Beware
72
- of segfaults ! */
73
- VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
74
-
75
- if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
76
- return (void *) NUM2LONG(symbol);
77
- return NULL;
78
- }
79
-
80
- /* same as before, but raises something is the return value is NULL,
81
- which is probably best as a default behavior*/
82
- PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name)
83
- {
84
- void * symbol = rb_import_symbol_no_raise(module, symbol_name);
85
- if(symbol)
86
- return symbol;
87
- /* we get the name of the module: */
88
- VALUE module_name = rb_funcall(module, rb_intern("to_s"), 0);
89
- rb_raise(rb_eRuntimeError, "The symbol %s was not found in "
90
- "module %s", symbol_name,
91
- rb_string_value_cstr(&module_name));
92
- }