]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: using a c++ lambda over a struct
authorBjörn Lindqvist <bjourne@gmail.com>
Wed, 4 May 2016 23:57:52 +0000 (01:57 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Wed, 4 May 2016 23:57:52 +0000 (01:57 +0200)
vm/sampling_profiler.cpp

index 2373af129a3fb2f2557a18b327e8bfe11ba00eca..abee86b472d4b8469e7ef08964e0f9aa4f3ca5cb 100644 (file)
@@ -39,26 +39,16 @@ void factor_vm::record_sample(bool prolog_p) {
                                        special_objects[OBJ_CURRENT_THREAD]));
 }
 
-struct record_callstack_sample_iterator {
-  std::vector<cell>* sample_callstacks;
-  bool skip_p;
-
-  record_callstack_sample_iterator(std::vector<cell>* sample_callstacks,
-                                   bool prolog_p)
-      : sample_callstacks(sample_callstacks), skip_p(prolog_p) {}
+void factor_vm::record_callstack_sample(cell* begin, cell* end, bool prolog_p) {
+  *begin = sample_callstacks.size();
 
-  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
+  bool skip_p = prolog_p;
+  auto recorder = [&](cell frame_top, cell size, code_block* owner, cell addr) {
     if (skip_p)
       skip_p = false;
     else
-      sample_callstacks->push_back(owner->owner);
-  }
-};
-
-void factor_vm::record_callstack_sample(cell* begin, cell* end, bool prolog_p) {
-  *begin = sample_callstacks.size();
-
-  record_callstack_sample_iterator recorder(&sample_callstacks, prolog_p);
+      sample_callstacks.push_back(owner->owner);
+  };
   iterate_callstack(ctx, recorder);
 
   *end = sample_callstacks.size();