mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
Fix issue
This commit is contained in:
parent
7e23498c5b
commit
b19c545318
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package org.teavm.classlib.java.lang;
|
package org.teavm.classlib.java.lang;
|
||||||
|
|
||||||
import org.teavm.dom.browser.TimerHandler;
|
|
||||||
import org.teavm.dom.browser.Window;
|
import org.teavm.dom.browser.Window;
|
||||||
import org.teavm.javascript.spi.Async;
|
import org.teavm.javascript.spi.Async;
|
||||||
import org.teavm.jso.JS;
|
import org.teavm.jso.JS;
|
||||||
|
@ -167,5 +166,4 @@ public class TThread extends TObject implements TRunnable {
|
||||||
public final int getPriority(){
|
public final int getPriority(){
|
||||||
return this.priority;
|
return this.priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,19 +314,10 @@ public class AstIO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
try {
|
|
||||||
output.writeByte(18);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new IOExceptionWrapper(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
try {
|
try {
|
||||||
output.writeByte(19);
|
output.writeByte(18);
|
||||||
writeExpr(statement.getObjectRef());
|
writeExpr(statement.getObjectRef());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new IOExceptionWrapper(e);
|
throw new IOExceptionWrapper(e);
|
||||||
|
@ -336,7 +327,7 @@ public class AstIO {
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorExitStatement statement) {
|
public void visit(MonitorExitStatement statement) {
|
||||||
try {
|
try {
|
||||||
output.writeByte(20);
|
output.writeByte(19);
|
||||||
writeExpr(statement.getObjectRef());
|
writeExpr(statement.getObjectRef());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new IOExceptionWrapper(e);
|
throw new IOExceptionWrapper(e);
|
||||||
|
|
|
@ -262,10 +262,6 @@ public class DiskRegularMethodNodeCache implements RegularMethodNodeCache {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
|
|
||||||
|
|
|
@ -117,10 +117,6 @@ class BreakToContinueReplacer implements StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,10 +112,6 @@ class CertainBlockCountVisitor implements StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,6 @@ import org.teavm.javascript.spi.GeneratedBy;
|
||||||
import org.teavm.javascript.spi.Generator;
|
import org.teavm.javascript.spi.Generator;
|
||||||
import org.teavm.javascript.spi.InjectedBy;
|
import org.teavm.javascript.spi.InjectedBy;
|
||||||
import org.teavm.model.*;
|
import org.teavm.model.*;
|
||||||
import org.teavm.model.instructions.InvokeInstruction;
|
|
||||||
import org.teavm.model.instructions.MonitorEnterInstruction;
|
|
||||||
import org.teavm.model.util.AsyncProgramSplitter;
|
import org.teavm.model.util.AsyncProgramSplitter;
|
||||||
import org.teavm.model.util.ProgramUtils;
|
import org.teavm.model.util.ProgramUtils;
|
||||||
|
|
||||||
|
@ -264,7 +262,7 @@ public class Decompiler {
|
||||||
generator.indexer = indexer;
|
generator.indexer = indexer;
|
||||||
parentNode = codeTree.getRoot();
|
parentNode = codeTree.getRoot();
|
||||||
currentNode = parentNode.getFirstChild();
|
currentNode = parentNode.getFirstChild();
|
||||||
boolean saved = !async;
|
generator.async = async;
|
||||||
for (int i = 0; i < this.graph.size(); ++i) {
|
for (int i = 0; i < this.graph.size(); ++i) {
|
||||||
Block block = stack.peek();
|
Block block = stack.peek();
|
||||||
while (block.end == i) {
|
while (block.end == i) {
|
||||||
|
@ -311,10 +309,6 @@ public class Decompiler {
|
||||||
generator.setCurrentLocation(nodeLocation);
|
generator.setCurrentLocation(nodeLocation);
|
||||||
}
|
}
|
||||||
insn.acceptVisitor(generator);
|
insn.acceptVisitor(generator);
|
||||||
if (!saved && (insn instanceof InvokeInstruction || insn instanceof MonitorEnterInstruction)) {
|
|
||||||
generator.statements.add(new SaveStatement());
|
|
||||||
saved = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (targetBlocks[node] >= 0) {
|
if (targetBlocks[node] >= 0) {
|
||||||
GotoPartStatement stmt = new GotoPartStatement();
|
GotoPartStatement stmt = new GotoPartStatement();
|
||||||
|
|
|
@ -191,10 +191,6 @@ public class NameFrequencyEstimator implements StatementVisitor, ExprVisitor, Me
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
if (async) {
|
if (async) {
|
||||||
|
|
|
@ -619,11 +619,6 @@ class OptimizingVisitor implements StatementVisitor, ExprVisitor {
|
||||||
resultStmt = statement;
|
resultStmt = statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
resultStmt = statement;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
statement.getObjectRef().acceptVisitor(this);
|
statement.getObjectRef().acceptVisitor(this);
|
||||||
|
|
|
@ -122,10 +122,6 @@ class RedundantLabelEliminator implements StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,10 +116,6 @@ class ReferenceCountingVisitor implements StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -686,6 +686,7 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
variableNames.add("$je");
|
variableNames.add("$je");
|
||||||
}
|
}
|
||||||
variableNames.add("$ptr");
|
variableNames.add("$ptr");
|
||||||
|
variableNames.add("$tmp");
|
||||||
if (!variableNames.isEmpty()) {
|
if (!variableNames.isEmpty()) {
|
||||||
writer.append("var ");
|
writer.append("var ");
|
||||||
for (int i = 0; i < variableNames.size(); ++i) {
|
for (int i = 0; i < variableNames.size(); ++i) {
|
||||||
|
@ -817,9 +818,13 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
}
|
}
|
||||||
prevCallSite = debugEmitter.emitCallSite();
|
prevCallSite = debugEmitter.emitCallSite();
|
||||||
if (statement.getLeftValue() != null) {
|
if (statement.getLeftValue() != null) {
|
||||||
|
if (statement.isAsync()) {
|
||||||
|
writer.append("$tmp");
|
||||||
|
} else {
|
||||||
priority = Priority.COMMA;
|
priority = Priority.COMMA;
|
||||||
associativity = Associativity.NONE;
|
associativity = Associativity.NONE;
|
||||||
statement.getLeftValue().acceptVisitor(this);
|
statement.getLeftValue().acceptVisitor(this);
|
||||||
|
}
|
||||||
writer.ws().append("=").ws();
|
writer.ws().append("=").ws();
|
||||||
}
|
}
|
||||||
priority = Priority.COMMA;
|
priority = Priority.COMMA;
|
||||||
|
@ -827,6 +832,15 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
statement.getRightValue().acceptVisitor(this);
|
statement.getRightValue().acceptVisitor(this);
|
||||||
debugEmitter.emitCallSite();
|
debugEmitter.emitCallSite();
|
||||||
writer.append(";").softNewLine();
|
writer.append(";").softNewLine();
|
||||||
|
if (statement.isAsync()) {
|
||||||
|
emitSuspendChecker();
|
||||||
|
if (statement.getLeftValue() != null) {
|
||||||
|
priority = Priority.COMMA;
|
||||||
|
associativity = Associativity.NONE;
|
||||||
|
statement.getLeftValue().acceptVisitor(this);
|
||||||
|
writer.ws().append("=").ws().append("$tmp;").softNewLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (statement.getLocation() != null) {
|
if (statement.getLocation() != null) {
|
||||||
popLocation();
|
popLocation();
|
||||||
}
|
}
|
||||||
|
@ -1974,17 +1988,6 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
try {
|
|
||||||
writer.append("if").ws().append("($rt_suspending())").ws().append("{").indent().softNewLine();
|
|
||||||
writer.append("return $save();").softNewLine();
|
|
||||||
writer.outdent().append("}").softNewLine();
|
|
||||||
} catch (IOException ex){
|
|
||||||
throw new RenderingException("IO error occured", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
try {
|
try {
|
||||||
|
@ -1994,6 +1997,7 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
writer.appendMethodBody(monitorEnterRef).append("(");
|
writer.appendMethodBody(monitorEnterRef).append("(");
|
||||||
statement.getObjectRef().acceptVisitor(this);
|
statement.getObjectRef().acceptVisitor(this);
|
||||||
writer.append(");").softNewLine();
|
writer.append(");").softNewLine();
|
||||||
|
emitSuspendChecker();
|
||||||
} else {
|
} else {
|
||||||
MethodReference monitorEnterRef = new MethodReference(
|
MethodReference monitorEnterRef = new MethodReference(
|
||||||
Object.class, "monitorEnterSync", Object.class, void.class);
|
Object.class, "monitorEnterSync", Object.class, void.class);
|
||||||
|
@ -2006,6 +2010,12 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void emitSuspendChecker() throws IOException {
|
||||||
|
writer.append("if").ws().append("($rt_suspending())").ws().append("{").indent().softNewLine();
|
||||||
|
writer.append("return $save();").softNewLine();
|
||||||
|
writer.outdent().append("}").softNewLine();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorExitStatement statement) {
|
public void visit(MonitorExitStatement statement) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -37,6 +37,7 @@ class StatementGenerator implements InstructionVisitor {
|
||||||
Program program;
|
Program program;
|
||||||
ClassHolderSource classSource;
|
ClassHolderSource classSource;
|
||||||
private NodeLocation currentLocation;
|
private NodeLocation currentLocation;
|
||||||
|
boolean async;
|
||||||
|
|
||||||
public void setCurrentLocation(NodeLocation currentLocation) {
|
public void setCurrentLocation(NodeLocation currentLocation) {
|
||||||
this.currentLocation = currentLocation;
|
this.currentLocation = currentLocation;
|
||||||
|
@ -549,13 +550,17 @@ class StatementGenerator implements InstructionVisitor {
|
||||||
} else {
|
} else {
|
||||||
invocationExpr = Expr.invokeStatic(insn.getMethod(), exprArgs);
|
invocationExpr = Expr.invokeStatic(insn.getMethod(), exprArgs);
|
||||||
}
|
}
|
||||||
|
AssignmentStatement stmt;
|
||||||
if (insn.getReceiver() != null) {
|
if (insn.getReceiver() != null) {
|
||||||
assign(invocationExpr, insn.getReceiver());
|
stmt = Statement.assign(Expr.var(insn.getReceiver().getIndex()), invocationExpr);
|
||||||
|
stmt.getDebugNames().addAll(insn.getReceiver().getDebugNames());
|
||||||
} else {
|
} else {
|
||||||
AssignmentStatement stmt = Statement.assign(null, invocationExpr);
|
stmt = Statement.assign(null, invocationExpr);
|
||||||
stmt.setLocation(currentLocation);
|
|
||||||
statements.add(stmt);
|
|
||||||
}
|
}
|
||||||
|
stmt.setLocation(currentLocation);
|
||||||
|
stmt.setAsync(async);
|
||||||
|
async = false;
|
||||||
|
statements.add(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -656,6 +661,7 @@ class StatementGenerator implements InstructionVisitor {
|
||||||
MonitorEnterStatement stmt = new MonitorEnterStatement();
|
MonitorEnterStatement stmt = new MonitorEnterStatement();
|
||||||
stmt.setLocation(currentLocation);
|
stmt.setLocation(currentLocation);
|
||||||
stmt.setObjectRef(Expr.var(insn.getObjectRef().getIndex()));
|
stmt.setObjectRef(Expr.var(insn.getObjectRef().getIndex()));
|
||||||
|
async = false;
|
||||||
statements.add(stmt);
|
statements.add(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,10 +115,6 @@ class TryCatchFinder implements StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,10 +229,6 @@ class UnusedVariableEliminator implements ExprVisitor, StatementVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
statement.getObjectRef().acceptVisitor(this);
|
statement.getObjectRef().acceptVisitor(this);
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class AssignmentStatement extends Statement {
|
||||||
private Expr rightValue;
|
private Expr rightValue;
|
||||||
private NodeLocation location;
|
private NodeLocation location;
|
||||||
private Set<String> debugNames = new HashSet<>();
|
private Set<String> debugNames = new HashSet<>();
|
||||||
|
private boolean async;
|
||||||
|
|
||||||
public Expr getLeftValue() {
|
public Expr getLeftValue() {
|
||||||
return leftValue;
|
return leftValue;
|
||||||
|
@ -56,6 +57,14 @@ public class AssignmentStatement extends Statement {
|
||||||
return debugNames;
|
return debugNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAsync() {
|
||||||
|
return async;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsync(boolean async) {
|
||||||
|
this.async = async;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void acceptVisitor(StatementVisitor visitor) {
|
public void acceptVisitor(StatementVisitor visitor) {
|
||||||
visitor.visit(this);
|
visitor.visit(this);
|
||||||
|
|
|
@ -196,10 +196,6 @@ public class RenamingVisitor implements StatementVisitor, ExprVisitor {
|
||||||
public void visit(GotoPartStatement statement) {
|
public void visit(GotoPartStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visit(SaveStatement statement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(MonitorEnterStatement statement) {
|
public void visit(MonitorEnterStatement statement) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2015 Alexey Andreev.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.teavm.javascript.ast;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Alexey Andreev
|
|
||||||
*/
|
|
||||||
public class SaveStatement extends Statement {
|
|
||||||
@Override
|
|
||||||
public void acceptVisitor(StatementVisitor visitor) {
|
|
||||||
visitor.visit(this);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -49,6 +49,4 @@ public interface StatementVisitor {
|
||||||
void visit(MonitorEnterStatement statement);
|
void visit(MonitorEnterStatement statement);
|
||||||
|
|
||||||
void visit(MonitorExitStatement statement);
|
void visit(MonitorExitStatement statement);
|
||||||
|
|
||||||
void visit(SaveStatement statement);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException {
|
public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException {
|
||||||
switch (methodRef.getName()) {
|
switch (methodRef.getName()) {
|
||||||
case "newInstanceImpl":
|
case "newInstanceImpl":
|
||||||
generateNewInstance(writer);
|
generateNewInstance(context, writer);
|
||||||
break;
|
break;
|
||||||
case "prepareNewInstance":
|
case "prepareNewInstance":
|
||||||
generatePrepareNewInstance(context, writer);
|
generatePrepareNewInstance(context, writer);
|
||||||
|
@ -100,7 +100,7 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
MethodReader method = cls.getMethod(new MethodDescriptor("<init>", void.class));
|
MethodReader method = cls.getMethod(new MethodDescriptor("<init>", void.class));
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
writer.appendClass(clsName).append("[c]").ws().append("=").ws()
|
writer.appendClass(clsName).append("[c]").ws().append("=").ws()
|
||||||
.appendMethodBody(method.getReference()).append(")").append(";").softNewLine();
|
.appendMethodBody(method.getReference()).append(";").softNewLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writer.appendMethodBody(Platform.class, "newInstance", PlatformClass.class, Object.class).ws().append('=').ws()
|
writer.appendMethodBody(Platform.class, "newInstance", PlatformClass.class, Object.class).ws().append('=').ws()
|
||||||
|
@ -108,17 +108,19 @@ public class PlatformGenerator implements Generator, Injector, DependencyPlugin
|
||||||
.append(";").softNewLine();
|
.append(";").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateNewInstance(SourceWriter writer) throws IOException {
|
private void generateNewInstance(GeneratorContext context, SourceWriter writer) throws IOException {
|
||||||
writer.append("if").ws().append("($rt_resuming())").ws().append("{").indent().softNewLine();
|
writer.append("if").ws().append("($rt_resuming())").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return $rt_nativeThread().pop();").softNewLine();
|
writer.append("return $rt_nativeThread().pop();").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
|
|
||||||
writer.append("if").ws().append("(!cls.hasOwnProperty('$$constructor$$'))").ws().append("{")
|
String cls = context.getParameterName(1);
|
||||||
.indent().softNewLine();
|
writer.append("if").ws().append("(!").append(cls).append(".hasOwnProperty('$$constructor$$'))")
|
||||||
|
.ws().append("{").indent().softNewLine();
|
||||||
writer.append("return null;").softNewLine();
|
writer.append("return null;").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
|
|
||||||
writer.append("var $r").ws().append('=').ws().append("cls.$$constructor$$();");
|
writer.append("var $r").ws().append('=').ws().append("new ").append(cls).append("();").softNewLine();
|
||||||
|
writer.append(cls).append(".$$constructor$$($r);").softNewLine();
|
||||||
writer.append("if").ws().append("($rt_suspending())").ws().append("{").indent().softNewLine();
|
writer.append("if").ws().append("($rt_suspending())").ws().append("{").indent().softNewLine();
|
||||||
writer.append("return $rt_nativeThread().push($r);").softNewLine();
|
writer.append("return $rt_nativeThread().push($r);").softNewLine();
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user