System.out.println( Thread.currentThread().getName() + " enters executeGenerateAction" );
	public void executeGenerateAction( GenerateAction a, Context c ) throws LemRuntimeException {		LinkedList p = a.getParameters();		LinkedList passedValues = null;		if ( p != null ) {			passedValues = new LinkedList();			/* Evaluate parameters - pass by value obviously */			Iterator i = p.iterator();			while ( i.hasNext() ) {				Expression e = ( Expression ) i.next();				Variable result = evaluateExpression( e, c );				passedValues.add( result );			}		}		VariableReference vr = a.getTarget();		Variable targetRef = getVariable( vr, c );		if ( !( targetRef instanceof ObjectReferenceVariable ) ) {			throw new LemRuntimeException( "Type mismatch: expected objref, got " + targetRef.getType().getName() );		}		runtime.Object target = ( runtime.Object ) ( ( ObjectReferenceVariable ) targetRef ).getValue();		// Find the event to be fired on the given object		Event e = target.findEvent( a.getEventName(), a.getParameters() );		if ( e == null ) {			// TODO: Don't use single-arg constructor for LemRuntimeException			throw new LemRuntimeException( "Could not find named event" );		}		Expression delayExpression = a.getDelayTime();		if ( delayExpression != null ) {			Variable v = evaluateExpression( delayExpression, c );			if ( !( v instanceof NumericVariable ) ) {				throw new LemRuntimeException( "Type mismatch: expected numeric, got " + v.getType().getName() );			}			BigDecimal delay = ( BigDecimal ) v.getValue();			DelayedSignal ds = new DelayedSignal( e );			if ( passedValues != null )				ds.setParameters( passedValues );			ds.setDelay( delay );			ds.setTarget( target );			System.out.println( "Interpreter adding a signal with delay: " + delay ) ;			java.lang.Thread sg = new SignalGenerator( ds, currentObject );		} else {			// Create the new signal			System.out.println( "Interpreter adding a signal" );			Signal s = new Signal( e );			System.out.println( s.getEvent() );			if ( passedValues != null )				s.setParameters( passedValues );			if ( target == currentObject ) {				target.addSignalSelf( s );			} else {				target.addSignal( s );			}		}	}