diff options
author | Fumitoshi Ukai <fumitoshi.ukai@gmail.com> | 2015-07-15 15:57:19 +0900 |
---|---|---|
committer | Fumitoshi Ukai <fumitoshi.ukai@gmail.com> | 2015-07-15 16:11:33 +0900 |
commit | f5b916dd7e2f3cf7a7721d079df4f6a665fe0daa (patch) | |
tree | 03b4c8824ed134033b377011bfad4136e59d2504 | |
parent | 09fcd523c517f4ee4330f004e52ac3e894b86433 (diff) | |
download | kati-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.go | 5 | ||||
-rw-r--r-- | eval.go | 16 | ||||
-rw-r--r-- | parser.go | 7 | ||||
-rw-r--r-- | testcase/err_export_override.mk | 5 | ||||
-rw-r--r-- | testcase/err_override_export.mk | 5 | ||||
-rw-r--r-- | testcase/override_export.mk | 23 |
6 files changed, 39 insertions, 22 deletions
@@ -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 { @@ -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 } @@ -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' |