mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Refactoring. Add AsyncCallback support
This commit is contained in:
parent
942542df6f
commit
3b1d6851a4
1
pom.xml
1
pom.xml
|
@ -82,6 +82,7 @@
|
|||
<module>teavm-platform</module>
|
||||
<module>teavm-cli</module>
|
||||
<module>teavm-chrome-rdp</module>
|
||||
<module>teavm-tests</module>
|
||||
</modules>
|
||||
|
||||
<dependencyManagement>
|
||||
|
|
|
@ -49,6 +49,16 @@
|
|||
<artifactId>teavm-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-jso</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-dom</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
|
@ -74,34 +84,6 @@
|
|||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-maven-plugin</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-platform</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-javascript-tests</id>
|
||||
<goals>
|
||||
<goal>build-test-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-test-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<properties>
|
||||
<java.util.Locale.available>en, en_US, en_GB, ru, ru_RU</java.util.Locale.available>
|
||||
</properties>
|
||||
<incremental>${teavm.classlib.test.incremental}</incremental>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
|
@ -135,15 +117,6 @@
|
|||
</arguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>org/teavm/platform/metadata/*.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.teavm.classlib.impl;
|
||||
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.ni.PreserveOriginalName;
|
||||
import org.teavm.javascript.spi.PreserveOriginalName;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,8 +23,8 @@ import java.net.URL;
|
|||
import java.util.*;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.dependency.*;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodDescriptor;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
|
|
@ -22,8 +22,8 @@ import org.teavm.codegen.SourceWriter;
|
|||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
|
|
|
@ -20,10 +20,10 @@ import org.teavm.codegen.SourceWriter;
|
|||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,10 +17,10 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,10 +17,10 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,10 +18,10 @@ package org.teavm.classlib.java.lang;
|
|||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.dependency.*;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ import java.io.IOException;
|
|||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ package org.teavm.classlib.java.lang;
|
|||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.dependency.*;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.FieldReference;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.classlib.java.io.TSerializable;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.lang;
|
|||
import org.teavm.classlib.impl.charset.UTF16Helper;
|
||||
import org.teavm.classlib.impl.unicode.UnicodeHelper;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import org.teavm.classlib.java.io.TIOException;
|
||||
import org.teavm.classlib.java.io.TOutputStream;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import org.teavm.classlib.java.io.TIOException;
|
||||
import org.teavm.classlib.java.io.TOutputStream;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.classlib.java.io.TSerializable;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -16,10 +16,10 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
import org.teavm.javascript.spi.Superclass;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
import org.teavm.javascript.spi.Superclass;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.teavm.classlib.java.util.THashMap;
|
|||
import org.teavm.classlib.java.util.TMap;
|
||||
import org.teavm.classlib.java.util.regex.TPattern;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.lang;
|
|||
import org.teavm.classlib.java.io.TPrintStream;
|
||||
import org.teavm.classlib.java.lang.reflect.TArray;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -15,14 +15,18 @@
|
|||
*/
|
||||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.runtime.Async;
|
||||
import org.teavm.dom.browser.TimerHandler;
|
||||
import org.teavm.dom.browser.Window;
|
||||
import org.teavm.javascript.spi.Async;
|
||||
import org.teavm.jso.JS;
|
||||
import org.teavm.platform.async.AsyncCallback;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TThread extends TObject implements TRunnable {
|
||||
private static Window window = (Window)JS.getGlobal();
|
||||
private static TThread currentThread = new TThread(TString.wrap("main"));
|
||||
private TString name;
|
||||
private TRunnable target;
|
||||
|
@ -60,9 +64,16 @@ public class TThread extends TObject implements TRunnable {
|
|||
}
|
||||
|
||||
@Async
|
||||
@GeneratedBy(ThreadNativeGenerator.class)
|
||||
public static native void yield();
|
||||
|
||||
private static void yield(final AsyncCallback<Void> callback) {
|
||||
window.setTimeout(new TimerHandler() {
|
||||
@Override public void onTimer() {
|
||||
callback.complete(null);
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
||||
public void interrupt() {
|
||||
}
|
||||
|
||||
|
@ -86,11 +97,14 @@ public class TThread extends TObject implements TRunnable {
|
|||
return true;
|
||||
}
|
||||
|
||||
public static void sleep(long millis) throws TInterruptedException {
|
||||
sleep((double)millis);
|
||||
}
|
||||
|
||||
@Async
|
||||
@GeneratedBy(ThreadNativeGenerator.class)
|
||||
private static native void sleep(double millis) throws TInterruptedException;
|
||||
public static native void sleep(long millis) throws TInterruptedException;
|
||||
|
||||
private static void sleep(long millis, final AsyncCallback<Void> callback) {
|
||||
window.setTimeout(new TimerHandler() {
|
||||
@Override public void onTimer() {
|
||||
callback.complete(null);
|
||||
}
|
||||
}, millis);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,9 +17,9 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import org.teavm.classlib.java.io.TPrintStream;
|
||||
import org.teavm.classlib.java.util.TArrays;
|
||||
import org.teavm.javascript.ni.Remove;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
import org.teavm.javascript.spi.Remove;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
import org.teavm.javascript.spi.Superclass;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.lang;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,8 +18,8 @@ package org.teavm.classlib.java.lang.reflect;
|
|||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.dependency.*;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.ClassReader;
|
||||
import org.teavm.model.MethodDescriptor;
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.classlib.java.lang.reflect;
|
|||
|
||||
import org.teavm.classlib.java.lang.*;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -21,7 +21,7 @@ import org.teavm.classlib.java.lang.TException;
|
|||
import org.teavm.classlib.java.lang.TIllegalArgumentException;
|
||||
import org.teavm.classlib.java.lang.TNullPointerException;
|
||||
import org.teavm.classlib.java.lang.TString;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
* A {@code URISyntaxException} will be thrown if some information could not be parsed
|
||||
|
|
|
@ -20,8 +20,8 @@ import org.teavm.codegen.SourceWriter;
|
|||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.util;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.teavm.classlib.java.util;
|
||||
|
||||
import org.teavm.classlib.java.lang.*;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.util;
|
|||
import java.util.Arrays;
|
||||
import org.teavm.classlib.java.io.TSerializable;
|
||||
import org.teavm.classlib.java.lang.*;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.classlib.java.util;
|
|||
|
||||
import org.teavm.classlib.java.io.TSerializable;
|
||||
import org.teavm.classlib.java.lang.*;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.util;
|
|||
import org.teavm.classlib.java.lang.TComparable;
|
||||
import org.teavm.classlib.java.lang.TSystem;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -39,7 +39,7 @@ import org.teavm.classlib.java.lang.TCloneNotSupportedException;
|
|||
import org.teavm.classlib.java.lang.TIllegalArgumentException;
|
||||
import org.teavm.classlib.java.lang.TIllegalStateException;
|
||||
import org.teavm.classlib.java.lang.TObject;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
public class THashMap<K, V> extends TAbstractMap<K, V> implements TSerializable {
|
||||
transient int elementCount;
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.teavm.classlib.java.io.TSerializable;
|
|||
import org.teavm.classlib.java.lang.TCloneNotSupportedException;
|
||||
import org.teavm.classlib.java.lang.TCloneable;
|
||||
import org.teavm.classlib.java.lang.TObject;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.util;
|
|||
import org.teavm.classlib.java.io.TSerializable;
|
||||
import org.teavm.classlib.java.lang.TMath;
|
||||
import org.teavm.classlib.java.lang.TObject;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -19,7 +19,7 @@ import org.teavm.classlib.java.lang.TIllegalStateException;
|
|||
import org.teavm.classlib.java.lang.TObject;
|
||||
import org.teavm.classlib.java.lang.TString;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -21,8 +21,8 @@ import org.teavm.codegen.SourceWriter;
|
|||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.classlib.java.util.logging;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.teavm.classlib.java.util.logging;
|
|||
import org.teavm.classlib.java.lang.*;
|
||||
import org.teavm.classlib.java.util.THashMap;
|
||||
import org.teavm.classlib.java.util.TMap;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -22,5 +22,5 @@ import org.teavm.model.CallLocation;
|
|||
* @author Alexey Andreev
|
||||
*/
|
||||
public interface DependencyPlugin {
|
||||
void methodAchieved(DependencyAgent checker, MethodDependency method, CallLocation location);
|
||||
void methodAchieved(DependencyAgent agent, MethodDependency method, CallLocation location);
|
||||
}
|
||||
|
|
|
@ -18,10 +18,10 @@ package org.teavm.javascript;
|
|||
import java.util.*;
|
||||
import org.teavm.common.*;
|
||||
import org.teavm.javascript.ast.*;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.ni.PreserveOriginalName;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.javascript.spi.PreserveOriginalName;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.model.util.AsyncProgramSplitter;
|
||||
import org.teavm.model.util.ProgramUtils;
|
||||
|
|
|
@ -27,10 +27,10 @@ import org.teavm.debugging.information.DebugInformationEmitter;
|
|||
import org.teavm.debugging.information.DeferredCallSite;
|
||||
import org.teavm.debugging.information.DummyDebugInformationEmitter;
|
||||
import org.teavm.javascript.ast.*;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
@ -53,6 +53,7 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
|||
private Deque<LocationStackEntry> locationStack = new ArrayDeque<>();
|
||||
private DeferredCallSite lastCallSite;
|
||||
private DeferredCallSite prevCallSite;
|
||||
private Set<MethodReference> asyncMethods;
|
||||
private boolean async;
|
||||
|
||||
private static class InjectorHolder {
|
||||
|
@ -76,12 +77,13 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
|||
}
|
||||
|
||||
public Renderer(SourceWriter writer, ListableClassHolderSource classSource, ClassLoader classLoader,
|
||||
ServiceRepository services) {
|
||||
ServiceRepository services, Set<MethodReference> asyncMethods) {
|
||||
this.naming = writer.getNaming();
|
||||
this.writer = writer;
|
||||
this.classSource = classSource;
|
||||
this.classLoader = classLoader;
|
||||
this.services = services;
|
||||
this.asyncMethods = new HashSet<>(asyncMethods);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -695,6 +697,11 @@ public class Renderer implements ExprVisitor, StatementVisitor, RenderingContext
|
|||
return async;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAsync(MethodReference method) {
|
||||
return asyncMethods.contains(method);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCompleteContinuation() {
|
||||
return "$return";
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.javascript.ast;
|
||||
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.runtime;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
|
@ -13,11 +13,12 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.util.Properties;
|
||||
import org.teavm.common.ServiceRepository;
|
||||
import org.teavm.model.ListableClassReaderSource;
|
||||
import org.teavm.model.MethodReference;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -35,4 +36,6 @@ public interface GeneratorContext extends ServiceRepository {
|
|||
boolean isAsync();
|
||||
|
||||
String getCompleteContinuation();
|
||||
|
||||
boolean isAsync(MethodReference method);
|
||||
}
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.teavm.model.MethodReference;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.javascript.ni;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.runtime;
|
||||
package org.teavm.javascript.spi;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -21,10 +21,10 @@ import org.teavm.callgraph.CallGraph;
|
|||
import org.teavm.callgraph.CallGraphNode;
|
||||
import org.teavm.callgraph.CallSite;
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.spi.Async;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.javascript.spi.Sync;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.runtime.Async;
|
||||
import org.teavm.runtime.Sync;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,9 +17,9 @@ package org.teavm.parsing;
|
|||
|
||||
import java.util.Map;
|
||||
import org.teavm.common.Mapper;
|
||||
import org.teavm.javascript.ni.Remove;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
import org.teavm.javascript.spi.Remove;
|
||||
import org.teavm.javascript.spi.Rename;
|
||||
import org.teavm.javascript.spi.Superclass;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.model.instructions.*;
|
||||
import org.teavm.model.util.ModelUtils;
|
||||
|
|
|
@ -26,10 +26,10 @@ import org.teavm.diagnostics.AccumulationDiagnostics;
|
|||
import org.teavm.diagnostics.ProblemProvider;
|
||||
import org.teavm.javascript.*;
|
||||
import org.teavm.javascript.ast.ClassNode;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.model.instructions.*;
|
||||
import org.teavm.model.util.*;
|
||||
|
@ -396,7 +396,7 @@ public class TeaVM implements TeaVMHost, ServiceRepository {
|
|||
SourceWriterBuilder builder = new SourceWriterBuilder(naming);
|
||||
builder.setMinified(minifying);
|
||||
SourceWriter sourceWriter = builder.build(writer);
|
||||
Renderer renderer = new Renderer(sourceWriter, classSet, classLoader, this);
|
||||
Renderer renderer = new Renderer(sourceWriter, classSet, classLoader, this, asyncMethods);
|
||||
renderer.setProperties(properties);
|
||||
if (debugEmitter != null) {
|
||||
int classIndex = 0;
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.vm.spi;
|
|||
|
||||
import java.util.Properties;
|
||||
import org.teavm.dependency.DependencyListener;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.model.ClassHolderTransformer;
|
||||
import org.teavm.model.MethodReference;
|
||||
import org.teavm.vm.TeaVM;
|
||||
|
|
|
@ -29,7 +29,7 @@ import org.teavm.jso.JSProperty;
|
|||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public interface Window extends JSGlobal, EventTarget, StorageProvider {
|
||||
public interface Window extends JSGlobal, EventTarget, StorageProvider, TypedArrayFactory {
|
||||
@JSProperty
|
||||
HTMLDocument getDocument();
|
||||
|
||||
|
@ -42,10 +42,14 @@ public interface Window extends JSGlobal, EventTarget, StorageProvider {
|
|||
|
||||
int setTimeout(TimerHandler handler, int delay);
|
||||
|
||||
int setTimeout(TimerHandler handler, double delay);
|
||||
|
||||
void clearTimeout(int timeoutId);
|
||||
|
||||
int setInterval(TimerHandler handler, int delay);
|
||||
|
||||
int setInterval(TimerHandler handler, double delay);
|
||||
|
||||
void clearInterval(int timeoutId);
|
||||
|
||||
@JSProperty("JSON")
|
||||
|
@ -53,79 +57,4 @@ public interface Window extends JSGlobal, EventTarget, StorageProvider {
|
|||
|
||||
@JSConstructor("XMLHttpRequest")
|
||||
XMLHttpRequest createXMLHttpRequest();
|
||||
|
||||
@JSConstructor("ArrayBuffer")
|
||||
ArrayBuffer createArrayBuffer(int length);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(int length);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(int length);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUint8ClampedArray(int length);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUintClamped8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(int length);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(int length);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(int length);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(int length);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(int length);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(ArrayBuffer buffer, int offset, int length);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* 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.dom.typedarrays;
|
||||
|
||||
import org.teavm.jso.JSConstructor;
|
||||
import org.teavm.jso.JSObject;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public interface TypedArrayFactory extends JSObject {
|
||||
@JSConstructor("ArrayBuffer")
|
||||
ArrayBuffer createArrayBuffer(int length);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(int length);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int8Array")
|
||||
Int8Array createInt8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(int length);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint8Array")
|
||||
Uint8Array createUint8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUint8ClampedArray(int length);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint8ClampedArray")
|
||||
Uint8ClampedArray createUintClamped8Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(int length);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int16Array")
|
||||
Int16Array createInt16Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(int length);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Uint16Array")
|
||||
Uint16Array createUint16Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(int length);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Int32Array")
|
||||
Int32Array createInt32Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(int length);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Float32Array")
|
||||
Float32Array createFloat32Array(ArrayBuffer buffer, int offset, int length);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(int length);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(ArrayBuffer buffer);
|
||||
|
||||
@JSConstructor("Float64Array")
|
||||
Float64Array createFloat64Array(ArrayBuffer buffer, int offset, int length);
|
||||
}
|
|
@ -21,8 +21,8 @@ import net.java.html.js.JavaScriptBody;
|
|||
import org.teavm.codegen.NamingStrategy;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.Renderer;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.html4j;
|
|||
|
||||
import net.java.html.js.JavaScriptBody;
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.html4j;
|
||||
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.html4j;
|
|||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -43,42 +43,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
|
|||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-maven-plugin</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-classlib</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-javascript-tests</id>
|
||||
<goals>
|
||||
<goal>build-test-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-test-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<properties>
|
||||
<java.util.Locale.available>en, en_US, en_GB, ru, ru_RU</java.util.Locale.available>
|
||||
</properties>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>**</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
|
|
|
@ -17,7 +17,7 @@ package org.teavm.jso;
|
|||
|
||||
import java.util.Iterator;
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.javascript.ni.InjectedBy;
|
||||
import org.teavm.javascript.spi.InjectedBy;
|
||||
import org.teavm.jso.plugin.JSNativeGenerator;
|
||||
|
||||
/**
|
||||
|
@ -101,6 +101,9 @@ public final class JS {
|
|||
@InjectedBy(JSNativeGenerator.class)
|
||||
public static native JSObject wrap(short num);
|
||||
|
||||
@InjectedBy(JSNativeGenerator.class)
|
||||
public static native JSObject pass(Object obj);
|
||||
|
||||
public static <T extends JSObject> JSArray<T> wrap(T[] array) {
|
||||
JSArray<T> result = createArray(array.length);
|
||||
for (int i = 0; i < array.length; ++i) {
|
||||
|
|
|
@ -18,8 +18,8 @@ package org.teavm.jso.plugin;
|
|||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.*;
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,8 +21,8 @@ import org.teavm.dependency.*;
|
|||
import org.teavm.javascript.ast.ConstantExpr;
|
||||
import org.teavm.javascript.ast.Expr;
|
||||
import org.teavm.javascript.ast.InvocationExpr;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.jso.JS;
|
||||
import org.teavm.model.CallLocation;
|
||||
import org.teavm.model.ClassReader;
|
||||
|
@ -88,6 +88,9 @@ public class JSNativeGenerator implements Injector, DependencyPlugin {
|
|||
}
|
||||
writer.append("))");
|
||||
break;
|
||||
case "pass":
|
||||
context.writeExpr(context.getArgument(0));
|
||||
break;
|
||||
case "wrap":
|
||||
if (methodRef.getDescriptor().parameterType(0).isObject("java.lang.String")) {
|
||||
writer.append("$rt_ustr(");
|
||||
|
|
|
@ -17,8 +17,8 @@ package org.teavm.jso.plugin;
|
|||
|
||||
import java.util.*;
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.ni.PreserveOriginalName;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.javascript.spi.PreserveOriginalName;
|
||||
import org.teavm.jso.*;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.model.instructions.*;
|
||||
|
|
|
@ -13,14 +13,14 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.runtime;
|
||||
package org.teavm.platform.async;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public interface AsyncCallback<T> {
|
||||
void complete(T value);
|
||||
void complete(T result);
|
||||
|
||||
void error(Exception e);
|
||||
void error(Throwable e);
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* 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.platform.plugin;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.dependency.DependencyAgent;
|
||||
import org.teavm.dependency.DependencyPlugin;
|
||||
import org.teavm.dependency.MethodDependency;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.platform.async.AsyncCallback;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public class AsyncMethodGenerator implements Generator, DependencyPlugin {
|
||||
private static final MethodReference completeMethod = new MethodReference(AsyncCallback.class, "complete",
|
||||
Object.class, void.class);
|
||||
private static final MethodReference errorMethod = new MethodReference(AsyncCallback.class, "error",
|
||||
Throwable.class, void.class);
|
||||
|
||||
@Override
|
||||
public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException {
|
||||
MethodReference asyncRef = getAsyncReference(methodRef);
|
||||
writer.append("var callback").ws().append("=").ws().append("function()").ws().append("{}").softNewLine();
|
||||
writer.append("callback.").appendMethod(completeMethod).ws().append("=").ws().append("function($this,").ws()
|
||||
.append("val)").ws().append("{").indent().softNewLine();
|
||||
writer.append("return $return($rt_asyncResult(val));").softNewLine();
|
||||
writer.outdent().append("};").softNewLine();
|
||||
writer.append("callback.").appendMethod(errorMethod).ws().append("=").ws().append("function($this,").ws()
|
||||
.append("e)").ws().append("{").indent().softNewLine();
|
||||
writer.append("return $return($rt_asyncError(e));").softNewLine();
|
||||
writer.outdent().append("};").softNewLine();
|
||||
writer.append("try").ws().append("{").indent().softNewLine();
|
||||
writer.append("return ").appendMethodBody(asyncRef).append('(');
|
||||
ClassReader cls = context.getClassSource().get(methodRef.getClassName());
|
||||
MethodReader method = cls.getMethod(methodRef.getDescriptor());
|
||||
int start = method.hasModifier(ElementModifier.STATIC) ? 1 : 0;
|
||||
for (int i = start; i <= methodRef.parameterCount(); ++i) {
|
||||
writer.append(context.getParameterName(i));
|
||||
writer.append(',').ws();
|
||||
}
|
||||
writer.append("callback);").softNewLine();
|
||||
writer.outdent().append("}").ws().append("catch($e)").ws().append("{").indent().softNewLine();
|
||||
writer.append("return $return($rt_asyncError($e));").softNewLine();
|
||||
writer.outdent().append("}").softNewLine();
|
||||
}
|
||||
|
||||
private MethodReference getAsyncReference(MethodReference methodRef) {
|
||||
ValueType[] signature = new ValueType[methodRef.parameterCount() + 2];
|
||||
for (int i = 0; i < methodRef.parameterCount(); ++i) {
|
||||
signature[i] = methodRef.getDescriptor().parameterType(i);
|
||||
}
|
||||
signature[methodRef.parameterCount()] = ValueType.parse(AsyncCallback.class);
|
||||
signature[methodRef.parameterCount() + 1] = ValueType.VOID;
|
||||
return new MethodReference(methodRef.getClassName(), methodRef.getName(), signature);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void methodAchieved(DependencyAgent checker, MethodDependency method, CallLocation location) {
|
||||
MethodReference asyncRef = getAsyncReference(method.getReference());
|
||||
MethodDependency asyncMethod = checker.linkMethod(asyncRef, location);
|
||||
int paramCount = method.getReference().parameterCount();
|
||||
for (int i = 0; i <= paramCount; ++i) {
|
||||
method.getVariable(i).connect(asyncMethod.getVariable(i));
|
||||
}
|
||||
asyncMethod.use();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* 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.platform.plugin;
|
||||
|
||||
import org.teavm.dependency.PluggableDependency;
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.spi.Async;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.platform.async.AsyncCallback;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public class AsyncMethodProcessor implements ClassHolderTransformer {
|
||||
@Override
|
||||
public void transformClass(ClassHolder cls, ClassReaderSource innerSource, Diagnostics diagnostics) {
|
||||
for (MethodHolder method : cls.getMethods()) {
|
||||
if (method.hasModifier(ElementModifier.NATIVE) &&
|
||||
method.getAnnotations().get(Async.class.getName()) != null &&
|
||||
method.getAnnotations().get(GeneratedBy.class.getName()) == null) {
|
||||
ValueType[] signature = new ValueType[method.parameterCount() + 2];
|
||||
for (int i = 0; i < method.parameterCount(); ++i) {
|
||||
signature[i] = method.parameterType(i);
|
||||
}
|
||||
signature[method.parameterCount()] = ValueType.parse(AsyncCallback.class);
|
||||
signature[method.parameterCount() + 1] = ValueType.VOID;
|
||||
MethodDescriptor asyncDesc = new MethodDescriptor(method.getName(), signature);
|
||||
MethodHolder asyncMethod = cls.getMethod(asyncDesc);
|
||||
if (asyncMethod != null) {
|
||||
if (asyncMethod.hasModifier(ElementModifier.STATIC) !=
|
||||
method.hasModifier(ElementModifier.STATIC)) {
|
||||
diagnostics.error(new CallLocation(method.getReference()), "Methods {{m0}} and {{m1}} must " +
|
||||
"both be either static or non-static",
|
||||
method.getReference(), asyncMethod.getReference());
|
||||
}
|
||||
AnnotationHolder annot = new AnnotationHolder(GeneratedBy.class.getName());
|
||||
annot.getValues().put("value", new AnnotationValue(ValueType.parse(AsyncMethodGenerator.class)));
|
||||
method.getAnnotations().add(annot);
|
||||
annot = new AnnotationHolder(PluggableDependency.class.getName());
|
||||
annot.getValues().put("value", new AnnotationValue(ValueType.parse(AsyncMethodGenerator.class)));
|
||||
method.getAnnotations().add(annot);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,8 +19,8 @@ import java.io.IOException;
|
|||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import org.teavm.codegen.SourceWriter;
|
||||
import org.teavm.javascript.ni.Generator;
|
||||
import org.teavm.javascript.ni.GeneratorContext;
|
||||
import org.teavm.javascript.spi.Generator;
|
||||
import org.teavm.javascript.spi.GeneratorContext;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.platform.metadata.MetadataGenerator;
|
||||
import org.teavm.platform.metadata.MetadataProvider;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.teavm.platform.plugin;
|
||||
|
||||
import org.teavm.diagnostics.Diagnostics;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
import org.teavm.javascript.spi.GeneratedBy;
|
||||
import org.teavm.model.*;
|
||||
import org.teavm.platform.metadata.MetadataProvider;
|
||||
|
||||
|
|
|
@ -29,5 +29,6 @@ public class PlatformPlugin implements TeaVMPlugin {
|
|||
host.add(new ResourceTransformer());
|
||||
host.add(new ResourceAccessorTransformer(host));
|
||||
host.add(new ResourceAccessorDependencyListener());
|
||||
host.add(new AsyncMethodProcessor());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,8 @@ package org.teavm.platform.plugin;
|
|||
import java.io.IOException;
|
||||
import org.teavm.javascript.ast.ConstantExpr;
|
||||
import org.teavm.javascript.ast.Expr;
|
||||
import org.teavm.javascript.ni.Injector;
|
||||
import org.teavm.javascript.ni.InjectorContext;
|
||||
import org.teavm.javascript.spi.Injector;
|
||||
import org.teavm.javascript.spi.InjectorContext;
|
||||
import org.teavm.model.MethodReference;
|
||||
import org.teavm.model.ValueType;
|
||||
|
||||
|
|
4
teavm-tests/.gitignore
vendored
Normal file
4
teavm-tests/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
/target
|
||||
/.settings
|
||||
/.classpath
|
||||
/.project
|
115
teavm-tests/pom.xml
Normal file
115
teavm-tests/pom.xml
Normal file
|
@ -0,0 +1,115 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm</artifactId>
|
||||
<version>0.3.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>teavm-tests</artifactId>
|
||||
|
||||
<name>TeaVM tests</name>
|
||||
<description>Project containing TeaVM tests, as it is impossible to test each module separately</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-classlib</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-platform</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-jso</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-maven-plugin</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-platform</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-javascript-tests</id>
|
||||
<goals>
|
||||
<goal>build-test-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-test-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<properties>
|
||||
<java.util.Locale.available>en, en_US, en_GB, ru, ru_RU</java.util.Locale.available>
|
||||
</properties>
|
||||
<incremental>${teavm.test.incremental}</incremental>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>org/teavm/platform/**/*.java</exclude>
|
||||
<exclude>org/teavm/jso/**/*.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<configuration>
|
||||
<configLocation>../checkstyle.xml</configLocation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user