public IScope joinIfIndependent(IScope callerScope, IScope bodyScope) { // locally defined mixin does not require any other action boolean isLocallyDefined = bodyScope.seesLocalDataOf(callerScope); if (isLocallyDefined) { return bodyScope; } // join scopes IScope result = ScopeFactory.createJoinedScopesView(callerScope, bodyScope); return result; }
public ScopeView joinIfIndependentAndPreserveContent(IScope callerScope, IScope bodyScope) { // locally defined mixin does not require any other action boolean isLocalImport = bodyScope.seesLocalDataOf(callerScope); ScopeView result = null; if (isLocalImport) { // we need to copy the whole tree, because this runs inside referenced mixin scope // snapshot and imported mixin needs to remember the scope as it is now result = ScopeFactory.createJoinedScopesView(null, bodyScope); } else { // since this is non-local import, we need to join reference scope and imported mixins scope // imported mixin needs to have access to variables defined in caller result = ScopeFactory.createJoinedScopesView(callerScope, bodyScope); } result.saveLocalDataForTheWholeWayUp(); return result; }