readapt 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/ext/readapt/hash_table.c +12 -16
- data/ext/readapt/monitor.c +31 -15
- data/ext/readapt/normalize.c +8 -10
- data/ext/readapt/normalize.h +1 -1
- data/lib/readapt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad64fe3f51193626e5680b735f161da45661c7aba6cede8c1b46fa92e3d19cad
|
4
|
+
data.tar.gz: 52a5fc764ca16387d5e0c9a18bbf17f183bdf81de5ce87bfed3104060df68f3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f3ec831e7e0c0a998083407b09e14a7c2217394ab0b606e00b5d13862ba1f8b5fb1e84fd903541661717ba4b177c558d8150ec2bb026393847bbd491877eace
|
7
|
+
data.tar.gz: d554b97e4f41d461ce33d0f9ebcf1b282e8b06da5a0a9a2dfdbdecb85ac585f4a0373a6068c5b9d6786449645181900ca848a6ecc4db1c49cee772a4cce736cb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.5.0 = August 20, 2019
|
2
|
+
- Monitor stores paths as C strings
|
3
|
+
- Fixed malloc size for normalized paths
|
4
|
+
- Fixed table insertion before existing items
|
5
|
+
|
1
6
|
# 0.4.0 - August 19. 2019
|
2
7
|
- Breakpoints use C implementation of hash tables
|
3
8
|
- Simplified entry point detection
|
data/ext/readapt/hash_table.c
CHANGED
@@ -158,34 +158,30 @@ static void ht_insert_key(ht_hash_table *ht, char *key, const long *value, const
|
|
158
158
|
item = ht_new_item(key, value, size);
|
159
159
|
tmp = malloc(sizeof(ht_item) * (ht->size + 1));
|
160
160
|
|
161
|
-
for (i = 0; i
|
161
|
+
for (i = 0; i < ht->size; i++)
|
162
162
|
{
|
163
163
|
if (!inserted)
|
164
164
|
{
|
165
|
-
|
165
|
+
cmp = strcmp(item->key, ht->items[i]->key);
|
166
|
+
if (cmp > 0)
|
166
167
|
{
|
167
|
-
tmp[
|
168
|
+
tmp[cursor] = item;
|
169
|
+
cursor++;
|
168
170
|
inserted = 1;
|
169
171
|
}
|
170
|
-
|
171
|
-
|
172
|
-
cmp = strcmp(item->key, ht->items[i]->key);
|
173
|
-
if (cmp > 0)
|
174
|
-
{
|
175
|
-
tmp[i] = item;
|
176
|
-
tmp[i + 1] = ht->items[cursor];
|
177
|
-
inserted = 1;
|
178
|
-
cursor++;
|
179
|
-
i++;
|
180
|
-
}
|
181
|
-
}
|
172
|
+
tmp[cursor] = ht->items[i];
|
173
|
+
cursor++;
|
182
174
|
}
|
183
175
|
else
|
184
176
|
{
|
185
|
-
tmp[
|
177
|
+
tmp[cursor] = ht->items[i];
|
186
178
|
cursor++;
|
187
179
|
}
|
188
180
|
}
|
181
|
+
if (!inserted)
|
182
|
+
{
|
183
|
+
tmp[ht->size] = item;
|
184
|
+
}
|
189
185
|
free(ht->items);
|
190
186
|
ht->items = tmp;
|
191
187
|
ht->size++;
|
data/ext/readapt/monitor.c
CHANGED
@@ -16,7 +16,7 @@ static VALUE tpThreadBegin;
|
|
16
16
|
static VALUE tpThreadEnd;
|
17
17
|
static VALUE debugProc;
|
18
18
|
static int firstLineEvent = 0;
|
19
|
-
static
|
19
|
+
static char *entryFile;
|
20
20
|
|
21
21
|
static ID id_continue;
|
22
22
|
static ID id_pause;
|
@@ -44,7 +44,7 @@ static int match_step(thread_reference_t *ptr)
|
|
44
44
|
}
|
45
45
|
|
46
46
|
static ID
|
47
|
-
monitor_debug(
|
47
|
+
monitor_debug(const char *file, const long line, VALUE tracepoint, thread_reference_t *ptr, ID event)
|
48
48
|
{
|
49
49
|
VALUE bind, bid, snapshot, result;
|
50
50
|
|
@@ -53,7 +53,7 @@ monitor_debug(VALUE file, long line, VALUE tracepoint, thread_reference_t *ptr,
|
|
53
53
|
snapshot = rb_funcall(c_Snapshot, rb_intern("new"), 7,
|
54
54
|
LONG2NUM(ptr->id),
|
55
55
|
bid,
|
56
|
-
file,
|
56
|
+
rb_str_new_cstr(file),
|
57
57
|
INT2NUM(line),
|
58
58
|
Qnil,
|
59
59
|
ID2SYM(event),
|
@@ -74,7 +74,8 @@ monitor_debug(VALUE file, long line, VALUE tracepoint, thread_reference_t *ptr,
|
|
74
74
|
static void
|
75
75
|
process_line_event(VALUE tracepoint, void *data)
|
76
76
|
{
|
77
|
-
VALUE ref,
|
77
|
+
VALUE ref, tmp;
|
78
|
+
char *tp_file;
|
78
79
|
long tp_line;
|
79
80
|
thread_reference_t *ptr;
|
80
81
|
rb_trace_arg_t *tp;
|
@@ -93,13 +94,14 @@ process_line_event(VALUE tracepoint, void *data)
|
|
93
94
|
return;
|
94
95
|
}
|
95
96
|
tp = rb_tracearg_from_tracepoint(tracepoint);
|
96
|
-
|
97
|
+
tmp = rb_tracearg_path(tp);
|
98
|
+
tp_file = normalize_path_new_cstr(StringValueCStr(tmp));
|
97
99
|
tp_line = NUM2LONG(rb_tracearg_lineno(tp));
|
98
100
|
|
99
101
|
dapEvent = id_continue;
|
100
102
|
if (!firstLineEvent)
|
101
103
|
{
|
102
|
-
if (
|
104
|
+
if (strcmp(tp_file, entryFile) == 0)
|
103
105
|
{
|
104
106
|
firstLineEvent = 1;
|
105
107
|
ptr->control = rb_intern("entry");
|
@@ -114,7 +116,7 @@ process_line_event(VALUE tracepoint, void *data)
|
|
114
116
|
{
|
115
117
|
dapEvent = rb_intern("step");
|
116
118
|
}
|
117
|
-
else if (breakpoints_match(
|
119
|
+
else if (breakpoints_match(tp_file, tp_line))
|
118
120
|
{
|
119
121
|
dapEvent = rb_intern("breakpoint");
|
120
122
|
}
|
@@ -127,6 +129,8 @@ process_line_event(VALUE tracepoint, void *data)
|
|
127
129
|
{
|
128
130
|
monitor_debug(tp_file, tp_line, tracepoint, ptr, dapEvent);
|
129
131
|
}
|
132
|
+
|
133
|
+
free(tp_file);
|
130
134
|
}
|
131
135
|
}
|
132
136
|
}
|
@@ -162,7 +166,7 @@ process_return_event(VALUE tracepoint, void *data)
|
|
162
166
|
static void
|
163
167
|
process_thread_begin_event(VALUE tracepoint, void *data)
|
164
168
|
{
|
165
|
-
VALUE list, here, prev, ref;
|
169
|
+
VALUE list, here, prev, ref, tmp;
|
166
170
|
thread_reference_t *ptr;
|
167
171
|
|
168
172
|
list = rb_funcall(rb_cThread, rb_intern("list"), 0);
|
@@ -178,8 +182,9 @@ process_thread_begin_event(VALUE tracepoint, void *data)
|
|
178
182
|
{
|
179
183
|
ref = thread_add_reference(here);
|
180
184
|
ptr = thread_reference_pointer(ref);
|
185
|
+
tmp = rb_funcall(tracepoint, rb_intern("path"), 0);
|
181
186
|
monitor_debug(
|
182
|
-
|
187
|
+
StringValueCStr(tmp),
|
183
188
|
NUM2LONG(rb_funcall(tracepoint, rb_intern("lineno"), 0)),
|
184
189
|
tracepoint,
|
185
190
|
ptr,
|
@@ -194,7 +199,7 @@ process_thread_begin_event(VALUE tracepoint, void *data)
|
|
194
199
|
static void
|
195
200
|
process_thread_end_event(VALUE tracepoint, void *data)
|
196
201
|
{
|
197
|
-
VALUE thr, ref;
|
202
|
+
VALUE thr, ref, tmp;
|
198
203
|
thread_reference_t *ptr;
|
199
204
|
|
200
205
|
thr = rb_thread_current();
|
@@ -202,7 +207,8 @@ process_thread_end_event(VALUE tracepoint, void *data)
|
|
202
207
|
if (ref != Qnil)
|
203
208
|
{
|
204
209
|
ptr = thread_reference_pointer(ref);
|
205
|
-
|
210
|
+
tmp = rb_funcall(tracepoint, rb_intern("path"), 0);
|
211
|
+
monitor_debug(StringValueCStr(tmp), NUM2LONG(rb_funcall(tracepoint, rb_intern("lineno"), 0)), tracepoint, ptr, rb_intern("thread_end"));
|
206
212
|
thread_delete_reference(thr);
|
207
213
|
}
|
208
214
|
}
|
@@ -220,13 +226,21 @@ monitor_enable_s(VALUE self, VALUE file)
|
|
220
226
|
rb_raise(rb_eArgError, "must be called with a block");
|
221
227
|
}
|
222
228
|
|
223
|
-
|
224
|
-
|
229
|
+
if (file == Qnil)
|
230
|
+
{
|
231
|
+
entryFile = NULL;
|
232
|
+
firstLineEvent = 1;
|
233
|
+
}
|
234
|
+
else
|
235
|
+
{
|
236
|
+
entryFile = normalize_path_new_cstr(StringValueCStr(file));
|
237
|
+
firstLineEvent = 0;
|
238
|
+
}
|
225
239
|
|
226
240
|
ref = thread_add_reference(rb_thread_current());
|
227
241
|
ptr = thread_reference_pointer(ref);
|
228
242
|
monitor_debug(
|
229
|
-
|
243
|
+
"",
|
230
244
|
0,
|
231
245
|
Qnil,
|
232
246
|
ptr,
|
@@ -254,6 +268,9 @@ monitor_disable_s(VALUE self)
|
|
254
268
|
rb_tracepoint_disable(tpThreadBegin);
|
255
269
|
rb_tracepoint_disable(tpThreadEnd);
|
256
270
|
|
271
|
+
free(entryFile);
|
272
|
+
entryFile = NULL;
|
273
|
+
|
257
274
|
return previous;
|
258
275
|
}
|
259
276
|
|
@@ -301,5 +318,4 @@ void initialize_monitor(VALUE m_Readapt)
|
|
301
318
|
rb_global_variable(&tpReturn);
|
302
319
|
rb_global_variable(&tpThreadBegin);
|
303
320
|
rb_global_variable(&tpThreadEnd);
|
304
|
-
rb_global_variable(&entryFile);
|
305
321
|
}
|
data/ext/readapt/normalize.c
CHANGED
@@ -14,17 +14,15 @@ checkIfWindows()
|
|
14
14
|
return result == Qnil ? 0 : 1;
|
15
15
|
}
|
16
16
|
|
17
|
-
|
18
|
-
normalize_path(VALUE str)
|
17
|
+
char *normalize_path_new_cstr(char *str)
|
19
18
|
{
|
20
|
-
VALUE result;
|
21
19
|
char *buffer;
|
22
20
|
long i, len;
|
23
21
|
|
22
|
+
buffer = malloc((strlen(str) + 1) * sizeof(char));
|
23
|
+
strcpy(buffer, str);
|
24
24
|
if (isWindows)
|
25
25
|
{
|
26
|
-
buffer = malloc((rb_str_strlen(str) + 1) * sizeof(char));
|
27
|
-
strcpy(buffer, StringValueCStr(str));
|
28
26
|
buffer[0] = toupper(buffer[0]);
|
29
27
|
len = strlen(buffer);
|
30
28
|
for (i = 2; i < len; i++)
|
@@ -34,17 +32,17 @@ normalize_path(VALUE str)
|
|
34
32
|
buffer[i] = '/';
|
35
33
|
}
|
36
34
|
}
|
37
|
-
result = rb_str_new_cstr(buffer);
|
38
|
-
free(buffer);
|
39
|
-
return result;
|
40
35
|
}
|
41
|
-
return
|
36
|
+
return buffer;
|
42
37
|
}
|
43
38
|
|
44
39
|
static VALUE
|
45
40
|
normalize_path_s(VALUE self, VALUE str)
|
46
41
|
{
|
47
|
-
|
42
|
+
char *path = normalize_path_new_cstr(StringValueCStr(str));
|
43
|
+
VALUE result = rb_str_new_cstr(path);
|
44
|
+
free(path);
|
45
|
+
return result;
|
48
46
|
}
|
49
47
|
|
50
48
|
void initialize_normalize(VALUE m_Readapt)
|
data/ext/readapt/normalize.h
CHANGED
data/lib/readapt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: readapt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backport
|