v2 / vlib / v / tests / options / option_case_test.v
52 lines · 44 sloc · 915 bytes · 35bbb546a2e82fd51a0a5c4a549ee66b2764637f
Raw
1module main
2
3type SecondTokenizerValue = []rune | Keyword
4
5enum AdvancedTokenType {
6 identifier
7 keyword
8 newline
9}
10
11struct SecondTokenizerToken {
12 type AdvancedTokenType
13 value ?SecondTokenizerValue
14}
15
16enum Keyword {
17 module
18 import
19}
20
21fn test_main() {
22 mut tokens := []SecondTokenizerToken{}
23 tokens << SecondTokenizerToken{
24 type: AdvancedTokenType.keyword
25 value: Keyword.module
26 }
27 build_ast(tokens) or { assert err.msg() == 'Handling module' }
28}
29
30struct RootAST {
31mut:
32 module []rune
33}
34
35fn build_ast(tokens []SecondTokenizerToken) !RootAST {
36 for _ in 0 .. 1 {
37 token := tokens[0]
38 match true {
39 false {
40 return error('Expected `module` keyword at the start of the file, but got `${token.type}`')
41 }
42 token.type == .keyword && token.value == ?SecondTokenizerValue(Keyword.module) {
43 return error('Handling module')
44 }
45 else {
46 continue
47 }
48 }
49 }
50
51 return error('Not implemented')
52}
53