-
Notifications
You must be signed in to change notification settings - Fork 5
/
rubystring.pmc
75 lines (65 loc) · 2.1 KB
/
rubystring.pmc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* RubyString.pmc
* Copyright (C) 2001-2003, The Perl Foundation.
* SVN Info
* $Id$
* Overview:
* These are the vtable functions for the RubyString base class
* Data Structure and Algorithms:
* History:
* Notes:
* Please remove unneeded entries.
* References:
*/
#include "parrot/parrot.h"
static STRING *true, *false, *yes, *no;
pmclass RubyString
extends String
does string
dynpmc
group ruby_group
hll Ruby
maps String
{
void class_init () {
PMC *string_anchor;
INTVAL fixedstringarray_typenum;
if (pass) {
true = string_from_const_cstring(INTERP, "true",4);
false = string_from_const_cstring(INTERP, "false",5);
yes = string_from_const_cstring(INTERP, "yes",3);
no = string_from_const_cstring(INTERP, "no",2);
fixedstringarray_typenum = pmc_type(INTERP, string_from_const_cstring(INTERP, "FixedStringArray", 0));
string_anchor = pmc_new(INTERP,fixedstringarray_typenum);
VTABLE_set_integer_native(INTERP,string_anchor,4);
VTABLE_set_string_keyed_int(INTERP,string_anchor,0,true);
VTABLE_set_string_keyed_int(INTERP,string_anchor,1,false);
VTABLE_set_string_keyed_int(INTERP,string_anchor,2,yes);
VTABLE_set_string_keyed_int(INTERP,string_anchor,3,no);
dod_register_pmc(INTERP, string_anchor);
}
}
INTVAL get_bool () {
STRING* s = (STRING*) PMC_str_val(SELF);
if (!string_compare(INTERP,s,true)) {
return 1;
} else if (!string_compare(INTERP,s,false)) {
return 0;
} else if (!string_compare(INTERP,s,yes)) {
return 1;
} else if (!string_compare(INTERP,s,no)) {
return 0;
} else if (VTABLE_get_integer(INTERP, SELF) != 0) {
return 1;
}
return 0; /* XXX Throw exception about invalid boolean type. */
}
}
/*
* Local variables:
* c-indentation-style: bsd
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*
* vim: expandtab shiftwidth=4:
*/