File tree 2 files changed +20
-3
lines changed
2 files changed +20
-3
lines changed Original file line number Diff line number Diff line change @@ -28,6 +28,11 @@ def misses
28
28
raise PrimitiveFailure , "CallSite#misses primitive failed"
29
29
end
30
30
31
+ def reset
32
+ Rubinius . primitive :call_site_reset
33
+ raise PrimitiveFailure , "CallSite#reset primitive failed"
34
+ end
35
+
31
36
def inspect
32
37
"#<#{ self . class . name } :0x#{ self . object_id . to_s ( 16 ) } name=#{ @name } ip=#{ ip } depth=#{ depth } invokes=#{ invokes } hits=#{ hits } misses=#{ misses } >"
33
38
end
Original file line number Diff line number Diff line change @@ -358,9 +358,9 @@ namespace rubinius {
358
358
if (atomic::compare_and_swap (reinterpret_cast <void **>(updated_caches),
359
359
previous_caches, inline_caches))
360
360
{
361
- if (previous_caches) delete[] previous_caches;
361
+ if (previous_caches) delete previous_caches;
362
362
} else {
363
- delete[] inline_caches;
363
+ delete inline_caches;
364
364
}
365
365
366
366
return ;
@@ -397,7 +397,7 @@ namespace rubinius {
397
397
execute (CallSite::dispatch);
398
398
cache_miss (CallSite::dispatch);
399
399
400
- delete[] caches ();
400
+ delete caches ();
401
401
caches (NULL );
402
402
403
403
atomic::memory_barrier ();
@@ -506,6 +506,18 @@ namespace rubinius {
506
506
return Integer::from (state, misses ());
507
507
}
508
508
509
+ // Rubinius.primitive :call_site_reset
510
+ CallSite* reset (STATE) {
511
+ if (caches ()) delete caches ();
512
+
513
+ invokes (0 );
514
+ execute (default_execute);
515
+ cache_miss (default_execute);
516
+ caches (NULL );
517
+
518
+ return this ;
519
+ }
520
+
509
521
class Info : public TypeInfo {
510
522
public:
511
523
Info (object_type type)
You can’t perform that action at this time.
0 commit comments