JS backend: minor refactoring in TranslationContext -- dropped extra constructors.

This commit is contained in:
Zalim Bashorov
2014-03-07 19:43:30 +04:00
parent cdf42ef797
commit d99e3294d8
@@ -52,13 +52,12 @@ public class TranslationContext {
@NotNull @NotNull
public static TranslationContext rootContext(@NotNull StaticContext staticContext, JsFunction rootFunction) { public static TranslationContext rootContext(@NotNull StaticContext staticContext, JsFunction rootFunction) {
DynamicContext rootDynamicContext = DynamicContext rootDynamicContext = DynamicContext.rootContext(rootFunction.getScope(), rootFunction.getBody());
DynamicContext.rootContext(rootFunction.getScope(), rootFunction.getBody());
AliasingContext rootAliasingContext = AliasingContext.getCleanContext(); AliasingContext rootAliasingContext = AliasingContext.getCleanContext();
return new TranslationContext(null, staticContext, rootDynamicContext, rootAliasingContext, null, null); return new TranslationContext(null, staticContext, rootDynamicContext, rootAliasingContext, null, null);
} }
private final HashMap<JsExpression, TemporaryConstVariable> expressionToTempConstVariableCache = new HashMap<JsExpression, TemporaryConstVariable>(); private final Map<JsExpression, TemporaryConstVariable> expressionToTempConstVariableCache = new HashMap<JsExpression, TemporaryConstVariable>();
private TranslationContext( private TranslationContext(
@Nullable TranslationContext parent, @Nullable TranslationContext parent,
@@ -76,23 +75,6 @@ public class TranslationContext {
this.definitionPlace = definitionPlace; this.definitionPlace = definitionPlace;
} }
private TranslationContext(
@NotNull TranslationContext parent,
@NotNull AliasingContext aliasingContext
) {
this(parent, parent.staticContext, parent.dynamicContext, aliasingContext, parent.usageTracker, null);
}
private TranslationContext(
@NotNull TranslationContext parent,
@NotNull JsFunction fun,
@NotNull AliasingContext aliasingContext,
@Nullable UsageTracker usageTracker
) {
this(parent, parent.staticContext, DynamicContext.newContext(fun.getScope(), fun.getBody()), aliasingContext,
usageTracker == null ? parent.usageTracker : usageTracker, null);
}
@Nullable @Nullable
public UsageTracker usageTracker() { public UsageTracker usageTracker() {
return usageTracker; return usageTracker;
@@ -104,12 +86,17 @@ public class TranslationContext {
@NotNull @NotNull
public TranslationContext contextWithScope(@NotNull JsFunction fun) { public TranslationContext contextWithScope(@NotNull JsFunction fun) {
return new TranslationContext(this, fun, aliasingContext, null); return this.newFunctionBody(fun, aliasingContext);
} }
@NotNull @NotNull
public TranslationContext newFunctionBody(@NotNull JsFunction fun, @Nullable AliasingContext aliasingContext) { public TranslationContext newFunctionBody(@NotNull JsFunction fun, @Nullable AliasingContext aliasingContext) {
return new TranslationContext(this, fun, aliasingContext == null ? this.aliasingContext.inner() : aliasingContext, null); DynamicContext dynamicContext = DynamicContext.newContext(fun.getScope(), fun.getBody());
if (aliasingContext == null) {
aliasingContext = this.aliasingContext.inner();
}
return new TranslationContext(this, this.staticContext, dynamicContext, aliasingContext, this.usageTracker, null);
} }
@NotNull @NotNull
@@ -130,19 +117,24 @@ public class TranslationContext {
return new TranslationContext(this, staticContext, dynamicContext, aliasingContext, usageTracker, place); return new TranslationContext(this, staticContext, dynamicContext, aliasingContext, usageTracker, place);
} }
@NotNull
private TranslationContext innerWithAliasingContext(AliasingContext aliasingContext) {
return new TranslationContext(this, this.staticContext, this.dynamicContext, aliasingContext, this.usageTracker, null);
}
@NotNull @NotNull
public TranslationContext innerContextWithAliased(@NotNull DeclarationDescriptor correspondingDescriptor, @NotNull JsNameRef alias) { public TranslationContext innerContextWithAliased(@NotNull DeclarationDescriptor correspondingDescriptor, @NotNull JsNameRef alias) {
return new TranslationContext(this, aliasingContext.inner(correspondingDescriptor, alias)); return this.innerWithAliasingContext(aliasingContext.inner(correspondingDescriptor, alias));
} }
@NotNull @NotNull
public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsExpression> aliases) { public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsExpression> aliases) {
return new TranslationContext(this, aliasingContext.withExpressionsAliased(aliases)); return this.innerWithAliasingContext(aliasingContext.withExpressionsAliased(aliases));
} }
@NotNull @NotNull
public TranslationContext innerContextWithDescriptorsAliased(@NotNull Map<DeclarationDescriptor, JsExpression> aliases) { public TranslationContext innerContextWithDescriptorsAliased(@NotNull Map<DeclarationDescriptor, JsExpression> aliases) {
return new TranslationContext(this, aliasingContext.withDescriptorsAliased(aliases)); return this.innerWithAliasingContext(aliasingContext.withDescriptorsAliased(aliases));
} }
@NotNull @NotNull