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:
claudiol 2017-08-10 19:29:30 -04:00
parent 22d37705e9
commit 9d2608e353
8 changed files with 102 additions and 27 deletions

View file

@ -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();

View file

@ -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");
}

View file

@ -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));

View file

@ -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;
}

View file

@ -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:

View file

@ -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;
}

View file

@ -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
;

View file

@ -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 / ;