vlib/v/gen/tests: remove obsolete generation tests (used during the AST migration from v1 to v2)
parent
ed9ca0b7bd
commit
33bd22eda9
|
@ -1,70 +0,0 @@
|
||||||
import os
|
|
||||||
import v.pref
|
|
||||||
import v.builder
|
|
||||||
import term
|
|
||||||
|
|
||||||
const (
|
|
||||||
nr_tests = 4
|
|
||||||
term_ok = term.ok_message('OK')
|
|
||||||
term_fail = term.fail_message('FAIL')
|
|
||||||
)
|
|
||||||
|
|
||||||
fn test_c_files() {
|
|
||||||
if true {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
println('Running V => C tests')
|
|
||||||
vexe := os.getenv('VEXE')
|
|
||||||
vroot := os.dir(vexe)
|
|
||||||
for i in 1 .. (nr_tests + 1) {
|
|
||||||
path := '$vroot/vlib/v/gen/tests/${i}.vv'
|
|
||||||
ctext := os.read_file('$vroot/vlib/v/gen/tests/${i}.c') or { panic(err) }
|
|
||||||
mut b := builder.new_builder(&pref.Preferences{})
|
|
||||||
b.module_search_paths = ['$vroot/vlib/v/gen/tests/']
|
|
||||||
mut res := b.gen_c([path]).after('#endbuiltin')
|
|
||||||
if res.contains('string _STR') {
|
|
||||||
pos := res.index('string _STR') or { -1 }
|
|
||||||
end := res.index_after('endof _STR_TMP', pos)
|
|
||||||
res = res[..pos] + res[end + 15..]
|
|
||||||
}
|
|
||||||
if compare_texts(res, ctext, path) {
|
|
||||||
println('$term_ok $i')
|
|
||||||
} else {
|
|
||||||
assert false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn compare_texts(a string, b string, path string) bool {
|
|
||||||
lines_a_ := a.trim_space().split_into_lines()
|
|
||||||
lines_b_ := b.trim_space().split_into_lines()
|
|
||||||
lines_a := lines_a_.filter(it != '')
|
|
||||||
mut lines_b := lines_b_.filter(it != '')
|
|
||||||
lines_b << ''
|
|
||||||
lines_b << ''
|
|
||||||
/*
|
|
||||||
if lines_a.len != lines_b.len {
|
|
||||||
println(term.red('different len'))
|
|
||||||
println('${path}: got\n$a')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
for i, line_a in lines_a {
|
|
||||||
if i >= lines_b.len {
|
|
||||||
println(line_a)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
line_b := lines_b[i]
|
|
||||||
if line_a.trim_space() != line_b.trim_space() {
|
|
||||||
println('$path: Got\n$a')
|
|
||||||
println('$path:$i: $term_fail')
|
|
||||||
println(term.bold(term.bright_yellow('actual : ')) + line_a)
|
|
||||||
println(term.green('expected: ') + line_b)
|
|
||||||
println(lines_b[i + 1])
|
|
||||||
println(lines_b[i + 2])
|
|
||||||
// exit(1)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
|
@ -1,277 +0,0 @@
|
||||||
typedef enum {
|
|
||||||
Color_red, // 0
|
|
||||||
Color_green, // 1
|
|
||||||
Color_blue, // 2
|
|
||||||
} Color;
|
|
||||||
|
|
||||||
struct Two {
|
|
||||||
};
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
int age;
|
|
||||||
string name;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct One {
|
|
||||||
Two two;
|
|
||||||
};
|
|
||||||
|
|
||||||
// multi return structs
|
|
||||||
typedef struct {
|
|
||||||
int arg0;
|
|
||||||
string arg1;
|
|
||||||
} multi_return_int_string;
|
|
||||||
// end of definitions #endif
|
|
||||||
#define _const_pi 3
|
|
||||||
int _const_pi2; // inited later
|
|
||||||
string int_str(int* x) { return tos3("TODO_str"); }
|
|
||||||
void foo(int a);
|
|
||||||
void User_inc_age(User* u, int n);
|
|
||||||
int get_int(string a);
|
|
||||||
bool get_bool();
|
|
||||||
int get_int2();
|
|
||||||
void myuser();
|
|
||||||
multi_return_int_string multi_return();
|
|
||||||
void variadic(varg_int a);
|
|
||||||
void ensure_cap(int required, int cap);
|
|
||||||
void println(string s);
|
|
||||||
void matches();
|
|
||||||
#define _const_path_sep 10
|
|
||||||
void end();
|
|
||||||
int function1();
|
|
||||||
void foo(int a);
|
|
||||||
void init_user();
|
|
||||||
User get_user();
|
|
||||||
void puts(string s);
|
|
||||||
void function2();
|
|
||||||
void init_array();
|
|
||||||
#define _const_localmod__pub_int_const 20
|
|
||||||
void localmod__pub_foo();
|
|
||||||
int localmod__get_int_10();
|
|
||||||
// variadic structs
|
|
||||||
struct varg_int {
|
|
||||||
int len;
|
|
||||||
int args[0];
|
|
||||||
};
|
|
||||||
|
|
||||||
// >> typeof() support for sum types
|
|
||||||
// << typeof() support for sum types
|
|
||||||
|
|
||||||
//
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
_vinit();
|
|
||||||
int a = 10;
|
|
||||||
a++;
|
|
||||||
int negative = -a;
|
|
||||||
2 < 3;
|
|
||||||
a == 1;
|
|
||||||
a++;
|
|
||||||
foo(3);
|
|
||||||
int ak = 10;
|
|
||||||
int mypi = _const_pi;
|
|
||||||
Color color = Color_red;
|
|
||||||
localmod__pub_foo();
|
|
||||||
int ten = localmod__get_int_10();
|
|
||||||
println(int_str(_const_localmod__pub_int_const));
|
|
||||||
int g = ((int)(3.0));
|
|
||||||
byte* bytes = ((byte*)(0));
|
|
||||||
User* user_ptr = (User*)memdup(&(User){ .age = 0,
|
|
||||||
.name = tos3(""),
|
|
||||||
}, sizeof(User));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void foo(int a) {
|
|
||||||
while (true) {
|
|
||||||
}
|
|
||||||
for (int i = 0;
|
|
||||||
i < 10; i++) {
|
|
||||||
}
|
|
||||||
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
|
|
||||||
1, 2, 3,
|
|
||||||
});
|
|
||||||
array_int nums2 = array_slice(nums, 0, 2);
|
|
||||||
array_int nums3 = array_slice(nums, 1, 2);
|
|
||||||
array_int nums4 = array_slice(nums, 1, nums.len);
|
|
||||||
int number = (*(int*)array_get(nums, 0));
|
|
||||||
array_set(&nums, 1, &(int[]) { 10 });
|
|
||||||
array_bool bools = new_array_from_c_array(2, 2, sizeof(bool), (bool[2]){
|
|
||||||
true, false,
|
|
||||||
});
|
|
||||||
array_User users = new_array_from_c_array(1, 1, sizeof(User), (User[1]){
|
|
||||||
(User){
|
|
||||||
.age = 0,
|
|
||||||
.name = tos3(""),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
bool b = (*(bool*)array_get(bools, 0));
|
|
||||||
array_string mystrings = new_array_from_c_array(2, 2, sizeof(string), (string[2]){
|
|
||||||
tos3("a"), tos3("b"),
|
|
||||||
});
|
|
||||||
string s = (*(string*)array_get(mystrings, 0));
|
|
||||||
int x = 0;
|
|
||||||
x = get_int2();
|
|
||||||
int n = get_int2();
|
|
||||||
bool q = true || false;
|
|
||||||
bool b2 = (*(bool*)array_get(bools, 0)) || true;
|
|
||||||
bool b3 = get_bool() || true;
|
|
||||||
int f = *(int*)array_first(nums);
|
|
||||||
array_int c = array_clone(&nums);
|
|
||||||
string d = tos3("d");
|
|
||||||
println(string_add(s, d));
|
|
||||||
}
|
|
||||||
|
|
||||||
void User_inc_age(User* u, int n) {
|
|
||||||
printf("%d", u->age);
|
|
||||||
u->age += n;
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_int(string a) {
|
|
||||||
return 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool get_bool() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_int2() {
|
|
||||||
string a = tos3("hello");
|
|
||||||
return get_int(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
void myuser() {
|
|
||||||
int x = 1;
|
|
||||||
int q = x | 0x1004;
|
|
||||||
User user = (User){
|
|
||||||
.age = 30,
|
|
||||||
.name = tos3(""),
|
|
||||||
};
|
|
||||||
int age = user.age + 1;
|
|
||||||
int boo = 2;
|
|
||||||
int boo2 = boo + 1;
|
|
||||||
bool b = age > 0;
|
|
||||||
bool b2 = user.age > 0;
|
|
||||||
User user2 = (User){
|
|
||||||
.age = 20,
|
|
||||||
.name = tos3(""),
|
|
||||||
};
|
|
||||||
user2.age = 20 + boo;
|
|
||||||
}
|
|
||||||
|
|
||||||
multi_return_int_string multi_return() {
|
|
||||||
return (multi_return_int_string){.arg0=4,.arg1=tos3("four")};
|
|
||||||
}
|
|
||||||
|
|
||||||
void variadic(varg_int a) {
|
|
||||||
int x = _const_path_sep;
|
|
||||||
int y = (true ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ensure_cap(int required, int cap) {
|
|
||||||
if (required < cap) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void println(string s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void matches() {
|
|
||||||
int a = 100;
|
|
||||||
if (a == 10) {
|
|
||||||
println(tos3("10"));
|
|
||||||
}
|
|
||||||
else if (a == 20) {
|
|
||||||
int k = a + 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
}
|
|
||||||
;
|
|
||||||
string x = (a == 10) ? tos3("ten") : (a == 30) ? tos3("thirty") : tos3("unknown");
|
|
||||||
int xx = (a == 10) ? 100 : (a == 30) ? 300 : 0;
|
|
||||||
println((a == 10) ? tos3("ten") : tos3("not ten"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void end() {
|
|
||||||
int i = 2;
|
|
||||||
int key = 10;
|
|
||||||
bool x = i != -1 && key == 10;
|
|
||||||
int e = 2 + 3 * 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
int function1() {
|
|
||||||
int a = 10 + 1;
|
|
||||||
int b = a + 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void foo(int a) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_user() {
|
|
||||||
User user = (User){
|
|
||||||
.name = tos3("Bob"),
|
|
||||||
.age = 0,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
User get_user() {
|
|
||||||
User user = (User){
|
|
||||||
.age = 0,
|
|
||||||
.name = tos3(""),
|
|
||||||
};
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
void puts(string s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void function2() {
|
|
||||||
int x = 0;
|
|
||||||
f64 f = 10.1;
|
|
||||||
string s = tos3("hi");
|
|
||||||
int m = 10;
|
|
||||||
x += 10;
|
|
||||||
x += 1;
|
|
||||||
m += 2;
|
|
||||||
function1();
|
|
||||||
if (true) {
|
|
||||||
foo(10);
|
|
||||||
x += 8;
|
|
||||||
}
|
|
||||||
if (false) {
|
|
||||||
foo(1);
|
|
||||||
} else {
|
|
||||||
puts(tos3("else"));
|
|
||||||
foo(100);
|
|
||||||
}
|
|
||||||
while (true) {
|
|
||||||
init_user();
|
|
||||||
}
|
|
||||||
bool e = 1 + 2 > 0;
|
|
||||||
bool e2 = 1 + 2 < 0;
|
|
||||||
int j = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_array() {
|
|
||||||
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
|
|
||||||
4, 2, 3,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void localmod__pub_foo() {
|
|
||||||
int a = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
int localmod__get_int_10() {
|
|
||||||
return 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void _vinit() {
|
|
||||||
_const_pi2 = _const_pi;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,274 +0,0 @@
|
||||||
//import moda
|
|
||||||
//import modb as mb
|
|
||||||
|
|
||||||
import localmod
|
|
||||||
|
|
||||||
const (
|
|
||||||
pi = 3
|
|
||||||
pi2 = pi
|
|
||||||
//s = 'hi'
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
age int
|
|
||||||
name string
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Color {
|
|
||||||
red green blue
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
a := 10
|
|
||||||
//bb := 2 + 'hi'
|
|
||||||
a++
|
|
||||||
negative := -a
|
|
||||||
2 < 3
|
|
||||||
a == 1
|
|
||||||
a++
|
|
||||||
foo(3)
|
|
||||||
ak := 10
|
|
||||||
mypi := pi
|
|
||||||
color := Color.red
|
|
||||||
localmod.pub_foo()
|
|
||||||
ten := localmod.get_int_10()
|
|
||||||
println(localmod.pub_int_const)
|
|
||||||
g := int(3.0)
|
|
||||||
bytes := &byte(0)
|
|
||||||
user_ptr := &User{}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
user := User{}
|
|
||||||
user.age = 10
|
|
||||||
mut x := if user.age == 10 { 20 } else { user.age * 2 }
|
|
||||||
for x > 3 {
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct One {
|
|
||||||
two Two
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Two {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo(a int) {
|
|
||||||
for true {
|
|
||||||
|
|
||||||
}
|
|
||||||
for i := 0; i < 10; i++ {
|
|
||||||
|
|
||||||
}
|
|
||||||
mut nums := [1,2,3]
|
|
||||||
nums2 := nums[..2]
|
|
||||||
nums3 := nums[1..2]
|
|
||||||
nums4 := nums[1..]
|
|
||||||
number := nums[0]
|
|
||||||
nums[1] = 10
|
|
||||||
bools := [true, false]
|
|
||||||
users := [User{}]
|
|
||||||
//ptr := &User{}
|
|
||||||
b := bools[0]
|
|
||||||
mystrings := ['a', 'b']
|
|
||||||
s := mystrings[0]
|
|
||||||
//////////
|
|
||||||
mut x := 0
|
|
||||||
x=get_int2()
|
|
||||||
n := get_int2()
|
|
||||||
q := true || false
|
|
||||||
b2 := bools[0] || true
|
|
||||||
b3 := get_bool() || true
|
|
||||||
f := nums.first()
|
|
||||||
c := nums.clone()
|
|
||||||
d := 'd'
|
|
||||||
println(s + d)
|
|
||||||
//cloned = nums.clone()
|
|
||||||
//cloned1 := cloned[0]
|
|
||||||
//println(cloned1 == 1)
|
|
||||||
/*
|
|
||||||
mut strings := ['hi', 'hello']
|
|
||||||
strings << 'a' + b
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn C.printf()
|
|
||||||
|
|
||||||
fn (u mut User) inc_age(n int) {
|
|
||||||
C.printf("%d", u.age)
|
|
||||||
u.age += n
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_int(a string) int {
|
|
||||||
return 10
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_bool() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_int2() int {
|
|
||||||
a := 'hello'
|
|
||||||
//return get_int('sdf')
|
|
||||||
return get_int(a)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn myuser() {
|
|
||||||
x := 1
|
|
||||||
q := x | 0x1004
|
|
||||||
user := User{age:30}
|
|
||||||
age := user.age + 1 // crash here
|
|
||||||
boo := 2
|
|
||||||
boo2 := boo+1
|
|
||||||
b := age > 0
|
|
||||||
b2 := user.age > 0
|
|
||||||
mut user2 := User{age:20}
|
|
||||||
user2.age = 20 + boo
|
|
||||||
}
|
|
||||||
|
|
||||||
fn multi_return() (int,string) {
|
|
||||||
return 4, 'four'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn variadic(a ...int) {
|
|
||||||
x := path_sep
|
|
||||||
y := if true { 1 } else { 0 } // TODO cgen
|
|
||||||
}
|
|
||||||
|
|
||||||
fn ensure_cap(required int, cap int) {
|
|
||||||
if required < cap {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn println(s string){}
|
|
||||||
|
|
||||||
fn matches() {
|
|
||||||
a := 100
|
|
||||||
match a {
|
|
||||||
10 {
|
|
||||||
println('10')
|
|
||||||
}
|
|
||||||
20 {
|
|
||||||
k := a + 1
|
|
||||||
}
|
|
||||||
else{}
|
|
||||||
}
|
|
||||||
x := match a {
|
|
||||||
10 { 'ten' }
|
|
||||||
30 { 'thirty' }
|
|
||||||
else { 'unknown' }
|
|
||||||
}
|
|
||||||
xx := match a {
|
|
||||||
10 { 100 }
|
|
||||||
30 { 300 }
|
|
||||||
else { 0 }
|
|
||||||
}
|
|
||||||
println(match a { 10 { 'ten' } else { 'not ten' } })
|
|
||||||
/*
|
|
||||||
n := match a {
|
|
||||||
1 { 10 }
|
|
||||||
2 { 20 }
|
|
||||||
else { 30 }
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
path_sep = 10
|
|
||||||
)
|
|
||||||
|
|
||||||
fn end() {
|
|
||||||
i := 2
|
|
||||||
key := 10
|
|
||||||
x := i != -1 && key == 10 // key == keys[i]
|
|
||||||
e := 2 + 3 * 4
|
|
||||||
//mut a := [1,2,3]
|
|
||||||
//(a << 4) + 2
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
fn function1() int {
|
|
||||||
a := 10 + 1
|
|
||||||
b := a + 1
|
|
||||||
//return a
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo(a int) {
|
|
||||||
//end()
|
|
||||||
}
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
name string
|
|
||||||
}
|
|
||||||
|
|
||||||
fn init_user() {
|
|
||||||
user := User{
|
|
||||||
name: 'Bob'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_user() User {
|
|
||||||
user := User{}
|
|
||||||
return user
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fn puts(s string) {}
|
|
||||||
|
|
||||||
// comment
|
|
||||||
fn function2() {
|
|
||||||
mut x := 0
|
|
||||||
//mut negative := -1
|
|
||||||
f := 10.1
|
|
||||||
s := 'hi'
|
|
||||||
mut m := 10
|
|
||||||
x += 10
|
|
||||||
x += 1
|
|
||||||
m += 2
|
|
||||||
function1()
|
|
||||||
// a += 1
|
|
||||||
// c := 0
|
|
||||||
if true {
|
|
||||||
foo(10)
|
|
||||||
x += 8
|
|
||||||
}
|
|
||||||
if false {
|
|
||||||
foo(1)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
puts('else')
|
|
||||||
foo(100)
|
|
||||||
}
|
|
||||||
for true {
|
|
||||||
init_user()
|
|
||||||
}
|
|
||||||
e := 1 + 2 > 0
|
|
||||||
e2 := 1 + 2 < 0
|
|
||||||
// x += 1
|
|
||||||
j := 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn init_array() {
|
|
||||||
nums := [4,2,3]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
fn bool_array() {
|
|
||||||
a := [true, false]
|
|
||||||
b := a[0]
|
|
||||||
if b {
|
|
||||||
println('ok')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
struct User {
|
|
||||||
string name;
|
|
||||||
};
|
|
||||||
|
|
||||||
// multi return structs
|
|
||||||
// end of definitions #endif
|
|
||||||
int function1();
|
|
||||||
void foo(int a);
|
|
||||||
void init_user();
|
|
||||||
User get_user();
|
|
||||||
void puts(string s);
|
|
||||||
void function2();
|
|
||||||
void init_array();
|
|
||||||
void end();
|
|
||||||
// >> typeof() support for sum types
|
|
||||||
// << typeof() support for sum types
|
|
||||||
|
|
||||||
int function1() {
|
|
||||||
int a = 10 + 1;
|
|
||||||
int b = a + 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void foo(int a) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_user() {
|
|
||||||
User user = (User){
|
|
||||||
.name = tos3("Bob"),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
User get_user() {
|
|
||||||
User user = (User){
|
|
||||||
.name = tos3(""),
|
|
||||||
};
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
void puts(string s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void function2() {
|
|
||||||
int x = 0;
|
|
||||||
f64 f = 10.1;
|
|
||||||
string s = tos3("hi");
|
|
||||||
int m = 10;
|
|
||||||
x += 10;
|
|
||||||
x += 1;
|
|
||||||
m += 2;
|
|
||||||
function1();
|
|
||||||
if (true) {
|
|
||||||
foo(10);
|
|
||||||
x += 8;
|
|
||||||
}
|
|
||||||
if (false) {
|
|
||||||
foo(1);
|
|
||||||
} else {
|
|
||||||
puts(tos3("else"));
|
|
||||||
foo(100);
|
|
||||||
}
|
|
||||||
while (true) {
|
|
||||||
init_user();
|
|
||||||
}
|
|
||||||
bool e = 1 + 2 > 0;
|
|
||||||
bool e2 = 1 + 2 < 0;
|
|
||||||
int j = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_array() {
|
|
||||||
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
|
|
||||||
4, 2, 3,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void end() {
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
_vinit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _vinit() {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,83 +0,0 @@
|
||||||
fn function1() int {
|
|
||||||
a := 10 + 1
|
|
||||||
b := a + 1
|
|
||||||
//return a
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo(a int) {
|
|
||||||
//end()
|
|
||||||
}
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
name string
|
|
||||||
}
|
|
||||||
|
|
||||||
fn init_user() {
|
|
||||||
user := User{
|
|
||||||
name: 'Bob'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_user() User {
|
|
||||||
user := User{}
|
|
||||||
return user
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fn puts(s string) {}
|
|
||||||
|
|
||||||
// comment
|
|
||||||
fn function2() {
|
|
||||||
mut x := 0
|
|
||||||
//mut negative := -1
|
|
||||||
f := 10.1
|
|
||||||
s := 'hi'
|
|
||||||
mut m := 10
|
|
||||||
x += 10
|
|
||||||
x += 1
|
|
||||||
m += 2
|
|
||||||
function1()
|
|
||||||
// a += 1
|
|
||||||
// c := 0
|
|
||||||
if true {
|
|
||||||
foo(10)
|
|
||||||
x += 8
|
|
||||||
}
|
|
||||||
if false {
|
|
||||||
foo(1)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
puts('else')
|
|
||||||
foo(100)
|
|
||||||
}
|
|
||||||
for true {
|
|
||||||
init_user()
|
|
||||||
}
|
|
||||||
e := 1 + 2 > 0
|
|
||||||
e2 := 1 + 2 < 0
|
|
||||||
// x += 1
|
|
||||||
j := 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn init_array() {
|
|
||||||
nums := [4,2,3]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn end() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
fn bool_array() {
|
|
||||||
a := [true, false]
|
|
||||||
b := a[0]
|
|
||||||
if b {
|
|
||||||
println('ok')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
struct IfExpr {
|
|
||||||
};
|
|
||||||
|
|
||||||
struct IntegerLiteral {
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sum type
|
|
||||||
typedef struct {
|
|
||||||
void* obj;
|
|
||||||
int typ;
|
|
||||||
} Expr;
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
int age;
|
|
||||||
string name;
|
|
||||||
};
|
|
||||||
|
|
||||||
// multi return structs
|
|
||||||
// end of definitions #endif
|
|
||||||
typedef Option Option_int;
|
|
||||||
Option_int get_opt();
|
|
||||||
void User_foo(User* u);
|
|
||||||
void println(string s);
|
|
||||||
void handle_expr(Expr e);
|
|
||||||
// >> typeof() support for sum types
|
|
||||||
char * v_typeof_sumtype_28(int sidx) { /* Expr */
|
|
||||||
switch(sidx) {
|
|
||||||
case 28: return "Expr";
|
|
||||||
case 26: return "IfExpr";
|
|
||||||
case 27: return "IntegerLiteral";
|
|
||||||
default: return "unknown Expr";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// << typeof() support for sum types
|
|
||||||
|
|
||||||
// TypeDecl
|
|
||||||
|
|
||||||
Option_int get_opt() {
|
|
||||||
return opt_ok(& (int []) { 0 }, sizeof(int));
|
|
||||||
}
|
|
||||||
|
|
||||||
void User_foo(User* u) {
|
|
||||||
int age = u->age;
|
|
||||||
array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(string), (string[1]){
|
|
||||||
tos3(""),
|
|
||||||
}), u->age);
|
|
||||||
int a = 10;
|
|
||||||
if ((a == 10 || a == 20 || a == 30)) {
|
|
||||||
int b = 10;
|
|
||||||
}
|
|
||||||
string name = tos3("Bob");
|
|
||||||
println(tos3("hello"));
|
|
||||||
println(_STR("Hello, %.*s", name.len, name.str));
|
|
||||||
println(_STR("age = %d", age));
|
|
||||||
println(_STR("name=%.*s age=%d", name.len, name.str, age));
|
|
||||||
}
|
|
||||||
|
|
||||||
void println(string s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void handle_expr(Expr e) {
|
|
||||||
if (e.typ == 26 /* IfExpr */) {
|
|
||||||
IfExpr* it = (IfExpr*)e.obj; // ST it
|
|
||||||
println(tos3("if"));
|
|
||||||
}
|
|
||||||
else if (e.typ == 27 /* IntegerLiteral */) {
|
|
||||||
IntegerLiteral* it = (IntegerLiteral*)e.obj; // ST it
|
|
||||||
println(tos3("integer"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
println(tos3("else"));
|
|
||||||
}
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
_vinit();
|
|
||||||
User user = (User){
|
|
||||||
.age = 0,
|
|
||||||
.name = tos3(""),
|
|
||||||
};
|
|
||||||
user.age = 10;
|
|
||||||
user.age++;
|
|
||||||
user.name = tos3("bob");
|
|
||||||
Option_int n = get_opt();
|
|
||||||
if (!n.ok) {
|
|
||||||
string err = n.v_error;
|
|
||||||
int errcode = n.ecode;
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
int a = /*opt*/(*(int*)n.data) + 3;
|
|
||||||
handle_expr(/* sum type cast */ (Expr) {.obj = memdup(&(IfExpr[]) {(IfExpr){
|
|
||||||
0}}, sizeof(IfExpr)), .typ = 26 /* IfExpr */});
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _vinit() {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
type Expr = IfExpr | IntegerLiteral
|
|
||||||
|
|
||||||
struct IfExpr{}
|
|
||||||
struct IntegerLiteral{}
|
|
||||||
|
|
||||||
struct User {
|
|
||||||
age int
|
|
||||||
name string
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_opt() ?int {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
fn new_user() User {
|
|
||||||
return User{}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_user_opt() ?User {
|
|
||||||
return new_user()
|
|
||||||
//return User{age:20, name:'Peter'}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
fn (u &User) foo() {
|
|
||||||
age := u.age
|
|
||||||
zzz := []string{len:(u.age)}
|
|
||||||
a := 10
|
|
||||||
if a in [10, 20, 30] {
|
|
||||||
b := 10
|
|
||||||
}
|
|
||||||
name := 'Bob'
|
|
||||||
println('hello')
|
|
||||||
println('Hello, $name')
|
|
||||||
println('age = $age')
|
|
||||||
println('name=$name age=$age')
|
|
||||||
}
|
|
||||||
|
|
||||||
fn println(s string) {}
|
|
||||||
|
|
||||||
fn handle_expr(e Expr) {
|
|
||||||
match e {
|
|
||||||
IfExpr {
|
|
||||||
println('if')
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
IntegerLiteral {
|
|
||||||
println('integer')
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
println('else')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
user := User{}
|
|
||||||
user.age = 10
|
|
||||||
user.age++
|
|
||||||
user.name = 'bob'
|
|
||||||
n := get_opt() or {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
a := n + 3
|
|
||||||
handle_expr(IfExpr{})
|
|
||||||
}
|
|
|
@ -1,136 +0,0 @@
|
||||||
struct Bar {
|
|
||||||
int a;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Foo {
|
|
||||||
string a;
|
|
||||||
Bar b;
|
|
||||||
};
|
|
||||||
|
|
||||||
// multi return structs
|
|
||||||
typedef struct {
|
|
||||||
int arg0;
|
|
||||||
string arg1;
|
|
||||||
} multi_return_int_string;
|
|
||||||
|
|
||||||
// end of definitions #endif
|
|
||||||
typedef Option Option_string;
|
|
||||||
typedef Option Option_multi_return_int_string;
|
|
||||||
multi_return_int_string mr_test();
|
|
||||||
int testa();
|
|
||||||
string testb(int a);
|
|
||||||
int testc(int a);
|
|
||||||
int Foo_testa(Foo* f);
|
|
||||||
int Foo_testb(Foo* f);
|
|
||||||
int Bar_testa(Bar* b);
|
|
||||||
Option_string optional_a();
|
|
||||||
Option_string optional_b();
|
|
||||||
Option_multi_return_int_string optional_mr();
|
|
||||||
// >> typeof() support for sum types
|
|
||||||
// << typeof() support for sum types
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
_vinit();
|
|
||||||
Bar b = (Bar){
|
|
||||||
.a = 122,
|
|
||||||
};
|
|
||||||
Foo a = (Foo){
|
|
||||||
.a = tos3("hello"),
|
|
||||||
.b = b,
|
|
||||||
};
|
|
||||||
a.a = tos3("da");
|
|
||||||
a.b.a = 111;
|
|
||||||
string a1 = a.a;
|
|
||||||
int a2 = Bar_testa(&b);
|
|
||||||
int c = testa();
|
|
||||||
c = 1;
|
|
||||||
string d = testb(1);
|
|
||||||
d = tos3("hello");
|
|
||||||
string e = tos3("hello");
|
|
||||||
e = testb(111);
|
|
||||||
e = tos3("world");
|
|
||||||
array_int f = new_array_from_c_array(4, 4, sizeof(int), (int[4]){
|
|
||||||
testa(), 2, 3, 4,
|
|
||||||
});
|
|
||||||
array_string g = new_array_from_c_array(2, 2, sizeof(string), (string[2]){
|
|
||||||
testb(1), tos3("hello"),
|
|
||||||
});
|
|
||||||
array_Foo arr_foo = new_array_from_c_array(1, 1, sizeof(Foo), (Foo[1]){
|
|
||||||
a,
|
|
||||||
});
|
|
||||||
Foo af_idx_el = (*(Foo*)array_get(arr_foo, 0));
|
|
||||||
string foo_a = af_idx_el.a;
|
|
||||||
map_string_string m1 = new_map(sizeof(string));
|
|
||||||
map_string_int m2 = new_map_init(2, sizeof(int), (string[2]){tos3("v"), tos3("lang"), }, (int[2]){1, 2, });
|
|
||||||
string ma1 = tos3("hello");
|
|
||||||
string ma2 = tos3("vlang");
|
|
||||||
multi_return_int_string mr_566 = mr_test();
|
|
||||||
int mr1 = mr_566.arg0;
|
|
||||||
string mr2 = mr_566.arg1;
|
|
||||||
string opt1 = tos3("opt1");
|
|
||||||
Option_string opt2 = optional_a();
|
|
||||||
if (!opt2.ok) {
|
|
||||||
string err = opt2.v_error;
|
|
||||||
int errcode = opt2.ecode;
|
|
||||||
};
|
|
||||||
string opt3 = tos3("opt3");
|
|
||||||
Option_string opt4 = optional_b();
|
|
||||||
if (!opt4.ok) {
|
|
||||||
string err = opt4.v_error;
|
|
||||||
int errcode = opt4.ecode;
|
|
||||||
};
|
|
||||||
Option_multi_return_int_string mr_669 = optional_mr();
|
|
||||||
if (!mr_669.ok) {
|
|
||||||
string err = mr_669.v_error;
|
|
||||||
int errcode = mr_669.ecode;
|
|
||||||
};
|
|
||||||
int opt_mr1 = (*(multi_return_int_string*)mr_669.data).arg0;
|
|
||||||
string opt_mr12 = (*(multi_return_int_string*)mr_669.data).arg1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
multi_return_int_string mr_test() {
|
|
||||||
return (multi_return_int_string){.arg0=1,.arg1=tos3("v")};
|
|
||||||
}
|
|
||||||
|
|
||||||
int testa() {
|
|
||||||
return testc(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
string testb(int a) {
|
|
||||||
return tos3("hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
int testc(int a) {
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Foo_testa(Foo* f) {
|
|
||||||
int a = Foo_testb(f);
|
|
||||||
a = 1;
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Foo_testb(Foo* f) {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Bar_testa(Bar* b) {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
Option_string optional_a() {
|
|
||||||
return opt_ok(& (string []) { tos3("111") }, sizeof(string));
|
|
||||||
}
|
|
||||||
|
|
||||||
Option_string optional_b() {
|
|
||||||
return opt_ok(& (string []) { tos3("222") }, sizeof(string));
|
|
||||||
}
|
|
||||||
|
|
||||||
Option_multi_return_int_string optional_mr() {
|
|
||||||
return opt_ok(& (multi_return_int_string []) { (multi_return_int_string){.arg0=1,.arg1=tos3("111")} }, sizeof(multi_return_int_string));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _vinit() {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,102 +0,0 @@
|
||||||
module main
|
|
||||||
|
|
||||||
// import moda
|
|
||||||
|
|
||||||
// import (
|
|
||||||
// modb
|
|
||||||
// modc
|
|
||||||
// )
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
b := Bar{a: 122}
|
|
||||||
mut a := Foo{
|
|
||||||
a: 'hello'
|
|
||||||
b: b
|
|
||||||
}
|
|
||||||
a.a = 'da'
|
|
||||||
a.b.a = 111
|
|
||||||
|
|
||||||
a1 := a.a
|
|
||||||
a2 := b.testa()
|
|
||||||
|
|
||||||
mut c := testa()
|
|
||||||
c = 1
|
|
||||||
mut d := testb(1)
|
|
||||||
d = 'hello'
|
|
||||||
|
|
||||||
mut e := 'hello'
|
|
||||||
e = testb(111)
|
|
||||||
e = 'world'
|
|
||||||
|
|
||||||
mut f := [testa(),2,3,4]
|
|
||||||
mut g := [testb(1),'hello']
|
|
||||||
|
|
||||||
//mut arr_foo := []Foo
|
|
||||||
arr_foo := [a]
|
|
||||||
//arr_foo << a // TODO
|
|
||||||
af_idx_el := arr_foo[0]
|
|
||||||
foo_a := af_idx_el.a
|
|
||||||
|
|
||||||
mut m1 := map[string]string
|
|
||||||
mut m2 := {'v': 1, 'lang': 2}
|
|
||||||
|
|
||||||
ma1, ma2 := 'hello', 'vlang'
|
|
||||||
mr1, mr2 := mr_test()
|
|
||||||
|
|
||||||
opt1, opt2, opt3, opt4 := 'opt1', optional_a(), 'opt3', optional_b()
|
|
||||||
opt_mr1, opt_mr12 := optional_mr() or {
|
|
||||||
// err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn mr_test() (int, string) {
|
|
||||||
return 1,'v'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn testa() int {
|
|
||||||
return testc(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn testb(a int) string {
|
|
||||||
return 'hello'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn testc(a int) int {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
|
|
||||||
fn (f &Foo) testa() int {
|
|
||||||
mut a := f.testb()
|
|
||||||
a = 1
|
|
||||||
return 4
|
|
||||||
}
|
|
||||||
|
|
||||||
fn (f &Foo) testb() int {
|
|
||||||
return 4
|
|
||||||
}
|
|
||||||
|
|
||||||
fn (b &Bar) testa() int {
|
|
||||||
return 4
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Bar {
|
|
||||||
a int
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Foo{
|
|
||||||
a string
|
|
||||||
b Bar
|
|
||||||
}
|
|
||||||
|
|
||||||
fn optional_a() ?string {
|
|
||||||
return '111'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn optional_b() ?string {
|
|
||||||
return '222'
|
|
||||||
}
|
|
||||||
|
|
||||||
fn optional_mr() ?(int, string) {
|
|
||||||
return 1, '111'
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
fn foo() {
|
|
||||||
a := if true { 1 } else { 2 }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
module localmod
|
|
||||||
|
|
||||||
pub const (
|
|
||||||
pub_int_const = 20
|
|
||||||
)
|
|
||||||
|
|
||||||
pub fn pub_foo() {
|
|
||||||
a := 10
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_int_10() int {
|
|
||||||
return 10
|
|
||||||
}
|
|
Loading…
Reference in New Issue