|
From: <ha...@us...> - 2008-07-28 00:13:03
|
Revision: 2099
http://cogkit.svn.sourceforge.net/cogkit/?rev=2099&view=rev
Author: hategan
Date: 2008-07-28 00:12:58 +0000 (Mon, 28 Jul 2008)
Log Message:
-----------
and more...
Modified Paths:
--------------
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/Loader.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/KException.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/Print.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Arguments.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Context.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/NativeCallable.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Signature.java
Added Paths:
-----------
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/TestRunner.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/list/
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/list/Lst.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/NotEquals.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/AltCallable.java
branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Nil.java
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/Loader.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/Loader.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/Loader.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -41,8 +41,10 @@
public static final String ARG_CSTDOUT = "stdoutUnordered";
public static void main(String[] argv) {
- //new Trr().trr();
- //System.exit(0);
+ System.exit(run(argv));
+ }
+
+ public static int run(String[] argv) {
ArgumentParser ap = buildArgumentParser();
boolean debug = false, cache = false;
long start = System.currentTimeMillis();
@@ -51,7 +53,7 @@
ap.parse(argv);
if (ap.isPresent(ARG_HELP)) {
ap.usage();
- System.exit(0);
+ return 0;
}
if (ap.isPresent(ARG_SHOWSTATS)) {
Configuration.getDefault().set(Configuration.SHOW_STATISTICS, true);
@@ -76,13 +78,13 @@
}
if (ap.hasValue(ARG_EXECUTE)) {
if (ap.hasValue(ArgumentParser.DEFAULT)) {
- error("Cannot use both -" + ARG_EXECUTE + " and a file");
+ return error("Cannot use both -" + ARG_EXECUTE + " and a file");
}
source = ap.getStringValue(ARG_EXECUTE);
}
else {
if (!ap.hasValue(ArgumentParser.DEFAULT)) {
- error("No project specified");
+ return error("No project specified");
}
project = ap.getStringValue(ArgumentParser.DEFAULT);
}
@@ -90,7 +92,7 @@
catch (ArgumentParserException e) {
System.err.println("Error parsing arguments: " + e.getMessage() + "\n");
ap.usage();
- System.exit(1);
+ return 1;
}
boolean runerror = false;
@@ -137,7 +139,7 @@
/ 1024 + "KB");
}
- System.exit(runerror ? 2 : 0);
+ return(runerror ? 2 : 0);
}
public static ElementTree load(String project) throws SpecificationException, IOException {
@@ -156,6 +158,7 @@
ElementTree source;
if (xml) {
source = XMLConverter.readSource(reader, name);
+ //source = XMLConverter.readSource(reader, name);
}
else {
source = XMLConverter.readSource(new KarajanTranslator(reader, name).translate(),
@@ -198,9 +201,9 @@
return ap;
}
- protected static void error(final String err) {
+ protected static int error(final String err) {
System.err.println(err);
- System.exit(1);
+ return 1;
}
private static void installKeyboardHooks() {
Added: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/TestRunner.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/TestRunner.java (rev 0)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/TestRunner.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -0,0 +1,85 @@
+//----------------------------------------------------------------------
+//This code is developed as part of the Java CoG Kit project
+//The terms of the license can be found at http://www.cogkit.org/license
+//This message may not be removed or altered.
+//----------------------------------------------------------------------
+
+/*
+ * Created on Jul 10, 2008
+ */
+package org.globus.cog.karajan;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+public class TestRunner {
+
+ public static void main(String[] args) {
+ try {
+ if (args.length < 2) {
+ error("Usage: test-runner <file> <count>");
+ }
+ String name = args[0];
+ int count = Integer.parseInt(args[1]);
+ PrintStream outSave = System.out;
+ PrintStream errSave = System.err;
+ for (int i = 0; i < count; i++) {
+ PrintStream ow = new PrintStream(new FileOutputStream(name + ".out"));
+ System.setOut(ow);
+ System.setErr(ow);
+ int exit = Loader.run(new String[] { "-intermediate", name });
+ System.setOut(outSave);
+ System.setErr(errSave);
+ if (exit != 0) {
+ System.err.println("NON-ZERO EXIT CODE");
+ System.exit(2);
+ }
+ if (!compareOutputToExpected(name)) {
+ System.err.println("Output differs");
+ System.exit(1);
+ }
+ }
+ System.out.println();
+ System.exit(0);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ System.exit(3);
+ }
+ }
+
+ private static boolean compareOutputToExpected(String name) throws IOException {
+ File expected = new File(name + ".expected");
+ File out = new File(name + ".out");
+ if (!expected.exists()) {
+ System.out.print("n.");
+ return true;
+ }
+
+ BufferedReader bre = new BufferedReader(new FileReader(expected));
+ BufferedReader bro = new BufferedReader(new FileReader(out));
+ String line = bre.readLine();
+ while (line != null) {
+ if (!line.equals(bro.readLine())) {
+ return false;
+ }
+ line = bre.readLine();
+ }
+ if (bro.readLine() != null) {
+ return false;
+ }
+ else {
+ System.out.print("o.");
+ return true;
+ }
+ }
+
+ private static void error(String message) {
+ System.err.println(message);
+ System.exit(1);
+ }
+}
Added: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/list/Lst.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/list/Lst.java (rev 0)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/list/Lst.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -0,0 +1,276 @@
+//----------------------------------------------------------------------
+//This code is developed as part of the Java CoG Kit project
+//The terms of the license can be found at http://www.cogkit.org/license
+//This message may not be removed or altered.
+//----------------------------------------------------------------------
+
+/*
+ * Created on Jul 24, 2008
+ */
+package org.globus.cog.karajan.lib.list;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.globus.cog.karajan.compiler.QName;
+import org.globus.cog.karajan.compiler.Type;
+import org.globus.cog.karajan.compiler.types.SimpleType;
+import org.globus.cog.karajan.compiler.types.Types;
+import org.globus.cog.karajan.compiler.types.UnknownType;
+import org.globus.cog.karajan.compiler.types.UserType;
+import org.globus.cog.karajan.runtime.Arguments;
+import org.globus.cog.karajan.runtime.Context;
+import org.globus.cog.karajan.runtime.NativeCallable;
+import org.globus.cog.karajan.runtime.Signature;
+import org.globus.cog.karajan.runtime.Signature.Optional;
+import org.globus.cog.karajan.runtime.Signature.Parameter;
+import org.globus.cog.karajan.runtime.Signature.Positional;
+import org.globus.cog.karajan.runtime.Signature.VarArgs;
+
+public class Lst {
+ public static final Type TLIST = new SimpleType(new QName("List"));
+
+ public static class Polymorphic extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(
+ Polymorphic.class);
+
+ public static final Parameter<Type> TYPE = new Positional<Type>("type",
+ Types.TYPE);
+
+ static {
+ SIGNATURE.add(TYPE);
+ SIGNATURE.setReturnType(TLIST);
+ SIGNATURE.setType(true);
+ }
+
+ @Override
+ public void invoke(final Arguments a) {
+ ret(a, new List(a) {
+ @Override
+ public String toString() {
+ return TLIST + "(" + TYPE.getValue(a) + ")";
+ }
+ });
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ Signature sig = new Signature();
+ sig.add(new Signature.VarArgs((Type) args.value));
+ sig.setType(true);
+ UserType ut = new UserType(sig, null);
+ ut.name = new QName("List(" + args.value + ")");
+ sig.setReturnType(TLIST);
+ return Types.TYPE.instance(ut);
+ }
+ }
+
+ public static class Unknown extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(Unknown.class);
+
+ static {
+ SIGNATURE.add(Signature.VARARGS);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ ret(a, new ArrayList<Object>(a.getVarArgs().getAll()));
+ }
+ }
+
+ public static class List extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(Unknown.class);
+
+ static {
+ SIGNATURE.add(Signature.VARARGS);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ public List(Context ctx) {
+ super(ctx);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ ret(a, new ArrayList<Object>(a.getVarArgs().getAll()));
+ }
+ }
+
+ public static class First extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final Parameter<ArrayList<Object>> LIST = new Positional<ArrayList<Object>>(
+ "list", TLIST);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.setReturnType(new UnknownType());
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ ret(a, LIST.getValue(a).get(0));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ UserType ut = (UserType) args;
+ return ut.signature.getVarArgsType();
+ }
+ }
+
+ public static class Last extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(Last.class);
+
+ public static final Parameter<java.util.List<Object>> LIST = new Positional<java.util.List<Object>>(
+ "list", TLIST);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.setReturnType(new UnknownType());
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ java.util.List<Object> l = LIST.getValue(a);
+ ret(a, l.get(l.size() - 1));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ UserType ut = (UserType) args;
+ return ut.signature.getVarArgsType();
+ }
+ }
+
+ public static class ButFirst extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final Parameter<java.util.List<Object>> LIST = new Positional<java.util.List<Object>>(
+ "list", TLIST);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ java.util.List<?> l = LIST.getValue(a);
+ ret(a, l.subList(1, l.size()));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return args;
+ }
+ }
+
+ public static class ButLast extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final Parameter<java.util.List<Object>> LIST = new Positional<java.util.List<Object>>(
+ "list", TLIST);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ java.util.List<?> l = LIST.getValue(a);
+ ret(a, l.subList(0, l.size() - 1));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return args;
+ }
+ }
+
+ public static class Concat extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final VarArgs<java.util.List<Object>> LISTS = new VarArgs<java.util.List<Object>>(
+ TLIST);
+
+ static {
+ SIGNATURE.add(LISTS);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ Collection<java.util.List<Object>> lists = LISTS.get(a);
+ if (lists.size() == 0) {
+ ret(a, lists.iterator().next());
+ }
+ else {
+ ArrayList<Object> l = new ArrayList<Object>();
+ for (java.util.List<Object> li : lists) {
+ l.addAll(li);
+ }
+ ret(a, l);
+ }
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return args;
+ }
+ }
+
+ public static class SubList1 extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final Parameter<java.util.List<Object>> LIST = new Positional<java.util.List<Object>>(
+ "list", TLIST);
+ public static final Positional<Integer> FROM = new Positional<Integer>("from", Types.INTEGER);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.add(FROM);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ java.util.List<?> l = LIST.getValue(a);
+ ret(a, l.subList(FROM.getValue(a), l.size()));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return args;
+ }
+ }
+
+ public static class SubList2 extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(First.class);
+
+ public static final Parameter<java.util.List<Object>> LIST = new Positional<java.util.List<Object>>(
+ "list", TLIST);
+ public static final Positional<Integer> FROM = new Positional<Integer>("from", Types.INTEGER);
+ public static final Positional<Integer> TO = new Positional<Integer>("to", Types.INTEGER);
+
+ static {
+ SIGNATURE.add(LIST);
+ SIGNATURE.add(FROM);
+ SIGNATURE.add(TO);
+ SIGNATURE.setReturnType(TLIST);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ java.util.List<?> l = LIST.getValue(a);
+ ret(a, l.subList(FROM.getValue(a), TO.getValue(a)));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return args;
+ }
+ }
+}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/KException.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/KException.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/KException.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -9,6 +9,7 @@
*/
package org.globus.cog.karajan.lib.sys;
+import org.globus.cog.karajan.compiler.Type;
import org.globus.cog.karajan.compiler.types.Types;
import org.globus.cog.karajan.runtime.Arguments;
import org.globus.cog.karajan.runtime.ExecutionException;
@@ -19,19 +20,27 @@
import org.globus.cog.karajan.runtime.Signature.Positional;
public class KException extends NativeCallable {
- public static final Signature SIGNATURE = new Signature(KException.class);
+ public static final Signature SIGNATURE = new Signature(KException.class);
- public static final Parameter MESSAGE = new Positional("message", Types.STRING);
- public static final Parameter PREV = new Optional("prev", null, Types.EXCEPTION);
+ public static final Parameter<String> MESSAGE = new Positional<String>(
+ "message", Types.STRING);
+ public static final Parameter<Exception> PREV = new Optional<Exception>(
+ "prev", null, Types.EXCEPTION);
- static {
- SIGNATURE.add(MESSAGE, PREV);
- SIGNATURE.setReturnType(Types.EXCEPTION);
- SIGNATURE.setType(true);
- }
+ static {
+ SIGNATURE.add(MESSAGE, PREV);
+ SIGNATURE.setReturnType(Types.EXCEPTION);
+ SIGNATURE.setType(true);
+ }
- @Override
- public void invoke(Arguments a) {
- ret(a, new ExecutionException((String) MESSAGE.getValue(a), (Exception) PREV.getValue(a), this));
- }
+ @Override
+ public void invoke(Arguments a) {
+ ret(a, new ExecutionException(MESSAGE.getValue(a), PREV.getValue(a),
+ this));
+ }
+
+ @Override
+ public Type invokeStatic(Type type, Type args) {
+ return Types.EXCEPTION;
+ }
}
Added: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/NotEquals.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/NotEquals.java (rev 0)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/NotEquals.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -0,0 +1,34 @@
+//----------------------------------------------------------------------
+//This code is developed as part of the Java CoG Kit project
+//The terms of the license can be found at http://www.cogkit.org/license
+//This message may not be removed or altered.
+//----------------------------------------------------------------------
+
+/*
+ * Created on Dec 30, 2007
+ */
+package org.globus.cog.karajan.lib.sys;
+
+import org.globus.cog.karajan.compiler.types.SimpleType;
+import org.globus.cog.karajan.runtime.Arguments;
+import org.globus.cog.karajan.runtime.NativeCallable;
+import org.globus.cog.karajan.runtime.Signature;
+import org.globus.cog.karajan.runtime.Signature.Parameter;
+import org.globus.cog.karajan.runtime.Signature.Positional;
+
+public class NotEquals extends NativeCallable {
+ public static final Signature SIGNATURE = new Signature(NotEquals.class);
+
+ public static final Parameter OP1 = new Positional("op1");
+ public static final Parameter OP2 = new Positional("op2");
+
+ static {
+ SIGNATURE.add(OP1, OP2);
+ SIGNATURE.setReturnType(SimpleType.Boolean);
+ }
+
+ @Override
+ public void invoke(Arguments a) {
+ ret(a, !OP1.getValue(a).equals(OP2.getValue(a)));
+ }
+}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/Print.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/Print.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/lib/sys/Print.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -21,7 +21,7 @@
public class Print extends NativeCallable {
public static final Signature SIGNATURE = new Signature(Print.class);
- public static final Parameter NL = new Optional("nl", Boolean.TRUE, Types.BOOLEAN);
+ public static final Parameter<Boolean> NL = new Optional<Boolean>("nl", Boolean.TRUE, Types.BOOLEAN);
static {
SIGNATURE.add(Signature.VARARGS, NL);
@@ -34,7 +34,7 @@
for (Object v: a.getVarArgs()) {
sb.append(String.valueOf(v));
}
- if (Boolean.TRUE.equals(NL.getValue(a))) {
+ if (NL.getValue(a)) {
sb.append('\n');
}
a.getChannel(1).append(sb.toString());
Added: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/AltCallable.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/AltCallable.java (rev 0)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/AltCallable.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -0,0 +1,70 @@
+//----------------------------------------------------------------------
+//This code is developed as part of the Java CoG Kit project
+//The terms of the license can be found at http://www.cogkit.org/license
+//This message may not be removed or altered.
+//----------------------------------------------------------------------
+
+/*
+ * Created on Jul 3, 2008
+ */
+package org.globus.cog.karajan.runtime;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+public class AltCallable implements Channel {
+ private List<Object> l;
+
+ public AltCallable() {
+ l = new ArrayList<Object>(3);
+ }
+
+ @Override
+ public void append(Object value) {
+ l.add(value);
+ }
+
+ @Override
+ public void appendAll(Collection<Object> values) {
+ l.addAll(values);
+ }
+
+ @Override
+ public Callable get(int index) {
+ return (Callable) l.get(index);
+ }
+
+ @Override
+ public Collection<Object> getAll() {
+ return l;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return l.isEmpty();
+ }
+
+ @Override
+ public int size() {
+ return l.size();
+ }
+
+ @Override
+ public Iterator<Object> iterator() {
+ throw new UnsupportedOperationException();
+ }
+
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ Iterator<Object> i = l.iterator();
+ while (i.hasNext()) {
+ sb.append(i.next().toString());
+ if (i.hasNext()) {
+ sb.append(" | ");
+ }
+ }
+ return sb.toString();
+ }
+}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Arguments.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Arguments.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Arguments.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -90,4 +90,14 @@
public String toString() {
return "A" + super.toString();
}
+
+ public void setVargIndex(int i) {
+ stack[osize + i] = vargs;
+ }
+
+ @Override
+ public Context getS() {
+ return s;
+ }
+
}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Context.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Context.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Context.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -111,7 +111,12 @@
}
public String toString() {
- return Arrays.asList(stack).toString();
+ if (stack == null) {
+ return "[]";
+ }
+ else {
+ return Arrays.asList(stack).toString();
+ }
}
public final Context getParent() {
@@ -131,4 +136,8 @@
System.arraycopy(stack, 0, ctx.stack, 0, stack.length);
return ctx;
}
+
+ public Context getS() {
+ return p;
+ }
}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/NativeCallable.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/NativeCallable.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/NativeCallable.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -11,15 +11,42 @@
import java.lang.reflect.Field;
+import org.globus.cog.karajan.compiler.Lambda;
+import org.globus.cog.karajan.compiler.Type;
+
public abstract class NativeCallable extends Callable {
+ private String str;
+
+ public NativeCallable() {
+ super();
+ }
+
+ public NativeCallable(Context ctx) {
+ super(ctx);
+ }
+
public String toString() {
try {
- Class<? extends NativeCallable> cls = this.getClass();
- Field signature = cls.getField("SIGNATURE");
- return signature.get(null).toString();
+ if (str == null) {
+ Class<? extends NativeCallable> cls = this.getClass();
+ Field signature = cls.getField("SIGNATURE");
+ Signature sig = (Signature) signature.get(null);
+ if (sig.isType()) {
+ str = sig.getReturnType().toString();
+ }
+ else {
+ str = sig.toString();
+ }
+ }
+ return str;
}
catch (Exception e) {
return super.toString();
}
}
+
+ public Type invokeStatic(Type type, Type args) {
+ Lambda l = (Lambda) type;
+ return l.signature.getReturnType();
+ }
}
Added: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Nil.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Nil.java (rev 0)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Nil.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -0,0 +1,22 @@
+//----------------------------------------------------------------------
+//This code is developed as part of the Java CoG Kit project
+//The terms of the license can be found at http://www.cogkit.org/license
+//This message may not be removed or altered.
+//----------------------------------------------------------------------
+
+/*
+ * Created on Jun 27, 2008
+ */
+package org.globus.cog.karajan.runtime;
+
+import org.globus.cog.karajan.compiler.Type;
+import org.globus.cog.karajan.compiler.types.SimpleType;
+
+public class Nil {
+ public static final Type type = SimpleType.Nil;
+ public static final Nil value = new Nil();
+
+ public String toString() {
+ return "nil";
+ }
+}
Modified: branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Signature.java
===================================================================
--- branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Signature.java 2008-07-28 00:11:50 UTC (rev 2098)
+++ branches/karajan2/src/cog/modules/karajan2/src/org/globus/cog/karajan/runtime/Signature.java 2008-07-28 00:12:58 UTC (rev 2099)
@@ -21,9 +21,9 @@
public class Signature extends Type {
public static final VarArgs VARARGS = new VarArgs();
- private boolean vargs;
- private List<Parameter<?>> positional;
- private List<Parameter<?>> optional;
+ public Parameter<?> vargs;
+ public List<Parameter<?>> positional;
+ public List<Parameter<?>> optional;
private Type returnType;
private List<Object> defaultValues;
private String defaultValuesRepr;
@@ -43,12 +43,17 @@
+ ".SIGNATURE.getDefaultValues()";
}
- public Signature(Parameter... params) {
+ public Signature(Parameter<?>... params) {
this();
- for (Parameter param : params) {
+ for (Parameter<?> param : params) {
add(param);
}
}
+
+ public Signature(String defaultValuesRepr, Parameter<?>... params) {
+ this(params);
+ this.defaultValuesRepr = defaultValuesRepr;
+ }
public int getLocals() {
return locals;
@@ -60,7 +65,7 @@
public void add(Parameter<?> param) {
if (param instanceof VarArgs) {
- vargs = true;
+ vargs = param;
}
else if (param instanceof Positional) {
param.index = positional.size();
@@ -69,14 +74,17 @@
else if (param instanceof Optional) {
param.index = optional.size();
optional.add(param);
- defaultValues.add(((Optional) param).defaultValue);
+ defaultValues.add(((Optional<?>) param).defaultValue);
}
else if (param instanceof Field) {
if (fields == null) {
fields = new ArrayList<Field<?>>();
}
- fields.add((Field) param);
+ fields.add((Field<?>) param);
}
+ else if (param instanceof Return) {
+ returnType = param.type;
+ }
}
public void add(Parameter<?>... params) {
@@ -86,9 +94,18 @@
}
public boolean hasVarArgs() {
- return vargs;
+ return vargs != null;
}
+ public Type getVarArgsType() {
+ if (vargs == null) {
+ return null;
+ }
+ else {
+ return vargs.type;
+ }
+ }
+
public boolean isType() {
return type;
}
@@ -139,9 +156,10 @@
}
public String toString() {
- if (type) {
- return returnType.toString();
- }
+ return toString(true);
+ }
+
+ public String toString(boolean ret) {
StringBuffer sb = new StringBuffer();
sb.append('(');
Iterator<Parameter<?>> i;
@@ -149,28 +167,63 @@
while (i.hasNext()) {
Positional<?> p = (Positional<?>) i.next();
sb.append(p.toString());
- if (i.hasNext() || !optional.isEmpty() || vargs) {
+ if (i.hasNext() || !optional.isEmpty() || vargs != null) {
sb.append(", ");
}
}
i = optional.iterator();
while (i.hasNext()) {
- Optional o = (Optional) i.next();
+ Optional<?> o = (Optional<?>) i.next();
sb.append(o.toString());
- if (i.hasNext() || vargs) {
+ if (i.hasNext() || vargs != null) {
sb.append(", ");
}
}
- if (vargs) {
- sb.append("...");
+ if (vargs != null) {
+ sb.append(vargs);
}
- sb.append(") -> (");
- if (!Null.type.equals(returnType)) {
- sb.append(returnType);
+ if (ret) {
+ sb.append(')');
+ sb.append(" -> ");
+ sb.append('(');
+ if (!Null.type.equals(returnType)) {
+ sb.append(returnType);
+ }
}
sb.append(')');
return sb.toString();
}
+
+ public String repr() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("new Signature(");
+ if (defaultValuesRepr != null) {
+ sb.append('"');
+ sb.append(defaultValuesRepr);
+ sb.append('"');
+ sb.append(", ");
+ }
+ Iterator<Parameter<?>> i;
+ i = positional.iterator();
+ while (i.hasNext()) {
+ Positional<?> p = (Positional<?>) i.next();
+ sb.append("new Positional(\"" + p.name + "\", " + p.type.repr() + ")");
+ sb.append(", ");
+ }
+ i = optional.iterator();
+ while (i.hasNext()) {
+ Optional<?> p = (Optional<?>) i.next();
+ sb.append("new Optional(\"" + p.name + "\", " + p.type.repr() + ")");
+ sb.append(", ");
+ }
+ if (vargs != null) {
+ sb.append("Signature.VARARGS, ");
+ }
+ sb.append("new Return(");
+ sb.append(returnType.repr());
+ sb.append("))");
+ return sb.toString();
+ }
public int getOptionalParameterIndex(String name) {
for (int i = 0; i < optional.size(); i++) {
@@ -238,7 +291,7 @@
}
public String toString() {
- return type.toString();
+ return String.valueOf(type);
}
}
@@ -257,13 +310,13 @@
}
}
- public static final class Return extends Parameter {
+ public static final class Return<T> extends Parameter<T> {
public Return(Type type) {
this.type = type;
}
@Override
- public Object getValue(Arguments a) {
+ public T getValue(Arguments a) {
return null;
}
}
@@ -292,7 +345,7 @@
}
}
- public static final class VarArgs extends Parameter {
+ public static final class VarArgs<T> extends Parameter<Channel> {
public VarArgs() {
this(new UnknownType());
}
@@ -303,16 +356,16 @@
}
@Override
- public Object getValue(Arguments a) {
+ public Channel getValue(Arguments a) {
return a.getVarArgs();
}
- public Collection<Object> get(Arguments a) {
- return new FutureCheckingCollection(a.getVarArgs());
+ public Collection<T> get(Arguments a) {
+ return new FutureCheckingCollection<T>(a.getVarArgs());
}
}
- private static class FutureCheckingCollection implements Collection<Object> {
+ private static class FutureCheckingCollection<T> implements Collection<T> {
private Channel c;
public FutureCheckingCollection(Channel c) {
@@ -323,12 +376,12 @@
}
@Override
- public boolean add(Object e) {
+ public boolean add(T e) {
throw new UnsupportedOperationException();
}
@Override
- public boolean addAll(Collection<? extends Object> c) {
+ public boolean addAll(Collection<? extends T> c) {
throw new UnsupportedOperationException();
}
@@ -352,9 +405,10 @@
return c.isEmpty();
}
+ @SuppressWarnings("unchecked")
@Override
- public Iterator<Object> iterator() {
- return new FutureCheckingIterator(c.iterator());
+ public Iterator<T> iterator() {
+ return new FutureCheckingIterator<T>((Iterator<T>) c.iterator());
}
@Override
@@ -388,10 +442,10 @@
}
}
- private static class FutureCheckingIterator implements Iterator<Object> {
- private Iterator<Object> it;
+ private static class FutureCheckingIterator<T> implements Iterator<T> {
+ private Iterator<T> it;
- public FutureCheckingIterator(Iterator<Object> it) {
+ public FutureCheckingIterator(Iterator<T> it) {
this.it = it;
}
@@ -401,8 +455,8 @@
}
@Override
- public Object next() {
- Object o = it.next();
+ public T next() {
+ T o = it.next();
Futures.futureCheck(o);
return o;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|