diff --git a/lib/scalatest_2.9.0-1.8.jar b/lib/scalatest_2.9.0-1.8.jar new file mode 100644 index 0000000..30445f5 Binary files /dev/null and b/lib/scalatest_2.9.0-1.8.jar differ diff --git a/src/main/scala/org/moe/Moe.scala b/src/main/scala/org/moe/Moe.scala new file mode 100644 index 0000000..4c49d6a --- /dev/null +++ b/src/main/scala/org/moe/Moe.scala @@ -0,0 +1,17 @@ +package org.moe + +object Moe { + + val VERSION = 0.01; + val AUTHORITY = "cpan:STEVAN"; + + object Errors { + class ValueNotFound ( msg : String ) extends Exception( msg ) + class UninitializedValue ( msg : String ) extends Exception( msg ) + } + + def main ( args: Array[String] ): Unit = { + println( "Hello World" ) + } + +} \ No newline at end of file diff --git a/src/main/scala/org/moe/runtime/Container.scala b/src/main/scala/org/moe/runtime/Container.scala new file mode 100644 index 0000000..a9d283f --- /dev/null +++ b/src/main/scala/org/moe/runtime/Container.scala @@ -0,0 +1,3 @@ +package org.moe.runtime + +trait Container {} \ No newline at end of file diff --git a/src/main/scala/org/moe/runtime/Environment.scala b/src/main/scala/org/moe/runtime/Environment.scala new file mode 100644 index 0000000..e23e4ae --- /dev/null +++ b/src/main/scala/org/moe/runtime/Environment.scala @@ -0,0 +1,75 @@ +package org.moe.runtime + +import scala.collection.mutable.HashMap + +import org.moe.Moe.Errors + +class Environment { + + object Markers { + val Package = "__PACKAGE__"; + val Class = "__CLASS__"; + val Invocant = "__SELF__"; + } + + val pad = new HashMap[String,Container](); + + var parent : Environment = _; + + def this ( p : Environment ) { + this() + parent = p + } + + def getCurrentPackage (): Container = getLocal( Markers.Package ) + def getCurrentClass (): Container = getLocal( Markers.Class ) + def getCurrentInvocant (): Container = getLocal( Markers.Invocant ) + + def setCurrentPackage ( p : Container ): Unit = pad.put( Markers.Package, p ) + def setCurrentClass ( c : Container ): Unit = pad.put( Markers.Class, c ) + def setCurrentInvocant ( i : Container ): Unit = pad.put( Markers.Invocant, i ) + + def getParent (): Environment = parent + def isRoot (): Boolean = parent == null + + def get ( name : String ): Container = { + if ( pad.contains( name ) ) return pad( name ) + if ( !isRoot ) return parent.get( name ) + throw new Errors.ValueNotFound( name ); + } + + def has ( name : String ): Boolean = { + if ( pad.contains( name ) ) return true + if ( !isRoot ) return parent.has( name ) + false; + } + + def create ( name : String, value : Container ): Unit = pad.put( name, value ) + + def set ( name : String, value : Container ): Unit = { + if ( !has( name ) ) throw new Errors.UninitializedValue( name ) + + if ( pad.contains( name ) ) { + pad.put( name, value ) + } else { + var current : Environment = parent + while ( current != null ) { + if ( current.hasLocal( name ) ) { + current.setLocal( name, value ) + return; + } + else { + current = current.getParent + } + } + throw new Errors.UninitializedValue( name ) + } + } + + private def getLocal ( name : String ): Container = pad( name ) + private def hasLocal ( name : String ): Boolean = pad.contains( name ) + private def setLocal ( name : String, value : Container ): Unit = pad.put( name, value ) + +} + +