132 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			V
		
	
	
// usage test: v ast path_to_v/cmd/tools/vast/test/demo.v
 | 
						|
// will generate demo.json
 | 
						|
 | 
						|
// comment for module
 | 
						|
module main
 | 
						|
 | 
						|
// import module
 | 
						|
import os
 | 
						|
import math
 | 
						|
import time { Time, now }
 | 
						|
 | 
						|
// const decl
 | 
						|
const (
 | 
						|
	a = 1
 | 
						|
	b = 3
 | 
						|
	c = 'c'
 | 
						|
)
 | 
						|
 | 
						|
// struct decl
 | 
						|
struct Point {
 | 
						|
	x int
 | 
						|
mut:
 | 
						|
	y int
 | 
						|
pub:
 | 
						|
	z int
 | 
						|
pub mut:
 | 
						|
	name string
 | 
						|
}
 | 
						|
 | 
						|
// method of Point
 | 
						|
pub fn (p Point) get_x() int {
 | 
						|
	return p.x
 | 
						|
}
 | 
						|
 | 
						|
// embed struct
 | 
						|
struct MyPoint {
 | 
						|
	Point
 | 
						|
	title string
 | 
						|
}
 | 
						|
 | 
						|
// enum type
 | 
						|
enum Color {
 | 
						|
	red
 | 
						|
	green
 | 
						|
	blue
 | 
						|
}
 | 
						|
 | 
						|
// type alias
 | 
						|
type Myint = int
 | 
						|
 | 
						|
// sum type
 | 
						|
type MySumType = bool | int | string
 | 
						|
 | 
						|
// function type
 | 
						|
type Myfn = fn (int) int
 | 
						|
 | 
						|
// interface type
 | 
						|
interface Myinterfacer {
 | 
						|
	add(int, int) int
 | 
						|
	sub(int, int) int
 | 
						|
}
 | 
						|
 | 
						|
// main funciton
 | 
						|
fn main() {
 | 
						|
	add(1, 3)
 | 
						|
	println(add(1, 2))
 | 
						|
	println('ok') // comment println
 | 
						|
	arr := [1, 3, 5, 7]
 | 
						|
	for a in arr {
 | 
						|
		println(a)
 | 
						|
		add(1, 3)
 | 
						|
	}
 | 
						|
	color := Color.red
 | 
						|
	println(color)
 | 
						|
	println(os.args)
 | 
						|
	m := math.max(1, 3)
 | 
						|
	println(m)
 | 
						|
	println(now())
 | 
						|
	t := Time{}
 | 
						|
	println(t)
 | 
						|
	p := Point{
 | 
						|
		x: 1
 | 
						|
		y: 2
 | 
						|
		z: 3
 | 
						|
	}
 | 
						|
	println(p)
 | 
						|
	my_point := MyPoint{
 | 
						|
		// x: 1
 | 
						|
		// y: 3
 | 
						|
		// z: 5
 | 
						|
	}
 | 
						|
	println(my_point.get_x())
 | 
						|
}
 | 
						|
 | 
						|
// normal function
 | 
						|
fn add(x int, y int) int {
 | 
						|
	return x + y
 | 
						|
}
 | 
						|
 | 
						|
// function with defer stmt
 | 
						|
fn defer_fn() {
 | 
						|
	mut x := 1
 | 
						|
	println('start fn')
 | 
						|
	defer {
 | 
						|
		println('in defer block')
 | 
						|
		println(x)
 | 
						|
	}
 | 
						|
	println('end fn')
 | 
						|
}
 | 
						|
 | 
						|
// generic function
 | 
						|
fn g_fn<T>(p T) T {
 | 
						|
	return p
 | 
						|
}
 | 
						|
 | 
						|
// generic struct
 | 
						|
struct GenericStruct<T> {
 | 
						|
	point Point
 | 
						|
mut:
 | 
						|
	model T
 | 
						|
}
 | 
						|
 | 
						|
// generic interface
 | 
						|
interface Gettable<T> {
 | 
						|
	get() T
 | 
						|
}
 | 
						|
 | 
						|
// generic sumtype
 | 
						|
struct None {}
 | 
						|
 | 
						|
type MyOption<T> = Error | None | T
 |