Loading mk2rbc/mk2rbc.go +22 −6 Original line number Diff line number Diff line Loading @@ -254,19 +254,19 @@ func (gctx *generationContext) emitPreamble() { gctx.writef("load(%q, %q)", baseUri, baseName) // Emit exactly one load statement for each URI. loadedSubConfigs := make(map[string]string) for _, sc := range gctx.starScript.inherited { uri := sc.path for _, mi := range gctx.starScript.inherited { uri := mi.path if m, ok := loadedSubConfigs[uri]; ok { // No need to emit load statement, but fix module name. sc.moduleLocalName = m mi.moduleLocalName = m continue } if sc.optional { if mi.optional || mi.missing { uri += "|init" } gctx.newLine() gctx.writef("load(%q, %s = \"init\")", uri, sc.entryName()) loadedSubConfigs[uri] = sc.moduleLocalName gctx.writef("load(%q, %s = \"init\")", uri, mi.entryName()) loadedSubConfigs[uri] = mi.moduleLocalName } gctx.write("\n") } Loading Loading @@ -298,6 +298,20 @@ func (gctx *generationContext) emitConversionError(el ErrorLocation, message str gctx.writef(`rblf.mk2rbc_error("%s", %q)`, el, message) } func (gctx *generationContext) emitLoadCheck(im inheritedModule) { if !im.needsLoadCheck() { return } gctx.newLine() gctx.writef("if not %s:", im.entryName()) gctx.indentLevel++ gctx.newLine() gctx.write(`rblf.mkerror("`, gctx.starScript.mkFile, `", "Cannot find %s" % (`) im.pathExpr().emit(gctx) gctx.write("))") gctx.indentLevel-- } type knownVariable struct { name string class varClass Loading Loading @@ -751,11 +765,13 @@ func (ctx *parseContext) newDependentModule(path string, optional bool) *moduleI moduleLocalName += fmt.Sprintf("%d", n) } ctx.moduleNameCount[moduleName] = n + 1 _, err := fs.Stat(ctx.script.sourceFS, path) mi := &moduleInfo{ path: modulePath, originalPath: path, moduleLocalName: moduleLocalName, optional: optional, missing: err != nil, } ctx.dependentModules[modulePath] = mi ctx.script.inherited = append(ctx.script.inherited, mi) Loading mk2rbc/mk2rbc_test.go +6 −2 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ $(call inherit-product, part.mk) ifdef PRODUCT_NAME $(call inherit-product, part1.mk) else # Comment $(call inherit-product, $(LOCAL_PATH)/part1.mk) $(call inherit-product, $(LOCAL_PATH)/part.mk) endif `, expected: `load("//build/make/core:product_config.rbc", "rblf") Loading @@ -132,10 +132,12 @@ def init(g, handle): cfg = rblf.cfg(handle) rblf.inherit(handle, "part", _part_init) if g.get("PRODUCT_NAME") != None: if not _part1_init: rblf.mkerror("product.mk", "Cannot find %s" % (":part1.star")) rblf.inherit(handle, "part1", _part1_init) else: # Comment rblf.inherit(handle, "part1", _part1_init) rblf.inherit(handle, "part", _part_init) `, }, { Loading Loading @@ -173,6 +175,8 @@ def init(g, handle): cfg = rblf.cfg(handle) _part_init(g, handle) if g.get("PRODUCT_NAME") != None: if not _part1_init: rblf.mkerror("product.mk", "Cannot find %s" % (":part1.star")) _part1_init(g, handle) else: if _part1_init != None: Loading mk2rbc/node.go +22 −18 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ type moduleInfo struct { originalPath string // Makefile file path moduleLocalName string optional bool missing bool // a module may not exist if a module that depends on it is loaded dynamically } func (im moduleInfo) entryName() string { Loading @@ -57,7 +58,8 @@ type inheritedModule interface { name() string entryName() string emitSelect(gctx *generationContext) shouldExist() bool pathExpr() starlarkExpr needsLoadCheck() bool } type inheritedStaticModule struct { Loading @@ -72,8 +74,12 @@ func (im inheritedStaticModule) name() string { func (im inheritedStaticModule) emitSelect(_ *generationContext) { } func (im inheritedStaticModule) shouldExist() bool { return im.loadAlways func (im inheritedStaticModule) pathExpr() starlarkExpr { return &stringLiteralExpr{im.path} } func (im inheritedStaticModule) needsLoadCheck() bool { return im.missing } type inheritedDynamicModule struct { Loading Loading @@ -105,20 +111,14 @@ func (i inheritedDynamicModule) emitSelect(gctx *generationContext) { gctx.write(")") gctx.newLine() gctx.writef("(%s, %s) = _entry if _entry else (None, None)", i.name(), i.entryName()) if i.loadAlways { gctx.newLine() gctx.writef("if not %s:", i.entryName()) gctx.indentLevel++ gctx.newLine() gctx.write(`rblf.mkerror("`, gctx.starScript.mkFile, `", "Cannot find %s" % (`) i.path.emit(gctx) gctx.write("))") gctx.indentLevel-- } func (i inheritedDynamicModule) pathExpr() starlarkExpr { return &i.path } func (i inheritedDynamicModule) shouldExist() bool { return i.loadAlways func (i inheritedDynamicModule) needsLoadCheck() bool { return true } type inheritNode struct { Loading @@ -128,20 +128,22 @@ type inheritNode struct { func (inn *inheritNode) emit(gctx *generationContext) { // Unconditional case: // maybe check that loaded // rblf.inherit(handle, <module>, module_init) // Conditional case: // if <module>_init != None: // same as above inn.module.emitSelect(gctx) name := inn.module.name() entry := inn.module.entryName() gctx.newLine() if inn.loadAlways { gctx.emitLoadCheck(inn.module) gctx.newLine() gctx.writef("%s(handle, %s, %s)", cfnInherit, name, entry) return } gctx.newLine() gctx.writef("if %s:", entry) gctx.indentLevel++ gctx.newLine() Loading @@ -157,12 +159,14 @@ type includeNode struct { func (inn *includeNode) emit(gctx *generationContext) { inn.module.emitSelect(gctx) entry := inn.module.entryName() gctx.newLine() if inn.loadAlways { gctx.emitLoadCheck(inn.module) gctx.newLine() gctx.writef("%s(g, handle)", entry) return } gctx.newLine() gctx.writef("if %s != None:", entry) gctx.indentLevel++ gctx.newLine() Loading Loading
mk2rbc/mk2rbc.go +22 −6 Original line number Diff line number Diff line Loading @@ -254,19 +254,19 @@ func (gctx *generationContext) emitPreamble() { gctx.writef("load(%q, %q)", baseUri, baseName) // Emit exactly one load statement for each URI. loadedSubConfigs := make(map[string]string) for _, sc := range gctx.starScript.inherited { uri := sc.path for _, mi := range gctx.starScript.inherited { uri := mi.path if m, ok := loadedSubConfigs[uri]; ok { // No need to emit load statement, but fix module name. sc.moduleLocalName = m mi.moduleLocalName = m continue } if sc.optional { if mi.optional || mi.missing { uri += "|init" } gctx.newLine() gctx.writef("load(%q, %s = \"init\")", uri, sc.entryName()) loadedSubConfigs[uri] = sc.moduleLocalName gctx.writef("load(%q, %s = \"init\")", uri, mi.entryName()) loadedSubConfigs[uri] = mi.moduleLocalName } gctx.write("\n") } Loading Loading @@ -298,6 +298,20 @@ func (gctx *generationContext) emitConversionError(el ErrorLocation, message str gctx.writef(`rblf.mk2rbc_error("%s", %q)`, el, message) } func (gctx *generationContext) emitLoadCheck(im inheritedModule) { if !im.needsLoadCheck() { return } gctx.newLine() gctx.writef("if not %s:", im.entryName()) gctx.indentLevel++ gctx.newLine() gctx.write(`rblf.mkerror("`, gctx.starScript.mkFile, `", "Cannot find %s" % (`) im.pathExpr().emit(gctx) gctx.write("))") gctx.indentLevel-- } type knownVariable struct { name string class varClass Loading Loading @@ -751,11 +765,13 @@ func (ctx *parseContext) newDependentModule(path string, optional bool) *moduleI moduleLocalName += fmt.Sprintf("%d", n) } ctx.moduleNameCount[moduleName] = n + 1 _, err := fs.Stat(ctx.script.sourceFS, path) mi := &moduleInfo{ path: modulePath, originalPath: path, moduleLocalName: moduleLocalName, optional: optional, missing: err != nil, } ctx.dependentModules[modulePath] = mi ctx.script.inherited = append(ctx.script.inherited, mi) Loading
mk2rbc/mk2rbc_test.go +6 −2 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ $(call inherit-product, part.mk) ifdef PRODUCT_NAME $(call inherit-product, part1.mk) else # Comment $(call inherit-product, $(LOCAL_PATH)/part1.mk) $(call inherit-product, $(LOCAL_PATH)/part.mk) endif `, expected: `load("//build/make/core:product_config.rbc", "rblf") Loading @@ -132,10 +132,12 @@ def init(g, handle): cfg = rblf.cfg(handle) rblf.inherit(handle, "part", _part_init) if g.get("PRODUCT_NAME") != None: if not _part1_init: rblf.mkerror("product.mk", "Cannot find %s" % (":part1.star")) rblf.inherit(handle, "part1", _part1_init) else: # Comment rblf.inherit(handle, "part1", _part1_init) rblf.inherit(handle, "part", _part_init) `, }, { Loading Loading @@ -173,6 +175,8 @@ def init(g, handle): cfg = rblf.cfg(handle) _part_init(g, handle) if g.get("PRODUCT_NAME") != None: if not _part1_init: rblf.mkerror("product.mk", "Cannot find %s" % (":part1.star")) _part1_init(g, handle) else: if _part1_init != None: Loading
mk2rbc/node.go +22 −18 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ type moduleInfo struct { originalPath string // Makefile file path moduleLocalName string optional bool missing bool // a module may not exist if a module that depends on it is loaded dynamically } func (im moduleInfo) entryName() string { Loading @@ -57,7 +58,8 @@ type inheritedModule interface { name() string entryName() string emitSelect(gctx *generationContext) shouldExist() bool pathExpr() starlarkExpr needsLoadCheck() bool } type inheritedStaticModule struct { Loading @@ -72,8 +74,12 @@ func (im inheritedStaticModule) name() string { func (im inheritedStaticModule) emitSelect(_ *generationContext) { } func (im inheritedStaticModule) shouldExist() bool { return im.loadAlways func (im inheritedStaticModule) pathExpr() starlarkExpr { return &stringLiteralExpr{im.path} } func (im inheritedStaticModule) needsLoadCheck() bool { return im.missing } type inheritedDynamicModule struct { Loading Loading @@ -105,20 +111,14 @@ func (i inheritedDynamicModule) emitSelect(gctx *generationContext) { gctx.write(")") gctx.newLine() gctx.writef("(%s, %s) = _entry if _entry else (None, None)", i.name(), i.entryName()) if i.loadAlways { gctx.newLine() gctx.writef("if not %s:", i.entryName()) gctx.indentLevel++ gctx.newLine() gctx.write(`rblf.mkerror("`, gctx.starScript.mkFile, `", "Cannot find %s" % (`) i.path.emit(gctx) gctx.write("))") gctx.indentLevel-- } func (i inheritedDynamicModule) pathExpr() starlarkExpr { return &i.path } func (i inheritedDynamicModule) shouldExist() bool { return i.loadAlways func (i inheritedDynamicModule) needsLoadCheck() bool { return true } type inheritNode struct { Loading @@ -128,20 +128,22 @@ type inheritNode struct { func (inn *inheritNode) emit(gctx *generationContext) { // Unconditional case: // maybe check that loaded // rblf.inherit(handle, <module>, module_init) // Conditional case: // if <module>_init != None: // same as above inn.module.emitSelect(gctx) name := inn.module.name() entry := inn.module.entryName() gctx.newLine() if inn.loadAlways { gctx.emitLoadCheck(inn.module) gctx.newLine() gctx.writef("%s(handle, %s, %s)", cfnInherit, name, entry) return } gctx.newLine() gctx.writef("if %s:", entry) gctx.indentLevel++ gctx.newLine() Loading @@ -157,12 +159,14 @@ type includeNode struct { func (inn *includeNode) emit(gctx *generationContext) { inn.module.emitSelect(gctx) entry := inn.module.entryName() gctx.newLine() if inn.loadAlways { gctx.emitLoadCheck(inn.module) gctx.newLine() gctx.writef("%s(g, handle)", entry) return } gctx.newLine() gctx.writef("if %s != None:", entry) gctx.indentLevel++ gctx.newLine() Loading