Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved startup and auto-detection of Erlang environment + Misc changes #62

Merged
merged 8 commits into from Apr 14, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 17 additions & 0 deletions .externalToolBuilders/Kilim Weaver.launch
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="true"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM Contents (MacOS X Default)"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.ant.internal.launching.remote.InternalAntRunner"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="erjang"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/erjang/weave.xml}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/erjang}"/>
<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/>
</launchConfiguration>
5 changes: 4 additions & 1 deletion .gitignore
Expand Up @@ -7,4 +7,7 @@ classes
target
*.beam
src/main/java/erjang/beam/interpreter/Interpreter.java
src/test/java/erjang/*_TEST.java
src/test/java/erjang/*_TEST.java
otp-*.jar
erjang.log*
*.launch
14 changes: 7 additions & 7 deletions .project
Expand Up @@ -6,18 +6,18 @@
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.dltk.core.scriptbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.erjang.kilim_builder.KilimBuilder</name>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/Kilim Weaver.launch</value>
</dictionary>
</arguments>
</buildCommand>
</buildSpec>
Expand Down
2 changes: 1 addition & 1 deletion build.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<project name="erjang" default="all">
<property name="erjang.version" value="0.1" />
<property name="erjang.version" value="0.2" />
<property file="erjang_cfg.properties" />

<path id="erjang.classpath">
Expand Down
10 changes: 1 addition & 9 deletions ej
Expand Up @@ -7,23 +7,15 @@ EJ_CMD=`which "$0"`
while LINK=`readlink "$EJ_CMD"`; do EJ_CMD=$LINK; done
ERJANG_DIR=`dirname "$EJ_CMD"`

source "$ERJANG_DIR/env_cfg"

## -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=n,suspend=n \

exec java \
-server \
-Xmx1g -Xss50m \
-XX:PermSize=128m \
-Derjang.configfile="$PROP_FILE" \
-Derjang.erts.version="$ERTS_VSN" \
-Derjang.otp.version="$OTP_VSN" \
-jar $ERJANG_DIR/erjang-0.1.jar \
-jar $ERJANG_DIR/erjang-0.2.jar \
\
-progname ej \
-home "$HOME" \
-root "$ERL_ROOT" \
+A 10 \
+S 1 \
+e "$ERTS_VSN" \
"$@"
10 changes: 1 addition & 9 deletions ejc
Expand Up @@ -7,8 +7,6 @@ EJC_CMD=`which "$0"`
while LINK=`readlink "$EJC_CMD"`; do EJC_CMD=$LINK; done
ERJANG_DIR=`dirname "$EJC_CMD"`

source "$ERJANG_DIR/env_cfg"

###########################################################
# OS X - specific config
if [[ $(uname) == "Darwin" ]]; then
Expand All @@ -24,14 +22,8 @@ exec java \
-Xmx2g \
$OSX_DOCK_ICON \
$OSX_DOCK_NAME \
-Derjang.configfile="$PROP_FILE" \
-Derjang.erts.version="$ERTS_VSN" \
-Derjang.otp.version="$OTP_VSN" \
-cp "$ERJANG_DIR/erjang-0.1.jar" erjang.console.ERLConsole \
-cp "$ERJANG_DIR/erjang-0.2.jar" erjang.console.ERLConsole \
\
-root "$ERL_ROOT" \
+A 10 \
+S 1 \
+e "$ERTS_VSN" \
-home "$HOME" \
"$@"
6 changes: 3 additions & 3 deletions erjang_cfg.properties
@@ -1,6 +1,6 @@
erjang.otp.root = /usr/local/lib/erlang
erjang.erts.version = 5.8.3
erjang.otp.version = R14B02
#erjang.otp.root = /usr/local/lib/erlang
#erjang.erts.version = 5.8.3
#erjang.otp.version = R14B02

# erjang.debug.port=true
# erjang.debug.inet=true
Expand Down
2 changes: 1 addition & 1 deletion erl.cmd
Expand Up @@ -2,7 +2,7 @@

IF "x%OTPROOT%" == "x" SET OTPROOT="C:/Program Files/erl5.7.5"

java -cp erjang-0.1.jar ^
java -cp erjang-0.2.jar ^
erjang.Main ^
-root %OTPROOT% ^
%1 %2 %3 %4 %5 %6 %7 %8 %9
2 changes: 1 addition & 1 deletion fib_test.sh
@@ -1,3 +1,3 @@
#!/bin/sh

java -server -cp erjang-0.1.jar -Derjpath=./src/main/erl/preloaded/ebin:src/main/erl erjang.Erj fib:main
java -server -cp erjang-0.2.jar -Derjpath=./src/main/erl/preloaded/ebin:src/main/erl erjang.Erj fib:main
7 changes: 6 additions & 1 deletion src/main/java/erjang/ECons.java
Expand Up @@ -21,14 +21,15 @@
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import erjang.m.ets.EMatchContext;
import erjang.m.ets.EPattern;
import erjang.m.ets.ETermPattern;

public abstract class ECons extends EObject {
public abstract class ECons extends EObject implements Iterable<EObject> {

@Override
int cmp_order() {
Expand Down Expand Up @@ -241,4 +242,8 @@ public void collectCharList(CharCollector out)
} else tail.collectCharList(out);
}

@Override
public Iterator<EObject> iterator() {
return new EObjectIterator(this);
}
}
58 changes: 58 additions & 0 deletions src/main/java/erjang/EObjectIterator.java
@@ -0,0 +1,58 @@
package erjang;

import java.util.Iterator;
import java.util.NoSuchElementException;


public class EObjectIterator implements Iterator<EObject> {
private EObject object = null;

public EObjectIterator(EObject object) {
this.object = object;
}

/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
if (object == null) {
return false;
}
return !object.isNil();
}

/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public EObject next() {
if ((object == null)
|| object.isNil()) {
throw new NoSuchElementException();
}

EObject next;

ECons cons = object.testCons();
if ((cons != null)
// TODO how to handle EString? return each character? Or return it as single element only?
// for now we don't treat EString as collection, but as single element
&& !(cons instanceof EString)) {
next = cons.head();
object = cons.tail();
}
else {
// simple object, return it and set next object to null
next = object;
object = null;
}
return next;
}

/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
// not supported
throw new UnsupportedOperationException();
}
}
16 changes: 15 additions & 1 deletion src/main/java/erjang/ERT.java
Expand Up @@ -626,7 +626,7 @@ public static EFun resolve_fun(EObject mod, EObject fun, int arity) {

final EFun pfun = EModuleManager.resolve(new FunID(pmod, f, arity+1));

return EFun.get_fun_with_handler(m.toString(), f.toString(), arity, new EFunHandler() {
return EFun.get_fun_with_handler(pmod.toString(), f.toString(), arity, new EFunHandler() {
@Override
public EObject invoke(EProc proc, EObject[] args) throws Pausable {
EObject[] real_args = new EObject[args.length+1];
Expand Down Expand Up @@ -1141,4 +1141,18 @@ public void write(byte[] b, int off, int len) throws IOException {
}
}

/**
* contains versions, paths and other information.
* use {@link ERT#setRuntimeInfo(RuntimeInfo)} to set this field.
*/
public static RuntimeInfo runtime_info = null;

public static void setRuntimeInfo(RuntimeInfo info) {
// TODO perform synchronization? We usually set this
// field only once from Main before ERT is started
runtime_info = info;
if (runtime_info != null) {
System.setProperty("erjang.path", runtime_info.erl_bootstrap_ebindir);
}
}
}
4 changes: 2 additions & 2 deletions src/main/java/erjang/ErjangConfig.java
Expand Up @@ -36,9 +36,9 @@ public class ErjangConfig {

static {
String configFileName = System.getProperty("erjang.configfile");
if (configFileName != null) {
if (configFileName != null && configFileName.trim().length() > 0) {
try {
FileInputStream in = new FileInputStream(configFileName);
FileInputStream in = new FileInputStream(configFileName.trim());
try {
Properties properties = new Properties();
properties.load(in);
Expand Down