diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-04-15 06:17:12 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-04-15 06:17:12 -0400 |
commit | 669fece3ac2ea75480ffe0e116225ff32ec54f5f (patch) | |
tree | b695ed150d1b957e8572d351e0342187129e51cf /compiler/ex-ast.c |
Diffstat (limited to 'compiler/ex-ast.c')
-rw-r--r-- | compiler/ex-ast.c | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/compiler/ex-ast.c b/compiler/ex-ast.c new file mode 100644 index 0000000..7d67410 --- /dev/null +++ b/compiler/ex-ast.c @@ -0,0 +1,301 @@ +#include "ex-compiler.h" + +ExSpec * +ex_spec_new (ExUsesClause *clauses, + ExDefinition *definitions) +{ + ExSpec *spec = ex_new (ExSpec, 1); + + spec->uses_clauses = clauses; + spec->definitions = definitions; + + return spec; +} + +ExUsesClause * +ex_uses_clause_new (const char *name) +{ + ExUsesClause *clause = ex_new (ExUsesClause, 1); + + clause->name = ex_strdup (name); + + return clause; +} + +ExDefinition * +ex_definition_new_namespace (ExNamespace *namespace) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_NAMESPACE; + definition->u.namespace = namespace; + + return definition; +} + +ExDefinition * +ex_definition_new_extension (ExExtension *extension) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_EXTENSION; + definition->u.extension = extension; + + return definition; +} + +ExDefinition * +ex_definition_new_type_def (ExTypeDef *type_def) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_TYPE_DEF; + definition->u.type_def = type_def; + + return definition; +} + +ExDefinition * +ex_definition_new_request (ExRequest *request) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_REQUEST; + definition->u.request = request; + + return definition; +} + +ExDefinition * +ex_definition_new_event (ExEvent *event) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_EVENT; + definition->u.event = event; + + return definition; +} + +ExDefinition * +ex_definition_new_error (ExError *error) +{ + ExDefinition *definition = ex_new (ExDefinition, 1); + + definition->type = EX_DEFINITION_ERROR; + definition->u.error = error; + + return definition; +} + +ExNamespace * +ex_namespace_new (const char *name, + ExDefinition *definitions) +{ + ExNamespace *namespace = ex_new (ExNamespace, 1); + +#if 0 + printf ("namespace: %s\n", name); +#endif + + namespace->name = ex_strdup (name); + namespace->definitions = definitions; + + return namespace; +} + +ExExtension * +ex_extension_new (const char *name, + ExDefinition *definitions) +{ + ExExtension *extension = ex_new (ExExtension, 1); + + extension->name = ex_strdup (name); + extension->definitions = definitions; + + return extension; +} + +ExTypeDef * +ex_type_def_new (const char *name, + ExType *type) +{ + ExTypeDef *type_def = ex_new (ExTypeDef, 1); + + type_def->name = ex_strdup (name); + type_def->type = type; + + return type_def; +} + +ExType * +ex_type_new_enum (ExIdentifier *identifiers) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_ENUM; + type->u._enum.identifiers = identifiers; + + return type; +} + +ExType * +ex_type_new_struct (ExField *fields) +{ + ExType *type = ex_new (ExType, 1); + +#if 0 + printf ("fields: %p\n", fields); +#endif + + type->type = EX_TYPE_STRUCT; + type->u._struct.fields = fields; + + return type; +} + +ExType * +ex_type_bits_new (unsigned long mask, + ExIdentifier *identifiers) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_BITS; + type->u.bits.mask = mask; + type->u.bits.fields = identifiers; + + return type; +} + +ExType * +ex_type_derived_bits_new (const char *name, + unsigned long mask) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_DERIVED_BITS; + type->u.derived_bits.derived_from_name = ex_strdup (name); + type->u.derived_bits.mask = mask; + + return type; +} + +ExType * +ex_type_masked_list_new (ExField *fields) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_MASKED_LIST; + type->u.masked_list.fields = fields; + + return type; +} + +ExType * +ex_type_identifier_new (const char *name, + exboolean can_be_null) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_IDENTIFIER; + type->u.identifier.name = ex_strdup (name); + type->u.identifier.can_be_null = can_be_null; + + return type; +} + +ExType * +ex_type_union_new (ExField *fields) +{ + ExType *type = ex_new (ExType, 1); + + type->type = EX_TYPE_UNION; + type->u._union.fields = fields; + + return type; +} + +ExType * +ex_type_list_new (ExType *type) +{ + ExType *new_type = ex_new (ExType, 1); + + new_type->type = EX_TYPE_LIST; + new_type->u._list.type = type; + + return type; +} + +ExType * +ex_type_basic_new (ExTypeType type) +{ + ExType *new_type = ex_new (ExType, 1); + + new_type->type = type; + + return new_type; +} + +ExIdentifier * +ex_identifier_new (const char *name) +{ + ExIdentifier *id = ex_new (ExIdentifier, 1); + + id->name = ex_strdup (name); + + return id; +} + +ExError * +ex_error_new (const char *name) +{ + ExError *error = ex_new (ExError, 1); + + error->name = ex_strdup (name); + + return error; +} + +ExField * +ex_field_new (ExType *type, + const char *name, + exboolean is_created) +{ + ExField *field = ex_new (ExField, 1); + + field->type = type; + field->name = ex_strdup (name); + field->is_created = is_created; + + return field; +} + +ExRequest * +ex_request_new (const char *name, + int opcode, + ExField *parameters, + ExField *reply, + ExIdentifier *errors) +{ + ExRequest *request = ex_new (ExRequest, 1); + + request->opcode = opcode; + request->name = ex_strdup (name); + request->parameters = parameters; + request->reply = reply; + request->errors = errors; + + return request; +} + +ExEvent * +ex_event_new (const char *name, + ExField *fields) +{ + ExEvent *event = ex_new (ExEvent, 1); + + event->name = ex_strdup (name); + event->fields = fields; + + return event; +} |