diff options
| author | Tucker Evans <tuckerevans24@gmail.com> | 2019-08-17 14:06:09 -0400 | 
|---|---|---|
| committer | Tucker Evans <tuckerevans24@gmail.com> | 2019-08-17 14:06:09 -0400 | 
| commit | 950a05bb51c231a690aff725068703946231a6a7 (patch) | |
| tree | adb858dc7ea5cea0ee665a1a4e97874ef0ca814f /sem_check.c | |
| parent | 47016c39ed801aecfa900f30a49d94ae247b1156 (diff) | |
Add array type checking
Diffstat (limited to 'sem_check.c')
| -rw-r--r-- | sem_check.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/sem_check.c b/sem_check.c index 44eb82f..a3d08b8 100644 --- a/sem_check.c +++ b/sem_check.c @@ -42,7 +42,7 @@ ptree *t;  	int type;  	if (!t) -	printf("TYPE: %d\n", t->type); +		fprintf(stderr, "TYPE: %d\n", t->type);  	switch (t->type) {  	case ID: @@ -91,10 +91,10 @@ ptree *t;  	case RNUM:  		return REAL;  	case ASSIGNOP: -		if (!(t->r && t->l && t->r->attr.nval)) +		if (!(t->r && t->l))  			yyerror("Incomplete parse tree\n"); -		if (t->l->attr.nval->var_type == t->r->ret_type) +		if (t->l->ret_type == t->r->ret_type)  			return 0;  		else {  			snprintf(buf, 100, "Mismached types: " @@ -112,9 +112,16 @@ ptree *t;  		if (!(t->r && t->l && t->l->attr.nval))  			yyerror("Incorrect Array Access\n"); +		if (t->r->ret_type != INT) { +			snprintf(buf, 100, "Cannot access array" +					"with type %s\n", +					pretty_type(t->r->ret_type)); +			yyerror(buf); +		} +  		type = t->l->attr.nval -> var_type;  		if (type == ARRAY - INT || type == ARRAY - REAL) -			return 0; +			return ARRAY - type;  		break;  	default:  		return -200; | 
