Skip to content

Commit

Permalink
Continue refactoring of method activation
Browse files Browse the repository at this point in the history
  • Loading branch information
olabini committed Apr 29, 2011
1 parent e22abc2 commit ca9dac1
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 24 deletions.
16 changes: 8 additions & 8 deletions src/ikj/main/ioke/lang/Interpreter.java
Original file line number Diff line number Diff line change
Expand Up @@ -209,16 +209,16 @@ private static Object doActivate(IokeObject io, IokeObject ctx, IokeObject messa
return DefaultMacro.activateFixed(io, ctx, message, obj);
case IokeData.TYPE_DEFAULT_SYNTAX:
return DefaultSyntax.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_LEXICAL_MACRO:
// return LexicalMacro.activateFixed(io, ctx, message, obj);
case IokeData.TYPE_LEXICAL_MACRO:
return LexicalMacro.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_NATIVE_METHOD:
// return NativeMethod.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_JAVA_CONSTRUCTOR:
// return JavaConstructorNativeMethod.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_JAVA_FIELD_GETTER:
// return JavaFieldGetterNativeMethod.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_JAVA_FIELD_SETTER:
// return JavaFieldSetterNativeMethod.activateFixed(io, ctx, message, obj);
case IokeData.TYPE_JAVA_CONSTRUCTOR:
return JavaConstructorNativeMethod.activateFixed(io, ctx, message, obj);
case IokeData.TYPE_JAVA_FIELD_GETTER:
return JavaFieldGetterNativeMethod.activateFixed(io, ctx, message, obj);
case IokeData.TYPE_JAVA_FIELD_SETTER:
return JavaFieldSetterNativeMethod.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_JAVA_METHOD:
// return JavaMethodNativeMethod.activateFixed(io, ctx, message, obj);
// case IokeData.TYPE_ALIAS_METHOD:
Expand Down
9 changes: 7 additions & 2 deletions src/ikj/main/ioke/lang/JavaConstructorNativeMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ public String getArgumentsCode() {

@Override
public Object activate(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
return activateFixed(self, context, message, on);
}

public static Object activateFixed(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
JavaConstructorNativeMethod nm = (JavaConstructorNativeMethod)self.data;
List<Object> args = new LinkedList<Object>();
Constructor ctor = (Constructor)arguments.getJavaArguments(context, message, on, args);
return activate(self, on, args, ctor, context, message);
Constructor ctor = (Constructor)nm.arguments.getJavaArguments(context, message, on, args);
return nm.activate(self, on, args, ctor, context, message);
}

public Object activate(IokeObject self, Object on, List<Object> args, Constructor ctor, IokeObject context, IokeObject message) throws ControlFlow {
Expand Down
13 changes: 9 additions & 4 deletions src/ikj/main/ioke/lang/JavaFieldGetterNativeMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,19 @@ public String getArgumentsCode() {

@Override
public Object activate(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
return activateFixed(self, context, message, on);
}

public static Object activateFixed(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
JavaFieldGetterNativeMethod nm = (JavaFieldGetterNativeMethod)self.data;
try {
if((on instanceof IokeObject) && (IokeObject.data(on) instanceof JavaWrapper)) {
Object obj = ((JavaWrapper)IokeObject.data(on)).getObject();
if(!(declaringClass.isInstance(obj))) {
if(!(nm.declaringClass.isInstance(obj))) {
obj = obj.getClass();
}

Object result = field.get(obj);
Object result = nm.field.get(obj);
if(result == null) {
return context.runtime.nil;
} else if(result instanceof Boolean) {
Expand All @@ -49,11 +54,11 @@ public Object activate(IokeObject self, IokeObject context, IokeObject message,
return result;
} else {
Object obj = on;
if(!(declaringClass.isInstance(obj))) {
if(!(nm.declaringClass.isInstance(obj))) {
obj = obj.getClass();
}

Object result = field.get(obj);
Object result = nm.field.get(obj);
if(result == null) {
return context.runtime.nil;
} else if(result instanceof Boolean) {
Expand Down
11 changes: 8 additions & 3 deletions src/ikj/main/ioke/lang/JavaFieldSetterNativeMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,16 @@ public String getArgumentsCode() {
return "...";
}

public static Object activateFixed(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
JavaFieldSetterNativeMethod nm = (JavaFieldSetterNativeMethod)self.data;
List<Object> args = new LinkedList<Object>();
nm.arguments.getJavaArguments(context, message, on, args);
return nm.activate(self, on, args.get(0), context, message);
}

@Override
public Object activate(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
List<Object> args = new LinkedList<Object>();
arguments.getJavaArguments(context, message, on, args);
return activate(self, on, args.get(0), context, message);
return activateFixed(self, context, message, on);
}

public Object activate(IokeObject self, Object on, Object arg, IokeObject context, IokeObject message) throws ControlFlow {
Expand Down
2 changes: 1 addition & 1 deletion src/ikj/main/ioke/lang/JavaMethodNativeMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class JavaMethodNativeMethod extends ioke.lang.Method implements NativeIm
private JavaArgumentsDefinition arguments;

public JavaMethodNativeMethod(Method[] methods) {
super(methods[0].getName(), IokeData.TYPE_JAVA_FIELD_SETTER);
super(methods[0].getName(), IokeData.TYPE_JAVA_METHOD);
this.methods = methods;
this.declaringClass = methods[0].getDeclaringClass();
this.arguments = JavaArgumentsDefinition.createFrom(methods);
Expand Down
13 changes: 9 additions & 4 deletions src/ikj/main/ioke/lang/LexicalMacro.java
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,12 @@ public Object activateWithCallAndData(final IokeObject self, IokeObject dynamicC

@Override
public Object activate(IokeObject self, IokeObject dynamicContext, IokeObject message, Object on) throws ControlFlow {
if(code == null) {
return activateFixed(self, dynamicContext, message, on);
}

public static Object activateFixed(IokeObject self, IokeObject dynamicContext, IokeObject message, Object on) throws ControlFlow {
LexicalMacro lm = (LexicalMacro)self.data;
if(lm.code == null) {
IokeObject condition = IokeObject.as(IokeObject.getCellChain(dynamicContext.runtime.condition,
message,
dynamicContext,
Expand All @@ -227,12 +232,12 @@ public Object activate(IokeObject self, IokeObject dynamicContext, IokeObject me
return null;
}

LexicalContext c = new LexicalContext(self.runtime, on, "Lexical macro activation context", message, this.context);
LexicalContext c = new LexicalContext(self.runtime, on, "Lexical macro activation context", message, lm.context);

c.setCell("outerScope", context);
c.setCell("outerScope", lm.context);
c.setCell("call", dynamicContext.runtime.newCallFrom(c, message, dynamicContext, IokeObject.as(on, dynamicContext)));

return self.runtime.interpreter.evaluate(this.code, c, on, c);
return self.runtime.interpreter.evaluate(lm.code, c, on, c);
}

@Override
Expand Down
9 changes: 7 additions & 2 deletions src/ikj/main/ioke/lang/NativeMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,15 @@ public String getArgumentsCode() {

@Override
public Object activate(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
return activateFixed(self, context, message, on);
}

public static Object activateFixed(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
NativeMethod nm = (NativeMethod)self.data;
List<Object> args = new ArrayList<Object>();
Map<String, Object> keywords = new HashMap<String, Object>();
getArguments().getEvaluatedArguments(context, message, on, args, keywords);
return activate(self, on, args, keywords, context, message);
nm.getArguments().getEvaluatedArguments(context, message, on, args, keywords);
return nm.activate(self, on, args, keywords, context, message);
}

public Object activate(IokeObject self, Object on, List<Object> args,
Expand Down

0 comments on commit ca9dac1

Please sign in to comment.