Oberon space
General Category => Общий раздел => Тема начата: valexey_u от Май 18, 2013, 01:35:37 pm
-
Пока нет ответа от Ominc по поводу бага компилятора (http://oberspace.dyndns.org/index.php/topic,500.0.html), я решил попробовать этот же модуль на GPCP for jvm, благо сама java показала очень приличные результаты по производительности. Изменил импорты, пока убрал замер времени, остальное оставил всё как есть:
MODULE Blur;
IMPORT CPmain;
CONST
width = 640;
height = 480;
N = 13;
frames = 1000;
red = 0;
green = 1;
blue = 2;
TYPE
Frame = ARRAY width*height*(blue+1) OF SHORTCHAR;
PROCEDURE Index(x,y,color : INTEGER) : INTEGER;
BEGIN
RETURN ((x+y*width)*3+color)
END Index;
PROCEDURE Blur(IN in : Frame; OUT out : Frame);
VAR
x,y,c : INTEGER;
BEGIN
FOR y:=1 TO height-2 DO
FOR x:=1 TO width-2 DO
FOR c:=red TO blue DO
out[Index(x,y,c)] := SHORT(CHR( ( ORD(in[Index(x,y-1,c)]) + ORD(in[Index(x,y+1,c)]) +
ORD(in[Index(x-1,y,c)]) + ORD(in[Index(x+1,y,c)]) ) DIV 4 ));
END;
END;
END;
END Blur;
PROCEDURE Do*;
VAR
time : LONGINT;
f, n : INTEGER;
a1, a2 : POINTER TO Frame;
BEGIN
NEW(a1);
NEW(a2);
FOR f:=1 TO frames DO
FOR n:=1 TO N DO
Blur(a1,a2);
Blur(a2,a1)
END
END;
END Do;
BEGIN
Do;
END Blur.
Компилируется все на ура. Но при запуска вылетает - ругается верификатор жабы:
>cprun Blur
Exception in thread "main" java.lang.VerifyError: (class: CP/Blur/Blur, method: Do signature: ()V) Incompatible argument to function
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Кто-нибудь знает что ему не нравится и почему компилятор молчит?
-
Поздравляю. Ты написал убийцу компиляторов оберона. ;D
-
Поздравляю. Ты написал убийцу компиляторов оберона. ;D
Ну, пока всего лишь Компонентного Паскаля :-) Хотя, по идее, оно может убить и "OP2: A PORTABLE OBERON–2 COMPILER".
-
Похоже все дело в SHORTCHAR, что-то с реализацией этого типа в GPCP не то. Вот такое приложение тоже падает:
MODULE Test;
IMPORT CPmain;
PROCEDURE Test1 (a : SHORTCHAR); BEGIN END Test1;
PROCEDURE Do*;
VAR
a : SHORTCHAR;
BEGIN
a := "a";
Test1(a);
END Do;
BEGIN
Do;
END Test.
Падает так:
Exception in thread "main" java.lang.VerifyError: (class: CP/Test/Test, method: Do signature: ()V) Expecting to find integer on stack
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Попробую .net версию gpcp. Может полегчает.
-
.net-версия работает.
-
Зарепортил баг: https://gpcp.codeplex.com/workitem/1562
-
Вроде бы пофиксили:
[quite]
The source has been fixed for both of the SHORTCHAR dependent errors mentioned by valexey.
There were two separate code errors here. An incorrect mapping from GPCP's ordinal for built-in types and the enumeration used by the JVM; The other error was the incorrect implicit conversion for literal strings of length equal to one converted to SHORTCHAR that I mentioned in my previous post.
The fixes have been committed to the repository, in revision 29756. Unless anyone turns up any new SHORTCHAR related problems in the next few days I will generate and release version 1.3.17.
[/quote]
http://gpcp.codeplex.com/workitem/1562