-- $Id: java_program_interpretation.ty,v 1.6 10/.0/.2 .1:.1:.4 mrusso Exp $
-- /***************************************************************************/
-- /* Copyright (C) 1997-1999 INRIA Sophia-Antipolis */
-- /* I. Attali, D. Caromel and M. Russo */
-- /* Projet OASIS */
-- /* 2004, route des Lucioles, BP 93 */
-- /* F-06902 Sophia Antipolis cedex */
-- /* (+33) 4 92 38 76 31 */
-- /* All rights reserved */
-- /***************************************************************************/
--
-- /***************************************************************************/
-- /* This file contains the set that manages the interpreter */
-- /***************************************************************************/
program java_program_interpretation is
use java;
use PSP;
import
interpretProgram (
Objects, ClassVariablesL -> Objects, ClassVariablesL ) ,
getTheNewExecutingThread (
ClassVariablesL |- Objects -> Objects, ObjectId ) ,
executeThread (
Objects, ClassVariablesL, ObjectId -> Objects, ClassVariablesL )
from java_concurrency;
import
ENVgetUserAction ( ) ,
ENVfreeEnvironment ( )
from java_environment;
import
getMainThread ( |- TypeDeclarations -> Object
) , areAllThreadsDead ( Objects -> Bool ) ,
loadClasses ( TypeDeclarations -> ClassVariablesL )
from java_object_list;
import
setCompilationUnit ( _ ) ,
setNewCompilationUnit ( _ ) ,
setFirstExecutingThread ( _ ) , initialize ( )
, deadlock ( ) from jfunctions;
export
interpretProgram(
|- CompUnit -> ObjL, ClVarL ) as interpret(CompUnit)
= (ObjL, ClVarL) ;
set interpretProgram is
--SC: Loads the classes (retrieves the class variables), creates the "main"
--SC: thread (the thread which executes the "main" method) and launches the
--SC: program interpretation.
--
--JC: |- Compilation Unit (i.e. the program abstract syntax tree)
--JC: -> Final list that contains all the objects created during this
--JC: interpretation, Final class variable list.
judgement |- CompilationUnit -> Objects, ClassVariablesL;
--iJC: Objects, Class variables
--iJC: -> updated object list, updated class variable list
judgement (Objects, ClassVariablesL -> Objects, ClassVariablesL);
initialisationOfTheInterpreter:
loadClasses( TDecL -> ClVarL1 ) &
getMainThread( |- TDecL -> Thr )
& setFirstExecutingThread( objectId(true(), objectNumber 0) )
& (objects[Thr], ClVarL1 -> ObjL, ClVarL1_1)
--------------------------------
|- compilationUnit(PackName, ImportL, TDecL) -> ObjL, ClVarL1_1 ;
provided
ENVgetUserAction( ) &
initialize( ) &
setCompilationUnit( compilationUnit(PackName, ImportL, TDecL) )
&
setNewCompilationUnit( compilationUnit(PackName, ImportL, TDecL) );
RecursiveRule_InterpretOneStep:
getTheNewExecutingThread(
ClVarL1 |- ObjL1 -> ObjL1_1, OThId ) &
executeThread( ObjL1_1, ClVarL1, OThId -> ObjL1_2, ClVarL1_1 )
& (ObjL1_2, ClVarL1_1 -> ObjL1_3, ClVarL1_2)
--------------------------------
(ObjL1, ClVarL1 -> ObjL1_3, ClVarL1_2) ;
provided ENVgetUserAction( );
DeadLock:
--RC : No thread can execute itself but there is at least one alive thread.
--RC : Deadlock.
areAllThreadsDead( ObjL -> false() )
--------------------------------
(ObjL, ClVarL -> ObjL, ClVarL) ;
do
deadlock( ) &
ENVfreeEnvironment( );
InterpretationEnd:
--RC : All threads are dead => end of the program interpretation.
areAllThreadsDead( ObjL -> true() )
--------------------------------
(ObjL, ClVarL -> ObjL, ClVarL) ;
do ENVfreeEnvironment( );
end interpretProgram;
end java_program_interpretation