Lines Matching refs:r
84 func (rt *ruleTrie) add(name string, r *rule) {
85 glog.V(1).Infof("rule trie: add %q %v %s", name, r.outputPatterns[0], r)
87 glog.V(1).Infof("rule trie: add entry %q %v %s", name, r.outputPatterns[0], r)
89 rule: r,
99 c.add(name[1:], r)
151 func (db *depBuilder) canPickImplicitRule(r *rule, output string) bool {
152 outputPattern := r.outputPatterns[0]
156 for _, input := range r.inputs {
187 r, present := db.rules[output]
191 if len(r.cmds) > 0 {
192 return r, vars, true
209 if r != nil {
211 *ir = *r
233 return r, vars, r != nil
237 return r, vars, r != nil
248 if r != nil {
250 *sr = *r
252 sr.inputs = append([]string{replaceSuffix(output, irule.inputs[0])}, r.inputs...)
264 return r, vars, r != nil
390 func (db *depBuilder) populateSuffixRule(r *rule, output string) bool {
406 *sr = *r
413 func mergeRules(oldRule, r *rule, output string, isSuffixRule bool) (*rule, error) {
414 if oldRule.isDoubleColon != r.isDoubleColon {
415 return nil, r.errorf("*** target file %q has both : and :: entries.", output)
417 if len(oldRule.cmds) > 0 && len(r.cmds) > 0 && !isSuffixRule && !r.isDoubleColon {
418 warn(r.cmdpos(), "overriding commands for target %q", output)
423 *mr = *r
424 if r.isDoubleColon {
426 } else if len(oldRule.cmds) > 0 && len(r.cmds) == 0 {
432 if len(r.cmds) > 0 {
445 func expandPattern(r *rule) []*rule {
446 if len(r.outputs) == 0 {
447 return []*rule{r}
449 if len(r.outputPatterns) != 1 {
450 return []*rule{r}
453 pat := r.outputPatterns[0]
454 for _, output := range r.outputs {
456 *nr = *r
460 for _, input := range r.inputs {
465 glog.V(1).Infof("expand static pattern: outputs=%q inputs=%q -> %q", r.outputs, r.inputs, rules)
469 func (db *depBuilder) populateExplicitRule(r *rule) error {
471 if len(r.outputs) == 0 {
474 for _, output := range r.outputs {
477 isSuffixRule := db.populateSuffixRule(r, output)
480 mr, err := mergeRules(oldRule, r, output, isSuffixRule)
486 db.rules[output] = r
488 db.firstRule = r
495 func (db *depBuilder) populateImplicitRule(r *rule) {
496 for _, outputPattern := range r.outputPatterns {
498 *ir = *r
505 for _, r := range er.rules {
506 for i, input := range r.inputs {
507 r.inputs[i] = trimLeadingCurdir(input)
509 for i, orderOnlyInput := range r.orderOnlyInputs {
510 r.orderOnlyInputs[i] = trimLeadingCurdir(orderOnlyInput)
512 for _, r := range expandPattern(r) {
513 err := db.populateExplicitRule(r)
517 if len(r.outputs) == 0 {
518 db.populateImplicitRule(r)