Skip to content

Instantly share code, notes, and snippets.

@fukai-t
Last active August 10, 2020 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fukai-t/50d061b5f7d7da218b13dd1c34891f50 to your computer and use it in GitHub Desktop.
Save fukai-t/50d061b5f7d7da218b13dd1c34891f50 to your computer and use it in GitHub Desktop.
Test struct of zen language
const std = @import("std");
const st1 = struct {
var gvar1: u32 = 1; // Global
fvar1: u32 = 1, // Field
};
fn f1() void {
const st2 = struct {
var gvar2: u32 = 2; // Global in f1()
fvar2: u32, // Field
};
//var hoge: st1 = st1{.gvar1 = 1, .fvar1 = 1}; // error[E07004]: 'st1' has no member 'gvar1'
var hoge: st1 = st1{.fvar1 = 1};
//hoge.gvar1 += 1; // error[E07004]: 'st1' has no member 'gvar1'
hoge.fvar1 += 1; // OK
st1.gvar1 += 1; // OK
//var fuga: st2 = st2{.gvar2 = 1, .fvar2 = 1}; // error[E07004]: 'st2' has no member 'gvar2'
var fuga: st2 = st2{.fvar2 = 1};
//fuga.gvar2 += 1; // error[E07004]: 'st2' has no member 'gvar2'
fuga.fvar2 += 1; // OK
st2.gvar2 += 1; // OK
std.debug.warn("f1: {}, {}, {}, {}\n", .{st1.gvar1, hoge.fvar1, st2.gvar2, fuga.fvar2});
}
fn f2() void {
//var hoge: st1 = st1{.gvar1 = 1, .fvar1 = 1}; //error[E07004]: 'st1' has no member 'gvar1'
var hoge: st1 = st1{.fvar1 = 1};
//hoge.gvar1 += 1; // error[E07004]: 'st1' has no member 'gvar1'
hoge.fvar1 += 1; // OK
st1.gvar1 += 1; // OK
//var fuga: st2 = st2{.gvar2 = 1, .fvar2 = 1}; // error[E07004]: 'st2' has no member 'gvar2'
//var fuga: st2 = st2{.fvar2 = 1}; // error[E07002]: use of undeclared identifier 'st2'
std.debug.warn("f2: {}, {}\n", .{st1.gvar1, hoge.fvar1});
}
pub fn main() anyerror!void {
var i:u32 = 0;
std.debug.warn("f1: {}, {}, {}, {}\n", .{"st1.gvar1", "hoge.fvar1", "st2.gvar2", "fuga.fvar2"});
while (i < 10): (i += 1) {
f1();
}
std.debug.warn("f2: {}, {}\n", .{"st1.gvar1", "hoge.fvar1"});
i = 0;
while (i < 10): (i += 1) {
f2();
}
}
f1: st1.gvar1, hoge.fvar1, st2.gvar2, fuga.fvar2
f1: 2, 2, 3, 2
f1: 3, 2, 4, 2
f1: 4, 2, 5, 2
f1: 5, 2, 6, 2
f1: 6, 2, 7, 2
f1: 7, 2, 8, 2
f1: 8, 2, 9, 2
f1: 9, 2, 10, 2
f1: 10, 2, 11, 2
f1: 11, 2, 12, 2
f2: st1.gvar1, hoge.fvar1
f2: 12, 2
f2: 13, 2
f2: 14, 2
f2: 15, 2
f2: 16, 2
f2: 17, 2
f2: 18, 2
f2: 19, 2
f2: 20, 2
f2: 21, 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment