Skip to content

Commit fab4bba

Browse files
committed
COMMON unify uds and hash
1 parent e8b32de commit fab4bba

File tree

19 files changed

+251
-233
lines changed

19 files changed

+251
-233
lines changed

ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Fix HASH var crash
33
Fix HASH var handling of mixed types
44
Fix illegal UDS field variable names
5+
Unitfy HASH and UDS
56

67
2014-08-15
78
Improved runtime performance

samples/distro-examples/tests/call_tau.bas

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,19 @@ rem check system-variables
2020
predef.prsys
2121

2222
x=PI
23-
foyer.name= "PI"
23+
dim foyer
24+
foyer.name= "my name is PI"
25+
? "test"
26+
? foyer("NAME")
27+
? foyer("name")
28+
? foyer.Name
29+
? foyer.name
30+
31+
? "end"
32+
2433
tau.addRoom(foyer,x)
2534

35+
2636
sub addRoom(the_thing, d)
2737
print the_thing.name, d
2838
end

samples/distro-examples/tests/output/call_tau.out

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,10 @@ message from tau
1111
[1,2,3,4]
1212
Predefined Variables
1313
PI =3.14159265358979
14-
PI 3.14159265358979
15-
PI 3.14159265358979
14+
test
15+
my name is PI
16+
my name is PI
17+
my name is PI
18+
my name is PI
19+
end
20+
my name is PI 3.14159265358979

samples/distro-examples/tests/tau.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ sub cerr
3737
end
3838

3939
sub addRoom(the_thing,d)
40-
print the_thing.name,d
40+
4141
end
4242

4343
rem initialization

samples/distro-examples/tests/uds.bas

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ sub passByVal(udsVal)
3232
end
3333

3434
'test with formal+actual arguments having differing names
35+
dim _udsRef
3536
_udsRef.field1 = "initField1"
3637
_udsRef.field2 = "initField2"
3738
_udsRef.field3 = 3.0
@@ -50,6 +51,7 @@ if (_udsRef.field2 != "updatedField2") then
5051
fi
5152

5253
'test with formal+actual arguments with global names
54+
dim udsRef
5355
udsRef.field1 = "initField1"
5456
udsRef.field2 = "initField2"
5557
udsRef.field3 = 3.0
@@ -68,6 +70,7 @@ if (udsRef.field2 != "updatedField2") then
6870
fi
6971

7072
'test complex structures - this is pretty cool :)
73+
dim animal
7174
animal.pet.cat.legs = 4
7275
animal.pet.cat.color = "black"
7376

