mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-24 03:14:08 +08:00
PR 107630 runtime libs should be self-contained
This is a patch to improve the layering of libgm2. It removes the m2cor Debug.{def,mod} (the codebase will use m2pim Debug instead). It also layers SysStorage under both m2pim Storage and m2iso Storage. SysStorage is now a dependant of m2pim Storage.mod. Halt parameters for Debug.mod and M2RTS.mod now have the same order. gcc/m2/ChangeLog: * gm2-compiler/SymbolKey.mod (PutSymKey): Halt parameters reordered. (DelSymKey): Ditto. * gm2-compiler/ppg.mod (GetEpsilon): Ditto. (GetReachEnd): Ditto. (GetFollow): Ditto. (CodeCondition): Ditto. (CodeThenDo): Ditto. (CodeEnd): Ditto. (RecoverCondition): Ditto. (ConditionIndent): Ditto. * gm2-libs-ch/m2rts.h (M2RTS_Halt): Ditto. * gm2-libs-coroutines/Executive.mod (Assert): Ditto. (Resume): Remove redundant comments. (Wait): Remove redundant comments. * gm2-libs-coroutines/SYSTEM.mod (TRANSFER): Halt parameters reordered. (IOTransferHandler): Ditto. (Finished): Ditto. (localInit): Ditto. * gm2-libs-coroutines/TimerHandler.mod (WaitOn): Halt parameters reordered. (Cancel): Ditto. (ReArmEvent): Ditto. (OnActiveQueue): Ditto. * gm2-libs-iso/COROUTINES.mod (NEWCOROUTINE): Ditto. (Transfer): Ditto. (IOTRANSFER): Ditto. * gm2-libs-iso/EXCEPTIONS.mod (RAISE): Correct Halt parameters. * gm2-libs-iso/M2RTS.def (Halt): Halt parameters reordered. (HaltC): Ditto. * gm2-libs-iso/M2RTS.mod: Ditto. * gm2-libs-iso/RTentity.mod (PutKey): Ditto. (DelKey): Ditto. (findChildAndParent): Ditto. (assert): Ditto. * gm2-libs-iso/Storage.mod (ALLOCATE): Add DebugTrace. Add UseMallocFree test. (DEALLOCATE): Add DebugTrace. Add UseMallocFree test. (assert): Halt parameters reordered. * gm2-libs-log/Termbase.mod (Read): Ditto. (KeyPressed): Ditto. (Write): Ditto. (Init): Ditto. * gm2-libs/Debug.def (Halt): Halt parameters reordered. * gm2-libs/Debug.mod (Halt): Ditto. * gm2-libs/DynamicStrings.def (PopAllocation): Improve comment. * gm2-libs/DynamicStrings.mod (PopAllocation): Improve comment. Halt parameters reordered. * gm2-libs/M2RTS.def (Halt): Ditto. (HaltC): Ditto. * gm2-libs/M2RTS.mod (Halt): Ditto. (HaltC): Ditto. * gm2-libs/PushBackInput.mod (PutStr): Ditto. (PutString): Ditto. (PutCh): Ditto. * gm2-libs/RTExceptions.mod (GetBaseExceptionBlock): Ditto. * gm2-libs/RTint.mod (ReArmTimeVector): Ditto. (GetTimeVector): Ditto. (AttachVector): Ditto. (IncludeVector): Ditto. (Listen): Ditto. * gm2-libs/SysStorage.mod (ALLOCATE): Ditto. (DEALLOCATE): Ditto. (REALLOCATE): Ditto. * gm2-libs-coroutines/Debug.def: Removed. * gm2-libs-coroutines/Debug.mod: Removed. libgm2/ChangeLog: * libm2cor/Makefile.am: Remove * libm2cor/Makefile.in: Rebuild. * libm2iso/RTco.cc (newSem): Halt parameters reordered. (currentThread): Ditto. (never): Ditto. (defined): Ditto. (initThread): Ditto. * libm2iso/m2rts.h (m2iso_M2RTS_HaltC): Ditto. gcc/testsuite/ChangeLog: * gm2/complex/pass/arith3.mod: Halt parameters reordered. * gm2/complex/run/pass/arith3.mod: Ditto. * gm2/complex/run/pass/arith4.mod: Ditto. * gm2/complex/run/pass/arith5.mod: Ditto. * gm2/isolib/run/pass/real2.mod: Ditto. * gm2/isolib/run/pass/real3.mod: Ditto. * gm2/isolib/run/pass/realconv.mod: Ditto. * gm2/isolib/run/pass/realconv2.mod: Ditto. * gm2/pim/pass/testshort.mod: Ditto. * gm2/projects/pim/run/pass/tower/AdvSystem.mod: Ditto. * gm2/projects/pim/run/pass/tower/DrawL.mod: Ditto. * gm2/warnings/returntype/pass/Termbase.mod: Ditto. * gm2/warnings/returntype/pass/keypressedsimple.mod: Ditto. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
This commit is contained in:
parent
acff89c7d7
commit
77924dff14
@ -153,7 +153,7 @@ BEGIN
|
||||
KeyName := NameKey
|
||||
END
|
||||
ELSE
|
||||
Halt('symbol already stored', __LINE__, __FILE__)
|
||||
Halt('symbol already stored', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END PutSymKey ;
|
||||
|
||||
@ -220,7 +220,7 @@ BEGIN
|
||||
END
|
||||
ELSE
|
||||
Halt('trying to delete a symbol that is not in the tree - the compiler never expects this to occur',
|
||||
__LINE__, __FILE__)
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END DelSymKey ;
|
||||
|
||||
@ -237,7 +237,8 @@ BEGIN
|
||||
parent := t ;
|
||||
IF t=NIL
|
||||
THEN
|
||||
Halt('parameter t should never be NIL', __LINE__, __FILE__)
|
||||
Halt('parameter t should never be NIL',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
Assert (t^.Right = NIL) ;
|
||||
child := t^.Left ;
|
||||
|
@ -380,7 +380,8 @@ PROCEDURE GetEpsilon (f: FollowDesc) : TraverseResult ;
|
||||
BEGIN
|
||||
IF f=NIL
|
||||
THEN
|
||||
Halt('why is the follow info NIL?', __LINE__, __FILE__)
|
||||
Halt('why is the follow info NIL?',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN( f^.epsilon )
|
||||
END
|
||||
@ -414,7 +415,8 @@ PROCEDURE GetReachEnd (f: FollowDesc) : TraverseResult ;
|
||||
BEGIN
|
||||
IF f=NIL
|
||||
THEN
|
||||
Halt('why is the follow info NIL?', __LINE__, __FILE__)
|
||||
Halt('why is the follow info NIL?',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN( f^.reachend )
|
||||
END
|
||||
@ -430,7 +432,8 @@ BEGIN
|
||||
WITH f^ DO
|
||||
IF calcfollow
|
||||
THEN
|
||||
Halt('why are we reassigning this follow set?', __LINE__, __FILE__)
|
||||
Halt('why are we reassigning this follow set?',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
follow := s ;
|
||||
calcfollow := TRUE
|
||||
@ -446,14 +449,16 @@ PROCEDURE GetFollow (f: FollowDesc) : SetDesc ;
|
||||
BEGIN
|
||||
IF f=NIL
|
||||
THEN
|
||||
Halt('why is the follow info NIL?', __LINE__, __FILE__)
|
||||
Halt ('why is the follow info NIL?',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
WITH f^ DO
|
||||
IF calcfollow
|
||||
THEN
|
||||
RETURN( follow )
|
||||
ELSE
|
||||
Halt('not calculated the follow set yet..', __LINE__, __FILE__)
|
||||
Halt('not calculated the follow set yet..',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END
|
||||
END
|
||||
@ -2496,7 +2501,8 @@ BEGIN
|
||||
m2while: IndentString('WHILE ')
|
||||
|
||||
ELSE
|
||||
Halt('unrecognised m2condition', __LINE__, __FILE__)
|
||||
Halt('unrecognised m2condition',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END CodeCondition ;
|
||||
|
||||
@ -2521,7 +2527,8 @@ BEGIN
|
||||
Output.WriteLn
|
||||
|
||||
ELSE
|
||||
Halt('unrecognised m2condition', __LINE__, __FILE__)
|
||||
Halt('unrecognised m2condition',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
OnLineStart := TRUE
|
||||
END CodeThenDo ;
|
||||
@ -2604,7 +2611,8 @@ BEGIN
|
||||
m2while: IndentString('END ; (* while *)')
|
||||
|
||||
ELSE
|
||||
Halt('unrecognised m2condition', __LINE__, __FILE__)
|
||||
Halt('unrecognised m2condition',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
OnLineStart := FALSE
|
||||
END CodeEnd ;
|
||||
@ -2861,7 +2869,8 @@ BEGIN
|
||||
m2while: IndentString('WHILE ')
|
||||
|
||||
ELSE
|
||||
Halt('unrecognised m2condition', __LINE__, __FILE__)
|
||||
Halt('unrecognised m2condition',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END RecoverCondition ;
|
||||
|
||||
@ -2880,7 +2889,8 @@ BEGIN
|
||||
m2while: RETURN( 6 )
|
||||
|
||||
ELSE
|
||||
Halt('unrecognised m2condition', __LINE__, __FILE__)
|
||||
Halt('unrecognised m2condition',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END ConditionIndent ;
|
||||
|
||||
@ -3938,7 +3948,8 @@ BEGIN
|
||||
WasNoError := FALSE
|
||||
|
||||
ELSE
|
||||
Halt('unknown element in enumeration type', __LINE__, __FILE__)
|
||||
Halt('unknown element in enumeration type',
|
||||
__FILE_, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END ;
|
||||
from := from^.next
|
||||
|
@ -38,4 +38,4 @@ extern "C" void M2RTS_ConstructModules (const void *,
|
||||
extern "C" void M2RTS_Terminate (void);
|
||||
extern "C" void M2RTS_DeconstructModules (void);
|
||||
|
||||
extern "C" void M2RTS_Halt (const char *, int, const char *, const char *) __attribute__ ((noreturn));
|
||||
extern "C" void M2RTS_Halt (const char *, const char *, const char *, int) __attribute__ ((noreturn));
|
||||
|
@ -1,79 +0,0 @@
|
||||
(* Debug.def provides some simple debugging routines.
|
||||
|
||||
Copyright (C) 2002-2023 Free Software Foundation, Inc.
|
||||
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
|
||||
|
||||
This file is part of GNU Modula-2.
|
||||
|
||||
GNU Modula-2 is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Modula-2 is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
Under Section 7 of GPL version 3, you are granted additional
|
||||
permissions described in the GCC Runtime Library Exception, version
|
||||
3.1, as published by the Free Software Foundation.
|
||||
|
||||
You should have received a copy of the GNU General Public License and
|
||||
a copy of the GCC Runtime Library Exception along with this program;
|
||||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
<http://www.gnu.org/licenses/>. *)
|
||||
|
||||
DEFINITION MODULE Debug ;
|
||||
|
||||
(*
|
||||
Title : Debug
|
||||
Author : Gaius Mulley
|
||||
System : UNIX (gm2)
|
||||
Date : Sat Aug 13 19:41:57 1994
|
||||
Last edit : Sat Aug 13 19:41:57 1994
|
||||
Description: provides some simple debugging routines.
|
||||
*)
|
||||
|
||||
EXPORT QUALIFIED Halt, DebugString, PushOutput ;
|
||||
|
||||
TYPE
|
||||
WriteP = PROCEDURE (CHAR) ;
|
||||
|
||||
|
||||
(*
|
||||
Halt - writes a message in the format:
|
||||
Module:Line:Message
|
||||
|
||||
It then terminates by calling HALT.
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (File : ARRAY OF CHAR;
|
||||
LineNo : CARDINAL;
|
||||
Function,
|
||||
Message : ARRAY OF CHAR) <* noreturn *> ;
|
||||
|
||||
|
||||
(*
|
||||
DebugString - writes a string to the debugging device (Scn.Write).
|
||||
It interprets \n as carriage return, linefeed.
|
||||
*)
|
||||
|
||||
PROCEDURE DebugString (a: ARRAY OF CHAR) ;
|
||||
|
||||
|
||||
(*
|
||||
PushOutput - pushes the output procedure, p, which is used Debug.
|
||||
*)
|
||||
|
||||
PROCEDURE PushOutput (p: WriteP) ;
|
||||
|
||||
|
||||
(*
|
||||
PopOutput - pops the current output procedure from the stack.
|
||||
*)
|
||||
|
||||
PROCEDURE PopOutput ;
|
||||
|
||||
|
||||
END Debug.
|
@ -1,180 +0,0 @@
|
||||
(* Debug.mod provides some simple debugging routines.
|
||||
|
||||
Copyright (C) 2002-2023 Free Software Foundation, Inc.
|
||||
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
|
||||
|
||||
This file is part of GNU Modula-2.
|
||||
|
||||
GNU Modula-2 is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Modula-2 is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
Under Section 7 of GPL version 3, you are granted additional
|
||||
permissions described in the GCC Runtime Library Exception, version
|
||||
3.1, as published by the Free Software Foundation.
|
||||
|
||||
You should have received a copy of the GNU General Public License and
|
||||
a copy of the GCC Runtime Library Exception along with this program;
|
||||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
<http://www.gnu.org/licenses/>. *)
|
||||
|
||||
IMPLEMENTATION MODULE Debug ;
|
||||
|
||||
|
||||
FROM ASCII IMPORT cr, nul, lf ;
|
||||
FROM NumberIO IMPORT CardToStr ;
|
||||
FROM libc IMPORT exit, write ;
|
||||
FROM SYSTEM IMPORT ADR ;
|
||||
|
||||
|
||||
CONST
|
||||
MaxStack = 10 ;
|
||||
|
||||
VAR
|
||||
Stack: ARRAY [1..MaxStack] OF WriteP ;
|
||||
Ptr : CARDINAL ;
|
||||
|
||||
|
||||
PROCEDURE Write (ch: CHAR) ;
|
||||
BEGIN
|
||||
IF Ptr>0
|
||||
THEN
|
||||
Stack[Ptr](ch)
|
||||
ELSE
|
||||
LocalWrite(ch)
|
||||
END
|
||||
END Write ;
|
||||
|
||||
|
||||
PROCEDURE LocalWrite (ch: CHAR) ;
|
||||
VAR
|
||||
r: INTEGER ;
|
||||
BEGIN
|
||||
r := write(2, ADR(ch), 1)
|
||||
END LocalWrite ;
|
||||
|
||||
|
||||
(*
|
||||
PushOutput - pushes the output procedure, p, which is used Debug.
|
||||
*)
|
||||
|
||||
PROCEDURE PushOutput (p: WriteP) ;
|
||||
BEGIN
|
||||
IF Ptr=MaxStack
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'stack exceeded')
|
||||
ELSE
|
||||
INC(Ptr) ;
|
||||
Stack[Ptr] := p
|
||||
END
|
||||
END PushOutput ;
|
||||
|
||||
|
||||
(*
|
||||
PopOutput - pops the current output procedure from the stack.
|
||||
*)
|
||||
|
||||
PROCEDURE PopOutput ;
|
||||
BEGIN
|
||||
IF Ptr>1
|
||||
THEN
|
||||
DEC(Ptr)
|
||||
END
|
||||
END PopOutput ;
|
||||
|
||||
|
||||
(*
|
||||
Halt - writes a message in the format:
|
||||
Module:Line:Message
|
||||
|
||||
It then terminates by calling HALT.
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (File : ARRAY OF CHAR;
|
||||
LineNo : CARDINAL;
|
||||
Function,
|
||||
Message : ARRAY OF CHAR) ;
|
||||
CONST
|
||||
MaxNoOfDigits = 12 ; (* should be large enough for most source files.. *)
|
||||
VAR
|
||||
No : ARRAY [0..MaxNoOfDigits] OF CHAR ;
|
||||
BEGIN
|
||||
DebugString(File) ;
|
||||
CardToStr(LineNo, 0, No) ;
|
||||
DebugString(':') ;
|
||||
DebugString(No) ;
|
||||
DebugString(':') ;
|
||||
DebugString(Function) ;
|
||||
DebugString(':') ;
|
||||
DebugString(Message) ;
|
||||
DebugString('\n') ;
|
||||
HALT
|
||||
END Halt ;
|
||||
|
||||
|
||||
(*
|
||||
DebugString - writes a string to the debugging device (Scn.Write).
|
||||
It interprets \n as carriage return, linefeed.
|
||||
*)
|
||||
|
||||
PROCEDURE DebugString (a: ARRAY OF CHAR) ;
|
||||
VAR
|
||||
n, high: CARDINAL ;
|
||||
BEGIN
|
||||
high := HIGH( a ) ;
|
||||
n := 0 ;
|
||||
WHILE (n <= high) AND (a[n] # nul) DO
|
||||
IF a[n]='\'
|
||||
THEN
|
||||
IF n+1<=high
|
||||
THEN
|
||||
IF a[n+1]='n'
|
||||
THEN
|
||||
WriteLn ;
|
||||
INC(n)
|
||||
ELSIF a[n+1]='\'
|
||||
THEN
|
||||
Write('\') ;
|
||||
INC(n)
|
||||
END
|
||||
END
|
||||
ELSE
|
||||
Write( a[n] )
|
||||
END ;
|
||||
INC( n )
|
||||
END
|
||||
END DebugString ;
|
||||
|
||||
|
||||
(*
|
||||
WriteLn - writes a carriage return and a newline
|
||||
character.
|
||||
*)
|
||||
|
||||
PROCEDURE WriteLn ;
|
||||
BEGIN
|
||||
Write(cr) ;
|
||||
Write(lf)
|
||||
END WriteLn ;
|
||||
|
||||
|
||||
(*
|
||||
Init - initialises this module.
|
||||
*)
|
||||
|
||||
PROCEDURE Init ;
|
||||
BEGIN
|
||||
Ptr := 0 ;
|
||||
PushOutput(LocalWrite)
|
||||
END Init ;
|
||||
|
||||
|
||||
BEGIN
|
||||
Init
|
||||
END Debug.
|
@ -105,7 +105,7 @@ BEGIN
|
||||
IF NOT c
|
||||
THEN
|
||||
Ps ;
|
||||
Halt(file, line, function, 'assert failed')
|
||||
Halt ('assert failed', file, function, line)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
@ -178,23 +178,21 @@ VAR
|
||||
ToOldState: PROTECTION ;
|
||||
BEGIN
|
||||
(* ToOldState := TurnInterrupts(MAX(PROTECTION)) ; (* disable interrupts *) *)
|
||||
|
||||
(* your code needs to go here *)
|
||||
WITH d^ DO (* remove for student *)
|
||||
IF Status=Suspended (* remove for student *)
|
||||
THEN (* remove for student *)
|
||||
(* legal state transition *) (* remove for student *)
|
||||
Status := Runnable ; (* change status *) (* remove for student *)
|
||||
AddToReady(d) ; (* add to run queue *) (* remove for student *)
|
||||
RunQueue[RunPriority] := d ; (* make d at top of q *) (* remove for student *)
|
||||
Reschedule (* check whether this process has a higher run priority *) (* remove for student *)
|
||||
ELSE (* remove for student *)
|
||||
(* we are trying to Resume a process which is *) (* remove for student *)
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, (* remove for student *)
|
||||
'trying to resume a process which is not suspended') ; (* remove for student *)
|
||||
RETURN( NIL ) (* not held in a Suspended state - error *) (* remove for student *)
|
||||
END (* remove for student *)
|
||||
END ; (* remove for student *)
|
||||
WITH d^ DO
|
||||
IF Status=Suspended
|
||||
THEN
|
||||
(* legal state transition *)
|
||||
Status := Runnable ; (* change status *)
|
||||
AddToReady(d) ; (* add to run queue *)
|
||||
RunQueue[RunPriority] := d ; (* make d at top of q *)
|
||||
Reschedule (* check whether this process has a higher run priority *)
|
||||
ELSE
|
||||
(* we are trying to Resume a process which is *)
|
||||
Halt ('trying to resume a process which is not suspended',
|
||||
__FILE__, __FUNCTION__, __LINE__) ;
|
||||
RETURN( NIL ) (* not held in a Suspended state - error *)
|
||||
END
|
||||
END ;
|
||||
(* ToOldState := TurnInterrupts(ToOldState) ; (* restore interrupts *) *)
|
||||
RETURN( d )
|
||||
END Resume ;
|
||||
@ -255,25 +253,24 @@ VAR
|
||||
ToOldState: PROTECTION ;
|
||||
BEGIN
|
||||
(* ToOldState := TurnInterrupts(MAX(PROTECTION)) ; (* disable interrupts *) *)
|
||||
|
||||
(* your code needs to go here *)
|
||||
WITH s^ DO (* remove for student *)
|
||||
IF Value>0 (* remove for student *)
|
||||
THEN (* remove for student *)
|
||||
DEC( Value ) (* remove for student *)
|
||||
ELSE (* remove for student *)
|
||||
SubFromReady(CurrentProcess) ; (* remove from run q *) (* remove for student *)
|
||||
WITH s^ DO
|
||||
IF Value>0
|
||||
THEN
|
||||
DEC( Value )
|
||||
ELSE
|
||||
SubFromReady(CurrentProcess) ; (* remove from run q *)
|
||||
IF Who=CurrentProcess
|
||||
THEN
|
||||
Ps ;
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'we are already on sem')
|
||||
Halt ('we are already on sem',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
AddToSemaphore(Who, CurrentProcess) ; (* add to semaphore q *) (* remove for student *)
|
||||
CurrentProcess^.Status := WaitOnSem ; (* set new status *) (* remove for student *)
|
||||
CurrentProcess^.Which := s ; (* debugging aid *) (* remove for student *)
|
||||
Reschedule (* find next process *) (* remove for student *)
|
||||
END (* remove for student *)
|
||||
END ; (* remove for student *)
|
||||
AddToSemaphore(Who, CurrentProcess) ; (* add to semaphore q *)
|
||||
CurrentProcess^.Status := WaitOnSem ; (* set new status *)
|
||||
CurrentProcess^.Which := s ; (* debugging aid *)
|
||||
Reschedule (* find next process *)
|
||||
END
|
||||
END ;
|
||||
(* ToOldState := TurnInterrupts(ToOldState) (* restore interrupts *) *)
|
||||
END Wait ;
|
||||
|
||||
|
@ -66,8 +66,8 @@ BEGIN
|
||||
localMain (p1) ;
|
||||
IF p1.context=p2.context
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'error when attempting to context switch to the same process')
|
||||
Halt('error when attempting to context switch to the same process',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
transfer (p1.context, p2.context)
|
||||
END TRANSFER ;
|
||||
@ -130,15 +130,15 @@ VAR
|
||||
BEGIN
|
||||
IF l=NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'no processes attached to this interrupt vector which is associated with IOTRANSFER')
|
||||
Halt ('no processes attached to this interrupt vector which is associated with IOTRANSFER',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
WITH l^ DO
|
||||
old := AttachVector (InterruptNo, next) ;
|
||||
IF old#l
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'inconsistancy of return result')
|
||||
Halt ('inconsistancy of return result',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
IF next=NIL
|
||||
THEN
|
||||
@ -210,7 +210,8 @@ END TurnInterrupts ;
|
||||
|
||||
PROCEDURE Finished (p: ADDRESS) ;
|
||||
BEGIN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'process terminated illegally')
|
||||
Halt('process terminated illegally',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END Finished ;
|
||||
|
||||
|
||||
@ -225,7 +226,8 @@ BEGIN
|
||||
initGTh := TRUE ;
|
||||
IF init () # 0
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__, "gthr did not initialize")
|
||||
Halt ("gthr did not initialize",
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
RTint.Init
|
||||
END
|
||||
|
@ -162,8 +162,8 @@ BEGIN
|
||||
(* ToOldState := TurnInterrupts(MAX(PROTECTION)) ; (* disable interrupts *) *)
|
||||
IF e=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'event should never be NIL')
|
||||
Halt ('event should never be NIL',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
WITH e^ DO
|
||||
(* we will just check to see whether someone has cancelled this *)
|
||||
@ -215,8 +215,8 @@ BEGIN
|
||||
Cancelled := NOT WasCancelled ;
|
||||
IF WasCancelled
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'inconsistancy event has been cancelled and it is on queue')
|
||||
Halt ('inconsistancy event has been cancelled and it is on queue',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
OnSoloQueue(e) ;
|
||||
WasCancelled := TRUE ;
|
||||
@ -265,8 +265,8 @@ BEGIN
|
||||
NoOfTicks := t ; (* give it a new time *)
|
||||
OnActiveQueue(e) (* back on queue *)
|
||||
ELSE
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'ReArm should not be asked to ReArm a dead event')
|
||||
Halt ('ReArm should not be asked to ReArm a dead event',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END ;
|
||||
(* ToOldState := TurnInterrupts(ToOldState) ; (* restore interrupts *) *)
|
||||
@ -472,7 +472,8 @@ BEGIN
|
||||
THEN
|
||||
IF IsOnDeadQueue(e)
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'illegal state change')
|
||||
Halt ('illegal state change',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSIF IsOnSoloQueue(e)
|
||||
THEN
|
||||
RelativeAddToActive(e) ;
|
||||
|
@ -115,7 +115,7 @@ BEGIN
|
||||
tp := initThread (procBody, size, initProtection) ;
|
||||
IF tp = -1
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__, 'unable to create a new thread')
|
||||
Halt ('unable to create a new thread', __FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
NEW (cr) ;
|
||||
WITH cr^ DO
|
||||
@ -170,8 +170,8 @@ BEGIN
|
||||
from := currentCoRoutine ;
|
||||
IF to^.context = from^.context
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'error when attempting to context switch to the same process')
|
||||
Halt ('error when attempting to context switch to the same process',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
from^.inexcept := SetExceptionState (to^.inexcept) ;
|
||||
from^.source := GetExceptionSource () ;
|
||||
@ -225,8 +225,8 @@ BEGIN
|
||||
Init ;
|
||||
IF init () # 0
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'failed to initialize RTco')
|
||||
Halt ('failed to initialize RTco',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
RTint.Init ;
|
||||
initCo := TRUE
|
||||
@ -252,8 +252,8 @@ BEGIN
|
||||
old := TurnInterrupts (MAX (PROTECTION)) ;
|
||||
IF from = to
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
"error IOTRANSFER cannot transfer control to the running COROUTINE")
|
||||
Halt ("error IOTRANSFER cannot transfer control to the running COROUTINE",
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
wait (lock) ;
|
||||
l := currentCoRoutine^.attached ;
|
||||
@ -511,8 +511,8 @@ BEGIN
|
||||
localInit ;
|
||||
IF l = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'no coroutine attached to this interrupt vector which was initiated by IOTRANSFER')
|
||||
Halt ('no coroutine attached to this interrupt vector which was initiated by IOTRANSFER',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
IF Debugging
|
||||
THEN
|
||||
@ -536,8 +536,8 @@ BEGIN
|
||||
ourself := AttachVector (InterruptNo, chain) ;
|
||||
IF ourself # l
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'inconsistancy of return result')
|
||||
Halt ('inconsistancy of return result',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
IF chain = NIL
|
||||
THEN
|
||||
|
@ -64,7 +64,8 @@ BEGIN
|
||||
RTExceptions.SetExceptionBlock(source^.eh) ;
|
||||
RTExceptions.Raise(number, ADR(__FILE__), __LINE__, __COLUMN__, ADR(__FUNCTION__), ADR(message)) ;
|
||||
(* we should never reach here as Raise should jump to the exception handler *)
|
||||
M2RTS.Halt(__FILE__, __LINE__, __FUNCTION__, 'should never return from RTException.Raise')
|
||||
M2RTS.Halt('should never return from RTException.Raise',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END RAISE ;
|
||||
|
||||
|
||||
|
@ -116,9 +116,8 @@ PROCEDURE HALT ([exitcode: INTEGER = -1]) <* noreturn *> ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
function: ARRAY OF CHAR; description: ARRAY OF CHAR)
|
||||
<* noreturn *> ;
|
||||
PROCEDURE Halt (description, filename, function: ARRAY OF CHAR;
|
||||
line: CARDINAL) <* noreturn *> ;
|
||||
|
||||
|
||||
(*
|
||||
@ -127,8 +126,9 @@ PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE HaltC (filename: ADDRESS; line: CARDINAL;
|
||||
function, description: ADDRESS) <* noreturn *> ;
|
||||
PROCEDURE HaltC (description, filename, function: ADDRESS;
|
||||
line: CARDINAL) <* noreturn *> ;
|
||||
|
||||
|
||||
|
||||
(*
|
||||
|
@ -337,8 +337,7 @@ END ErrorMessageC ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE HaltC (filename: ADDRESS; line: CARDINAL;
|
||||
function, description: ADDRESS) ;
|
||||
PROCEDURE HaltC (description, filename, function: ADDRESS; line: CARDINAL) ;
|
||||
BEGIN
|
||||
ErrorMessageC (description, filename, line, function)
|
||||
END HaltC ;
|
||||
@ -350,8 +349,7 @@ END HaltC ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
function: ARRAY OF CHAR; description: ARRAY OF CHAR) ;
|
||||
PROCEDURE Halt (description, filename, function: ARRAY OF CHAR; line: CARDINAL) ;
|
||||
BEGIN
|
||||
ErrorMessage (description, filename, line, function)
|
||||
END Halt ;
|
||||
|
@ -137,8 +137,8 @@ BEGIN
|
||||
entityKey := key
|
||||
END
|
||||
ELSE
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'internal runtime error, entity already stored')
|
||||
Halt ('internal runtime error, entity already stored',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
signal (mutex)
|
||||
END PutKey ;
|
||||
@ -221,8 +221,8 @@ BEGIN
|
||||
free (child)
|
||||
END
|
||||
ELSE
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'internal runtime error, trying to delete an entity which is not in the tree')
|
||||
Halt('internal runtime error, trying to delete an entity which is not in the tree',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
signal (mutex)
|
||||
END DelKey ;
|
||||
@ -241,8 +241,8 @@ BEGIN
|
||||
parent := t ;
|
||||
IF t = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'internal runtime error, RTentity is either corrupt or the module storage has not been initialized yet')
|
||||
Halt ('internal runtime error, RTentity is either corrupt or the module storage has not been initialized yet',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
child := t^.left ;
|
||||
IF child # NIL
|
||||
@ -270,8 +270,8 @@ PROCEDURE assert (condition: BOOLEAN) ;
|
||||
BEGIN
|
||||
IF NOT condition
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'internal runtime error, RTentity is either corrupt or the module storage has not been initialized yet')
|
||||
Halt ('internal runtime error, RTentity is either corrupt or the module storage has not been initialized yet',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END assert ;
|
||||
|
||||
|
@ -26,7 +26,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
|
||||
IMPLEMENTATION MODULE Storage ;
|
||||
|
||||
FROM libc IMPORT malloc, free, memcpy ;
|
||||
FROM libc IMPORT memcpy, abort, malloc, free, printf ;
|
||||
|
||||
IMPORT SysStorage ;
|
||||
|
||||
FROM M2RTS IMPORT Halt ;
|
||||
FROM SYSTEM IMPORT TSIZE ;
|
||||
FROM M2EXCEPTION IMPORT M2Exceptions ;
|
||||
@ -37,11 +40,28 @@ FROM EXCEPTIONS IMPORT ExceptionNumber, RAISE,
|
||||
IsExceptionalExecution ;
|
||||
|
||||
|
||||
CONST
|
||||
DebugTrace = FALSE ;
|
||||
UseMallocFree = FALSE ;
|
||||
|
||||
|
||||
PROCEDURE ALLOCATE (VAR addr: SYSTEM.ADDRESS; amount: CARDINAL) ;
|
||||
BEGIN
|
||||
Init ;
|
||||
addr := malloc (amount) ;
|
||||
IF DebugTrace
|
||||
THEN
|
||||
printf ("request m2iso:Storage.ALLOCATE (..., %d bytes)\n", amount)
|
||||
END ;
|
||||
IF UseMallocFree
|
||||
THEN
|
||||
addr := malloc (amount)
|
||||
ELSE
|
||||
SysStorage.ALLOCATE (addr, amount)
|
||||
END ;
|
||||
IF DebugTrace
|
||||
THEN
|
||||
printf ("return m2iso:Storage.ALLOCATE (%p, %d bytes)\n", addr, amount)
|
||||
END ;
|
||||
IF addr#NIL
|
||||
THEN
|
||||
PutKey (storageTree, addr, amount)
|
||||
@ -52,9 +72,18 @@ END ALLOCATE ;
|
||||
PROCEDURE DEALLOCATE (VAR addr: SYSTEM.ADDRESS; amount: CARDINAL) ;
|
||||
BEGIN
|
||||
assert (initialized) ;
|
||||
IF DebugTrace
|
||||
THEN
|
||||
printf ("m2iso:Storage.DEALLOCATE (%p, %d bytes)\n", addr, amount)
|
||||
END ;
|
||||
IF VerifyDeallocate (addr, amount)
|
||||
THEN
|
||||
free (addr) ;
|
||||
IF UseMallocFree
|
||||
THEN
|
||||
free (addr)
|
||||
ELSE
|
||||
SysStorage.DEALLOCATE (addr, amount)
|
||||
END ;
|
||||
addr := NIL
|
||||
END
|
||||
END DEALLOCATE ;
|
||||
@ -115,7 +144,7 @@ PROCEDURE VerifyDeallocate (addr: SYSTEM.ADDRESS; amount: CARDINAL) : BOOLEAN ;
|
||||
VAR
|
||||
a: CARDINAL ;
|
||||
BEGIN
|
||||
|
||||
Init ;
|
||||
IF addr=NIL
|
||||
THEN
|
||||
RAISE (storageException, ORD(nilDeallocation), 'deallocating pointer whose value is NIL') ;
|
||||
@ -146,8 +175,8 @@ PROCEDURE assert (condition: BOOLEAN) ;
|
||||
BEGIN
|
||||
IF NOT condition
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'internal runtime error, module Storage has not been initialized yet')
|
||||
Halt ('internal runtime error, module Storage has not been initialized yet',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END assert ;
|
||||
|
||||
|
@ -106,7 +106,7 @@ PROCEDURE Read (VAR ch: CHAR) ;
|
||||
BEGIN
|
||||
IF rStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active read procedure')
|
||||
Halt ('no active read procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
rStack^.r(ch)
|
||||
END
|
||||
@ -121,7 +121,7 @@ PROCEDURE KeyPressed () : BOOLEAN ;
|
||||
BEGIN
|
||||
IF rStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active status procedure')
|
||||
Halt ('no active status procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN( rStack^.s() )
|
||||
END
|
||||
@ -185,7 +185,7 @@ PROCEDURE Write (VAR ch: CHAR) ;
|
||||
BEGIN
|
||||
IF wStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active write procedure')
|
||||
Halt ('no active write procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
wStack^.w(ch)
|
||||
END
|
||||
@ -205,12 +205,12 @@ BEGIN
|
||||
AssignRead(Keyboard.Read, Keyboard.KeyPressed, Done) ;
|
||||
IF NOT Done
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'failed to assign read routines from module Keyboard')
|
||||
Halt ('failed to assign read routines from module Keyboard', __FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
AssignWrite(Display.Write, Done) ;
|
||||
IF NOT Done
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'failed to assign write routine from module Display')
|
||||
Halt ('failed to assign write routine from module Display', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END Init ;
|
||||
|
||||
|
@ -40,14 +40,15 @@ EXPORT QUALIFIED Halt, DebugString ;
|
||||
|
||||
(*
|
||||
Halt - writes a message in the format:
|
||||
Module:Line:Message
|
||||
Module:Function:Line:Message
|
||||
|
||||
It then terminates by calling HALT.
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (Message: ARRAY OF CHAR;
|
||||
LineNo: CARDINAL;
|
||||
Module: ARRAY OF CHAR) ;
|
||||
PROCEDURE Halt (Message,
|
||||
Module,
|
||||
Function: ARRAY OF CHAR ;
|
||||
LineNo : CARDINAL) ;
|
||||
|
||||
|
||||
(*
|
||||
|
@ -34,20 +34,24 @@ FROM libc IMPORT exit ;
|
||||
|
||||
(*
|
||||
Halt - writes a message in the format:
|
||||
Module:Line:Message
|
||||
Module:Function:Line:Message
|
||||
|
||||
It then terminates by calling HALT.
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (Message: ARRAY OF CHAR;
|
||||
LineNo: CARDINAL;
|
||||
Module: ARRAY OF CHAR) ;
|
||||
PROCEDURE Halt (Message,
|
||||
Module,
|
||||
Function: ARRAY OF CHAR ;
|
||||
LineNo : CARDINAL) ;
|
||||
CONST
|
||||
MaxNoOfDigits = 12 ; (* should be large enough for most source files.. *)
|
||||
VAR
|
||||
No : ARRAY [0..MaxNoOfDigits] OF CHAR ;
|
||||
BEGIN
|
||||
DebugString(Module) ;
|
||||
DebugString(':') ;
|
||||
DebugString(Function) ;
|
||||
DebugString(':') ;
|
||||
CardToStr(LineNo, 0, No) ;
|
||||
DebugString(':') ;
|
||||
DebugString(No) ;
|
||||
|
@ -361,9 +361,9 @@ PROCEDURE PopAllocation (halt: BOOLEAN) ;
|
||||
|
||||
(*
|
||||
PopAllocationExemption - test to see that all strings are
|
||||
deallocated, except string, e, since
|
||||
deallocated, except string e since
|
||||
the last push.
|
||||
Then it pops to the previous
|
||||
Post-condition: it pops to the previous
|
||||
allocation/deallocation lists.
|
||||
|
||||
If halt is true then the application
|
||||
|
@ -153,8 +153,8 @@ END stop ;
|
||||
|
||||
(*
|
||||
PopAllocationExemption - test to see that all strings are deallocated, except
|
||||
string, e, since the last push.
|
||||
Then it pops to the previous allocation/deallocation
|
||||
string e since the last push.
|
||||
Post-condition: it pops to the previous allocation/deallocation
|
||||
lists.
|
||||
|
||||
If halt is true then the application terminates
|
||||
@ -173,8 +173,8 @@ BEGIN
|
||||
IF frameHead = NIL
|
||||
THEN
|
||||
stop ;
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
"mismatched number of PopAllocation's compared to PushAllocation's")
|
||||
Halt ("mismatched number of PopAllocation's compared to PushAllocation's",
|
||||
__FILE__, __FUNCTION__, __LINE__) ;
|
||||
(* writeString ("mismatched number of PopAllocation's compared to PushAllocation's") *)
|
||||
ELSE
|
||||
IF frameHead^.alloc # NIL
|
||||
|
@ -125,9 +125,8 @@ PROCEDURE HALT ([exitcode: INTEGER = -1]) <* noreturn *> ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
function: ARRAY OF CHAR; description: ARRAY OF CHAR)
|
||||
<* noreturn *> ;
|
||||
PROCEDURE Halt (description, filename, function: ARRAY OF CHAR;
|
||||
line: CARDINAL) <* noreturn *> ;
|
||||
|
||||
|
||||
(*
|
||||
@ -136,8 +135,8 @@ PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE HaltC (filename: ADDRESS; line: CARDINAL;
|
||||
function, description: ADDRESS) <* noreturn *> ;
|
||||
PROCEDURE HaltC (description, filename, function: ADDRESS;
|
||||
line: CARDINAL) <* noreturn *> ;
|
||||
|
||||
|
||||
(*
|
||||
|
@ -336,8 +336,7 @@ END ErrorMessageC ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE HaltC (filename: ADDRESS; line: CARDINAL;
|
||||
function, description: ADDRESS) ;
|
||||
PROCEDURE HaltC (description, filename, function: ADDRESS; line: CARDINAL) ;
|
||||
BEGIN
|
||||
ErrorMessageC (description, filename, line, function)
|
||||
END HaltC ;
|
||||
@ -349,8 +348,7 @@ END HaltC ;
|
||||
to stderr and calls exit (1).
|
||||
*)
|
||||
|
||||
PROCEDURE Halt (filename: ARRAY OF CHAR; line: CARDINAL;
|
||||
function: ARRAY OF CHAR; description: ARRAY OF CHAR) ;
|
||||
PROCEDURE Halt (description, filename, function: ARRAY OF CHAR; line: CARDINAL) ;
|
||||
BEGIN
|
||||
ErrorMessage (description, filename, line, function)
|
||||
END Halt ;
|
||||
|
@ -110,7 +110,7 @@ BEGIN
|
||||
DEC (i) ;
|
||||
IF PutCh (char (s, i)) # char (s, i)
|
||||
THEN
|
||||
Halt('assert failed', __LINE__, __FILE__)
|
||||
Halt('assert failed', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END
|
||||
END PutStr ;
|
||||
@ -129,7 +129,7 @@ BEGIN
|
||||
DEC (l) ;
|
||||
IF PutCh (a[l]) # a[l]
|
||||
THEN
|
||||
Halt ('assert failed', __LINE__, __FILE__)
|
||||
Halt ('assert failed', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END
|
||||
END PutString ;
|
||||
@ -147,7 +147,8 @@ BEGIN
|
||||
CharStack[StackPtr] := ch ;
|
||||
INC(StackPtr)
|
||||
ELSE
|
||||
Halt('max push back stack exceeded, increase MaxPushBackStack', __LINE__, __FILE__)
|
||||
Halt('max push back stack exceeded, increase MaxPushBackStack',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
RETURN( ch )
|
||||
END PutCh ;
|
||||
|
@ -596,7 +596,8 @@ PROCEDURE GetBaseExceptionBlock () : EHBlock ;
|
||||
BEGIN
|
||||
IF currentEHB=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'currentEHB has not been initialized yet')
|
||||
Halt('currentEHB has not been initialized yet',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN( currentEHB )
|
||||
END
|
||||
|
@ -283,8 +283,8 @@ BEGIN
|
||||
vptr := FindVectorNo (vec) ;
|
||||
IF vptr = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'cannot find vector supplied')
|
||||
Halt ('cannot find vector supplied',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
WITH vptr^ DO
|
||||
SetTime (rel, secs + DebugTime, micro)
|
||||
@ -309,8 +309,8 @@ BEGIN
|
||||
vptr := FindVectorNo (vec) ;
|
||||
IF vptr=NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'cannot find vector supplied')
|
||||
Halt ('cannot find vector supplied',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
WITH vptr^ DO
|
||||
GetTime (rel, secs, micro) ;
|
||||
@ -336,7 +336,8 @@ BEGIN
|
||||
vptr := FindVectorNo (vec) ;
|
||||
IF vptr = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__, 'cannot find vector supplied')
|
||||
Halt ( 'cannot find vector supplied',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
prevArg := vptr^.arg ;
|
||||
vptr^.arg := ptr ;
|
||||
@ -369,8 +370,8 @@ BEGIN
|
||||
vptr := FindVectorNo (vec) ;
|
||||
IF vptr = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'cannot find vector supplied') ;
|
||||
Halt ('cannot find vector supplied',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
(* printf('including vector %d (fd = %d)\n', vec, v^.File) ; *)
|
||||
vptr^.pending := Pending[vptr^.priority] ;
|
||||
@ -411,8 +412,8 @@ BEGIN
|
||||
vptr := FindPendingVector (vec) ;
|
||||
IF vptr = NIL
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'cannot find pending vector supplied')
|
||||
Halt ('cannot find pending vector supplied',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
(* printf('excluding vector %d\n', vec) ; *)
|
||||
IF Pending[vptr^.priority] = vptr
|
||||
@ -727,8 +728,8 @@ BEGIN
|
||||
END ;
|
||||
IF untilInterrupt AND (inSet=NIL) AND (outSet=NIL) AND (NOT found)
|
||||
THEN
|
||||
Halt (__FILE__, __LINE__, __FUNCTION__,
|
||||
'deadlock found, no more processes to run and no interrupts active')
|
||||
Halt ('deadlock found, no more processes to run and no interrupts active',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
(* printf('timeval = 0x%x\n', timeval) ; *)
|
||||
(* printf('}\n') ; *)
|
||||
|
@ -33,8 +33,8 @@ FROM SYSTEM IMPORT ADR ;
|
||||
|
||||
CONST
|
||||
enableDeallocation = TRUE ;
|
||||
enableZero = FALSE ;
|
||||
enableTrace = FALSE ;
|
||||
enableZero = TRUE ;
|
||||
enableTrace = TRUE ;
|
||||
|
||||
VAR
|
||||
callno: CARDINAL ;
|
||||
@ -47,7 +47,8 @@ BEGIN
|
||||
a := malloc (size) ;
|
||||
IF a = NIL
|
||||
THEN
|
||||
Halt ('out of memory error', __LINE__, __FILE__)
|
||||
Halt ('out of memory error',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
IF enableTrace AND trace
|
||||
THEN
|
||||
@ -73,7 +74,8 @@ BEGIN
|
||||
END ;
|
||||
IF memset (a, 0, size) # a
|
||||
THEN
|
||||
Halt ('memset should have returned the first parameter', __LINE__, __FILE__)
|
||||
Halt ('memset should have returned the first parameter',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END ;
|
||||
IF enableDeallocation
|
||||
@ -116,7 +118,8 @@ BEGIN
|
||||
a := realloc (a, size) ;
|
||||
IF a = NIL
|
||||
THEN
|
||||
Halt ('out of memory error', __LINE__, __FILE__)
|
||||
Halt ('out of memory error',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
IF enableTrace AND trace
|
||||
THEN
|
||||
|
@ -28,7 +28,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, 'failed')
|
||||
Halt ('failed', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -29,7 +29,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, 'failure')
|
||||
Halt ('failure', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
@ -42,7 +42,7 @@ VAR
|
||||
a, b, c: COMPLEX ;
|
||||
BEGIN
|
||||
printf ("main module starting\n");
|
||||
printf ("a := i\n");
|
||||
printf ("a := i\n");
|
||||
a := i ;
|
||||
printf ("b := a*getOne()\n");
|
||||
b := a*getOne() ;
|
||||
|
@ -28,7 +28,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, 'failure')
|
||||
Halt ('failure', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -33,7 +33,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, 'failure')
|
||||
Halt ('failure', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -25,7 +25,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, "assert failed")
|
||||
Halt ('assert failed', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -25,7 +25,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, "assert failed")
|
||||
Halt ('assert failed', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -25,7 +25,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, "assert failed")
|
||||
Halt ('assert failed', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -25,7 +25,7 @@ PROCEDURE Assert (b: BOOLEAN; l: CARDINAL) ;
|
||||
BEGIN
|
||||
IF NOT b
|
||||
THEN
|
||||
Halt(__FILE__, l, __FUNCTION__, "assert failed")
|
||||
Halt ('assert failed', __FILE__, __FUNCTION__, l)
|
||||
END
|
||||
END Assert ;
|
||||
|
||||
|
@ -23,7 +23,7 @@ PROCEDURE promote (i: SHORTINT) ;
|
||||
BEGIN
|
||||
IF i#-1
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'promotion failed')
|
||||
Halt ('promotion failed', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END promote ;
|
||||
|
||||
|
@ -67,7 +67,7 @@ BEGIN
|
||||
END ;
|
||||
INC(i)
|
||||
END ;
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'increase MaxNoOfProcesses')
|
||||
Halt ('increase MaxNoOfProcesses', __FILE__, __FUNCTION__, __LINE__)
|
||||
END AssignOutputTo ;
|
||||
|
||||
|
||||
@ -111,8 +111,8 @@ BEGIN
|
||||
END ;
|
||||
INC(i)
|
||||
END ;
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'process has never has a player assigned to its output')
|
||||
Halt ('process has never has a player assigned to its output',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END ProcessToPlayer ;
|
||||
|
||||
|
||||
@ -259,8 +259,8 @@ BEGIN
|
||||
RETURN( i )
|
||||
END
|
||||
END ;
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__,
|
||||
'process calling is not a player process')
|
||||
Halt ('process calling is not a player process',
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
END PlayerNo ;
|
||||
|
||||
|
||||
|
@ -382,7 +382,7 @@ BEGIN
|
||||
3: StrPoint('Eman', x, y)
|
||||
|
||||
ELSE
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'unexpected direction')
|
||||
Halt ('unexpected direction', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
ELSE
|
||||
CASE dir OF
|
||||
@ -393,7 +393,7 @@ BEGIN
|
||||
3: StrPoint('eman', x, y)
|
||||
|
||||
ELSE
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'unexpected direction')
|
||||
Halt ('unexpected direction', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END
|
||||
END DrawMan ;
|
||||
@ -409,7 +409,7 @@ BEGIN
|
||||
3: StrPoint('ear', x, y)
|
||||
|
||||
ELSE
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'unexpected direction')
|
||||
Halt ('unexpected direction', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END DArrow ;
|
||||
|
||||
|
@ -106,7 +106,7 @@ PROCEDURE Read (VAR ch: CHAR) ;
|
||||
BEGIN
|
||||
IF rStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active read procedure')
|
||||
Halt ('no active read procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
rStack^.r(ch)
|
||||
END
|
||||
@ -121,7 +121,7 @@ PROCEDURE KeyPressed () : BOOLEAN ;
|
||||
BEGIN
|
||||
IF rStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active status procedure')
|
||||
Halt ('no active status procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN( rStack^.s() )
|
||||
END
|
||||
@ -185,7 +185,7 @@ PROCEDURE Write (VAR ch: CHAR) ;
|
||||
BEGIN
|
||||
IF wStack=NIL
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active write procedure')
|
||||
Halt('no active write procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
wStack^.w(ch)
|
||||
END
|
||||
@ -205,12 +205,12 @@ BEGIN
|
||||
AssignRead(Keyboard.Read, Keyboard.KeyPressed, Done) ;
|
||||
IF NOT Done
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'failed to assign read routines from module Keyboard')
|
||||
Halt ('failed to assign read routines from module Keyboard', __FILE__, __FUNCTION__, __LINE__)
|
||||
END ;
|
||||
AssignWrite(Display.Write, Done) ;
|
||||
IF NOT Done
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'failed to assign write routine from module Display')
|
||||
Halt ('failed to assign write routine from module Display', __FILE__, __FUNCTION__, __LINE__)
|
||||
END
|
||||
END Init ;
|
||||
|
||||
|
@ -7,7 +7,7 @@ PROCEDURE KeyPressed () : BOOLEAN ;
|
||||
BEGIN
|
||||
IF Narg () < 0
|
||||
THEN
|
||||
Halt(__FILE__, __LINE__, __FUNCTION__, 'no active status procedure')
|
||||
Halt ('no active status procedure', __FILE__, __FUNCTION__, __LINE__)
|
||||
ELSE
|
||||
RETURN FALSE
|
||||
END
|
||||
|
@ -97,11 +97,11 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
|
||||
|
||||
|
||||
if BUILD_CORLIB
|
||||
M2DEFS = Debug.def Executive.def \
|
||||
M2DEFS = Executive.def \
|
||||
KeyBoardLEDs.def SYSTEM.def \
|
||||
TimerHandler.def
|
||||
|
||||
M2MODS = Debug.mod Executive.mod \
|
||||
M2MODS = Executive.mod \
|
||||
SYSTEM.mod TimerHandler.mod
|
||||
|
||||
toolexeclib_LTLIBRARIES = libm2cor.la
|
||||
|
@ -153,7 +153,7 @@ am__uninstall_files_from_dir = { \
|
||||
am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
|
||||
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
|
||||
libm2cor_la_LIBADD =
|
||||
@BUILD_CORLIB_TRUE@am__objects_1 = Debug.lo Executive.lo SYSTEM.lo \
|
||||
@BUILD_CORLIB_TRUE@am__objects_1 = Executive.lo SYSTEM.lo \
|
||||
@BUILD_CORLIB_TRUE@ TimerHandler.lo
|
||||
@BUILD_CORLIB_TRUE@am_libm2cor_la_OBJECTS = $(am__objects_1) \
|
||||
@BUILD_CORLIB_TRUE@ KeyBoardLEDs.lo
|
||||
@ -450,11 +450,11 @@ AM_MAKEFLAGS = \
|
||||
|
||||
# Subdir rules rely on $(FLAGS_TO_PASS)
|
||||
FLAGS_TO_PASS = $(AM_MAKEFLAGS)
|
||||
@BUILD_CORLIB_TRUE@M2DEFS = Debug.def Executive.def \
|
||||
@BUILD_CORLIB_TRUE@M2DEFS = Executive.def \
|
||||
@BUILD_CORLIB_TRUE@ KeyBoardLEDs.def SYSTEM.def \
|
||||
@BUILD_CORLIB_TRUE@ TimerHandler.def
|
||||
|
||||
@BUILD_CORLIB_TRUE@M2MODS = Debug.mod Executive.mod \
|
||||
@BUILD_CORLIB_TRUE@M2MODS = Executive.mod \
|
||||
@BUILD_CORLIB_TRUE@ SYSTEM.mod TimerHandler.mod
|
||||
|
||||
@BUILD_CORLIB_TRUE@toolexeclib_LTLIBRARIES = libm2cor.la
|
||||
|
@ -182,8 +182,8 @@ newSem (void)
|
||||
= (threadSem *)malloc (sizeof (threadSem));
|
||||
nSemaphores += 1;
|
||||
if (nSemaphores == SEM_POOL)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"too many semaphores created");
|
||||
m2iso_M2RTS_HaltC ("too many semaphores created",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
#else
|
||||
threadSem *sem
|
||||
= (threadSem *)malloc (sizeof (threadSem));
|
||||
@ -239,8 +239,8 @@ currentThread (void)
|
||||
for (tid = 0; tid < nThreads; tid++)
|
||||
if (pthread_self () == threadArray[tid].p)
|
||||
return tid;
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"failed to find currentThread");
|
||||
m2iso_M2RTS_HaltC ("failed to find currentThread",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
@ -290,8 +290,8 @@ EXPORT(turnInterrupts) (unsigned int newLevel)
|
||||
static void
|
||||
never (void)
|
||||
{
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"the main thread should never call here");
|
||||
m2iso_M2RTS_HaltC ("the main thread should never call here",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
}
|
||||
|
||||
static void *
|
||||
@ -327,8 +327,8 @@ execThread (void *t)
|
||||
#if 0
|
||||
m2iso_M2RTS_CoroutineException ( __FILE__, __LINE__, __COLUMN__, __FUNCTION__, "coroutine finishing");
|
||||
#endif
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"execThread should never finish");
|
||||
m2iso_M2RTS_HaltC ("execThread should never finish",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -338,8 +338,8 @@ newThread (void)
|
||||
#if defined(POOL)
|
||||
nThreads += 1;
|
||||
if (nThreads == THREAD_POOL)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"too many threads created");
|
||||
m2iso_M2RTS_HaltC ("too many threads created",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
return nThreads - 1;
|
||||
#else
|
||||
if (nThreads == 0)
|
||||
@ -376,15 +376,15 @@ initThread (void (*proc) (void), unsigned int stackSize,
|
||||
/* Set thread creation attributes. */
|
||||
result = pthread_attr_init (&attr);
|
||||
if (result != 0)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"failed to create thread attribute");
|
||||
m2iso_M2RTS_HaltC ("failed to create thread attribute",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
|
||||
if (stackSize > 0)
|
||||
{
|
||||
result = pthread_attr_setstacksize (&attr, stackSize);
|
||||
if (result != 0)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"failed to set stack size attribute");
|
||||
m2iso_M2RTS_HaltC ("failed to set stack size attribute",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
}
|
||||
|
||||
tprintf ("initThread [%d] function = 0x%p (arg = 0x%p)\n", tid, proc,
|
||||
@ -392,7 +392,8 @@ initThread (void (*proc) (void), unsigned int stackSize,
|
||||
result = pthread_create (&threadArray[tid].p, &attr, execThread,
|
||||
(void *)&threadArray[tid]);
|
||||
if (result != 0)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__, "thread_create failed");
|
||||
m2iso_M2RTS_HaltC ("thread_create failed",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
tprintf (" created thread [%d] function = 0x%p 0x%p\n", tid, proc,
|
||||
(void *)&threadArray[tid]);
|
||||
return tid;
|
||||
@ -422,13 +423,13 @@ EXPORT(transfer) (int *p1, int p2)
|
||||
{
|
||||
int current = currentThread ();
|
||||
if (!initialized)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"cannot transfer to a process before the process has been created");
|
||||
m2iso_M2RTS_HaltC ("cannot transfer to a process before the process has been created",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
if (current == p2)
|
||||
{
|
||||
/* Error. */
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"attempting to transfer to ourself");
|
||||
m2iso_M2RTS_HaltC ("attempting to transfer to ourself",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -473,8 +474,8 @@ EXPORT(transfer) (int *p1, int p2)
|
||||
}
|
||||
tprintf ("end, context back to %d\n", current);
|
||||
if (current != old)
|
||||
m2iso_M2RTS_HaltC (__FILE__, __LINE__, __FUNCTION__,
|
||||
"wrong process id");
|
||||
m2iso_M2RTS_HaltC ("wrong process id",
|
||||
__FILE__, __FUNCTION__, __LINE__);
|
||||
}
|
||||
}
|
||||
__gthread_mutex_unlock (&lock);
|
||||
|
@ -44,6 +44,5 @@ extern "C" void m2iso_M2RTS_ConstructModules (const char *modulename, const char
|
||||
extern "C" void m2iso_M2RTS_Terminate (void);
|
||||
extern "C" void m2iso_M2RTS_DeconstructModules (void);
|
||||
|
||||
extern "C" void m2iso_M2RTS_HaltC (const char *filename, int line,
|
||||
const char *functionname, const char *desc)
|
||||
__attribute__ ((noreturn));
|
||||
extern "C" void m2iso_M2RTS_HaltC (const char *desc, const char *filename,
|
||||
const char *functionname, int line) __attribute__ ((noreturn));
|
||||
|
Loading…
Reference in New Issue
Block a user