mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-21 08:29:13 +00:00
value parsing cleanup
This commit is contained in:
parent
30646b1d4b
commit
72463cb690
@ -126,9 +126,9 @@ $(PLVM03): vmsrc/plvm03.s vmsrc/soscmd.a
|
||||
# Sample code
|
||||
#
|
||||
test: samplesrc/test.pla samplesrc/testlib.pla $(PLVM) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/test.pla > samplesrc/test.a
|
||||
./$(PLASM) -AMW < samplesrc/test.pla > samplesrc/test.a
|
||||
acme --setpc 4094 -o $(TEST) samplesrc/test.a
|
||||
./$(PLASM) -AMOW < samplesrc/testlib.pla > samplesrc/testlib.a
|
||||
./$(PLASM) -AMW < samplesrc/testlib.pla > samplesrc/testlib.a
|
||||
acme --setpc 4094 -o $(TESTLIB) samplesrc/testlib.a
|
||||
./$(PLVM) TEST
|
||||
|
||||
|
@ -1,7 +1,3 @@
|
||||
include "inc/cmdsys.plh"
|
||||
|
||||
repeat
|
||||
puts("Hello, world.\n")
|
||||
until ^$C000 < 128
|
||||
^$C010
|
||||
puts("Hello, world.\n")
|
||||
done
|
||||
|
@ -172,17 +172,29 @@ putln
|
||||
puts(@constr); puti(constval); putln
|
||||
puts("Signed byte constant:"); puti(-3); putln
|
||||
puts("Hello from in-line string!\$7F\n")
|
||||
puti(array:0); puts(" == "); puti(array:1); puts (" is "); puts(array:0 == array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <> "); puti(array:1); puts (" is "); puts(array:0 <> array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" >= "); puti(array:1); puts (" is "); puts(array:0 >= array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <= "); puti(array:1); puts (" is "); puts(array:0 <= array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" > "); puti(array:1); puts (" is "); puts(array:0 > array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" < "); puti(array:1); puts (" is "); puts(array:0 < array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" == "); puti(array:0); puts (" is "); puts(array:0 == array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <> "); puti(array:0); puts (" is "); puts(array:0 <> array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" >= "); puti(array:0); puts (" is "); puts(array:0 >= array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <= "); puti(array:0); puts (" is "); puts(array:0 <= array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" > "); puti(array:0); puts (" is "); puts(array:0 > array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" < "); puti(array:0); puts (" is "); puts(array:0 < array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" == "); puti(array:1); puts (" is ")
|
||||
puts(array:0 == array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <> "); puti(array:1); puts (" is ")
|
||||
puts(array:0 <> array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" >= "); puti(array:1); puts (" is ")
|
||||
puts(array:0 >= array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <= "); puti(array:1); puts (" is ")
|
||||
puts(array:0 <= array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" > "); puti(array:1); puts (" is ")
|
||||
puts(array:0 > array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" < "); puti(array:1); puts (" is ")
|
||||
puts(array:0 < array:1 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" == "); puti(array:0); puts (" is ")
|
||||
puts(array:0 == array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <> "); puti(array:0); puts (" is ")
|
||||
puts(array:0 <> array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" >= "); puti(array:0); puts (" is ")
|
||||
puts(array:0 >= array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" <= "); puti(array:0); puts (" is ")
|
||||
puts(array:0 <= array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" > "); puti(array:0); puts (" is ")
|
||||
puts(array:0 > array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
puti(array:0); puts(" < "); puti(array:0); puts (" is ")
|
||||
puts(array:0 < array:0 ?? "TRUE\n" :: "FALSE\n")
|
||||
ptr = 0
|
||||
done
|
||||
|
@ -362,7 +362,7 @@ def emit_seq(seq)#0
|
||||
// We must also force output if the sequence includes a CS opcode, as the
|
||||
// associated 'constant' is only temporarily valid.
|
||||
//
|
||||
if (not (outflags & (OPTIMIZE|OPTIMIZE2))) or (outflags & NO_COMBINE) or string
|
||||
if not (outflags & (OPTIMIZE|OPTIMIZE2)) or outflags & NO_COMBINE or string
|
||||
emit_pending_seq
|
||||
fin
|
||||
end
|
||||
|
@ -425,7 +425,7 @@ t_token scan(void)
|
||||
}
|
||||
void scan_rewind(char *backptr)
|
||||
{
|
||||
scanpos = backptr;
|
||||
scanpos = tokenstr = backptr;
|
||||
}
|
||||
int scan_lookahead(void)
|
||||
{
|
||||
|
@ -131,32 +131,33 @@ def scan
|
||||
//
|
||||
// String constant
|
||||
//
|
||||
token = STR_TKN
|
||||
constval = @strconst+1
|
||||
strconst = 0
|
||||
token = STR_TKN
|
||||
constval = strconstptr
|
||||
^constval = 0
|
||||
strconstptr++
|
||||
scanptr++
|
||||
while ^scanptr and ^scanptr <> '"'
|
||||
if ^scanptr <> '\\'
|
||||
^constval = ^scanptr
|
||||
^strconstptr = ^scanptr
|
||||
else
|
||||
scanptr++
|
||||
when ^scanptr
|
||||
is 'n'
|
||||
^constval = $0D; break
|
||||
^strconstptr = $0D; break
|
||||
is 'r'
|
||||
^constval = $0A; break
|
||||
^strconstptr = $0A; break
|
||||
is 't'
|
||||
^constval = $09; break
|
||||
^strconstptr = $09; break
|
||||
otherwise
|
||||
^constval = ^scanptr
|
||||
^strconstptr = ^scanptr
|
||||
wend
|
||||
fin
|
||||
constval++
|
||||
strconst++
|
||||
strconstptr++
|
||||
^constval++
|
||||
scanptr++
|
||||
loop
|
||||
if not ^scanptr; exit_err(ERR_INVAL|ERR_CONST); fin
|
||||
constval = @strconst
|
||||
strconstptr++
|
||||
scanptr++
|
||||
break
|
||||
is '/'
|
||||
@ -265,6 +266,7 @@ def scan
|
||||
end
|
||||
def rewind(ptr)#0
|
||||
scanptr = ptr
|
||||
tknptr = ptr
|
||||
end
|
||||
def lookahead
|
||||
word backptr, backtkn
|
||||
@ -284,6 +286,7 @@ end
|
||||
// Get next line of input
|
||||
//
|
||||
def nextln
|
||||
strconstptr = @strconst // Reset string constant buffer
|
||||
if ^scanptr == ';'
|
||||
scanptr++
|
||||
scan
|
||||
|
@ -465,31 +465,33 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
valseq = cat_seq(parse_list(NULL, &value), valseq);
|
||||
if (scantoken != CLOSE_PAREN_TOKEN)
|
||||
parse_error("Missing function call closing parenthesis");
|
||||
if (!(type & FUNC_TYPE)) // Can't check parm count on function pointers
|
||||
cfnparms = value;
|
||||
else if (cfnparms != value)
|
||||
parse_error("Parameter count mismatch");
|
||||
if (scan() == POUND_TOKEN)
|
||||
if (type & FUNC_TYPE)
|
||||
{
|
||||
/*
|
||||
* Set function pointer return vals count - can't do this to regular function call
|
||||
*/
|
||||
if (type & FUNC_TYPE)
|
||||
parse_error("Overriding function return count");
|
||||
if (!parse_const(&cfnvals))
|
||||
parse_error("Invalid def return value count");
|
||||
if (cfnparms != value) // Can't check parm count on function pointers
|
||||
parse_error("Parameter count mismatch");
|
||||
}
|
||||
else
|
||||
scan_rewind(tokenstr);
|
||||
if (type & (VAR_TYPE | PTR_TYPE)) //!(type & (FUNC_TYPE | CONST_TYPE)))
|
||||
{
|
||||
valseq = gen_lw(valseq);
|
||||
if (deref)
|
||||
deref--;
|
||||
if (scan() == POUND_TOKEN)
|
||||
{
|
||||
/*
|
||||
* Set function pointer return vals count - can't do this to regular function call
|
||||
*/
|
||||
if (!parse_const(&cfnvals))
|
||||
parse_error("Invalid def return value count");
|
||||
}
|
||||
else
|
||||
scan_rewind(tokenstr);
|
||||
if (type & (VAR_TYPE | PTR_TYPE))
|
||||
{
|
||||
valseq = gen_lw(valseq);
|
||||
if (deref)
|
||||
deref--;
|
||||
}
|
||||
}
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - value - 1;
|
||||
*stackdepth += cfnvals - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~(FUNC_TYPE | VAR_TYPE);
|
||||
}
|
||||
@ -501,13 +503,10 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
if (type & FUNC_TYPE)
|
||||
{
|
||||
/*
|
||||
* Function call dereference
|
||||
* Function address dereference
|
||||
*/
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~FUNC_TYPE;
|
||||
type = BPTR_TYPE;
|
||||
}
|
||||
while ((valseq = parse_expr(valseq, stackdepth)) && scantoken == COMMA_TOKEN)
|
||||
{
|
||||
@ -537,9 +536,11 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
/*
|
||||
* Function call dereference
|
||||
*/
|
||||
if (cfnparms)
|
||||
parse_error("Parameter count mismatch");
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - 1;
|
||||
*stackdepth += cfnvals - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~FUNC_TYPE;
|
||||
}
|
||||
@ -553,8 +554,6 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
type = (scantoken == PTRB_TOKEN) ? BPTR_TYPE : WPTR_TYPE;
|
||||
if (!parse_const(&const_offset))
|
||||
{
|
||||
if (scantoken == EOL_TOKEN || scantoken == CLOSE_PAREN_TOKEN)
|
||||
parse_error("Syntax");
|
||||
/*
|
||||
* Setting type override for following operations
|
||||
*/
|
||||
@ -577,21 +576,16 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
if (type & FUNC_TYPE)
|
||||
{
|
||||
/*
|
||||
* Function call dereference
|
||||
* Function address dereference
|
||||
*/
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~FUNC_TYPE;
|
||||
type = 0;
|
||||
}
|
||||
type = (type & (VAR_TYPE | CONST_TYPE))
|
||||
? ((scantoken == DOT_TOKEN) ? BYTE_TYPE : WORD_TYPE)
|
||||
: ((scantoken == DOT_TOKEN) ? BPTR_TYPE : WPTR_TYPE);
|
||||
if (!parse_const(&const_offset))
|
||||
{
|
||||
if (scantoken == EOL_TOKEN || scantoken == CLOSE_PAREN_TOKEN)
|
||||
parse_error("Syntax");
|
||||
/*
|
||||
* Setting type override for following operations
|
||||
*/
|
||||
@ -617,9 +611,11 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
deref--;
|
||||
if (type & FUNC_TYPE)
|
||||
{
|
||||
if (cfnparms)
|
||||
parse_error("Parameter count mismatch");
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - 1;
|
||||
*stackdepth += cfnvals - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~FUNC_TYPE;
|
||||
}
|
||||
@ -630,9 +626,11 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
{
|
||||
if (type & FUNC_TYPE)
|
||||
{
|
||||
if (cfnparms)
|
||||
parse_error("Parameter count mismatch");
|
||||
valseq = gen_icall(valseq);
|
||||
if (stackdepth)
|
||||
*stackdepth += cfnvals + cfnparms - 1;
|
||||
*stackdepth += cfnvals - 1;
|
||||
cfnparms = 0; cfnvals = 1;
|
||||
type &= ~FUNC_TYPE;
|
||||
}
|
||||
@ -750,8 +748,7 @@ t_opseq *parse_set(t_opseq *codeseq)
|
||||
}
|
||||
if (lparms == 0 || scantoken != SET_TOKEN)
|
||||
{
|
||||
tokenstr = setptr;
|
||||
scan_rewind(tokenstr);
|
||||
scan_rewind(setptr);
|
||||
while (lparms--)
|
||||
release_seq(setseq[lparms]);
|
||||
while (lambda_cnt > lambda_set)
|
||||
@ -772,8 +769,8 @@ t_opseq *parse_set(t_opseq *codeseq)
|
||||
for (i = rparms - lparms; i > 0; i--)
|
||||
codeseq = gen_drop(codeseq);
|
||||
}
|
||||
for (i = lparms - 1; i >= 0; i--)
|
||||
codeseq = cat_seq(codeseq, setseq[i]);
|
||||
while (lparms--)
|
||||
codeseq = cat_seq(codeseq, setseq[lparms]);
|
||||
return (codeseq);
|
||||
}
|
||||
int parse_stmnt(void)
|
||||
@ -1076,7 +1073,7 @@ int parse_stmnt(void)
|
||||
scan_rewind(idptr);
|
||||
emit_seq(parse_value(NULL, LVALUE, NULL));
|
||||
}
|
||||
else if (scantoken != SET_TOKEN)
|
||||
else
|
||||
{
|
||||
while (stackdepth)
|
||||
{
|
||||
@ -1085,8 +1082,6 @@ int parse_stmnt(void)
|
||||
}
|
||||
emit_seq(rseq);
|
||||
}
|
||||
else
|
||||
parse_error("Invalid LVALUE");
|
||||
}
|
||||
else
|
||||
parse_error("Syntax error");
|
||||
|
@ -329,23 +329,22 @@ def parse_value(codeseq, rvalue)#2
|
||||
idxseq, value = parse_list
|
||||
valseq = cat_seq(idxseq, valseq)
|
||||
if token <> CLOSE_PAREN_TKN; exit_err(ERR_MISS|ERR_CLOSE|ERR_SYNTAX); fin
|
||||
if type & FUNC_TYPE
|
||||
if type & FUNC_TYPE // Can't check parm count on function pointers
|
||||
if cfnparms <> value; exit_err(ERR_MISS|ERR_ID); fin
|
||||
else // Can't check parm count on function pointers
|
||||
cfnparms = value
|
||||
fin
|
||||
if scan == POUND_TKN // Set function pointer return vals count - can't do this to regular function call
|
||||
if type & FUNC_TYPE; exit_err(ERR_INVAL|ERR_SYNTAX); fin
|
||||
if not parse_const(@cfnvals); exit_err(ERR_INVAL|ERR_CONST); fin
|
||||
else
|
||||
rewind(tknptr)
|
||||
fin
|
||||
if type & (VAR_TYPE | PTR_TYPE) // !(type & (FUNC_TYPE | CONST_TYPE)))
|
||||
valseq = gen_op(valseq, LW_CODE)
|
||||
if deref; deref--; fin
|
||||
if scan == POUND_TKN // Set function pointer return vals count - can't do this to regular function call
|
||||
if not parse_const(@value); exit_err(ERR_INVAL|ERR_CONST); fin
|
||||
cfnvals = value
|
||||
else
|
||||
rewind(tknptr)
|
||||
fin
|
||||
if type & (VAR_TYPE | PTR_TYPE)
|
||||
valseq = gen_op(valseq, LW_CODE)
|
||||
if deref; deref--; fin
|
||||
fin
|
||||
fin
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - value - 1
|
||||
stackdepth = stackdepth + cfnvals - 1
|
||||
cfnparms = 0
|
||||
cfnvals = 1
|
||||
type = type & ~(FUNC_TYPE | VAR_TYPE)
|
||||
@ -354,12 +353,10 @@ def parse_value(codeseq, rvalue)#2
|
||||
//
|
||||
// Array of arrays
|
||||
//
|
||||
if type & FUNC_TYPE // Function call dereference
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - 1
|
||||
if type & FUNC_TYPE // Function address dereference
|
||||
cfnparms = 0
|
||||
cfnvals = 1
|
||||
type = type & ~FUNC_TYPE
|
||||
type = BPTR_TYPE
|
||||
fin
|
||||
repeat
|
||||
valseq, drop = parse_expr(valseq)
|
||||
@ -382,8 +379,9 @@ def parse_value(codeseq, rvalue)#2
|
||||
// Structure member pointer
|
||||
//
|
||||
if type & FUNC_TYPE // Function call dereference
|
||||
if cfnparms; exit_err(ERR_MISS|ERR_ID); fin
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - 1
|
||||
stackdepth = stackdepth + cfnvals - 1
|
||||
cfnparms = 0
|
||||
cfnvals = 1
|
||||
type = type & ~FUNC_TYPE
|
||||
@ -392,11 +390,10 @@ def parse_value(codeseq, rvalue)#2
|
||||
fin
|
||||
type = token == PTRB_TKN ?? BPTR_TYPE :: WPTR_TYPE
|
||||
if not parse_const(@const_offset)
|
||||
if token == EOL_TKN or token == CLOSE_PAREN_TKN; exit_err(ERR_SYNTAX); fin
|
||||
rewind(tknptr) // Setting type override for following operations
|
||||
elsif const_offset <> 0
|
||||
valseq = gen_const(valseq, const_offset) // Structure member pointer
|
||||
valseq = gen_op(valseq, ADD_TKN)
|
||||
valseq = gen_op(valseq, ADD_CODE)
|
||||
fin
|
||||
break
|
||||
is DOT_TKN
|
||||
@ -404,12 +401,10 @@ def parse_value(codeseq, rvalue)#2
|
||||
//
|
||||
// Structure member offset
|
||||
//
|
||||
if type & FUNC_TYPE // Function call dereference
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - 1
|
||||
if type & FUNC_TYPE // Function address dereference
|
||||
cfnparms = 0
|
||||
cfnvals = 1
|
||||
type = type & ~FUNC_TYPE
|
||||
type = VAR_TYPE
|
||||
fin
|
||||
if type & (VAR_TYPE | CONST_TYPE)
|
||||
type = token == DOT_TKN ?? BYTE_TYPE :: WORD_TYPE
|
||||
@ -417,11 +412,10 @@ def parse_value(codeseq, rvalue)#2
|
||||
type = token == DOT_TKN ?? BPTR_TYPE :: WPTR_TYPE
|
||||
fin
|
||||
if not parse_const(@const_offset)
|
||||
if token == EOL_TKN or token == CLOSE_PAREN_TKN; exit_err(ERR_SYNTAX); fin
|
||||
rewind(tknptr) // Setting type override for following operations
|
||||
elsif const_offset <> 0
|
||||
valseq = gen_const(valseq, const_offset) // Structure member offset
|
||||
valseq = gen_op(valseq, ADD_TKN)
|
||||
valseq = gen_op(valseq, ADD_CODE)
|
||||
fin
|
||||
break
|
||||
otherwise
|
||||
@ -434,8 +428,9 @@ def parse_value(codeseq, rvalue)#2
|
||||
while deref > rvalue
|
||||
deref--
|
||||
if type & FUNC_TYPE
|
||||
if cfnparms; exit_err(ERR_MISS|ERR_ID); fin
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - 1
|
||||
stackdepth = stackdepth + cfnvals - 1
|
||||
cfnparms = 0
|
||||
cfnvals = 1
|
||||
type = type & ~FUNC_TYPE;
|
||||
@ -445,8 +440,9 @@ def parse_value(codeseq, rvalue)#2
|
||||
loop
|
||||
if deref
|
||||
if type & FUNC_TYPE
|
||||
if cfnparms; exit_err(ERR_MISS|ERR_ID); fin
|
||||
valseq = gen_op(valseq, ICAL_CODE)
|
||||
stackdepth = stackdepth + cfnvals + cfnparms - 1
|
||||
stackdepth = stackdepth + cfnvals - 1
|
||||
type = type & ~FUNC_TYPE
|
||||
elsif type & (BYTE_TYPE | BPTR_TYPE)
|
||||
valseq = gen_op(valseq, LB_CODE)
|
||||
@ -869,14 +865,13 @@ def parse_stmnt
|
||||
rewind(idptr)
|
||||
seq, drop = parse_value(NULL, LVALUE)
|
||||
emit_seq(seq)
|
||||
elsif token <> SET_TKN
|
||||
else
|
||||
if cfnvals > 100;puth(cfnvals);puts(instr);putln;fin
|
||||
while cfnvals > 1
|
||||
seq = cat_seq(seq, gen_op(NULL, DROP_CODE))
|
||||
cfnvals--
|
||||
loop
|
||||
emit_seq(seq)
|
||||
else
|
||||
exit_err(ERR_INVAL|ERR_STATE)
|
||||
fin
|
||||
else
|
||||
exit_err(ERR_SYNTAX)
|
||||
@ -997,9 +992,8 @@ def parse_vars(type)
|
||||
is EXPORT_TKN
|
||||
if type & (EXTERN_TYPE|LOCAL_TYPE); exit_err(ERR_INVAL|ERR_LOCAL|ERR_SYNTAX); fin
|
||||
type = EXPORT_TYPE
|
||||
idptr = tknptr
|
||||
if scan <> BYTE_TKN and token <> WORD_TKN // This could be an exported definition
|
||||
rewind(idptr)
|
||||
rewind(tknptr)
|
||||
scan
|
||||
return FALSE
|
||||
fin
|
||||
@ -1096,12 +1090,10 @@ def parse_lambda
|
||||
//
|
||||
// Build an anonymous ID string for the Lambda function
|
||||
//
|
||||
//strcpy(@lambda_id[lambda_cnt * 4], "&00")
|
||||
lambda_id[lambda_cnt * 4 + 0] = 3
|
||||
lambda_id[lambda_cnt * 4 + 1] = '&'
|
||||
lambda_id[lambda_cnt * 4 + 2] = ((lambda_num >> 3) & $07) + '0'
|
||||
lambda_id[lambda_cnt * 4 + 3] = (lambda_num & $07) + '0'
|
||||
puts(@lambda_id[lambda_cnt * 4]); putln
|
||||
lambda_num++
|
||||
if lookup_idglobal(@lambda_id[lambda_cnt * 4 + 1], 3)
|
||||
//
|
||||
|
@ -291,7 +291,8 @@ word lineno
|
||||
const LVALUE = 0
|
||||
const RVALUE = 1
|
||||
const LAMBDANUM = 16
|
||||
byte[128] strconst
|
||||
byte[80] strconst
|
||||
word strconstptr
|
||||
byte infunc
|
||||
byte stack_loop
|
||||
byte prevstmnt
|
||||
|
Loading…
x
Reference in New Issue
Block a user