FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
mruby/src/etc.c at master · bencode/mruby · GitHub
bencode
/
mruby
Public
forked from
mruby/mruby
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
mruby
/
src
/
etc.c
Copy path
More file actions
More file actions
Latest commit
History
History
History
222 lines (194 loc) · 4.76 KB
Breadcrumbs
mruby
/
src
/
etc.c
Copy path
File metadata and controls
222 lines (194 loc) · 4.76 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/*
** etc.c -
**
** See Copyright Notice in mruby.h
*/
#include
"mruby.h"
#include
"mruby/string.h"
#include
"mruby/data.h"
#include
"mruby/class.h"
#include
"mruby/re.h"
#include
"mruby/irep.h"
MRB_API
struct
RData
*
mrb_data_object_alloc
(
mrb_state
*
mrb
,
struct
RClass
*
klass
,
void
*
ptr
,
const
mrb_data_type
*
type
)
{
struct
RData
*
data
;
data
=
(
struct
RData
*
)
mrb_obj_alloc
(
mrb
,
MRB_TT_DATA
,
klass
);
data
->
data
=
ptr
;
data
->
type
=
type
;
return
data
;
}
MRB_API
void
mrb_data_check_type
(
mrb_state
*
mrb
,
mrb_value
obj
,
const
mrb_data_type
*
type
)
{
if
(
mrb_immediate_p
(
obj
)
||
(
mrb_type
(
obj
)
!=
MRB_TT_DATA
)) {
mrb_check_type
(
mrb
,
obj
,
MRB_TT_DATA
);
}
if
(
DATA_TYPE
(
obj
)
!=
type
) {
const
mrb_data_type
*
t2
=
DATA_TYPE
(
obj
);
if
(
t2
) {
mrb_raisef
(
mrb
,
E_TYPE_ERROR
,
"wrong argument type %S (expected %S)"
,
mrb_str_new_cstr
(
mrb
,
t2
->
struct_name
),
mrb_str_new_cstr
(
mrb
,
type
->
struct_name
));
}
else
{
struct
RClass
*
c
=
mrb_class
(
mrb
,
obj
);
mrb_raisef
(
mrb
,
E_TYPE_ERROR
,
"uninitialized %S (expected %S)"
,
mrb_obj_value
(
c
),
mrb_str_new_cstr
(
mrb
,
type
->
struct_name
));
}
}
}
MRB_API
void
*
mrb_data_check_get_ptr
(
mrb_state
*
mrb
,
mrb_value
obj
,
const
mrb_data_type
*
type
)
{
if
(
mrb_immediate_p
(
obj
)
||
(
mrb_type
(
obj
)
!=
MRB_TT_DATA
)) {
return
NULL
;
}
if
(
DATA_TYPE
(
obj
)
!=
type
) {
return
NULL
;
}
return
DATA_PTR
(
obj
);
}
MRB_API
void
*
mrb_data_get_ptr
(
mrb_state
*
mrb
,
mrb_value
obj
,
const
mrb_data_type
*
type
)
{
mrb_data_check_type
(
mrb
,
obj
,
type
);
return
DATA_PTR
(
obj
);
}
MRB_API
mrb_sym
mrb_obj_to_sym
(
mrb_state
*
mrb
,
mrb_value
name
)
{
mrb_value
tmp
;
mrb_sym
id
;
switch
(
mrb_type
(
name
)) {
default
:
tmp
=
mrb_check_string_type
(
mrb
,
name
);
if
(
mrb_nil_p
(
tmp
)) {
tmp
=
mrb_inspect
(
mrb
,
name
);
mrb_raisef
(
mrb
,
E_TYPE_ERROR
,
"%S is not a symbol"
,
tmp
);
}
name
=
tmp
;
/* fall through */
case
MRB_TT_STRING
:
name
=
mrb_str_intern
(
mrb
,
name
);
/* fall through */
case
MRB_TT_SYMBOL
:
id
=
mrb_symbol
(
name
);
}
return
id
;
}
MRB_API
mrb_int
mrb_float_id
(
mrb_float
f
)
{
const
char
*
p
=
(
const
char
*
)
&
f
;
int
len
=
sizeof
(
f
);
mrb_int
id
=
0
;
while
(
len
--
) {
id
=
id
*
65599
+
*
p
;
p
++
;
}
id
=
id
+
(
id
>>
5
);
return
id
;
}
MRB_API
mrb_int
mrb_obj_id
(
mrb_value
obj
)
{
mrb_int
tt
=
mrb_type
(
obj
);
#define
MakeID2
(
p
,
t
) (mrb_int)(((intptr_t)(p))^(t))
#define
MakeID
(
p
) MakeID2(p,tt)
switch
(
tt
) {
case
MRB_TT_FREE
:
case
MRB_TT_UNDEF
:
return
MakeID
(
0
);
/* not define */
case
MRB_TT_FALSE
:
if
(
mrb_nil_p
(
obj
))
return
MakeID
(
1
);
return
MakeID
(
0
);
case
MRB_TT_TRUE
:
return
MakeID
(
1
);
case
MRB_TT_SYMBOL
:
return
MakeID
(
mrb_symbol
(
obj
));
case
MRB_TT_FIXNUM
:
return
MakeID2
(
mrb_float_id
((
mrb_float
)
mrb_fixnum
(
obj
)),
MRB_TT_FLOAT
);
case
MRB_TT_FLOAT
:
return
MakeID
(
mrb_float_id
(
mrb_float
(
obj
)));
case
MRB_TT_STRING
:
case
MRB_TT_OBJECT
:
case
MRB_TT_CLASS
:
case
MRB_TT_MODULE
:
case
MRB_TT_ICLASS
:
case
MRB_TT_SCLASS
:
case
MRB_TT_PROC
:
case
MRB_TT_ARRAY
:
case
MRB_TT_HASH
:
case
MRB_TT_RANGE
:
case
MRB_TT_EXCEPTION
:
case
MRB_TT_FILE
:
case
MRB_TT_DATA
:
default
:
return
MakeID
(
mrb_ptr
(
obj
));
}
}
#ifdef
MRB_WORD_BOXING
MRB_API
mrb_value
mrb_word_boxing_float_value
(
mrb_state
*
mrb
,
mrb_float
f
)
{
mrb_value
v
;
v
.
value
.
p
=
mrb_obj_alloc
(
mrb
,
MRB_TT_FLOAT
,
mrb
->
float_class
);
v
.
value
.
fp
->
f
=
f
;
return
v
;
}
MRB_API
mrb_value
mrb_word_boxing_float_pool
(
mrb_state
*
mrb
,
mrb_float
f
)
{
struct
RFloat
*
nf
=
(
struct
RFloat
*
)
mrb_malloc
(
mrb
,
sizeof
(
struct
RFloat
));
nf
->
tt
=
MRB_TT_FLOAT
;
nf
->
c
=
mrb
->
float_class
;
nf
->
f
=
f
;
return
mrb_obj_value
(
nf
);
}
MRB_API
mrb_value
mrb_word_boxing_cptr_value
(
mrb_state
*
mrb
,
void
*
p
)
{
mrb_value
v
;
v
.
value
.
p
=
mrb_obj_alloc
(
mrb
,
MRB_TT_CPTR
,
mrb
->
object_class
);
v
.
value
.
vp
->
p
=
p
;
return
v
;
}
#endif
/* MRB_WORD_BOXING */
MRB_API
mrb_bool
mrb_regexp_p
(
mrb_state
*
mrb
,
mrb_value
v
)
{
return
mrb_class_defined
(
mrb
,
REGEXP_CLASS
)
&&
mrb_obj_is_kind_of
(
mrb
,
v
,
mrb_class_get
(
mrb
,
REGEXP_CLASS
));
}
#if
defined
_MSC_VER
&&
_MSC_VER
<
1900
#ifndef
va_copy
static
void
mrb_msvc_va_copy
(
va_list
*
dest
,
va_list
src
)
{
*
dest
=
src
;
}
#define
va_copy
(
dest
,
src
) mrb_msvc_va_copy(&(dest), src)
#endif
MRB_API
int
mrb_msvc_vsnprintf
(
char
*
s
,
size_t
n
,
const
char
*
format
,
va_list
arg
)
{
int
cnt
;
va_list
argcp
;
va_copy
(
argcp
,
arg
);
if
(
n
==
0
||
(
cnt
=
_vsnprintf_s
(
s
,
n
,
_TRUNCATE
,
format
,
argcp
))
<
0
) {
cnt
=
_vscprintf
(
format
,
arg
);
}
va_end
(
argcp
);
return
cnt
;
}
MRB_API
int
mrb_msvc_snprintf
(
char
*
s
,
size_t
n
,
const
char
*
format
, ...)
{
va_list
arg
;
int
ret
;
va_start
(
arg
,
format
);
ret
=
mrb_msvc_vsnprintf
(
s
,
n
,
format
,
arg
);
va_end
(
arg
);
return
ret
;
}
#endif
/* defined _MSC_VER && _MSC_VER < 1900 */
Back
|
FazBrowse Home
|
New Git URL