emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/beardbolt b56d3b6cdb 245/323: Merge branch 'improve-sta


From: ELPA Syncer
Subject: [elpa] externals/beardbolt b56d3b6cdb 245/323: Merge branch 'improve-starters' into 'master'
Date: Thu, 9 Mar 2023 10:58:35 -0500 (EST)

branch: externals/beardbolt
commit b56d3b6cdbfa828144d3d8e559472064b0908d0e
Merge: 3fe322e573 d257e51fce
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>

    Merge branch 'improve-starters' into 'master'
    
    Improve starters
    
    See merge request jgkamat/rmsbolt!15
---
 starters/rmsbolt-starter.el |  3 +--
 starters/rmsbolt.zig        | 25 +++++++++++++++++++------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/starters/rmsbolt-starter.el b/starters/rmsbolt-starter.el
index 230ef2fa13..0ed5c54c8f 100644
--- a/starters/rmsbolt-starter.el
+++ b/starters/rmsbolt-starter.el
@@ -13,8 +13,7 @@
   "Check to see if a LETTER is RMS."
   (pcase letter
     ((or "R" "M" "S") t)
-    (_ nil)
-    (_ "I will never run!")))
+    (_ nil)))
 
 (defun main ()
   "Main entrypoint."
diff --git a/starters/rmsbolt.zig b/starters/rmsbolt.zig
index ace2786ec6..4f4ad1c52e 100644
--- a/starters/rmsbolt.zig
+++ b/starters/rmsbolt.zig
@@ -16,20 +16,33 @@ export fn isRMS(a: u8) u8 {
     };
 }
 
-// Functions marked with `export` use the C calling convention, so its 
parameters and
-// return value can only have C types.
-// To export a native Zig fn, use the following pattern:
-fn zigFn(xs: []u8) []u8 {
+// Exported by `exportFns` below
+pub fn zigFn(xs: []u8) []u8 {
     for (xs) |*x| {
         x.* *= 2;
     }
     return xs;
 }
 
-export fn exportZigFn() usize {
-    return @ptrToInt(zigFn);
+// Export all public, non-generic functions in this file.
+// This is needed because functions that accept or return Zig-specific types 
can't be marked
+// with `export`.
+// `export` is limited to functions that only accept or return C types, which 
makes them
+// compatible with the C calling convention.
+export fn exportPubFns() usize {
+    var fns: usize = 0;
+    inline for (@typeInfo((@This())).Struct.decls) |decl| {
+        if (!decl.is_pub) continue;
+        const field = @field(@This(), decl.name);
+        const info = @typeInfo(@TypeOf(field));
+        if (info == .Fn and !info.Fn.is_generic) {
+            fns += @ptrToInt(field);
+        }
+    }
+    return fns;
 }
 
+
 // In some cases, Zig embeds a panic handler that prints stack traces, causing 
a
 // disassembly much larger than normal.
 // You can optionally place this function in files you disassemble to make 
them easier to digest.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]