Buggy code:
@ Override public Expression < Boolean > createOr ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createNot ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createLessThan ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createLessThanOrEqualTo ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createGreaterThan ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createGreaterThanOrEqualTo ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createEquals ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createNotEquals ( Expression < ? > left , Expression < ? > right , SourceLocation sourceLocation ) { } @ Override public Expression < Double > createGetX ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Double > createGetY ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Double > createGetWidth ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Double > createGetHeight ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Double > createGetHitPoints ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Tile > createGetTile ( Expression < ? > x , Expression < ? > y , SourceLocation sourceLocation ) { } @ Override public Expression < Collidable > createSearchObject ( Expression < ? > direction , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsMazub ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsShark ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsSlime ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsPlant ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsDead ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsTerrain ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsPassable ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsWater ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsMagma ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsAir ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsMoving ( Expression < ? > expr , Expression < ? > direction , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsDucking ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Expression < Boolean > createIsJumping ( Expression < ? > expr , SourceLocation sourceLocation ) { } @ Override public Statement createAssignment ( String variableName , Object variableType , Expression < ? > value , SourceLocation sourceLocation ) { } @ Override public Statement createWhile ( Expression < ? > condition , Statement body , SourceLocation sourceLocation ) { } @ Override public Statement createForEach ( String variableName , Kind variableKind , Expression < ? > where , Expression < ? > sort , SortDirection sortDirection , Statement body , SourceLocation sourceLocation ) { } @ Override public Statement createBreak ( SourceLocation sourceLocation ) { } @ Override public Statement createIf ( Expression < ? > condition , Statement ifBody , Statement elseBody , SourceLocation sourceLocation ) { } @ Override public Statement createPrint ( Expression < ? > value , SourceLocation sourceLocation ) { } @ Override public Statement createStartRun ( Expression < ? > direction , SourceLocation sourceLocation ) { return new SimpleStatement ( ) { @ Override protected void run ( Map < String , Object > globals , CallStack callStack ) { RunProgrammable object = ( ( RunProgrammable ) ( callStack . getProgram ( ) . getGameObject ( ) ) ) ; <START_BUG> object . startRun ( ( ( Expression < Double > ) ( direction ) ) . evaluate ( globals , this . getOwnCallStack ( callStack ) ) ) ; <END_BUG> } } ; } @ Override public Statement createStopRun ( Expression < ? > direction , SourceLocation sourceLocation ) { } @ Override public Statement createStartJump ( SourceLocation sourceLocation ) { } @ Override public Statement createStopJump ( SourceLocation sourceLocation ) { } @ Override public Statement createStartDuck ( SourceLocation sourceLocation ) { } @ Override public Statement createStopDuck ( SourceLocation sourceLocation ) { } @ Override public Statement createWait ( Expression < ? > duration , SourceLocation sourceLocation ) { } @ Override public Statement createSkip ( SourceLocation sourceLocation ) { } @ Override public Statement createSequence ( List < Statement > statements , SourceLocation sourceLocation ) { } @ Override public Double getDoubleType ( ) { } @ Override public Boolean getBoolType ( ) { } @ Override public GameObject getGameObjectType ( ) { } @ Override public Direction getDirectionType ( ) { } @ Override public Program createProgram ( Statement mainStatement , Map < String , Object > globalVariables ) { } }

Fix:
object . startRun ( ( ( Expression < Direction > ) ( direction ) ) . evaluate ( globals , this . getOwnCallStack ( callStack ) ) . getVectorValue ( ) . x ) ;