BEGIN,
ASSIGN,
INTEGER,
- TRUE,
- FALSE,
LPAREN,
RPAREN,
EQUAL,
{
ctx -> token = BEGIN;
}
- else if(strcmp(ident, "TRUE") == 0)
- {
- ctx -> token = TRUE;
- }
- else if(strcmp(ident, "FALSE") == 0)
- {
- ctx -> token = FALSE;
- }
else if(strcmp(ident, "OR") == 0)
{
ctx -> token = OR;
|| ((x) == STRING) \
|| ((x) == NIL) \
|| ((x) == LPAREN) \
- || ((x) == NOT) \
- || ((x) == TRUE) \
- || ((x) == FALSE))
+ || ((x) == NOT))
static oberon_expr_t *
oberno_make_dereferencing(oberon_context_t * ctx, oberon_expr_t * expr)
return set;
}
+static oberon_expr_t *
+oberon_make_boolean(oberon_context_t * ctx, bool cond)
+{
+ oberon_expr_t * expr;
+ expr = oberon_new_item(MODE_BOOLEAN, ctx -> bool_type, true);
+ expr -> item.integer = cond;
+ return expr;
+}
+
static oberon_expr_t *
oberon_factor(oberon_context_t * ctx)
{
expr -> item.real = ctx -> real;
oberon_assert_token(ctx, REAL);
break;
- case TRUE:
- expr = oberon_new_item(MODE_BOOLEAN, ctx -> bool_type, true);
- expr -> item.boolean = true;
- oberon_assert_token(ctx, TRUE);
- break;
- case FALSE:
- expr = oberon_new_item(MODE_BOOLEAN, ctx -> bool_type, true);
- expr -> item.boolean = false;
- oberon_assert_token(ctx, FALSE);
- break;
case LBRACE:
expr = oberon_set(ctx);
break;
oberon_assign(ctx, src, dst);
}
+static void
+oberon_new_const(oberon_context_t * ctx, char * name, oberon_expr_t * expr)
+{
+ oberon_object_t * constant;
+ constant = oberon_define_object(ctx -> decl, name, OBERON_CLASS_CONST, true, false, false);
+ oberon_check_const(ctx, expr);
+ constant -> value = (oberon_item_t *) expr;
+}
+
oberon_context_t *
oberon_create_context(ModuleImportCallback import_module)
{
register_default_types(ctx);
+ /* Constants */
+ oberon_new_const(ctx, "TRUE", oberon_make_boolean(ctx, true));
+ oberon_new_const(ctx, "FALSE", oberon_make_boolean(ctx, false));
+
/* Functions */
oberon_new_intrinsic(ctx, "ABS", oberon_make_abs_call, NULL);
oberon_new_intrinsic(ctx, "MIN", oberon_make_min_call, NULL);