]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/run.cpp
Put brackets around ipv6 addresses in `inet6 present`
[factor.git] / vm / run.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 1bb2e0c..7d9ead8
@@ -1,26 +1,27 @@
 #include "master.hpp"
 
-namespace factor
-{
+namespace factor {
 
-void factor_vm::primitive_exit()
-{
-       exit(to_fixnum(dpop()));
-}
+void factor_vm::primitive_exit() { exit((int)to_fixnum(ctx->pop())); }
 
-void factor_vm::primitive_system_micros()
-{
-       box_unsigned_8(system_micros());
+void exit(int status) {
+  close_console();
+  ::exit(status);
 }
 
-void factor_vm::primitive_nano_count()
-{
-       box_unsigned_8(nano_count());
+void factor_vm::primitive_nano_count() {
+  uint64_t nanos = nano_count();
+  if (nanos < last_nano_count) {
+    std::cout << "Monotonic counter decreased from 0x";
+    std::cout << std::hex << last_nano_count;
+    std::cout << " to 0x" << nanos << "." << std::dec << "\n";
+    std::cout << "Please report this error.\n";
+    current_vm()->factorbug();
+  }
+  last_nano_count = nanos;
+  ctx->push(from_unsigned_8(nanos));
 }
 
-void factor_vm::primitive_sleep()
-{
-       sleep_nanos(to_unsigned_8(dpop()));
-}
+void factor_vm::primitive_sleep() { sleep_nanos(to_unsigned_8(ctx->pop())); }
 
 }