src/common/blib.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ void cmd_lins() {
285285
// move all form idx one down
286286
for (i = var_p->v.a.size - 1; i > idx; i--) {
287287
// A(i) = A(i-1)
288-
v_set((var_t *) (var_p->v.a.ptr + (sizeof(var_t) * i)),
288+
v_set((var_t *) (var_p->v.a.ptr + (sizeof(var_t) * i)),
289289
(var_t *) (var_p->v.a.ptr + (sizeof(var_t) * (i - 1))));
290290
}
291291
elem_p = (var_t *) (var_p->v.a.ptr + (sizeof(var_t) * idx));
@@ -1038,7 +1038,6 @@ void cmd_udp(int cmd) {
10381038
ready = 1; // finish flag
10391039
break;
10401040

1041-
case kwTYPE_UDS:
10421041
case kwTYPE_VAR: // the parameter is a variable
10431042
ofs = prog_ip; // keep expression's IP
10441043

@@ -1149,7 +1148,6 @@ void cmd_call_unit_udp(int cmd, int udp_tid, addr_t goto_addr, addr_t rvid) {
11491148
// parameters
11501149
ready = 1; // finish flag
11511150
break;
1152-
case kwTYPE_UDS:
11531151
case kwTYPE_VAR: // the parameter is a variable
11541152
ofs = prog_ip; // keep expression's IP
11551153

@@ -1607,7 +1605,7 @@ void cmd_endif() {
16071605
code_pop(&node);
16081606
IF_ERR_BREAK;
16091607
}
1610-
1608+
16111609
if (!prog_error) {
16121610
prog_ip += (ADDRSZ + ADDRSZ);
16131611
}
@@ -2163,7 +2161,7 @@ void cmd_pause() {
21632161
long start, now;
21642162

21652163
code = code_peek();
2166-
if (code == kwTYPE_VAR || code == kwTYPE_UDS) {
2164+
if (code == kwTYPE_VAR) {
21672165
x = par_getint();
21682166
if (prog_error) {
21692167
return;

src/common/brun.c

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ var_t *code_resolve_varptr(var_t *var_p, int until_parens) {
324324
}
325325
break;
326326
case kwTYPE_UDS_EL:
327-
var_p = code_resolve_varptr(uds_resolve_fields(var_p), until_parens);
327+
var_p = code_resolve_varptr(hash_resolve_fields(var_p), until_parens);
328328
break;
329329
}
330330
}
@@ -383,15 +383,13 @@ var_t *code_isvar_arridx(var_t *basevar_p) {
383383
int code_isvar() {
384384
var_t *basevar_p;
385385
var_t *var_p = NULL;
386-
addr_t cur_ip;
387386

388-
cur_ip = prog_ip; // store IP
387+
// store IP
388+
addr_t cur_ip = prog_ip;
389389

390-
switch (code_peek()) {
391-
case kwTYPE_VAR:
390+
if (code_peek() == kwTYPE_VAR) {
392391
code_skipnext();
393392
var_p = basevar_p = tvar[code_getaddr()];
394-
395393
switch (basevar_p->type) {
396394
case V_HASH:
397395
case V_ARRAY:
@@ -403,23 +401,18 @@ int code_isvar() {
403401
var_p = NULL;
404402
}
405403
}
406-
break;
407-
408-
case kwTYPE_UDS:
409-
code_skipnext();
410-
var_p = tvar[code_getaddr()];
411-
var_p = code_resolve_varptr(uds_resolve_fields(var_p), 0);
412-
break;
413404
}
414405

415406
if (var_p) {
416407
if (kw_check_evexit(code_peek()) || code_peek() == kwTYPE_LEVEL_END) {
417-
prog_ip = cur_ip; // restore IP
408+
// restore IP
409+
prog_ip = cur_ip;
418410
return 1;
419411
}
420412
}
421413

422-
prog_ip = cur_ip; // restore IP
414+
// restore IP
415+
prog_ip = cur_ip;
423416
return 0;
424417
}
425418

@@ -552,7 +545,7 @@ void exec_setup_predefined_variables() {
552545

553546
{
554547
static char stupid_os_envsblog[1024]; // it must be static at
555-
// least by default on DOS
548+
// least by default on DOS
556549
// or Win32(BCB)
557550
sprintf(stupid_os_envsblog, "SBLOG=%s%csb.log", homedir, OS_DIRSEP);
558551
putenv(stupid_os_envsblog);
@@ -805,10 +798,10 @@ void bc_loop(int isf) {
805798

806799
// debug
807800
/*
808-
* fprintf(stderr, "\t%d: %d = ", prog_ip, code); for ( i = 0;
801+
* fprintf(stderr, "\t%d: %d = ", prog_ip, code); for ( i = 0;
809802
* keyword_table[i].name[0] != '\0'; i ++) { if ( code ==
810803
* keyword_table[i].code ) { fprintf(stderr,"%s ",
811-
* keyword_table[i].name); break; } } fprintf(stderr,"\n");
804+
* keyword_table[i].name); break; } } fprintf(stderr,"\n");
812805
*/
813806

814807
switch (code) {
@@ -948,7 +941,7 @@ void bc_loop(int isf) {
948941

949942
/*
950943
* ----------------------------------------- * external
951-
* procedures
944+
* procedures
952945
*/
953946
case kwTYPE_CALLEXTP: // [lib][index]
954947
{
@@ -969,7 +962,7 @@ void bc_loop(int isf) {
969962
break;
970963
/*
971964
* ----------------------------------------- * buildin
972-
* procedures -- BEGIN
965+
* procedures -- BEGIN
973966
*/
974967
case kwTYPE_CALLP:
975968
pcode = code_getaddr();
@@ -1362,7 +1355,7 @@ void dump_stack() {
13621355

13631356
/*
13641357
* RUN byte-code
1365-
*
1358+
*
13661359
* ByteCode Structure (executables, not units):
13671360
*
13681361
* [header (bc_head_t)]
@@ -1606,14 +1599,14 @@ int brun_create_task(const char *filename, mem_t preloaded_bc, int libf) {
16061599
// for ( i = 0; i < prog_symcount; i ++ ) {
16071600
// if ( prog_symtable[i].task_id == -1 && prog_libtable[i].type == 1 )
16081601
// panic("Symbol (unit) '%s' missing\n", prog_symtable[i].symbol);
1609-
// if ( prog_symtable[i].task_id == -1 && prog_libtable[i].type == 0 ) {
1602+
// if ( prog_symtable[i].task_id == -1 && prog_libtable[i].type == 0 ) {
16101603
// if ( prog_symtable[j].exp_idx == -1 )
16111604
// panic("Symbol (module) '%s' missing\n", prog_symtable[i].symbol);
16121605
// }
16131606
// }
16141607
// }
16151608
}
1616-
//
1609+
//
16171610
return tid;
16181611
}
16191612

@@ -1949,9 +1942,9 @@ int sbasic_exec(const char *file) {
19491942
strcpy(gsb_last_file, file);
19501943
strcpy(gsb_last_errmsg, "");
19511944

1952-
// compile it - if opt_nosave, bytecode_h is a
1945+
// compile it - if opt_nosave, bytecode_h is a
19531946
// memory handle of BC; otherwise you must run the file
1954-
success = sbasic_compile(file);
1947+
success = sbasic_compile(file);
19551948

19561949
if (opt_syntaxcheck) // this is a command-line flag to
19571950
// syntax-check only
@@ -1976,7 +1969,7 @@ int sbasic_exec(const char *file) {
19761969
evt_check_every = (50 * CLOCKS_PER_SEC) / 1000; // setup event checker time = 50ms
19771970
srand(clock()); // randomize
19781971

1979-
// run
1972+
// run
19801973
sbasic_recursive_exec(exec_tid);
19811974

19821975
// normal exit

src/common/ceval.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ void cev_prim() {
7777
break;
7878

7979
case kwTYPE_UDS_EL:
80-
case kwTYPE_UDS:
8180
case kwTYPE_VAR:
8281
bc_add_n(bc_out, bc_in->ptr + bc_in->cp, ADDRSZ); // 1 addr
8382
IP += ADDRSZ;
@@ -366,17 +365,17 @@ void expr_parser(bc_t *bc_src) {
366365

367366
code = CODE_PEEK();
368367

369-
//
368+
//
370369
// empty!
371-
//
370+
//
372371
if (code == kwTYPE_LINE || code == kwTYPE_EOC) {
373372
bc_destroy(bc_out);
374373
tmp_free(bc_out);
375374
return;
376375
}
377-
//
376+
//
378377
// LET|CONST special code
379-
//
378+
//
380379
if (code == kwTYPE_CMPOPR) {
381380
IP++;
382381
if (CODE(IP) != '=') {

src/common/eval.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,6 @@ void eval(var_t *r) {
11641164
r->v.ap.v = code_getaddr();
11651165
break;
11661166

1167-
case kwTYPE_UDS:
11681167
case kwTYPE_VAR:
11691168
// variable
11701169
V_FREE(r);

src/common/hotspots.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,7 @@ static inline var_int_t v_igetval(var_t *v) {
152152
static inline var_t* code_getvarptr_parens(int until_parens) {
153153
var_t *var_p = NULL;
154154

155-
switch (code_peek()) {
156-
case kwTYPE_VAR:
155+
if (code_peek() == kwTYPE_VAR) {
157156
code_skipnext();
158157
var_p = tvar[code_getaddr()];
159158
switch (var_p->type) {
@@ -166,13 +165,6 @@ static inline var_t* code_getvarptr_parens(int until_parens) {
166165
err_varisnotarray();
167166
}
168167
}
169-
break;
170-
171-
case kwTYPE_UDS:
172-
code_skipnext();
173-
var_p = tvar[code_getaddr()];
174-
var_p = code_resolve_varptr(uds_resolve_fields(var_p), until_parens);
175-
break;
176168
}
177169

178170
if (var_p == NULL && !prog_error) {

0 commit comments

Comments
 (0)