aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-07-15 15:57:19 +0900
committerFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-07-15 16:11:33 +0900
commitf5b916dd7e2f3cf7a7721d079df4f6a665fe0daa (patch)
tree03b4c8824ed134033b377011bfad4136e59d2504
parent09fcd523c517f4ee4330f004e52ac3e894b86433 (diff)
downloadkati-f5b916dd7e2f3cf7a7721d079df4f6a665fe0daa.tar.gz
[go] fix override_export.mk
separete override_export.mk and create err_export_override.mk and err_override_export.mk
-rw-r--r--ast.go5
-rw-r--r--eval.go16
-rw-r--r--parser.go7
-rw-r--r--testcase/err_export_override.mk5
-rw-r--r--testcase/err_override_export.mk5
-rw-r--r--testcase/override_export.mk23
6 files changed, 39 insertions, 22 deletions
diff --git a/ast.go b/ast.go
index d09bb0e..2b43176 100644
--- a/ast.go
+++ b/ast.go
@@ -150,8 +150,9 @@ func (ast *ifAST) show() {
type exportAST struct {
srcpos
- expr []byte
- export bool
+ expr []byte
+ hasEqual bool
+ export bool
}
func (ast *exportAST) eval(ev *Evaluator) error {
diff --git a/eval.go b/eval.go
index c79fd8b..6f1717f 100644
--- a/eval.go
+++ b/eval.go
@@ -304,6 +304,14 @@ func (ev *Evaluator) evalMaybeRule(ast *maybeRuleAST) error {
r := &rule{srcpos: ast.srcpos}
assign, err := r.parse(line, ast.assign, rhs)
if err != nil {
+ ws := newWordScanner(line)
+ if ws.Scan() {
+ if string(ws.Bytes()) == "override" {
+ // not fatal error?
+ fmt.Printf("%s: invalid %q directive\n", ast.srcpos, "override")
+ return nil
+ }
+ }
return ast.error(err)
}
abuf.release()
@@ -562,8 +570,12 @@ func (ev *Evaluator) evalExport(ast *exportAST) error {
if err != nil {
return ast.errorf("%v\n expr:%s", err, v)
}
- for _, n := range splitSpacesBytes(buf.Bytes()) {
- ev.exports[string(n)] = ast.export
+ if ast.hasEqual {
+ ev.exports[string(trimSpaceBytes(buf.Bytes()))] = ast.export
+ } else {
+ for _, n := range splitSpacesBytes(buf.Bytes()) {
+ ev.exports[string(n)] = ast.export
+ }
}
return nil
}
diff --git a/parser.go b/parser.go
index 84f633a..059688f 100644
--- a/parser.go
+++ b/parser.go
@@ -564,6 +564,7 @@ func overrideDirective(p *parser, data []byte) {
line = append(line, []byte("override ")...)
line = append(line, data...)
p.handleRuleOrAssign(line)
+ // TODO(ukai): evaluate now to detect invalid "override" directive here?
}
func handleExport(p *parser, data []byte, export bool) (hasEqual bool) {
@@ -576,10 +577,10 @@ func handleExport(p *parser, data []byte, export bool) (hasEqual bool) {
}
data = data[:i]
}
-
east := &exportAST{
- expr: data,
- export: export,
+ expr: data,
+ hasEqual: hasEqual,
+ export: export,
}
east.srcpos = p.srcpos()
glog.V(1).Infof("export %v", east)
diff --git a/testcase/err_export_override.mk b/testcase/err_export_override.mk
new file mode 100644
index 0000000..54de5b9
--- /dev/null
+++ b/testcase/err_export_override.mk
@@ -0,0 +1,5 @@
+# TODO(c): Fix - "override export define A" is invalid "override" directive.
+
+export override define A
+PASS_A
+endef
diff --git a/testcase/err_override_export.mk b/testcase/err_override_export.mk
new file mode 100644
index 0000000..d34a06f
--- /dev/null
+++ b/testcase/err_override_export.mk
@@ -0,0 +1,5 @@
+# TODO(c): Fix - "override export define A" is invalid "override" directive.
+
+override export define A
+PASS_A
+endef
diff --git a/testcase/override_export.mk b/testcase/override_export.mk
index 7dac4e5..322d9f5 100644
--- a/testcase/override_export.mk
+++ b/testcase/override_export.mk
@@ -1,21 +1,14 @@
-# TODO: Fix - "override export define C" is invalid "override" directive.
+# TODO(c): it overrides "export A" and exports(?) "override B"
-override export A:=PASS_A
-export override B:=PASS_B
-override export define C
-PASS_C
-endef
-override export define D
-PASS_D
-endef
+override export A:=override_A
+export override B:=export_B
-A:=FAIL_A
-B:=FAIL_B
-C:=FAIL_C
-D:=FAIL_D
+A:=make_A
+B:=make_B
test:
echo $$A
echo $$B
- echo $$C
- echo $$D
+ echo $(export A)
+ echo $(override B)
+ env | grep 'override B'