-
Notifications
You must be signed in to change notification settings - Fork 1
/
tclstring.pmc
71 lines (57 loc) · 1.98 KB
/
tclstring.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
/*
* Copyright (C) 2001-2009, The Parrot Foundation.
*/
#include "parrot/cclass.h"
#include "pmc/pmc_float.h"
#include "pmc/pmc_integer.h"
static INTVAL dynpmc_TclFloat;
static INTVAL dynpmc_TclInt;
pmclass TclString
dynpmc
extends String
does string
group tcl_group
hll tcl
maps String
{
void class_init() {
dynpmc_TclFloat = pmc_type(INTERP, CONST_STRING(INTERP, "TclFloat"));
dynpmc_TclInt = pmc_type(INTERP, CONST_STRING(INTERP, "TclInt"));
}
void set_number_native(FLOATVAL value) {
pmc_reuse(INTERP, SELF, dynpmc_TclFloat, 0);
SETATTR_Float_fv(INTERP, SELF, value);
}
void set_integer_native(INTVAL value) {
pmc_reuse(INTERP, SELF, dynpmc_TclInt, 0);
SETATTR_Integer_iv(INTERP, SELF, value);
}
VTABLE INTVAL get_bool() {
PMC * const _class = VTABLE_get_class(interp, SELF);
STRING * const get_bool = CONST_STRING(interp, "get_bool");
INTVAL result = -9999; /* default, should never be used */
/* Get the vtable override for 'get_bool', run that instead. */
PMC * const method = Parrot_oo_find_vtable_override_for_class(interp, _class, get_bool);
if (!PMC_IS_NULL(method)) {
Parrot_ext_call(interp, method, "Pi->I", SELF, &result);
}
return result;
}
VTABLE INTVAL get_integer() {
PMC * const _class = VTABLE_get_class(interp, SELF);
STRING * const get_integer= CONST_STRING(interp, "get_integer");
INTVAL result = -10000; /* default, should never be used */
/* Get the vtable override for 'get_integer', run that instead. */
PMC * const method = Parrot_oo_find_vtable_override_for_class(interp, _class, get_integer);
if (!PMC_IS_NULL(method)) {
Parrot_ext_call(interp, method, "Pi->I", SELF, &result);
}
return result;
}
}
/*
* Local variables:
* c-file-style: "parrot"
* End:
* vim: expandtab shiftwidth=4:
*/