From b986e1da38026ca93fba4b4de57a80f7c5a286ee Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 7 Feb 2018 12:01:55 -0800 Subject: [PATCH] PLASM compiler patch #1 --- PLASMA-BLD1.PO | Bin 143360 -> 143360 bytes src/toolsrc/codegen.c | 8 ++++++++ src/toolsrc/parse.c | 9 +++++++-- src/toolsrc/parse.pla | 8 ++++++-- src/toolsrc/plasm.pla | 2 +- src/toolsrc/symbols.h | 2 ++ 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/PLASMA-BLD1.PO b/PLASMA-BLD1.PO index fcc08ee68d32be716f255145e46a9e89db11de9d..698488ed3f536cb780d82c682e1b755c5fdc1aea 100644 GIT binary patch delta 1605 zcmXxje@xVM9LMp`=Qs={ zqHH?mS0kG9N6jMC>Ac+*HcXPTIV>t78Dgen$#kPsn&Tqr`A>g5zVFxj_5JL7e|+!T zdOf1`dc^5(!ed4&MPb^4d5gtwg5Zn{UJlPV8~K%Ps$q|RUMvho_UA5>MM3>eWwb2W ze=xKpJzdla`*LAU@K{M1F$tdeqJB8GHp=81jxC)>R~sd~11Z6w&_`0<4(^!wKuSw6 z>ft$)v~+wcdu`KeJadJ&F)O?D?^)rs6#c(V&3a>#y@AdyDXXm3Qjfdr8MpnZrp9e` z4K>Zn?Hg*Ex7RhjY|qKe&gn@t$um;!?Hmh}8lpjepp z_E_i0-SPgPR|qwRKX4Zz#5sgoj0|LB1>9JNYSf__El}8l4jjM{bR&Q-@Fi|y65%U_ zia-LAU|%WxDwp6uJ_=EW4X8vl8qkCmyo(RfjgttX5B<1``!-Zn3NBL^r ze0>GDb0u3H*s^%wX2fB}o&8 zQ!^WymSVUyt18g=5>Si^Jcnw|Y}OKu*T{afVHe$}npqtupF#k=IFGM!5rdo=(h}7e z`37!c0+aOj=>7k&NS9D%L?FQ>j3k#;EhMKP4NK`VT=6QCnZvzYItMhk=?b`4OkPKR zmRwHWh)Qh1R=k3pcpWWxi?i*nc)!}m(!p}rWm89)UCiTjr^!9!v*bSX;{x4)Yrgu9 z`2+h;7{L`>qx+qE6U;lVRCSkbiu}N3Gop2~iqrW_bzv;f!wribrflR?z0jtX60&rg z%4Is3P7bBLO$~% delta 1553 zcmXxhe@xVM9LMp`=X+lir09sC+mJisS0GKv$isvCe!olRVHAm7%Sq~X8@DVSt7+3^ zef_x9mOsXK?8IBmWiC>xWnFn{4hLyJ$VFodHCo9^XTUp?&GauN$ISt67jS6FC>OD=AO##v9vZJLV2r&mdNg}sg%_TYrORi z>F<1Fs@&}sQE{JJzpHtsh~6HK6(p`q9h7n?v3q*IlzO7Hm zzk1nUX%W^N|DPt(;apER-qkDR8d=ok)#U7CohFY_i9RcpHat z4#T*L>zGCwnYBXAhObuGs+2Gvbuh3PjR@mOMDZM6MF(Pd9q*tAXE1^>jAIfvAr=Xh z4-YC4fQcrA5kYj3EmS+H{HV=ihC zgcT6Zih!=3BCkON&)6*M@d94KPV9w)7!IHZ2^_;|e1KL19rf{`#6QuID@Y+hzs}uKj9Z##dS<04OdX8+fa&o@c;q{ zVlhHN-v433qgak7uo9~f!PD4`EwHg2yU>X^-ozms!BHfT#7Xp`4+HoX=P`;gTt+%5 zoMPM1oid}ysW7~%$`EQE7QjFQLWXdfjC^MmIf`{?r`v1j$|1+FA8+9>-o*#_ggYmU zeAQ3>5?^Bw-_c*BPmzCvJyXR=` Fe*v1d;^+VX diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index c8eb630..1ceb4f6 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -232,6 +232,14 @@ void idglobal_size(int type, int size, int constsize) else if (size) emit_data(0, 0, 0, size); } +void idlocal_size(int size) +{ + localsize += size; + if (localsize > 255) + { + parse_error("Local variable size overflow\n"); + } +} int id_tag(char *name, int len) { int i; diff --git a/src/toolsrc/parse.c b/src/toolsrc/parse.c index 6188e7e..e10561f 100755 --- a/src/toolsrc/parse.c +++ b/src/toolsrc/parse.c @@ -1170,8 +1170,13 @@ int parse_var(int type, long basesize) { if (idlen) id_add(idstr, idlen, type, size); - else - emit_data(0, 0, 0, size); + else if (!(type & EXTERN_TYPE)) + { + if (type & LOCAL_TYPE) + idlocal_size(size); + else + emit_data(0, 0, 0, size); + } } return (1); } diff --git a/src/toolsrc/parse.pla b/src/toolsrc/parse.pla index dd81daa..e5f8588 100644 --- a/src/toolsrc/parse.pla +++ b/src/toolsrc/parse.pla @@ -941,8 +941,12 @@ def parse_var(type, basesize)#0 else new_iddata(idptr, idlen, type, size) fin - elsif not (type & (EXTERN_TYPE|LOCAL_TYPE)) - emit_fill(size) + elsif not type & EXTERN_TYPE + if type & LOCAL_TYPE + framesize = framesize + size + else + size_iddata(type, size, 0) + fin fin fin end diff --git a/src/toolsrc/plasm.pla b/src/toolsrc/plasm.pla index 42fd156..eeb5ffb 100644 --- a/src/toolsrc/plasm.pla +++ b/src/toolsrc/plasm.pla @@ -411,7 +411,7 @@ include "toolsrc/parse.pla" // // Look at command line arguments and compile module // -puts("PLASMA Compiler, Version 1.0\n") +puts("PLASMA Compiler, Version 1.01\n") arg = argNext(argFirst) if ^arg and ^(arg + 1) == '-' opt = arg + 2 diff --git a/src/toolsrc/symbols.h b/src/toolsrc/symbols.h index 4fc90ce..9eb8cb6 100755 --- a/src/toolsrc/symbols.h +++ b/src/toolsrc/symbols.h @@ -46,4 +46,6 @@ int id_tag(char *name, int len); int id_const(char *name, int len); int id_type(char *name, int len); void idglobal_size(int type, int size, int constsize); +void idlocal_size(int size); +void idlocal_size(int size); int tag_new(int type);