예제 #1
0
  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;
  }
예제 #2
0
  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;
  }