mirror of
https://git.code.sf.net/p/newrpl/sources
synced 2024-09-28 03:20:20 +02:00
Fixed bugs in debugging with SST and local variables. Fixed bug HIDELOCALS fails to track variables. Implemented SEQ in RPL.
This commit is contained in:
parent
22d37705e9
commit
9d2608e353
8 changed files with 102 additions and 27 deletions
|
@ -494,9 +494,9 @@ if(iseval) {
|
|||
|
||||
}
|
||||
else {
|
||||
// RETURN STACK WAS INTACT, RESTORE THE REST
|
||||
if(LAMTop>LAMs+lamsave) LAMTop=LAMs+lamsave;
|
||||
if(nLAMBase>LAMs+nlambase) nLAMBase=LAMs+nlambase;
|
||||
// RETURN STACK WAS INTACT, IT HALTED AT OUR OWN SECONDARY
|
||||
//if(LAMTop>LAMs+lamsave) LAMTop=LAMs+lamsave;
|
||||
//if(nLAMBase>LAMs+nlambase) nLAMBase=LAMs+nlambase;
|
||||
|
||||
// DON'T ALTER THE INSTRUCTION POINTER OF THE HALTED PROGRAM
|
||||
rplClearErrors();
|
||||
|
@ -613,8 +613,8 @@ if(iseval) {
|
|||
}
|
||||
else {
|
||||
// RETURN STACK WAS INTACT, RESTORE THE REST
|
||||
if(LAMTop>LAMs+lamsave) LAMTop=LAMs+lamsave;
|
||||
if(nLAMBase>LAMs+nlambase) nLAMBase=LAMs+nlambase;
|
||||
//if(LAMTop>LAMs+lamsave) LAMTop=LAMs+lamsave;
|
||||
//if(nLAMBase>LAMs+nlambase) nLAMBase=LAMs+nlambase;
|
||||
|
||||
// DON'T ALTER THE INSTRUCTION POINTER OF THE HALTED PROGRAM
|
||||
rplClearErrors();
|
||||
|
|
|
@ -93,7 +93,8 @@ void compShowErrorMsg(char *inputfile,char *mainbuffer,FILE *stream)
|
|||
fprintf(stream," error: ");
|
||||
// TODO: GET NEW TRANSLATABLE MESSAGES
|
||||
WORDPTR message=uiGetLibMsg(ErrorCode);
|
||||
fwrite((char *)(message+1),1,rplStrSize(message),stream);
|
||||
if(!message) fprintf(stream," %d in library %d\n",ErrorCode&0x7f,LIBFROMMSG(ErrorCode));
|
||||
else fwrite((char *)(message+1),1,rplStrSize(message),stream);
|
||||
}
|
||||
fprintf(stream,"\n");
|
||||
}
|
||||
|
|
|
@ -868,14 +868,29 @@ void LIB_HANDLER()
|
|||
}
|
||||
else {
|
||||
// THIS WOULD CREATE A LOCAL THAT CANNOT BE TRACED
|
||||
// BY THE COMPILER. DISABLE PUTLAM/GETLAM OPTIMIZATION
|
||||
// FOR THE REST OF THIS ENVIRONMENT
|
||||
// BY THE COMPILER. JUST USE AN INVALID NAME.
|
||||
|
||||
// ISSUE A SYNTAX ERROR, LSTO REQUIRES A COMPILE-TIME VARIABLE NAME
|
||||
RetNum=ERR_SYNTAX;
|
||||
return;
|
||||
// THIS IS NOT A VALID LAM, LEAVE AS IDENT
|
||||
|
||||
rplCompileAppend(MKOPCODE(LIBRARY_NUMBER,LSTO));
|
||||
|
||||
// TRACK LAM CREATION IN THE CURRENT ENVIRONMENT
|
||||
if(!notrack) {
|
||||
// DO WE NEED A NEW ENVIRONMENT?
|
||||
|
||||
if(rplNeedNewLAMEnvCompiler()) { // CREATE A NEW ENVIRONMENT IF NEEDED
|
||||
rplCreateLAMEnvironment(*(ValidateTop-1));
|
||||
}
|
||||
rplCreateLAM((WORDPTR)zero_bint,(WORDPTR)zero_bint);
|
||||
}
|
||||
else {
|
||||
// CREATE A BARRIER TO PREVENT ANY MORE PUTLAM/GETLAM REFERENCES BEYOND THIS POINT
|
||||
rplCreateLAMEnvironment((WORDPTR)lameval_seco); // CREATE A NEW ENVIRONMENT OWNED BY A DOCOL SECONDARY
|
||||
}
|
||||
RetNum=OK_CONTINUE;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -887,7 +902,7 @@ void LIB_HANDLER()
|
|||
|
||||
// HIDELOCALS NEEDS SPECIAL CONSIDERATION TO CREATE LAMS AT COMPILE TIME, OR TRACING WILL BE OFF BY 1
|
||||
|
||||
if((TokenLen==10) && (!utf8ncmp((char *)TokenStart,"HIDELOCALS",4)))
|
||||
if((TokenLen==10) && (!utf8ncmp((char *)TokenStart,"HIDELOCALS",10)))
|
||||
{
|
||||
|
||||
// CHECK IF THE PREVIOUS OBJECT IS A QUOTED IDENT?
|
||||
|
@ -934,12 +949,8 @@ void LIB_HANDLER()
|
|||
|
||||
}
|
||||
|
||||
if(object<CompileEnd) {
|
||||
|
||||
|
||||
// WE HAVE A HARD-CODED IDENT, CHECK IF IT EXISTS ALREADY
|
||||
|
||||
// CHECK IF IT'S AN EXISTING LAM, COMPILE TO A PUTLAM OPCODE IF POSSIBLE
|
||||
|
||||
// TRACK LAM CREATION IN THE CURRENT ENVIRONMENT
|
||||
if(!notrack) {
|
||||
|
@ -951,7 +962,6 @@ void LIB_HANDLER()
|
|||
rplCreateLAM((WORDPTR)lam_privatevar_bint,(WORDPTR)lam_privatevar_bint);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
rplCompileAppend(MKOPCODE(LIBRARY_NUMBER,HIDELOCALS));
|
||||
|
|
|
@ -106,6 +106,7 @@ INCLUDE_ROMOBJECT(LIB_MSGTABLE);
|
|||
INCLUDE_ROMOBJECT(LIB_HELPTABLE);
|
||||
INCLUDE_ROMOBJECT(lib62_menu);
|
||||
INCLUDE_ROMOBJECT(lib62_menu_2);
|
||||
INCLUDE_ROMOBJECT(cmd_SEQ);
|
||||
|
||||
|
||||
ROMOBJECT dolist_seco[]={
|
||||
|
@ -238,7 +239,7 @@ const WORDPTR const ROMPTR_TABLE[]={
|
|||
(WORDPTR)empty_list,
|
||||
(WORDPTR)lib62_menu,
|
||||
(WORDPTR)lib62_menu_2,
|
||||
|
||||
(WORDPTR)cmd_SEQ,
|
||||
0
|
||||
};
|
||||
|
||||
|
@ -2539,10 +2540,22 @@ void LIB_HANDLER()
|
|||
|
||||
case SEQ:
|
||||
{
|
||||
// TODO:
|
||||
|
||||
|
||||
|
||||
if(rplDepthData()<5) {
|
||||
rplError(ERR_BADARGCOUNT);
|
||||
return;
|
||||
}
|
||||
if(!ISSYMBOLIC(*rplPeekData(5)) && !ISIDENT(*rplPeekData(5)) && !ISPROGRAM(*rplPeekData(5))) {
|
||||
rplError(ERR_BADARGTYPE);
|
||||
return;
|
||||
}
|
||||
if(!ISIDENT(*rplPeekData(4))) {
|
||||
rplError(ERR_IDENTEXPECTED);
|
||||
return;
|
||||
}
|
||||
// RUN THE RPL CODE IMPLEMENTING THE COMMAND
|
||||
rplPushRet(IPtr);
|
||||
IPtr=(WORDPTR)cmd_SEQ;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,9 @@
|
|||
CMD(READCFI,MKTOKENINFO(7,TITYPE_NOTALLOWED,1,2)), \
|
||||
CMD(DOALARM,MKTOKENINFO(7,TITYPE_NOTALLOWED,0,2)), \
|
||||
CMD(ALRM,MKTOKENINFO(4,TITYPE_NOTALLOWED,1,2)), \
|
||||
CMD(OFF,MKTOKENINFO(3,TITYPE_NOTALLOWED,1,2))
|
||||
CMD(OFF,MKTOKENINFO(3,TITYPE_NOTALLOWED,1,2)), \
|
||||
CMD(TEVAL,MKTOKENINFO(5,TITYPE_NOTALLOWED,1,2))
|
||||
|
||||
|
||||
// ADD MORE OPCODES HERE
|
||||
|
||||
|
@ -97,7 +99,7 @@ INCLUDE_ROMOBJECT(lib65_menu_1_memory);
|
|||
INCLUDE_ROMOBJECT(lib65_menu_2_alarms);
|
||||
INCLUDE_ROMOBJECT(newrpl_version);
|
||||
INCLUDE_ROMOBJECT(alarms_ident);
|
||||
|
||||
INCLUDE_ROMOBJECT(cmd_TEVAL);
|
||||
|
||||
// EXTERNAL EXPORTED OBJECT TABLE
|
||||
// UP TO 64 OBJECTS ALLOWED, NO MORE
|
||||
|
@ -109,6 +111,7 @@ const WORDPTR const ROMPTR_TABLE[]={
|
|||
(WORDPTR)lib65_menu_2_alarms,
|
||||
(WORDPTR)newrpl_version,
|
||||
(WORDPTR)alarms_ident,
|
||||
(WORDPTR)cmd_TEVAL,
|
||||
0
|
||||
};
|
||||
|
||||
|
@ -2170,7 +2173,17 @@ void LIB_HANDLER()
|
|||
|
||||
}
|
||||
|
||||
|
||||
case TEVAL:
|
||||
{
|
||||
if(rplDepthData()<1) {
|
||||
rplError(ERR_BADARGCOUNT);
|
||||
return;
|
||||
}
|
||||
// RUN THE RPL CODE IMPLEMENTING THE COMMAND
|
||||
rplPushRet(IPtr);
|
||||
IPtr=(WORDPTR)cmd_TEVAL;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
case DONUM:
|
||||
|
|
|
@ -937,7 +937,10 @@ void LIB_HANDLER()
|
|||
{
|
||||
rplCompileAppend(MKOPCODE(LIBRARY_NUMBER,START));
|
||||
rplCreateLAMEnvironment(CompileEnd-1);
|
||||
|
||||
rplCreateLAM((WORDPTR)nulllam_ident,(WORDPTR)nulllam_ident); // NULLLAM FOR THE COMPILER
|
||||
rplCreateLAM((WORDPTR)nulllam_ident,(WORDPTR)nulllam_ident); // NULLLAM FOR THE COMPILER
|
||||
rplCreateLAM((WORDPTR)nulllam_ident,(WORDPTR)nulllam_ident); // NULLLAM FOR THE COMPILER
|
||||
rplCreateLAM((WORDPTR)nulllam_ident,(WORDPTR)nulllam_ident); // NULLLAM FOR THE COMPILER
|
||||
RetNum=OK_STARTCONSTRUCT;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -131,3 +131,23 @@ REVLIST
|
|||
L → L "
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ ****************************************************************************
|
||||
@ COMMANDS IMPLEMENTED IN RPL
|
||||
@ ****************************************************************************
|
||||
|
||||
|
||||
@#name cmd_SEQ
|
||||
:: 0 'Depth' LSTO 3 'Lvls' LSTO ROT →NUM ROT →NUM
|
||||
FOR 'K'
|
||||
DEPTH 'Depth' STO PICK3 PICK3 K SWAP
|
||||
:: HIDELOCALS LSTO EVAL UNHIDELOCALS ;
|
||||
DEPTH Depth - DUP Lvls + 'Lvls' STO 1 SWAP START Lvls ROLLD NEXT
|
||||
DUP →NUM
|
||||
STEP
|
||||
3 DROPN
|
||||
Lvls 3 - →LIST
|
||||
;
|
||||
|
|
|
@ -163,3 +163,18 @@ to the memory address in level 2
|
|||
I I →"
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ ****************************************************************************
|
||||
@ COMMANDS IMPLEMENTED IN RPL
|
||||
@ ****************************************************************************
|
||||
|
||||
|
||||
@#name cmd_TEVAL
|
||||
:: 0 '.TckStart' LSTO TICKS '.TckStart' LSTO HIDELOCALS EVAL TICKS UNHIDELOCALS .TckStart - 1000000 / ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue