diff --git a/README.md b/README.md index 53f09b5a..f285f7fa 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ A small/lightweight statically typed scripting language written in Zig ## How to build and install -_Latest zig version supported: 0.14.0-dev.2643+fb43e91b2_ +_Latest zig version supported: 0.14.0-dev.2989+bf6ee7cb3_ ### Requirements - Since this is built with Zig, you should be able to build buzz on a wide variety of architectures even though this has only been tested on x86/M1. diff --git a/build.zig b/build.zig index c3b56e32..560c2f45 100644 --- a/build.zig +++ b/build.zig @@ -101,7 +101,7 @@ pub fn build(b: *Build) !void { // Check minimum zig version const current_zig = builtin.zig_version; - const min_zig = std.SemanticVersion.parse("0.14.0-dev.2851+b074fb7dd") catch return; + const min_zig = std.SemanticVersion.parse("0.14.0-dev.2989+bf6ee7cb3") catch return; if (current_zig.order(min_zig).compare(.lt)) { @panic(b.fmt("Your Zig version v{} does not meet the minimum build requirement of v{}", .{ current_zig, min_zig })); } diff --git a/src/Parser.zig b/src/Parser.zig index 9d5b3882..5fa1871e 100644 --- a/src/Parser.zig +++ b/src/Parser.zig @@ -139,7 +139,7 @@ else const Self = @This(); -extern fn dlerror() [*:0]u8; +extern fn dlerror() callconv(.c) [*:0]u8; pub fn defaultBuzzPrefix() []const u8 { return "."; @@ -8231,10 +8231,7 @@ fn importLibSymbol(self: *Self, full_file_name: []const u8, symbol: []const u8) var lib: ?std.DynLib = null; for (paths.items) |path| { - lib = std.DynLib.open(path) catch |err| l: { - std.debug.print(">>> {s} => {}\n", .{ path, err }); - break :l null; - }; + lib = std.DynLib.open(path) catch null; if (lib != null) { break; } diff --git a/src/builtin/fiber.zig b/src/builtin/fiber.zig index 21383847..42005823 100644 --- a/src/builtin/fiber.zig +++ b/src/builtin/fiber.zig @@ -6,7 +6,7 @@ const VM = @import("../vm.zig").VM; const _value = @import("../value.zig"); const Value = _value.Value; -pub fn over(ctx: *NativeCtx) c_int { +pub fn over(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjFiber.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push(Value.fromBoolean(self.fiber.status == .Over)); @@ -14,7 +14,7 @@ pub fn over(ctx: *NativeCtx) c_int { return 1; } -pub fn cancel(ctx: *NativeCtx) c_int { +pub fn cancel(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjFiber.cast(ctx.vm.peek(0).obj()).?; // Main fiber can't be cancelled @@ -27,7 +27,7 @@ pub fn cancel(ctx: *NativeCtx) c_int { return 0; } -pub fn isMain(ctx: *NativeCtx) c_int { +pub fn isMain(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjFiber.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push(Value.fromBoolean(self.fiber.parent_fiber == null)); diff --git a/src/builtin/list.zig b/src/builtin/list.zig index de321412..da3a012a 100644 --- a/src/builtin/list.zig +++ b/src/builtin/list.zig @@ -10,7 +10,7 @@ const VM = @import("../vm.zig").VM; const Value = @import("../value.zig").Value; const buzz_api = @import("../buzz_api.zig"); -pub fn append(ctx: *NativeCtx) c_int { +pub fn append(ctx: *NativeCtx) callconv(.c) c_int { const list_value: Value = ctx.vm.peek(1); const list: *ObjList = ObjList.cast(list_value.obj()).?; const value: Value = ctx.vm.peek(0); @@ -26,7 +26,7 @@ pub fn append(ctx: *NativeCtx) c_int { return 0; } -pub fn insert(ctx: *NativeCtx) c_int { +pub fn insert(ctx: *NativeCtx) callconv(.c) c_int { const list_value: Value = ctx.vm.peek(2); const list: *ObjList = ObjList.cast(list_value.obj()).?; var index = ctx.vm.peek(1).integer(); @@ -52,7 +52,7 @@ pub fn insert(ctx: *NativeCtx) c_int { return 1; } -pub fn len(ctx: *NativeCtx) c_int { +pub fn len(ctx: *NativeCtx) callconv(.c) c_int { const list: *ObjList = ObjList.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push(Value.fromInteger(@as(i32, @intCast(list.items.items.len)))); @@ -60,7 +60,7 @@ pub fn len(ctx: *NativeCtx) c_int { return 1; } -pub fn reverse(ctx: *NativeCtx) c_int { +pub fn reverse(ctx: *NativeCtx) callconv(.c) c_int { const list: *ObjList = ObjList.cast(ctx.vm.peek(0).obj()).?; var new_list = ctx.vm.gc.allocateObject( @@ -85,7 +85,7 @@ pub fn reverse(ctx: *NativeCtx) c_int { return 1; } -pub fn pop(ctx: *NativeCtx) c_int { +pub fn pop(ctx: *NativeCtx) callconv(.c) c_int { const list: *ObjList = ObjList.cast(ctx.vm.peek(0).obj()).?; if (list.items.items.len > 0) { @@ -97,7 +97,7 @@ pub fn pop(ctx: *NativeCtx) c_int { return 1; } -pub fn remove(ctx: *NativeCtx) c_int { +pub fn remove(ctx: *NativeCtx) callconv(.c) c_int { const list: *ObjList = ObjList.cast(ctx.vm.peek(1).obj()).?; const list_index = ctx.vm.peek(0).integer(); @@ -135,7 +135,7 @@ fn lessThan(context: SortContext, lhs: Value, rhs: Value) bool { return context.ctx.vm.pop().boolean(); } -pub fn sort(ctx: *NativeCtx) c_int { +pub fn sort(ctx: *NativeCtx) callconv(.c) c_int { var self = ObjList.cast(ctx.vm.peek(1).obj()).?; // fun compare(T lhs, T rhs) > bool const sort_closure = ctx.vm.peek(0); @@ -156,7 +156,7 @@ pub fn sort(ctx: *NativeCtx) c_int { return 1; } -pub fn indexOf(ctx: *NativeCtx) c_int { +pub fn indexOf(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjList = ObjList.cast(ctx.vm.peek(1).obj()).?; const needle: Value = ctx.vm.peek(0); @@ -207,19 +207,19 @@ fn cloneRaw(ctx: *NativeCtx, mutable: bool) void { ctx.vm.push(new_list.toValue()); } -pub fn cloneImmutable(ctx: *NativeCtx) c_int { +pub fn cloneImmutable(ctx: *NativeCtx) callconv(.c) c_int { cloneRaw(ctx, false); return 1; } -pub fn cloneMutable(ctx: *NativeCtx) c_int { +pub fn cloneMutable(ctx: *NativeCtx) callconv(.c) c_int { cloneRaw(ctx, true); return 1; } -pub fn join(ctx: *NativeCtx) c_int { +pub fn join(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjList.cast(ctx.vm.peek(1).obj()).?; const separator = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -250,7 +250,7 @@ pub fn join(ctx: *NativeCtx) c_int { return 1; } -pub fn sub(ctx: *NativeCtx) c_int { +pub fn sub(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjList = ObjList.cast(ctx.vm.peek(2).obj()).?; const start = @min( @max( @@ -302,7 +302,7 @@ pub fn sub(ctx: *NativeCtx) c_int { return 1; } -pub fn next(ctx: *NativeCtx) c_int { +pub fn next(ctx: *NativeCtx) callconv(.c) c_int { const list_value: Value = ctx.vm.peek(1); const list: *ObjList = ObjList.cast(list_value.obj()).?; const list_index: Value = ctx.vm.peek(0); @@ -325,7 +325,7 @@ pub fn next(ctx: *NativeCtx) c_int { return 1; } -pub fn forEach(ctx: *NativeCtx) c_int { +pub fn forEach(ctx: *NativeCtx) callconv(.c) c_int { const list = ObjList.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -346,7 +346,7 @@ pub fn forEach(ctx: *NativeCtx) c_int { return 0; } -pub fn reduce(ctx: *NativeCtx) c_int { +pub fn reduce(ctx: *NativeCtx) callconv(.c) c_int { const list = ObjList.cast(ctx.vm.peek(2).obj()).?; const closure = ctx.vm.peek(1); var accumulator = ctx.vm.peek(0); @@ -376,7 +376,7 @@ pub fn reduce(ctx: *NativeCtx) c_int { return 1; } -pub fn filter(ctx: *NativeCtx) c_int { +pub fn filter(ctx: *NativeCtx) callconv(.c) c_int { const list = ObjList.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -419,7 +419,7 @@ pub fn filter(ctx: *NativeCtx) c_int { return 1; } -pub fn map(ctx: *NativeCtx) c_int { +pub fn map(ctx: *NativeCtx) callconv(.c) c_int { const list = ObjList.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -478,7 +478,7 @@ pub fn map(ctx: *NativeCtx) c_int { return 1; } -pub fn fill(ctx: *NativeCtx) c_int { +pub fn fill(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjList = ObjList.cast(ctx.vm.peek(3).obj()).?; const value = ctx.vm.peek(2); const start: usize = @intCast( diff --git a/src/builtin/map.zig b/src/builtin/map.zig index bbd090b6..bb535fde 100644 --- a/src/builtin/map.zig +++ b/src/builtin/map.zig @@ -43,19 +43,19 @@ fn cloneRaw(ctx: *NativeCtx, mutable: bool) void { ctx.vm.push(new_map.toValue()); } -pub fn cloneMutable(ctx: *NativeCtx) c_int { +pub fn cloneMutable(ctx: *NativeCtx) callconv(.c) c_int { cloneRaw(ctx, true); return 1; } -pub fn cloneImmutable(ctx: *NativeCtx) c_int { +pub fn cloneImmutable(ctx: *NativeCtx) callconv(.c) c_int { cloneRaw(ctx, false); return 1; } -pub fn reduce(ctx: *NativeCtx) c_int { +pub fn reduce(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjMap.cast(ctx.vm.peek(2).obj()).?; const closure = ctx.vm.peek(1); var accumulator = ctx.vm.peek(0); @@ -80,7 +80,7 @@ pub fn reduce(ctx: *NativeCtx) c_int { return 1; } -pub fn filter(ctx: *NativeCtx) c_int { +pub fn filter(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjMap.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -123,7 +123,7 @@ pub fn filter(ctx: *NativeCtx) c_int { return 1; } -pub fn forEach(ctx: *NativeCtx) c_int { +pub fn forEach(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjMap.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -143,7 +143,7 @@ pub fn forEach(ctx: *NativeCtx) c_int { return 0; } -pub fn map(ctx: *NativeCtx) c_int { +pub fn map(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjMap.cast(ctx.vm.peek(1).obj()).?; const closure = ctx.vm.peek(0); @@ -235,7 +235,7 @@ const SortContext = struct { } }; -pub fn sort(ctx: *NativeCtx) c_int { +pub fn sort(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjMap = ObjMap.cast(ctx.vm.peek(1).obj()).?; const sort_closure = ctx.vm.peek(0); @@ -253,7 +253,7 @@ pub fn sort(ctx: *NativeCtx) c_int { return 1; } -pub fn diff(ctx: *NativeCtx) c_int { +pub fn diff(ctx: *NativeCtx) callconv(.c) c_int { const lhs: *ObjMap = ObjMap.cast(ctx.vm.peek(1).obj()).?; const rhs: *ObjMap = ObjMap.cast(ctx.vm.peek(0).obj()).?; @@ -291,7 +291,7 @@ pub fn diff(ctx: *NativeCtx) c_int { return 1; } -pub fn intersect(ctx: *NativeCtx) c_int { +pub fn intersect(ctx: *NativeCtx) callconv(.c) c_int { const lhs: *ObjMap = ObjMap.cast(ctx.vm.peek(1).obj()).?; const rhs: *ObjMap = ObjMap.cast(ctx.vm.peek(0).obj()).?; @@ -329,7 +329,7 @@ pub fn intersect(ctx: *NativeCtx) c_int { return 1; } -pub fn size(ctx: *NativeCtx) c_int { +pub fn size(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjMap = ObjMap.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push(Value.fromInteger(@intCast(self.map.count()))); @@ -337,7 +337,7 @@ pub fn size(ctx: *NativeCtx) c_int { return 1; } -pub fn remove(ctx: *NativeCtx) c_int { +pub fn remove(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjMap = ObjMap.cast(ctx.vm.peek(1).obj()).?; const map_key = ctx.vm.peek(0); @@ -350,7 +350,7 @@ pub fn remove(ctx: *NativeCtx) c_int { return 1; } -pub fn keys(ctx: *NativeCtx) c_int { +pub fn keys(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjMap = ObjMap.cast(ctx.vm.peek(0).obj()).?; const map_keys = self.map.keys(); @@ -401,7 +401,7 @@ pub fn keys(ctx: *NativeCtx) c_int { return 1; } -pub fn values(ctx: *NativeCtx) c_int { +pub fn values(ctx: *NativeCtx) callconv(.c) c_int { const self: *ObjMap = ObjMap.cast(ctx.vm.peek(0).obj()).?; const map_values: []Value = self.map.values(); diff --git a/src/builtin/pattern.zig b/src/builtin/pattern.zig index badf1a60..90c34e1a 100644 --- a/src/builtin/pattern.zig +++ b/src/builtin/pattern.zig @@ -19,7 +19,7 @@ extern fn patternReplaceLength( replacement_len: isize, pattern_ptr: [*]const u8, pattern_len: isize, -) isize; +) callconv(.c) isize; extern fn patternReplace( string_ptr: [*]const u8, @@ -30,7 +30,7 @@ extern fn patternReplace( pattern_len: isize, output_ptr: [*]const u8, output_len: isize, -) void; +) callconv(.c) void; extern fn patternReplaceAllLength( string_ptr: [*]const u8, @@ -39,7 +39,7 @@ extern fn patternReplaceAllLength( replacement_len: isize, pattern_ptr: [*]const u8, pattern_len: isize, -) isize; +) callconv(.c) isize; extern fn patternReplaceAll( string_ptr: [*]const u8, @@ -50,7 +50,7 @@ extern fn patternReplaceAll( pattern_len: isize, output_ptr: [*]const u8, output_len: isize, -) void; +) callconv(.c) void; pub const pcre = @import("../pcre.zig"); @@ -221,7 +221,7 @@ fn rawReplaceAll(self: *ObjPattern, vm: *VM, subject: *ObjString, replacement: * return current; } -pub fn match(ctx: *NativeCtx) c_int { +pub fn match(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjPattern.cast(ctx.vm.peek(1).obj()).?; const subject = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -243,7 +243,7 @@ pub fn match(ctx: *NativeCtx) c_int { return 1; } -pub fn replace(ctx: *NativeCtx) c_int { +pub fn replace(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjPattern.cast(ctx.vm.peek(2).obj()).?; const subject = ObjString.cast(ctx.vm.peek(1).obj()).?; const replacement = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -303,7 +303,7 @@ pub fn replace(ctx: *NativeCtx) c_int { return 1; } -pub fn matchAll(ctx: *NativeCtx) c_int { +pub fn matchAll(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjPattern.cast(ctx.vm.peek(1).obj()).?; const subject = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -323,7 +323,7 @@ pub fn matchAll(ctx: *NativeCtx) c_int { return 1; } -pub fn replaceAll(ctx: *NativeCtx) c_int { +pub fn replaceAll(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjPattern.cast(ctx.vm.peek(2).obj()).?; const subject = ObjString.cast(ctx.vm.peek(1).obj()).?; const replacement = ObjString.cast(ctx.vm.peek(0).obj()).?; diff --git a/src/builtin/range.zig b/src/builtin/range.zig index 4d230ba3..85170815 100644 --- a/src/builtin/range.zig +++ b/src/builtin/range.zig @@ -1,7 +1,7 @@ const obj = @import("../obj.zig"); const Value = @import("../value.zig").Value; -pub fn toList(ctx: *obj.NativeCtx) c_int { +pub fn toList(ctx: *obj.NativeCtx) callconv(.c) c_int { const range = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; var list: *obj.ObjList = ctx.vm.gc.allocateObject( @@ -54,7 +54,7 @@ pub fn toList(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn len(ctx: *obj.NativeCtx) c_int { +pub fn len(ctx: *obj.NativeCtx) callconv(.c) c_int { const range = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; ctx.vm.push( @@ -69,7 +69,7 @@ pub fn len(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn invert(ctx: *obj.NativeCtx) c_int { +pub fn invert(ctx: *obj.NativeCtx) callconv(.c) c_int { const range = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; ctx.vm.push( @@ -88,7 +88,7 @@ pub fn invert(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn subsetOf(ctx: *obj.NativeCtx) c_int { +pub fn subsetOf(ctx: *obj.NativeCtx) callconv(.c) c_int { const rangeA = ctx.vm.peek(1).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; const rangeB = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; @@ -102,7 +102,7 @@ pub fn subsetOf(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn intersect(ctx: *obj.NativeCtx) c_int { +pub fn intersect(ctx: *obj.NativeCtx) callconv(.c) c_int { const rangeA = ctx.vm.peek(1).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; const rangeB = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; @@ -128,7 +128,7 @@ pub fn intersect(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn @"union"(ctx: *obj.NativeCtx) c_int { +pub fn @"union"(ctx: *obj.NativeCtx) callconv(.c) c_int { const rangeA = ctx.vm.peek(1).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; const rangeB = ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; @@ -154,7 +154,7 @@ pub fn @"union"(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn high(ctx: *obj.NativeCtx) c_int { +pub fn high(ctx: *obj.NativeCtx) callconv(.c) c_int { ctx.vm.push( Value.fromInteger( ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?.high, @@ -164,7 +164,7 @@ pub fn high(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn low(ctx: *obj.NativeCtx) c_int { +pub fn low(ctx: *obj.NativeCtx) callconv(.c) c_int { ctx.vm.push( Value.fromInteger( ctx.vm.peek(0).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?.low, @@ -174,7 +174,7 @@ pub fn low(ctx: *obj.NativeCtx) c_int { return 1; } -pub fn contains(ctx: *obj.NativeCtx) c_int { +pub fn contains(ctx: *obj.NativeCtx) callconv(.c) c_int { const range = ctx.vm.peek(1).obj().access(obj.ObjRange, .Range, ctx.vm.gc).?; const value = ctx.vm.peek(0).integer(); diff --git a/src/builtin/str.zig b/src/builtin/str.zig index 4ff35803..72eb7226 100644 --- a/src/builtin/str.zig +++ b/src/builtin/str.zig @@ -8,7 +8,7 @@ const VM = @import("../vm.zig").VM; const _value = @import("../value.zig"); const Value = _value.Value; -pub fn trim(ctx: *NativeCtx) c_int { +pub fn trim(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; const trimmed = std.mem.trim(u8, str.string, " \t\r\n"); @@ -21,7 +21,7 @@ pub fn trim(ctx: *NativeCtx) c_int { return 1; } -pub fn len(ctx: *NativeCtx) c_int { +pub fn len(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push( @@ -33,7 +33,7 @@ pub fn len(ctx: *NativeCtx) c_int { return 1; } -pub fn utf8Len(ctx: *NativeCtx) c_int { +pub fn utf8Len(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push( @@ -45,7 +45,7 @@ pub fn utf8Len(ctx: *NativeCtx) c_int { return 1; } -pub fn utf8Valid(ctx: *NativeCtx) c_int { +pub fn utf8Valid(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; ctx.vm.push( @@ -57,7 +57,7 @@ pub fn utf8Valid(ctx: *NativeCtx) c_int { return 1; } -pub fn utf8Codepoints(ctx: *NativeCtx) c_int { +pub fn utf8Codepoints(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; const list_def_type = ctx.vm.gc.type_registry.getTypeDef( @@ -108,7 +108,7 @@ pub fn utf8Codepoints(ctx: *NativeCtx) c_int { return 1; } -pub fn repeat(ctx: *NativeCtx) c_int { +pub fn repeat(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(1).obj()).?; const n = ctx.vm.peek(0).integer(); @@ -131,7 +131,7 @@ pub fn repeat(ctx: *NativeCtx) c_int { return 1; } -pub fn byte(ctx: *NativeCtx) c_int { +pub fn byte(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(1).obj()).?; const index = @min( @max( @@ -150,7 +150,7 @@ pub fn byte(ctx: *NativeCtx) c_int { return 1; } -pub fn indexOf(ctx: *NativeCtx) c_int { +pub fn indexOf(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(1).obj()).?; const needle = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -166,7 +166,7 @@ pub fn indexOf(ctx: *NativeCtx) c_int { return 1; } -pub fn startsWith(ctx: *NativeCtx) c_int { +pub fn startsWith(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(1).obj()).?; const needle = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -179,7 +179,7 @@ pub fn startsWith(ctx: *NativeCtx) c_int { return 1; } -pub fn endsWith(ctx: *NativeCtx) c_int { +pub fn endsWith(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(1).obj()).?; const needle = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -192,7 +192,7 @@ pub fn endsWith(ctx: *NativeCtx) c_int { return 1; } -pub fn replace(ctx: *NativeCtx) c_int { +pub fn replace(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(2).obj()).?; const needle = ObjString.cast(ctx.vm.peek(1).obj()).?; const replacement = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -218,7 +218,7 @@ pub fn replace(ctx: *NativeCtx) c_int { return 1; } -pub fn sub(ctx: *NativeCtx) c_int { +pub fn sub(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(2).obj()).?; const start = @max( 0, @@ -249,7 +249,7 @@ pub fn sub(ctx: *NativeCtx) c_int { return 1; } -pub fn split(ctx: *NativeCtx) c_int { +pub fn split(ctx: *NativeCtx) callconv(.c) c_int { const self = ObjString.cast(ctx.vm.peek(1).obj()).?; const separator = ObjString.cast(ctx.vm.peek(0).obj()).?; @@ -313,7 +313,7 @@ pub fn split(ctx: *NativeCtx) c_int { return 1; } -pub fn encodeBase64(ctx: *NativeCtx) c_int { +pub fn encodeBase64(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; const encoded = ctx.vm.gc.allocator.alloc( @@ -338,7 +338,7 @@ pub fn encodeBase64(ctx: *NativeCtx) c_int { } // FIXME: signature should be fun decodeBase64(str self) > str !> DecodeError -pub fn decodeBase64(ctx: *NativeCtx) c_int { +pub fn decodeBase64(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; const size = std.base64.standard.Decoder.calcSizeForSlice(str.string) catch { @@ -374,7 +374,7 @@ pub fn decodeBase64(ctx: *NativeCtx) c_int { return 1; } -pub fn upper(ctx: *NativeCtx) c_int { +pub fn upper(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; if (str.string.len == 0) { @@ -406,7 +406,7 @@ pub fn upper(ctx: *NativeCtx) c_int { return 1; } -pub fn lower(ctx: *NativeCtx) c_int { +pub fn lower(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; if (str.string.len == 0) { @@ -438,7 +438,7 @@ pub fn lower(ctx: *NativeCtx) c_int { return 1; } -pub fn hex(ctx: *NativeCtx) c_int { +pub fn hex(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; if (str.string.len == 0) { @@ -468,7 +468,7 @@ pub fn hex(ctx: *NativeCtx) c_int { return 1; } -pub fn bin(ctx: *NativeCtx) c_int { +pub fn bin(ctx: *NativeCtx) callconv(.c) c_int { const str = ObjString.cast(ctx.vm.peek(0).obj()).?; if (str.string.len == 0) { diff --git a/src/buzz_api.zig b/src/buzz_api.zig index 4fded863..e8bdc9d7 100644 --- a/src/buzz_api.zig +++ b/src/buzz_api.zig @@ -65,22 +65,22 @@ else if (!is_wasm) // Stack manipulation /// Push a Value to the stack -export fn bz_push(vm: *VM, value: Value) void { +export fn bz_push(vm: *VM, value: Value) callconv(.c) void { vm.push(value); } /// Pop a Value from the stack and returns it -export fn bz_pop(vm: *VM) Value { +export fn bz_pop(vm: *VM) callconv(.c) Value { return vm.pop(); } /// Peeks at the stack at [distance] from the stack top -export fn bz_peek(vm: *VM, dist: u32) Value { +export fn bz_peek(vm: *VM, dist: u32) callconv(.c) Value { return vm.peek(dist); } /// Absolute access to the stack. -export fn bz_at(vm: *VM, at: u32) Value { +export fn bz_at(vm: *VM, at: u32) callconv(.c) Value { if (at < vm.current_fiber.stack.len) { return vm.current_fiber.stack[at]; } @@ -89,7 +89,7 @@ export fn bz_at(vm: *VM, at: u32) Value { } /// Converts a value to a string -export fn bz_valueToString(value: Value, len: *usize) ?[*]const u8 { +export fn bz_valueToString(value: Value, len: *usize) callconv(.c) ?[*]const u8 { if (!value.isObj() or value.obj().obj_type != .String) { return null; } @@ -101,7 +101,7 @@ export fn bz_valueToString(value: Value, len: *usize) ?[*]const u8 { return if (string.len > 0) @as([*]const u8, @ptrCast(string)) else null; } -export fn bz_valueToCString(value: Value) ?[*:0]const u8 { +export fn bz_valueToCString(value: Value) callconv(.c) ?[*:0]const u8 { if (!value.isObj() or value.obj().obj_type != .String) { return null; } @@ -360,19 +360,19 @@ fn valueDump(value: Value, vm: *VM, seen: *std.AutoHashMap(*_obj.Obj, void), dep } /// Dump value -pub export fn bz_valueDump(value: Value, vm: *VM) void { +pub export fn bz_valueDump(value: Value, vm: *VM) callconv(.c) void { var seen = std.AutoHashMap(*_obj.Obj, void).init(vm.gc.allocator); defer seen.deinit(); valueDump(value, vm, &seen, 0); } -export fn bz_valueToForeignContainerPtr(value: Value) [*]u8 { +export fn bz_valueToForeignContainerPtr(value: Value) callconv(.c) [*]u8 { return ObjForeignContainer.cast(value.obj()).?.data.ptr; } /// Converts a c string to a *ObjString -export fn bz_stringToValue(vm: *VM, string: ?[*]const u8, len: usize) Value { +export fn bz_stringToValue(vm: *VM, string: ?[*]const u8, len: usize) callconv(.c) Value { return ((if (string != null and len > 0) vm.gc.copyString(string.?[0..len]) else @@ -382,7 +382,7 @@ export fn bz_stringToValue(vm: *VM, string: ?[*]const u8, len: usize) Value { }).toValue(); } -export fn bz_stringToValueZ(vm: *VM, string: [*:0]const u8) Value { +export fn bz_stringToValueZ(vm: *VM, string: [*:0]const u8) callconv(.c) Value { // Keeping the sentinel return (vm.gc.copyString(string[0..(std.mem.len(string) + 1)]) catch { vm.panic("Out of memory"); @@ -390,14 +390,14 @@ export fn bz_stringToValueZ(vm: *VM, string: [*:0]const u8) Value { }).toValue(); } -export fn bz_stringConcat(obj_string: Value, other: Value, vm: *VM) Value { +export fn bz_stringConcat(obj_string: Value, other: Value, vm: *VM) callconv(.c) Value { return (ObjString.cast(obj_string.obj()).?.concat( vm, ObjString.cast(other.obj()).?, ) catch @panic("Could not concat strings")).toValue(); } -export fn bz_stringSubscript(obj_string: Value, index_value: Value, checked: bool, vm: *VM) Value { +export fn bz_stringSubscript(obj_string: Value, index_value: Value, checked: bool, vm: *VM) callconv(.c) Value { const str = ObjString.cast(obj_string.obj()).?; const index = index_value.integer(); @@ -432,7 +432,7 @@ export fn bz_stringSubscript(obj_string: Value, index_value: Value, checked: boo } } -export fn bz_valueCastToString(value: Value, vm: *VM) Value { +export fn bz_valueCastToString(value: Value, vm: *VM) callconv(.c) Value { const str = value.toStringAlloc(vm.gc.allocator) catch @panic("Out of memory"); defer vm.gc.allocator.free(str); @@ -445,11 +445,11 @@ export fn bz_valueCastToString(value: Value, vm: *VM) Value { // Type helpers /// Returns the [str] type -export fn bz_stringType(vm: *VM) Value { +export fn bz_stringType(vm: *VM) callconv(.c) Value { return vm.gc.type_registry.str_type.toValue(); } -export fn bz_listType(vm: *VM, item_type: Value, mutable: bool) Value { +export fn bz_listType(vm: *VM, item_type: Value, mutable: bool) callconv(.c) Value { return (vm.gc.type_registry.getTypeDef( .{ .def_type = .List, @@ -467,7 +467,7 @@ export fn bz_listType(vm: *VM, item_type: Value, mutable: bool) Value { }).toValue(); } -export fn bz_mapType(vm: *VM, key_type: Value, value_type: Value, mutable: bool) Value { +export fn bz_mapType(vm: *VM, key_type: Value, value_type: Value, mutable: bool) callconv(.c) Value { return (vm.gc.type_registry.getTypeDef( .{ .def_type = .Map, @@ -486,29 +486,29 @@ export fn bz_mapType(vm: *VM, key_type: Value, value_type: Value, mutable: bool) }).toValue(); } -export fn bz_containerTypeSize(type_def: Value) usize { +export fn bz_containerTypeSize(type_def: Value) callconv(.c) usize { return ObjTypeDef.cast(type_def.obj()).? .resolved_type.? .ForeignContainer .zig_type.size(); } -export fn bz_containerTypeAlign(type_def: Value) usize { +export fn bz_containerTypeAlign(type_def: Value) callconv(.c) usize { return ObjTypeDef.cast(type_def.obj()).? .resolved_type.? .ForeignContainer .zig_type.alignment(); } -export fn bz_allocated(self: *VM) usize { +export fn bz_allocated(self: *VM) callconv(.c) usize { return self.gc.bytes_allocated; } -export fn bz_collect(self: *VM) void { +export fn bz_collect(self: *VM) callconv(.c) void { self.gc.collectGarbage() catch @panic("Could not collect"); } -export fn bz_newRange(vm: *VM, low: Integer, high: Integer) Value { +export fn bz_newRange(vm: *VM, low: Integer, high: Integer) callconv(.c) Value { return Value.fromObj((vm.gc.allocateObject( ObjRange, ObjRange{ @@ -518,7 +518,7 @@ export fn bz_newRange(vm: *VM, low: Integer, high: Integer) Value { ) catch @panic("Could not create range")).toObj()); } -export fn bz_newList(vm: *VM, list_type: Value) Value { +export fn bz_newList(vm: *VM, list_type: Value) callconv(.c) Value { return (vm.gc.allocateObject( ObjList, ObjList.init( @@ -528,11 +528,11 @@ export fn bz_newList(vm: *VM, list_type: Value) Value { ) catch @panic("Could not create list")).toValue(); } -export fn bz_listAppend(list: Value, value: Value, vm: *VM) void { +export fn bz_listAppend(list: Value, value: Value, vm: *VM) callconv(.c) void { ObjList.cast(list.obj()).?.rawAppend(vm.gc, value) catch @panic("Could not add element to list"); } -export fn bz_listGet(self: Value, index: i32, checked: bool) Value { +export fn bz_listGet(self: Value, index: i32, checked: bool) callconv(.c) Value { const list = ObjList.cast(self.obj()).?; if (index < 0 or index >= list.items.items.len) { @@ -546,7 +546,7 @@ export fn bz_listGet(self: Value, index: i32, checked: bool) Value { return list.items.items[@intCast(index)]; } -export fn bz_listSet(self: Value, index: usize, value: Value, vm: *VM) void { +export fn bz_listSet(self: Value, index: usize, value: Value, vm: *VM) callconv(.c) void { ObjList.cast(self.obj()).?.set( vm.gc, index, @@ -554,11 +554,11 @@ export fn bz_listSet(self: Value, index: usize, value: Value, vm: *VM) void { ) catch @panic("Could not set element in list"); } -export fn bz_listLen(self: Value) usize { +export fn bz_listLen(self: Value) callconv(.c) usize { return ObjList.cast(self.obj()).?.items.items.len; } -export fn bz_listConcat(list: Value, other_list: Value, vm: *VM) Value { +export fn bz_listConcat(list: Value, other_list: Value, vm: *VM) callconv(.c) Value { const left: *ObjList = ObjList.cast(list.obj()).?; const right: *ObjList = ObjList.cast(other_list.obj()).?; @@ -576,7 +576,7 @@ export fn bz_listConcat(list: Value, other_list: Value, vm: *VM) Value { ) catch @panic("Could not concatenate lists")).toValue(); } -export fn bz_mapConcat(map: Value, other_map: Value, vm: *VM) Value { +export fn bz_mapConcat(map: Value, other_map: Value, vm: *VM) callconv(.c) Value { const left = ObjMap.cast(map.obj()).?; const right = ObjMap.cast(other_map.obj()).?; @@ -597,7 +597,7 @@ export fn bz_mapConcat(map: Value, other_map: Value, vm: *VM) Value { }) catch @panic("Could not concatenate maps")).toValue(); } -export fn bz_newUserData(vm: *VM, userdata: u64) Value { +export fn bz_newUserData(vm: *VM, userdata: u64) callconv(.c) Value { return (vm.gc.allocateObject( ObjUserData, ObjUserData{ .userdata = userdata }, @@ -607,7 +607,7 @@ export fn bz_newUserData(vm: *VM, userdata: u64) Value { }).toValue(); } -export fn bz_getUserDataPtr(userdata: Value) u64 { +export fn bz_getUserDataPtr(userdata: Value) callconv(.c) u64 { return ObjUserData.cast(userdata.obj()).?.userdata; } @@ -630,13 +630,13 @@ export fn bz_newVM() *VM { return vm; } -export fn bz_deinitVM(self: *VM) void { +export fn bz_deinitVM(self: *VM) callconv(.c) void { self.deinit(); self.import_registry.deinit(); self.gc.deinit(); } -export fn bz_panic(vm: *VM, msg: [*]const u8, len: usize) void { +export fn bz_panic(vm: *VM, msg: [*]const u8, len: usize) callconv(.c) void { vm.panic(msg[0..len]); } @@ -646,7 +646,7 @@ export fn bz_run( source_len: usize, file_name: ?[*]const u8, file_name_len: usize, -) bool { +) callconv(.c) bool { if (source == null or file_name_len == 0 or source_len == 0 or file_name_len == 0) { return false; } @@ -715,7 +715,7 @@ pub export fn bz_invoke( arguments: ?[*]const *const Value, len: u8, catch_value: ?*Value, -) void { +) callconv(.c) void { self.push(instance); var i: usize = 0; while (i < len) : (i += 1) { @@ -748,7 +748,7 @@ pub export fn bz_call( arguments: ?[*]const *const Value, len: u8, catch_value: ?*Value, -) void { +) callconv(.c) void { std.debug.assert(closure_value.obj().obj_type == .Closure); self.push(closure_value); @@ -774,7 +774,7 @@ pub export fn bz_call( } } -export fn bz_newQualifiedObjectInstance(self: *VM, qualified_name: [*]const u8, len: usize, mutable: bool) Value { +export fn bz_newQualifiedObjectInstance(self: *VM, qualified_name: [*]const u8, len: usize, mutable: bool) callconv(.c) Value { const object = ObjObject.cast(bz_getQualified(self, qualified_name, len).obj()).?; const instance: *ObjObjectInstance = self.gc.allocateObject( @@ -847,7 +847,7 @@ export fn bz_pushError( len: usize, message: ?[*]const u8, mlen: usize, -) void { +) callconv(.c) void { self.push( instanciateError( self, @@ -859,7 +859,7 @@ export fn bz_pushError( ); } -export fn bz_pushErrorEnum(self: *VM, qualified_name: [*]const u8, name_len: usize, case_str: [*]const u8, case_len: usize) void { +export fn bz_pushErrorEnum(self: *VM, qualified_name: [*]const u8, name_len: usize, case_str: [*]const u8, case_len: usize) callconv(.c) void { const case = self.gc.copyString(case_str[0..case_len]) catch @panic("Could not create error payload"); self.push( @@ -871,7 +871,7 @@ export fn bz_pushErrorEnum(self: *VM, qualified_name: [*]const u8, name_len: usi ); } -export fn bz_getQualified(self: *VM, qualified_name: [*]const u8, len: usize) Value { +export fn bz_getQualified(self: *VM, qualified_name: [*]const u8, len: usize) callconv(.c) Value { for (self.globals.items) |global| { if (global.isObj()) { switch (global.obj().obj_type) { @@ -897,7 +897,7 @@ export fn bz_getQualified(self: *VM, qualified_name: [*]const u8, len: usize) Va std.debug.panic("bz_getQualified no name: {s}", .{qualified_name[0..len]}); } -export fn bz_newObjectInstance(vm: *VM, object_value: Value, typedef_value: Value) Value { +export fn bz_newObjectInstance(vm: *VM, object_value: Value, typedef_value: Value) callconv(.c) Value { const object = if (object_value.isObj()) ObjObject.cast(object_value.obj()).? else null; const typedef = ObjTypeDef.cast(typedef_value.obj()).?; @@ -927,11 +927,11 @@ export fn bz_newObjectInstance(vm: *VM, object_value: Value, typedef_value: Valu return instance.toValue(); } -export fn bz_getObjectField(object_value: Value, field_idx: usize) Value { +export fn bz_getObjectField(object_value: Value, field_idx: usize) callconv(.c) Value { return ObjObject.cast(object_value.obj()).?.fields[field_idx]; } -export fn bz_setObjectField(object_value: Value, field_idx: usize, value: Value, vm: *VM) void { +export fn bz_setObjectField(object_value: Value, field_idx: usize, value: Value, vm: *VM) callconv(.c) void { ObjObject.cast(object_value.obj()).?.setField( vm.gc, field_idx, @@ -939,7 +939,7 @@ export fn bz_setObjectField(object_value: Value, field_idx: usize, value: Value, ) catch @panic("Could not set static field"); } -export fn bz_setObjectInstanceProperty(instance_value: Value, field_idx: usize, value: Value, vm: *VM) void { +export fn bz_setObjectInstanceProperty(instance_value: Value, field_idx: usize, value: Value, vm: *VM) callconv(.c) void { ObjObjectInstance.cast(instance_value.obj()).?.setField( vm.gc, field_idx, @@ -947,12 +947,12 @@ export fn bz_setObjectInstanceProperty(instance_value: Value, field_idx: usize, ) catch @panic("Could not set instance field"); } -export fn bz_getObjectInstanceProperty(instance_value: Value, property_idx: usize) Value { +export fn bz_getObjectInstanceProperty(instance_value: Value, property_idx: usize) callconv(.c) Value { return ObjObjectInstance.cast(instance_value.obj()).? .fields[property_idx]; } -export fn bz_getObjectInstanceMethod(instance_value: Value, method_idx: usize, bind: bool, vm: *VM) Value { +export fn bz_getObjectInstanceMethod(instance_value: Value, method_idx: usize, bind: bool, vm: *VM) callconv(.c) Value { const method = ObjObjectInstance.cast(instance_value.obj()).? .object.? .fields[method_idx]; @@ -968,7 +968,7 @@ export fn bz_getObjectInstanceMethod(instance_value: Value, method_idx: usize, b method; } -export fn bz_getProtocolMethod(instance_value: Value, method_name: Value, vm: *VM) Value { +export fn bz_getProtocolMethod(instance_value: Value, method_name: Value, vm: *VM) callconv(.c) Value { const instance = instance_value.obj().access( ObjObjectInstance, .ObjectInstance, @@ -991,7 +991,7 @@ export fn bz_getProtocolMethod(instance_value: Value, method_name: Value, vm: *V ); } -export fn bz_bindMethod(vm: *VM, receiver: Value, method_value: Value, native_value: Value) Value { +export fn bz_bindMethod(vm: *VM, receiver: Value, method_value: Value, native_value: Value) callconv(.c) Value { return (vm.gc.allocateObject( ObjBoundMethod, .{ @@ -1002,7 +1002,7 @@ export fn bz_bindMethod(vm: *VM, receiver: Value, method_value: Value, native_va ) catch @panic("Could not bind method")).toValue(); } -export fn bz_getEnumCase(enum_value: Value, case_name_value: Value, vm: *VM) Value { +export fn bz_getEnumCase(enum_value: Value, case_name_value: Value, vm: *VM) callconv(.c) Value { const self = ObjEnum.cast(enum_value.obj()).?; const case = ObjString.cast(case_name_value.obj()).?.string; var case_index: usize = 0; @@ -1023,13 +1023,13 @@ export fn bz_getEnumCase(enum_value: Value, case_name_value: Value, vm: *VM) Val ) catch @panic("Could not create enum case")).toValue(); } -export fn bz_getEnumInstanceValue(enum_instance_value: Value) Value { +export fn bz_getEnumInstanceValue(enum_instance_value: Value) callconv(.c) Value { const instance = ObjEnumInstance.cast(enum_instance_value.obj()).?; return instance.enum_ref.cases[instance.case]; } -export fn bz_getEnumCaseFromValue(enum_value: Value, case_value: Value, vm: *VM) Value { +export fn bz_getEnumCaseFromValue(enum_value: Value, case_value: Value, vm: *VM) callconv(.c) Value { const enum_ = ObjEnum.cast(enum_value.obj()).?; for (enum_.cases, 0..) |case, index| { @@ -1046,18 +1046,18 @@ export fn bz_getEnumCaseFromValue(enum_value: Value, case_value: Value, vm: *VM) return Value.Null; } -export fn bz_valueEqual(self: Value, other: Value) Value { +export fn bz_valueEqual(self: Value, other: Value) callconv(.c) Value { return Value.fromBoolean(self.eql(other)); } -export fn bz_valueTypeOf(self: Value, vm: *VM) Value { +export fn bz_valueTypeOf(self: Value, vm: *VM) callconv(.c) Value { return (self.typeOf(vm.gc) catch { vm.panic("Out of memory"); unreachable; }).toValue(); } -export fn bz_newMap(vm: *VM, map_type: Value) Value { +export fn bz_newMap(vm: *VM, map_type: Value) callconv(.c) Value { var map: *ObjMap = vm.gc.allocateObject( ObjMap, ObjMap.init( @@ -1069,7 +1069,7 @@ export fn bz_newMap(vm: *VM, map_type: Value) Value { return Value.fromObj(map.toObj()); } -export fn bz_mapSet(map: Value, key: Value, value: Value, vm: *VM) void { +export fn bz_mapSet(map: Value, key: Value, value: Value, vm: *VM) callconv(.c) void { ObjMap.cast(map.obj()).?.set( vm.gc, key, @@ -1077,15 +1077,15 @@ export fn bz_mapSet(map: Value, key: Value, value: Value, vm: *VM) void { ) catch @panic("Could not set map element"); } -export fn bz_mapGet(map: Value, key: Value) Value { +export fn bz_mapGet(map: Value, key: Value) callconv(.c) Value { return ObjMap.cast(map.obj()).?.map.get(key) orelse Value.Null; } -export fn bz_valueIs(self: Value, type_def: Value) Value { +export fn bz_valueIs(self: Value, type_def: Value) callconv(.c) Value { return Value.fromBoolean(type_def.is(self)); } -export fn bz_setTryCtx(self: *VM) *TryCtx { +export fn bz_setTryCtx(self: *VM) callconv(.c) *TryCtx { if (is_wasm) { unreachable; } @@ -1105,7 +1105,7 @@ export fn bz_setTryCtx(self: *VM) *TryCtx { return try_ctx; } -export fn bz_popTryCtx(self: *VM) void { +export fn bz_popTryCtx(self: *VM) callconv(.c) void { if (is_wasm) { unreachable; } @@ -1118,7 +1118,7 @@ export fn bz_popTryCtx(self: *VM) void { } // Like bz_throw but assumes the error payload is already on the stack -export fn bz_rethrow(vm: *VM) void { +export fn bz_rethrow(vm: *VM) callconv(.c) void { if (is_wasm) { unreachable; } @@ -1137,26 +1137,26 @@ export fn bz_rethrow(vm: *VM) void { } } -export fn bz_throw(vm: *VM, value: Value) void { +export fn bz_throw(vm: *VM, value: Value) callconv(.c) void { vm.push(value); bz_rethrow(vm); } -export fn bz_closeUpValues(vm: *VM, last: *Value) void { +export fn bz_closeUpValues(vm: *VM, last: *Value) callconv(.c) void { vm.closeUpValues(last); _ = vm.pop(); } -export fn bz_getUpValue(ctx: *NativeCtx, slot: usize) Value { +export fn bz_getUpValue(ctx: *NativeCtx, slot: usize) callconv(.c) Value { return ctx.upvalues[slot].location.*; } -export fn bz_setUpValue(ctx: *NativeCtx, slot: usize, value: Value) void { +export fn bz_setUpValue(ctx: *NativeCtx, slot: usize, value: Value) callconv(.c) void { ctx.upvalues[slot].location.* = value; } -export fn bz_context(ctx: *NativeCtx, closure_value: Value, new_ctx: *NativeCtx, arg_count: usize) *anyopaque { +export fn bz_context(ctx: *NativeCtx, closure_value: Value, new_ctx: *NativeCtx, arg_count: usize) callconv(.c) *anyopaque { if (is_wasm) { unreachable; } @@ -1226,7 +1226,7 @@ export fn bz_closure( function_node: Ast.Node.Index, native: *anyopaque, native_raw: *anyopaque, -) Value { +) callconv(.c) Value { if (is_wasm) { unreachable; } @@ -1267,13 +1267,13 @@ export fn bz_closure( return ctx.vm.pop(); } -export fn bz_dumpStack(ctx: *NativeCtx, off: usize) void { +export fn bz_dumpStack(ctx: *NativeCtx, off: usize) callconv(.c) void { io.print("base is {}, top is {}\n", .{ @intFromPtr(ctx.base), @intFromPtr(ctx.vm.current_fiber.stack_top) }); io.print("#{}:\n", .{off}); dumpStack(ctx.vm); } -export fn bz_getStringProperty(vm: *VM, string_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getStringProperty(vm: *VM, string_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjString.member(vm, property_idx) catch @panic("Out of memory").?; return if (bind) @@ -1287,7 +1287,7 @@ export fn bz_getStringProperty(vm: *VM, string_value: Value, property_idx: usize method; } -export fn bz_getPatternProperty(vm: *VM, pattern_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getPatternProperty(vm: *VM, pattern_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjPattern.member(vm, property_idx) catch @panic("Could not get pattern method"); return if (bind) @@ -1301,7 +1301,7 @@ export fn bz_getPatternProperty(vm: *VM, pattern_value: Value, property_idx: usi method; } -export fn bz_getFiberProperty(vm: *VM, fiber_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getFiberProperty(vm: *VM, fiber_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjFiber.member(vm, property_idx) catch @panic("Could not get fiber method"); return if (bind) @@ -1315,7 +1315,7 @@ export fn bz_getFiberProperty(vm: *VM, fiber_value: Value, property_idx: usize, method; } -export fn bz_getListProperty(vm: *VM, list_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getListProperty(vm: *VM, list_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjList.cast(list_value.obj()).? .member(vm, property_idx) catch @panic("Could not get list method"); @@ -1330,7 +1330,7 @@ export fn bz_getListProperty(vm: *VM, list_value: Value, property_idx: usize, bi method; } -export fn bz_getRangeProperty(vm: *VM, range_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getRangeProperty(vm: *VM, range_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjRange.member(vm, property_idx) catch @panic("Out of memory"); return if (bind) @@ -1344,7 +1344,7 @@ export fn bz_getRangeProperty(vm: *VM, range_value: Value, property_idx: usize, method; } -export fn bz_getMapProperty(vm: *VM, map_value: Value, property_idx: usize, bind: bool) Value { +export fn bz_getMapProperty(vm: *VM, map_value: Value, property_idx: usize, bind: bool) callconv(.c) Value { const method = ObjMap.cast(map_value.obj()).? .member(vm, property_idx) catch @panic("Could not get map method"); @@ -1359,7 +1359,7 @@ export fn bz_getMapProperty(vm: *VM, map_value: Value, property_idx: usize, bind method; } -export fn bz_stringNext(string_value: Value, index: *Value, vm: *VM) Value { +export fn bz_stringNext(string_value: Value, index: *Value, vm: *VM) callconv(.c) Value { const string = ObjString.cast(string_value.obj()).?; if (string.next( @@ -1375,7 +1375,7 @@ export fn bz_stringNext(string_value: Value, index: *Value, vm: *VM) Value { return Value.Null; } -export fn bz_listNext(list_value: Value, index: *Value, vm: *VM) Value { +export fn bz_listNext(list_value: Value, index: *Value, vm: *VM) callconv(.c) Value { const list = ObjList.cast(list_value.obj()).?; if (list.rawNext( @@ -1390,7 +1390,7 @@ export fn bz_listNext(list_value: Value, index: *Value, vm: *VM) Value { return Value.Null; } -export fn bz_rangeNext(range_value: Value, index_slot: Value) Value { +export fn bz_rangeNext(range_value: Value, index_slot: Value) callconv(.c) Value { const range = ObjRange.cast(range_value.obj()).?; if (index_slot.integerOrNull()) |index| { @@ -1410,7 +1410,7 @@ export fn bz_rangeNext(range_value: Value, index_slot: Value) Value { return Value.fromInteger(range.low); } -export fn bz_mapNext(map_value: Value, key: *Value) Value { +export fn bz_mapNext(map_value: Value, key: *Value) callconv(.c) Value { const map = ObjMap.cast(map_value.obj()).?; if (map.rawNext(if (key.isNull()) null else key.*)) |new_key| { @@ -1423,7 +1423,7 @@ export fn bz_mapNext(map_value: Value, key: *Value) Value { return Value.Null; } -export fn bz_enumNext(enum_value: Value, case: Value, vm: *VM) Value { +export fn bz_enumNext(enum_value: Value, case: Value, vm: *VM) callconv(.c) Value { const enum_ = ObjEnum.cast(enum_value.obj()).?; if (enum_.rawNext( @@ -1436,11 +1436,11 @@ export fn bz_enumNext(enum_value: Value, case: Value, vm: *VM) Value { return Value.Null; } -export fn bz_clone(vm: *VM, value: Value) Value { +export fn bz_clone(vm: *VM, value: Value) callconv(.c) Value { return vm.cloneValue(value) catch @panic("Could not clone value"); } -export fn bz_zigType(vm: *VM, ztype: [*]const u8, len: usize, expected_type: *Value) ?*const ZigType { +export fn bz_zigType(vm: *VM, ztype: [*]const u8, len: usize, expected_type: *Value) callconv(.c) ?*const ZigType { if (is_wasm) { return null; } @@ -1456,7 +1456,7 @@ export fn bz_zigType(vm: *VM, ztype: [*]const u8, len: usize, expected_type: *Va return null; } -export fn bz_foreignContainerGet(value: Value, field_idx: usize, vm: *VM) Value { +export fn bz_foreignContainerGet(value: Value, field_idx: usize, vm: *VM) callconv(.c) Value { const container = ObjForeignContainer.cast(value.obj()).?; return container.type_def.resolved_type.? @@ -1468,7 +1468,7 @@ export fn bz_foreignContainerGet(value: Value, field_idx: usize, vm: *VM) Value ); } -export fn bz_foreignContainerSet(value: Value, field_idx: usize, new_value: Value, vm: *VM) void { +export fn bz_foreignContainerSet(value: Value, field_idx: usize, new_value: Value, vm: *VM) callconv(.c) void { const container = ObjForeignContainer.cast(value.obj()).?; // Oh right that's beautiful enough... return container.type_def.resolved_type.?.ForeignContainer @@ -1480,7 +1480,7 @@ export fn bz_foreignContainerSet(value: Value, field_idx: usize, new_value: Valu ); } -export fn bz_newForeignContainerInstance(vm: *VM, typedef_value: Value) Value { +export fn bz_newForeignContainerInstance(vm: *VM, typedef_value: Value) callconv(.c) Value { return (vm.gc.allocateObject( ObjForeignContainer, ObjForeignContainer.init( @@ -1496,7 +1496,7 @@ export fn bz_newForeignContainerInstance(vm: *VM, typedef_value: Value) Value { }).toValue(); } -export fn bz_foreignContainerSlice(container_value: Value, len: *usize) [*]u8 { +export fn bz_foreignContainerSlice(container_value: Value, len: *usize) callconv(.c) [*]u8 { const container = ObjForeignContainer.cast(container_value.obj()).?; len.* = container.data.len; @@ -1504,11 +1504,11 @@ export fn bz_foreignContainerSlice(container_value: Value, len: *usize) [*]u8 { return container.data.ptr; } -export fn bz_valueIsForeignContainer(value: Value) bool { +export fn bz_valueIsForeignContainer(value: Value) callconv(.c) bool { return value.isObj() and value.obj().obj_type == .ForeignContainer; } -export fn bz_newForeignContainerFromSlice(vm: *VM, type_def: Value, ptr: [*]u8, len: usize) Value { +export fn bz_newForeignContainerFromSlice(vm: *VM, type_def: Value, ptr: [*]u8, len: usize) callconv(.c) Value { var container = (vm.gc.allocateObject( ObjForeignContainer, .{ @@ -1523,15 +1523,15 @@ export fn bz_newForeignContainerFromSlice(vm: *VM, type_def: Value, ptr: [*]u8, return container.toValue(); } -export fn bz_zigTypeSize(self: *ZigType) usize { +export fn bz_zigTypeSize(self: *ZigType) callconv(.c) usize { return self.size(); } -export fn bz_zigTypeAlignment(self: *ZigType) u16 { +export fn bz_zigTypeAlignment(self: *ZigType) callconv(.c) u16 { return self.alignment(); } -export fn bz_zigTypeToCString(self: *ZigType, vm: *VM) [*:0]const u8 { +export fn bz_zigTypeToCString(self: *ZigType, vm: *VM) callconv(.c) [*:0]const u8 { var out = std.ArrayList(u8).init(vm.gc.allocator); out.writer().print("{}\x00", .{self.*}) catch { @@ -1542,7 +1542,7 @@ export fn bz_zigTypeToCString(self: *ZigType, vm: *VM) [*:0]const u8 { return @ptrCast(out.items.ptr); } -export fn bz_serialize(vm: *VM, value: Value, error_value: *Value) Value { +export fn bz_serialize(vm: *VM, value: Value, error_value: *Value) callconv(.c) Value { var seen = std.AutoHashMap(*Obj, void).init(vm.gc.allocator); defer seen.deinit(); @@ -1577,7 +1577,7 @@ export fn bz_serialize(vm: *VM, value: Value, error_value: *Value) Value { }; } -export fn bz_currentFiber(vm: *VM) Value { +export fn bz_currentFiber(vm: *VM) callconv(.c) Value { return (vm.gc.allocateObject( ObjFiber, .{ @@ -1589,7 +1589,7 @@ export fn bz_currentFiber(vm: *VM) Value { }).toValue(); } -export fn bz_memcpy(dest: [*]u8, dest_len: usize, source: [*]u8, source_len: usize) void { +export fn bz_memcpy(dest: [*]u8, dest_len: usize, source: [*]u8, source_len: usize) callconv(.c) void { @memcpy(dest[0..dest_len], source[0..source_len]); } @@ -1599,7 +1599,7 @@ export fn bz_readZigValueFromBuffer( at: usize, buf: [*]u8, len: usize, -) Value { +) callconv(.c) Value { var buffer = std.ArrayList(u8).fromOwnedSlice(vm.gc.allocator, buf[0..len]); buffer.capacity = len; @@ -1752,7 +1752,7 @@ export fn bz_writeZigValueToBuffer( at: usize, buf: [*]u8, capacity: usize, -) void { +) callconv(.c) void { var buffer = std.ArrayList(u8).fromOwnedSlice(vm.gc.allocator, buf[0..capacity]); buffer.capacity = capacity; diff --git a/src/jit_extern_api.zig b/src/jit_extern_api.zig index 805619ac..20965d32 100644 --- a/src/jit_extern_api.zig +++ b/src/jit_extern_api.zig @@ -6,7 +6,7 @@ const JIT = @import("Jit.zig"); const jmp = @import("jmp.zig").jmp; const io = @import("io.zig"); -export fn bz_exit(code: c_int) noreturn { +export fn bz_exit(code: c_int) callconv(.c) noreturn { std.process.exit(@truncate(@as(c_uint, @bitCast(code)))); } diff --git a/src/lib/buzz_api.zig b/src/lib/buzz_api.zig index ed92c7a7..f40e5c08 100644 --- a/src/lib/buzz_api.zig +++ b/src/lib/buzz_api.zig @@ -122,45 +122,45 @@ pub const Value = packed struct { } pub extern fn bz_valueToString(value: Value, len: *usize) ?[*]const u8; - pub extern fn bz_valueToCString(value: Value) ?[*:0]const u8; - pub extern fn bz_valueToForeignContainerPtr(value: Value) [*]u8; - pub extern fn bz_valueIsForeignContainer(value: Value) bool; - pub extern fn bz_valueDump(value: Value, vm: *VM) void; - pub extern fn bz_valueEqual(self: Value, other: Value) Value; - pub extern fn bz_valueIs(self: Value, type_def: Value) Value; - pub extern fn bz_valueTypeOf(self: Value, vm: *VM) Value; - pub extern fn bz_getUserDataPtr(userdata: Value) u64; - pub extern fn bz_containerTypeSize(container: Value) usize; - pub extern fn bz_containerTypeAlign(type_def: Value) usize; - pub extern fn bz_valueCastToString(value: Value, vm: *VM) Value; - pub extern fn bz_stringConcat(string: Value, other: Value, vm: *VM) Value; - pub extern fn bz_stringSubscript(obj_string: Value, index_value: Value, checked: bool, vm: *VM) Value; - pub extern fn bz_stringNext(string_value: Value, index: *Value, vm: *VM) Value; - pub extern fn bz_rangeNext(range_value: Value, index_slot: Value) Value; - pub extern fn bz_getRangeProperty(range_value: Value, property_idx: usize, bind: bool, vm: *VM) Value; - pub extern fn bz_listAppend(list: Value, value: Value, vm: *VM) void; - pub extern fn bz_listGet(list: Value, index: i32, checked: bool) Value; - pub extern fn bz_listSet(list: Value, index: usize, value: Value, vm: *VM) void; - pub extern fn bz_listLen(list: Value) usize; - pub extern fn bz_listConcat(list: Value, other_list: Value, vm: *VM) Value; - pub extern fn bz_listNext(list_value: Value, index: *Value, vm: *VM) Value; - pub extern fn bz_mapSet(map: Value, key: Value, value: Value, vm: *VM) void; - pub extern fn bz_mapGet(map: Value, key: Value) Value; - pub extern fn bz_mapConcat(map: Value, other_map: Value, vm: *VM) Value; - pub extern fn bz_mapNext(map_value: Value, index: *Value) Value; - pub extern fn bz_setObjectInstanceProperty(instance_value: Value, property_idx: usize, value: Value, vm: *VM) void; - pub extern fn bz_getObjectInstanceProperty(instance_value: Value, property_idx: usize) Value; - pub extern fn bz_getObjectInstanceMethod(instance_value: Value, method_idx: usize, bind: bool, vm: *VM) Value; - pub extern fn bz_getProtocolMethod(instance_value: Value, method_name: Value, vm: *VM) Value; - pub extern fn bz_getObjectField(object_value: Value, field_idx: usize) Value; - pub extern fn bz_setObjectField(object_value: Value, field_idx: usize, value: Value, vm: *VM) void; - pub extern fn bz_getEnumInstanceValue(enum_instance_value: Value) Value; - pub extern fn bz_getEnumCase(enum_value: Value, case_name_value: Value, vm: *VM) Value; - pub extern fn bz_getEnumCaseFromValue(enum_value: Value, case_value: Value, vm: *VM) Value; - pub extern fn bz_enumNext(enum_value: Value, case: Value, vm: *VM) Value; - pub extern fn bz_foreignContainerGet(value: Value, field_idx: usize, vm: *VM) Value; - pub extern fn bz_foreignContainerSet(value: Value, field_idx: usize, new_value: Value, vm: *VM) void; - pub extern fn bz_foreignContainerSlice(container_value: Value, len: *usize) [*]u8; + pub extern fn bz_valueToCString(value: Value) callconv(.c) ?[*:0]const u8; + pub extern fn bz_valueToForeignContainerPtr(value: Value) callconv(.c) [*]u8; + pub extern fn bz_valueIsForeignContainer(value: Value) callconv(.c) bool; + pub extern fn bz_valueDump(value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_valueEqual(self: Value, other: Value) callconv(.c) Value; + pub extern fn bz_valueIs(self: Value, type_def: Value) callconv(.c) Value; + pub extern fn bz_valueTypeOf(self: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_getUserDataPtr(userdata: Value) callconv(.c) u64; + pub extern fn bz_containerTypeSize(container: Value) callconv(.c) usize; + pub extern fn bz_containerTypeAlign(type_def: Value) callconv(.c) usize; + pub extern fn bz_valueCastToString(value: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_stringConcat(string: Value, other: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_stringSubscript(obj_string: Value, index_value: Value, checked: bool, vm: *VM) callconv(.c) Value; + pub extern fn bz_stringNext(string_value: Value, index: *Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_rangeNext(range_value: Value, index_slot: Value) callconv(.c) Value; + pub extern fn bz_getRangeProperty(range_value: Value, property_idx: usize, bind: bool, vm: *VM) callconv(.c) Value; + pub extern fn bz_listAppend(list: Value, value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_listGet(list: Value, index: i32, checked: bool) callconv(.c) Value; + pub extern fn bz_listSet(list: Value, index: usize, value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_listLen(list: Value) callconv(.c) usize; + pub extern fn bz_listConcat(list: Value, other_list: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_listNext(list_value: Value, index: *Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_mapSet(map: Value, key: Value, value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_mapGet(map: Value, key: Value) callconv(.c) Value; + pub extern fn bz_mapConcat(map: Value, other_map: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_mapNext(map_value: Value, index: *Value) callconv(.c) Value; + pub extern fn bz_setObjectInstanceProperty(instance_value: Value, property_idx: usize, value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_getObjectInstanceProperty(instance_value: Value, property_idx: usize) callconv(.c) Value; + pub extern fn bz_getObjectInstanceMethod(instance_value: Value, method_idx: usize, bind: bool, vm: *VM) callconv(.c) Value; + pub extern fn bz_getProtocolMethod(instance_value: Value, method_name: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_getObjectField(object_value: Value, field_idx: usize) callconv(.c) Value; + pub extern fn bz_setObjectField(object_value: Value, field_idx: usize, value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_getEnumInstanceValue(enum_instance_value: Value) callconv(.c) Value; + pub extern fn bz_getEnumCase(enum_value: Value, case_name_value: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_getEnumCaseFromValue(enum_value: Value, case_value: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_enumNext(enum_value: Value, case: Value, vm: *VM) callconv(.c) Value; + pub extern fn bz_foreignContainerGet(value: Value, field_idx: usize, vm: *VM) callconv(.c) Value; + pub extern fn bz_foreignContainerSet(value: Value, field_idx: usize, new_value: Value, vm: *VM) callconv(.c) void; + pub extern fn bz_foreignContainerSlice(container_value: Value, len: *usize) callconv(.c) [*]u8; }; pub const NativeCtx = extern struct { @@ -179,9 +179,9 @@ pub const TryCtx = extern struct { }; pub const ZigType = opaque { - pub extern fn bz_zigTypeSize(self: *ZigType) usize; - pub extern fn bz_zigTypeAlignment(self: *ZigType) u16; - pub extern fn bz_zigTypeToCString(self: *ZigType, vm: *VM) [*:0]const u8; + pub extern fn bz_zigTypeSize(self: *ZigType) callconv(.c) usize; + pub extern fn bz_zigTypeAlignment(self: *ZigType) callconv(.c) u16; + pub extern fn bz_zigTypeToCString(self: *ZigType, vm: *VM) callconv(.c) [*:0]const u8; }; pub const VM = opaque { @@ -197,19 +197,19 @@ pub const VM = opaque { std.heap.c_allocator; pub extern fn bz_newVM() *VM; - pub extern fn bz_deinitVM(self: *VM) void; - pub extern fn bz_panic(vm: *VM, msg: [*]const u8, len: usize) void; - pub extern fn bz_run(self: *VM, source: ?[*]const u8, source_len: usize, file_name: ?[*]const u8, file_name_len: usize) bool; - pub extern fn bz_call(self: *VM, closure: Value, arguments: ?[*]const *const Value, len: usize, catch_value: ?*Value) void; - pub extern fn bz_push(self: *VM, value: Value) void; - pub extern fn bz_pop(self: *VM) Value; - pub extern fn bz_peek(self: *VM, distance: u32) Value; - pub extern fn bz_at(vm: *VM, at: u32) Value; - pub extern fn bz_pushError(self: *VM, qualified_name: [*]const u8, len: usize, message: ?[*]const u8, mlen: usize) void; - pub extern fn bz_pushErrorEnum(self: *VM, qualified_name: [*]const u8, name_len: usize, case: [*]const u8, case_len: usize) void; - pub extern fn bz_stringToValue(vm: *VM, string: ?[*]const u8, len: usize) Value; - pub extern fn bz_stringToValueZ(vm: *VM, string: ?[*:0]const u8) Value; - pub extern fn bz_newUserData(vm: *VM, userdata: u64) Value; + pub extern fn bz_deinitVM(self: *VM) callconv(.c) void; + pub extern fn bz_panic(vm: *VM, msg: [*]const u8, len: usize) callconv(.c) void; + pub extern fn bz_run(self: *VM, source: ?[*]const u8, source_len: usize, file_name: ?[*]const u8, file_name_len: usize) callconv(.c) bool; + pub extern fn bz_call(self: *VM, closure: Value, arguments: ?[*]const *const Value, len: usize, catch_value: ?*Value) callconv(.c) void; + pub extern fn bz_push(self: *VM, value: Value) callconv(.c) void; + pub extern fn bz_pop(self: *VM) callconv(.c) Value; + pub extern fn bz_peek(self: *VM, distance: u32) callconv(.c) Value; + pub extern fn bz_at(vm: *VM, at: u32) callconv(.c) Value; + pub extern fn bz_pushError(self: *VM, qualified_name: [*]const u8, len: usize, message: ?[*]const u8, mlen: usize) callconv(.c) void; + pub extern fn bz_pushErrorEnum(self: *VM, qualified_name: [*]const u8, name_len: usize, case: [*]const u8, case_len: usize) callconv(.c) void; + pub extern fn bz_stringToValue(vm: *VM, string: ?[*]const u8, len: usize) callconv(.c) Value; + pub extern fn bz_stringToValueZ(vm: *VM, string: ?[*:0]const u8) callconv(.c) Value; + pub extern fn bz_newUserData(vm: *VM, userdata: u64) callconv(.c) Value; pub inline fn pushError(self: *VM, qualified_name: []const u8, message: ?[]const u8) void { self.bz_pushError( qualified_name.ptr, @@ -226,41 +226,41 @@ pub const VM = opaque { case.len, ); } - pub extern fn bz_serialize(vm: *VM, value: Value, error_value: *Value) Value; - pub extern fn bz_throw(vm: *VM, value: Value) void; - pub extern fn bz_rethrow(vm: *VM) void; - pub extern fn bz_getQualified(self: *VM, qualified_name: [*]const u8, len: usize) Value; - pub extern fn bz_allocated(self: *VM) usize; - pub extern fn bz_collect(self: *VM) void; - pub extern fn bz_setTryCtx(self: *VM) *TryCtx; - pub extern fn bz_popTryCtx(self: *VM) void; - pub extern fn bz_closeUpValues(vm: *VM, last: *Value) void; - pub extern fn bz_getUpValue(ctx: *NativeCtx, slot: usize) Value; - pub extern fn bz_setUpValue(ctx: *NativeCtx, slot: usize, value: Value) void; - pub extern fn bz_closure(ctx: *NativeCtx, function_node: u32, native: *anyopaque, native_raw: *anyopaque) Value; - pub extern fn bz_bindMethod(vm: *VM, receiver: Value, method_value: Value, native_value: Value) Value; - pub extern fn bz_context(ctx: *NativeCtx, closure_value: Value, new_ctx: *NativeCtx, arg_count: usize) *anyopaque; - pub extern fn bz_clone(vm: *VM, value: Value) Value; - pub extern fn bz_currentFiber(vm: *VM) Value; - pub extern fn bz_dumpStack(vm: *VM) void; - pub extern fn bz_zigType(vm: *VM, ztype: [*]const u8, len: usize, expected_type: *Value) ?*ZigType; - pub extern fn bz_stringType(vm: *VM) Value; - pub extern fn bz_mapType(vm: *VM, key_type: Value, value_type: Value, mutable: bool) Value; - pub extern fn bz_listType(vm: *VM, item_type: Value, mutable: bool) Value; - pub extern fn bz_getStringProperty(vm: *VM, string: Value, method_idx: usize) Value; - pub extern fn bz_getListProperty(vm: *VM, list: Value, property_idx: usize, bind: bool) Value; - pub extern fn bz_getMapProperty(vm: *VM, map: Value, property_idx: usize, bind: bool) Value; - pub extern fn bz_getPatternProperty(vm: *VM, pattern: Value, property_idx: usize) Value; - pub extern fn bz_getFiberProperty(vm: *VM, fiber: Value, property_idx: usize) Value; - pub extern fn bz_newRange(vm: *VM, low: i32, high: i32) Value; - pub extern fn bz_newList(vm: *VM, list_type: Value) Value; - pub extern fn bz_newMap(vm: *VM, map_type: Value) Value; - pub extern fn bz_newQualifiedObjectInstance(self: *VM, qualified_name: [*]const u8, len: usize, mutable: bool) Value; - pub extern fn bz_newObjectInstance(vm: *VM, object_value: Value, typedef_value: Value) Value; - pub extern fn bz_newForeignContainerInstance(vm: *VM, typedef_value: Value) Value; - pub extern fn bz_newForeignContainerFromSlice(vm: *VM, type_def: Value, ptr: [*]u8, len: usize) Value; - pub extern fn bz_readZigValueFromBuffer(vm: *VM, ztype: *ZigType, at: usize, buf: [*]u8, len: usize) Value; - pub extern fn bz_writeZigValueToBuffer(vm: *VM, value: Value, ztype: *const ZigType, at: usize, buf: [*]u8, capacity: usize) void; + pub extern fn bz_serialize(vm: *VM, value: Value, error_value: *Value) callconv(.c) Value; + pub extern fn bz_throw(vm: *VM, value: Value) callconv(.c) void; + pub extern fn bz_rethrow(vm: *VM) callconv(.c) void; + pub extern fn bz_getQualified(self: *VM, qualified_name: [*]const u8, len: usize) callconv(.c) Value; + pub extern fn bz_allocated(self: *VM) callconv(.c) usize; + pub extern fn bz_collect(self: *VM) callconv(.c) void; + pub extern fn bz_setTryCtx(self: *VM) callconv(.c) *TryCtx; + pub extern fn bz_popTryCtx(self: *VM) callconv(.c) void; + pub extern fn bz_closeUpValues(vm: *VM, last: *Value) callconv(.c) void; + pub extern fn bz_getUpValue(ctx: *NativeCtx, slot: usize) callconv(.c) Value; + pub extern fn bz_setUpValue(ctx: *NativeCtx, slot: usize, value: Value) callconv(.c) void; + pub extern fn bz_closure(ctx: *NativeCtx, function_node: u32, native: *anyopaque, native_raw: *anyopaque) callconv(.c) Value; + pub extern fn bz_bindMethod(vm: *VM, receiver: Value, method_value: Value, native_value: Value) callconv(.c) Value; + pub extern fn bz_context(ctx: *NativeCtx, closure_value: Value, new_ctx: *NativeCtx, arg_count: usize) callconv(.c) *anyopaque; + pub extern fn bz_clone(vm: *VM, value: Value) callconv(.c) Value; + pub extern fn bz_currentFiber(vm: *VM) callconv(.c) Value; + pub extern fn bz_dumpStack(vm: *VM) callconv(.c) void; + pub extern fn bz_zigType(vm: *VM, ztype: [*]const u8, len: usize, expected_type: *Value) callconv(.c) ?*ZigType; + pub extern fn bz_stringType(vm: *VM) callconv(.c) Value; + pub extern fn bz_mapType(vm: *VM, key_type: Value, value_type: Value, mutable: bool) callconv(.c) Value; + pub extern fn bz_listType(vm: *VM, item_type: Value, mutable: bool) callconv(.c) Value; + pub extern fn bz_getStringProperty(vm: *VM, string: Value, method_idx: usize) callconv(.c) Value; + pub extern fn bz_getListProperty(vm: *VM, list: Value, property_idx: usize, bind: bool) callconv(.c) Value; + pub extern fn bz_getMapProperty(vm: *VM, map: Value, property_idx: usize, bind: bool) callconv(.c) Value; + pub extern fn bz_getPatternProperty(vm: *VM, pattern: Value, property_idx: usize) callconv(.c) Value; + pub extern fn bz_getFiberProperty(vm: *VM, fiber: Value, property_idx: usize) callconv(.c) Value; + pub extern fn bz_newRange(vm: *VM, low: i32, high: i32) callconv(.c) Value; + pub extern fn bz_newList(vm: *VM, list_type: Value) callconv(.c) Value; + pub extern fn bz_newMap(vm: *VM, map_type: Value) callconv(.c) Value; + pub extern fn bz_newQualifiedObjectInstance(self: *VM, qualified_name: [*]const u8, len: usize, mutable: bool) callconv(.c) Value; + pub extern fn bz_newObjectInstance(vm: *VM, object_value: Value, typedef_value: Value) callconv(.c) Value; + pub extern fn bz_newForeignContainerInstance(vm: *VM, typedef_value: Value) callconv(.c) Value; + pub extern fn bz_newForeignContainerFromSlice(vm: *VM, type_def: Value, ptr: [*]u8, len: usize) callconv(.c) Value; + pub extern fn bz_readZigValueFromBuffer(vm: *VM, ztype: *ZigType, at: usize, buf: [*]u8, len: usize) callconv(.c) Value; + pub extern fn bz_writeZigValueToBuffer(vm: *VM, value: Value, ztype: *const ZigType, at: usize, buf: [*]u8, capacity: usize) callconv(.c) void; }; -pub extern fn bz_memcpy(dest: [*]u8, dest_len: usize, source: [*]u8, source_len: usize) void; +pub extern fn bz_memcpy(dest: [*]u8, dest_len: usize, source: [*]u8, source_len: usize) callconv(.c) void; diff --git a/src/lib/buzz_buffer.zig b/src/lib/buzz_buffer.zig index 4fa125bb..172d0c4f 100644 --- a/src/lib/buzz_buffer.zig +++ b/src/lib/buzz_buffer.zig @@ -10,7 +10,7 @@ pub const os = if (is_wasm) else std.os; -pub export fn BufferNew(ctx: *api.NativeCtx) c_int { +pub export fn BufferNew(ctx: *api.NativeCtx) callconv(.c) c_int { const capacity = ctx.vm.bz_peek(0).integer(); const buffer = api.VM.allocator.create(Buffer) catch { @@ -32,7 +32,7 @@ pub export fn BufferNew(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferDeinit(ctx: *api.NativeCtx) c_int { +pub export fn BufferDeinit(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata = ctx.vm.bz_peek(0).bz_getUserDataPtr(); var buffer = Buffer.fromUserData(userdata); @@ -227,7 +227,7 @@ const Buffer = struct { } }; -pub export fn BufferRead(ctx: *api.NativeCtx) c_int { +pub export fn BufferRead(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const n = ctx.vm.bz_peek(0).integer(); @@ -249,7 +249,7 @@ pub export fn BufferRead(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferWrite(ctx: *api.NativeCtx) c_int { +pub export fn BufferWrite(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); var len: usize = 0; var bytes = ctx.vm.bz_peek(0).bz_valueToString(&len); @@ -273,7 +273,7 @@ pub export fn BufferWrite(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferSetAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferSetAt(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); const index = ctx.vm.bz_peek(1).integer(); const value = ctx.vm.bz_peek(0).integer(); @@ -289,7 +289,7 @@ pub export fn BufferSetAt(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferReadBoolean(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadBoolean(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); if (buffer.readBool()) |value| { @@ -301,7 +301,7 @@ pub export fn BufferReadBoolean(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferWriteBoolean(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteBoolean(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const value = ctx.vm.bz_peek(0).boolean(); @@ -320,7 +320,7 @@ pub export fn BufferWriteBoolean(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferReadInt(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadInt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); if (buffer.readInteger() catch |err| { @@ -341,7 +341,7 @@ pub export fn BufferReadInt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferReadUserData(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadUserData(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); if (buffer.readUserData(ctx.vm) catch |err| { @@ -362,7 +362,7 @@ pub export fn BufferReadUserData(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferReadDouble(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadDouble(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); if (buffer.readFloat() catch |err| { @@ -383,7 +383,7 @@ pub export fn BufferReadDouble(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferWriteInt(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteInt(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const number = ctx.vm.bz_peek(0); @@ -402,7 +402,7 @@ pub export fn BufferWriteInt(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferWriteUserData(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteUserData(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const userdata = ctx.vm.bz_peek(0); @@ -421,7 +421,7 @@ pub export fn BufferWriteUserData(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferWriteDouble(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteDouble(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const number = ctx.vm.bz_peek(0); @@ -440,7 +440,7 @@ pub export fn BufferWriteDouble(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferEmpty(ctx: *api.NativeCtx) c_int { +pub export fn BufferEmpty(ctx: *api.NativeCtx) callconv(.c) c_int { var buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); buffer.empty(); @@ -448,7 +448,7 @@ pub export fn BufferEmpty(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn BufferLen(ctx: *api.NativeCtx) c_int { +pub export fn BufferLen(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const buf_align = ctx.vm.bz_peek(0).integer(); @@ -457,7 +457,7 @@ pub export fn BufferLen(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferCursor(ctx: *api.NativeCtx) c_int { +pub export fn BufferCursor(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); ctx.vm.bz_push(api.Value.fromInteger(@intCast(buffer.cursor))); @@ -465,7 +465,7 @@ pub export fn BufferCursor(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferBuffer(ctx: *api.NativeCtx) c_int { +pub export fn BufferBuffer(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(0).bz_getUserDataPtr()); ctx.vm.bz_push( @@ -481,7 +481,7 @@ pub export fn BufferBuffer(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferPtr(ctx: *api.NativeCtx) c_int { +pub export fn BufferPtr(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); const at = ctx.vm.bz_peek(1).integer(); const alignment = ctx.vm.bz_peek(0).integer(); @@ -495,7 +495,7 @@ pub export fn BufferPtr(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferAt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const number = ctx.vm.bz_peek(0).integer(); @@ -588,7 +588,7 @@ fn rawWriteZ( return true; } -pub export fn BufferWriteZ(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteZ(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); var len: usize = 0; const ztype = ctx.vm.bz_peek(1).bz_valueToString(&len).?; @@ -603,7 +603,7 @@ pub export fn BufferWriteZ(ctx: *api.NativeCtx) c_int { )) -1 else 0; } -pub export fn BufferWriteZAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteZAt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(3).bz_getUserDataPtr()); const index = ctx.vm.bz_peek(2).integer(); var len: usize = 0; @@ -669,7 +669,7 @@ fn rawWriteStruct( return true; } -pub export fn BufferWriteStruct(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteStruct(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); const type_def = ctx.vm.bz_peek(1); const values = ctx.vm.bz_peek(0); @@ -683,7 +683,7 @@ pub export fn BufferWriteStruct(ctx: *api.NativeCtx) c_int { )) -1 else 0; } -pub export fn BufferWriteStructAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferWriteStructAt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(3).bz_getUserDataPtr()); const type_def = ctx.vm.bz_peek(2); const index = ctx.vm.bz_peek(1).integer(); @@ -712,7 +712,7 @@ fn rawReadStruct( return vm.bz_newForeignContainerFromSlice(type_def, slice.ptr, slice.len); } -pub export fn BufferReadStruct(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadStruct(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); const type_def = ctx.vm.bz_peek(0); @@ -728,7 +728,7 @@ pub export fn BufferReadStruct(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn BufferReadStructAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadStructAt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); const index: usize = @intCast(ctx.vm.bz_peek(1).integer()); const type_def = ctx.vm.bz_peek(0); @@ -773,7 +773,7 @@ fn rawReadZ(vm: *api.VM, buffer: *Buffer, at: ?usize, ztype: []const u8) c_int { return 1; } -pub export fn BufferReadZ(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadZ(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(1).bz_getUserDataPtr()); var len: usize = 0; const ztype = ctx.vm.bz_peek(0).bz_valueToString(&len).?; @@ -786,7 +786,7 @@ pub export fn BufferReadZ(ctx: *api.NativeCtx) c_int { ); } -pub export fn BufferReadZAt(ctx: *api.NativeCtx) c_int { +pub export fn BufferReadZAt(ctx: *api.NativeCtx) callconv(.c) c_int { const buffer = Buffer.fromUserData(ctx.vm.bz_peek(2).bz_getUserDataPtr()); const index: usize = @intCast(ctx.vm.bz_peek(1).integer()); var len: usize = 0; diff --git a/src/lib/buzz_crypto.zig b/src/lib/buzz_crypto.zig index 599c56ee..59561a3b 100644 --- a/src/lib/buzz_crypto.zig +++ b/src/lib/buzz_crypto.zig @@ -20,7 +20,7 @@ fn bin2hex(allocator: std.mem.Allocator, input: []const u8) std.ArrayList(u8) { return result; } -pub export fn hash(ctx: *api.NativeCtx) c_int { +pub export fn hash(ctx: *api.NativeCtx) callconv(.c) c_int { const algo_index = ctx.vm.bz_peek(1).bz_getEnumInstanceValue().integer(); var data_len: usize = 0; const data = ctx.vm.bz_peek(0).bz_valueToString(&data_len) orelse @panic("Could not hash data"); diff --git a/src/lib/buzz_debug.zig b/src/lib/buzz_debug.zig index 9705f669..2f37b94a 100644 --- a/src/lib/buzz_debug.zig +++ b/src/lib/buzz_debug.zig @@ -10,7 +10,7 @@ pub const os = if (is_wasm) else std.os; -pub export fn dump(ctx: *api.NativeCtx) c_int { +pub export fn dump(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_peek(0).bz_valueDump(ctx.vm); io.print("\n", .{}); diff --git a/src/lib/buzz_ffi.zig b/src/lib/buzz_ffi.zig index 849bce38..114c4565 100644 --- a/src/lib/buzz_ffi.zig +++ b/src/lib/buzz_ffi.zig @@ -1,7 +1,7 @@ const std = @import("std"); const api = @import("buzz_api.zig"); -pub export fn alignOf(ctx: *api.NativeCtx) c_int { +pub export fn alignOf(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const zig_type_str = ctx.vm.bz_peek(0).bz_valueToString(&len).?; @@ -32,7 +32,7 @@ pub export fn alignOf(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn sizeOf(ctx: *api.NativeCtx) c_int { +pub export fn sizeOf(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const zig_type_str = ctx.vm.bz_peek(0).bz_valueToString(&len).?; @@ -64,7 +64,7 @@ pub export fn sizeOf(ctx: *api.NativeCtx) c_int { } // FIXME: raise error if typedef is not .ForeignContainer -pub export fn sizeOfStruct(ctx: *api.NativeCtx) c_int { +pub export fn sizeOfStruct(ctx: *api.NativeCtx) callconv(.c) c_int { const type_def = ctx.vm.bz_peek(0); ctx.vm.bz_push( @@ -74,7 +74,7 @@ pub export fn sizeOfStruct(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn alignOfStruct(ctx: *api.NativeCtx) c_int { +pub export fn alignOfStruct(ctx: *api.NativeCtx) callconv(.c) c_int { const type_def = ctx.vm.bz_peek(0); ctx.vm.bz_push( @@ -84,7 +84,7 @@ pub export fn alignOfStruct(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn rawData(ctx: *api.NativeCtx) c_int { +pub export fn rawData(ctx: *api.NativeCtx) callconv(.c) c_int { const data = ctx.vm.bz_peek(0); if (!data.bz_valueIsForeignContainer()) { diff --git a/src/lib/buzz_fs.zig b/src/lib/buzz_fs.zig index 2ef55fa2..40d24471 100644 --- a/src/lib/buzz_fs.zig +++ b/src/lib/buzz_fs.zig @@ -25,7 +25,7 @@ fn handleMakeDirectoryError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn makeDirectory(ctx: *api.NativeCtx) c_int { +pub export fn makeDirectory(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const filename = ctx.vm.bz_peek(0).bz_valueToString(&len); @@ -68,7 +68,7 @@ fn handleDeleteDirectoryError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn delete(ctx: *api.NativeCtx) c_int { +pub export fn delete(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const filename = ctx.vm.bz_peek(0).bz_valueToString(&len); @@ -157,7 +157,7 @@ fn handleRealpathError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn move(ctx: *api.NativeCtx) c_int { +pub export fn move(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const source = ctx.vm.bz_peek(1).bz_valueToString(&len); const source_slice = source.?[0..len]; @@ -282,7 +282,7 @@ fn handleDirIterateError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn list(ctx: *api.NativeCtx) c_int { +pub export fn list(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const filename = ctx.vm.bz_peek(0).bz_valueToString(&len); const filename_slice = filename.?[0..len]; @@ -335,7 +335,7 @@ pub export fn list(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn exists(ctx: *api.NativeCtx) c_int { +pub export fn exists(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const filename = ctx.vm.bz_peek(0).bz_valueToString(&len); const filename_slice = filename.?[0..len]; diff --git a/src/lib/buzz_gc.zig b/src/lib/buzz_gc.zig index a9341608..f6e65031 100644 --- a/src/lib/buzz_gc.zig +++ b/src/lib/buzz_gc.zig @@ -9,13 +9,13 @@ pub const os = if (is_wasm) else std.os; -pub export fn allocated(ctx: *api.NativeCtx) c_int { +pub export fn allocated(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push(api.Value.fromInteger(@intCast(ctx.vm.bz_allocated()))); return 1; } -pub export fn collect(ctx: *api.NativeCtx) c_int { +pub export fn collect(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_collect(); return 0; diff --git a/src/lib/buzz_http.zig b/src/lib/buzz_http.zig index 54d21076..abea0ebe 100644 --- a/src/lib/buzz_http.zig +++ b/src/lib/buzz_http.zig @@ -2,7 +2,7 @@ const std = @import("std"); const api = @import("buzz_api.zig"); const http = std.http; -pub export fn HttpClientNew(ctx: *api.NativeCtx) c_int { +pub export fn HttpClientNew(ctx: *api.NativeCtx) callconv(.c) c_int { const client = api.VM.allocator.create(http.Client) catch { ctx.vm.bz_panic("Out of memory", "Out of memory".len); unreachable; @@ -27,7 +27,7 @@ pub export fn HttpClientNew(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn HttpClientDeinit(ctx: *api.NativeCtx) c_int { +pub export fn HttpClientDeinit(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata = ctx.vm.bz_peek(0).bz_getUserDataPtr(); const client = @as(*http.Client, @ptrCast(@alignCast(@as(*anyopaque, @ptrFromInt(userdata))))); @@ -37,7 +37,7 @@ pub export fn HttpClientDeinit(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn HttpClientSend(ctx: *api.NativeCtx) c_int { +pub export fn HttpClientSend(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata = ctx.vm.bz_peek(3).bz_getUserDataPtr(); const client: *http.Client = @ptrCast(@alignCast(@as(*anyopaque, @ptrFromInt(userdata)))); @@ -120,7 +120,7 @@ pub export fn HttpClientSend(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn HttpRequestWait(ctx: *api.NativeCtx) c_int { +pub export fn HttpRequestWait(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata_value = ctx.vm.bz_peek(0); const userdata = userdata_value.bz_getUserDataPtr(); const request = @as( @@ -143,7 +143,7 @@ pub export fn HttpRequestWait(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn HttpRequestDeinit(ctx: *api.NativeCtx) c_int { +pub export fn HttpRequestDeinit(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata_value = ctx.vm.bz_peek(0); const userdata = userdata_value.bz_getUserDataPtr(); const request = @as( @@ -161,7 +161,7 @@ pub export fn HttpRequestDeinit(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn HttpRequestRead(ctx: *api.NativeCtx) c_int { +pub export fn HttpRequestRead(ctx: *api.NativeCtx) callconv(.c) c_int { const userdata_value = ctx.vm.bz_peek(0); const userdata = userdata_value.bz_getUserDataPtr(); const request = @as( diff --git a/src/lib/buzz_io.zig b/src/lib/buzz_io.zig index 39fa0820..59a66b9d 100644 --- a/src/lib/buzz_io.zig +++ b/src/lib/buzz_io.zig @@ -3,7 +3,7 @@ const api = @import("buzz_api.zig"); const io = @import("io.zig"); const builtin = @import("builtin"); -pub export fn getStdIn(ctx: *api.NativeCtx) c_int { +pub export fn getStdIn(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push( api.Value.fromInteger( if (builtin.os.tag == .windows) @@ -16,7 +16,7 @@ pub export fn getStdIn(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn getStdOut(ctx: *api.NativeCtx) c_int { +pub export fn getStdOut(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push( api.Value.fromInteger( if (builtin.os.tag == .windows) @@ -29,7 +29,7 @@ pub export fn getStdOut(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn getStdErr(ctx: *api.NativeCtx) c_int { +pub export fn getStdErr(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push( api.Value.fromInteger( if (builtin.os.tag == .windows) @@ -42,7 +42,7 @@ pub export fn getStdErr(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn FileIsTTY(ctx: api.NativeCtx) c_int { +pub export fn FileIsTTY(ctx: api.NativeCtx) callconv(.c) c_int { const handle: std.fs.File.Handle = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(0).integer()))) @@ -88,7 +88,7 @@ fn handleFileOpenError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn FileOpen(ctx: *api.NativeCtx) c_int { +pub export fn FileOpen(ctx: *api.NativeCtx) callconv(.c) c_int { const mode: u8 = @intCast(ctx.vm.bz_peek(0).integer()); var len: usize = 0; const filename = ctx.vm.bz_peek(1).bz_valueToString(&len); @@ -132,7 +132,7 @@ pub export fn FileOpen(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn FileClose(ctx: *api.NativeCtx) c_int { +pub export fn FileClose(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.fs.File.Handle = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(0).integer()))) @@ -180,7 +180,7 @@ fn handleFileReadWriteError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn FileReadAll(ctx: *api.NativeCtx) c_int { +pub export fn FileReadAll(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.fs.File.Handle = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) @@ -252,7 +252,7 @@ fn handleFileReadLineError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn FileReadLine(ctx: *api.NativeCtx) c_int { +pub export fn FileReadLine(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.fs.File.Handle = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) @@ -321,7 +321,7 @@ fn handleFileReadAllError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn FileRead(ctx: *api.NativeCtx) c_int { +pub export fn FileRead(ctx: *api.NativeCtx) callconv(.c) c_int { const n = ctx.vm.bz_peek(0).integer(); if (n <= 0) { ctx.vm.pushError("errors.InvalidArgumentError", null); @@ -416,7 +416,7 @@ fn fileSmallRead(ctx: *api.NativeCtx, handle: std.fs.File.Handle, n: usize) c_in } // extern fun File_write(int fd, [int] bytes) > void; -pub export fn FileWrite(ctx: *api.NativeCtx) c_int { +pub export fn FileWrite(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.fs.File.Handle = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) @@ -467,7 +467,7 @@ pub export fn FileWrite(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn runFile(ctx: *api.NativeCtx) c_int { +pub export fn runFile(ctx: *api.NativeCtx) callconv(.c) c_int { // Read file var len: usize = 0; const filename_string = ctx.vm.bz_peek(0).bz_valueToString(&len); diff --git a/src/lib/buzz_math.zig b/src/lib/buzz_math.zig index 4d372681..a3eba2a1 100644 --- a/src/lib/buzz_math.zig +++ b/src/lib/buzz_math.zig @@ -9,7 +9,7 @@ pub const os = if (is_wasm) else std.os; -pub export fn abs(ctx: *api.NativeCtx) c_int { +pub export fn abs(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(if (n_f < 0) n_f * -1 else n_f)); @@ -17,7 +17,7 @@ pub export fn abs(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn acos(ctx: *api.NativeCtx) c_int { +pub export fn acos(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.acos(n_f))); @@ -25,7 +25,7 @@ pub export fn acos(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn asin(ctx: *api.NativeCtx) c_int { +pub export fn asin(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.asin(n_f))); @@ -33,7 +33,7 @@ pub export fn asin(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn atan(ctx: *api.NativeCtx) c_int { +pub export fn atan(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.atan(n_f))); @@ -41,7 +41,7 @@ pub export fn atan(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzceil(ctx: *api.NativeCtx) c_int { +pub export fn bzceil(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromInteger(@intFromFloat(std.math.ceil(n_f)))); @@ -49,7 +49,7 @@ pub export fn bzceil(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzcos(ctx: *api.NativeCtx) c_int { +pub export fn bzcos(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.cos(n_f))); @@ -57,7 +57,7 @@ pub export fn bzcos(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzexp(ctx: *api.NativeCtx) c_int { +pub export fn bzexp(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.exp(n_f))); @@ -65,7 +65,7 @@ pub export fn bzexp(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzfloor(ctx: *api.NativeCtx) c_int { +pub export fn bzfloor(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromInteger(@intFromFloat(std.math.floor(n_f)))); @@ -73,7 +73,7 @@ pub export fn bzfloor(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzlog(ctx: *api.NativeCtx) c_int { +pub export fn bzlog(ctx: *api.NativeCtx) callconv(.c) c_int { const base_i: f64 = ctx.vm.bz_peek(1).double(); const n_f: f64 = ctx.vm.bz_peek(0).double(); @@ -82,7 +82,7 @@ pub export fn bzlog(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn maxDouble(ctx: *api.NativeCtx) c_int { +pub export fn maxDouble(ctx: *api.NativeCtx) callconv(.c) c_int { const a_f = ctx.vm.bz_peek(0).double(); const b_f = ctx.vm.bz_peek(1).double(); @@ -91,7 +91,7 @@ pub export fn maxDouble(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn minDouble(ctx: *api.NativeCtx) c_int { +pub export fn minDouble(ctx: *api.NativeCtx) callconv(.c) c_int { const a_f = ctx.vm.bz_peek(0).double(); const b_f = ctx.vm.bz_peek(1).double(); @@ -100,7 +100,7 @@ pub export fn minDouble(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn maxInt(ctx: *api.NativeCtx) c_int { +pub export fn maxInt(ctx: *api.NativeCtx) callconv(.c) c_int { const a_f = ctx.vm.bz_peek(0).integer(); const b_f = ctx.vm.bz_peek(1).integer(); @@ -109,7 +109,7 @@ pub export fn maxInt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn minInt(ctx: *api.NativeCtx) c_int { +pub export fn minInt(ctx: *api.NativeCtx) callconv(.c) c_int { const a_f = ctx.vm.bz_peek(0).integer(); const b_f = ctx.vm.bz_peek(1).integer(); @@ -118,7 +118,7 @@ pub export fn minInt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzsin(ctx: *api.NativeCtx) c_int { +pub export fn bzsin(ctx: *api.NativeCtx) callconv(.c) c_int { const n: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.sin(n))); @@ -126,7 +126,7 @@ pub export fn bzsin(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bzsqrt(ctx: *api.NativeCtx) c_int { +pub export fn bzsqrt(ctx: *api.NativeCtx) callconv(.c) c_int { const n_f: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.sqrt(n_f))); @@ -134,7 +134,7 @@ pub export fn bzsqrt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn bztan(ctx: *api.NativeCtx) c_int { +pub export fn bztan(ctx: *api.NativeCtx) callconv(.c) c_int { const n: f64 = ctx.vm.bz_peek(0).double(); ctx.vm.bz_push(api.Value.fromFloat(std.math.tan(n))); @@ -142,7 +142,7 @@ pub export fn bztan(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn pow(ctx: *api.NativeCtx) c_int { +pub export fn pow(ctx: *api.NativeCtx) callconv(.c) c_int { const n = ctx.vm.bz_peek(1); const p = ctx.vm.bz_peek(0); diff --git a/src/lib/buzz_os.zig b/src/lib/buzz_os.zig index 63c46107..ebd0a1ed 100644 --- a/src/lib/buzz_os.zig +++ b/src/lib/buzz_os.zig @@ -2,19 +2,19 @@ const std = @import("std"); const api = @import("buzz_api.zig"); const builtin = @import("builtin"); -pub export fn sleep(ctx: *api.NativeCtx) c_int { +pub export fn sleep(ctx: *api.NativeCtx) callconv(.c) c_int { std.time.sleep(@as(u64, @intFromFloat(ctx.vm.bz_peek(0).double())) * 1_000_000); return 0; } -pub export fn time(ctx: *api.NativeCtx) c_int { +pub export fn time(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push(api.Value.fromFloat(@as(f64, @floatFromInt(std.time.milliTimestamp())))); return 1; } -pub export fn env(ctx: *api.NativeCtx) c_int { +pub export fn env(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const key = ctx.vm.bz_peek(0).bz_valueToString(&len); @@ -66,7 +66,7 @@ fn sysTempDir() []const u8 { }; } -pub export fn tmpDir(ctx: *api.NativeCtx) c_int { +pub export fn tmpDir(ctx: *api.NativeCtx) callconv(.c) c_int { const tmp_dir: []const u8 = sysTempDir(); ctx.vm.bz_push( @@ -81,7 +81,7 @@ pub export fn tmpDir(ctx: *api.NativeCtx) c_int { } // TODO: what if file with same random name exists already? -pub export fn tmpFilename(ctx: *api.NativeCtx) c_int { +pub export fn tmpFilename(ctx: *api.NativeCtx) callconv(.c) c_int { var prefix_len: usize = 0; const prefix = ctx.vm.bz_peek(0).bz_valueToString(&prefix_len); @@ -129,7 +129,7 @@ pub export fn tmpFilename(ctx: *api.NativeCtx) c_int { } // If it was named `exit` it would be considered by zig as a callback when std.process.exit is called -pub export fn buzzExit(ctx: *api.NativeCtx) c_int { +pub export fn buzzExit(ctx: *api.NativeCtx) callconv(.c) c_int { const exitCode: i32 = ctx.vm.bz_peek(0).integer(); std.process.exit(@intCast(exitCode)); @@ -179,7 +179,7 @@ fn handleSpawnError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn execute(ctx: *api.NativeCtx) c_int { +pub export fn execute(ctx: *api.NativeCtx) callconv(.c) c_int { var command = std.ArrayList([]const u8).init(api.VM.allocator); defer command.deinit(); @@ -260,6 +260,7 @@ fn handleConnectError(ctx: *api.NativeCtx, err: anytype) void { error.UnknownHostName, error.WouldBlock, error.Canceled, + error.OperationNotSupported, => ctx.vm.pushErrorEnum("errors.SocketError", @errorName(err)), error.BadPathName, @@ -329,7 +330,7 @@ fn handleConnectUnixError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn SocketConnect(ctx: *api.NativeCtx) c_int { +pub export fn SocketConnect(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const address_value = api.Value.bz_valueToString(ctx.vm.bz_peek(2), &len); const address = if (len > 0) address_value.?[0..len] else ""; @@ -397,7 +398,7 @@ pub export fn SocketConnect(ctx: *api.NativeCtx) c_int { } } -pub export fn SocketClose(ctx: *api.NativeCtx) c_int { +pub export fn SocketClose(ctx: *api.NativeCtx) callconv(.c) c_int { const socket: std.posix.socket_t = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(0).integer()))) else @@ -437,7 +438,7 @@ fn handleReadAllError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn SocketRead(ctx: *api.NativeCtx) c_int { +pub export fn SocketRead(ctx: *api.NativeCtx) callconv(.c) c_int { const n: i32 = ctx.vm.bz_peek(0).integer(); if (n < 0) { ctx.vm.pushError("errors.InvalidArgumentError", null); @@ -520,7 +521,7 @@ fn handleReadLineError(ctx: *api.NativeCtx, err: anytype) void { } } -pub export fn SocketReadLine(ctx: *api.NativeCtx) c_int { +pub export fn SocketReadLine(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.posix.socket_t = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) else @@ -566,7 +567,7 @@ pub export fn SocketReadLine(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn SocketReadAll(ctx: *api.NativeCtx) c_int { +pub export fn SocketReadAll(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.posix.socket_t = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) else @@ -613,7 +614,7 @@ pub export fn SocketReadAll(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn SocketWrite(ctx: *api.NativeCtx) c_int { +pub export fn SocketWrite(ctx: *api.NativeCtx) callconv(.c) c_int { const handle: std.posix.socket_t = if (builtin.os.tag == .windows) @ptrFromInt(@as(usize, @intCast(ctx.vm.bz_peek(1).integer()))) else @@ -660,7 +661,7 @@ pub export fn SocketWrite(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn SocketServerStart(ctx: *api.NativeCtx) c_int { +pub export fn SocketServerStart(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const address_value = api.Value.bz_valueToString(ctx.vm.bz_peek(3), &len); const address = if (len > 0) address_value.?[0..len] else ""; @@ -735,7 +736,7 @@ pub export fn SocketServerStart(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn SocketServerAccept(ctx: *api.NativeCtx) c_int { +pub export fn SocketServerAccept(ctx: *api.NativeCtx) callconv(.c) c_int { var server = std.net.Server{ .listen_address = undefined, // FIXME: we lose this .stream = std.net.Stream{ diff --git a/src/lib/buzz_serialize.zig b/src/lib/buzz_serialize.zig index fdd55c6e..f580942c 100644 --- a/src/lib/buzz_serialize.zig +++ b/src/lib/buzz_serialize.zig @@ -9,7 +9,7 @@ pub const os = if (is_wasm) else std.os; -pub export fn serializeValue(ctx: *api.NativeCtx) c_int { +pub export fn serializeValue(ctx: *api.NativeCtx) callconv(.c) c_int { const to_serialize = ctx.vm.bz_peek(0); var error_value = api.Value.Void; diff --git a/src/lib/buzz_std.zig b/src/lib/buzz_std.zig index 3b570959..d320745f 100644 --- a/src/lib/buzz_std.zig +++ b/src/lib/buzz_std.zig @@ -9,13 +9,13 @@ pub const os = if (is_wasm) else std.os; -pub export fn args(ctx: *api.NativeCtx) c_int { +pub export fn args(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push(ctx.vm.bz_at(1)); return 1; } -pub export fn random(ctx: *api.NativeCtx) c_int { +pub export fn random(ctx: *api.NativeCtx) callconv(.c) c_int { if (is_wasm) { unreachable; } @@ -42,7 +42,7 @@ pub export fn random(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn print(ctx: *api.NativeCtx) c_int { +pub export fn print(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const string = ctx.vm.bz_peek(0).bz_valueToString(&len); @@ -56,7 +56,7 @@ pub export fn print(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn toInt(ctx: *api.NativeCtx) c_int { +pub export fn toInt(ctx: *api.NativeCtx) callconv(.c) c_int { const value = ctx.vm.bz_peek(0); ctx.vm.bz_push( @@ -66,7 +66,7 @@ pub export fn toInt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn toDouble(ctx: *api.NativeCtx) c_int { +pub export fn toDouble(ctx: *api.NativeCtx) callconv(.c) c_int { const value = ctx.vm.bz_peek(0); ctx.vm.bz_push( @@ -76,7 +76,7 @@ pub export fn toDouble(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn toUd(ctx: *api.NativeCtx) c_int { +pub export fn toUd(ctx: *api.NativeCtx) callconv(.c) c_int { const value = ctx.vm.bz_peek(0); ctx.vm.bz_push( @@ -91,7 +91,7 @@ pub export fn toUd(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn parseInt(ctx: *api.NativeCtx) c_int { +pub export fn parseInt(ctx: *api.NativeCtx) callconv(.c) c_int { const string_value = ctx.vm.bz_peek(0); var len: usize = 0; @@ -116,7 +116,7 @@ pub export fn parseInt(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn parseUd(ctx: *api.NativeCtx) c_int { +pub export fn parseUd(ctx: *api.NativeCtx) callconv(.c) c_int { const string_value = ctx.vm.bz_peek(0); var len: usize = 0; @@ -146,7 +146,7 @@ pub export fn parseUd(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn parseDouble(ctx: *api.NativeCtx) c_int { +pub export fn parseDouble(ctx: *api.NativeCtx) callconv(.c) c_int { const string_value = ctx.vm.bz_peek(0); var len: usize = 0; @@ -171,7 +171,7 @@ pub export fn parseDouble(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn char(ctx: *api.NativeCtx) c_int { +pub export fn char(ctx: *api.NativeCtx) callconv(.c) c_int { const byte_value = ctx.vm.bz_peek(0); var byte = byte_value.integer(); @@ -191,7 +191,7 @@ pub export fn char(ctx: *api.NativeCtx) c_int { return 1; } -pub export fn assert(ctx: *api.NativeCtx) c_int { +pub export fn assert(ctx: *api.NativeCtx) callconv(.c) c_int { const condition_value = ctx.vm.bz_peek(1); const message_value = ctx.vm.bz_peek(0); @@ -217,13 +217,13 @@ pub export fn assert(ctx: *api.NativeCtx) c_int { return 0; } -pub export fn currentFiber(ctx: *api.NativeCtx) c_int { +pub export fn currentFiber(ctx: *api.NativeCtx) callconv(.c) c_int { ctx.vm.bz_push(ctx.vm.bz_currentFiber()); return 1; } -pub export fn buzzPanic(ctx: *api.NativeCtx) c_int { +pub export fn buzzPanic(ctx: *api.NativeCtx) callconv(.c) c_int { var len: usize = 0; const message = api.Value.bz_valueToString(ctx.vm.bz_peek(0), &len).?; diff --git a/src/linenoise.zig b/src/linenoise.zig index 744973f2..e004d2bf 100644 --- a/src/linenoise.zig +++ b/src/linenoise.zig @@ -1,10 +1,10 @@ pub const linenoiseState = opaque { // Non blocking API. - pub extern fn linenoiseEditStart(stdind_fd: c_int, stdout_fd: c_int, buf: [*]u8, buflen: usize, prompt: [*:0]const u8) c_int; - pub extern fn linenoiseEditFeed() [*:0]u8; - pub extern fn linenoiseEditStop() void; - pub extern fn linenoiseHide() void; - pub extern fn linenoiseShow() void; + pub extern fn linenoiseEditStart(stdind_fd: c_int, stdout_fd: c_int, buf: [*]u8, buflen: usize, prompt: [*:0]const u8) callconv(.c) c_int; + pub extern fn linenoiseEditFeed() callconv(.c) [*:0]u8; + pub extern fn linenoiseEditStop() callconv(.c) void; + pub extern fn linenoiseHide() callconv(.c) void; + pub extern fn linenoiseShow() callconv(.c) void; }; pub const linenoiseCompletions = extern struct { @@ -13,26 +13,26 @@ pub const linenoiseCompletions = extern struct { }; // Blocking API. -pub extern fn linenoise(prompt: [*:0]const u8) ?[*:0]const u8; +pub extern fn linenoise(prompt: [*:0]const u8) callconv(.c) ?[*:0]const u8; // Completion API. pub const linenoiseCompletionCallback = fn ([*:0]const u8, *linenoiseCompletions) void; pub const linenoiseHintsCallback = fn ([*:0]const u8, *c_int, *c_int) [*:0]const u8; pub const linenoiseFreeHintsCallback = fn (*anyopaque) void; -pub extern fn linenoiseSetCompletionCallback(callback: *linenoiseCompletionCallback) void; -pub extern fn linenoiseSetHintsCallback(callback: *linenoiseHintsCallback) void; -pub extern fn linenoiseSetFreeHintsCallback(callback: *linenoiseFreeHintsCallback) void; -pub extern fn linenoiseAddCompletion(completions: *linenoiseCompletions, completion: [*:0]const u8) void; +pub extern fn linenoiseSetCompletionCallback(callback: *linenoiseCompletionCallback) callconv(.c) void; +pub extern fn linenoiseSetHintsCallback(callback: *linenoiseHintsCallback) callconv(.c) void; +pub extern fn linenoiseSetFreeHintsCallback(callback: *linenoiseFreeHintsCallback) callconv(.c) void; +pub extern fn linenoiseAddCompletion(completions: *linenoiseCompletions, completion: [*:0]const u8) callconv(.c) void; // History API. -pub extern fn linenoiseHistoryAdd(line: [*:0]const u8) c_int; -pub extern fn linenoiseHistorySetMaxLen(len: c_int) c_int; -pub extern fn linenoiseHistorySave(filename: [*:0]const u8) c_int; -pub extern fn linenoiseHistoryLoad(filename: [*:0]const u8) c_int; +pub extern fn linenoiseHistoryAdd(line: [*:0]const u8) callconv(.c) c_int; +pub extern fn linenoiseHistorySetMaxLen(len: c_int) callconv(.c) c_int; +pub extern fn linenoiseHistorySave(filename: [*:0]const u8) callconv(.c) c_int; +pub extern fn linenoiseHistoryLoad(filename: [*:0]const u8) callconv(.c) c_int; // Other utilities. -pub extern fn linenoiseClearScreen() void; -pub extern fn linenoiseSetMultiLine(ml: c_int) void; -pub extern fn linenoisePrintKeyCodes() void; -pub extern fn linenoiseMaskModeEnable() void; -pub extern fn linenoiseMaskModeDisable() void; +pub extern fn linenoiseClearScreen() callconv(.c) void; +pub extern fn linenoiseSetMultiLine(ml: c_int) callconv(.c) void; +pub extern fn linenoisePrintKeyCodes() callconv(.c) void; +pub extern fn linenoiseMaskModeEnable() callconv(.c) void; +pub extern fn linenoiseMaskModeDisable() callconv(.c) void; diff --git a/src/mir.zig b/src/mir.zig index 4c2103d8..e50e92a3 100644 --- a/src/mir.zig +++ b/src/mir.zig @@ -342,55 +342,55 @@ pub const DLIST_MIR_module_t = struct_DLIST_MIR_module_t; pub const struct_MIR_context = opaque {}; pub const MIR_context_t = ?*struct_MIR_context; -pub extern fn MIR_get_api_version() f64; +pub extern fn MIR_get_api_version() callconv(.c) f64; pub const MIR_init = _MIR_init; -extern fn _MIR_init() MIR_context_t; -pub extern fn MIR_finish(ctx: MIR_context_t) void; -pub extern fn MIR_new_module(ctx: MIR_context_t, name: [*:0]const u8) MIR_module_t; -pub extern fn MIR_get_module_list(ctx: MIR_context_t) *DLIST_MIR_module_t; -pub extern fn MIR_new_import(ctx: MIR_context_t, name: [*:0]const u8) MIR_item_t; -pub extern fn MIR_new_export(ctx: MIR_context_t, name: [*:0]const u8) MIR_item_t; -pub extern fn MIR_new_forward(ctx: MIR_context_t, name: [*:0]const u8) MIR_item_t; -pub extern fn MIR_new_bss(ctx: MIR_context_t, name: [*:0]const u8, len: usize) MIR_item_t; -pub extern fn MIR_new_data(ctx: MIR_context_t, name: [*:0]const u8, el_type: MIR_type_t, nel: usize, els: ?*const anyopaque) MIR_item_t; -pub extern fn MIR_new_string_data(ctx: MIR_context_t, name: [*:0]const u8, str: MIR_str_t) MIR_item_t; -pub extern fn MIR_new_ref_data(ctx: MIR_context_t, name: [*:0]const u8, item: MIR_item_t, disp: i64) MIR_item_t; -pub extern fn MIR_new_lref_data(ctx: MIR_context_t, name: [*:0]const u8, label: MIR_label_t, label2: MIR_label_t, disp: i64) MIR_item_t; -pub extern fn MIR_new_expr_data(ctx: MIR_context_t, name: [*:0]const u8, expr_item: MIR_item_t) MIR_item_t; -pub extern fn MIR_new_proto_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: ?[*]const MIR_type_t, nargs: usize, vars: ?[*]const MIR_var_t) MIR_item_t; -pub extern fn MIR_new_vararg_proto_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vars: *MIR_var_t) MIR_item_t; -pub extern fn MIR_new_func_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: ?[*]const MIR_type_t, nargs: usize, vars: [*]const MIR_var_t) MIR_item_t; -pub extern fn MIR_new_vararg_func_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vars: *MIR_var_t) MIR_item_t; -pub extern fn MIR_item_name(ctx: MIR_context_t, item: MIR_item_t) [*:0]const u8; -pub extern fn MIR_get_item_func(ctx: MIR_context_t, item: MIR_item_t) MIR_func_t; -pub extern fn MIR_new_func_reg(ctx: MIR_context_t, func: MIR_func_t, @"type": MIR_type_t, name: [*:0]const u8) MIR_reg_t; -pub extern fn MIR_new_global_func_reg(ctx: MIR_context_t, func: MIR_func_t, @"type": MIR_type_t, name: [*:0]const u8, hard_reg_name: [*:0]const u8) MIR_reg_t; -pub extern fn MIR_finish_func(ctx: MIR_context_t) void; -pub extern fn MIR_finish_module(ctx: MIR_context_t) void; -pub extern fn MIR_get_error_func(ctx: MIR_context_t) MIR_error_func_t; -pub extern fn MIR_set_error_func(ctx: MIR_context_t, func: MIR_error_func_t) void; -pub extern fn MIR_get_func_redef_permission_p(ctx: MIR_context_t) c_int; -pub extern fn MIR_set_func_redef_permission(ctx: MIR_context_t, flag_p: c_int) void; -pub extern fn MIR_new_insn_arr(ctx: MIR_context_t, code: MIR_insn_code_t, nops: usize, ops: [*]const MIR_op_t) MIR_insn_t; -pub extern fn MIR_copy_insn(ctx: MIR_context_t, insn: MIR_insn_t) MIR_insn_t; -pub extern fn MIR_insn_name(ctx: MIR_context_t, code: MIR_insn_code_t) [*:0]const u8; -pub extern fn MIR_insn_nops(ctx: MIR_context_t, insn: MIR_insn_t) usize; -pub extern fn MIR_insn_op_mode(ctx: MIR_context_t, insn: MIR_insn_t, nop: usize, out_p: *c_int) MIR_op_mode_t; -pub extern fn MIR_new_label(ctx: MIR_context_t) MIR_insn_t; -pub extern fn MIR_reg(ctx: MIR_context_t, reg_name: [*:0]const u8, func: MIR_func_t) MIR_reg_t; -pub extern fn MIR_reg_type(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) MIR_type_t; -pub extern fn MIR_reg_name(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) [*:0]const u8; -pub extern fn MIR_hard_reg_name(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) [*:0]const u8; -pub extern fn MIR_alias_name(ctx: MIR_context_t, alias: MIR_alias_t) [*:0]const u8; -pub extern fn MIR_alias(ctx: MIR_context_t, name: [*:0]const u8) MIR_alias_t; -pub extern fn MIR_new_reg_op(ctx: MIR_context_t, reg: MIR_reg_t) MIR_op_t; -pub extern fn MIR_new_int_op(ctx: MIR_context_t, v: i64) MIR_op_t; -pub extern fn MIR_new_uint_op(ctx: MIR_context_t, v: u64) MIR_op_t; -pub extern fn MIR_new_float_op(ctx: MIR_context_t, v: f32) MIR_op_t; -pub extern fn MIR_new_double_op(ctx: MIR_context_t, v: f64) MIR_op_t; -pub extern fn MIR_new_ldouble_op(ctx: MIR_context_t, v: c_longdouble) MIR_op_t; -pub extern fn MIR_new_ref_op(ctx: MIR_context_t, item: MIR_item_t) MIR_op_t; -pub extern fn MIR_new_str_op(ctx: MIR_context_t, str: MIR_str_t) MIR_op_t; +extern fn _MIR_init() callconv(.C) MIR_context_t; +pub extern fn MIR_finish(ctx: MIR_context_t) callconv(.c) void; +pub extern fn MIR_new_module(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_module_t; +pub extern fn MIR_get_module_list(ctx: MIR_context_t) callconv(.c) *DLIST_MIR_module_t; +pub extern fn MIR_new_import(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_item_t; +pub extern fn MIR_new_export(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_item_t; +pub extern fn MIR_new_forward(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_item_t; +pub extern fn MIR_new_bss(ctx: MIR_context_t, name: [*:0]const u8, len: usize) callconv(.c) MIR_item_t; +pub extern fn MIR_new_data(ctx: MIR_context_t, name: [*:0]const u8, el_type: MIR_type_t, nel: usize, els: ?*const anyopaque) callconv(.c) MIR_item_t; +pub extern fn MIR_new_string_data(ctx: MIR_context_t, name: [*:0]const u8, str: MIR_str_t) callconv(.c) MIR_item_t; +pub extern fn MIR_new_ref_data(ctx: MIR_context_t, name: [*:0]const u8, item: MIR_item_t, disp: i64) callconv(.c) MIR_item_t; +pub extern fn MIR_new_lref_data(ctx: MIR_context_t, name: [*:0]const u8, label: MIR_label_t, label2: MIR_label_t, disp: i64) callconv(.c) MIR_item_t; +pub extern fn MIR_new_expr_data(ctx: MIR_context_t, name: [*:0]const u8, expr_item: MIR_item_t) callconv(.c) MIR_item_t; +pub extern fn MIR_new_proto_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: ?[*]const MIR_type_t, nargs: usize, vars: ?[*]const MIR_var_t) callconv(.c) MIR_item_t; +pub extern fn MIR_new_vararg_proto_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vars: *MIR_var_t) callconv(.c) MIR_item_t; +pub extern fn MIR_new_func_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: ?[*]const MIR_type_t, nargs: usize, vars: [*]const MIR_var_t) callconv(.c) MIR_item_t; +pub extern fn MIR_new_vararg_func_arr(ctx: MIR_context_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vars: *MIR_var_t) callconv(.c) MIR_item_t; +pub extern fn MIR_item_name(ctx: MIR_context_t, item: MIR_item_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_get_item_func(ctx: MIR_context_t, item: MIR_item_t) callconv(.c) MIR_func_t; +pub extern fn MIR_new_func_reg(ctx: MIR_context_t, func: MIR_func_t, @"type": MIR_type_t, name: [*:0]const u8) callconv(.c) MIR_reg_t; +pub extern fn MIR_new_global_func_reg(ctx: MIR_context_t, func: MIR_func_t, @"type": MIR_type_t, name: [*:0]const u8, hard_reg_name: [*:0]const u8) callconv(.c) MIR_reg_t; +pub extern fn MIR_finish_func(ctx: MIR_context_t) callconv(.c) void; +pub extern fn MIR_finish_module(ctx: MIR_context_t) callconv(.c) void; +pub extern fn MIR_get_error_func(ctx: MIR_context_t) callconv(.c) MIR_error_func_t; +pub extern fn MIR_set_error_func(ctx: MIR_context_t, func: MIR_error_func_t) callconv(.c) void; +pub extern fn MIR_get_func_redef_permission_p(ctx: MIR_context_t) callconv(.c) c_int; +pub extern fn MIR_set_func_redef_permission(ctx: MIR_context_t, flag_p: c_int) callconv(.c) void; +pub extern fn MIR_new_insn_arr(ctx: MIR_context_t, code: MIR_insn_code_t, nops: usize, ops: [*]const MIR_op_t) callconv(.c) MIR_insn_t; +pub extern fn MIR_copy_insn(ctx: MIR_context_t, insn: MIR_insn_t) callconv(.c) MIR_insn_t; +pub extern fn MIR_insn_name(ctx: MIR_context_t, code: MIR_insn_code_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_insn_nops(ctx: MIR_context_t, insn: MIR_insn_t) callconv(.c) usize; +pub extern fn MIR_insn_op_mode(ctx: MIR_context_t, insn: MIR_insn_t, nop: usize, out_p: *c_int) callconv(.c) MIR_op_mode_t; +pub extern fn MIR_new_label(ctx: MIR_context_t) callconv(.c) MIR_insn_t; +pub extern fn MIR_reg(ctx: MIR_context_t, reg_name: [*:0]const u8, func: MIR_func_t) callconv(.c) MIR_reg_t; +pub extern fn MIR_reg_type(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) callconv(.c) MIR_type_t; +pub extern fn MIR_reg_name(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_hard_reg_name(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_alias_name(ctx: MIR_context_t, alias: MIR_alias_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_alias(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_alias_t; +pub extern fn MIR_new_reg_op(ctx: MIR_context_t, reg: MIR_reg_t) callconv(.c) MIR_op_t; +pub extern fn MIR_new_int_op(ctx: MIR_context_t, v: i64) callconv(.c) MIR_op_t; +pub extern fn MIR_new_uint_op(ctx: MIR_context_t, v: u64) callconv(.c) MIR_op_t; +pub extern fn MIR_new_float_op(ctx: MIR_context_t, v: f32) callconv(.c) MIR_op_t; +pub extern fn MIR_new_double_op(ctx: MIR_context_t, v: f64) callconv(.c) MIR_op_t; +pub extern fn MIR_new_ldouble_op(ctx: MIR_context_t, v: c_longdouble) callconv(.c) MIR_op_t; +pub extern fn MIR_new_ref_op(ctx: MIR_context_t, item: MIR_item_t) callconv(.c) MIR_op_t; +pub extern fn MIR_new_str_op(ctx: MIR_context_t, str: MIR_str_t) callconv(.c) MIR_op_t; pub extern fn MIR_new_mem_op( ctx: MIR_context_t, @@ -399,7 +399,7 @@ pub extern fn MIR_new_mem_op( base: MIR_reg_t, index: MIR_reg_t, scale: MIR_scale_t, -) MIR_op_t; +) callconv(.c) MIR_op_t; pub extern fn MIR_new_alias_mem_op( ctx: MIR_context_t, type: MIR_type_t, @@ -409,36 +409,36 @@ pub extern fn MIR_new_alias_mem_op( scale: MIR_scale_t, alias: MIR_alias_t, @"noalias": MIR_alias_t, -) MIR_op_t; -pub extern fn MIR_new_label_op(ctx: MIR_context_t, label: MIR_label_t) MIR_op_t; -pub extern fn MIR_op_eq_p(ctx: MIR_context_t, op1: MIR_op_t, op2: MIR_op_t) c_int; +) callconv(.c) MIR_op_t; +pub extern fn MIR_new_label_op(ctx: MIR_context_t, label: MIR_label_t) callconv(.c) MIR_op_t; +pub extern fn MIR_op_eq_p(ctx: MIR_context_t, op1: MIR_op_t, op2: MIR_op_t) callconv(.c) c_int; pub const htab_hash_t = c_uint; -pub extern fn MIR_op_hash_step(ctx: MIR_context_t, h: htab_hash_t, op: MIR_op_t) htab_hash_t; -pub extern fn MIR_append_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) void; -pub extern fn MIR_prepend_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) void; -pub extern fn MIR_insert_insn_after(ctx: MIR_context_t, func: MIR_item_t, after: MIR_insn_t, insn: MIR_insn_t) void; -pub extern fn MIR_insert_insn_before(ctx: MIR_context_t, func: MIR_item_t, before: MIR_insn_t, insn: MIR_insn_t) void; -pub extern fn MIR_remove_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) void; -pub extern fn MIR_change_module_ctx(old_ctx: MIR_context_t, m: MIR_module_t, new_ctx: MIR_context_t) void; -pub extern fn MIR_reverse_branch_code(code: MIR_insn_code_t) MIR_insn_code_t; -pub extern fn MIR_type_str(ctx: MIR_context_t, tp: MIR_type_t) [*:0]const u8; -pub extern fn MIR_output_str(ctx: MIR_context_t, f: ?*std.c.FILE, str: MIR_str_t) void; -pub extern fn MIR_output_op(ctx: MIR_context_t, f: ?*std.c.FILE, op: MIR_op_t, func: MIR_func_t) void; -pub extern fn MIR_output_insn(ctx: MIR_context_t, f: ?*std.c.FILE, insn: MIR_insn_t, func: MIR_func_t, newline_p: c_int) void; -pub extern fn MIR_output_item(ctx: MIR_context_t, f: ?*std.c.FILE, item: MIR_item_t) void; -pub extern fn MIR_output_module(ctx: MIR_context_t, f: ?*std.c.FILE, module: MIR_module_t) void; -pub extern fn MIR_output(ctx: MIR_context_t, f: ?*std.c.FILE) void; -pub extern fn MIR_write(ctx: MIR_context_t, f: ?*std.c.FILE) void; -pub extern fn MIR_write_module(ctx: MIR_context_t, f: ?*std.c.FILE, module: MIR_module_t) void; -pub extern fn MIR_read(ctx: MIR_context_t, f: ?*std.c.FILE) void; -pub extern fn MIR_write_with_func(ctx: MIR_context_t, writer_func: ?*const fn (MIR_context_t, u8) callconv(.C) c_int) void; -pub extern fn MIR_write_module_with_func(ctx: MIR_context_t, writer_func: ?*const fn (MIR_context_t, u8) callconv(.C) c_int, module: MIR_module_t) void; -pub extern fn MIR_read_with_func(ctx: MIR_context_t, reader_func: ?*const fn (MIR_context_t) callconv(.C) c_int) void; -pub extern fn MIR_scan_string(ctx: MIR_context_t, str: [*:0]const u8) void; -pub extern fn MIR_get_global_item(ctx: MIR_context_t, name: [*:0]const u8) MIR_item_t; -pub extern fn MIR_load_module(ctx: MIR_context_t, m: MIR_module_t) void; -pub extern fn MIR_load_external(ctx: MIR_context_t, name: [*:0]const u8, addr: ?*anyopaque) void; -pub extern fn MIR_link(ctx: MIR_context_t, set_interface: ?*const fn (MIR_context_t, MIR_item_t) callconv(.C) void, import_resolver: ?*const fn ([*:0]const u8) callconv(.C) ?*anyopaque) void; +pub extern fn MIR_op_hash_step(ctx: MIR_context_t, h: htab_hash_t, op: MIR_op_t) callconv(.c) htab_hash_t; +pub extern fn MIR_append_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) callconv(.c) void; +pub extern fn MIR_prepend_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) callconv(.c) void; +pub extern fn MIR_insert_insn_after(ctx: MIR_context_t, func: MIR_item_t, after: MIR_insn_t, insn: MIR_insn_t) callconv(.c) void; +pub extern fn MIR_insert_insn_before(ctx: MIR_context_t, func: MIR_item_t, before: MIR_insn_t, insn: MIR_insn_t) callconv(.c) void; +pub extern fn MIR_remove_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t) callconv(.c) void; +pub extern fn MIR_change_module_ctx(old_ctx: MIR_context_t, m: MIR_module_t, new_ctx: MIR_context_t) callconv(.c) void; +pub extern fn MIR_reverse_branch_code(code: MIR_insn_code_t) callconv(.c) MIR_insn_code_t; +pub extern fn MIR_type_str(ctx: MIR_context_t, tp: MIR_type_t) callconv(.c) [*:0]const u8; +pub extern fn MIR_output_str(ctx: MIR_context_t, f: ?*std.c.FILE, str: MIR_str_t) callconv(.c) void; +pub extern fn MIR_output_op(ctx: MIR_context_t, f: ?*std.c.FILE, op: MIR_op_t, func: MIR_func_t) callconv(.c) void; +pub extern fn MIR_output_insn(ctx: MIR_context_t, f: ?*std.c.FILE, insn: MIR_insn_t, func: MIR_func_t, newline_p: c_int) callconv(.c) void; +pub extern fn MIR_output_item(ctx: MIR_context_t, f: ?*std.c.FILE, item: MIR_item_t) callconv(.c) void; +pub extern fn MIR_output_module(ctx: MIR_context_t, f: ?*std.c.FILE, module: MIR_module_t) callconv(.c) void; +pub extern fn MIR_output(ctx: MIR_context_t, f: ?*std.c.FILE) callconv(.c) void; +pub extern fn MIR_write(ctx: MIR_context_t, f: ?*std.c.FILE) callconv(.c) void; +pub extern fn MIR_write_module(ctx: MIR_context_t, f: ?*std.c.FILE, module: MIR_module_t) callconv(.c) void; +pub extern fn MIR_read(ctx: MIR_context_t, f: ?*std.c.FILE) callconv(.c) void; +pub extern fn MIR_write_with_func(ctx: MIR_context_t, writer_func: ?*const fn (MIR_context_t, u8) callconv(.c) c_int) void; +pub extern fn MIR_write_module_with_func(ctx: MIR_context_t, writer_func: ?*const fn (MIR_context_t, u8) callconv(.c) c_int, module: MIR_module_t) void; +pub extern fn MIR_read_with_func(ctx: MIR_context_t, reader_func: ?*const fn (MIR_context_t) callconv(.c) c_int) void; +pub extern fn MIR_scan_string(ctx: MIR_context_t, str: [*:0]const u8) callconv(.c) void; +pub extern fn MIR_get_global_item(ctx: MIR_context_t, name: [*:0]const u8) callconv(.c) MIR_item_t; +pub extern fn MIR_load_module(ctx: MIR_context_t, m: MIR_module_t) callconv(.c) void; +pub extern fn MIR_load_external(ctx: MIR_context_t, name: [*:0]const u8, addr: ?*anyopaque) callconv(.c) void; +pub extern fn MIR_link(ctx: MIR_context_t, set_interface: ?*const fn (MIR_context_t, MIR_item_t) callconv(.c) void, import_resolver: ?*const fn ([*:0]const u8) callconv(.C) ?*anyopaque) void; pub const MIR_val_t = extern union { ic: MIR_insn_code_t, a: ?*anyopaque, @@ -448,58 +448,58 @@ pub const MIR_val_t = extern union { d: f64, ld: c_longdouble, }; -pub extern fn MIR_interp_arr(ctx: MIR_context_t, func_item: MIR_item_t, results: *MIR_val_t, nargs: usize, vals: *MIR_val_t) void; -pub extern fn MIR_set_interp_interface(ctx: MIR_context_t, func_item: MIR_item_t) void; -extern fn _MIR_uniq_string(ctx: MIR_context_t, str: [*:0]const u8) [*:0]const u8; -extern fn _MIR_reserved_ref_name_p(ctx: MIR_context_t, name: [*:0]const u8) c_int; -extern fn _MIR_reserved_name_p(ctx: MIR_context_t, name: [*:0]const u8) c_int; -extern fn _MIR_new_temp_reg(ctx: MIR_context_t, @"type": MIR_type_t, func: MIR_func_t) MIR_reg_t; -extern fn _MIR_type_size(ctx: MIR_context_t, @"type": MIR_type_t) usize; -extern fn _MIR_insn_code_op_mode(ctx: MIR_context_t, code: MIR_insn_code_t, nop: usize, out_p: *c_int) MIR_op_mode_t; -extern fn _MIR_new_unspec_insn(ctx: MIR_context_t, nops: usize, ...) MIR_insn_t; -extern fn _MIR_register_unspec_insn(ctx: MIR_context_t, code: u64, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vararg_p: c_int, args: *MIR_var_t) void; -extern fn _MIR_duplicate_func_insns(ctx: MIR_context_t, func_item: MIR_item_t) void; -extern fn _MIR_restore_func_insns(ctx: MIR_context_t, func_item: MIR_item_t) void; -extern fn _MIR_get_temp_item_name(ctx: MIR_context_t, module: MIR_module_t, buff: *u8, buff_len: usize) void; -extern fn _MIR_new_var_op(ctx: MIR_context_t, hard_reg: MIR_reg_t) MIR_op_t; -extern fn _MIR_new_var_mem_op(ctx: MIR_context_t, @"type": MIR_type_t, disp: MIR_disp_t, base: MIR_reg_t, index: MIR_reg_t, scale: MIR_scale_t) MIR_op_t; -extern fn _MIR_builtin_proto(ctx: MIR_context_t, module: MIR_module_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, ...) MIR_item_t; -extern fn _MIR_builtin_func(ctx: MIR_context_t, module: MIR_module_t, name: [*]const u8, addr: ?*anyopaque) MIR_item_t; -extern fn _MIR_flush_code_cache(start: ?*anyopaque, bound: ?*anyopaque) void; -extern fn _MIR_publish_code(ctx: MIR_context_t, code: [*]const u8, code_len: usize) *u8; -extern fn _MIR_get_new_code_addr(ctx: MIR_context_t, size: usize) *u8; -extern fn _MIR_publish_code_by_addr(ctx: MIR_context_t, addr: ?*anyopaque, code: [*]const u8, code_len: usize) *u8; +pub extern fn MIR_interp_arr(ctx: MIR_context_t, func_item: MIR_item_t, results: *MIR_val_t, nargs: usize, vals: *MIR_val_t) callconv(.c) void; +pub extern fn MIR_set_interp_interface(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.c) void; +extern fn _MIR_uniq_string(ctx: MIR_context_t, str: [*:0]const u8) callconv(.C) [*:0]const u8; +extern fn _MIR_reserved_ref_name_p(ctx: MIR_context_t, name: [*:0]const u8) callconv(.C) c_int; +extern fn _MIR_reserved_name_p(ctx: MIR_context_t, name: [*:0]const u8) callconv(.C) c_int; +extern fn _MIR_new_temp_reg(ctx: MIR_context_t, @"type": MIR_type_t, func: MIR_func_t) callconv(.C) MIR_reg_t; +extern fn _MIR_type_size(ctx: MIR_context_t, @"type": MIR_type_t) callconv(.C) usize; +extern fn _MIR_insn_code_op_mode(ctx: MIR_context_t, code: MIR_insn_code_t, nop: usize, out_p: *c_int) callconv(.C) MIR_op_mode_t; +extern fn _MIR_new_unspec_insn(ctx: MIR_context_t, nops: usize, ...) callconv(.C) MIR_insn_t; +extern fn _MIR_register_unspec_insn(ctx: MIR_context_t, code: u64, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, vararg_p: c_int, args: *MIR_var_t) callconv(.C) void; +extern fn _MIR_duplicate_func_insns(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.C) void; +extern fn _MIR_restore_func_insns(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.C) void; +extern fn _MIR_get_temp_item_name(ctx: MIR_context_t, module: MIR_module_t, buff: *u8, buff_len: usize) callconv(.C) void; +extern fn _MIR_new_var_op(ctx: MIR_context_t, hard_reg: MIR_reg_t) callconv(.C) MIR_op_t; +extern fn _MIR_new_var_mem_op(ctx: MIR_context_t, @"type": MIR_type_t, disp: MIR_disp_t, base: MIR_reg_t, index: MIR_reg_t, scale: MIR_scale_t) callconv(.C) MIR_op_t; +extern fn _MIR_builtin_proto(ctx: MIR_context_t, module: MIR_module_t, name: [*:0]const u8, nres: usize, res_types: *MIR_type_t, nargs: usize, ...) callconv(.C) MIR_item_t; +extern fn _MIR_builtin_func(ctx: MIR_context_t, module: MIR_module_t, name: [*]const u8, addr: ?*anyopaque) callconv(.C) MIR_item_t; +extern fn _MIR_flush_code_cache(start: ?*anyopaque, bound: ?*anyopaque) callconv(.C) void; +extern fn _MIR_publish_code(ctx: MIR_context_t, code: [*]const u8, code_len: usize) callconv(.C) *u8; +extern fn _MIR_get_new_code_addr(ctx: MIR_context_t, size: usize) callconv(.C) *u8; +extern fn _MIR_publish_code_by_addr(ctx: MIR_context_t, addr: ?*anyopaque, code: [*]const u8, code_len: usize) callconv(.C) *u8; pub const struct_MIR_code_reloc = extern struct { offset: usize, value: ?*const anyopaque, }; pub const MIR_code_reloc_t = struct_MIR_code_reloc; -extern fn _MIR_set_code(prot_start: usize, prot_len: usize, base: *u8, nloc: usize, relocs: *const MIR_code_reloc_t, reloc_size: usize) void; -extern fn _MIR_change_code(ctx: MIR_context_t, addr: *u8, code: [*]const u8, code_len: usize) void; -extern fn _MIR_update_code_arr(ctx: MIR_context_t, base: *u8, nloc: usize, relocs: *const MIR_code_reloc_t) void; -extern fn _MIR_update_code(ctx: MIR_context_t, base: *u8, nloc: usize, ...) void; -pub extern fn va_arg_builtin(p: ?*anyopaque, t: u64) ?*anyopaque; -pub extern fn va_block_arg_builtin(res: ?*anyopaque, p: ?*anyopaque, s: usize, t: u64) void; -pub extern fn va_start_interp_builtin(ctx: MIR_context_t, p: ?*anyopaque, a: ?*anyopaque) void; -pub extern fn va_end_interp_builtin(ctx: MIR_context_t, p: ?*anyopaque) void; -extern fn _MIR_get_bstart_builtin(ctx: MIR_context_t) ?*anyopaque; -extern fn _MIR_get_bend_builtin(ctx: MIR_context_t) ?*anyopaque; +extern fn _MIR_set_code(prot_start: usize, prot_len: usize, base: *u8, nloc: usize, relocs: *const MIR_code_reloc_t, reloc_size: usize) callconv(.C) void; +extern fn _MIR_change_code(ctx: MIR_context_t, addr: *u8, code: [*]const u8, code_len: usize) callconv(.C) void; +extern fn _MIR_update_code_arr(ctx: MIR_context_t, base: *u8, nloc: usize, relocs: *const MIR_code_reloc_t) callconv(.C) void; +extern fn _MIR_update_code(ctx: MIR_context_t, base: *u8, nloc: usize, ...) callconv(.C) void; +pub extern fn va_arg_builtin(p: ?*anyopaque, t: u64) callconv(.c) ?*anyopaque; +pub extern fn va_block_arg_builtin(res: ?*anyopaque, p: ?*anyopaque, s: usize, t: u64) callconv(.c) void; +pub extern fn va_start_interp_builtin(ctx: MIR_context_t, p: ?*anyopaque, a: ?*anyopaque) callconv(.c) void; +pub extern fn va_end_interp_builtin(ctx: MIR_context_t, p: ?*anyopaque) callconv(.c) void; +extern fn _MIR_get_bstart_builtin(ctx: MIR_context_t) callconv(.C) ?*anyopaque; +extern fn _MIR_get_bend_builtin(ctx: MIR_context_t) callconv(.C) ?*anyopaque; pub const _MIR_arg_desc_t = extern struct { type: MIR_type_t, size: usize, }; -extern fn _MIR_get_ff_call(ctx: MIR_context_t, nres: usize, res_types: *MIR_type_t, nargs: usize, arg_descs: *_MIR_arg_desc_t, arg_vars_num: usize) ?*anyopaque; -extern fn _MIR_get_interp_shim(ctx: MIR_context_t, func_item: MIR_item_t, handler: ?*anyopaque) ?*anyopaque; -extern fn _MIR_get_thunk(ctx: MIR_context_t) ?*anyopaque; -extern fn _MIR_redirect_thunk(ctx: MIR_context_t, thunk: ?*anyopaque, to: ?*anyopaque) void; -extern fn _MIR_get_wrapper(ctx: MIR_context_t, called_func: MIR_item_t, hook_address: ?*anyopaque) ?*anyopaque; -extern fn _MIR_dump_code(name: [*:0]const u8, index: c_int, code: *u8, code_len: usize) void; -pub extern fn MIR_gen_init(ctx: MIR_context_t) void; -pub extern fn MIR_gen_set_debug_file(ctx: MIR_context_t, f: ?*std.c.FILE) void; -pub extern fn MIR_gen_set_debug_level(ctx: MIR_context_t, debug_level: c_int) void; -pub extern fn MIR_gen_set_optimize_level(ctx: MIR_context_t, level: c_uint) void; -pub extern fn MIR_gen(ctx: MIR_context_t, func_item: MIR_item_t) ?*anyopaque; -pub extern fn MIR_set_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) void; -pub extern fn MIR_set_parallel_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) void; -pub extern fn MIR_set_lazy_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) void; -pub extern fn MIR_gen_finish(ctx: MIR_context_t) void; +extern fn _MIR_get_ff_call(ctx: MIR_context_t, nres: usize, res_types: *MIR_type_t, nargs: usize, arg_descs: *_MIR_arg_desc_t, arg_vars_num: usize) callconv(.C) ?*anyopaque; +extern fn _MIR_get_interp_shim(ctx: MIR_context_t, func_item: MIR_item_t, handler: ?*anyopaque) callconv(.C) ?*anyopaque; +extern fn _MIR_get_thunk(ctx: MIR_context_t) callconv(.C) ?*anyopaque; +extern fn _MIR_redirect_thunk(ctx: MIR_context_t, thunk: ?*anyopaque, to: ?*anyopaque) callconv(.C) void; +extern fn _MIR_get_wrapper(ctx: MIR_context_t, called_func: MIR_item_t, hook_address: ?*anyopaque) callconv(.C) ?*anyopaque; +extern fn _MIR_dump_code(name: [*:0]const u8, index: c_int, code: *u8, code_len: usize) callconv(.C) void; +pub extern fn MIR_gen_init(ctx: MIR_context_t) callconv(.c) void; +pub extern fn MIR_gen_set_debug_file(ctx: MIR_context_t, f: ?*std.c.FILE) callconv(.c) void; +pub extern fn MIR_gen_set_debug_level(ctx: MIR_context_t, debug_level: c_int) callconv(.c) void; +pub extern fn MIR_gen_set_optimize_level(ctx: MIR_context_t, level: c_uint) callconv(.c) void; +pub extern fn MIR_gen(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.c) ?*anyopaque; +pub extern fn MIR_set_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.c) void; +pub extern fn MIR_set_parallel_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.c) void; +pub extern fn MIR_set_lazy_gen_interface(ctx: MIR_context_t, func_item: MIR_item_t) callconv(.c) void; +pub extern fn MIR_gen_finish(ctx: MIR_context_t) callconv(.c) void; diff --git a/src/obj.zig b/src/obj.zig index 4d7e9fe5..75b41f47 100644 --- a/src/obj.zig +++ b/src/obj.zig @@ -1226,10 +1226,10 @@ pub const NativeCtx = extern struct { }; // 1 = return value on stack, 0 = no return value, -1 = error -pub const Native = fn (ctx: *NativeCtx) c_int; +pub const Native = fn (ctx: *NativeCtx) callconv(.c) c_int; pub const NativeFn = *const Native; -pub const Compiled = fn (ctx: *NativeCtx) Value; +pub const Compiled = fn (ctx: *NativeCtx) callconv(.c) Value; pub const CompiledFn = *const Compiled; /// Native function @@ -1551,8 +1551,8 @@ pub const ObjForeignContainer = struct { } pub const ContainerDef = struct { - pub const Getter = fn (vm: *VM, data: [*]u8) Value; - pub const Setter = fn (vm: *VM, data: [*]u8, value: Value) void; + pub const Getter = fn (vm: *VM, data: [*]u8) callconv(.c) Value; + pub const Setter = fn (vm: *VM, data: [*]u8, value: Value) callconv(.c) void; pub const Field = struct { offset: usize, diff --git a/src/pcre.zig b/src/pcre.zig index 0ebdf68a..bd74ea73 100644 --- a/src/pcre.zig +++ b/src/pcre.zig @@ -4,7 +4,7 @@ pub const pcre2_code = opaque { extern fn pcre2_match_data_create_from_pattern_8( code: *const pcre2_code, gcontext: ?*pcre2_general_context, - ) ?*pcre2_match_data; + ) callconv(.C) ?*pcre2_match_data; pub const createMatchData = pcre2_match_data_create_from_pattern_8; extern fn pcre2_match_8( @@ -15,10 +15,10 @@ pub const pcre2_code = opaque { options: u32, match_data: *pcre2_match_data, mcontext: ?*pcre2_match_context, - ) c_int; + ) callconv(.C) c_int; pub const match = pcre2_match_8; - extern fn pcre2_code_free_8(code: *pcre2_code) void; + extern fn pcre2_code_free_8(code: *pcre2_code) callconv(.C) void; pub const free = pcre2_code_free_8; }; @@ -27,13 +27,13 @@ pub const pcre2_compile_context = opaque {}; pub const pcre2_match_context = opaque {}; pub const pcre2_match_data = opaque { - extern fn pcre2_match_data_free_8(match_data: *pcre2_match_data) void; + extern fn pcre2_match_data_free_8(match_data: *pcre2_match_data) callconv(.C) void; pub const free = pcre2_match_data_free_8; - extern fn pcre2_get_ovector_pointer_8(match_data: *pcre2_match_data) [*]usize; + extern fn pcre2_get_ovector_pointer_8(match_data: *pcre2_match_data) callconv(.C) [*]usize; pub const getOVectorPointer = pcre2_get_ovector_pointer_8; - extern fn pcre2_get_ovector_count_8(match_data: *pcre2_match_data) u32; + extern fn pcre2_get_ovector_count_8(match_data: *pcre2_match_data) callconv(.C) u32; pub const getOVectorCount = pcre2_get_ovector_count_8; }; @@ -44,10 +44,10 @@ extern fn pcre2_compile_8( errorcode: *c_int, erroroffset: *usize, context: ?*pcre2_compile_context, -) ?*pcre2_code; +) callconv(.C) ?*pcre2_code; pub const compile = pcre2_compile_8; -extern fn pcre2_get_error_message_8(errorcode: c_int, buffer: [*]u8, bufflen: usize) c_int; +extern fn pcre2_get_error_message_8(errorcode: c_int, buffer: [*]u8, bufflen: usize) callconv(.C) c_int; pub const getErrorMessage = pcre2_get_error_message_8; pub const CompileError = enum(c_int) { diff --git a/src/wasm.zig b/src/wasm.zig index 87117e53..02a06983 100644 --- a/src/wasm.zig +++ b/src/wasm.zig @@ -1,8 +1,8 @@ const std = @import("std"); -extern fn writeToStderr(string_ptr: [*]const u8, string_length: usize) void; -extern fn writeToStdout(string_ptr: [*]const u8, string_length: usize) void; -extern fn readFromStdin(buffer_ptr: [*]const u8, buffer_length: usize) isize; +extern fn writeToStderr(string_ptr: [*]const u8, string_length: usize) callconv(.c) void; +extern fn writeToStdout(string_ptr: [*]const u8, string_length: usize) callconv(.c) void; +extern fn readFromStdin(buffer_ptr: [*]const u8, buffer_length: usize) callconv(.c) isize; pub fn stdErrWrite(_: void, bytes: []const u8) std.posix.WriteError!usize { writeToStderr(bytes.ptr, bytes.len); diff --git a/tests/utils/foreign.zig b/tests/utils/foreign.zig index d6b62a6c..9f265afa 100644 --- a/tests/utils/foreign.zig +++ b/tests/utils/foreign.zig @@ -1,14 +1,14 @@ const std = @import("std"); -export fn acos(value: f64) f64 { +export fn acos(value: f64) callconv(.c) f64 { return std.math.acos(value); } -export fn fprint(msg: [*:0]const u8) void { +export fn fprint(msg: [*:0]const u8) callconv(.c) void { std.debug.print("{s}\n", .{msg}); } -export fn sum(values: [*]i32, len: i32) i32 { +export fn sum(values: [*]i32, len: i32) callconv(.c) i32 { var total: i32 = 0; for (0..@intCast(len)) |i| { total += values[i]; @@ -23,11 +23,11 @@ pub const Data = extern struct { value: f64, }; -export fn get_data_msg(data: *Data) [*:0]u8 { +export fn get_data_msg(data: *Data) callconv(.c) [*:0]u8 { return data.msg; } -export fn set_data_id(data: *Data) void { +export fn set_data_id(data: *Data) callconv(.c) void { data.id *= 2; } @@ -42,11 +42,11 @@ pub const Misc = extern union { flag: Flag, }; -export fn get_misc_msg(misc: *Misc) [*:0]u8 { +export fn get_misc_msg(misc: *Misc) callconv(.c) [*:0]u8 { return misc.data.msg; } -export fn get_misc_flag(misc: *Misc) bool { +export fn get_misc_flag(misc: *Misc) callconv(.c) bool { std.debug.print( "> {x:0>2}\n", .{ @@ -56,6 +56,6 @@ export fn get_misc_flag(misc: *Misc) bool { return misc.flag.value; } -export fn set_misc_id(misc: *Misc, new_id: i32) void { +export fn set_misc_id(misc: *Misc, new_id: i32) callconv(.c) void { misc.id = new_id; }