Преглед на файлове

improve error message for invalid assignments

master
Ian Piumarta преди 3 месеца
родител
ревизия
360fde2056
променени са 2 файла, в които са добавени 23 реда и са изтрити 9 реда
  1. +13
    -5
      demofiles/invalid-pointer.c
  2. +10
    -4
      main.leg

+ 13
- 5
demofiles/invalid-pointer.c Целия файл

@ -4,9 +4,17 @@
#include <stdint.h>
int main() {
int *ptr = (int *)(intptr_t)0xDeadD0d0;
printf("%p\n",ptr);
*ptr = 42; // illegal memory access
printf("%d\n", *ptr);
return 0;
int i, *ptr;
ptr = &i;
printf("%p\n",ptr);
*ptr = 42; // legal memory access
printf("%d\n", *ptr);
ptr = (int *)(intptr_t)0xDeadD0d0;
printf("%p\n",ptr);
*ptr = 42; // illegal memory access
printf("%d\n", *ptr);
return 0;
}

+ 10
- 4
main.leg Целия файл

@ -1,6 +1,6 @@
# main.leg -- C parser + interpreter
#
# Last edited: 2025-01-26 21:27:29 by piumarta on zora
# Last edited: 2025-01-27 09:37:11 by piumarta on zora
%{
;
@ -2163,7 +2163,8 @@ oop eval(oop exp, oop env)
break;
}
case Assign: {
oop lhs = get(exp, Assign,lhs);
oop dst = get(exp, Assign,lhs);
oop lhs = dst;
oop rhs = eval(get(exp, Assign,rhs), nil);
switch (getType(lhs)) {
case Symbol: {
@ -2185,9 +2186,14 @@ oop eval(oop exp, oop env)
}
break;
}
default: break;
default:
break;
}
fatal("cannot assign to: %s", toString(lhs));
if (dst == lhs)
fatal("cannot assign to: %s", toString(lhs));
else
fatal("invalid rvalue '%s' assigning to: %s",
toString(lhs), toString(dst));
break;
}
case Cast: {

Зареждане…
Отказ
Запис