diff --git a/Makefile b/Makefile index e0767e2..b5787f9 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,4 @@ repl: gradle compileJava && rlwrap java -cp build/classes/java/main/ serene.simple.Main +docs: + npx docco src/**/*.java diff --git a/src/main/java/serene/simple/ListNode.java b/src/main/java/serene/simple/ListNode.java index 8f1da6c..203f2a2 100644 --- a/src/main/java/serene/simple/ListNode.java +++ b/src/main/java/serene/simple/ListNode.java @@ -89,14 +89,14 @@ public class ListNode extends Node implements Iterable { return this.evalInteropProperty( scope, target, - mName.substring(1, firstElement.name.length())); + mName.substring(1, mName.length())); } try { - System.out.println(target.getClass().getName()); Method f = target.getClass().getMethod(mName); return f.invoke(target, rest.toArray()); } + catch(NoSuchMethodException e) { throw new SereneException( String.format( @@ -119,8 +119,9 @@ public class ListNode extends Node implements Iterable { public Object evalInteropProperty(BaseScope scope, Object target, String propertyName) throws SereneException { + try { - Class targetClass = target.getClass(); + Class targetClass = this.getClassOf(target); return targetClass.getField(propertyName); } catch(NoSuchFieldException e) { @@ -186,4 +187,12 @@ public class ListNode extends Node implements Iterable { return output + ")"; } + + private Class getClassOf(Object target) { + if (target instanceof Class) { + return (Class) target; + } + + return target.getClass(); + } } diff --git a/src/main/java/serene/simple/RootScope.java b/src/main/java/serene/simple/RootScope.java index 65b0e6f..8c95eec 100644 --- a/src/main/java/serene/simple/RootScope.java +++ b/src/main/java/serene/simple/RootScope.java @@ -12,6 +12,9 @@ public class RootScope extends BaseScope { put("println", new PrintlnFn()); put("quit", new QuitFn()); put("+", new PlusFn()); + put("System", System.class); + put("Boolean", Boolean.class); + put("String", String.class); }}; // "+", PlusFn, // "-", MinusFn,