!7 sclass ICallYou > CruddieScript { swappable void setBotName(S name) {} swappable S getBotName() { null; } S answer(S s) null { new Matches m; if "I call you $name" { // fancy dollar var syntax with automatic declaration of S $name assume("\*$name*/ is a name"); setBotName($name); ret "OK, my name is now \*$name*/"; } if "What is your name" ret or2(getBotName(), "I don't know"); } } sclass SafeEvaluator > CruddieScript { S answer(S s) null { new Matches m; if "what is $expression" { if (!isSafeCodeFragment($expression)) { assume("\*$expression*/ is not a safe JavaX expression"); null; } assume("\*$expression*/ is a safe JavaX expression"); S result = strOrNull(dm_javaEvalOrInterpret($expression)); ret "Result: " + or(result, "nothing"); } } } cmodule SomeCruddieScripts { }