This repository has been archived by the owner on Mar 28, 2022. It is now read-only.
/
statements.go
86 lines (60 loc) · 1.58 KB
/
statements.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package membuild
import (
"fmt"
"reflect"
"github.com/Nv7-Github/Bpp/parser"
)
// BuildStmt compiles a statement
func BuildStmt(p *Program, stmt parser.Statement, instructionum ...int) (Instruction, error) {
switch s := stmt.(type) {
case *parser.Data:
d := ParserDataToData(s)
return func(p *Program) (Data, error) { return d, nil }, nil
case *parser.DefineStmt:
return DefineStmt(p, s)
case *parser.VarStmt:
return VarStmt(p, s)
case *parser.IfStmt:
return IfStmt(p, s)
case *parser.ComparisonStmt:
return CompareStmt(p, s)
case *parser.MathStmt:
return MathStmt(p, s)
case *parser.ConcatStmt:
return ConcatStmt(p, s)
case *parser.IndexStmt:
return IndexStmt(p, s)
case *parser.ArgsStmt:
return ArgsStmt(p, s)
case *parser.RandintStmt:
return RandintStmt(p, s)
case *parser.ArrayStmt:
return ArrayStmt(p, s)
case *parser.ChooseStmt:
return ChooseStmt(p, s)
case *parser.RepeatStmt:
return RepeatStmt(p, s)
case *parser.RandomStmt:
return RandomStmt(p, s)
case *parser.FloorStmt:
return FloorStmt(p, s)
case *parser.CeilStmt:
return CeilStmt(p, s)
case *parser.RoundStmt:
return RoundStmt(p, s)
case *parser.IfBlock:
return IfBlock(p, s)
case *parser.TypeCastStmt:
return TypeCastStmt(p, s)
case *parser.WhileBlock:
return WhileBlock(p, s)
case *parser.FunctionBlock:
return FunctionBlock(p, s)
case *parser.FunctionCallStmt:
return FunctionCallStmt(p, s)
case *parser.ImportStmt:
return ImportStmt(p, s)
default:
return nil, fmt.Errorf("%v: unknown type %s", stmt.Pos(), reflect.TypeOf(stmt).String())
}
}