MODULE Test;
-VAR
- i : INTEGER;
- f : REAL;
- d : LONGREAL;
+IMPORT Out;
BEGIN
- i := 5 DIV 3;
- f := 5 / 3;
- d := 5 / 3.0;
- d := 5 / 3.0D0;
+ IF "abc" = "abc" THEN
+ Out.String("Equal abc = abc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE abc = abc"); Out.Ln;
+ END;
+
+ IF "cba" > "abc" THEN
+ Out.String("Great cba > abc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE cba = abc"); Out.Ln;
+ END;
+
+ IF "abc" < "bc" THEN
+ Out.String("Less abc < bc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE abc < bc"); Out.Ln;
+ END;
END Test.
--- /dev/null
+MODULE Test10;
+
+IMPORT Out;
+
+BEGIN
+ IF "abc" = "abc" THEN
+ Out.String("Equal abc = abc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE abc = abc"); Out.Ln;
+ END;
+
+ IF "cba" > "abc" THEN
+ Out.String("Great cba > abc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE cba = abc"); Out.Ln;
+ END;
+
+ IF "abc" < "bc" THEN
+ Out.String("Less abc < bc"); Out.Ln;
+ ELSE
+ Out.String("WAT: MUST BE abc < bc"); Out.Ln;
+ END;
+END Test10.
+
+Проверка строк.
+- Не реализована свёртка констант
- Сделать проверку повторов в CASE.
- Сделать нормальную проверку наличия RETURN.
-- Нужно проверить правила совместимости типов (Приложение A).
- Нет функций ASH CAP CHR ENTIER LEN LONG ODD ORD SHORT
- Нет процедур DEC EXCL INC INCL
- Нет счёта строк / столбцов
- Нет процедур привязанных к типм
-- Не реализована свёртка констант
- Нужно просмотреть Дубовые требования.
- JVM: Импортируемые модули не инициализируются
-- JVM: Не реализовано сравнение строк.
- Уточнить как должна работать проверка импорта на чтение. (8.1)
-- Уточнить результат оператора "/" (8.2.2)
- Примеры -5 DIV 3 и -5 MOD 3 работают не так как в (8.2.2)
Нужен другой тип округления?
maketest Test7
maketest Test8
maketest Test9
+maketest Test10
{
int len_x = LEN(x);
int len_v = v.length - 1;
+
int len = (len_x < len_v) ? (len_x) : (len_v);
for(int i = 0; i < len; i++)
{
v[i] = x[i];
}
+
v[len] = 0;
}
+ public static int STRCMP(byte[] a, byte[] b)
+ {
+ int i = 0;
+ while(a[i] != 0 && a[i] == b[i])
+ {
+ i += 1;
+ }
+ return a[i] - b[i];
+ }
+
public static void HALT(long n)
{
System.exit((int) n);
jvm_generate(p, 2 * cell_size, 1, "%ccmp%c", prefix, fop);
jvm_generate(p, 1, 1, "if%s L%i", cmpop, label_true);
}
+ else if(prefix == 'a')
+ {
+ if(t -> class == OBERON_TYPE_STRING
+ || (t -> class == OBERON_TYPE_POINTER && t -> base -> class == OBERON_TYPE_CHAR))
+ {
+ jvm_generate(p, 2, 1, "invokestatic SYSTEM/STRCMP([B[B)I");
+ jvm_generate(p, 1, 0, "if%s L%i", cmpop, label_true);
+ }
+ else
+ {
+ jvm_generate(p, 1, 0, "if_acmp%s L%i", cmpop, label_true);
+ }
+ }
else
{
jvm_generate(p, 2 * cell_size, 0, "if_%ccmp%s L%i", prefix, cmpop, label_true);
{
return a;
}
- else if(oberon_incluses_type(b, a))
- {
- return b;
- }
else
{
- oberon_error(ctx, "oberon_get_longer_type: error");
- return NULL;
+ return b;
}
}
{
return ctx -> real_type;
}
- else if(oberon_is_real_type(result))
- {
- return result;
- }
else
{
- oberon_error(ctx, "oberon_get_longer_real_type: error");
- return NULL;
+ return result;
}
}