[gtk+/wip/otte/shader: 33/176] gsksl: Redo declaration "decorator" parsing
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/otte/shader: 33/176] gsksl: Redo declaration "decorator" parsing
- Date: Wed, 25 Oct 2017 03:19:30 +0000 (UTC)
commit 15bda4fc7a9e76ad99c1e643d8af1235ab691192
Author: Benjamin Otte <otte redhat com>
Date: Mon Sep 25 22:56:29 2017 +0200
gsksl: Redo declaration "decorator" parsing
Instead of parsing into a list of flags, have an array of values that
can be set to certain values. This way, we can reuse it for layout()
contents.
gsk/gskslnode.c | 10 +-
gsk/gskslpointertype.c | 314 ++++++++++++-----------------------------
gsk/gskslpointertypeprivate.h | 65 ++++-----
gsk/gskslprogram.c | 12 +-
4 files changed, 133 insertions(+), 268 deletions(-)
---
diff --git a/gsk/gskslnode.c b/gsk/gskslnode.c
index 62afbbb..49a6390 100644
--- a/gsk/gskslnode.c
+++ b/gsk/gskslnode.c
@@ -353,13 +353,11 @@ gsk_sl_node_parse_statement (GskSlScope *scope,
case GSK_SL_TOKEN_DMAT4X4:
{
GskSlType *type;
- GskSlPointerTypeFlags flags;
+ GskSlDecorations decoration;
gboolean success;
- success = gsk_sl_type_qualifier_parse (preproc,
- GSK_SL_POINTER_TYPE_PARAMETER_QUALIFIER
- | GSK_SL_POINTER_TYPE_MEMORY_QUALIFIER,
- &flags);
+ success = gsk_sl_decoration_list_parse (preproc,
+ &decoration);
type = gsk_sl_type_new_parse (preproc);
if (type == NULL)
@@ -391,7 +389,7 @@ gsk_sl_node_parse_statement (GskSlScope *scope,
{
GskSlPointerType *pointer_type;
- pointer_type = gsk_sl_pointer_type_new (type, flags | GSK_SL_POINTER_TYPE_LOCAL);
+ pointer_type = gsk_sl_pointer_type_new (type, TRUE,
decoration.values[GSK_SL_DECORATION_CALLER_ACCESS].value);
node = gsk_sl_node_parse_declaration (scope, preproc, pointer_type);
gsk_sl_pointer_type_unref (pointer_type);
}
diff --git a/gsk/gskslpointertype.c b/gsk/gskslpointertype.c
index 8b8f157..841ccd8 100644
--- a/gsk/gskslpointertype.c
+++ b/gsk/gskslpointertype.c
@@ -30,12 +30,14 @@ struct _GskSlPointerType {
GskSlType *type;
- GskSlPointerTypeFlags flags;
+ gboolean local;
+ GskSlDecorationAccess access;
};
GskSlPointerType *
gsk_sl_pointer_type_new (GskSlType *type,
- GskSlPointerTypeFlags flags)
+ gboolean local,
+ GskSlDecorationAccess access)
{
GskSlPointerType *result;
@@ -43,227 +45,170 @@ gsk_sl_pointer_type_new (GskSlType *type,
result->ref_count = 1;
result->type = gsk_sl_type_ref (type);
- result->flags = flags;
+ result->local = local;
+ result->access = access;
return result;
}
+static gboolean
+gsk_sl_decoration_list_set (GskSlPreprocessor *preproc,
+ GskSlDecorations *list,
+ GskSlDecoration decoration,
+ gint value)
+{
+ list->values[decoration].set = TRUE;
+ list->values[decoration].value = value;
+
+ return TRUE;
+}
+
+static gboolean
+gsk_sl_decoration_list_add_simple (GskSlPreprocessor *preproc,
+ GskSlDecorations *list,
+ GskSlDecoration decoration)
+{
+ if (list->values[decoration].set)
+ {
+ gsk_sl_preprocessor_error (preproc, "Duplicate qualifier.");
+ return FALSE;
+ }
+
+ return gsk_sl_decoration_list_set (preproc, list, decoration, 1);
+}
+
gboolean
-gsk_sl_type_qualifier_parse (GskSlPreprocessor *stream,
- GskSlPointerTypeFlags allowed_flags,
- GskSlPointerTypeFlags *parsed_flags)
+gsk_sl_decoration_list_parse (GskSlPreprocessor *preproc,
+ GskSlDecorations *list)
{
const GskSlToken *token;
- guint flags = 0;
gboolean success = TRUE;
+ memset (list, 0, sizeof (GskSlDecorations));
+
while (TRUE)
{
- token = gsk_sl_preprocessor_get (stream);
+ token = gsk_sl_preprocessor_get (preproc);
switch ((guint) token->type)
{
case GSK_SL_TOKEN_CONST:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_CONST))
- {
- gsk_sl_preprocessor_error (stream, "\"const\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_CONST)
- {
- gsk_sl_preprocessor_error (stream, "\"const\" qualifier specified twice.");
- success = FALSE;
- }
- else
- {
- flags |= GSK_SL_POINTER_TYPE_CONST;
- }
- gsk_sl_preprocessor_consume (stream, NULL);
+ success &= gsk_sl_decoration_list_add_simple (preproc, list, GSK_SL_DECORATION_CONST);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_IN:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_IN))
- {
- gsk_sl_preprocessor_error (stream, "\"in\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_IN)
+ if (list->values[GSK_SL_DECORATION_CALLER_ACCESS].value & GSK_SL_DECORATION_ACCESS_READ)
{
- gsk_sl_preprocessor_error (stream, "\"in\" qualifier specified twice.");
+ gsk_sl_preprocessor_error (preproc, "\"in\" qualifier specified twice.");
success = FALSE;
}
else
{
- flags |= GSK_SL_POINTER_TYPE_IN;
+ success &= gsk_sl_decoration_list_set (preproc, list,
+ GSK_SL_DECORATION_CALLER_ACCESS,
+ list->values[GSK_SL_DECORATION_CALLER_ACCESS].value |
GSK_SL_DECORATION_ACCESS_READ);
}
- gsk_sl_preprocessor_consume (stream, NULL);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_OUT:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_OUT))
+ if (list->values[GSK_SL_DECORATION_CALLER_ACCESS].value & GSK_SL_DECORATION_ACCESS_WRITE)
{
- gsk_sl_preprocessor_error (stream, "\"out\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_OUT)
- {
- gsk_sl_preprocessor_error (stream, "\"out\" qualifier specified twice.");
+ gsk_sl_preprocessor_error (preproc, "\"out\" qualifier specified twice.");
success = FALSE;
}
else
{
- flags |= GSK_SL_POINTER_TYPE_OUT;
+ success &= gsk_sl_decoration_list_set (preproc, list,
+ GSK_SL_DECORATION_CALLER_ACCESS,
+ list->values[GSK_SL_DECORATION_CALLER_ACCESS].value |
GSK_SL_DECORATION_ACCESS_WRITE);
}
- gsk_sl_preprocessor_consume (stream, NULL);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_INOUT:
- if ((allowed_flags & (GSK_SL_POINTER_TYPE_IN | GSK_SL_POINTER_TYPE_OUT)) !=
(GSK_SL_POINTER_TYPE_IN | GSK_SL_POINTER_TYPE_OUT))
- {
- gsk_sl_preprocessor_error (stream, "\"inout\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_IN)
+ if (list->values[GSK_SL_DECORATION_CALLER_ACCESS].value & GSK_SL_DECORATION_ACCESS_READ)
{
- gsk_sl_preprocessor_error (stream, "\"in\" qualifier already used.");
+ gsk_sl_preprocessor_error (preproc, "\"in\" qualifier already used.");
success = FALSE;
}
- else if (flags & GSK_SL_POINTER_TYPE_OUT)
+ else if (list->values[GSK_SL_DECORATION_CALLER_ACCESS].value & GSK_SL_DECORATION_ACCESS_WRITE)
{
- gsk_sl_preprocessor_error (stream, "\"out\" qualifier already used.");
+ gsk_sl_preprocessor_error (preproc, "\"out\" qualifier already used.");
success = FALSE;
}
else
{
- flags |= GSK_SL_POINTER_TYPE_IN | GSK_SL_POINTER_TYPE_OUT;
+ success &= gsk_sl_decoration_list_set (preproc, list,
+ GSK_SL_DECORATION_CALLER_ACCESS,
+ GSK_SL_DECORATION_ACCESS_READWRITE);
}
- gsk_sl_preprocessor_consume (stream, NULL);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_INVARIANT:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_INVARIANT))
- {
- gsk_sl_preprocessor_error (stream, "\"invariant\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_INVARIANT)
- {
- gsk_sl_preprocessor_error (stream, "\"invariant\" qualifier specified twice.");
- success = FALSE;
- }
- else
- {
- flags |= GSK_SL_POINTER_TYPE_INVARIANT;
- }
- gsk_sl_preprocessor_consume (stream, NULL);
+ success &= gsk_sl_decoration_list_add_simple (preproc, list, GSK_SL_DECORATION_INVARIANT);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_COHERENT:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_COHERENT))
- {
- gsk_sl_preprocessor_error (stream, "\"coherent\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_COHERENT)
- {
- gsk_sl_preprocessor_error (stream, "\"coherent\" qualifier specified twice.");
- success = FALSE;
- }
- else
- {
- flags |= GSK_SL_POINTER_TYPE_COHERENT;
- }
- gsk_sl_preprocessor_consume (stream, NULL);
+ success &= gsk_sl_decoration_list_add_simple (preproc, list, GSK_SL_DECORATION_COHERENT);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_VOLATILE:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_VOLATILE))
- {
- gsk_sl_preprocessor_error (stream, "\"volatile\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_VOLATILE)
- {
- gsk_sl_preprocessor_error (stream, "\"volatile\" qualifier specified twice.");
- success = FALSE;
- }
- else
- {
- flags |= GSK_SL_POINTER_TYPE_VOLATILE;
- }
- gsk_sl_preprocessor_consume (stream, NULL);
+ success &= gsk_sl_decoration_list_add_simple (preproc, list, GSK_SL_DECORATION_VOLATILE);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_RESTRICT:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_RESTRICT))
- {
- gsk_sl_preprocessor_error (stream, "\"restrict\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_RESTRICT)
- {
- gsk_sl_preprocessor_error (stream, "\"restrict\" qualifier specified twice.");
- success = FALSE;
- }
- else
- {
- flags |= GSK_SL_POINTER_TYPE_RESTRICT;
- }
- gsk_sl_preprocessor_consume (stream, NULL);
+ success &= gsk_sl_decoration_list_add_simple (preproc, list, GSK_SL_DECORATION_RESTRICT);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_READONLY:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_READONLY))
+ if (list->values[GSK_SL_DECORATION_ACCESS].value & GSK_SL_DECORATION_ACCESS_READ)
{
- gsk_sl_preprocessor_error (stream, "\"readonly\" qualifier not allowed here.");
+ gsk_sl_preprocessor_error (preproc, "\"readonly\" qualifier specified twice.");
success = FALSE;
}
- else if (flags & GSK_SL_POINTER_TYPE_READONLY)
+ else if (list->values[GSK_SL_DECORATION_ACCESS].value & GSK_SL_DECORATION_ACCESS_WRITE)
{
- gsk_sl_preprocessor_error (stream, "\"readonly\" qualifier specified twice.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_WRITEONLY)
- {
- gsk_sl_preprocessor_error (stream, "\"writeonly\" qualifier already used.");
+ gsk_sl_preprocessor_error (preproc, "\"writeonly\" qualifier already used.");
success = FALSE;
}
else
{
- flags |= GSK_SL_POINTER_TYPE_READONLY;
+ success &= gsk_sl_decoration_list_set (preproc, list,
+ GSK_SL_DECORATION_ACCESS,
+ GSK_SL_DECORATION_ACCESS_READ);
}
- gsk_sl_preprocessor_consume (stream, NULL);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
case GSK_SL_TOKEN_WRITEONLY:
- if (!(allowed_flags & GSK_SL_POINTER_TYPE_WRITEONLY))
- {
- gsk_sl_preprocessor_error (stream, "\"writeonly\" qualifier not allowed here.");
- success = FALSE;
- }
- else if (flags & GSK_SL_POINTER_TYPE_READONLY)
+ if (list->values[GSK_SL_DECORATION_ACCESS].value & GSK_SL_DECORATION_ACCESS_READ)
{
- gsk_sl_preprocessor_error (stream, "\"readonly\" qualifier already used.");
+ gsk_sl_preprocessor_error (preproc, "\"readonly\" qualifier already used.");
success = FALSE;
}
- else if (flags & GSK_SL_POINTER_TYPE_WRITEONLY)
+ else if (list->values[GSK_SL_DECORATION_ACCESS].value & GSK_SL_DECORATION_ACCESS_WRITE)
{
- gsk_sl_preprocessor_error (stream, "\"writeonly\" qualifier specified twice.");
+ gsk_sl_preprocessor_error (preproc, "\"writeonly\" qualifier specified twice.");
success = FALSE;
}
else
{
- flags |= GSK_SL_POINTER_TYPE_WRITEONLY;
+ success &= gsk_sl_decoration_list_set (preproc, list,
+ GSK_SL_DECORATION_ACCESS,
+ GSK_SL_DECORATION_ACCESS_WRITE);
}
- gsk_sl_preprocessor_consume (stream, NULL);
+ gsk_sl_preprocessor_consume (preproc, NULL);
break;
default:
- {
- *parsed_flags = flags;
-
- return success;
- }
+ return success;
}
}
}
@@ -297,31 +242,12 @@ void
gsk_sl_pointer_type_print (const GskSlPointerType *type,
GString *string)
{
- if (type->flags & GSK_SL_POINTER_TYPE_CONST)
- g_string_append (string, "const ");
- if (type->flags & GSK_SL_POINTER_TYPE_OUT)
- {
- if (type->flags & GSK_SL_POINTER_TYPE_IN)
- g_string_append (string, "inout ");
- else
- g_string_append (string, "out ");
- }
- else if (type->flags & GSK_SL_POINTER_TYPE_IN)
- {
- g_string_append (string, "out ");
- }
- if (type->flags & GSK_SL_POINTER_TYPE_INVARIANT)
- g_string_append (string, "invariant ");
- if (type->flags & GSK_SL_POINTER_TYPE_COHERENT)
- g_string_append (string, "coherent ");
- if (type->flags & GSK_SL_POINTER_TYPE_VOLATILE)
- g_string_append (string, "volatile ");
- if (type->flags & GSK_SL_POINTER_TYPE_RESTRICT)
- g_string_append (string, "restrict ");
- if (type->flags & GSK_SL_POINTER_TYPE_READONLY)
- g_string_append (string, "readonly ");
- if (type->flags & GSK_SL_POINTER_TYPE_WRITEONLY)
- g_string_append (string, "writeonly ");
+ if (type->access == GSK_SL_DECORATION_ACCESS_READWRITE)
+ g_string_append (string, "inout ");
+ else if (type->access == GSK_SL_DECORATION_ACCESS_READ)
+ g_string_append (string, "in ");
+ else if (type->access == GSK_SL_DECORATION_ACCESS_WRITE)
+ g_string_append (string, "out ");
g_string_append (string, gsk_sl_type_get_name (type->type));
}
@@ -332,70 +258,16 @@ gsk_sl_pointer_type_get_type (const GskSlPointerType *type)
return type->type;
}
-gboolean
-gsk_sl_pointer_type_is_const (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_CONST ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_in (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_IN ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_out (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_OUT ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_invariant (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_INVARIANT ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_coherent (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_COHERENT ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_volatile (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_VOLATILE ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_restrict (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_RESTRICT ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_readonly (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_READONLY ? TRUE : FALSE;
-}
-
-gboolean
-gsk_sl_pointer_type_is_writeonly (const GskSlPointerType *type)
-{
- return type->flags & GSK_SL_POINTER_TYPE_WRITEONLY ? TRUE : FALSE;
-}
-
GskSpvStorageClass
gsk_sl_pointer_type_get_storage_class (const GskSlPointerType *type)
{
- if (type->flags & GSK_SL_POINTER_TYPE_LOCAL)
+ if (type->local)
return GSK_SPV_STORAGE_CLASS_FUNCTION;
- if (type->flags & GSK_SL_POINTER_TYPE_OUT)
+ if (type->access & GSK_SL_DECORATION_ACCESS_WRITE)
return GSK_SPV_STORAGE_CLASS_OUTPUT;
- if (type->flags & GSK_SL_POINTER_TYPE_IN)
+ if (type->access & GSK_SL_DECORATION_ACCESS_READ)
return GSK_SPV_STORAGE_CLASS_INPUT;
return GSK_SPV_STORAGE_CLASS_PRIVATE;
diff --git a/gsk/gskslpointertypeprivate.h b/gsk/gskslpointertypeprivate.h
index cb4af80..a008111 100644
--- a/gsk/gskslpointertypeprivate.h
+++ b/gsk/gskslpointertypeprivate.h
@@ -27,33 +27,39 @@
G_BEGIN_DECLS
typedef enum {
- GSK_SL_POINTER_TYPE_LOCAL = (1 << 0),
- GSK_SL_POINTER_TYPE_CONST = (1 << 1),
- GSK_SL_POINTER_TYPE_IN = (1 << 2),
- GSK_SL_POINTER_TYPE_OUT = (1 << 3),
- GSK_SL_POINTER_TYPE_INVARIANT = (1 << 4),
- GSK_SL_POINTER_TYPE_COHERENT = (1 << 5),
- GSK_SL_POINTER_TYPE_VOLATILE = (1 << 6),
- GSK_SL_POINTER_TYPE_RESTRICT = (1 << 7),
- GSK_SL_POINTER_TYPE_READONLY = (1 << 8),
- GSK_SL_POINTER_TYPE_WRITEONLY = (1 << 9)
-} GskSlPointerTypeFlags;
-
-#define GSK_SL_POINTER_TYPE_PARAMETER_QUALIFIER (GSK_SL_POINTER_TYPE_CONST \
- | GSK_SL_POINTER_TYPE_IN \
- | GSK_SL_POINTER_TYPE_OUT)
-#define GSK_SL_POINTER_TYPE_MEMORY_QUALIFIER (GSK_SL_POINTER_TYPE_COHERENT \
- | GSK_SL_POINTER_TYPE_VOLATILE \
- | GSK_SL_POINTER_TYPE_RESTRICT \
- | GSK_SL_POINTER_TYPE_READONLY \
- | GSK_SL_POINTER_TYPE_WRITEONLY)
-
-gboolean gsk_sl_type_qualifier_parse (GskSlPreprocessor *stream,
- GskSlPointerTypeFlags
allowed_flags,
- GskSlPointerTypeFlags
*parsed_flags);
+ GSK_SL_DECORATION_CONST,
+ GSK_SL_DECORATION_CALLER_ACCESS,
+ GSK_SL_DECORATION_INVARIANT,
+ GSK_SL_DECORATION_COHERENT,
+ GSK_SL_DECORATION_VOLATILE,
+ GSK_SL_DECORATION_RESTRICT,
+ GSK_SL_DECORATION_ACCESS,
+ /* add */
+ GSK_SL_N_DECORATIONS
+} GskSlDecoration;
+
+typedef enum {
+ GSK_SL_DECORATION_ACCESS_READ = (1 << 0),
+ GSK_SL_DECORATION_ACCESS_WRITE = (2 << 0),
+ GSK_SL_DECORATION_ACCESS_READWRITE = GSK_SL_DECORATION_ACCESS_READ | GSK_SL_DECORATION_ACCESS_WRITE,
+} GskSlDecorationAccess;
+
+typedef struct _GskSlDecorations GskSlDecorations;
+
+struct _GskSlDecorations
+{
+ struct {
+ gboolean set;
+ gint value;
+ } values[GSK_SL_N_DECORATIONS];
+};
+
+gboolean gsk_sl_decoration_list_parse (GskSlPreprocessor *stream,
+ GskSlDecorations *list);
GskSlPointerType * gsk_sl_pointer_type_new (GskSlType *type,
- GskSlPointerTypeFlags flags);
+ gboolean local,
+ GskSlDecorationAccess access);
GskSlPointerType * gsk_sl_pointer_type_ref (GskSlPointerType *type);
void gsk_sl_pointer_type_unref (GskSlPointerType *type);
@@ -62,15 +68,6 @@ void gsk_sl_pointer_type_print (const G
GString *string);
GskSlType * gsk_sl_pointer_type_get_type (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_const (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_in (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_out (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_invariant (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_coherent (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_volatile (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_restrict (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_readonly (const GskSlPointerType *type);
-gboolean gsk_sl_pointer_type_is_writeonly (const GskSlPointerType *type);
gboolean gsk_sl_pointer_type_equal (gconstpointer a,
gconstpointer b);
diff --git a/gsk/gskslprogram.c b/gsk/gskslprogram.c
index 2a3b670..a5b9e21 100644
--- a/gsk/gskslprogram.c
+++ b/gsk/gskslprogram.c
@@ -96,14 +96,12 @@ gsk_sl_program_parse_declaration (GskSlProgram *program,
{
GskSlType *type;
const GskSlToken *token;
- GskSlPointerTypeFlags flags;
+ GskSlDecorations decoration;
gboolean success;
char *name;
- success = gsk_sl_type_qualifier_parse (preproc,
- GSK_SL_POINTER_TYPE_PARAMETER_QUALIFIER
- | GSK_SL_POINTER_TYPE_MEMORY_QUALIFIER,
- &flags);
+ success = gsk_sl_decoration_list_parse (preproc,
+ &decoration);
type = gsk_sl_type_new_parse (preproc);
if (type == NULL)
@@ -117,7 +115,7 @@ gsk_sl_program_parse_declaration (GskSlProgram *program,
{
if (success)
{
- GskSlPointerType *ptype = gsk_sl_pointer_type_new (type, flags);
+ GskSlPointerType *ptype = gsk_sl_pointer_type_new (type, FALSE,
decoration.values[GSK_SL_DECORATION_CALLER_ACCESS].value);
GskSlVariable *variable = gsk_sl_variable_new (ptype, NULL);
gsk_sl_pointer_type_unref (ptype);
program->variables = g_slist_append (program->variables, variable);
@@ -155,7 +153,7 @@ gsk_sl_program_parse_declaration (GskSlProgram *program,
{
GskSlPointerType *pointer_type;
- pointer_type = gsk_sl_pointer_type_new (type, flags);
+ pointer_type = gsk_sl_pointer_type_new (type, FALSE,
decoration.values[GSK_SL_DECORATION_CALLER_ACCESS].value);
success &= gsk_sl_program_parse_variable (program, scope, preproc, pointer_type, name);
gsk_sl_pointer_type_unref (pointer_type);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]