From 83d0cf50f60be61de2b36a20bd9eef4197c4a32e Mon Sep 17 00:00:00 2001 From: Athul P Date: Thu, 14 May 2020 12:50:18 +0530 Subject: [PATCH] remove redudant asm --- silc/include/silc.h | 2 +- silc/src/evaluators.c | 35 ++- silc/src/silc.y | 6 - silc/src/y.tab.c | 474 ++++++++++++++++---------------- xsm_expl/xfs-interface/disk.xfs | Bin 4194304 -> 4194304 bytes 5 files changed, 251 insertions(+), 266 deletions(-) diff --git a/silc/include/silc.h b/silc/include/silc.h index af70e21..1ac9b6b 100644 --- a/silc/include/silc.h +++ b/silc/include/silc.h @@ -155,7 +155,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 149 "./src/silc.y" +#line 143 "./src/silc.y" tnode *no; char *name; diff --git a/silc/src/evaluators.c b/silc/src/evaluators.c index 6c218a9..6b92298 100644 --- a/silc/src/evaluators.c +++ b/silc/src/evaluators.c @@ -21,7 +21,6 @@ reg_index getAddress(tnode* root, Frame* frame, FILE* out) { if (sym) { // local variable binding = sym->binding; reg_index mem = getReg(frame); - reg_index tmp = getReg(frame); fprintf(out, "MOV R%d, BP\nADD R%d, %d\n", mem, mem, binding); int idx = 0; char* tok; @@ -32,8 +31,8 @@ reg_index getAddress(tnode* root, Frame* frame, FILE* out) { field = getField(tok, lst); if (field) lst = field->type ? field->type->fields : field->class->fields; - fprintf(out, "MOV R%d, [R%d]\nMOV R%d, R%d\nADD R%d, %d\n", tmp, mem, - mem, tmp, mem, idx); + fprintf(out, "MOV R%d, [R%d]\nADD R%d, %d\n", mem, mem, + mem, idx); } } else { LinkedList* lst = sym->type ? sym->type->fields : sym->class->fields; @@ -42,18 +41,16 @@ reg_index getAddress(tnode* root, Frame* frame, FILE* out) { field = getField(tok, lst); if (field) lst = field->type ? field->type->fields : field->class->fields; - fprintf(out, "MOV R%d, [R%d]\nMOV R%d, R%d\nADD R%d, %d\n", tmp, mem, - mem, tmp, mem, idx); + fprintf(out, "MOV R%d, [R%d]\nADD R%d, %d\n", mem, mem, + mem, idx); } } - freeReg(frame); return mem; } else { sym = searchSymbol(name, GSymList); if (sym) { // global variable binding = sym->binding; reg_index mem = getReg(frame); - reg_index tmp = getReg(frame); int idx = 0; char* tok; fprintf(out, "MOV R%d, %d\n", mem, binding); @@ -68,11 +65,10 @@ reg_index getAddress(tnode* root, Frame* frame, FILE* out) { if (field) lst = lst = field->type ? field->type->fields : field->class->fields; - fprintf(out, "MOV R%d, [R%d]\nMOV R%d, R%d\nADD R%d, %d\n", tmp, mem, - mem, tmp, mem, idx); + fprintf(out, "MOV R%d, [R%d]\nADD R%d, %d\n", mem, mem, + mem, idx); } } - freeReg(frame); return mem; } else { printf("%s:", root->varname); @@ -236,7 +232,8 @@ void eval_assgn(tnode* root, Frame* frame, FILE* out) { right = eval_new(root->right, frame, out); int idx = searchClass(root->right->varname, ClassList)->idx; reg_index vtp = getReg(frame); - fprintf(out, "MOV R%d, R%d\nADD R%d, 1\nMOV [R%d], %d\n", vtp, binding, vtp, + //Also add the virtual table pointer + fprintf(out, "MOV R%d, R%d\nADD R%d, 1\nMOV [R%d], %d\n", vtp, binding, vtp, vtp, idx * 8 + 4096); freeReg(frame); } else if (root->right->varclass) { @@ -247,6 +244,7 @@ void eval_assgn(tnode* root, Frame* frame, FILE* out) { if (root->right->varclass) { reg_index vtp = getReg(frame); reg_index rightvte = getReg(frame); + //replace the virutal table pointer fprintf(out, "MOV R%d, R%d\nADD R%d, 1\nMOV R%d, [R%d]\n", vtp, right, vtp, rightvte, vtp); fprintf(out, "MOV R%d, R%d\nADD R%d, 1\nMOV [R%d], R%d\n", vtp, binding, @@ -256,6 +254,7 @@ void eval_assgn(tnode* root, Frame* frame, FILE* out) { fprintf(out, "MOV [R%d], R%d\n", binding, vtp); freeReg(frame); freeReg(frame); + freeReg(frame); return; } fprintf(out, "MOV [R%d], R%d\n", binding, right); @@ -341,8 +340,6 @@ reg_index call_method(tnode* root, Frame* frame, FILE* out) { if (field) lst = field->class->fields; } - char* callname = (char*)malloc( - sizeof(field ? field->class->name : sym->class->name) + 2 + sizeof(s)); ClassDef* class = searchClass(field ? field->class->name : sym->class->name, ClassList); int reg = pushRegToStack(frame, out); @@ -350,7 +347,7 @@ reg_index call_method(tnode* root, Frame* frame, FILE* out) { reg_index self = getAddress(root, frame, out); fprintf(out, "PUSH R%d\n", self); // Push self pointer as an argument fprintf(out, "MOV R%d, %d\nPUSH R%d\n", self, class->idx * 8 + 4096, - self); // Push self pointer as an argument + self); // Push virtual table pointer as an argument freeReg(frame); reg_index tmp = getReg(frame); fprintf(out, "PUSH R%d\n", tmp); @@ -366,10 +363,10 @@ reg_index call_method(tnode* root, Frame* frame, FILE* out) { reg_index vte = getReg(frame); fprintf(out, "ADD R%d, 1\nMOV R%d, [R%d]\n", addr, vte, addr); fprintf(out, "ADD R%d, %d\n", vte, searchMethod(prev, class->methods)->idx); - freeReg(frame); - freeReg(frame); fprintf(out, "MOV R%d, [R%d]\n", addr, vte); fprintf(out, "CALL R%d\n", addr); + freeReg(frame); + freeReg(frame); tmp = getReg(frame); fprintf(out, "POP R%d\n", tmp); popArgFromStack(root->left, frame, out); @@ -454,12 +451,12 @@ void pushArgToStack(tnode* root, Frame* frame, FILE* out) { return; } if (root->type == FUNC) { - fprintf(out, "PUSH R%d \\arg\n", call_func(root, frame, out)); + fprintf(out, "PUSH R%d\n", call_func(root, frame, out)); freeReg(frame); return; } reg_index value = eval_expr(root, frame, out); - fprintf(out, "PUSH R%d \\arg\n", value); + fprintf(out, "PUSH R%d\n", value); freeReg(frame); return; } @@ -488,7 +485,7 @@ void popArgFromStack(tnode* root, Frame* frame, FILE* out) { return; } reg_index value = getReg(frame); - fprintf(out, "POP R%d \\argu\n", value); + fprintf(out, "POP R%d\n", value); freeReg(frame); return; } diff --git a/silc/src/silc.y b/silc/src/silc.y index 16c558d..21a1364 100644 --- a/silc/src/silc.y +++ b/silc/src/silc.y @@ -124,7 +124,6 @@ LinkedList *res = NULL; if(root->type != CONN) { res = (LinkedList*)malloc(sizeof(LinkedList)); - // printf("%s %s\n", root->vartype->name, root->varname); LSymbol* tmp = malloc(sizeof(LSymbol)); *tmp = (LSymbol){.name = root->varname, .type = root->vartype}; res->data = (void*)tmp; @@ -134,11 +133,6 @@ LinkedList *right = addParam(root->right); LinkedList *left = addParam(root->left); return connectList(right, left, sizeof(LSymbol)); - // if(right) { - // right->next = left; - // return right; - // } - // return left; } } diff --git a/silc/src/y.tab.c b/silc/src/y.tab.c index c93fd58..d45c9dd 100644 --- a/silc/src/y.tab.c +++ b/silc/src/y.tab.c @@ -75,7 +75,7 @@ #include "datastructures.h" int yylex(void); - char virtual[1000]; + char virtual[1000]; int yyerror(char*); int classno = 0, mid =0; FILE *out, *yyin; @@ -193,7 +193,6 @@ LinkedList *res = NULL; if(root->type != CONN) { res = (LinkedList*)malloc(sizeof(LinkedList)); - // printf("%s %s\n", root->vartype->name, root->varname); LSymbol* tmp = malloc(sizeof(LSymbol)); *tmp = (LSymbol){.name = root->varname, .type = root->vartype}; res->data = (void*)tmp; @@ -203,16 +202,11 @@ LinkedList *right = addParam(root->right); LinkedList *left = addParam(root->left); return connectList(right, left, sizeof(LSymbol)); - // if(right) { - // right->next = left; - // return right; - // } - // return left; } } -#line 216 "./src/y.tab.c" +#line 210 "./src/y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -366,7 +360,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 149 "./src/silc.y" +#line 143 "./src/silc.y" tnode *no; char *name; @@ -375,7 +369,7 @@ union YYSTYPE Field* field; -#line 379 "./src/y.tab.c" +#line 373 "./src/y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -772,18 +766,18 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 182, 182, 183, 184, 185, 186, 187, 188, 189, - 197, 212, 213, 216, 261, 336, 342, 343, 345, 360, - 377, 380, 381, 383, 414, 440, 441, 444, 451, 455, - 458, 478, 480, 487, 490, 493, 496, 499, 502, 505, - 508, 511, 514, 517, 520, 523, 524, 525, 526, 527, - 528, 529, 530, 533, 537, 539, 541, 545, 548, 551, - 553, 557, 560, 562, 564, 568, 573, 579, 582, 585, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 600, - 601, 602, 606, 607, 610, 611, 613, 617, 618, 619, - 620, 622, 630, 637, 638, 641, 642, 646, 662, 663, - 671, 672, 675, 676, 680, 700, 705, 710, 716, 721, - 726, 737, 741, 746, 761, 778, 788, 789, 790, 793 + 0, 176, 176, 177, 178, 179, 180, 181, 182, 183, + 191, 206, 207, 210, 255, 330, 336, 337, 339, 354, + 371, 374, 375, 377, 408, 434, 435, 438, 445, 449, + 452, 472, 474, 481, 484, 487, 490, 493, 496, 499, + 502, 505, 508, 511, 514, 517, 518, 519, 520, 521, + 522, 523, 524, 527, 531, 533, 535, 539, 542, 545, + 547, 551, 554, 556, 558, 562, 567, 573, 576, 579, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 594, + 595, 596, 600, 601, 604, 605, 607, 611, 612, 613, + 614, 616, 624, 631, 632, 635, 636, 640, 656, 657, + 665, 666, 669, 670, 674, 694, 699, 704, 710, 715, + 720, 731, 735, 740, 755, 772, 782, 783, 784, 787 }; #endif @@ -1925,7 +1919,7 @@ yyparse (void) switch (yyn) { case 10: -#line 197 "./src/silc.y" +#line 191 "./src/silc.y" { tnode *node = createNode(FUNC, "main", -1, connect((yyvsp[-3].no),(yyvsp[-2].no)), NULL); (yyval.no)->vartype = 0; GSymbol* tmp = malloc(sizeof(GSymbol)); @@ -1937,11 +1931,11 @@ yyparse (void) fprintf(out, "%s", virtual); eval_func(node, out); } -#line 1941 "./src/y.tab.c" +#line 1935 "./src/y.tab.c" break; case 13: -#line 216 "./src/silc.y" +#line 210 "./src/silc.y" { if(searchClass((yyvsp[-5].name), ClassList)) yyerror("Duplicate class"); ClassDef *class = (ClassDef*)malloc(sizeof(ClassDef)); @@ -1987,11 +1981,11 @@ yyparse (void) curMemory = (classno + 1)*8 + 4096; mid=0; } -#line 1991 "./src/y.tab.c" +#line 1985 "./src/y.tab.c" break; case 14: -#line 261 "./src/silc.y" +#line 255 "./src/silc.y" { if(searchClass((yyvsp[-6].name), ClassList)) yyerror("Duplicate class"); ClassDef *parent = searchClass((yyvsp[-5].name), ClassList); @@ -2067,32 +2061,32 @@ yyparse (void) curClassField = NULL; curMemory = (classno + 1)*8 + 4096; } -#line 2071 "./src/y.tab.c" +#line 2065 "./src/y.tab.c" break; case 15: -#line 336 "./src/silc.y" +#line 330 "./src/silc.y" { curClassField = searchClass((yyvsp[0].name), ClassList)->fields; (yyval.name) = (yyvsp[0].name); } -#line 2080 "./src/y.tab.c" +#line 2074 "./src/y.tab.c" break; case 16: -#line 342 "./src/silc.y" +#line 336 "./src/silc.y" {(yyval.list) = connectList((yyvsp[-1].list), (yyvsp[0].list), sizeof(tnode));} -#line 2086 "./src/y.tab.c" +#line 2080 "./src/y.tab.c" break; case 17: -#line 343 "./src/silc.y" +#line 337 "./src/silc.y" {(yyval.list) = (yyvsp[0].list);} -#line 2092 "./src/y.tab.c" +#line 2086 "./src/y.tab.c" break; case 18: -#line 345 "./src/silc.y" +#line 339 "./src/silc.y" { Method* tmp = searchMethod((yyvsp[-10].name), curClassMethod); if(!tmp) yyerror("Method not declared"); @@ -2108,11 +2102,11 @@ yyparse (void) (yyval.list) = lst; curLvar = NULL; } -#line 2112 "./src/y.tab.c" +#line 2106 "./src/y.tab.c" break; case 19: -#line 360 "./src/silc.y" +#line 354 "./src/silc.y" { Method* tmp = searchMethod((yyvsp[-9].name), curClassMethod); Frame *frame = (Frame*)malloc(sizeof(Frame)); @@ -2127,29 +2121,29 @@ yyparse (void) (yyval.list) = lst; curLvar = NULL; } -#line 2131 "./src/y.tab.c" +#line 2125 "./src/y.tab.c" break; case 20: -#line 377 "./src/silc.y" +#line 371 "./src/silc.y" {(yyval.list) = (yyvsp[-1].list);} -#line 2137 "./src/y.tab.c" +#line 2131 "./src/y.tab.c" break; case 21: -#line 380 "./src/silc.y" +#line 374 "./src/silc.y" {(yyval.list) = connectList((yyvsp[-1].list), (yyvsp[0].list), sizeof(Field));} -#line 2143 "./src/y.tab.c" +#line 2137 "./src/y.tab.c" break; case 22: -#line 381 "./src/silc.y" +#line 375 "./src/silc.y" {(yyval.list) = (yyvsp[0].list);} -#line 2149 "./src/y.tab.c" +#line 2143 "./src/y.tab.c" break; case 23: -#line 383 "./src/silc.y" +#line 377 "./src/silc.y" { LinkedList *fields= NULL, *methods = NULL; LinkedList* gvars = (yyvsp[-1].list); @@ -2179,11 +2173,11 @@ yyparse (void) curClassMethod = connectList(curClassMethod, methods, sizeof(Method)); curClassField = connectList(curClassField, fields, sizeof(Field)); } -#line 2183 "./src/y.tab.c" +#line 2177 "./src/y.tab.c" break; case 24: -#line 414 "./src/silc.y" +#line 408 "./src/silc.y" { char *dup = strdup((yyvsp[-3].name)); char *prev; @@ -2207,48 +2201,48 @@ yyparse (void) if(!method) yyerror("Method not found"); (yyval.no)->vartype = method->type; } -#line 2211 "./src/y.tab.c" +#line 2205 "./src/y.tab.c" break; case 25: -#line 440 "./src/silc.y" +#line 434 "./src/silc.y" {} -#line 2217 "./src/y.tab.c" +#line 2211 "./src/y.tab.c" break; case 26: -#line 441 "./src/silc.y" +#line 435 "./src/silc.y" {} -#line 2223 "./src/y.tab.c" +#line 2217 "./src/y.tab.c" break; case 27: -#line 444 "./src/silc.y" +#line 438 "./src/silc.y" { Field *field = (Field*)malloc(sizeof(Field)); Type *type = searchType((yyvsp[-2].name), TypeList); *field = type?(Field){.name=(yyvsp[-1].name), .type=type}:(Field){.name=(yyvsp[-1].name), .ndef=(yyvsp[-2].name)}; (yyval.field) = field; } -#line 2233 "./src/y.tab.c" +#line 2227 "./src/y.tab.c" break; case 28: -#line 451 "./src/silc.y" +#line 445 "./src/silc.y" { (yyvsp[0].field)->idx = ((Field*)(yyvsp[-1].list)->data)->idx + 1; if(getField((yyvsp[0].field)->name, (yyvsp[-1].list))) yyerror("Duplicate field entry"); (yyval.list) = addNode((yyvsp[0].field), sizeof(Field), (yyvsp[-1].list));} -#line 2242 "./src/y.tab.c" +#line 2236 "./src/y.tab.c" break; case 29: -#line 455 "./src/silc.y" +#line 449 "./src/silc.y" { (yyvsp[0].field)->idx = 1; (yyval.list) = addNode((yyvsp[0].field), sizeof(Field), NULL); } -#line 2248 "./src/y.tab.c" +#line 2242 "./src/y.tab.c" break; case 30: -#line 458 "./src/silc.y" +#line 452 "./src/silc.y" { if(searchType((yyvsp[-4].name), TypeList)!=NULL) yyerror("Type is already defined"); Type *type = (Type*)malloc(sizeof(Type)); *type = (Type){.name=(yyvsp[-4].name), .fields=(yyvsp[-2].list)}; @@ -2267,437 +2261,437 @@ yyparse (void) type->size = size; TypeList = addNode(type, sizeof(Type), TypeList); } -#line 2271 "./src/y.tab.c" +#line 2265 "./src/y.tab.c" break; case 31: -#line 478 "./src/silc.y" +#line 472 "./src/silc.y" {char *tmp = (char*)malloc(strlen((yyvsp[-2].name)) + strlen((yyvsp[0].name)) + 1); strcpy(tmp, (yyvsp[-2].name)); strcat(tmp, ".");strcat(tmp, (yyvsp[0].name)); (yyval.name) = tmp;} -#line 2278 "./src/y.tab.c" +#line 2272 "./src/y.tab.c" break; case 32: -#line 480 "./src/silc.y" +#line 474 "./src/silc.y" {char *tmp = (char*)malloc(strlen((yyvsp[-2].name)) + strlen((yyvsp[0].name)) + 1); strcpy(tmp, (yyvsp[-2].name)); strcat(tmp, ".");strcat(tmp, (yyvsp[0].name)); (yyval.name) = tmp;} -#line 2285 "./src/y.tab.c" +#line 2279 "./src/y.tab.c" break; case 33: -#line 487 "./src/silc.y" +#line 481 "./src/silc.y" {(yyval.no) = createNode(OP, "+", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2292 "./src/y.tab.c" +#line 2286 "./src/y.tab.c" break; case 34: -#line 490 "./src/silc.y" +#line 484 "./src/silc.y" {(yyval.no) = createNode(OP, "-", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2299 "./src/y.tab.c" +#line 2293 "./src/y.tab.c" break; case 35: -#line 493 "./src/silc.y" +#line 487 "./src/silc.y" {(yyval.no) = createNode(OP, "*", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2306 "./src/y.tab.c" +#line 2300 "./src/y.tab.c" break; case 36: -#line 496 "./src/silc.y" +#line 490 "./src/silc.y" {(yyval.no) = createNode(OP, "/", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2313 "./src/y.tab.c" +#line 2307 "./src/y.tab.c" break; case 37: -#line 499 "./src/silc.y" +#line 493 "./src/silc.y" {(yyval.no) = createNode(OP, "<=", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2320 "./src/y.tab.c" +#line 2314 "./src/y.tab.c" break; case 38: -#line 502 "./src/silc.y" +#line 496 "./src/silc.y" {(yyval.no) = createNode(OP, ">=", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2327 "./src/y.tab.c" +#line 2321 "./src/y.tab.c" break; case 39: -#line 505 "./src/silc.y" +#line 499 "./src/silc.y" {(yyval.no) = createNode(OP, "==", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2334 "./src/y.tab.c" +#line 2328 "./src/y.tab.c" break; case 40: -#line 508 "./src/silc.y" +#line 502 "./src/silc.y" {(yyval.no) = createNode(OP, "<", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2341 "./src/y.tab.c" +#line 2335 "./src/y.tab.c" break; case 41: -#line 511 "./src/silc.y" +#line 505 "./src/silc.y" {(yyval.no) = createNode(OP, ">", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2348 "./src/y.tab.c" +#line 2342 "./src/y.tab.c" break; case 42: -#line 514 "./src/silc.y" +#line 508 "./src/silc.y" {(yyval.no) = createNode(OP, "!=", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2355 "./src/y.tab.c" +#line 2349 "./src/y.tab.c" break; case 43: -#line 517 "./src/silc.y" +#line 511 "./src/silc.y" {(yyval.no) = createNode(OP, "AND", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("bool", TypeList);} -#line 2362 "./src/y.tab.c" +#line 2356 "./src/y.tab.c" break; case 44: -#line 520 "./src/silc.y" +#line 514 "./src/silc.y" {(yyval.no) = createNode(OP, "%", -1, (yyvsp[-2].no), (yyvsp[0].no)); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2369 "./src/y.tab.c" +#line 2363 "./src/y.tab.c" break; case 45: -#line 523 "./src/silc.y" +#line 517 "./src/silc.y" {(yyval.no) = (yyvsp[-1].no);} -#line 2375 "./src/y.tab.c" +#line 2369 "./src/y.tab.c" break; case 46: -#line 524 "./src/silc.y" +#line 518 "./src/silc.y" {(yyval.no) = (yyvsp[0].no); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2381 "./src/y.tab.c" +#line 2375 "./src/y.tab.c" break; case 47: -#line 525 "./src/silc.y" +#line 519 "./src/silc.y" {(yyval.no) = createNode(VAR, (yyvsp[0].name), -1, NULL, NULL); (yyval.no)->vartype = getTypeOfSymbol((yyvsp[0].name)); (yyval.no)->varclass = getClassOfSymbol((yyvsp[0].name));} -#line 2387 "./src/y.tab.c" +#line 2381 "./src/y.tab.c" break; case 48: -#line 526 "./src/silc.y" +#line 520 "./src/silc.y" {(yyval.no) = createNode(VAR, (yyvsp[-3].name), -1, (yyvsp[-1].no), NULL);(yyval.no)->vartype = getTypeOfSymbol((yyvsp[-3].name));} -#line 2393 "./src/y.tab.c" +#line 2387 "./src/y.tab.c" break; case 49: -#line 527 "./src/silc.y" +#line 521 "./src/silc.y" {(yyval.no) = (yyvsp[0].no); (yyval.no)->vartype = searchType("str", TypeList);} -#line 2399 "./src/y.tab.c" +#line 2393 "./src/y.tab.c" break; case 50: -#line 528 "./src/silc.y" +#line 522 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2405 "./src/y.tab.c" +#line 2399 "./src/y.tab.c" break; case 51: -#line 529 "./src/silc.y" +#line 523 "./src/silc.y" {(yyval.no) = createNode(VAR, (yyvsp[0].name), -1, NULL, NULL);(yyval.no)->vartype = getTypeOfSymbol((yyvsp[0].name)); (yyval.no)->varclass = getClassOfSymbol((yyvsp[0].name));} -#line 2411 "./src/y.tab.c" +#line 2405 "./src/y.tab.c" break; case 52: -#line 530 "./src/silc.y" +#line 524 "./src/silc.y" {(yyval.no) = createNode(CONST, "\0", 0, NULL, NULL); (yyval.no)->vartype = searchType("null", TypeList);} -#line 2417 "./src/y.tab.c" +#line 2411 "./src/y.tab.c" break; case 53: -#line 533 "./src/silc.y" +#line 527 "./src/silc.y" {(yyval.no) = createNode(RET, "\0", -1, (yyvsp[-1].no), NULL);} -#line 2423 "./src/y.tab.c" +#line 2417 "./src/y.tab.c" break; case 54: -#line 537 "./src/silc.y" +#line 531 "./src/silc.y" {tnode *tmp = createNode(VAR, (yyvsp[-2].name), -1, NULL, NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-2].name)); (yyval.no) = createNode(READ, "", -1, tmp, NULL);} -#line 2430 "./src/y.tab.c" +#line 2424 "./src/y.tab.c" break; case 55: -#line 539 "./src/silc.y" +#line 533 "./src/silc.y" {tnode *tmp = createNode(VAR, (yyvsp[-5].name), -1, (yyvsp[-3].no), NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-5].name)); (yyval.no) = createNode(READ, "", -1, tmp, NULL);} -#line 2437 "./src/y.tab.c" +#line 2431 "./src/y.tab.c" break; case 56: -#line 541 "./src/silc.y" +#line 535 "./src/silc.y" {tnode *tmp = createNode(VAR, (yyvsp[-2].name), -1, NULL, NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-2].name)); (yyval.no) = createNode(READ, "", -1, tmp, NULL);} -#line 2444 "./src/y.tab.c" +#line 2438 "./src/y.tab.c" break; case 57: -#line 545 "./src/silc.y" +#line 539 "./src/silc.y" {(yyval.no) = createNode(INIT, "", -1, NULL, NULL);(yyval.no)->vartype = searchType("int", TypeList);} -#line 2450 "./src/y.tab.c" +#line 2444 "./src/y.tab.c" break; case 58: -#line 548 "./src/silc.y" +#line 542 "./src/silc.y" {(yyval.no) = createNode(ALLOC, "", -1, NULL, NULL); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2456 "./src/y.tab.c" +#line 2450 "./src/y.tab.c" break; case 59: -#line 551 "./src/silc.y" +#line 545 "./src/silc.y" {(yyval.no) = createNode(NEW, (yyvsp[-1].name), -1, NULL, NULL); (yyval.no)->vartype = searchType("int", TypeList);} -#line 2462 "./src/y.tab.c" +#line 2456 "./src/y.tab.c" break; case 60: -#line 553 "./src/silc.y" +#line 547 "./src/silc.y" {tnode *tmp = createNode(VAR, (yyvsp[-2].name), -1, NULL, NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-2].name));tmp->varclass = getClassOfSymbol((yyvsp[-2].name)); (yyval.no) = createNode(FFREE, "", -1, tmp, NULL);} -#line 2469 "./src/y.tab.c" +#line 2463 "./src/y.tab.c" break; case 61: -#line 557 "./src/silc.y" +#line 551 "./src/silc.y" {(yyval.no) = createNode(WRITE, "", -1, (yyvsp[-2].no), NULL);} -#line 2475 "./src/y.tab.c" +#line 2469 "./src/y.tab.c" break; case 62: -#line 560 "./src/silc.y" +#line 554 "./src/silc.y" { tnode *tmp = createNode(VAR, (yyvsp[-3].name), -1, NULL, NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-3].name)); tmp->varclass = getClassOfSymbol((yyvsp[-3].name)); (yyval.no) = createNode(ASSN, "", -1, tmp, (yyvsp[-1].no));} -#line 2482 "./src/y.tab.c" +#line 2476 "./src/y.tab.c" break; case 63: -#line 562 "./src/silc.y" +#line 556 "./src/silc.y" {tnode *tmp = createNode(VAR, (yyvsp[-6].name), -1, (yyvsp[-4].no), NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-6].name)); tmp->varclass = getClassOfSymbol((yyvsp[-6].name)); (yyval.no) = createNode(ASSN, "", -1, tmp, (yyvsp[-1].no));} -#line 2489 "./src/y.tab.c" +#line 2483 "./src/y.tab.c" break; case 64: -#line 564 "./src/silc.y" +#line 558 "./src/silc.y" { tnode *tmp = createNode(VAR, (yyvsp[-3].name), -1, NULL, NULL);tmp->vartype = getTypeOfSymbol((yyvsp[-3].name)); tmp->varclass = getClassOfSymbol((yyvsp[-3].name)); (yyval.no) = createNode(ASSN, "", -1, tmp, (yyvsp[-1].no));} -#line 2496 "./src/y.tab.c" +#line 2490 "./src/y.tab.c" break; case 65: -#line 569 "./src/silc.y" +#line 563 "./src/silc.y" { tnode *tmp = createNode(IF_BODY, "", -1, (yyvsp[-4].no), (yyvsp[-2].no)); (yyval.no) = createNode(IF, "", -1, (yyvsp[-7].no), tmp); } -#line 2505 "./src/y.tab.c" +#line 2499 "./src/y.tab.c" break; case 66: -#line 573 "./src/silc.y" +#line 567 "./src/silc.y" { tnode *tmp = createNode(IF_BODY, "", -1, (yyvsp[-2].no), NULL); (yyval.no) = createNode(IF, "", -1, (yyvsp[-5].no), tmp); } -#line 2514 "./src/y.tab.c" +#line 2508 "./src/y.tab.c" break; case 67: -#line 579 "./src/silc.y" +#line 573 "./src/silc.y" {(yyval.no) = createNode(BREAK, "", -1, NULL, NULL);} -#line 2520 "./src/y.tab.c" +#line 2514 "./src/y.tab.c" break; case 68: -#line 582 "./src/silc.y" +#line 576 "./src/silc.y" {(yyval.no) = createNode(CONT, "", -1, NULL, NULL);} -#line 2526 "./src/y.tab.c" +#line 2520 "./src/y.tab.c" break; case 69: -#line 586 "./src/silc.y" +#line 580 "./src/silc.y" {(yyval.no) = createNode(WHILE, "", -1, (yyvsp[-5].no), (yyvsp[-2].no));} -#line 2532 "./src/y.tab.c" +#line 2526 "./src/y.tab.c" break; case 70: -#line 589 "./src/silc.y" +#line 583 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2538 "./src/y.tab.c" +#line 2532 "./src/y.tab.c" break; case 71: -#line 590 "./src/silc.y" +#line 584 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2544 "./src/y.tab.c" +#line 2538 "./src/y.tab.c" break; case 72: -#line 591 "./src/silc.y" +#line 585 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2550 "./src/y.tab.c" +#line 2544 "./src/y.tab.c" break; case 73: -#line 592 "./src/silc.y" +#line 586 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2556 "./src/y.tab.c" +#line 2550 "./src/y.tab.c" break; case 74: -#line 593 "./src/silc.y" +#line 587 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2562 "./src/y.tab.c" +#line 2556 "./src/y.tab.c" break; case 75: -#line 594 "./src/silc.y" +#line 588 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2568 "./src/y.tab.c" +#line 2562 "./src/y.tab.c" break; case 76: -#line 595 "./src/silc.y" +#line 589 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2574 "./src/y.tab.c" +#line 2568 "./src/y.tab.c" break; case 77: -#line 596 "./src/silc.y" +#line 590 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2580 "./src/y.tab.c" +#line 2574 "./src/y.tab.c" break; case 78: -#line 597 "./src/silc.y" +#line 591 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2586 "./src/y.tab.c" +#line 2580 "./src/y.tab.c" break; case 79: -#line 600 "./src/silc.y" +#line 594 "./src/silc.y" {(yyval.no) = connect((yyvsp[-1].no), (yyvsp[0].no));} -#line 2592 "./src/y.tab.c" +#line 2586 "./src/y.tab.c" break; case 80: -#line 601 "./src/silc.y" +#line 595 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2598 "./src/y.tab.c" +#line 2592 "./src/y.tab.c" break; case 81: -#line 602 "./src/silc.y" +#line 596 "./src/silc.y" {(yyval.no) = NULL;} -#line 2604 "./src/y.tab.c" +#line 2598 "./src/y.tab.c" break; case 82: -#line 606 "./src/silc.y" +#line 600 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2610 "./src/y.tab.c" +#line 2604 "./src/y.tab.c" break; case 83: -#line 607 "./src/silc.y" +#line 601 "./src/silc.y" {(yyval.no) = NULL;} -#line 2616 "./src/y.tab.c" +#line 2610 "./src/y.tab.c" break; case 84: -#line 610 "./src/silc.y" +#line 604 "./src/silc.y" {(yyval.no) = connect((yyvsp[0].no), (yyvsp[-2].no));} -#line 2622 "./src/y.tab.c" +#line 2616 "./src/y.tab.c" break; case 85: -#line 611 "./src/silc.y" +#line 605 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2628 "./src/y.tab.c" +#line 2622 "./src/y.tab.c" break; case 86: -#line 613 "./src/silc.y" +#line 607 "./src/silc.y" { GSymbol* sym = (GSymbol*)searchSymbol((yyvsp[-3].name), GSymList); if(sym== NULL) yyerror("Function is not declared"); (yyval.no) = createNode(FUNC, (yyvsp[-3].name), -1, (yyvsp[-1].no), NULL); (yyval.no)->vartype = sym->type;} -#line 2637 "./src/y.tab.c" +#line 2631 "./src/y.tab.c" break; case 87: -#line 617 "./src/silc.y" +#line 611 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2643 "./src/y.tab.c" +#line 2637 "./src/y.tab.c" break; case 88: -#line 618 "./src/silc.y" +#line 612 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2649 "./src/y.tab.c" +#line 2643 "./src/y.tab.c" break; case 89: -#line 619 "./src/silc.y" +#line 613 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2655 "./src/y.tab.c" +#line 2649 "./src/y.tab.c" break; case 90: -#line 620 "./src/silc.y" +#line 614 "./src/silc.y" {(yyval.no) = (yyvsp[0].no);} -#line 2661 "./src/y.tab.c" +#line 2655 "./src/y.tab.c" break; case 91: -#line 622 "./src/silc.y" +#line 616 "./src/silc.y" { (yyval.no) = (yyvsp[-1].no);} -#line 2667 "./src/y.tab.c" +#line 2661 "./src/y.tab.c" break; case 92: -#line 630 "./src/silc.y" +#line 624 "./src/silc.y" {(yyval.name) = (yyvsp[0].name);} -#line 2673 "./src/y.tab.c" +#line 2667 "./src/y.tab.c" break; case 93: -#line 637 "./src/silc.y" +#line 631 "./src/silc.y" { (yyval.list) = (yyvsp[-1].list);} -#line 2679 "./src/y.tab.c" +#line 2673 "./src/y.tab.c" break; case 94: -#line 638 "./src/silc.y" +#line 632 "./src/silc.y" { (yyval.list) = NULL;} -#line 2685 "./src/y.tab.c" +#line 2679 "./src/y.tab.c" break; case 95: -#line 641 "./src/silc.y" +#line 635 "./src/silc.y" { (yyval.list) = connectList((yyvsp[-1].list), (yyvsp[0].list), sizeof(LSymbol));} -#line 2691 "./src/y.tab.c" +#line 2685 "./src/y.tab.c" break; case 96: -#line 642 "./src/silc.y" +#line 636 "./src/silc.y" {(yyval.list) = (yyvsp[0].list);} -#line 2697 "./src/y.tab.c" +#line 2691 "./src/y.tab.c" break; case 97: -#line 646 "./src/silc.y" +#line 640 "./src/silc.y" { (yyval.list) = NULL; LinkedList* gvars = (yyvsp[-1].list); while(gvars) { @@ -2713,47 +2707,47 @@ yyparse (void) LinkedList *copy = copyList((yyval.list), sizeof(LSymbol)); curLvar = connectList(curLvar, copy, sizeof(LSymbol)); } -#line 2717 "./src/y.tab.c" +#line 2711 "./src/y.tab.c" break; case 98: -#line 662 "./src/silc.y" +#line 656 "./src/silc.y" {(yyval.list) = addNode(strdup((yyvsp[0].name)), sizeof((yyvsp[0].name)), (yyvsp[-2].list));} -#line 2723 "./src/y.tab.c" +#line 2717 "./src/y.tab.c" break; case 99: -#line 663 "./src/silc.y" +#line 657 "./src/silc.y" {(yyval.list) = addNode(strdup((yyvsp[0].name)), sizeof((yyvsp[0].name)), NULL);} -#line 2729 "./src/y.tab.c" +#line 2723 "./src/y.tab.c" break; case 100: -#line 671 "./src/silc.y" +#line 665 "./src/silc.y" {} -#line 2735 "./src/y.tab.c" +#line 2729 "./src/y.tab.c" break; case 101: -#line 672 "./src/silc.y" +#line 666 "./src/silc.y" {} -#line 2741 "./src/y.tab.c" +#line 2735 "./src/y.tab.c" break; case 102: -#line 675 "./src/silc.y" +#line 669 "./src/silc.y" {} -#line 2747 "./src/y.tab.c" +#line 2741 "./src/y.tab.c" break; case 103: -#line 676 "./src/silc.y" +#line 670 "./src/silc.y" {} -#line 2753 "./src/y.tab.c" +#line 2747 "./src/y.tab.c" break; case 104: -#line 680 "./src/silc.y" +#line 674 "./src/silc.y" { LinkedList* gvars = (yyvsp[-1].list); while(gvars) { @@ -2773,83 +2767,83 @@ yyparse (void) curMemory+=var->size; } } -#line 2777 "./src/y.tab.c" +#line 2771 "./src/y.tab.c" break; case 105: -#line 700 "./src/silc.y" +#line 694 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[0].name), .size=1}; (yyval.list) = addNode(tmp, sizeof(GVariable), (yyvsp[-2].list)); } -#line 2786 "./src/y.tab.c" +#line 2780 "./src/y.tab.c" break; case 106: -#line 705 "./src/silc.y" +#line 699 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[-3].name), .size=(yyvsp[-1].no)->val}; (yyval.list) = addNode(tmp, sizeof(GVariable), (yyvsp[-5].list)); } -#line 2795 "./src/y.tab.c" +#line 2789 "./src/y.tab.c" break; case 107: -#line 710 "./src/silc.y" +#line 704 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[-3].name), .params=(yyvsp[-1].no), .size=0}; (yyval.list) = addNode(tmp, sizeof(GVariable), (yyvsp[-5].list)); curLvar = NULL; } -#line 2805 "./src/y.tab.c" +#line 2799 "./src/y.tab.c" break; case 108: -#line 716 "./src/silc.y" +#line 710 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[-3].name), .size=(yyvsp[-1].no)->val}; (yyval.list) = addNode(tmp, sizeof(GVariable), NULL); } -#line 2814 "./src/y.tab.c" +#line 2808 "./src/y.tab.c" break; case 109: -#line 721 "./src/silc.y" +#line 715 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[0].name), .size=1}; (yyval.list) = addNode(tmp, sizeof(GVariable), NULL); } -#line 2823 "./src/y.tab.c" +#line 2817 "./src/y.tab.c" break; case 110: -#line 726 "./src/silc.y" +#line 720 "./src/silc.y" {GVariable* tmp = (GVariable*)malloc(sizeof(GVariable)); *tmp = (GVariable){.name=(yyvsp[-3].name), .params=(yyvsp[-1].no), .size=0, .isfunc=1}; (yyval.list) = addNode(tmp, sizeof(GVariable), NULL); curLvar = NULL; } -#line 2833 "./src/y.tab.c" +#line 2827 "./src/y.tab.c" break; case 111: -#line 737 "./src/silc.y" +#line 731 "./src/silc.y" { fprintf(out, "%s:\n", (yyvsp[0].no)->varname); eval_func((yyvsp[0].no), out);} -#line 2841 "./src/y.tab.c" +#line 2835 "./src/y.tab.c" break; case 112: -#line 741 "./src/silc.y" +#line 735 "./src/silc.y" { fprintf(out, "%s:\n", (yyvsp[0].no)->varname); eval_func((yyvsp[0].no), out);} -#line 2849 "./src/y.tab.c" +#line 2843 "./src/y.tab.c" break; case 113: -#line 746 "./src/silc.y" +#line 740 "./src/silc.y" { GSymbol* tmp = searchSymbol((yyvsp[-10].name), GSymList); if(tmp == NULL) yyerror("Function is not declared"); @@ -2865,11 +2859,11 @@ yyparse (void) (yyval.no) = createNode(FUNC, (yyvsp[-10].name), -1, connect((yyvsp[-3].no), (yyvsp[-2].no)), (yyvsp[-8].no)); (yyval.no)->vartype = searchType((yyvsp[-11].name), TypeList); curLvar = NULL; } -#line 2869 "./src/y.tab.c" +#line 2863 "./src/y.tab.c" break; case 114: -#line 761 "./src/silc.y" +#line 755 "./src/silc.y" { GSymbol* tmp = searchSymbol((yyvsp[-9].name), GSymList); if(tmp == NULL) yyerror("Function is not declared"); @@ -2885,11 +2879,11 @@ yyparse (void) (yyval.no) = createNode(FUNC, (yyvsp[-9].name), -1, connect((yyvsp[-3].no), (yyvsp[-2].no)), (yyvsp[-7].no)); (yyval.no)->vartype = searchType((yyvsp[-10].name), TypeList); curLvar = NULL; } -#line 2889 "./src/y.tab.c" +#line 2883 "./src/y.tab.c" break; case 115: -#line 778 "./src/silc.y" +#line 772 "./src/silc.y" {curLvar = addParam((yyvsp[0].no)); (yyval.no) = (yyvsp[0].no); LinkedList* t = curLvar; LSymbol* tmp = malloc(sizeof(LSymbol)); @@ -2899,35 +2893,35 @@ yyparse (void) curLvar = addNode(tmp, sizeof(LSymbol), curLvar); t = curLvar; } -#line 2903 "./src/y.tab.c" +#line 2897 "./src/y.tab.c" break; case 116: -#line 788 "./src/silc.y" +#line 782 "./src/silc.y" { (yyval.no) = connect((yyvsp[0].no), (yyvsp[-2].no));} -#line 2909 "./src/y.tab.c" +#line 2903 "./src/y.tab.c" break; case 117: -#line 789 "./src/silc.y" +#line 783 "./src/silc.y" { (yyval.no) = (yyvsp[0].no);} -#line 2915 "./src/y.tab.c" +#line 2909 "./src/y.tab.c" break; case 118: -#line 790 "./src/silc.y" +#line 784 "./src/silc.y" { (yyval.no) = NULL;} -#line 2921 "./src/y.tab.c" +#line 2915 "./src/y.tab.c" break; case 119: -#line 793 "./src/silc.y" +#line 787 "./src/silc.y" {(yyval.no) = createNode(VAR, (yyvsp[0].name), -1, NULL, NULL); (yyval.no)->vartype = searchType((yyvsp[-1].name), TypeList);} -#line 2927 "./src/y.tab.c" +#line 2921 "./src/y.tab.c" break; -#line 2931 "./src/y.tab.c" +#line 2925 "./src/y.tab.c" default: break; } @@ -3165,7 +3159,7 @@ yyparse (void) #endif return yyresult; } -#line 798 "./src/silc.y" +#line 792 "./src/silc.y" diff --git a/xsm_expl/xfs-interface/disk.xfs b/xsm_expl/xfs-interface/disk.xfs index eefd977cc515c694f0ec820185ce36cf5420e29a..b99ecbdcc34cbbf784b83879f60bd8eae931164e 100755 GIT binary patch delta 7372 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