refactor directives in parseKeywords
diff --git a/parser.go b/parser.go
index 9fd5eef..f5afc30 100644
--- a/parser.go
+++ b/parser.go
@@ -279,43 +279,61 @@
}
}
+var directives = map[string]func(*parser, string){
+ "include ": includeDirective,
+ "-include ": sincludeDirective,
+ "sinclude": sincludeDirective,
+ "ifdef ": ifdefDirective,
+ "ifndef ": ifndefDirective,
+ "ifeq ": ifeqDirective,
+ "ifneq ": ifneqDirective,
+ "else": elseDirective,
+ "endif": endifDirective,
+}
+
func (p *parser) parseKeywords(line string) bool {
stripped := strings.TrimLeft(line, " \t")
- if strings.HasPrefix(stripped, "include ") {
- p.addStatement(p.parseInclude(stripped, len("include")))
- return true
- }
- if strings.HasPrefix(stripped, "-include ") {
- p.addStatement(p.parseInclude(stripped, len("-include")))
- return true
- }
- if strings.HasPrefix(stripped, "ifdef ") {
- p.parseIfdef(stripped, len("ifdef"))
- return true
- }
- if strings.HasPrefix(stripped, "ifndef ") {
- p.parseIfdef(stripped, len("ifndef"))
- return true
- }
- if strings.HasPrefix(stripped, "ifeq ") {
- p.parseIfeq(stripped, len("ifeq"))
- return true
- }
- if strings.HasPrefix(stripped, "ifneq ") {
- p.parseIfeq(stripped, len("ifneq"))
- return true
- }
- if strings.HasPrefix(stripped, "else") {
- p.parseElse(stripped)
- return true
- }
- if strings.HasPrefix(stripped, "endif") {
- p.parseEndif(stripped)
- return true
+ for prefix, f := range directives {
+ if strings.HasPrefix(stripped, prefix) {
+ f(p, stripped)
+ return true
+ }
}
return false
}
+func includeDirective(p *parser, line string) {
+ p.addStatement(p.parseInclude(line, len("include")))
+}
+
+func sincludeDirective(p *parser, line string) {
+ p.addStatement(p.parseInclude(line, len("-include")))
+}
+
+func ifdefDirective(p *parser, line string) {
+ p.parseIfdef(line, len("ifdef"))
+}
+
+func ifndefDirective(p *parser, line string) {
+ p.parseIfdef(line, len("ifndef"))
+}
+
+func ifeqDirective(p *parser, line string) {
+ p.parseIfeq(line, len("ifeq"))
+}
+
+func ifneqDirective(p *parser, line string) {
+ p.parseIfeq(line, len("ifneq"))
+}
+
+func elseDirective(p *parser, line string) {
+ p.parseElse(line)
+}
+
+func endifDirective(p *parser, line string) {
+ p.parseEndif(line)
+}
+
func (p *parser) parse() (mk Makefile, err error) {
defer func() {
if r := recover(); r != nil {