mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Produce less names in top level scope in dev server mode in order to improve debugging performance in Chrome
This commit is contained in:
parent
48227b24a0
commit
1dd379551c
|
@ -292,7 +292,7 @@ public class ClassGenerator implements Generator, Injector, DependencyPlugin {
|
||||||
|
|
||||||
private void initClass(SourceWriter writer, MemberReader member) throws IOException {
|
private void initClass(SourceWriter writer, MemberReader member) throws IOException {
|
||||||
if (member.hasModifier(ElementModifier.STATIC)) {
|
if (member.hasModifier(ElementModifier.STATIC)) {
|
||||||
writer.append(writer.getNaming().getNameForClassInit(member.getOwnerName())).append("();").softNewLine();
|
writer.appendClassInit(member.getOwnerName()).append("();").softNewLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ public class ArrayNativeGenerator implements Generator, DependencyPlugin {
|
||||||
writer.append("if (" + array + " === null || " + array + ".constructor.$meta.item === undefined) {")
|
writer.append("if (" + array + " === null || " + array + ".constructor.$meta.item === undefined) {")
|
||||||
.softNewLine().indent();
|
.softNewLine().indent();
|
||||||
MethodReference cons = new MethodReference("java.lang.IllegalArgumentException", "<init>", ValueType.VOID);
|
MethodReference cons = new MethodReference("java.lang.IllegalArgumentException", "<init>", ValueType.VOID);
|
||||||
writer.append("$rt_throw(").append(writer.getNaming().getNameForInit(cons)).append("());").softNewLine();
|
writer.append("$rt_throw(").appendInit(cons).append("());").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
writer.append("return " + array + ".data.length;").softNewLine();
|
writer.append("return " + array + ".data.length;").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,7 @@ public class JavaScriptTarget implements TeaVMTarget, TeaVMJavaScriptHost {
|
||||||
private final Set<MethodReference> asyncFamilyMethods = new HashSet<>();
|
private final Set<MethodReference> asyncFamilyMethods = new HashSet<>();
|
||||||
private ClassInitializerInsertionTransformer clinitInsertionTransformer;
|
private ClassInitializerInsertionTransformer clinitInsertionTransformer;
|
||||||
private List<VirtualMethodContributor> customVirtualMethods = new ArrayList<>();
|
private List<VirtualMethodContributor> customVirtualMethods = new ArrayList<>();
|
||||||
|
private boolean classScoped;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ClassHolderTransformer> getTransformers() {
|
public List<ClassHolderTransformer> getTransformers() {
|
||||||
|
@ -190,6 +191,10 @@ public class JavaScriptTarget implements TeaVMTarget, TeaVMJavaScriptHost {
|
||||||
this.debugEmitter = debugEmitter;
|
this.debugEmitter = debugEmitter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setClassScoped(boolean classScoped) {
|
||||||
|
this.classScoped = classScoped;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean requiresRegisterAllocation() {
|
public boolean requiresRegisterAllocation() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -306,6 +311,7 @@ public class JavaScriptTarget implements TeaVMTarget, TeaVMJavaScriptHost {
|
||||||
DefaultNamingStrategy naming = new DefaultNamingStrategy(aliasProvider, controller.getUnprocessedClassSource());
|
DefaultNamingStrategy naming = new DefaultNamingStrategy(aliasProvider, controller.getUnprocessedClassSource());
|
||||||
SourceWriterBuilder builder = new SourceWriterBuilder(naming);
|
SourceWriterBuilder builder = new SourceWriterBuilder(naming);
|
||||||
builder.setMinified(minifying);
|
builder.setMinified(minifying);
|
||||||
|
builder.setClassScoped(classScoped);
|
||||||
SourceWriter sourceWriter = builder.build(writer);
|
SourceWriter sourceWriter = builder.build(writer);
|
||||||
|
|
||||||
DebugInformationEmitter debugEmitterToUse = debugEmitter;
|
DebugInformationEmitter debugEmitterToUse = debugEmitter;
|
||||||
|
@ -320,7 +326,7 @@ public class JavaScriptTarget implements TeaVMTarget, TeaVMJavaScriptHost {
|
||||||
controller.getDependencyInfo(), m -> isVirtual(virtualMethodContributorContext, m));
|
controller.getDependencyInfo(), m -> isVirtual(virtualMethodContributorContext, m));
|
||||||
renderingContext.setMinifying(minifying);
|
renderingContext.setMinifying(minifying);
|
||||||
Renderer renderer = new Renderer(sourceWriter, asyncMethods, asyncFamilyMethods,
|
Renderer renderer = new Renderer(sourceWriter, asyncMethods, asyncFamilyMethods,
|
||||||
controller.getDiagnostics(), renderingContext);
|
controller.getDiagnostics(), renderingContext, classScoped);
|
||||||
RuntimeRenderer runtimeRenderer = new RuntimeRenderer(classes, naming, sourceWriter);
|
RuntimeRenderer runtimeRenderer = new RuntimeRenderer(classes, naming, sourceWriter);
|
||||||
renderer.setProperties(controller.getProperties());
|
renderer.setProperties(controller.getProperties());
|
||||||
renderer.setMinifying(minifying);
|
renderer.setMinifying(minifying);
|
||||||
|
@ -373,7 +379,7 @@ public class JavaScriptTarget implements TeaVMTarget, TeaVMJavaScriptHost {
|
||||||
: controller.getEntryPoints().entrySet()) {
|
: controller.getEntryPoints().entrySet()) {
|
||||||
sourceWriter.append("").append(entry.getKey()).ws().append("=").ws();
|
sourceWriter.append("").append(entry.getKey()).ws().append("=").ws();
|
||||||
MethodReference ref = entry.getValue().getMethod();
|
MethodReference ref = entry.getValue().getMethod();
|
||||||
sourceWriter.append("$rt_mainStarter(").append(naming.getFullNameFor(ref));
|
sourceWriter.append("$rt_mainStarter(").appendMethodBody(ref);
|
||||||
sourceWriter.append(");").newLine();
|
sourceWriter.append(");").newLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,13 @@ public class SourceWriter implements Appendable, LocationProvider {
|
||||||
private int column;
|
private int column;
|
||||||
private int line;
|
private int line;
|
||||||
private int offset;
|
private int offset;
|
||||||
|
private boolean classScoped;
|
||||||
|
|
||||||
SourceWriter(NamingStrategy naming, Appendable innerWriter, int lineWidth) {
|
SourceWriter(NamingStrategy naming, Appendable innerWriter, int lineWidth, boolean classScoped) {
|
||||||
this.naming = naming;
|
this.naming = naming;
|
||||||
this.innerWriter = innerWriter;
|
this.innerWriter = innerWriter;
|
||||||
this.lineWidth = lineWidth;
|
this.lineWidth = lineWidth;
|
||||||
|
this.classScoped = classScoped;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMinified(boolean minified) {
|
void setMinified(boolean minified) {
|
||||||
|
@ -111,6 +113,7 @@ public class SourceWriter implements Appendable, LocationProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceWriter appendStaticField(FieldReference field) throws IOException {
|
public SourceWriter appendStaticField(FieldReference field) throws IOException {
|
||||||
|
appendClassScopeIfNecessary(field.getClassName());
|
||||||
return append(naming.getFullNameFor(field));
|
return append(naming.getFullNameFor(field));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,21 +126,38 @@ public class SourceWriter implements Appendable, LocationProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceWriter appendMethodBody(MethodReference method) throws IOException {
|
public SourceWriter appendMethodBody(MethodReference method) throws IOException {
|
||||||
|
appendClassScopeIfNecessary(method.getClassName());
|
||||||
return append(naming.getFullNameFor(method));
|
return append(naming.getFullNameFor(method));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceWriter appendMethodBody(String className, String name, ValueType... params) throws IOException {
|
public SourceWriter appendMethodBody(String className, String name, ValueType... params) throws IOException {
|
||||||
return append(naming.getFullNameFor(new MethodReference(className, new MethodDescriptor(name, params))));
|
return appendMethodBody(new MethodReference(className, new MethodDescriptor(name, params)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceWriter appendMethodBody(Class<?> cls, String name, Class<?>... params) throws IOException {
|
public SourceWriter appendMethodBody(Class<?> cls, String name, Class<?>... params) throws IOException {
|
||||||
return append(naming.getFullNameFor(new MethodReference(cls, name, params)));
|
return appendMethodBody(new MethodReference(cls, name, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceWriter appendFunction(String name) throws IOException {
|
public SourceWriter appendFunction(String name) throws IOException {
|
||||||
return append(naming.getNameForFunction(name));
|
return append(naming.getNameForFunction(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SourceWriter appendInit(MethodReference method) throws IOException {
|
||||||
|
appendClassScopeIfNecessary(method.getClassName());
|
||||||
|
return append(naming.getNameForInit(method));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SourceWriter appendClassInit(String className) throws IOException {
|
||||||
|
appendClassScopeIfNecessary(className);
|
||||||
|
return append(naming.getNameForClassInit(className));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendClassScopeIfNecessary(String className) throws IOException {
|
||||||
|
if (classScoped) {
|
||||||
|
append(naming.getNameFor(className)).append(".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void appendIndent() throws IOException {
|
private void appendIndent() throws IOException {
|
||||||
if (minified) {
|
if (minified) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -18,6 +18,7 @@ package org.teavm.backend.javascript.codegen;
|
||||||
public class SourceWriterBuilder {
|
public class SourceWriterBuilder {
|
||||||
private NamingStrategy naming;
|
private NamingStrategy naming;
|
||||||
private boolean minified;
|
private boolean minified;
|
||||||
|
private boolean classScoped;
|
||||||
private int lineWidth = 512;
|
private int lineWidth = 512;
|
||||||
|
|
||||||
public SourceWriterBuilder(NamingStrategy naming) {
|
public SourceWriterBuilder(NamingStrategy naming) {
|
||||||
|
@ -36,8 +37,12 @@ public class SourceWriterBuilder {
|
||||||
this.lineWidth = lineWidth;
|
this.lineWidth = lineWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setClassScoped(boolean classScoped) {
|
||||||
|
this.classScoped = classScoped;
|
||||||
|
}
|
||||||
|
|
||||||
public SourceWriter build(Appendable innerWriter) {
|
public SourceWriter build(Appendable innerWriter) {
|
||||||
SourceWriter writer = new SourceWriter(naming, innerWriter, lineWidth);
|
SourceWriter writer = new SourceWriter(naming, innerWriter, lineWidth, classScoped);
|
||||||
writer.setMinified(minified);
|
writer.setMinified(minified);
|
||||||
return writer;
|
return writer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -419,7 +419,7 @@ public class AstWriter {
|
||||||
}
|
}
|
||||||
writer.outdent();
|
writer.outdent();
|
||||||
}
|
}
|
||||||
writer.append('}');
|
writer.outdent().append('}');
|
||||||
}
|
}
|
||||||
|
|
||||||
private void print(TryStatement node) throws IOException {
|
private void print(TryStatement node) throws IOException {
|
||||||
|
|
|
@ -65,6 +65,7 @@ public class Renderer implements RenderingManager {
|
||||||
private final ListableClassReaderSource classSource;
|
private final ListableClassReaderSource classSource;
|
||||||
private final ClassLoader classLoader;
|
private final ClassLoader classLoader;
|
||||||
private boolean minifying;
|
private boolean minifying;
|
||||||
|
private boolean classScoped;
|
||||||
private final Properties properties = new Properties();
|
private final Properties properties = new Properties();
|
||||||
private final ServiceRepository services;
|
private final ServiceRepository services;
|
||||||
private DebugInformationEmitter debugEmitter = new DummyDebugInformationEmitter();
|
private DebugInformationEmitter debugEmitter = new DummyDebugInformationEmitter();
|
||||||
|
@ -83,7 +84,7 @@ public class Renderer implements RenderingManager {
|
||||||
private boolean threadLibraryUsed;
|
private boolean threadLibraryUsed;
|
||||||
|
|
||||||
public Renderer(SourceWriter writer, Set<MethodReference> asyncMethods, Set<MethodReference> asyncFamilyMethods,
|
public Renderer(SourceWriter writer, Set<MethodReference> asyncMethods, Set<MethodReference> asyncFamilyMethods,
|
||||||
Diagnostics diagnostics, RenderingContext context) {
|
Diagnostics diagnostics, RenderingContext context, boolean classScoped) {
|
||||||
this.naming = context.getNaming();
|
this.naming = context.getNaming();
|
||||||
this.writer = writer;
|
this.writer = writer;
|
||||||
this.classSource = context.getClassSource();
|
this.classSource = context.getClassSource();
|
||||||
|
@ -93,6 +94,7 @@ public class Renderer implements RenderingManager {
|
||||||
this.asyncFamilyMethods = new HashSet<>(asyncFamilyMethods);
|
this.asyncFamilyMethods = new HashSet<>(asyncFamilyMethods);
|
||||||
this.diagnostics = diagnostics;
|
this.diagnostics = diagnostics;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
this.classScoped = classScoped;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLongLibraryUsed() {
|
public boolean isLongLibraryUsed() {
|
||||||
|
@ -294,7 +296,7 @@ public class Renderer implements RenderingManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderDeclaration(ClassNode cls) throws RenderingException {
|
private void renderDeclaration(ClassNode cls) throws RenderingException {
|
||||||
String jsName = writer.getNaming().getNameFor(cls.getName());
|
String jsName = naming.getNameFor(cls.getName());
|
||||||
debugEmitter.addClass(jsName, cls.getName(), cls.getParentName());
|
debugEmitter.addClass(jsName, cls.getName(), cls.getParentName());
|
||||||
try {
|
try {
|
||||||
writer.append("function " + jsName + "()").ws().append("{")
|
writer.append("function " + jsName + "()").ws().append("{")
|
||||||
|
@ -345,7 +347,12 @@ public class Renderer implements RenderingManager {
|
||||||
postponedFieldInitializers.add(new PostponedFieldInitializer(fieldRef, (String) value));
|
postponedFieldInitializers.add(new PostponedFieldInitializer(fieldRef, (String) value));
|
||||||
value = null;
|
value = null;
|
||||||
}
|
}
|
||||||
writer.append("var ").appendStaticField(fieldRef).ws().append("=").ws()
|
if (classScoped) {
|
||||||
|
writer.append(jsName).append(".");
|
||||||
|
} else {
|
||||||
|
writer.append("var ");
|
||||||
|
}
|
||||||
|
writer.append(naming.getFullNameFor(fieldRef)).ws().append("=").ws()
|
||||||
.append(context.constantToString(value)).append(";").softNewLine();
|
.append(context.constantToString(value)).append(";").softNewLine();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -366,14 +373,14 @@ public class Renderer implements RenderingManager {
|
||||||
for (MethodNode method : cls.getMethods()) {
|
for (MethodNode method : cls.getMethods()) {
|
||||||
if (!method.getModifiers().contains(ElementModifier.STATIC)) {
|
if (!method.getModifiers().contains(ElementModifier.STATIC)) {
|
||||||
if (method.getReference().getName().equals("<init>")) {
|
if (method.getReference().getName().equals("<init>")) {
|
||||||
renderInitializer(method);
|
renderInitializer(cls.getName(), method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MethodNode method : cls.getMethods()) {
|
for (MethodNode method : cls.getMethods()) {
|
||||||
renderBody(method);
|
renderBody(cls.getName(), method);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RenderingException("IO error occurred", e);
|
throw new RenderingException("IO error occurred", e);
|
||||||
|
@ -390,7 +397,8 @@ public class Renderer implements RenderingManager {
|
||||||
.append("false;").softNewLine();
|
.append("false;").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.append("function ").append(naming.getNameForClassInit(cls.getName())).append("()").ws()
|
renderFunctionDeclaration(cls.getName(), naming.getNameForClassInit(cls.getName()));
|
||||||
|
writer.append("()").ws()
|
||||||
.append("{").softNewLine().indent();
|
.append("{").softNewLine().indent();
|
||||||
|
|
||||||
if (isAsync) {
|
if (isAsync) {
|
||||||
|
@ -435,11 +443,15 @@ public class Renderer implements RenderingManager {
|
||||||
writer.appendFunction("$rt_nativeThread").append("().push(" + context.pointerName() + ");").softNewLine();
|
writer.appendFunction("$rt_nativeThread").append("().push(" + context.pointerName() + ");").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.outdent().append("}").newLine();
|
writer.outdent().append("}");
|
||||||
|
if (classScoped) {
|
||||||
|
writer.append(";");
|
||||||
|
}
|
||||||
|
writer.newLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderEraseClinit(ClassNode cls) throws IOException {
|
private void renderEraseClinit(ClassNode cls) throws IOException {
|
||||||
writer.append(naming.getNameForClassInit(cls.getName())).ws().append("=").ws()
|
writer.appendClassInit(cls.getName()).ws().append("=").ws()
|
||||||
.appendFunction("$rt_eraseClinit").append("(")
|
.appendFunction("$rt_eraseClinit").append("(")
|
||||||
.appendClass(cls.getName()).append(");").softNewLine();
|
.appendClass(cls.getName()).append(");").softNewLine();
|
||||||
}
|
}
|
||||||
|
@ -514,7 +526,7 @@ public class Renderer implements RenderingManager {
|
||||||
MethodReader clinit = classSource.get(cls.getName()).getMethod(
|
MethodReader clinit = classSource.get(cls.getName()).getMethod(
|
||||||
new MethodDescriptor("<clinit>", ValueType.VOID));
|
new MethodDescriptor("<clinit>", ValueType.VOID));
|
||||||
if (clinit != null) {
|
if (clinit != null) {
|
||||||
writer.append(naming.getNameForClassInit(cls.getName()));
|
writer.appendClassInit(cls.getName());
|
||||||
} else {
|
} else {
|
||||||
writer.append('0');
|
writer.append('0');
|
||||||
}
|
}
|
||||||
|
@ -676,10 +688,11 @@ public class Renderer implements RenderingManager {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderInitializer(MethodNode method) throws IOException {
|
private void renderInitializer(String className, MethodNode method) throws IOException {
|
||||||
MethodReference ref = method.getReference();
|
MethodReference ref = method.getReference();
|
||||||
debugEmitter.emitMethod(ref.getDescriptor());
|
debugEmitter.emitMethod(ref.getDescriptor());
|
||||||
writer.append("function ").append(naming.getNameForInit(ref)).append("(");
|
renderFunctionDeclaration(className, naming.getNameForInit(ref));
|
||||||
|
writer.append("(");
|
||||||
for (int i = 0; i < ref.parameterCount(); ++i) {
|
for (int i = 0; i < ref.parameterCount(); ++i) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
writer.append(",").ws();
|
writer.append(",").ws();
|
||||||
|
@ -691,14 +704,18 @@ public class Renderer implements RenderingManager {
|
||||||
String instanceName = variableNameForInitializer(ref.parameterCount());
|
String instanceName = variableNameForInitializer(ref.parameterCount());
|
||||||
writer.append("var " + instanceName).ws().append("=").ws().append("new ").appendClass(
|
writer.append("var " + instanceName).ws().append("=").ws().append("new ").appendClass(
|
||||||
ref.getClassName()).append("();").softNewLine();
|
ref.getClassName()).append("();").softNewLine();
|
||||||
writer.append(naming.getFullNameFor(ref)).append("(" + instanceName);
|
writer.appendMethodBody(ref).append("(" + instanceName);
|
||||||
for (int i = 0; i < ref.parameterCount(); ++i) {
|
for (int i = 0; i < ref.parameterCount(); ++i) {
|
||||||
writer.append(",").ws();
|
writer.append(",").ws();
|
||||||
writer.append(variableNameForInitializer(i));
|
writer.append(variableNameForInitializer(i));
|
||||||
}
|
}
|
||||||
writer.append(");").softNewLine();
|
writer.append(");").softNewLine();
|
||||||
writer.append("return " + instanceName + ";").softNewLine();
|
writer.append("return " + instanceName + ";").softNewLine();
|
||||||
writer.outdent().append("}").newLine();
|
writer.outdent().append("}");
|
||||||
|
if (classScoped) {
|
||||||
|
writer.append(";");
|
||||||
|
}
|
||||||
|
writer.newLine();
|
||||||
debugEmitter.emitMethod(null);
|
debugEmitter.emitMethod(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -755,7 +772,7 @@ public class Renderer implements RenderingManager {
|
||||||
writer.append(");").ws().append("}");
|
writer.append(");").ws().append("}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderBody(MethodNode method) throws IOException {
|
private void renderBody(String className, MethodNode method) throws IOException {
|
||||||
StatementRenderer statementRenderer = new StatementRenderer(context, writer);
|
StatementRenderer statementRenderer = new StatementRenderer(context, writer);
|
||||||
statementRenderer.setCurrentMethod(method);
|
statementRenderer.setCurrentMethod(method);
|
||||||
|
|
||||||
|
@ -763,7 +780,8 @@ public class Renderer implements RenderingManager {
|
||||||
debugEmitter.emitMethod(ref.getDescriptor());
|
debugEmitter.emitMethod(ref.getDescriptor());
|
||||||
String name = naming.getFullNameFor(ref);
|
String name = naming.getFullNameFor(ref);
|
||||||
|
|
||||||
writer.append("function ").append(name).append("(");
|
renderFunctionDeclaration(className, name);
|
||||||
|
writer.append("(");
|
||||||
int startParam = 0;
|
int startParam = 0;
|
||||||
if (method.getModifiers().contains(ElementModifier.STATIC)) {
|
if (method.getModifiers().contains(ElementModifier.STATIC)) {
|
||||||
startParam = 1;
|
startParam = 1;
|
||||||
|
@ -778,6 +796,9 @@ public class Renderer implements RenderingManager {
|
||||||
|
|
||||||
method.acceptVisitor(new MethodBodyRenderer(statementRenderer));
|
method.acceptVisitor(new MethodBodyRenderer(statementRenderer));
|
||||||
writer.outdent().append("}");
|
writer.outdent().append("}");
|
||||||
|
if (classScoped) {
|
||||||
|
writer.append(";");
|
||||||
|
}
|
||||||
|
|
||||||
writer.newLine();
|
writer.newLine();
|
||||||
debugEmitter.emitMethod(null);
|
debugEmitter.emitMethod(null);
|
||||||
|
@ -785,6 +806,16 @@ public class Renderer implements RenderingManager {
|
||||||
longLibraryUsed |= statementRenderer.isLongLibraryUsed();
|
longLibraryUsed |= statementRenderer.isLongLibraryUsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderFunctionDeclaration(String className, String name) throws IOException {
|
||||||
|
if (classScoped) {
|
||||||
|
writer.appendClass(className).append(".").append(name).ws().append("=").ws();
|
||||||
|
}
|
||||||
|
writer.append("function");
|
||||||
|
if (!classScoped) {
|
||||||
|
writer.append(" ").append(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void renderAsyncPrologue() throws IOException {
|
private void renderAsyncPrologue() throws IOException {
|
||||||
writer.append(context.mainLoopName()).append(":").ws().append("while").ws().append("(true)")
|
writer.append(context.mainLoopName()).append(":").ws().append("while").ws().append("(true)")
|
||||||
.ws().append("{").ws();
|
.ws().append("{").ws();
|
||||||
|
|
|
@ -124,7 +124,7 @@ public class RuntimeRenderer {
|
||||||
writer.append("for (var i = 0; i < str.length; i = (i + 1) | 0) {").indent().softNewLine();
|
writer.append("for (var i = 0; i < str.length; i = (i + 1) | 0) {").indent().softNewLine();
|
||||||
writer.append("charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;").softNewLine();
|
writer.append("charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
writer.append("return ").append(naming.getNameForInit(stringCons)).append("(characters);").softNewLine();
|
writer.append("return ").appendInit(stringCons).append("(characters);").softNewLine();
|
||||||
writer.outdent().append("}").newLine();
|
writer.outdent().append("}").newLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ public class RuntimeRenderer {
|
||||||
private void renderRuntimeNullCheck() throws IOException {
|
private void renderRuntimeNullCheck() throws IOException {
|
||||||
writer.append("function $rt_nullCheck(val) {").indent().softNewLine();
|
writer.append("function $rt_nullCheck(val) {").indent().softNewLine();
|
||||||
writer.append("if (val === null) {").indent().softNewLine();
|
writer.append("if (val === null) {").indent().softNewLine();
|
||||||
writer.append("$rt_throw(").append(naming.getNameForInit(NPE_INIT_METHOD)).append("());").softNewLine();
|
writer.append("$rt_throw(").appendInit(NPE_INIT_METHOD).append("());").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
writer.append("return val;").softNewLine();
|
writer.append("return val;").softNewLine();
|
||||||
writer.outdent().append("}").newLine();
|
writer.outdent().append("}").newLine();
|
||||||
|
@ -194,8 +194,7 @@ public class RuntimeRenderer {
|
||||||
private void renderRuntimeCreateException() throws IOException {
|
private void renderRuntimeCreateException() throws IOException {
|
||||||
writer.append("function $rt_createException(message)").ws().append("{").indent().softNewLine();
|
writer.append("function $rt_createException(message)").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return ");
|
writer.append("return ");
|
||||||
writer.append(writer.getNaming().getNameForInit(new MethodReference(RuntimeException.class,
|
writer.appendInit(new MethodReference(RuntimeException.class, "<init>", String.class, void.class));
|
||||||
"<init>", String.class, void.class)));
|
|
||||||
writer.append("(message);").softNewLine();
|
writer.append("(message);").softNewLine();
|
||||||
writer.outdent().append("}").newLine();
|
writer.outdent().append("}").newLine();
|
||||||
}
|
}
|
||||||
|
@ -211,7 +210,7 @@ public class RuntimeRenderer {
|
||||||
.append("lineNumber)").ws().append("{").indent().softNewLine();
|
.append("lineNumber)").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return ");
|
writer.append("return ");
|
||||||
if (supported) {
|
if (supported) {
|
||||||
writer.append(writer.getNaming().getNameForInit(STACK_TRACE_ELEM_INIT));
|
writer.appendInit(STACK_TRACE_ELEM_INIT);
|
||||||
writer.append("(className,").ws()
|
writer.append("(className,").ws()
|
||||||
.append("methodName,").ws()
|
.append("methodName,").ws()
|
||||||
.append("fileName,").ws()
|
.append("fileName,").ws()
|
||||||
|
|
|
@ -442,7 +442,7 @@ public class StatementRenderer implements ExprVisitor, StatementVisitor {
|
||||||
if (statement.getLocation() != null) {
|
if (statement.getLocation() != null) {
|
||||||
pushLocation(statement.getLocation());
|
pushLocation(statement.getLocation());
|
||||||
}
|
}
|
||||||
writer.append(naming.getNameForClassInit(statement.getClassName())).append("();").softNewLine();
|
writer.appendClassInit(statement.getClassName()).append("();").softNewLine();
|
||||||
if (statement.isAsync()) {
|
if (statement.isAsync()) {
|
||||||
emitSuspendChecker();
|
emitSuspendChecker();
|
||||||
}
|
}
|
||||||
|
@ -1095,7 +1095,7 @@ public class StatementRenderer implements ExprVisitor, StatementVisitor {
|
||||||
boolean virtual = false;
|
boolean virtual = false;
|
||||||
switch (expr.getType()) {
|
switch (expr.getType()) {
|
||||||
case STATIC:
|
case STATIC:
|
||||||
writer.append(naming.getFullNameFor(method)).append("(");
|
writer.appendMethodBody(method).append("(");
|
||||||
prevCallSite = debugEmitter.emitCallSite();
|
prevCallSite = debugEmitter.emitCallSite();
|
||||||
for (int i = 0; i < expr.getArguments().size(); ++i) {
|
for (int i = 0; i < expr.getArguments().size(); ++i) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
|
@ -1106,7 +1106,7 @@ public class StatementRenderer implements ExprVisitor, StatementVisitor {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SPECIAL:
|
case SPECIAL:
|
||||||
writer.append(naming.getFullNameFor(method)).append("(");
|
writer.appendMethodBody(method).append("(");
|
||||||
prevCallSite = debugEmitter.emitCallSite();
|
prevCallSite = debugEmitter.emitCallSite();
|
||||||
precedence = Precedence.min();
|
precedence = Precedence.min();
|
||||||
expr.getArguments().get(0).acceptVisitor(this);
|
expr.getArguments().get(0).acceptVisitor(this);
|
||||||
|
@ -1129,7 +1129,7 @@ public class StatementRenderer implements ExprVisitor, StatementVisitor {
|
||||||
virtual = true;
|
virtual = true;
|
||||||
break;
|
break;
|
||||||
case CONSTRUCTOR:
|
case CONSTRUCTOR:
|
||||||
writer.append(naming.getNameForInit(expr.getMethod())).append("(");
|
writer.appendInit(expr.getMethod()).append("(");
|
||||||
prevCallSite = debugEmitter.emitCallSite();
|
prevCallSite = debugEmitter.emitCallSite();
|
||||||
for (int i = 0; i < expr.getArguments().size(); ++i) {
|
for (int i = 0; i < expr.getArguments().size(); ++i) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
|
|
|
@ -197,9 +197,10 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String selfName = writer.getNaming().getFullNameFor(new MethodReference(Platform.class, "getEnumConstants",
|
MethodReference selfRef = new MethodReference(Platform.class, "getEnumConstants",
|
||||||
PlatformClass.class, Enum[].class));
|
PlatformClass.class, Enum[].class);
|
||||||
writer.append(selfName).ws().append("=").ws().append("function(cls)").ws().append("{").softNewLine().indent();
|
writer.appendMethodBody(selfRef).ws().append("=").ws().append("function(cls)").ws().append("{").softNewLine()
|
||||||
|
.indent();
|
||||||
writer.append("if").ws().append("(!cls.hasOwnProperty(c))").ws().append("{").indent().softNewLine();
|
writer.append("if").ws().append("(!cls.hasOwnProperty(c))").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return null;").softNewLine();
|
writer.append("return null;").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
|
@ -210,7 +211,7 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
writer.append("return cls[c];").softNewLine();
|
writer.append("return cls[c];").softNewLine();
|
||||||
writer.outdent().append("};").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
|
|
||||||
writer.append("return ").append(selfName).append("(").append(context.getParameterName(1))
|
writer.append("return ").appendMethodBody(selfRef).append("(").append(context.getParameterName(1))
|
||||||
.append(");").softNewLine();
|
.append(");").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,21 +222,22 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
if (annotCls != null) {
|
if (annotCls != null) {
|
||||||
writer.appendClass(clsName).append("[c]").ws().append("=").ws();
|
writer.appendClass(clsName).append("[c]").ws().append("=").ws();
|
||||||
MethodReference ctor = new MethodReference(annotCls.getName(), "<init>", ValueType.VOID);
|
MethodReference ctor = new MethodReference(annotCls.getName(), "<init>", ValueType.VOID);
|
||||||
writer.append(writer.getNaming().getNameForInit(ctor));
|
writer.appendInit(ctor);
|
||||||
writer.append("();").softNewLine();
|
writer.append("();").softNewLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String selfName = writer.getNaming().getFullNameFor(new MethodReference(Platform.class, "getAnnotations",
|
MethodReference selfRef = new MethodReference(Platform.class, "getAnnotations", PlatformClass.class,
|
||||||
PlatformClass.class, Annotation[].class));
|
Annotation[].class);
|
||||||
writer.append(selfName).ws().append("=").ws().append("function(cls)").ws().append("{").softNewLine().indent();
|
writer.appendMethodBody(selfRef).ws().append("=").ws().append("function(cls)").ws().append("{").softNewLine()
|
||||||
|
.indent();
|
||||||
writer.append("if").ws().append("(!cls.hasOwnProperty(c))").ws().append("{").indent().softNewLine();
|
writer.append("if").ws().append("(!cls.hasOwnProperty(c))").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return null;").softNewLine();
|
writer.append("return null;").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
writer.append("return cls[c].").appendMethod("getAnnotations", Annotation[].class).append("();").softNewLine();
|
writer.append("return cls[c].").appendMethod("getAnnotations", Annotation[].class).append("();").softNewLine();
|
||||||
writer.outdent().append("};").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
|
|
||||||
writer.append("return ").append(selfName).append("(").append(context.getParameterName(1))
|
writer.append("return ").appendMethodBody(selfRef).append("(").append(context.getParameterName(1))
|
||||||
.append(");").softNewLine();
|
.append(");").softNewLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -724,6 +724,7 @@ public class CodeServlet extends HttpServlet {
|
||||||
jsTarget.setMinifying(false);
|
jsTarget.setMinifying(false);
|
||||||
jsTarget.setAstCache(astCache);
|
jsTarget.setAstCache(astCache);
|
||||||
jsTarget.setDebugEmitter(debugInformationBuilder);
|
jsTarget.setDebugEmitter(debugInformationBuilder);
|
||||||
|
jsTarget.setClassScoped(true);
|
||||||
vm.setOptimizationLevel(TeaVMOptimizationLevel.SIMPLE);
|
vm.setOptimizationLevel(TeaVMOptimizationLevel.SIMPLE);
|
||||||
vm.setCacheStatus(classSource);
|
vm.setCacheStatus(classSource);
|
||||||
vm.addVirtualMethods(m -> true);
|
vm.addVirtualMethods(m -> true);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user