diff --git a/calclib/.gitignore b/calclib/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/calclib/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/cache.properties b/calclib/.gradle/2.14.1/taskArtifacts/cache.properties
new file mode 100644
index 0000000..786abcc
--- /dev/null
+++ b/calclib/.gradle/2.14.1/taskArtifacts/cache.properties
@@ -0,0 +1 @@
+#Tue Aug 08 14:58:38 EEST 2017
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/cache.properties.lock b/calclib/.gradle/2.14.1/taskArtifacts/cache.properties.lock
new file mode 100644
index 0000000..874e3d7
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/cache.properties.lock differ
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/compilationState.bin b/calclib/.gradle/2.14.1/taskArtifacts/compilationState.bin
new file mode 100644
index 0000000..33d1060
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/compilationState.bin differ
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/fileHashes.bin b/calclib/.gradle/2.14.1/taskArtifacts/fileHashes.bin
new file mode 100644
index 0000000..869a172
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/fileHashes.bin differ
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin b/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin
new file mode 100644
index 0000000..15ae02d
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin differ
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin b/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin
new file mode 100644
index 0000000..93f384a
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin differ
diff --git a/calclib/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin b/calclib/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin
new file mode 100644
index 0000000..c0d6115
Binary files /dev/null and b/calclib/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin
new file mode 100644
index 0000000..52d643f
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock
new file mode 100644
index 0000000..6142967
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin
new file mode 100644
index 0000000..eb29afb
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock
new file mode 100644
index 0000000..b9d17be
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin
new file mode 100644
index 0000000..48ff32b
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock
new file mode 100644
index 0000000..6bf676a
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin
new file mode 100644
index 0000000..eb29afb
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ
diff --git a/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock
new file mode 100644
index 0000000..e9ad769
Binary files /dev/null and b/calclib/.gradle/2.14.1/tasks/_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ
diff --git a/calclib/.idea/compiler.xml b/calclib/.idea/compiler.xml
new file mode 100644
index 0000000..96cc43e
--- /dev/null
+++ b/calclib/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/copyright/profiles_settings.xml b/calclib/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..e7bedf3
--- /dev/null
+++ b/calclib/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/gradle.xml b/calclib/.idea/gradle.xml
new file mode 100644
index 0000000..47bd81f
--- /dev/null
+++ b/calclib/.idea/gradle.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/misc.xml b/calclib/.idea/misc.xml
new file mode 100644
index 0000000..7e15d9d
--- /dev/null
+++ b/calclib/.idea/misc.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/modules.xml b/calclib/.idea/modules.xml
new file mode 100644
index 0000000..edd743e
--- /dev/null
+++ b/calclib/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/runConfigurations.xml b/calclib/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/calclib/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/.idea/workspace.xml b/calclib/.idea/workspace.xml
new file mode 100644
index 0000000..bf22917
--- /dev/null
+++ b/calclib/.idea/workspace.xml
@@ -0,0 +1,2025 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1502194549378
+
+
+ 1502194549378
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/build.gradle b/calclib/build.gradle
new file mode 100644
index 0000000..b505838
--- /dev/null
+++ b/calclib/build.gradle
@@ -0,0 +1,104 @@
+apply plugin: 'com.android.model.library'
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle-experimental:0.8.1'
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+model {
+ android {
+ compileSdkVersion = 23
+ buildToolsVersion = "25.0.2"
+
+ defaultConfig.with {
+ minSdkVersion.apiLevel = 17
+ targetSdkVersion.apiLevel = 25
+ }
+
+ lintOptions.with {
+ abortOnError = false
+ }
+ }
+
+ android.buildTypes {
+ release {
+ minifyEnabled = false
+ }
+ }
+
+ android.ndk {
+ cppFlags.addAll(["-I${file("src/main/")}".toString(),
+ "-I${file("src/main/cpp/include")}".toString()
+ ])
+
+ CFlags.addAll(["-I${file("src/main/cpp")}".toString(),
+ "-I${file("src/main/cpp/include")}".toString()
+ ])
+
+ cppFlags.addAll(["-std=c++11", ])//"-fexceptions", "-fno-builtin-stpcpy",])
+
+ CFlags.addAll(["-Wno-error=format-security", "-g", "-fno-builtin-stpcpy"])
+
+// ldLibs.addAll(["android", "dl", "log", "atomic", "z"])
+
+ ldFlags.addAll(["-Wl,--allow-multiple-definition"])
+
+ toolchain = "clang"
+ stl = "c++_static"
+
+// abiFilters.addAll(["armeabi-v7a", "x86", "arm64-v8a"])
+ abiFilters.addAll(["x86"])
+// abiFilters.addAll(["arm64-v8a", "x86", "armeabi-v7a"])
+ moduleName = "calcLib"
+ }
+
+ android.sources {
+ main {
+ java {
+ source {
+ srcDirs 'src/main/java'
+ }
+ }
+
+ jni {
+ source {
+ srcDirs 'src/main/cpp'
+ }
+
+ exportedHeaders {
+ srcDir "src/main/cpp/include"
+ }
+
+ dependencies {
+ library "NativeScript" linkage "shared"
+ }
+ }
+ }
+ }
+
+ repositories {
+ prebuilt(PrebuiltLibraries) {
+ NativeScript {
+ headers.srcDir "src/main/cpp/include"
+ binaries.withType(SharedLibraryBinary) {
+ def filep = file("src/main/libs/${targetPlatform.getName()}/libNativeScript.so")
+ def exists = filep.exists()
+ if (exists) {
+ sharedLibraryFile = filep
+ }
+ println "~~~~~ FILE PATH: src/main/libs/${targetPlatform.getName()}/libNativeScript.so exists: ${exists}"
+ }
+ }
+ }
+ }
+}
diff --git a/calclib/build.properties b/calclib/build.properties
new file mode 100644
index 0000000..715fd3b
--- /dev/null
+++ b/calclib/build.properties
@@ -0,0 +1 @@
+android.useDeprecatedNdk = true
\ No newline at end of file
diff --git a/calclib/calclib.iml b/calclib/calclib.iml
new file mode 100644
index 0000000..fab99ca
--- /dev/null
+++ b/calclib/calclib.iml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/calclib/gradle/wrapper/gradle-wrapper.jar b/calclib/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
Binary files /dev/null and b/calclib/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/calclib/gradle/wrapper/gradle-wrapper.properties b/calclib/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..f336f77
--- /dev/null
+++ b/calclib/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Apr 12 10:33:26 EEST 2016
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/calclib/gradlew b/calclib/gradlew
new file mode 100644
index 0000000..91a7e26
--- /dev/null
+++ b/calclib/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/calclib/gradlew.bat b/calclib/gradlew.bat
new file mode 100644
index 0000000..8a0b282
--- /dev/null
+++ b/calclib/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/calclib/local.properties b/calclib/local.properties
new file mode 100644
index 0000000..2f47f64
--- /dev/null
+++ b/calclib/local.properties
@@ -0,0 +1,12 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Tue Aug 08 15:19:46 EEST 2017
+ndk.dir=C\:\\NDK\\ndk12b
+sdk.dir=C\:\\Android\\sdk_2.0
diff --git a/calclib/proguard-rules.pro b/calclib/proguard-rules.pro
new file mode 100644
index 0000000..28b3f2a
--- /dev/null
+++ b/calclib/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Android\sdk_2.0/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/calclib/src/main/AndroidManifest.xml b/calclib/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..41b0ef3
--- /dev/null
+++ b/calclib/src/main/AndroidManifest.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/calclib/src/main/cpp/Calc.cpp b/calclib/src/main/cpp/Calc.cpp
new file mode 100644
index 0000000..3c90a0c
--- /dev/null
+++ b/calclib/src/main/cpp/Calc.cpp
@@ -0,0 +1,54 @@
+#include
+#include
+#include
+#include
+#include "include/v8.h"
+
+void AddFuncCallback(const v8::FunctionCallbackInfo& args);
+
+extern "C" void NSMain(const v8::FunctionCallbackInfo& args)
+{
+ auto isolate = args.GetIsolate();
+
+ auto len = args.Length();
+
+ if (len != 5)
+ {
+ auto errMsg = v8::String::NewFromUtf8(isolate, "Wrong number of arguments (expected 5)");
+ auto err = v8::Exception::Error(errMsg);
+ isolate->ThrowException(err);
+ return;
+ }
+
+ auto exports = args[1].As();
+
+ auto ft = v8::FunctionTemplate::New(isolate, AddFuncCallback);
+ auto ctx = isolate->GetCurrentContext();
+ auto maybeFunc = ft->GetFunction(ctx);
+ if (maybeFunc.IsEmpty())
+ {
+ auto errMsg = v8::String::NewFromUtf8(isolate, "Cannot create 'add' function");
+ auto err = v8::Exception::Error(errMsg);
+ isolate->ThrowException(err);
+ return;
+ }
+
+ auto func = maybeFunc.ToLocalChecked();
+
+ auto propName = v8::String::NewFromUtf8(isolate, "add");
+ auto result = exports->Set(ctx, propName, func);
+}
+
+void AddFuncCallback(const v8::FunctionCallbackInfo& args)
+{
+ int result = 0;
+
+ auto len = args.Length();
+
+ if ((len == 2) && args[0]->IsInt32() && args[1]->IsInt32())
+ {
+ result = args[0]->Int32Value() + args[1]->Int32Value();
+ }
+
+ args.GetReturnValue().Set(v8::Int32::New(args.GetIsolate(), result));
+}
\ No newline at end of file
diff --git a/calclib/src/main/cpp/include/V8NativeScriptExtension.h b/calclib/src/main/cpp/include/V8NativeScriptExtension.h
new file mode 100644
index 0000000..53b721d
--- /dev/null
+++ b/calclib/src/main/cpp/include/V8NativeScriptExtension.h
@@ -0,0 +1,25 @@
+#include "v8.h"
+
+namespace v8 {
+
+ class NativeScriptExtension {
+ public:
+ static uint8_t* GetAddress(const v8::Local& obj);
+
+ static v8::Local* GetClosureObjects(v8::Isolate *isolate, const v8::Local& func, int *length);
+
+ static void ReleaseClosureObjects(v8::Local* closureObjects);
+
+ static void GetAssessorPair(v8::Isolate *isolate, const v8::Local& obj, const v8::Local& propName, v8::Local& getter, v8::Local& setter);
+
+ static v8::Local GetPropertyKeys(v8::Isolate *isolate, const v8::Local& context, const v8::Local& object, bool& success);
+
+ static int GetInternalFieldCount(const v8::Local& object);
+
+ static void CpuFeaturesProbe(bool cross_compile);
+ private:
+ NativeScriptExtension();
+
+ // static v8::internal::Handle GetEnumPropertyKeys(const v8::internal::Handle& object, bool cache_result);
+ };
+}
diff --git a/calclib/src/main/cpp/include/libplatform/libplatform-export.h b/calclib/src/main/cpp/include/libplatform/libplatform-export.h
new file mode 100644
index 0000000..1561843
--- /dev/null
+++ b/calclib/src/main/cpp/include/libplatform/libplatform-export.h
@@ -0,0 +1,29 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
+#define V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
+
+#if defined(_WIN32)
+
+#ifdef BUILDING_V8_PLATFORM_SHARED
+#define V8_PLATFORM_EXPORT __declspec(dllexport)
+#elif USING_V8_PLATFORM_SHARED
+#define V8_PLATFORM_EXPORT __declspec(dllimport)
+#else
+#define V8_PLATFORM_EXPORT
+#endif // BUILDING_V8_PLATFORM_SHARED
+
+#else // defined(_WIN32)
+
+// Setup for Linux shared library export.
+#ifdef BUILDING_V8_PLATFORM_SHARED
+#define V8_PLATFORM_EXPORT __attribute__((visibility("default")))
+#else
+#define V8_PLATFORM_EXPORT
+#endif
+
+#endif // defined(_WIN32)
+
+#endif // V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
diff --git a/calclib/src/main/cpp/include/libplatform/libplatform.h b/calclib/src/main/cpp/include/libplatform/libplatform.h
new file mode 100644
index 0000000..55a1020
--- /dev/null
+++ b/calclib/src/main/cpp/include/libplatform/libplatform.h
@@ -0,0 +1,66 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_LIBPLATFORM_LIBPLATFORM_H_
+#define V8_LIBPLATFORM_LIBPLATFORM_H_
+
+#include "libplatform/libplatform-export.h"
+#include "libplatform/v8-tracing.h"
+#include "v8-platform.h" // NOLINT(build/include)
+
+namespace v8 {
+namespace platform {
+
+enum class IdleTaskSupport { kDisabled, kEnabled };
+
+/**
+ * Returns a new instance of the default v8::Platform implementation.
+ *
+ * The caller will take ownership of the returned pointer. |thread_pool_size|
+ * is the number of worker threads to allocate for background jobs. If a value
+ * of zero is passed, a suitable default based on the current number of
+ * processors online will be chosen.
+ * If |idle_task_support| is enabled then the platform will accept idle
+ * tasks (IdleTasksEnabled will return true) and will rely on the embedder
+ * calling v8::platform::RunIdleTasks to process the idle tasks.
+ */
+V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform(
+ int thread_pool_size = 0,
+ IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled);
+
+/**
+ * Pumps the message loop for the given isolate.
+ *
+ * The caller has to make sure that this is called from the right thread.
+ * Returns true if a task was executed, and false otherwise. This call does
+ * not block if no task is pending. The |platform| has to be created using
+ * |CreateDefaultPlatform|.
+ */
+V8_PLATFORM_EXPORT bool PumpMessageLoop(v8::Platform* platform,
+ v8::Isolate* isolate);
+
+/**
+ * Runs pending idle tasks for at most |idle_time_in_seconds| seconds.
+ *
+ * The caller has to make sure that this is called from the right thread.
+ * This call does not block if no task is pending. The |platform| has to be
+ * created using |CreateDefaultPlatform|.
+ */
+V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
+ v8::Isolate* isolate,
+ double idle_time_in_seconds);
+
+/**
+ * Attempts to set the tracing controller for the given platform.
+ *
+ * The |platform| has to be created using |CreateDefaultPlatform|.
+ */
+V8_PLATFORM_EXPORT void SetTracingController(
+ v8::Platform* platform,
+ v8::platform::tracing::TracingController* tracing_controller);
+
+} // namespace platform
+} // namespace v8
+
+#endif // V8_LIBPLATFORM_LIBPLATFORM_H_
diff --git a/calclib/src/main/cpp/include/libplatform/v8-tracing.h b/calclib/src/main/cpp/include/libplatform/v8-tracing.h
new file mode 100644
index 0000000..902f8ea
--- /dev/null
+++ b/calclib/src/main/cpp/include/libplatform/v8-tracing.h
@@ -0,0 +1,270 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_LIBPLATFORM_V8_TRACING_H_
+#define V8_LIBPLATFORM_V8_TRACING_H_
+
+#include
+#include
+#include
+#include
+
+#include "libplatform/libplatform-export.h"
+#include "v8-platform.h" // NOLINT(build/include)
+
+namespace v8 {
+
+namespace base {
+class Mutex;
+} // namespace base
+
+namespace platform {
+namespace tracing {
+
+const int kTraceMaxNumArgs = 2;
+
+class V8_PLATFORM_EXPORT TraceObject {
+ public:
+ union ArgValue {
+ bool as_bool;
+ uint64_t as_uint;
+ int64_t as_int;
+ double as_double;
+ const void* as_pointer;
+ const char* as_string;
+ };
+
+ TraceObject() {}
+ ~TraceObject();
+ void Initialize(
+ char phase, const uint8_t* category_enabled_flag, const char* name,
+ const char* scope, uint64_t id, uint64_t bind_id, int num_args,
+ const char** arg_names, const uint8_t* arg_types,
+ const uint64_t* arg_values,
+ std::unique_ptr* arg_convertables,
+ unsigned int flags);
+ void UpdateDuration();
+ void InitializeForTesting(
+ char phase, const uint8_t* category_enabled_flag, const char* name,
+ const char* scope, uint64_t id, uint64_t bind_id, int num_args,
+ const char** arg_names, const uint8_t* arg_types,
+ const uint64_t* arg_values,
+ std::unique_ptr* arg_convertables,
+ unsigned int flags, int pid, int tid, int64_t ts, int64_t tts,
+ uint64_t duration, uint64_t cpu_duration);
+
+ int pid() const { return pid_; }
+ int tid() const { return tid_; }
+ char phase() const { return phase_; }
+ const uint8_t* category_enabled_flag() const {
+ return category_enabled_flag_;
+ }
+ const char* name() const { return name_; }
+ const char* scope() const { return scope_; }
+ uint64_t id() const { return id_; }
+ uint64_t bind_id() const { return bind_id_; }
+ int num_args() const { return num_args_; }
+ const char** arg_names() { return arg_names_; }
+ uint8_t* arg_types() { return arg_types_; }
+ ArgValue* arg_values() { return arg_values_; }
+ std::unique_ptr* arg_convertables() {
+ return arg_convertables_;
+ }
+ unsigned int flags() const { return flags_; }
+ int64_t ts() { return ts_; }
+ int64_t tts() { return tts_; }
+ uint64_t duration() { return duration_; }
+ uint64_t cpu_duration() { return cpu_duration_; }
+
+ private:
+ int pid_;
+ int tid_;
+ char phase_;
+ const char* name_;
+ const char* scope_;
+ const uint8_t* category_enabled_flag_;
+ uint64_t id_;
+ uint64_t bind_id_;
+ int num_args_ = 0;
+ const char* arg_names_[kTraceMaxNumArgs];
+ uint8_t arg_types_[kTraceMaxNumArgs];
+ ArgValue arg_values_[kTraceMaxNumArgs];
+ std::unique_ptr
+ arg_convertables_[kTraceMaxNumArgs];
+ char* parameter_copy_storage_ = nullptr;
+ unsigned int flags_;
+ int64_t ts_;
+ int64_t tts_;
+ uint64_t duration_;
+ uint64_t cpu_duration_;
+
+ // Disallow copy and assign
+ TraceObject(const TraceObject&) = delete;
+ void operator=(const TraceObject&) = delete;
+};
+
+class V8_PLATFORM_EXPORT TraceWriter {
+ public:
+ TraceWriter() {}
+ virtual ~TraceWriter() {}
+ virtual void AppendTraceEvent(TraceObject* trace_event) = 0;
+ virtual void Flush() = 0;
+
+ static TraceWriter* CreateJSONTraceWriter(std::ostream& stream);
+
+ private:
+ // Disallow copy and assign
+ TraceWriter(const TraceWriter&) = delete;
+ void operator=(const TraceWriter&) = delete;
+};
+
+class V8_PLATFORM_EXPORT TraceBufferChunk {
+ public:
+ explicit TraceBufferChunk(uint32_t seq);
+
+ void Reset(uint32_t new_seq);
+ bool IsFull() const { return next_free_ == kChunkSize; }
+ TraceObject* AddTraceEvent(size_t* event_index);
+ TraceObject* GetEventAt(size_t index) { return &chunk_[index]; }
+
+ uint32_t seq() const { return seq_; }
+ size_t size() const { return next_free_; }
+
+ static const size_t kChunkSize = 64;
+
+ private:
+ size_t next_free_ = 0;
+ TraceObject chunk_[kChunkSize];
+ uint32_t seq_;
+
+ // Disallow copy and assign
+ TraceBufferChunk(const TraceBufferChunk&) = delete;
+ void operator=(const TraceBufferChunk&) = delete;
+};
+
+class V8_PLATFORM_EXPORT TraceBuffer {
+ public:
+ TraceBuffer() {}
+ virtual ~TraceBuffer() {}
+
+ virtual TraceObject* AddTraceEvent(uint64_t* handle) = 0;
+ virtual TraceObject* GetEventByHandle(uint64_t handle) = 0;
+ virtual bool Flush() = 0;
+
+ static const size_t kRingBufferChunks = 1024;
+
+ static TraceBuffer* CreateTraceBufferRingBuffer(size_t max_chunks,
+ TraceWriter* trace_writer);
+
+ private:
+ // Disallow copy and assign
+ TraceBuffer(const TraceBuffer&) = delete;
+ void operator=(const TraceBuffer&) = delete;
+};
+
+// Options determines how the trace buffer stores data.
+enum TraceRecordMode {
+ // Record until the trace buffer is full.
+ RECORD_UNTIL_FULL,
+
+ // Record until the user ends the trace. The trace buffer is a fixed size
+ // and we use it as a ring buffer during recording.
+ RECORD_CONTINUOUSLY,
+
+ // Record until the trace buffer is full, but with a huge buffer size.
+ RECORD_AS_MUCH_AS_POSSIBLE,
+
+ // Echo to console. Events are discarded.
+ ECHO_TO_CONSOLE,
+};
+
+class V8_PLATFORM_EXPORT TraceConfig {
+ public:
+ typedef std::vector StringList;
+
+ static TraceConfig* CreateDefaultTraceConfig();
+
+ TraceConfig() : enable_systrace_(false), enable_argument_filter_(false) {}
+ TraceRecordMode GetTraceRecordMode() const { return record_mode_; }
+ bool IsSystraceEnabled() const { return enable_systrace_; }
+ bool IsArgumentFilterEnabled() const { return enable_argument_filter_; }
+
+ void SetTraceRecordMode(TraceRecordMode mode) { record_mode_ = mode; }
+ void EnableSystrace() { enable_systrace_ = true; }
+ void EnableArgumentFilter() { enable_argument_filter_ = true; }
+
+ void AddIncludedCategory(const char* included_category);
+
+ bool IsCategoryGroupEnabled(const char* category_group) const;
+
+ private:
+ TraceRecordMode record_mode_;
+ bool enable_systrace_ : 1;
+ bool enable_argument_filter_ : 1;
+ StringList included_categories_;
+
+ // Disallow copy and assign
+ TraceConfig(const TraceConfig&) = delete;
+ void operator=(const TraceConfig&) = delete;
+};
+
+class V8_PLATFORM_EXPORT TracingController {
+ public:
+ enum Mode { DISABLED = 0, RECORDING_MODE };
+
+ // The pointer returned from GetCategoryGroupEnabledInternal() points to a
+ // value with zero or more of the following bits. Used in this class only.
+ // The TRACE_EVENT macros should only use the value as a bool.
+ // These values must be in sync with macro values in TraceEvent.h in Blink.
+ enum CategoryGroupEnabledFlags {
+ // Category group enabled for the recording mode.
+ ENABLED_FOR_RECORDING = 1 << 0,
+ // Category group enabled by SetEventCallbackEnabled().
+ ENABLED_FOR_EVENT_CALLBACK = 1 << 2,
+ // Category group enabled to export events to ETW.
+ ENABLED_FOR_ETW_EXPORT = 1 << 3
+ };
+
+ TracingController();
+ ~TracingController();
+ void Initialize(TraceBuffer* trace_buffer);
+ const uint8_t* GetCategoryGroupEnabled(const char* category_group);
+ static const char* GetCategoryGroupName(const uint8_t* category_enabled_flag);
+ uint64_t AddTraceEvent(
+ char phase, const uint8_t* category_enabled_flag, const char* name,
+ const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
+ const char** arg_names, const uint8_t* arg_types,
+ const uint64_t* arg_values,
+ std::unique_ptr* arg_convertables,
+ unsigned int flags);
+ void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
+ const char* name, uint64_t handle);
+
+ void StartTracing(TraceConfig* trace_config);
+ void StopTracing();
+
+ void AddTraceStateObserver(Platform::TraceStateObserver* observer);
+ void RemoveTraceStateObserver(Platform::TraceStateObserver* observer);
+
+ private:
+ const uint8_t* GetCategoryGroupEnabledInternal(const char* category_group);
+ void UpdateCategoryGroupEnabledFlag(size_t category_index);
+ void UpdateCategoryGroupEnabledFlags();
+
+ std::unique_ptr trace_buffer_;
+ std::unique_ptr trace_config_;
+ std::unique_ptr mutex_;
+ std::unordered_set observers_;
+ Mode mode_ = DISABLED;
+
+ // Disallow copy and assign
+ TracingController(const TracingController&) = delete;
+ void operator=(const TracingController&) = delete;
+};
+
+} // namespace tracing
+} // namespace platform
+} // namespace v8
+
+#endif // V8_LIBPLATFORM_V8_TRACING_H_
diff --git a/calclib/src/main/cpp/include/v8-debug.h b/calclib/src/main/cpp/include/v8-debug.h
new file mode 100644
index 0000000..6385a31
--- /dev/null
+++ b/calclib/src/main/cpp/include/v8-debug.h
@@ -0,0 +1,287 @@
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_V8_DEBUG_H_
+#define V8_V8_DEBUG_H_
+
+#include "v8.h" // NOLINT(build/include)
+
+/**
+ * Debugger support for the V8 JavaScript engine.
+ */
+namespace v8 {
+
+// Debug events which can occur in the V8 JavaScript engine.
+enum DebugEvent {
+ Break = 1,
+ Exception = 2,
+ NewFunction = 3,
+ BeforeCompile = 4,
+ AfterCompile = 5,
+ CompileError = 6,
+ AsyncTaskEvent = 7,
+};
+
+class V8_EXPORT Debug {
+ public:
+ /**
+ * A client object passed to the v8 debugger whose ownership will be taken by
+ * it. v8 is always responsible for deleting the object.
+ */
+ class ClientData {
+ public:
+ virtual ~ClientData() {}
+ };
+
+
+ /**
+ * A message object passed to the debug message handler.
+ */
+ class Message {
+ public:
+ /**
+ * Check type of message.
+ */
+ virtual bool IsEvent() const = 0;
+ virtual bool IsResponse() const = 0;
+ virtual DebugEvent GetEvent() const = 0;
+
+ /**
+ * Indicate whether this is a response to a continue command which will
+ * start the VM running after this is processed.
+ */
+ virtual bool WillStartRunning() const = 0;
+
+ /**
+ * Access to execution state and event data. Don't store these cross
+ * callbacks as their content becomes invalid. These objects are from the
+ * debugger event that started the debug message loop.
+ */
+ virtual Local