Changeset 0c11a534a1b97b7addf59c733a31bcbe1120fcc9
- Timestamp:
- 04/25/08 00:09:25 (9 months ago)
- Author:
- dave <dave@…>
- Parents:
- 8eb44963185f8afa008b1abfe3f6fad0839b2efd
- Children:
- a04da26a0a26ed33041c9059b44ece39727fc2a1
- git-committer:
- dave <dave@06fd6eb0-0002-0410-a719-e5602cce40bc> / 2008-04-24T14:09:25Z+0000
- Message:
-
Changed ruby bindings to use ruby symbols
Ruby bindings now replace Ferret's Symbol implementation with its own. The main
advantage of this is that we don't need to do as much to convert Ferret's data
types into Ruby data types.
An added bonus of this was that it highlighted all the places where the current
Ferret Symbol implementation was broken so it is much more solid now.
git-svn-id: svn+ssh://davebalmain.com/home/dave/repos/ferret/trunk@1043 06fd6eb0-0002-0410-a719-e5602cce40bc
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r950230
|
r0c11a5
|
|
| 648 | 648 | struct FrtLazyDoc |
| 649 | 649 | { |
| 650 | | FrtHash *field_dict; |
| | 650 | FrtHash *field_dictionary; |
| 651 | 651 | int size; |
| 652 | 652 | FrtLazyDocField **fields; |
| … |
… |
|
| 655 | 655 | |
| 656 | 656 | extern void frt_lazy_doc_close(FrtLazyDoc *self); |
| | 657 | extern FrtLazyDocField *frt_lazy_doc_get(FrtLazyDoc *self, FrtSymbol field); |
| 657 | 658 | |
| 658 | 659 | /**************************************************************************** |
-
|
r950230
|
r0c11a5
|
|
| 74 | 74 | #define HS_MIN_SIZE FRT_HS_MIN_SIZE |
| 75 | 75 | #define I FRT_I |
| 76 | | #define IF FRT_IF |
| 77 | 76 | #define INDEX_ERROR FRT_INDEX_ERROR |
| 78 | 77 | #define INDEX_INTERVAL FRT_INDEX_INTERVAL |
| … |
… |
|
| 645 | 644 | #define lazy_df_get_data frt_lazy_df_get_data |
| 646 | 645 | #define lazy_doc_close frt_lazy_doc_close |
| | 646 | #define lazy_doc_get frt_lazy_doc_get |
| 647 | 647 | #define legacy_standard_tokenizer_new frt_legacy_standard_tokenizer_new |
| 648 | 648 | #define letter_analyzer_new frt_letter_analyzer_new |
-
|
r48290f
|
r0c11a5
|
|
| 566 | 566 | |
| 567 | 567 | /** |
| | 568 | * Write a string with known length to the FrtOutStream. A string is an |
| | 569 | * integer +length+ in VINT format (see frt_os_write_vint) followed by |
| | 570 | * +length+ bytes. The string can then be read using frt_is_read_string. |
| | 571 | * |
| | 572 | * @param os FrtOutStream to write to |
| | 573 | * @param str the string to write |
| | 574 | * @param len the length of the string to write |
| | 575 | * @raise FRT_IO_ERROR if there is an error writing to the file-system |
| | 576 | */ |
| | 577 | extern FRT_INLINE void os_write_string_len(FrtOutStream *os, |
| | 578 | const char *str, |
| | 579 | int len); |
| | 580 | |
| | 581 | /** |
| 568 | 582 | * Write a string to the FrtOutStream. A string is an integer +length+ in VINT |
| 569 | 583 | * format (see frt_os_write_vint) followed by +length+ bytes. The string can then |
-
|
r950230
|
r0c11a5
|
|
| 1 | | #ifndef _SYMBOL_H |
| 2 | | #define _SYMBOL_H |
| | 1 | #ifndef FRT_SYMBOL_H |
| | 2 | #define FRT_SYMBOL_H |
| 3 | 3 | |
| 4 | 4 | typedef struct Frt__Symbol { |
| … |
… |
|
| 13 | 13 | |
| 14 | 14 | #define FRT_I frt_intern |
| 15 | | #define FRT_IF frt_intern_and_free |
| 16 | 15 | #define FRT_S(sym) ((const char *)sym) |
| 17 | 16 | |
-
|
rad7fae
|
r0c11a5
|
|
| 450 | 450 | for (i = 0; i < fis_size; i++) { |
| 451 | 451 | fi = fis->fields[i]; |
| 452 | | os_write_string(os, (char *)fi->name); |
| | 452 | os_write_string(os, S(fi->name)); |
| 453 | 453 | tmp.f = fi->boost; |
| 454 | 454 | os_write_u32(os, tmp.i); |
| … |
… |
|
| 1470 | 1470 | { |
| 1471 | 1471 | LazyDoc *self = ALLOC(LazyDoc); |
| 1472 | | self->field_dict = h_new_str(NULL, (free_ft)&lazy_df_destroy); |
| | 1472 | self->field_dictionary = h_new_ptr((free_ft)&lazy_df_destroy); |
| 1473 | 1473 | self->size = size; |
| 1474 | 1474 | self->fields = ALLOC_AND_ZERO_N(LazyDocField *, size); |
| … |
… |
|
| 1479 | 1479 | void lazy_doc_close(LazyDoc *self) |
| 1480 | 1480 | { |
| 1481 | | h_destroy(self->field_dict); |
| | 1481 | h_destroy(self->field_dictionary); |
| 1482 | 1482 | is_close(self->fields_in); |
| 1483 | 1483 | free(self->fields); |
| … |
… |
|
| 1488 | 1488 | { |
| 1489 | 1489 | self->fields[i] = lazy_df; |
| 1490 | | h_set(self->field_dict, lazy_df->name, lazy_df); |
| | 1490 | h_set(self->field_dictionary, lazy_df->name, lazy_df); |
| 1491 | 1491 | lazy_df->doc = self; |
| | 1492 | } |
| | 1493 | |
| | 1494 | LazyDocField *frt_lazy_doc_get(LazyDoc *self, Symbol field) |
| | 1495 | { |
| | 1496 | return (LazyDocField *)h_get(self->field_dictionary, field); |
| 1492 | 1497 | } |
| 1493 | 1498 | |
| … |
… |
|
| 1716 | 1721 | Hash *fr_get_tv(FieldsReader *fr, int doc_num) |
| 1717 | 1722 | { |
| 1718 | | Hash *term_vectors = h_new_str((free_ft)NULL, (free_ft)&tv_destroy); |
| | 1723 | Hash *term_vectors = h_new_ptr((free_ft)&tv_destroy); |
| 1719 | 1724 | int i; |
| 1720 | 1725 | InStream *fdx_in = fr->fdx_in; |
-
|
r950230
|
r0c11a5
|
|
| 261 | 261 | expl_new(sim_tf(self->similarity, (float)freq) * tdew->boost, |
| 262 | 262 | "tf(term_freq(%s:%s)=%d)^%f", |
| 263 | | mtsc->field, tdew->term, freq, tdew->boost)); |
| | 263 | S(mtsc->field), tdew->term, freq, tdew->boost)); |
| 264 | 264 | |
| 265 | 265 | total_score += sim_tf(self->similarity, (float)freq) * tdew->boost; |
| … |
… |
|
| 385 | 385 | char *query_str; |
| 386 | 386 | MultiTermQuery *mtq = MTQ(self->query); |
| 387 | | Symbol field = mtq->field; |
| | 387 | const char *field = S(mtq->field); |
| 388 | 388 | PriorityQueue *bt_pq = mtq->boosted_terms; |
| 389 | 389 | int i; |
| … |
… |
|
| 391 | 391 | char *doc_freqs = NULL; |
| 392 | 392 | size_t len = 0, pos = 0; |
| 393 | | const int field_num = fis_get_field_num(ir->fis, field); |
| | 393 | const int field_num = fis_get_field_num(ir->fis, mtq->field); |
| 394 | 394 | |
| 395 | 395 | if (field_num < 0) { |
| 396 | 396 | return expl_new(0.0, "field \"%s\" does not exist in the index", |
| 397 | | (char *)field); |
| | 397 | field); |
| 398 | 398 | } |
| 399 | 399 | |
| … |
… |
|
| 416 | 416 | sprintf(doc_freqs + pos, "= %d", total_doc_freqs); |
| 417 | 417 | |
| 418 | | idf_expl1 = expl_new(self->idf, "idf(%s:<%s>)", (char *)field, doc_freqs); |
| 419 | | idf_expl2 = expl_new(self->idf, "idf(%s:<%s>)", (char *)field, doc_freqs); |
| | 418 | idf_expl1 = expl_new(self->idf, "idf(%s:<%s>)", field, doc_freqs); |
| | 419 | idf_expl2 = expl_new(self->idf, "idf(%s:<%s>)", field, doc_freqs); |
| 420 | 420 | free(doc_freqs); |
| 421 | 421 | |
| … |
… |
|
| 455 | 455 | : (float)0.0; |
| 456 | 456 | field_norm_expl = expl_new(field_norm, "field_norm(field=%s, doc=%d)", |
| 457 | | (char *)field, doc_num); |
| | 457 | field, doc_num); |
| 458 | 458 | |
| 459 | 459 | expl_add_detail(field_expl, field_norm_expl); |
| … |
… |
|
| 503 | 503 | ***************************************************************************/ |
| 504 | 504 | |
| 505 | | static char *multi_tq_to_s(Query *self, Symbol curr_field) |
| | 505 | static char *multi_tq_to_s(Query *self, Symbol default_field) |
| 506 | 506 | { |
| 507 | 507 | int i; |
| … |
… |
|
| 509 | 509 | BoostedTerm *bt; |
| 510 | 510 | char *buffer, *bptr; |
| 511 | | int flen = (int)sym_len(MTQ(self)->field); |
| | 511 | const char *field = S(MTQ(self)->field); |
| | 512 | int flen = (int)strlen(field); |
| 512 | 513 | int tlen = 0; |
| 513 | 514 | |
| … |
… |
|
| 519 | 520 | bptr = buffer = ALLOC_N(char, tlen + flen + 35); |
| 520 | 521 | |
| 521 | | if (curr_field != MTQ(self)->field) { |
| 522 | | bptr += sprintf(bptr, "%s:", S(MTQ(self)->field)); |
| | 522 | if (default_field != MTQ(self)->field) { |
| | 523 | bptr += sprintf(bptr, "%s:", field); |
| 523 | 524 | } |
| 524 | 525 | |
-
|
rad7fae
|
r0c11a5
|
|
| 2907 | 2907 | /* make sure all_fields contains the default fields */ |
| 2908 | 2908 | self->analyzer = analyzer; |
| 2909 | | self->ts_cache = h_new_str(NULL, (free_ft)&ts_deref); |
| | 2909 | self->ts_cache = h_new_ptr((free_ft)&ts_deref); |
| 2910 | 2910 | self->buf_index = 0; |
| 2911 | 2911 | self->dynbuf = NULL; |
-
|
rad7fae
|
r0c11a5
|
|
| 1170 | 1170 | /* make sure all_fields contains the default fields */ |
| 1171 | 1171 | self->analyzer = analyzer; |
| 1172 | | self->ts_cache = h_new_str(NULL, (free_ft)&ts_deref); |
| | 1172 | self->ts_cache = h_new_ptr((free_ft)&ts_deref); |
| 1173 | 1173 | self->buf_index = 0; |
| 1174 | 1174 | self->dynbuf = NULL; |
-
|
rad7fae
|
r0c11a5
|
|
| 533 | 533 | size_t len = 0, pos = 0; |
| 534 | 534 | const int field_num = fis_get_field_num(ir->fis, phq->field); |
| | 535 | const char *field = S(phq->field); |
| 535 | 536 | |
| 536 | 537 | if (field_num < 0) { |
| 537 | | return expl_new(0.0, "field \"%s\" does not exist in the index", phq->field); |
| | 538 | return expl_new(0.0, "field \"%s\" does not exist in the index", field); |
| 538 | 539 | } |
| 539 | 540 | |
| … |
… |
|
| 564 | 565 | doc_freqs[pos] = 0; |
| 565 | 566 | |
| 566 | | idf_expl1 = expl_new(self->idf, "idf(%s:<%s>)", phq->field, doc_freqs); |
| 567 | | idf_expl2 = expl_new(self->idf, "idf(%s:<%s>)", phq->field, doc_freqs); |
| | 567 | idf_expl1 = expl_new(self->idf, "idf(%s:<%s>)", field, doc_freqs); |
| | 568 | idf_expl2 = expl_new(self->idf, "idf(%s:<%s>)", field, doc_freqs); |
| 568 | 569 | free(doc_freqs); |
| 569 | 570 | |
| … |
… |
|
| 599 | 600 | : (float)0.0; |
| 600 | 601 | field_norm_expl = expl_new(field_norm, "field_norm(field=%s, doc=%d)", |
| 601 | | phq->field, doc_num); |
| | 602 | field, doc_num); |
| 602 | 603 | |
| 603 | 604 | expl_add_detail(field_expl, field_norm_expl); |
| … |
… |
|
| 893 | 894 | const int pos_cnt = phq->pos_cnt; |
| 894 | 895 | PhrasePosition *positions = phq->positions; |
| | 896 | const char *field = S(phq->field); |
| | 897 | int flen = strlen(field); |
| 895 | 898 | |
| 896 | 899 | int i, j, buf_index = 0, pos, last_pos; |
| … |
… |
|
| 900 | 903 | if (phq->pos_cnt == 0) { |
| 901 | 904 | if (default_field != phq->field) { |
| 902 | | return strfmt("%s:\"\"", phq->field); |
| | 905 | return strfmt("%s:\"\"", field); |
| 903 | 906 | } |
| 904 | 907 | else { |
| … |
… |
|
| 910 | 913 | qsort(positions, pos_cnt, sizeof(PhrasePosition), &phrase_pos_cmp); |
| 911 | 914 | |
| 912 | | len = sym_len(phq->field) + 1; |
| | 915 | len = flen + 1; |
| 913 | 916 | |
| 914 | 917 | for (i = 0; i < pos_cnt; i++) { |
| … |
… |
|
| 926 | 929 | |
| 927 | 930 | if (default_field != phq->field) { |
| 928 | | len = sym_len(phq->field); |
| 929 | | memcpy(buffer, phq->field, len); |
| 930 | | buffer[len] = ':'; |
| 931 | | buf_index += len + 1; |
| | 931 | memcpy(buffer, field, flen); |
| | 932 | buffer[flen] = ':'; |
| | 933 | buf_index += flen + 1; |
| 932 | 934 | } |
| 933 | 935 | |
-
|
r950230
|
r0c11a5
|
|
| 19 | 19 | } Range; |
| 20 | 20 | |
| 21 | | static char *range_to_s(Range *range, Symbol field, float boost) |
| | 21 | static char *range_to_s(Range *range, Symbol default_field, float boost) |
| 22 | 22 | { |
| 23 | 23 | char *buffer, *b; |
| 24 | 24 | size_t flen, llen, ulen; |
| 25 | | |
| 26 | | flen = sym_len(range->field); |
| | 25 | const char *field = S(range->field); |
| | 26 | |
| | 27 | flen = strlen(field); |
| 27 | 28 | llen = range->lower_term ? strlen(range->lower_term) : 0; |
| 28 | 29 | ulen = range->upper_term ? strlen(range->upper_term) : 0; |
| … |
… |
|
| 30 | 31 | b = buffer; |
| 31 | 32 | |
| 32 | | if (field != range->field) { |
| 33 | | memcpy(buffer, range->field, flen * sizeof(char)); |
| | 33 | if (default_field != range->field) { |
| | 34 | memcpy(buffer, field, flen * sizeof(char)); |
| 34 | 35 | b += flen; |
| 35 | 36 | *b = ':'; |
-
|
rad7fae
|
r0c11a5
|
|
| 1615 | 1615 | } |
| 1616 | 1616 | else { |
| 1617 | | p = strfmt("span_terms(%s:%s)", SpQ(self)->field, terms); |
| | 1617 | p = strfmt("span_terms(%s:%s)", S(SpQ(self)->field), terms); |
| 1618 | 1618 | } |
| 1619 | 1619 | free(terms); |
-
|
r950230
|
r0c11a5
|
|
| 106 | 106 | return expl_new(sim_tf(self->similarity, (float)tf), |
| 107 | 107 | "tf(term_freq(%s:%s)=%d)", |
| 108 | | TQ(query)->field, TQ(query)->term, tf); |
| | 108 | S(TQ(query)->field), TQ(query)->term, tf); |
| 109 | 109 | } |
| 110 | 110 | |
| … |
… |
|
| 266 | 266 | static char *tq_to_s(Query *self, Symbol default_field) |
| 267 | 267 | { |
| 268 | | size_t flen = sym_len(TQ(self)->field); |
| | 268 | const char *field = S(TQ(self)->field); |
| | 269 | size_t flen = strlen(field); |
| 269 | 270 | size_t tlen = strlen(TQ(self)->term); |
| 270 | 271 | char *buffer = ALLOC_N(char, 34 + flen + tlen); |
| 271 | 272 | char *b = buffer; |
| 272 | 273 | if (default_field != TQ(self)->field) { |
| 273 | | memcpy(b, TQ(self)->field, sizeof(char) * flen); |
| | 274 | memcpy(b, field, sizeof(char) * flen); |
| 274 | 275 | b[flen] = ':'; |
| 275 | 276 | b += flen + 1; |
-
|
r950230
|
r0c11a5
|
|
| 848 | 848 | LazyDocField *lazy_df = NULL; |
| 849 | 849 | if (lazy_doc) { |
| 850 | | lazy_df = (LazyDocField *)h_get(lazy_doc->field_dict, field); |
| | 850 | lazy_df = lazy_doc_get(lazy_doc, field); |
| 851 | 851 | } |
| 852 | 852 | if (tv && lazy_df && tv->term_cnt > 0 && tv->terms[0].positions != NULL |
-
|
r5a8e6f
|
r0c11a5
|
|
| 599 | 599 | } |
| 600 | 600 | |
| | 601 | INLINE void os_write_string_len(OutStream *os, const char *str, int len) |
| | 602 | { |
| | 603 | os_write_vint(os, len); |
| | 604 | os_write_bytes(os, (uchar *)str, len); |
| | 605 | } |
| 601 | 606 | void os_write_string(OutStream *os, const char *str) |
| 602 | 607 | { |
| 603 | | int len = (int)strlen(str); |
| 604 | | os_write_vint(os, len); |
| 605 | | |
| 606 | | os_write_bytes(os, (uchar *)str, len); |
| | 608 | os_write_string_len(os, str, (int)strlen(str)); |
| 607 | 609 | } |
| 608 | 610 | |
-
|
r950230
|
r0c11a5
|
|
| 545 | 545 | store_deref(store); |
| 546 | 546 | |
| 547 | | lazy_df = (LazyDocField *)h_get(lazy_doc->field_dict, "stored"); |
| | 547 | lazy_df = lazy_doc_get(lazy_doc, I("stored")); |
| 548 | 548 | Apnull(lazy_doc->fields[0]->data[0].text); |
| 549 | 549 | Asequal("this is a stored field", text=lazy_df_get_data(lazy_df, 0)); |
-
|
rad7fae
|
r0c11a5
|
|
| 250 | 250 | float is_ok = 0.0; |
| 251 | 251 | LazyDoc *lazy_doc = searcher_get_lazy_doc(sea, doc_num); |
| 252 | | LazyDocField *lazy_df = (LazyDocField *)h_get(lazy_doc->field_dict, "num"); |
| | 252 | LazyDocField *lazy_df = lazy_doc_get(lazy_doc, I("num")); |
| 253 | 253 | char *num = lazy_df_get_data(lazy_df, 0); |
| 254 | 254 | (void)score; |
| … |
… |
|
| 268 | 268 | float distance = 0.0; |
| 269 | 269 | LazyDoc *lazy_doc = searcher_get_lazy_doc(sea, doc_num); |
| 270 | | LazyDocField *lazy_df = (LazyDocField *)h_get(lazy_doc->field_dict, "num"); |
| | 270 | LazyDocField *lazy_df = lazy_doc_get(lazy_doc, I("num")); |
| 271 | 271 | char *num = lazy_df_get_data(lazy_df, 0); |
| 272 | 272 | (void)score; |
-
|
r950230
|
r0c11a5
|
|
| 1736 | 1736 | tvs = ir->term_vectors(ir, 3); |
| 1737 | 1737 | Aiequal(3, tvs->size); |
| 1738 | | tv = (TermVector *)h_get(tvs, "author"); |
| | 1738 | tv = (TermVector *)h_get(tvs, I("author")); |
| 1739 | 1739 | if (Apnotnull(tv)) { |
| 1740 | 1740 | Asequal("author", tv->field); |
| … |
… |
|
| 1743 | 1743 | Apnull(tv->offsets); |
| 1744 | 1744 | } |
| 1745 | | tv = (TermVector *)h_get(tvs, "body"); |
| | 1745 | tv = (TermVector *)h_get(tvs, I("body")); |
| 1746 | 1746 | if (Apnotnull(tv)) { |
| 1747 | 1747 | Asequal("body", tv->field); |
| 1748 | 1748 | Aiequal(4, tv->term_cnt); |
| 1749 | 1749 | } |
| 1750 | | tv = (TermVector *)h_get(tvs, "title"); |
| | 1750 | tv = (TermVector *)h_get(tvs, I("title")); |
| 1751 | 1751 | if (Apnotnull(tv)) { |
| 1752 | 1752 | Asequal("title", tv->field); |
| … |
… |
|
| 1821 | 1821 | |
| 1822 | 1822 | lz_doc = ir->get_lazy_doc(ir, 0); |
| 1823 | | lz_df1 = (LazyDocField *)h_get(lz_doc->field_dict, changing_field); |
| 1824 | | lz_df2 = (LazyDocField *)h_get(lz_doc->field_dict, compressed_field); |
| | 1823 | lz_df1 = lazy_doc_get(lz_doc, changing_field); |
| | 1824 | lz_df2 = lazy_doc_get(lz_doc, compressed_field); |
| 1825 | 1825 | Asequal(lazy_df_get_data(lz_df1, 0), lazy_df_get_data(lz_df2, 0)); |
| 1826 | 1826 | lazy_doc_close(lz_doc); |
| 1827 | 1827 | |
| 1828 | 1828 | lz_doc = ir->get_lazy_doc(ir, 2); |
| 1829 | | lz_df1 = (LazyDocField *)h_get(lz_doc->field_dict, tag); |
| 1830 | | lz_df2 = (LazyDocField *)h_get(lz_doc->field_dict, compressed_field); |
| | 1829 | lz_df1 = lazy_doc_get(lz_doc, tag); |
| | 1830 | lz_df2 = lazy_doc_get(lz_doc, compressed_field); |
| 1831 | 1831 | for (i = 0; i < 4; i++) { |
| 1832 | 1832 | Asequal(lazy_df_get_data(lz_df1, i), lazy_df_get_data(lz_df2, i)); |
| … |
… |
|
| 1835 | 1835 | |
| 1836 | 1836 | lz_doc = ir->get_lazy_doc(ir, 2); |
| 1837 | | lz_df1 = (LazyDocField *)h_get(lz_doc->field_dict, tag); |
| 1838 | | lz_df2 = (LazyDocField *)h_get(lz_doc->field_dict, compressed_field); |
| | 1837 | lz_df1 = lazy_doc_get(lz_doc, tag); |
| | 1838 | lz_df2 = lazy_doc_get(lz_doc, compressed_field); |
| 1839 | 1839 | lazy_df_get_bytes(lz_df1, buf1, 5, 11); |
| 1840 | 1840 | lazy_df_get_bytes(lz_df2, buf2, 5, 11); |
-
|
r0a55ed
|
r0c11a5
|
|
| 138 | 138 | ext/store.c |
| 139 | 139 | ext/store.h |
| 140 | | ext/symbol.c |
| 141 | | ext/symbol.h |
| 142 | 140 | ext/term_vectors.c |
| 143 | 141 | ext/win32.h |
-
|
rcc429f
|
r0c11a5
|
|
| 55 | 55 | "../c/lib/libstemmer_c/include/libstemmer.[h]"] |
| 56 | 56 | EXT_SRC.exclude('../c/**/ind.[ch]', |
| | 57 | '../c/**/symbol.[ch]', |
| 57 | 58 | '../c/include/threading.h', |
| | 59 | '../c/include/scanner.h', |
| 58 | 60 | '../c/include/internal.h', |
| 59 | 61 | '../c/src/lang.c', |
| … |
… |
|
| 82 | 84 | # prepend lib files to avoid conflicts |
| 83 | 85 | file dest_fn => fn do |t| |
| 84 | | safe_ln fn, dest_fn |
| | 86 | ln fn, dest_fn |
| 85 | 87 | |
| 86 | 88 | if fn =~ /stemmer/ |
-
|
raeada4
|
r0c11a5
|
|
| 6 | 6 | elsif ENV['FERRET_DEV'] |
| 7 | 7 | require 'mkmf' |
| 8 | | $CFLAGS += " -g -Wall -fno-stack-protector -fno-common -D_FILE_OFFSET_BITS=64 -D_XOPEN_SOURCE=500" |
| | 8 | $CFLAGS = " -g -Wall -fno-stack-protector -fno-common -D_FILE_OFFSET_BITS=64 -D_XOPEN_SOURCE=500" |
| | 9 | puts $CFLAGS |
| 9 | 10 | create_makefile("ferret_ext") |
| 10 | 11 | else |
-
|
r0a55ed
|
r0c11a5
|
|
| 191 | 191 | switch (TYPE(rfield)) { |
| 192 | 192 | case T_SYMBOL: |
| 193 | | return I(rb_id2name(SYM2ID(rfield))); |
| | 193 | return SYM2FSYM(rfield); |
| 194 | 194 | case T_STRING: |
| 195 | 195 | return I(rs2s(rfield)); |
| … |
… |
|
| 293 | 293 | { |
| 294 | 294 | return rb_struct_new(cTerm, |
| 295 | | SYM2RSYM(field), |
| | 295 | FSYM2SYM(field), |
| 296 | 296 | rb_str_new2(text), |
| 297 | 297 | NULL); |
-