MODULE Test;
-TYPE
- A = POINTER TO RECORD B : B; END;
+IMPORT Out;
- B = POINTER TO RECORD x : A END;
+TYPE
+ Name = ARRAY 16 OF CHAR;
VAR
- a : A;
-
-PROCEDURE Do;
- TYPE
- ListPtr = POINTER TO ListNode;
- ListNode = RECORD next: ListPtr END;
-BEGIN
-END Do;
+ key : ARRAY 128 OF Name;
+ name : Name;
BEGIN
- NEW(a);
- a.B := NIL;
+ IF name > name THEN Out.Ln; END;
END Test.
#include <gc.h>
#include "../../oberon-internals.h"
+#include "../../oberon-type-compat.h"
#include "../../generator.h"
#include "generator-jvm.h"
#include "generator-jvm-abi.h"
}
else if(prefix == 'a')
{
- if(t -> class == OBERON_TYPE_STRING
- || (t -> class == OBERON_TYPE_POINTER && t -> base -> class == OBERON_TYPE_CHAR))
+ if(oberon_is_array_of_char_type(t) || oberon_is_string_type(t))
{
jvm_generate(p, 2, 1, "invokestatic SYSTEM/STRCMP([B[B)I");
jvm_generate(p, 1, 0, "if%s L%i", cmpop, label_true);
static void
oberon_decl_seq(oberon_context_t * ctx)
{
- if(ctx -> token == CONST)
+ while(ctx -> token >= CONST && ctx -> token <= VAR)
{
- oberon_assert_token(ctx, CONST);
- while(ctx -> token == IDENT)
+ if(ctx -> token == CONST)
{
- oberon_const_decl(ctx);
- oberon_assert_token(ctx, SEMICOLON);
+ oberon_assert_token(ctx, CONST);
+ while(ctx -> token == IDENT)
+ {
+ oberon_const_decl(ctx);
+ oberon_assert_token(ctx, SEMICOLON);
+ }
}
- }
-
- if(ctx -> token == TYPE)
- {
- oberon_assert_token(ctx, TYPE);
- while(ctx -> token == IDENT)
+ else if(ctx -> token == TYPE)
{
- oberon_type_decl(ctx);
- oberon_assert_token(ctx, SEMICOLON);
+ oberon_assert_token(ctx, TYPE);
+ while(ctx -> token == IDENT)
+ {
+ oberon_type_decl(ctx);
+ oberon_assert_token(ctx, SEMICOLON);
+ }
}
- }
-
- if(ctx -> token == VAR)
- {
- oberon_assert_token(ctx, VAR);
- while(ctx -> token == IDENT)
+ else if(ctx -> token == VAR)
{
- oberon_var_decl(ctx);
- oberon_assert_token(ctx, SEMICOLON);
+ oberon_assert_token(ctx, VAR);
+ while(ctx -> token == IDENT)
+ {
+ oberon_var_decl(ctx);
+ oberon_assert_token(ctx, SEMICOLON);
+ }
}
}