Logo Search packages:      
Sourcecode: vala-0.12 version File versions  Download package

valabinaryexpression.c

/* valabinaryexpression.c generated by valac, the Vala compiler
 * generated from valabinaryexpression.vala, do not modify */

/* valabinaryexpression.vala
 *
 * Copyright (C) 2006-2010  Jürg Billeter
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 *    Jürg Billeter <j@bitron.ch>
 */

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <valagee.h>


#define VALA_TYPE_CODE_NODE (vala_code_node_get_type ())
#define VALA_CODE_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CODE_NODE, ValaCodeNode))
#define VALA_CODE_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CODE_NODE, ValaCodeNodeClass))
#define VALA_IS_CODE_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CODE_NODE))
#define VALA_IS_CODE_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CODE_NODE))
#define VALA_CODE_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CODE_NODE, ValaCodeNodeClass))

typedef struct _ValaCodeNode ValaCodeNode;
typedef struct _ValaCodeNodeClass ValaCodeNodeClass;
typedef struct _ValaCodeNodePrivate ValaCodeNodePrivate;

#define VALA_TYPE_CODE_VISITOR (vala_code_visitor_get_type ())
#define VALA_CODE_VISITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CODE_VISITOR, ValaCodeVisitor))
#define VALA_CODE_VISITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CODE_VISITOR, ValaCodeVisitorClass))
#define VALA_IS_CODE_VISITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CODE_VISITOR))
#define VALA_IS_CODE_VISITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CODE_VISITOR))
#define VALA_CODE_VISITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CODE_VISITOR, ValaCodeVisitorClass))

typedef struct _ValaCodeVisitor ValaCodeVisitor;
typedef struct _ValaCodeVisitorClass ValaCodeVisitorClass;

#define VALA_TYPE_CODE_CONTEXT (vala_code_context_get_type ())
#define VALA_CODE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CODE_CONTEXT, ValaCodeContext))
#define VALA_CODE_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CODE_CONTEXT, ValaCodeContextClass))
#define VALA_IS_CODE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CODE_CONTEXT))
#define VALA_IS_CODE_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CODE_CONTEXT))
#define VALA_CODE_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CODE_CONTEXT, ValaCodeContextClass))

typedef struct _ValaCodeContext ValaCodeContext;
typedef struct _ValaCodeContextClass ValaCodeContextClass;

#define VALA_TYPE_CODE_GENERATOR (vala_code_generator_get_type ())
#define VALA_CODE_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CODE_GENERATOR, ValaCodeGenerator))
#define VALA_CODE_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CODE_GENERATOR, ValaCodeGeneratorClass))
#define VALA_IS_CODE_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CODE_GENERATOR))
#define VALA_IS_CODE_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CODE_GENERATOR))
#define VALA_CODE_GENERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CODE_GENERATOR, ValaCodeGeneratorClass))

typedef struct _ValaCodeGenerator ValaCodeGenerator;
typedef struct _ValaCodeGeneratorClass ValaCodeGeneratorClass;

#define VALA_TYPE_DATA_TYPE (vala_data_type_get_type ())
#define VALA_DATA_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DATA_TYPE, ValaDataType))
#define VALA_DATA_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DATA_TYPE, ValaDataTypeClass))
#define VALA_IS_DATA_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DATA_TYPE))
#define VALA_IS_DATA_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DATA_TYPE))
#define VALA_DATA_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DATA_TYPE, ValaDataTypeClass))

typedef struct _ValaDataType ValaDataType;
typedef struct _ValaDataTypeClass ValaDataTypeClass;

#define VALA_TYPE_EXPRESSION (vala_expression_get_type ())
#define VALA_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_EXPRESSION, ValaExpression))
#define VALA_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_EXPRESSION, ValaExpressionClass))
#define VALA_IS_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_EXPRESSION))
#define VALA_IS_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_EXPRESSION))
#define VALA_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_EXPRESSION, ValaExpressionClass))

typedef struct _ValaExpression ValaExpression;
typedef struct _ValaExpressionClass ValaExpressionClass;

#define VALA_TYPE_SYMBOL (vala_symbol_get_type ())
#define VALA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SYMBOL, ValaSymbol))
#define VALA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SYMBOL, ValaSymbolClass))
#define VALA_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SYMBOL))
#define VALA_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SYMBOL))
#define VALA_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SYMBOL, ValaSymbolClass))

typedef struct _ValaSymbol ValaSymbol;
typedef struct _ValaSymbolClass ValaSymbolClass;

#define VALA_TYPE_VARIABLE (vala_variable_get_type ())
#define VALA_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_VARIABLE, ValaVariable))
#define VALA_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_VARIABLE, ValaVariableClass))
#define VALA_IS_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_VARIABLE))
#define VALA_IS_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_VARIABLE))
#define VALA_VARIABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_VARIABLE, ValaVariableClass))

typedef struct _ValaVariable ValaVariable;
typedef struct _ValaVariableClass ValaVariableClass;

#define VALA_TYPE_LOCAL_VARIABLE (vala_local_variable_get_type ())
#define VALA_LOCAL_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariable))
#define VALA_LOCAL_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariableClass))
#define VALA_IS_LOCAL_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOCAL_VARIABLE))
#define VALA_IS_LOCAL_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOCAL_VARIABLE))
#define VALA_LOCAL_VARIABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariableClass))

typedef struct _ValaLocalVariable ValaLocalVariable;
typedef struct _ValaLocalVariableClass ValaLocalVariableClass;

#define VALA_TYPE_ATTRIBUTE (vala_attribute_get_type ())
#define VALA_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ATTRIBUTE, ValaAttribute))
#define VALA_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ATTRIBUTE, ValaAttributeClass))
#define VALA_IS_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ATTRIBUTE))
#define VALA_IS_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ATTRIBUTE))
#define VALA_ATTRIBUTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ATTRIBUTE, ValaAttributeClass))

typedef struct _ValaAttribute ValaAttribute;
typedef struct _ValaAttributeClass ValaAttributeClass;
typedef struct _ValaExpressionPrivate ValaExpressionPrivate;

#define VALA_TYPE_BINARY_EXPRESSION (vala_binary_expression_get_type ())
#define VALA_BINARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpression))
#define VALA_BINARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpressionClass))
#define VALA_IS_BINARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BINARY_EXPRESSION))
#define VALA_IS_BINARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BINARY_EXPRESSION))
#define VALA_BINARY_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpressionClass))

typedef struct _ValaBinaryExpression ValaBinaryExpression;
typedef struct _ValaBinaryExpressionClass ValaBinaryExpressionClass;
typedef struct _ValaBinaryExpressionPrivate ValaBinaryExpressionPrivate;

#define VALA_TYPE_BINARY_OPERATOR (vala_binary_operator_get_type ())
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))

#define VALA_TYPE_SOURCE_REFERENCE (vala_source_reference_get_type ())
#define VALA_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReference))
#define VALA_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReferenceClass))
#define VALA_IS_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SOURCE_REFERENCE))
#define VALA_IS_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SOURCE_REFERENCE))
#define VALA_SOURCE_REFERENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReferenceClass))

typedef struct _ValaSourceReference ValaSourceReference;
typedef struct _ValaSourceReferenceClass ValaSourceReferenceClass;
#define _g_free0(var) (var = (g_free (var), NULL))

#define VALA_TYPE_SEMANTIC_ANALYZER (vala_semantic_analyzer_get_type ())
#define VALA_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzer))
#define VALA_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
#define VALA_IS_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SEMANTIC_ANALYZER))
#define VALA_IS_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SEMANTIC_ANALYZER))
#define VALA_SEMANTIC_ANALYZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))

typedef struct _ValaSemanticAnalyzer ValaSemanticAnalyzer;
typedef struct _ValaSemanticAnalyzerClass ValaSemanticAnalyzerClass;

#define VALA_TYPE_BLOCK (vala_block_get_type ())
#define VALA_BLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BLOCK, ValaBlock))
#define VALA_BLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BLOCK, ValaBlockClass))
#define VALA_IS_BLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BLOCK))
#define VALA_IS_BLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BLOCK))
#define VALA_BLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BLOCK, ValaBlockClass))

typedef struct _ValaBlock ValaBlock;
typedef struct _ValaBlockClass ValaBlockClass;
typedef struct _ValaCodeVisitorPrivate ValaCodeVisitorPrivate;

#define VALA_TYPE_SOURCE_FILE (vala_source_file_get_type ())
#define VALA_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SOURCE_FILE, ValaSourceFile))
#define VALA_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SOURCE_FILE, ValaSourceFileClass))
#define VALA_IS_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SOURCE_FILE))
#define VALA_IS_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SOURCE_FILE))
#define VALA_SOURCE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SOURCE_FILE, ValaSourceFileClass))

typedef struct _ValaSourceFile ValaSourceFile;
typedef struct _ValaSourceFileClass ValaSourceFileClass;

#define VALA_TYPE_NAMESPACE (vala_namespace_get_type ())
#define VALA_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NAMESPACE, ValaNamespace))
#define VALA_NAMESPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NAMESPACE, ValaNamespaceClass))
#define VALA_IS_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NAMESPACE))
#define VALA_IS_NAMESPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NAMESPACE))
#define VALA_NAMESPACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NAMESPACE, ValaNamespaceClass))

typedef struct _ValaNamespace ValaNamespace;
typedef struct _ValaNamespaceClass ValaNamespaceClass;

#define VALA_TYPE_TYPESYMBOL (vala_typesymbol_get_type ())
#define VALA_TYPESYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))
#define VALA_TYPESYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPESYMBOL, ValaTypeSymbolClass))
#define VALA_IS_TYPESYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPESYMBOL))
#define VALA_IS_TYPESYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPESYMBOL))
#define VALA_TYPESYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPESYMBOL, ValaTypeSymbolClass))

typedef struct _ValaTypeSymbol ValaTypeSymbol;
typedef struct _ValaTypeSymbolClass ValaTypeSymbolClass;

#define VALA_TYPE_OBJECT_TYPE_SYMBOL (vala_object_type_symbol_get_type ())
#define VALA_OBJECT_TYPE_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol))
#define VALA_OBJECT_TYPE_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbolClass))
#define VALA_IS_OBJECT_TYPE_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL))
#define VALA_IS_OBJECT_TYPE_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_OBJECT_TYPE_SYMBOL))
#define VALA_OBJECT_TYPE_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbolClass))

typedef struct _ValaObjectTypeSymbol ValaObjectTypeSymbol;
typedef struct _ValaObjectTypeSymbolClass ValaObjectTypeSymbolClass;

#define VALA_TYPE_CLASS (vala_class_get_type ())
#define VALA_CLASS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CLASS, ValaClass))
#define VALA_CLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CLASS, ValaClassClass))
#define VALA_IS_CLASS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CLASS))
#define VALA_IS_CLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CLASS))
#define VALA_CLASS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CLASS, ValaClassClass))

typedef struct _ValaClass ValaClass;
typedef struct _ValaClassClass ValaClassClass;

#define VALA_TYPE_STRUCT (vala_struct_get_type ())
#define VALA_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRUCT, ValaStruct))
#define VALA_STRUCT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRUCT, ValaStructClass))
#define VALA_IS_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRUCT))
#define VALA_IS_STRUCT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRUCT))
#define VALA_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRUCT, ValaStructClass))

typedef struct _ValaStruct ValaStruct;
typedef struct _ValaStructClass ValaStructClass;

#define VALA_TYPE_INTERFACE (vala_interface_get_type ())
#define VALA_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INTERFACE, ValaInterface))
#define VALA_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INTERFACE, ValaInterfaceClass))
#define VALA_IS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INTERFACE))
#define VALA_IS_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INTERFACE))
#define VALA_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INTERFACE, ValaInterfaceClass))

typedef struct _ValaInterface ValaInterface;
typedef struct _ValaInterfaceClass ValaInterfaceClass;

#define VALA_TYPE_ENUM (vala_enum_get_type ())
#define VALA_ENUM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ENUM, ValaEnum))
#define VALA_ENUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ENUM, ValaEnumClass))
#define VALA_IS_ENUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ENUM))
#define VALA_IS_ENUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ENUM))
#define VALA_ENUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ENUM, ValaEnumClass))

typedef struct _ValaEnum ValaEnum;
typedef struct _ValaEnumClass ValaEnumClass;

#define VALA_TYPE_CONSTANT (vala_constant_get_type ())
#define VALA_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTANT, ValaConstant))
#define VALA_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTANT, ValaConstantClass))
#define VALA_IS_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTANT))
#define VALA_IS_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTANT))
#define VALA_CONSTANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTANT, ValaConstantClass))

typedef struct _ValaConstant ValaConstant;
typedef struct _ValaConstantClass ValaConstantClass;

#define VALA_TYPE_ENUM_VALUE (vala_enum_value_get_type ())
#define VALA_ENUM_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ENUM_VALUE, ValaEnumValue))
#define VALA_ENUM_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ENUM_VALUE, ValaEnumValueClass))
#define VALA_IS_ENUM_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ENUM_VALUE))
#define VALA_IS_ENUM_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ENUM_VALUE))
#define VALA_ENUM_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ENUM_VALUE, ValaEnumValueClass))

typedef struct _ValaEnumValue ValaEnumValue;
typedef struct _ValaEnumValueClass ValaEnumValueClass;

#define VALA_TYPE_ERROR_DOMAIN (vala_error_domain_get_type ())
#define VALA_ERROR_DOMAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain))
#define VALA_ERROR_DOMAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomainClass))
#define VALA_IS_ERROR_DOMAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ERROR_DOMAIN))
#define VALA_IS_ERROR_DOMAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ERROR_DOMAIN))
#define VALA_ERROR_DOMAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomainClass))

typedef struct _ValaErrorDomain ValaErrorDomain;
typedef struct _ValaErrorDomainClass ValaErrorDomainClass;

#define VALA_TYPE_ERROR_CODE (vala_error_code_get_type ())
#define VALA_ERROR_CODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ERROR_CODE, ValaErrorCode))
#define VALA_ERROR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ERROR_CODE, ValaErrorCodeClass))
#define VALA_IS_ERROR_CODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ERROR_CODE))
#define VALA_IS_ERROR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ERROR_CODE))
#define VALA_ERROR_CODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ERROR_CODE, ValaErrorCodeClass))

typedef struct _ValaErrorCode ValaErrorCode;
typedef struct _ValaErrorCodeClass ValaErrorCodeClass;

#define VALA_TYPE_DELEGATE (vala_delegate_get_type ())
#define VALA_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DELEGATE, ValaDelegate))
#define VALA_DELEGATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DELEGATE, ValaDelegateClass))
#define VALA_IS_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DELEGATE))
#define VALA_IS_DELEGATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DELEGATE))
#define VALA_DELEGATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DELEGATE, ValaDelegateClass))

typedef struct _ValaDelegate ValaDelegate;
typedef struct _ValaDelegateClass ValaDelegateClass;

#define VALA_TYPE_FIELD (vala_field_get_type ())
#define VALA_FIELD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FIELD, ValaField))
#define VALA_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FIELD, ValaFieldClass))
#define VALA_IS_FIELD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FIELD))
#define VALA_IS_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FIELD))
#define VALA_FIELD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FIELD, ValaFieldClass))

typedef struct _ValaField ValaField;
typedef struct _ValaFieldClass ValaFieldClass;

#define VALA_TYPE_SUBROUTINE (vala_subroutine_get_type ())
#define VALA_SUBROUTINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SUBROUTINE, ValaSubroutine))
#define VALA_SUBROUTINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SUBROUTINE, ValaSubroutineClass))
#define VALA_IS_SUBROUTINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SUBROUTINE))
#define VALA_IS_SUBROUTINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SUBROUTINE))
#define VALA_SUBROUTINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SUBROUTINE, ValaSubroutineClass))

typedef struct _ValaSubroutine ValaSubroutine;
typedef struct _ValaSubroutineClass ValaSubroutineClass;

#define VALA_TYPE_METHOD (vala_method_get_type ())
#define VALA_METHOD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_METHOD, ValaMethod))
#define VALA_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_METHOD, ValaMethodClass))
#define VALA_IS_METHOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_METHOD))
#define VALA_IS_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_METHOD))
#define VALA_METHOD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_METHOD, ValaMethodClass))

typedef struct _ValaMethod ValaMethod;
typedef struct _ValaMethodClass ValaMethodClass;

#define VALA_TYPE_CREATION_METHOD (vala_creation_method_get_type ())
#define VALA_CREATION_METHOD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CREATION_METHOD, ValaCreationMethod))
#define VALA_CREATION_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CREATION_METHOD, ValaCreationMethodClass))
#define VALA_IS_CREATION_METHOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CREATION_METHOD))
#define VALA_IS_CREATION_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CREATION_METHOD))
#define VALA_CREATION_METHOD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CREATION_METHOD, ValaCreationMethodClass))

typedef struct _ValaCreationMethod ValaCreationMethod;
typedef struct _ValaCreationMethodClass ValaCreationMethodClass;

#define VALA_TYPE_PARAMETER (vala_parameter_get_type ())
#define VALA_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PARAMETER, ValaParameter))
#define VALA_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PARAMETER, ValaParameterClass))
#define VALA_IS_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PARAMETER))
#define VALA_IS_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PARAMETER))
#define VALA_PARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PARAMETER, ValaParameterClass))

typedef struct _ValaParameter ValaParameter;
typedef struct _ValaParameterClass ValaParameterClass;

#define VALA_TYPE_PROPERTY (vala_property_get_type ())
#define VALA_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PROPERTY, ValaProperty))
#define VALA_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PROPERTY, ValaPropertyClass))
#define VALA_IS_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PROPERTY))
#define VALA_IS_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PROPERTY))
#define VALA_PROPERTY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PROPERTY, ValaPropertyClass))

typedef struct _ValaProperty ValaProperty;
typedef struct _ValaPropertyClass ValaPropertyClass;

#define VALA_TYPE_PROPERTY_ACCESSOR (vala_property_accessor_get_type ())
#define VALA_PROPERTY_ACCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor))
#define VALA_PROPERTY_ACCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessorClass))
#define VALA_IS_PROPERTY_ACCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PROPERTY_ACCESSOR))
#define VALA_IS_PROPERTY_ACCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PROPERTY_ACCESSOR))
#define VALA_PROPERTY_ACCESSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessorClass))

typedef struct _ValaPropertyAccessor ValaPropertyAccessor;
typedef struct _ValaPropertyAccessorClass ValaPropertyAccessorClass;

#define VALA_TYPE_SIGNAL (vala_signal_get_type ())
#define VALA_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SIGNAL, ValaSignal))
#define VALA_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SIGNAL, ValaSignalClass))
#define VALA_IS_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SIGNAL))
#define VALA_IS_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SIGNAL))
#define VALA_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SIGNAL, ValaSignalClass))

typedef struct _ValaSignal ValaSignal;
typedef struct _ValaSignalClass ValaSignalClass;

#define VALA_TYPE_CONSTRUCTOR (vala_constructor_get_type ())
#define VALA_CONSTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTRUCTOR, ValaConstructor))
#define VALA_CONSTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTRUCTOR, ValaConstructorClass))
#define VALA_IS_CONSTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTRUCTOR))
#define VALA_IS_CONSTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTRUCTOR))
#define VALA_CONSTRUCTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTRUCTOR, ValaConstructorClass))

typedef struct _ValaConstructor ValaConstructor;
typedef struct _ValaConstructorClass ValaConstructorClass;

#define VALA_TYPE_DESTRUCTOR (vala_destructor_get_type ())
#define VALA_DESTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DESTRUCTOR, ValaDestructor))
#define VALA_DESTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DESTRUCTOR, ValaDestructorClass))
#define VALA_IS_DESTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DESTRUCTOR))
#define VALA_IS_DESTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DESTRUCTOR))
#define VALA_DESTRUCTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DESTRUCTOR, ValaDestructorClass))

typedef struct _ValaDestructor ValaDestructor;
typedef struct _ValaDestructorClass ValaDestructorClass;

#define VALA_TYPE_TYPEPARAMETER (vala_typeparameter_get_type ())
#define VALA_TYPEPARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPEPARAMETER, ValaTypeParameter))
#define VALA_TYPEPARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPEPARAMETER, ValaTypeParameterClass))
#define VALA_IS_TYPEPARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPEPARAMETER))
#define VALA_IS_TYPEPARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPEPARAMETER))
#define VALA_TYPEPARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPEPARAMETER, ValaTypeParameterClass))

typedef struct _ValaTypeParameter ValaTypeParameter;
typedef struct _ValaTypeParameterClass ValaTypeParameterClass;

#define VALA_TYPE_USING_DIRECTIVE (vala_using_directive_get_type ())
#define VALA_USING_DIRECTIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirective))
#define VALA_USING_DIRECTIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirectiveClass))
#define VALA_IS_USING_DIRECTIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_USING_DIRECTIVE))
#define VALA_IS_USING_DIRECTIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_USING_DIRECTIVE))
#define VALA_USING_DIRECTIVE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirectiveClass))

typedef struct _ValaUsingDirective ValaUsingDirective;
typedef struct _ValaUsingDirectiveClass ValaUsingDirectiveClass;

#define VALA_TYPE_EMPTY_STATEMENT (vala_empty_statement_get_type ())
#define VALA_EMPTY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatement))
#define VALA_EMPTY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatementClass))
#define VALA_IS_EMPTY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_EMPTY_STATEMENT))
#define VALA_IS_EMPTY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_EMPTY_STATEMENT))
#define VALA_EMPTY_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatementClass))

typedef struct _ValaEmptyStatement ValaEmptyStatement;
typedef struct _ValaEmptyStatementClass ValaEmptyStatementClass;

#define VALA_TYPE_DECLARATION_STATEMENT (vala_declaration_statement_get_type ())
#define VALA_DECLARATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatement))
#define VALA_DECLARATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatementClass))
#define VALA_IS_DECLARATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DECLARATION_STATEMENT))
#define VALA_IS_DECLARATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DECLARATION_STATEMENT))
#define VALA_DECLARATION_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatementClass))

typedef struct _ValaDeclarationStatement ValaDeclarationStatement;
typedef struct _ValaDeclarationStatementClass ValaDeclarationStatementClass;

#define VALA_TYPE_INITIALIZER_LIST (vala_initializer_list_get_type ())
#define VALA_INITIALIZER_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INITIALIZER_LIST, ValaInitializerList))
#define VALA_INITIALIZER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INITIALIZER_LIST, ValaInitializerListClass))
#define VALA_IS_INITIALIZER_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INITIALIZER_LIST))
#define VALA_IS_INITIALIZER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INITIALIZER_LIST))
#define VALA_INITIALIZER_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INITIALIZER_LIST, ValaInitializerListClass))

typedef struct _ValaInitializerList ValaInitializerList;
typedef struct _ValaInitializerListClass ValaInitializerListClass;

#define VALA_TYPE_EXPRESSION_STATEMENT (vala_expression_statement_get_type ())
#define VALA_EXPRESSION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatement))
#define VALA_EXPRESSION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatementClass))
#define VALA_IS_EXPRESSION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_EXPRESSION_STATEMENT))
#define VALA_IS_EXPRESSION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_EXPRESSION_STATEMENT))
#define VALA_EXPRESSION_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatementClass))

typedef struct _ValaExpressionStatement ValaExpressionStatement;
typedef struct _ValaExpressionStatementClass ValaExpressionStatementClass;

#define VALA_TYPE_IF_STATEMENT (vala_if_statement_get_type ())
#define VALA_IF_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_IF_STATEMENT, ValaIfStatement))
#define VALA_IF_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_IF_STATEMENT, ValaIfStatementClass))
#define VALA_IS_IF_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_IF_STATEMENT))
#define VALA_IS_IF_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_IF_STATEMENT))
#define VALA_IF_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_IF_STATEMENT, ValaIfStatementClass))

typedef struct _ValaIfStatement ValaIfStatement;
typedef struct _ValaIfStatementClass ValaIfStatementClass;

#define VALA_TYPE_SWITCH_STATEMENT (vala_switch_statement_get_type ())
#define VALA_SWITCH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatement))
#define VALA_SWITCH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatementClass))
#define VALA_IS_SWITCH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_STATEMENT))
#define VALA_IS_SWITCH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_STATEMENT))
#define VALA_SWITCH_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatementClass))

typedef struct _ValaSwitchStatement ValaSwitchStatement;
typedef struct _ValaSwitchStatementClass ValaSwitchStatementClass;

#define VALA_TYPE_SWITCH_SECTION (vala_switch_section_get_type ())
#define VALA_SWITCH_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_SECTION, ValaSwitchSection))
#define VALA_SWITCH_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_SECTION, ValaSwitchSectionClass))
#define VALA_IS_SWITCH_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_SECTION))
#define VALA_IS_SWITCH_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_SECTION))
#define VALA_SWITCH_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_SECTION, ValaSwitchSectionClass))

typedef struct _ValaSwitchSection ValaSwitchSection;
typedef struct _ValaSwitchSectionClass ValaSwitchSectionClass;

#define VALA_TYPE_SWITCH_LABEL (vala_switch_label_get_type ())
#define VALA_SWITCH_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabel))
#define VALA_SWITCH_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabelClass))
#define VALA_IS_SWITCH_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_LABEL))
#define VALA_IS_SWITCH_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_LABEL))
#define VALA_SWITCH_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabelClass))

typedef struct _ValaSwitchLabel ValaSwitchLabel;
typedef struct _ValaSwitchLabelClass ValaSwitchLabelClass;

#define VALA_TYPE_LOOP (vala_loop_get_type ())
#define VALA_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOOP, ValaLoop))
#define VALA_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOOP, ValaLoopClass))
#define VALA_IS_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOOP))
#define VALA_IS_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOOP))
#define VALA_LOOP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOOP, ValaLoopClass))

typedef struct _ValaLoop ValaLoop;
typedef struct _ValaLoopClass ValaLoopClass;

#define VALA_TYPE_WHILE_STATEMENT (vala_while_statement_get_type ())
#define VALA_WHILE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatement))
#define VALA_WHILE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatementClass))
#define VALA_IS_WHILE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_WHILE_STATEMENT))
#define VALA_IS_WHILE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_WHILE_STATEMENT))
#define VALA_WHILE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatementClass))

typedef struct _ValaWhileStatement ValaWhileStatement;
typedef struct _ValaWhileStatementClass ValaWhileStatementClass;

#define VALA_TYPE_DO_STATEMENT (vala_do_statement_get_type ())
#define VALA_DO_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DO_STATEMENT, ValaDoStatement))
#define VALA_DO_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DO_STATEMENT, ValaDoStatementClass))
#define VALA_IS_DO_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DO_STATEMENT))
#define VALA_IS_DO_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DO_STATEMENT))
#define VALA_DO_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DO_STATEMENT, ValaDoStatementClass))

typedef struct _ValaDoStatement ValaDoStatement;
typedef struct _ValaDoStatementClass ValaDoStatementClass;

#define VALA_TYPE_FOR_STATEMENT (vala_for_statement_get_type ())
#define VALA_FOR_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FOR_STATEMENT, ValaForStatement))
#define VALA_FOR_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FOR_STATEMENT, ValaForStatementClass))
#define VALA_IS_FOR_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FOR_STATEMENT))
#define VALA_IS_FOR_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FOR_STATEMENT))
#define VALA_FOR_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FOR_STATEMENT, ValaForStatementClass))

typedef struct _ValaForStatement ValaForStatement;
typedef struct _ValaForStatementClass ValaForStatementClass;

#define VALA_TYPE_FOREACH_STATEMENT (vala_foreach_statement_get_type ())
#define VALA_FOREACH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatement))
#define VALA_FOREACH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatementClass))
#define VALA_IS_FOREACH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FOREACH_STATEMENT))
#define VALA_IS_FOREACH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FOREACH_STATEMENT))
#define VALA_FOREACH_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatementClass))

typedef struct _ValaForeachStatement ValaForeachStatement;
typedef struct _ValaForeachStatementClass ValaForeachStatementClass;

#define VALA_TYPE_BREAK_STATEMENT (vala_break_statement_get_type ())
#define VALA_BREAK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatement))
#define VALA_BREAK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatementClass))
#define VALA_IS_BREAK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BREAK_STATEMENT))
#define VALA_IS_BREAK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BREAK_STATEMENT))
#define VALA_BREAK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatementClass))

typedef struct _ValaBreakStatement ValaBreakStatement;
typedef struct _ValaBreakStatementClass ValaBreakStatementClass;

#define VALA_TYPE_CONTINUE_STATEMENT (vala_continue_statement_get_type ())
#define VALA_CONTINUE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatement))
#define VALA_CONTINUE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatementClass))
#define VALA_IS_CONTINUE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONTINUE_STATEMENT))
#define VALA_IS_CONTINUE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONTINUE_STATEMENT))
#define VALA_CONTINUE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatementClass))

typedef struct _ValaContinueStatement ValaContinueStatement;
typedef struct _ValaContinueStatementClass ValaContinueStatementClass;

#define VALA_TYPE_RETURN_STATEMENT (vala_return_statement_get_type ())
#define VALA_RETURN_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatement))
#define VALA_RETURN_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatementClass))
#define VALA_IS_RETURN_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_RETURN_STATEMENT))
#define VALA_IS_RETURN_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_RETURN_STATEMENT))
#define VALA_RETURN_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatementClass))

typedef struct _ValaReturnStatement ValaReturnStatement;
typedef struct _ValaReturnStatementClass ValaReturnStatementClass;

#define VALA_TYPE_YIELD_STATEMENT (vala_yield_statement_get_type ())
#define VALA_YIELD_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatement))
#define VALA_YIELD_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatementClass))
#define VALA_IS_YIELD_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_YIELD_STATEMENT))
#define VALA_IS_YIELD_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_YIELD_STATEMENT))
#define VALA_YIELD_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatementClass))

typedef struct _ValaYieldStatement ValaYieldStatement;
typedef struct _ValaYieldStatementClass ValaYieldStatementClass;

#define VALA_TYPE_THROW_STATEMENT (vala_throw_statement_get_type ())
#define VALA_THROW_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_THROW_STATEMENT, ValaThrowStatement))
#define VALA_THROW_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_THROW_STATEMENT, ValaThrowStatementClass))
#define VALA_IS_THROW_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_THROW_STATEMENT))
#define VALA_IS_THROW_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_THROW_STATEMENT))
#define VALA_THROW_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_THROW_STATEMENT, ValaThrowStatementClass))

typedef struct _ValaThrowStatement ValaThrowStatement;
typedef struct _ValaThrowStatementClass ValaThrowStatementClass;

#define VALA_TYPE_TRY_STATEMENT (vala_try_statement_get_type ())
#define VALA_TRY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TRY_STATEMENT, ValaTryStatement))
#define VALA_TRY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TRY_STATEMENT, ValaTryStatementClass))
#define VALA_IS_TRY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TRY_STATEMENT))
#define VALA_IS_TRY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TRY_STATEMENT))
#define VALA_TRY_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TRY_STATEMENT, ValaTryStatementClass))

typedef struct _ValaTryStatement ValaTryStatement;
typedef struct _ValaTryStatementClass ValaTryStatementClass;

#define VALA_TYPE_CATCH_CLAUSE (vala_catch_clause_get_type ())
#define VALA_CATCH_CLAUSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CATCH_CLAUSE, ValaCatchClause))
#define VALA_CATCH_CLAUSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CATCH_CLAUSE, ValaCatchClauseClass))
#define VALA_IS_CATCH_CLAUSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CATCH_CLAUSE))
#define VALA_IS_CATCH_CLAUSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CATCH_CLAUSE))
#define VALA_CATCH_CLAUSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CATCH_CLAUSE, ValaCatchClauseClass))

typedef struct _ValaCatchClause ValaCatchClause;
typedef struct _ValaCatchClauseClass ValaCatchClauseClass;

#define VALA_TYPE_LOCK_STATEMENT (vala_lock_statement_get_type ())
#define VALA_LOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOCK_STATEMENT, ValaLockStatement))
#define VALA_LOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOCK_STATEMENT, ValaLockStatementClass))
#define VALA_IS_LOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOCK_STATEMENT))
#define VALA_IS_LOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOCK_STATEMENT))
#define VALA_LOCK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOCK_STATEMENT, ValaLockStatementClass))

typedef struct _ValaLockStatement ValaLockStatement;
typedef struct _ValaLockStatementClass ValaLockStatementClass;

#define VALA_TYPE_UNLOCK_STATEMENT (vala_unlock_statement_get_type ())
#define VALA_UNLOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatement))
#define VALA_UNLOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatementClass))
#define VALA_IS_UNLOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_UNLOCK_STATEMENT))
#define VALA_IS_UNLOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_UNLOCK_STATEMENT))
#define VALA_UNLOCK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatementClass))

typedef struct _ValaUnlockStatement ValaUnlockStatement;
typedef struct _ValaUnlockStatementClass ValaUnlockStatementClass;

#define VALA_TYPE_DELETE_STATEMENT (vala_delete_statement_get_type ())
#define VALA_DELETE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatement))
#define VALA_DELETE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatementClass))
#define VALA_IS_DELETE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DELETE_STATEMENT))
#define VALA_IS_DELETE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DELETE_STATEMENT))
#define VALA_DELETE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatementClass))

typedef struct _ValaDeleteStatement ValaDeleteStatement;
typedef struct _ValaDeleteStatementClass ValaDeleteStatementClass;

#define VALA_TYPE_ARRAY_CREATION_EXPRESSION (vala_array_creation_expression_get_type ())
#define VALA_ARRAY_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpression))
#define VALA_ARRAY_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpressionClass))
#define VALA_IS_ARRAY_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION))
#define VALA_IS_ARRAY_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ARRAY_CREATION_EXPRESSION))
#define VALA_ARRAY_CREATION_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpressionClass))

typedef struct _ValaArrayCreationExpression ValaArrayCreationExpression;
typedef struct _ValaArrayCreationExpressionClass ValaArrayCreationExpressionClass;

#define VALA_TYPE_LITERAL (vala_literal_get_type ())
#define VALA_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LITERAL, ValaLiteral))
#define VALA_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LITERAL, ValaLiteralClass))
#define VALA_IS_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LITERAL))
#define VALA_IS_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LITERAL))
#define VALA_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LITERAL, ValaLiteralClass))

typedef struct _ValaLiteral ValaLiteral;
typedef struct _ValaLiteralClass ValaLiteralClass;

#define VALA_TYPE_BOOLEAN_LITERAL (vala_boolean_literal_get_type ())
#define VALA_BOOLEAN_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteral))
#define VALA_BOOLEAN_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteralClass))
#define VALA_IS_BOOLEAN_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BOOLEAN_LITERAL))
#define VALA_IS_BOOLEAN_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BOOLEAN_LITERAL))
#define VALA_BOOLEAN_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteralClass))

typedef struct _ValaBooleanLiteral ValaBooleanLiteral;
typedef struct _ValaBooleanLiteralClass ValaBooleanLiteralClass;

#define VALA_TYPE_CHARACTER_LITERAL (vala_character_literal_get_type ())
#define VALA_CHARACTER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteral))
#define VALA_CHARACTER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteralClass))
#define VALA_IS_CHARACTER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CHARACTER_LITERAL))
#define VALA_IS_CHARACTER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CHARACTER_LITERAL))
#define VALA_CHARACTER_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteralClass))

typedef struct _ValaCharacterLiteral ValaCharacterLiteral;
typedef struct _ValaCharacterLiteralClass ValaCharacterLiteralClass;

#define VALA_TYPE_INTEGER_LITERAL (vala_integer_literal_get_type ())
#define VALA_INTEGER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral))
#define VALA_INTEGER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteralClass))
#define VALA_IS_INTEGER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INTEGER_LITERAL))
#define VALA_IS_INTEGER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INTEGER_LITERAL))
#define VALA_INTEGER_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteralClass))

typedef struct _ValaIntegerLiteral ValaIntegerLiteral;
typedef struct _ValaIntegerLiteralClass ValaIntegerLiteralClass;

#define VALA_TYPE_REAL_LITERAL (vala_real_literal_get_type ())
#define VALA_REAL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REAL_LITERAL, ValaRealLiteral))
#define VALA_REAL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REAL_LITERAL, ValaRealLiteralClass))
#define VALA_IS_REAL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REAL_LITERAL))
#define VALA_IS_REAL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REAL_LITERAL))
#define VALA_REAL_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REAL_LITERAL, ValaRealLiteralClass))

typedef struct _ValaRealLiteral ValaRealLiteral;
typedef struct _ValaRealLiteralClass ValaRealLiteralClass;

#define VALA_TYPE_REGEX_LITERAL (vala_regex_literal_get_type ())
#define VALA_REGEX_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteral))
#define VALA_REGEX_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteralClass))
#define VALA_IS_REGEX_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REGEX_LITERAL))
#define VALA_IS_REGEX_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REGEX_LITERAL))
#define VALA_REGEX_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteralClass))

typedef struct _ValaRegexLiteral ValaRegexLiteral;
typedef struct _ValaRegexLiteralClass ValaRegexLiteralClass;

#define VALA_TYPE_STRING_LITERAL (vala_string_literal_get_type ())
#define VALA_STRING_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRING_LITERAL, ValaStringLiteral))
#define VALA_STRING_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRING_LITERAL, ValaStringLiteralClass))
#define VALA_IS_STRING_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRING_LITERAL))
#define VALA_IS_STRING_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRING_LITERAL))
#define VALA_STRING_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRING_LITERAL, ValaStringLiteralClass))

typedef struct _ValaStringLiteral ValaStringLiteral;
typedef struct _ValaStringLiteralClass ValaStringLiteralClass;

#define VALA_TYPE_TEMPLATE (vala_template_get_type ())
#define VALA_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TEMPLATE, ValaTemplate))
#define VALA_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TEMPLATE, ValaTemplateClass))
#define VALA_IS_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TEMPLATE))
#define VALA_IS_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TEMPLATE))
#define VALA_TEMPLATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TEMPLATE, ValaTemplateClass))

typedef struct _ValaTemplate ValaTemplate;
typedef struct _ValaTemplateClass ValaTemplateClass;

#define VALA_TYPE_LIST_LITERAL (vala_list_literal_get_type ())
#define VALA_LIST_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LIST_LITERAL, ValaListLiteral))
#define VALA_LIST_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LIST_LITERAL, ValaListLiteralClass))
#define VALA_IS_LIST_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LIST_LITERAL))
#define VALA_IS_LIST_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LIST_LITERAL))
#define VALA_LIST_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LIST_LITERAL, ValaListLiteralClass))

typedef struct _ValaListLiteral ValaListLiteral;
typedef struct _ValaListLiteralClass ValaListLiteralClass;

#define VALA_TYPE_SET_LITERAL (vala_set_literal_get_type ())
#define VALA_SET_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SET_LITERAL, ValaSetLiteral))
#define VALA_SET_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SET_LITERAL, ValaSetLiteralClass))
#define VALA_IS_SET_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SET_LITERAL))
#define VALA_IS_SET_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SET_LITERAL))
#define VALA_SET_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SET_LITERAL, ValaSetLiteralClass))

typedef struct _ValaSetLiteral ValaSetLiteral;
typedef struct _ValaSetLiteralClass ValaSetLiteralClass;

#define VALA_TYPE_MAP_LITERAL (vala_map_literal_get_type ())
#define VALA_MAP_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_LITERAL, ValaMapLiteral))
#define VALA_MAP_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_LITERAL, ValaMapLiteralClass))
#define VALA_IS_MAP_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_LITERAL))
#define VALA_IS_MAP_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_LITERAL))
#define VALA_MAP_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_LITERAL, ValaMapLiteralClass))

typedef struct _ValaMapLiteral ValaMapLiteral;
typedef struct _ValaMapLiteralClass ValaMapLiteralClass;

#define VALA_TYPE_TUPLE (vala_tuple_get_type ())
#define VALA_TUPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TUPLE, ValaTuple))
#define VALA_TUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TUPLE, ValaTupleClass))
#define VALA_IS_TUPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TUPLE))
#define VALA_IS_TUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TUPLE))
#define VALA_TUPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TUPLE, ValaTupleClass))

typedef struct _ValaTuple ValaTuple;
typedef struct _ValaTupleClass ValaTupleClass;

#define VALA_TYPE_NULL_LITERAL (vala_null_literal_get_type ())
#define VALA_NULL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NULL_LITERAL, ValaNullLiteral))
#define VALA_NULL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NULL_LITERAL, ValaNullLiteralClass))
#define VALA_IS_NULL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NULL_LITERAL))
#define VALA_IS_NULL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NULL_LITERAL))
#define VALA_NULL_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NULL_LITERAL, ValaNullLiteralClass))

typedef struct _ValaNullLiteral ValaNullLiteral;
typedef struct _ValaNullLiteralClass ValaNullLiteralClass;

#define VALA_TYPE_MEMBER_ACCESS (vala_member_access_get_type ())
#define VALA_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess))
#define VALA_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))
#define VALA_IS_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MEMBER_ACCESS))
#define VALA_IS_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MEMBER_ACCESS))
#define VALA_MEMBER_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))

typedef struct _ValaMemberAccess ValaMemberAccess;
typedef struct _ValaMemberAccessClass ValaMemberAccessClass;

#define VALA_TYPE_METHOD_CALL (vala_method_call_get_type ())
#define VALA_METHOD_CALL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_METHOD_CALL, ValaMethodCall))
#define VALA_METHOD_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_METHOD_CALL, ValaMethodCallClass))
#define VALA_IS_METHOD_CALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_METHOD_CALL))
#define VALA_IS_METHOD_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_METHOD_CALL))
#define VALA_METHOD_CALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_METHOD_CALL, ValaMethodCallClass))

typedef struct _ValaMethodCall ValaMethodCall;
typedef struct _ValaMethodCallClass ValaMethodCallClass;

#define VALA_TYPE_ELEMENT_ACCESS (vala_element_access_get_type ())
#define VALA_ELEMENT_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccess))
#define VALA_ELEMENT_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccessClass))
#define VALA_IS_ELEMENT_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ELEMENT_ACCESS))
#define VALA_IS_ELEMENT_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ELEMENT_ACCESS))
#define VALA_ELEMENT_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccessClass))

typedef struct _ValaElementAccess ValaElementAccess;
typedef struct _ValaElementAccessClass ValaElementAccessClass;

#define VALA_TYPE_SLICE_EXPRESSION (vala_slice_expression_get_type ())
#define VALA_SLICE_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpression))
#define VALA_SLICE_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpressionClass))
#define VALA_IS_SLICE_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SLICE_EXPRESSION))
#define VALA_IS_SLICE_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SLICE_EXPRESSION))
#define VALA_SLICE_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpressionClass))

typedef struct _ValaSliceExpression ValaSliceExpression;
typedef struct _ValaSliceExpressionClass ValaSliceExpressionClass;

#define VALA_TYPE_BASE_ACCESS (vala_base_access_get_type ())
#define VALA_BASE_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BASE_ACCESS, ValaBaseAccess))
#define VALA_BASE_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BASE_ACCESS, ValaBaseAccessClass))
#define VALA_IS_BASE_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BASE_ACCESS))
#define VALA_IS_BASE_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BASE_ACCESS))
#define VALA_BASE_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BASE_ACCESS, ValaBaseAccessClass))

typedef struct _ValaBaseAccess ValaBaseAccess;
typedef struct _ValaBaseAccessClass ValaBaseAccessClass;

#define VALA_TYPE_POSTFIX_EXPRESSION (vala_postfix_expression_get_type ())
#define VALA_POSTFIX_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpression))
#define VALA_POSTFIX_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpressionClass))
#define VALA_IS_POSTFIX_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_POSTFIX_EXPRESSION))
#define VALA_IS_POSTFIX_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_POSTFIX_EXPRESSION))
#define VALA_POSTFIX_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpressionClass))

typedef struct _ValaPostfixExpression ValaPostfixExpression;
typedef struct _ValaPostfixExpressionClass ValaPostfixExpressionClass;

#define VALA_TYPE_OBJECT_CREATION_EXPRESSION (vala_object_creation_expression_get_type ())
#define VALA_OBJECT_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpression))
#define VALA_OBJECT_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpressionClass))
#define VALA_IS_OBJECT_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION))
#define VALA_IS_OBJECT_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_OBJECT_CREATION_EXPRESSION))
#define VALA_OBJECT_CREATION_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpressionClass))

typedef struct _ValaObjectCreationExpression ValaObjectCreationExpression;
typedef struct _ValaObjectCreationExpressionClass ValaObjectCreationExpressionClass;

#define VALA_TYPE_SIZEOF_EXPRESSION (vala_sizeof_expression_get_type ())
#define VALA_SIZEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpression))
#define VALA_SIZEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpressionClass))
#define VALA_IS_SIZEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SIZEOF_EXPRESSION))
#define VALA_IS_SIZEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SIZEOF_EXPRESSION))
#define VALA_SIZEOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpressionClass))

typedef struct _ValaSizeofExpression ValaSizeofExpression;
typedef struct _ValaSizeofExpressionClass ValaSizeofExpressionClass;

#define VALA_TYPE_TYPEOF_EXPRESSION (vala_typeof_expression_get_type ())
#define VALA_TYPEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpression))
#define VALA_TYPEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpressionClass))
#define VALA_IS_TYPEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPEOF_EXPRESSION))
#define VALA_IS_TYPEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPEOF_EXPRESSION))
#define VALA_TYPEOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpressionClass))

typedef struct _ValaTypeofExpression ValaTypeofExpression;
typedef struct _ValaTypeofExpressionClass ValaTypeofExpressionClass;

#define VALA_TYPE_UNARY_EXPRESSION (vala_unary_expression_get_type ())
#define VALA_UNARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpression))
#define VALA_UNARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpressionClass))
#define VALA_IS_UNARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_UNARY_EXPRESSION))
#define VALA_IS_UNARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_UNARY_EXPRESSION))
#define VALA_UNARY_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpressionClass))

typedef struct _ValaUnaryExpression ValaUnaryExpression;
typedef struct _ValaUnaryExpressionClass ValaUnaryExpressionClass;

#define VALA_TYPE_CAST_EXPRESSION (vala_cast_expression_get_type ())
#define VALA_CAST_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CAST_EXPRESSION, ValaCastExpression))
#define VALA_CAST_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CAST_EXPRESSION, ValaCastExpressionClass))
#define VALA_IS_CAST_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CAST_EXPRESSION))
#define VALA_IS_CAST_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CAST_EXPRESSION))
#define VALA_CAST_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CAST_EXPRESSION, ValaCastExpressionClass))

typedef struct _ValaCastExpression ValaCastExpression;
typedef struct _ValaCastExpressionClass ValaCastExpressionClass;

#define VALA_TYPE_NAMED_ARGUMENT (vala_named_argument_get_type ())
#define VALA_NAMED_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgument))
#define VALA_NAMED_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgumentClass))
#define VALA_IS_NAMED_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NAMED_ARGUMENT))
#define VALA_IS_NAMED_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NAMED_ARGUMENT))
#define VALA_NAMED_ARGUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgumentClass))

typedef struct _ValaNamedArgument ValaNamedArgument;
typedef struct _ValaNamedArgumentClass ValaNamedArgumentClass;

#define VALA_TYPE_POINTER_INDIRECTION (vala_pointer_indirection_get_type ())
#define VALA_POINTER_INDIRECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirection))
#define VALA_POINTER_INDIRECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirectionClass))
#define VALA_IS_POINTER_INDIRECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_POINTER_INDIRECTION))
#define VALA_IS_POINTER_INDIRECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_POINTER_INDIRECTION))
#define VALA_POINTER_INDIRECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirectionClass))

typedef struct _ValaPointerIndirection ValaPointerIndirection;
typedef struct _ValaPointerIndirectionClass ValaPointerIndirectionClass;

#define VALA_TYPE_ADDRESSOF_EXPRESSION (vala_addressof_expression_get_type ())
#define VALA_ADDRESSOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpression))
#define VALA_ADDRESSOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpressionClass))
#define VALA_IS_ADDRESSOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION))
#define VALA_IS_ADDRESSOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ADDRESSOF_EXPRESSION))
#define VALA_ADDRESSOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpressionClass))

typedef struct _ValaAddressofExpression ValaAddressofExpression;
typedef struct _ValaAddressofExpressionClass ValaAddressofExpressionClass;

#define VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION (vala_reference_transfer_expression_get_type ())
#define VALA_REFERENCE_TRANSFER_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpression))
#define VALA_REFERENCE_TRANSFER_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpressionClass))
#define VALA_IS_REFERENCE_TRANSFER_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION))
#define VALA_IS_REFERENCE_TRANSFER_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION))
#define VALA_REFERENCE_TRANSFER_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpressionClass))

typedef struct _ValaReferenceTransferExpression ValaReferenceTransferExpression;
typedef struct _ValaReferenceTransferExpressionClass ValaReferenceTransferExpressionClass;

#define VALA_TYPE_TYPECHECK (vala_typecheck_get_type ())
#define VALA_TYPECHECK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPECHECK, ValaTypeCheck))
#define VALA_TYPECHECK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPECHECK, ValaTypeCheckClass))
#define VALA_IS_TYPECHECK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPECHECK))
#define VALA_IS_TYPECHECK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPECHECK))
#define VALA_TYPECHECK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPECHECK, ValaTypeCheckClass))

typedef struct _ValaTypeCheck ValaTypeCheck;
typedef struct _ValaTypeCheckClass ValaTypeCheckClass;

#define VALA_TYPE_CONDITIONAL_EXPRESSION (vala_conditional_expression_get_type ())
#define VALA_CONDITIONAL_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpression))
#define VALA_CONDITIONAL_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpressionClass))
#define VALA_IS_CONDITIONAL_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION))
#define VALA_IS_CONDITIONAL_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONDITIONAL_EXPRESSION))
#define VALA_CONDITIONAL_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpressionClass))

typedef struct _ValaConditionalExpression ValaConditionalExpression;
typedef struct _ValaConditionalExpressionClass ValaConditionalExpressionClass;

#define VALA_TYPE_LAMBDA_EXPRESSION (vala_lambda_expression_get_type ())
#define VALA_LAMBDA_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpression))
#define VALA_LAMBDA_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpressionClass))
#define VALA_IS_LAMBDA_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LAMBDA_EXPRESSION))
#define VALA_IS_LAMBDA_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LAMBDA_EXPRESSION))
#define VALA_LAMBDA_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpressionClass))

typedef struct _ValaLambdaExpression ValaLambdaExpression;
typedef struct _ValaLambdaExpressionClass ValaLambdaExpressionClass;

#define VALA_TYPE_ASSIGNMENT (vala_assignment_get_type ())
#define VALA_ASSIGNMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ASSIGNMENT, ValaAssignment))
#define VALA_ASSIGNMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ASSIGNMENT, ValaAssignmentClass))
#define VALA_IS_ASSIGNMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ASSIGNMENT))
#define VALA_IS_ASSIGNMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ASSIGNMENT))
#define VALA_ASSIGNMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ASSIGNMENT, ValaAssignmentClass))

typedef struct _ValaAssignment ValaAssignment;
typedef struct _ValaAssignmentClass ValaAssignmentClass;
typedef struct _ValaSemanticAnalyzerPrivate ValaSemanticAnalyzerPrivate;

#define VALA_TYPE_VALUE_TYPE (vala_value_type_get_type ())
#define VALA_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_VALUE_TYPE, ValaValueType))
#define VALA_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_VALUE_TYPE, ValaValueTypeClass))
#define VALA_IS_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_VALUE_TYPE))
#define VALA_IS_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_VALUE_TYPE))
#define VALA_VALUE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_VALUE_TYPE, ValaValueTypeClass))

typedef struct _ValaValueType ValaValueType;
typedef struct _ValaValueTypeClass ValaValueTypeClass;

#define VALA_TYPE_STRUCT_VALUE_TYPE (vala_struct_value_type_get_type ())
#define VALA_STRUCT_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueType))
#define VALA_STRUCT_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueTypeClass))
#define VALA_IS_STRUCT_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRUCT_VALUE_TYPE))
#define VALA_IS_STRUCT_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRUCT_VALUE_TYPE))
#define VALA_STRUCT_VALUE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueTypeClass))

typedef struct _ValaStructValueType ValaStructValueType;
typedef struct _ValaStructValueTypeClass ValaStructValueTypeClass;

#define VALA_TYPE_ASSIGNMENT_OPERATOR (vala_assignment_operator_get_type ())

#define VALA_TYPE_STATEMENT (vala_statement_get_type ())
#define VALA_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STATEMENT, ValaStatement))
#define VALA_IS_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STATEMENT))
#define VALA_STATEMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), VALA_TYPE_STATEMENT, ValaStatementIface))

typedef struct _ValaStatement ValaStatement;
typedef struct _ValaStatementIface ValaStatementIface;

#define VALA_TYPE_PROFILE (vala_profile_get_type ())

#define VALA_TYPE_REFERENCE_TYPE (vala_reference_type_get_type ())
#define VALA_REFERENCE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REFERENCE_TYPE, ValaReferenceType))
#define VALA_REFERENCE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REFERENCE_TYPE, ValaReferenceTypeClass))
#define VALA_IS_REFERENCE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REFERENCE_TYPE))
#define VALA_IS_REFERENCE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REFERENCE_TYPE))
#define VALA_REFERENCE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REFERENCE_TYPE, ValaReferenceTypeClass))

typedef struct _ValaReferenceType ValaReferenceType;
typedef struct _ValaReferenceTypeClass ValaReferenceTypeClass;

#define VALA_TYPE_ARRAY_TYPE (vala_array_type_get_type ())
#define VALA_ARRAY_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ARRAY_TYPE, ValaArrayType))
#define VALA_ARRAY_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ARRAY_TYPE, ValaArrayTypeClass))
#define VALA_IS_ARRAY_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ARRAY_TYPE))
#define VALA_IS_ARRAY_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ARRAY_TYPE))
#define VALA_ARRAY_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ARRAY_TYPE, ValaArrayTypeClass))

typedef struct _ValaArrayType ValaArrayType;
typedef struct _ValaArrayTypeClass ValaArrayTypeClass;

#define VALA_TYPE_POINTER_TYPE (vala_pointer_type_get_type ())
#define VALA_POINTER_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_POINTER_TYPE, ValaPointerType))
#define VALA_POINTER_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_POINTER_TYPE, ValaPointerTypeClass))
#define VALA_IS_POINTER_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_POINTER_TYPE))
#define VALA_IS_POINTER_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_POINTER_TYPE))
#define VALA_POINTER_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_POINTER_TYPE, ValaPointerTypeClass))

typedef struct _ValaPointerType ValaPointerType;
typedef struct _ValaPointerTypeClass ValaPointerTypeClass;

#define VALA_TYPE_VOID_TYPE (vala_void_type_get_type ())
#define VALA_VOID_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_VOID_TYPE, ValaVoidType))
#define VALA_VOID_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_VOID_TYPE, ValaVoidTypeClass))
#define VALA_IS_VOID_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_VOID_TYPE))
#define VALA_IS_VOID_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_VOID_TYPE))
#define VALA_VOID_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_VOID_TYPE, ValaVoidTypeClass))

typedef struct _ValaVoidType ValaVoidType;
typedef struct _ValaVoidTypeClass ValaVoidTypeClass;

#define VALA_TYPE_UNARY_OPERATOR (vala_unary_operator_get_type ())
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

struct _ValaCodeNode {
      GTypeInstance parent_instance;
      volatile int ref_count;
      ValaCodeNodePrivate * priv;
      GList* attributes;
};

struct _ValaCodeNodeClass {
      GTypeClass parent_class;
      void (*finalize) (ValaCodeNode *self);
      void (*accept) (ValaCodeNode* self, ValaCodeVisitor* visitor);
      void (*accept_children) (ValaCodeNode* self, ValaCodeVisitor* visitor);
      gboolean (*check) (ValaCodeNode* self, ValaCodeContext* context);
      void (*emit) (ValaCodeNode* self, ValaCodeGenerator* codegen);
      void (*replace_type) (ValaCodeNode* self, ValaDataType* old_type, ValaDataType* new_type);
      void (*replace_expression) (ValaCodeNode* self, ValaExpression* old_node, ValaExpression* new_node);
      gchar* (*to_string) (ValaCodeNode* self);
      void (*get_defined_variables) (ValaCodeNode* self, ValaCollection* collection);
      void (*get_used_variables) (ValaCodeNode* self, ValaCollection* collection);
};

struct _ValaExpression {
      ValaCodeNode parent_instance;
      ValaExpressionPrivate * priv;
};

struct _ValaExpressionClass {
      ValaCodeNodeClass parent_class;
      gboolean (*is_constant) (ValaExpression* self);
      gboolean (*is_pure) (ValaExpression* self);
      gboolean (*is_non_null) (ValaExpression* self);
};

struct _ValaBinaryExpression {
      ValaExpression parent_instance;
      ValaBinaryExpressionPrivate * priv;
      gboolean chained;
};

struct _ValaBinaryExpressionClass {
      ValaExpressionClass parent_class;
};

typedef enum  {
      VALA_BINARY_OPERATOR_NONE,
      VALA_BINARY_OPERATOR_PLUS,
      VALA_BINARY_OPERATOR_MINUS,
      VALA_BINARY_OPERATOR_MUL,
      VALA_BINARY_OPERATOR_DIV,
      VALA_BINARY_OPERATOR_MOD,
      VALA_BINARY_OPERATOR_SHIFT_LEFT,
      VALA_BINARY_OPERATOR_SHIFT_RIGHT,
      VALA_BINARY_OPERATOR_LESS_THAN,
      VALA_BINARY_OPERATOR_GREATER_THAN,
      VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL,
      VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL,
      VALA_BINARY_OPERATOR_EQUALITY,
      VALA_BINARY_OPERATOR_INEQUALITY,
      VALA_BINARY_OPERATOR_BITWISE_AND,
      VALA_BINARY_OPERATOR_BITWISE_OR,
      VALA_BINARY_OPERATOR_BITWISE_XOR,
      VALA_BINARY_OPERATOR_AND,
      VALA_BINARY_OPERATOR_OR,
      VALA_BINARY_OPERATOR_IN,
      VALA_BINARY_OPERATOR_COALESCE
} ValaBinaryOperator;

01134 struct _ValaBinaryExpressionPrivate {
      ValaBinaryOperator _operator;
      ValaExpression* _left;
      ValaExpression* _right;
};

struct _ValaCodeVisitor {
      GTypeInstance parent_instance;
      volatile int ref_count;
      ValaCodeVisitorPrivate * priv;
};

struct _ValaCodeVisitorClass {
      GTypeClass parent_class;
      void (*finalize) (ValaCodeVisitor *self);
      void (*visit_source_file) (ValaCodeVisitor* self, ValaSourceFile* source_file);
      void (*visit_namespace) (ValaCodeVisitor* self, ValaNamespace* ns);
      void (*visit_class) (ValaCodeVisitor* self, ValaClass* cl);
      void (*visit_struct) (ValaCodeVisitor* self, ValaStruct* st);
      void (*visit_interface) (ValaCodeVisitor* self, ValaInterface* iface);
      void (*visit_enum) (ValaCodeVisitor* self, ValaEnum* en);
      void (*visit_enum_value) (ValaCodeVisitor* self, ValaEnumValue* ev);
      void (*visit_error_domain) (ValaCodeVisitor* self, ValaErrorDomain* edomain);
      void (*visit_error_code) (ValaCodeVisitor* self, ValaErrorCode* ecode);
      void (*visit_delegate) (ValaCodeVisitor* self, ValaDelegate* d);
      void (*visit_constant) (ValaCodeVisitor* self, ValaConstant* c);
      void (*visit_field) (ValaCodeVisitor* self, ValaField* f);
      void (*visit_method) (ValaCodeVisitor* self, ValaMethod* m);
      void (*visit_creation_method) (ValaCodeVisitor* self, ValaCreationMethod* m);
      void (*visit_formal_parameter) (ValaCodeVisitor* self, ValaParameter* p);
      void (*visit_property) (ValaCodeVisitor* self, ValaProperty* prop);
      void (*visit_property_accessor) (ValaCodeVisitor* self, ValaPropertyAccessor* acc);
      void (*visit_signal) (ValaCodeVisitor* self, ValaSignal* sig);
      void (*visit_constructor) (ValaCodeVisitor* self, ValaConstructor* c);
      void (*visit_destructor) (ValaCodeVisitor* self, ValaDestructor* d);
      void (*visit_type_parameter) (ValaCodeVisitor* self, ValaTypeParameter* p);
      void (*visit_using_directive) (ValaCodeVisitor* self, ValaUsingDirective* ns);
      void (*visit_data_type) (ValaCodeVisitor* self, ValaDataType* type);
      void (*visit_block) (ValaCodeVisitor* self, ValaBlock* b);
      void (*visit_empty_statement) (ValaCodeVisitor* self, ValaEmptyStatement* stmt);
      void (*visit_declaration_statement) (ValaCodeVisitor* self, ValaDeclarationStatement* stmt);
      void (*visit_local_variable) (ValaCodeVisitor* self, ValaLocalVariable* local);
      void (*visit_initializer_list) (ValaCodeVisitor* self, ValaInitializerList* list);
      void (*visit_expression_statement) (ValaCodeVisitor* self, ValaExpressionStatement* stmt);
      void (*visit_if_statement) (ValaCodeVisitor* self, ValaIfStatement* stmt);
      void (*visit_switch_statement) (ValaCodeVisitor* self, ValaSwitchStatement* stmt);
      void (*visit_switch_section) (ValaCodeVisitor* self, ValaSwitchSection* section);
      void (*visit_switch_label) (ValaCodeVisitor* self, ValaSwitchLabel* label);
      void (*visit_loop) (ValaCodeVisitor* self, ValaLoop* stmt);
      void (*visit_while_statement) (ValaCodeVisitor* self, ValaWhileStatement* stmt);
      void (*visit_do_statement) (ValaCodeVisitor* self, ValaDoStatement* stmt);
      void (*visit_for_statement) (ValaCodeVisitor* self, ValaForStatement* stmt);
      void (*visit_foreach_statement) (ValaCodeVisitor* self, ValaForeachStatement* stmt);
      void (*visit_break_statement) (ValaCodeVisitor* self, ValaBreakStatement* stmt);
      void (*visit_continue_statement) (ValaCodeVisitor* self, ValaContinueStatement* stmt);
      void (*visit_return_statement) (ValaCodeVisitor* self, ValaReturnStatement* stmt);
      void (*visit_yield_statement) (ValaCodeVisitor* self, ValaYieldStatement* y);
      void (*visit_throw_statement) (ValaCodeVisitor* self, ValaThrowStatement* stmt);
      void (*visit_try_statement) (ValaCodeVisitor* self, ValaTryStatement* stmt);
      void (*visit_catch_clause) (ValaCodeVisitor* self, ValaCatchClause* clause);
      void (*visit_lock_statement) (ValaCodeVisitor* self, ValaLockStatement* stmt);
      void (*visit_unlock_statement) (ValaCodeVisitor* self, ValaUnlockStatement* stmt);
      void (*visit_delete_statement) (ValaCodeVisitor* self, ValaDeleteStatement* stmt);
      void (*visit_expression) (ValaCodeVisitor* self, ValaExpression* expr);
      void (*visit_array_creation_expression) (ValaCodeVisitor* self, ValaArrayCreationExpression* expr);
      void (*visit_boolean_literal) (ValaCodeVisitor* self, ValaBooleanLiteral* lit);
      void (*visit_character_literal) (ValaCodeVisitor* self, ValaCharacterLiteral* lit);
      void (*visit_integer_literal) (ValaCodeVisitor* self, ValaIntegerLiteral* lit);
      void (*visit_real_literal) (ValaCodeVisitor* self, ValaRealLiteral* lit);
      void (*visit_regex_literal) (ValaCodeVisitor* self, ValaRegexLiteral* lit);
      void (*visit_string_literal) (ValaCodeVisitor* self, ValaStringLiteral* lit);
      void (*visit_template) (ValaCodeVisitor* self, ValaTemplate* tmpl);
      void (*visit_list_literal) (ValaCodeVisitor* self, ValaListLiteral* lit);
      void (*visit_set_literal) (ValaCodeVisitor* self, ValaSetLiteral* lit);
      void (*visit_map_literal) (ValaCodeVisitor* self, ValaMapLiteral* lit);
      void (*visit_tuple) (ValaCodeVisitor* self, ValaTuple* tuple);
      void (*visit_null_literal) (ValaCodeVisitor* self, ValaNullLiteral* lit);
      void (*visit_member_access) (ValaCodeVisitor* self, ValaMemberAccess* expr);
      void (*visit_method_call) (ValaCodeVisitor* self, ValaMethodCall* expr);
      void (*visit_element_access) (ValaCodeVisitor* self, ValaElementAccess* expr);
      void (*visit_slice_expression) (ValaCodeVisitor* self, ValaSliceExpression* expr);
      void (*visit_base_access) (ValaCodeVisitor* self, ValaBaseAccess* expr);
      void (*visit_postfix_expression) (ValaCodeVisitor* self, ValaPostfixExpression* expr);
      void (*visit_object_creation_expression) (ValaCodeVisitor* self, ValaObjectCreationExpression* expr);
      void (*visit_sizeof_expression) (ValaCodeVisitor* self, ValaSizeofExpression* expr);
      void (*visit_typeof_expression) (ValaCodeVisitor* self, ValaTypeofExpression* expr);
      void (*visit_unary_expression) (ValaCodeVisitor* self, ValaUnaryExpression* expr);
      void (*visit_cast_expression) (ValaCodeVisitor* self, ValaCastExpression* expr);
      void (*visit_named_argument) (ValaCodeVisitor* self, ValaNamedArgument* expr);
      void (*visit_pointer_indirection) (ValaCodeVisitor* self, ValaPointerIndirection* expr);
      void (*visit_addressof_expression) (ValaCodeVisitor* self, ValaAddressofExpression* expr);
      void (*visit_reference_transfer_expression) (ValaCodeVisitor* self, ValaReferenceTransferExpression* expr);
      void (*visit_binary_expression) (ValaCodeVisitor* self, ValaBinaryExpression* expr);
      void (*visit_type_check) (ValaCodeVisitor* self, ValaTypeCheck* expr);
      void (*visit_conditional_expression) (ValaCodeVisitor* self, ValaConditionalExpression* expr);
      void (*visit_lambda_expression) (ValaCodeVisitor* self, ValaLambdaExpression* expr);
      void (*visit_assignment) (ValaCodeVisitor* self, ValaAssignment* a);
      void (*visit_end_full_expression) (ValaCodeVisitor* self, ValaExpression* expr);
};

struct _ValaSemanticAnalyzer {
      ValaCodeVisitor parent_instance;
      ValaSemanticAnalyzerPrivate * priv;
      ValaSymbol* root_symbol;
      ValaBlock* insert_block;
      ValaDataType* void_type;
      ValaDataType* bool_type;
      ValaDataType* string_type;
      ValaDataType* regex_type;
      ValaDataType* uchar_type;
      ValaDataType* short_type;
      ValaDataType* ushort_type;
      ValaDataType* int_type;
      ValaDataType* uint_type;
      ValaDataType* long_type;
      ValaDataType* ulong_type;
      ValaDataType* size_t_type;
      ValaDataType* ssize_t_type;
      ValaDataType* int8_type;
      ValaDataType* unichar_type;
      ValaDataType* double_type;
      ValaDataType* type_type;
      ValaClass* object_type;
      ValaStructValueType* gvalue_type;
      ValaDataType* glist_type;
      ValaDataType* gslist_type;
      ValaDataType* garray_type;
      ValaDataType* gvaluearray_type;
      ValaClass* gerror_type;
      ValaDataType* list_type;
      ValaDataType* tuple_type;
      ValaDataType* error_type;
      gint next_lambda_id;
      ValaList* replaced_nodes;
};

struct _ValaSemanticAnalyzerClass {
      ValaCodeVisitorClass parent_class;
};

typedef enum  {
      VALA_ASSIGNMENT_OPERATOR_NONE,
      VALA_ASSIGNMENT_OPERATOR_SIMPLE,
      VALA_ASSIGNMENT_OPERATOR_BITWISE_OR,
      VALA_ASSIGNMENT_OPERATOR_BITWISE_AND,
      VALA_ASSIGNMENT_OPERATOR_BITWISE_XOR,
      VALA_ASSIGNMENT_OPERATOR_ADD,
      VALA_ASSIGNMENT_OPERATOR_SUB,
      VALA_ASSIGNMENT_OPERATOR_MUL,
      VALA_ASSIGNMENT_OPERATOR_DIV,
      VALA_ASSIGNMENT_OPERATOR_PERCENT,
      VALA_ASSIGNMENT_OPERATOR_SHIFT_LEFT,
      VALA_ASSIGNMENT_OPERATOR_SHIFT_RIGHT
} ValaAssignmentOperator;

struct _ValaStatementIface {
      GTypeInterface parent_iface;
};

typedef enum  {
      VALA_PROFILE_POSIX,
      VALA_PROFILE_GOBJECT,
      VALA_PROFILE_DOVA
} ValaProfile;

typedef enum  {
      VALA_UNARY_OPERATOR_NONE,
      VALA_UNARY_OPERATOR_PLUS,
      VALA_UNARY_OPERATOR_MINUS,
      VALA_UNARY_OPERATOR_LOGICAL_NEGATION,
      VALA_UNARY_OPERATOR_BITWISE_COMPLEMENT,
      VALA_UNARY_OPERATOR_INCREMENT,
      VALA_UNARY_OPERATOR_DECREMENT,
      VALA_UNARY_OPERATOR_REF,
      VALA_UNARY_OPERATOR_OUT
} ValaUnaryOperator;


static gpointer vala_binary_expression_parent_class = NULL;

gpointer vala_code_node_ref (gpointer instance);
void vala_code_node_unref (gpointer instance);
GParamSpec* vala_param_spec_code_node (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_code_node (GValue* value, gpointer v_object);
void vala_value_take_code_node (GValue* value, gpointer v_object);
gpointer vala_value_get_code_node (const GValue* value);
GType vala_code_node_get_type (void) G_GNUC_CONST;
gpointer vala_code_visitor_ref (gpointer instance);
void vala_code_visitor_unref (gpointer instance);
GParamSpec* vala_param_spec_code_visitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_code_visitor (GValue* value, gpointer v_object);
void vala_value_take_code_visitor (GValue* value, gpointer v_object);
gpointer vala_value_get_code_visitor (const GValue* value);
GType vala_code_visitor_get_type (void) G_GNUC_CONST;
gpointer vala_code_context_ref (gpointer instance);
void vala_code_context_unref (gpointer instance);
GParamSpec* vala_param_spec_code_context (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_code_context (GValue* value, gpointer v_object);
void vala_value_take_code_context (GValue* value, gpointer v_object);
gpointer vala_value_get_code_context (const GValue* value);
GType vala_code_context_get_type (void) G_GNUC_CONST;
GType vala_code_generator_get_type (void) G_GNUC_CONST;
GType vala_data_type_get_type (void) G_GNUC_CONST;
GType vala_expression_get_type (void) G_GNUC_CONST;
GType vala_symbol_get_type (void) G_GNUC_CONST;
GType vala_variable_get_type (void) G_GNUC_CONST;
GType vala_local_variable_get_type (void) G_GNUC_CONST;
GType vala_attribute_get_type (void) G_GNUC_CONST;
GType vala_binary_expression_get_type (void) G_GNUC_CONST;
GType vala_binary_operator_get_type (void) G_GNUC_CONST;
#define VALA_BINARY_EXPRESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpressionPrivate))
enum  {
      VALA_BINARY_EXPRESSION_DUMMY_PROPERTY
};
gpointer vala_source_reference_ref (gpointer instance);
void vala_source_reference_unref (gpointer instance);
GParamSpec* vala_param_spec_source_reference (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_source_reference (GValue* value, gpointer v_object);
void vala_value_take_source_reference (GValue* value, gpointer v_object);
gpointer vala_value_get_source_reference (const GValue* value);
GType vala_source_reference_get_type (void) G_GNUC_CONST;
ValaBinaryExpression* vala_binary_expression_new (ValaBinaryOperator op, ValaExpression* _left, ValaExpression* _right, ValaSourceReference* source);
ValaBinaryExpression* vala_binary_expression_construct (GType object_type, ValaBinaryOperator op, ValaExpression* _left, ValaExpression* _right, ValaSourceReference* source);
ValaExpression* vala_expression_construct (GType object_type);
void vala_binary_expression_set_operator (ValaBinaryExpression* self, ValaBinaryOperator value);
void vala_binary_expression_set_left (ValaBinaryExpression* self, ValaExpression* value);
void vala_binary_expression_set_right (ValaBinaryExpression* self, ValaExpression* value);
void vala_code_node_set_source_reference (ValaCodeNode* self, ValaSourceReference* value);
static void vala_binary_expression_real_accept (ValaCodeNode* base, ValaCodeVisitor* visitor);
void vala_code_visitor_visit_binary_expression (ValaCodeVisitor* self, ValaBinaryExpression* expr);
void vala_code_visitor_visit_expression (ValaCodeVisitor* self, ValaExpression* expr);
static void vala_binary_expression_real_accept_children (ValaCodeNode* base, ValaCodeVisitor* visitor);
ValaExpression* vala_binary_expression_get_left (ValaBinaryExpression* self);
void vala_code_node_accept (ValaCodeNode* self, ValaCodeVisitor* visitor);
ValaExpression* vala_binary_expression_get_right (ValaBinaryExpression* self);
static void vala_binary_expression_real_replace_expression (ValaCodeNode* base, ValaExpression* old_node, ValaExpression* new_node);
gchar* vala_binary_expression_get_operator_string (ValaBinaryExpression* self);
static gchar* vala_binary_expression_real_to_string (ValaCodeNode* base);
gchar* vala_code_node_to_string (ValaCodeNode* self);
static gboolean vala_binary_expression_real_is_constant (ValaExpression* base);
gboolean vala_expression_is_constant (ValaExpression* self);
static gboolean vala_binary_expression_real_is_pure (ValaExpression* base);
gboolean vala_expression_is_pure (ValaExpression* self);
static gboolean vala_binary_expression_real_is_non_null (ValaExpression* base);
gboolean vala_expression_is_non_null (ValaExpression* self);
static gboolean vala_binary_expression_real_check (ValaCodeNode* base, ValaCodeContext* context);
gboolean vala_code_node_get_checked (ValaCodeNode* self);
gboolean vala_code_node_get_error (ValaCodeNode* self);
void vala_code_node_set_checked (ValaCodeNode* self, gboolean value);
GType vala_semantic_analyzer_get_type (void) G_GNUC_CONST;
ValaSemanticAnalyzer* vala_code_context_get_analyzer (ValaCodeContext* self);
ValaSymbol* vala_semantic_analyzer_get_current_symbol (ValaSemanticAnalyzer* self);
GType vala_block_get_type (void) G_GNUC_CONST;
ValaBinaryOperator vala_binary_expression_get_operator (ValaBinaryExpression* self);
gpointer vala_source_file_ref (gpointer instance);
void vala_source_file_unref (gpointer instance);
GParamSpec* vala_param_spec_source_file (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_source_file (GValue* value, gpointer v_object);
void vala_value_take_source_file (GValue* value, gpointer v_object);
gpointer vala_value_get_source_file (const GValue* value);
GType vala_source_file_get_type (void) G_GNUC_CONST;
GType vala_namespace_get_type (void) G_GNUC_CONST;
GType vala_typesymbol_get_type (void) G_GNUC_CONST;
GType vala_object_type_symbol_get_type (void) G_GNUC_CONST;
GType vala_class_get_type (void) G_GNUC_CONST;
GType vala_struct_get_type (void) G_GNUC_CONST;
GType vala_interface_get_type (void) G_GNUC_CONST;
GType vala_enum_get_type (void) G_GNUC_CONST;
GType vala_constant_get_type (void) G_GNUC_CONST;
GType vala_enum_value_get_type (void) G_GNUC_CONST;
GType vala_error_domain_get_type (void) G_GNUC_CONST;
GType vala_error_code_get_type (void) G_GNUC_CONST;
GType vala_delegate_get_type (void) G_GNUC_CONST;
GType vala_field_get_type (void) G_GNUC_CONST;
GType vala_subroutine_get_type (void) G_GNUC_CONST;
GType vala_method_get_type (void) G_GNUC_CONST;
GType vala_creation_method_get_type (void) G_GNUC_CONST;
GType vala_parameter_get_type (void) G_GNUC_CONST;
GType vala_property_get_type (void) G_GNUC_CONST;
GType vala_property_accessor_get_type (void) G_GNUC_CONST;
GType vala_signal_get_type (void) G_GNUC_CONST;
GType vala_constructor_get_type (void) G_GNUC_CONST;
GType vala_destructor_get_type (void) G_GNUC_CONST;
GType vala_typeparameter_get_type (void) G_GNUC_CONST;
GType vala_using_directive_get_type (void) G_GNUC_CONST;
GType vala_empty_statement_get_type (void) G_GNUC_CONST;
GType vala_declaration_statement_get_type (void) G_GNUC_CONST;
GType vala_initializer_list_get_type (void) G_GNUC_CONST;
GType vala_expression_statement_get_type (void) G_GNUC_CONST;
GType vala_if_statement_get_type (void) G_GNUC_CONST;
GType vala_switch_statement_get_type (void) G_GNUC_CONST;
GType vala_switch_section_get_type (void) G_GNUC_CONST;
GType vala_switch_label_get_type (void) G_GNUC_CONST;
GType vala_loop_get_type (void) G_GNUC_CONST;
GType vala_while_statement_get_type (void) G_GNUC_CONST;
GType vala_do_statement_get_type (void) G_GNUC_CONST;
GType vala_for_statement_get_type (void) G_GNUC_CONST;
GType vala_foreach_statement_get_type (void) G_GNUC_CONST;
GType vala_break_statement_get_type (void) G_GNUC_CONST;
GType vala_continue_statement_get_type (void) G_GNUC_CONST;
GType vala_return_statement_get_type (void) G_GNUC_CONST;
GType vala_yield_statement_get_type (void) G_GNUC_CONST;
GType vala_throw_statement_get_type (void) G_GNUC_CONST;
GType vala_try_statement_get_type (void) G_GNUC_CONST;
GType vala_catch_clause_get_type (void) G_GNUC_CONST;
GType vala_lock_statement_get_type (void) G_GNUC_CONST;
GType vala_unlock_statement_get_type (void) G_GNUC_CONST;
GType vala_delete_statement_get_type (void) G_GNUC_CONST;
GType vala_array_creation_expression_get_type (void) G_GNUC_CONST;
GType vala_literal_get_type (void) G_GNUC_CONST;
GType vala_boolean_literal_get_type (void) G_GNUC_CONST;
GType vala_character_literal_get_type (void) G_GNUC_CONST;
GType vala_integer_literal_get_type (void) G_GNUC_CONST;
GType vala_real_literal_get_type (void) G_GNUC_CONST;
GType vala_regex_literal_get_type (void) G_GNUC_CONST;
GType vala_string_literal_get_type (void) G_GNUC_CONST;
GType vala_template_get_type (void) G_GNUC_CONST;
GType vala_list_literal_get_type (void) G_GNUC_CONST;
GType vala_set_literal_get_type (void) G_GNUC_CONST;
GType vala_map_literal_get_type (void) G_GNUC_CONST;
GType vala_tuple_get_type (void) G_GNUC_CONST;
GType vala_null_literal_get_type (void) G_GNUC_CONST;
GType vala_member_access_get_type (void) G_GNUC_CONST;
GType vala_method_call_get_type (void) G_GNUC_CONST;
GType vala_element_access_get_type (void) G_GNUC_CONST;
GType vala_slice_expression_get_type (void) G_GNUC_CONST;
GType vala_base_access_get_type (void) G_GNUC_CONST;
GType vala_postfix_expression_get_type (void) G_GNUC_CONST;
GType vala_object_creation_expression_get_type (void) G_GNUC_CONST;
GType vala_sizeof_expression_get_type (void) G_GNUC_CONST;
GType vala_typeof_expression_get_type (void) G_GNUC_CONST;
GType vala_unary_expression_get_type (void) G_GNUC_CONST;
GType vala_cast_expression_get_type (void) G_GNUC_CONST;
GType vala_named_argument_get_type (void) G_GNUC_CONST;
GType vala_pointer_indirection_get_type (void) G_GNUC_CONST;
GType vala_addressof_expression_get_type (void) G_GNUC_CONST;
GType vala_reference_transfer_expression_get_type (void) G_GNUC_CONST;
GType vala_typecheck_get_type (void) G_GNUC_CONST;
GType vala_conditional_expression_get_type (void) G_GNUC_CONST;
GType vala_lambda_expression_get_type (void) G_GNUC_CONST;
GType vala_assignment_get_type (void) G_GNUC_CONST;
GType vala_value_type_get_type (void) G_GNUC_CONST;
GType vala_struct_value_type_get_type (void) G_GNUC_CONST;
ValaDataType* vala_data_type_copy (ValaDataType* self);
gchar* vala_code_node_get_temp_name (void);
ValaSourceReference* vala_code_node_get_source_reference (ValaCodeNode* self);
ValaLocalVariable* vala_local_variable_new (ValaDataType* variable_type, const gchar* name, ValaExpression* initializer, ValaSourceReference* source_reference);
ValaLocalVariable* vala_local_variable_construct (GType object_type, ValaDataType* variable_type, const gchar* name, ValaExpression* initializer, ValaSourceReference* source_reference);
ValaDeclarationStatement* vala_declaration_statement_new (ValaSymbol* declaration, ValaSourceReference* source_reference);
ValaDeclarationStatement* vala_declaration_statement_construct (GType object_type, ValaSymbol* declaration, ValaSourceReference* source_reference);
gboolean vala_code_node_check (ValaCodeNode* self, ValaCodeContext* context);
const gchar* vala_symbol_get_name (ValaSymbol* self);
ValaMemberAccess* vala_member_access_new_simple (const gchar* member_name, ValaSourceReference* source_reference);
ValaMemberAccess* vala_member_access_construct_simple (GType object_type, const gchar* member_name, ValaSourceReference* source_reference);
GType vala_assignment_operator_get_type (void) G_GNUC_CONST;
ValaAssignment* vala_assignment_new (ValaExpression* left, ValaExpression* right, ValaAssignmentOperator operator, ValaSourceReference* source_reference);
ValaAssignment* vala_assignment_construct (GType object_type, ValaExpression* left, ValaExpression* right, ValaAssignmentOperator operator, ValaSourceReference* source_reference);
ValaExpressionStatement* vala_expression_statement_new (ValaExpression* expression, ValaSourceReference* source_reference);
ValaExpressionStatement* vala_expression_statement_construct (GType object_type, ValaExpression* expression, ValaSourceReference* source_reference);
ValaBooleanLiteral* vala_boolean_literal_new (gboolean b, ValaSourceReference* source);
ValaBooleanLiteral* vala_boolean_literal_construct (GType object_type, gboolean b, ValaSourceReference* source);
ValaBlock* vala_block_new (ValaSourceReference* source_reference);
ValaBlock* vala_block_construct (GType object_type, ValaSourceReference* source_reference);
GType vala_statement_get_type (void) G_GNUC_CONST;
void vala_block_add_statement (ValaBlock* self, ValaStatement* stmt);
ValaIfStatement* vala_if_statement_new (ValaExpression* cond, ValaBlock* true_stmt, ValaBlock* false_stmt, ValaSourceReference* source);
ValaIfStatement* vala_if_statement_construct (GType object_type, ValaExpression* cond, ValaBlock* true_stmt, ValaBlock* false_stmt, ValaSourceReference* source);
void vala_expression_insert_statement (ValaExpression* self, ValaBlock* block, ValaStatement* stmt);
void vala_code_node_set_error (ValaCodeNode* self, gboolean value);
ValaDataType* vala_expression_get_target_type (ValaExpression* self);
void vala_expression_set_target_type (ValaExpression* self, ValaDataType* value);
ValaCodeNode* vala_code_node_get_parent_node (ValaCodeNode* self);
void vala_code_node_replace_expression (ValaCodeNode* self, ValaExpression* old_node, ValaExpression* new_node);
ValaNullLiteral* vala_null_literal_new (ValaSourceReference* source);
ValaNullLiteral* vala_null_literal_construct (GType object_type, ValaSourceReference* source);
ValaDataType* vala_expression_get_value_type (ValaExpression* self);
void vala_report_error (ValaSourceReference* source, const gchar* message);
ValaTypeSymbol* vala_data_type_get_data_type (ValaDataType* self);
GType vala_profile_get_type (void) G_GNUC_CONST;
ValaProfile vala_code_context_get_profile (ValaCodeContext* self);
ValaMemberAccess* vala_member_access_new (ValaExpression* inner, const gchar* member_name, ValaSourceReference* source_reference);
ValaMemberAccess* vala_member_access_construct (GType object_type, ValaExpression* inner, const gchar* member_name, ValaSourceReference* source_reference);
ValaMethodCall* vala_method_call_new (ValaExpression* call, ValaSourceReference* source_reference);
ValaMethodCall* vala_method_call_construct (GType object_type, ValaExpression* call, ValaSourceReference* source_reference);
void vala_method_call_add_argument (ValaMethodCall* self, ValaExpression* arg);
void vala_expression_set_value_type (ValaExpression* self, ValaDataType* value);
void vala_data_type_set_value_owned (ValaDataType* self, gboolean value);
GType vala_reference_type_get_type (void) G_GNUC_CONST;
GType vala_array_type_get_type (void) G_GNUC_CONST;
gboolean vala_data_type_compatible (ValaDataType* self, ValaDataType* target_type);
ValaDataType* vala_array_type_get_element_type (ValaArrayType* self);
GType vala_pointer_type_get_type (void) G_GNUC_CONST;
ValaDataType* vala_pointer_type_get_base_type (ValaPointerType* self);
GType vala_void_type_get_type (void) G_GNUC_CONST;
gboolean vala_struct_is_integer_type (ValaStruct* self);
ValaDataType* vala_semantic_analyzer_get_arithmetic_result_type (ValaSemanticAnalyzer* self, ValaDataType* left_type, ValaDataType* right_type);
void vala_data_type_set_nullable (ValaDataType* self, gboolean value);
gboolean vala_data_type_get_nullable (ValaDataType* self);
void vala_member_access_set_qualified (ValaMemberAccess* self, gboolean value);
GType vala_unary_operator_get_type (void) G_GNUC_CONST;
ValaUnaryExpression* vala_unary_expression_new (ValaUnaryOperator op, ValaExpression* _inner, ValaSourceReference* source);
ValaUnaryExpression* vala_unary_expression_construct (GType object_type, ValaUnaryOperator op, ValaExpression* _inner, ValaSourceReference* source);
ValaSymbol* vala_data_type_get_member (ValaDataType* self, const gchar* member_name);
ValaList* vala_method_get_parameters (ValaMethod* self);
gchar* vala_symbol_get_full_name (ValaSymbol* self);
ValaDataType* vala_method_get_return_type (ValaMethod* self);
static void vala_binary_expression_real_emit (ValaCodeNode* base, ValaCodeGenerator* codegen);
void vala_code_node_emit (ValaCodeNode* self, ValaCodeGenerator* codegen);
static void vala_binary_expression_real_get_defined_variables (ValaCodeNode* base, ValaCollection* collection);
void vala_code_node_get_defined_variables (ValaCodeNode* self, ValaCollection* collection);
static void vala_binary_expression_real_get_used_variables (ValaCodeNode* base, ValaCollection* collection);
void vala_code_node_get_used_variables (ValaCodeNode* self, ValaCollection* collection);
void vala_code_node_set_parent_node (ValaCodeNode* self, ValaCodeNode* value);
static void vala_binary_expression_finalize (ValaCodeNode* obj);


/**
 * Creates a new binary expression.
 *
 * @param op     binary operator
 * @param left   left operand
 * @param right  right operand
 * @param source reference to source code
 * @return       newly created binary expression
 */
ValaBinaryExpression* vala_binary_expression_construct (GType object_type, ValaBinaryOperator op, ValaExpression* _left, ValaExpression* _right, ValaSourceReference* source) {
      ValaBinaryExpression* self = NULL;
      g_return_val_if_fail (_left != NULL, NULL);
      g_return_val_if_fail (_right != NULL, NULL);
      self = (ValaBinaryExpression*) vala_expression_construct (object_type);
      vala_binary_expression_set_operator (self, op);
      vala_binary_expression_set_left (self, _left);
      vala_binary_expression_set_right (self, _right);
      vala_code_node_set_source_reference ((ValaCodeNode*) self, source);
      return self;
}


ValaBinaryExpression* vala_binary_expression_new (ValaBinaryOperator op, ValaExpression* _left, ValaExpression* _right, ValaSourceReference* source) {
      return vala_binary_expression_construct (VALA_TYPE_BINARY_EXPRESSION, op, _left, _right, source);
}


static void vala_binary_expression_real_accept (ValaCodeNode* base, ValaCodeVisitor* visitor) {
      ValaBinaryExpression * self;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (visitor != NULL);
      vala_code_visitor_visit_binary_expression (visitor, self);
      vala_code_visitor_visit_expression (visitor, (ValaExpression*) self);
}


static void vala_binary_expression_real_accept_children (ValaCodeNode* base, ValaCodeVisitor* visitor) {
      ValaBinaryExpression * self;
      ValaExpression* _tmp0_ = NULL;
      ValaExpression* _tmp1_ = NULL;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (visitor != NULL);
      _tmp0_ = vala_binary_expression_get_left (self);
      vala_code_node_accept ((ValaCodeNode*) _tmp0_, visitor);
      _tmp1_ = vala_binary_expression_get_right (self);
      vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
}


static void vala_binary_expression_real_replace_expression (ValaCodeNode* base, ValaExpression* old_node, ValaExpression* new_node) {
      ValaBinaryExpression * self;
      ValaExpression* _tmp0_ = NULL;
      ValaExpression* _tmp1_ = NULL;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (old_node != NULL);
      g_return_if_fail (new_node != NULL);
      _tmp0_ = vala_binary_expression_get_left (self);
      if (_tmp0_ == old_node) {
            vala_binary_expression_set_left (self, new_node);
      }
      _tmp1_ = vala_binary_expression_get_right (self);
      if (_tmp1_ == old_node) {
            vala_binary_expression_set_right (self, new_node);
      }
}


gchar* vala_binary_expression_get_operator_string (ValaBinaryExpression* self) {
      gchar* result = NULL;
      g_return_val_if_fail (self != NULL, NULL);
      switch (self->priv->_operator) {
            case VALA_BINARY_OPERATOR_PLUS:
            {
                  gchar* _tmp0_;
                  _tmp0_ = g_strdup ("+");
                  result = _tmp0_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_MINUS:
            {
                  gchar* _tmp1_;
                  _tmp1_ = g_strdup ("-");
                  result = _tmp1_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_MUL:
            {
                  gchar* _tmp2_;
                  _tmp2_ = g_strdup ("*");
                  result = _tmp2_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_DIV:
            {
                  gchar* _tmp3_;
                  _tmp3_ = g_strdup ("/");
                  result = _tmp3_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_MOD:
            {
                  gchar* _tmp4_;
                  _tmp4_ = g_strdup ("%");
                  result = _tmp4_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_SHIFT_LEFT:
            {
                  gchar* _tmp5_;
                  _tmp5_ = g_strdup ("<<");
                  result = _tmp5_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_SHIFT_RIGHT:
            {
                  gchar* _tmp6_;
                  _tmp6_ = g_strdup (">>");
                  result = _tmp6_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_LESS_THAN:
            {
                  gchar* _tmp7_;
                  _tmp7_ = g_strdup ("<");
                  result = _tmp7_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_GREATER_THAN:
            {
                  gchar* _tmp8_;
                  _tmp8_ = g_strdup (">");
                  result = _tmp8_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
            {
                  gchar* _tmp9_;
                  _tmp9_ = g_strdup ("<=");
                  result = _tmp9_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
            {
                  gchar* _tmp10_;
                  _tmp10_ = g_strdup (">=");
                  result = _tmp10_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_EQUALITY:
            {
                  gchar* _tmp11_;
                  _tmp11_ = g_strdup ("==");
                  result = _tmp11_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_INEQUALITY:
            {
                  gchar* _tmp12_;
                  _tmp12_ = g_strdup ("!=");
                  result = _tmp12_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_BITWISE_AND:
            {
                  gchar* _tmp13_;
                  _tmp13_ = g_strdup ("&");
                  result = _tmp13_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_BITWISE_OR:
            {
                  gchar* _tmp14_;
                  _tmp14_ = g_strdup ("|");
                  result = _tmp14_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_BITWISE_XOR:
            {
                  gchar* _tmp15_;
                  _tmp15_ = g_strdup ("^");
                  result = _tmp15_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_AND:
            {
                  gchar* _tmp16_;
                  _tmp16_ = g_strdup ("&&");
                  result = _tmp16_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_OR:
            {
                  gchar* _tmp17_;
                  _tmp17_ = g_strdup ("||");
                  result = _tmp17_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_IN:
            {
                  gchar* _tmp18_;
                  _tmp18_ = g_strdup ("in");
                  result = _tmp18_;
                  return result;
            }
            case VALA_BINARY_OPERATOR_COALESCE:
            {
                  gchar* _tmp19_;
                  _tmp19_ = g_strdup ("??");
                  result = _tmp19_;
                  return result;
            }
            default:
            {
                  g_assert_not_reached ();
            }
      }
}


static gchar* vala_binary_expression_real_to_string (ValaCodeNode* base) {
      ValaBinaryExpression * self;
      gchar* result = NULL;
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gchar* _tmp2_ = NULL;
      gchar* _tmp3_;
      gchar* _tmp4_;
      gchar* _tmp5_;
      gchar* _tmp6_ = NULL;
      gchar* _tmp7_;
      gchar* _tmp8_;
      gchar* _tmp9_;
      self = (ValaBinaryExpression*) base;
      _tmp0_ = vala_code_node_to_string ((ValaCodeNode*) self->priv->_left);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_binary_expression_get_operator_string (self);
      _tmp3_ = _tmp2_;
      _tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL);
      _tmp5_ = _tmp4_;
      _tmp6_ = vala_code_node_to_string ((ValaCodeNode*) self->priv->_right);
      _tmp7_ = _tmp6_;
      _tmp8_ = g_strconcat (_tmp5_, _tmp7_, NULL);
      _tmp9_ = _tmp8_;
      _g_free0 (_tmp7_);
      _g_free0 (_tmp5_);
      _g_free0 (_tmp3_);
      _g_free0 (_tmp1_);
      result = _tmp9_;
      return result;
}


static gboolean vala_binary_expression_real_is_constant (ValaExpression* base) {
      ValaBinaryExpression * self;
      gboolean result = FALSE;
      gboolean _tmp0_ = FALSE;
      ValaExpression* _tmp1_ = NULL;
      gboolean _tmp2_;
      self = (ValaBinaryExpression*) base;
      _tmp1_ = vala_binary_expression_get_left (self);
      _tmp2_ = vala_expression_is_constant (_tmp1_);
      if (_tmp2_) {
            ValaExpression* _tmp3_ = NULL;
            gboolean _tmp4_;
            _tmp3_ = vala_binary_expression_get_right (self);
            _tmp4_ = vala_expression_is_constant (_tmp3_);
            _tmp0_ = _tmp4_;
      } else {
            _tmp0_ = FALSE;
      }
      result = _tmp0_;
      return result;
}


static gboolean vala_binary_expression_real_is_pure (ValaExpression* base) {
      ValaBinaryExpression * self;
      gboolean result = FALSE;
      gboolean _tmp0_ = FALSE;
      ValaExpression* _tmp1_ = NULL;
      gboolean _tmp2_;
      self = (ValaBinaryExpression*) base;
      _tmp1_ = vala_binary_expression_get_left (self);
      _tmp2_ = vala_expression_is_pure (_tmp1_);
      if (_tmp2_) {
            ValaExpression* _tmp3_ = NULL;
            gboolean _tmp4_;
            _tmp3_ = vala_binary_expression_get_right (self);
            _tmp4_ = vala_expression_is_pure (_tmp3_);
            _tmp0_ = _tmp4_;
      } else {
            _tmp0_ = FALSE;
      }
      result = _tmp0_;
      return result;
}


static gboolean vala_binary_expression_real_is_non_null (ValaExpression* base) {
      ValaBinaryExpression * self;
      gboolean result = FALSE;
      gboolean _tmp0_ = FALSE;
      ValaExpression* _tmp1_ = NULL;
      gboolean _tmp2_;
      self = (ValaBinaryExpression*) base;
      _tmp1_ = vala_binary_expression_get_left (self);
      _tmp2_ = vala_expression_is_non_null (_tmp1_);
      if (_tmp2_) {
            ValaExpression* _tmp3_ = NULL;
            gboolean _tmp4_;
            _tmp3_ = vala_binary_expression_get_right (self);
            _tmp4_ = vala_expression_is_non_null (_tmp3_);
            _tmp0_ = _tmp4_;
      } else {
            _tmp0_ = FALSE;
      }
      result = _tmp0_;
      return result;
}


static gpointer _vala_code_node_ref0 (gpointer self) {
      return self ? vala_code_node_ref (self) : NULL;
}


static gboolean vala_binary_expression_real_check (ValaCodeNode* base, ValaCodeContext* context) {
      ValaBinaryExpression * self;
      gboolean result = FALSE;
      gboolean _tmp0_;
      gboolean _tmp2_ = FALSE;
      ValaSemanticAnalyzer* _tmp3_ = NULL;
      ValaSymbol* _tmp4_ = NULL;
      gboolean _tmp107_ = FALSE;
      ValaExpression* _tmp108_ = NULL;
      gboolean _tmp109_;
      ValaExpression* _tmp112_ = NULL;
      ValaDataType* _tmp113_ = NULL;
      gboolean _tmp116_ = FALSE;
      gboolean _tmp121_ = FALSE;
      ValaExpression* _tmp122_ = NULL;
      ValaDataType* _tmp123_ = NULL;
      ValaTypeSymbol* _tmp124_ = NULL;
      ValaSemanticAnalyzer* _tmp125_ = NULL;
      ValaTypeSymbol* _tmp126_ = NULL;
      gboolean _tmp492_;
      self = (ValaBinaryExpression*) base;
      g_return_val_if_fail (context != NULL, FALSE);
      _tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
      if (_tmp0_) {
            gboolean _tmp1_;
            _tmp1_ = vala_code_node_get_error ((ValaCodeNode*) self);
            result = !_tmp1_;
            return result;
      }
      vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
      _tmp3_ = vala_code_context_get_analyzer (context);
      _tmp4_ = vala_semantic_analyzer_get_current_symbol (_tmp3_);
      if (VALA_IS_BLOCK (_tmp4_)) {
            gboolean _tmp5_ = FALSE;
            if (self->priv->_operator == VALA_BINARY_OPERATOR_AND) {
                  _tmp5_ = TRUE;
            } else {
                  _tmp5_ = self->priv->_operator == VALA_BINARY_OPERATOR_OR;
            }
            _tmp2_ = _tmp5_;
      } else {
            _tmp2_ = FALSE;
      }
      if (_tmp2_) {
            ValaSemanticAnalyzer* _tmp6_ = NULL;
            ValaDataType* _tmp7_ = NULL;
            ValaDataType* _tmp8_;
            gchar* _tmp9_ = NULL;
            gchar* _tmp10_;
            ValaSourceReference* _tmp11_ = NULL;
            ValaLocalVariable* _tmp12_ = NULL;
            ValaLocalVariable* _tmp13_;
            ValaLocalVariable* local;
            ValaSourceReference* _tmp14_ = NULL;
            ValaDeclarationStatement* _tmp15_ = NULL;
            ValaDeclarationStatement* decl;
            const gchar* _tmp16_ = NULL;
            ValaExpression* _tmp17_ = NULL;
            ValaSourceReference* _tmp18_ = NULL;
            ValaMemberAccess* _tmp19_ = NULL;
            ValaMemberAccess* _tmp20_;
            ValaExpression* _tmp21_ = NULL;
            ValaExpression* _tmp22_ = NULL;
            ValaSourceReference* _tmp23_ = NULL;
            ValaAssignment* _tmp24_ = NULL;
            ValaAssignment* _tmp25_;
            ValaExpression* _tmp26_ = NULL;
            ValaSourceReference* _tmp27_ = NULL;
            ValaExpressionStatement* _tmp28_ = NULL;
            ValaExpressionStatement* _tmp29_;
            ValaExpressionStatement* right_stmt;
            const gchar* _tmp30_ = NULL;
            ValaExpression* _tmp31_ = NULL;
            ValaSourceReference* _tmp32_ = NULL;
            ValaMemberAccess* _tmp33_ = NULL;
            ValaMemberAccess* _tmp34_;
            ValaExpression* _tmp35_ = NULL;
            ValaSourceReference* _tmp36_ = NULL;
            ValaBooleanLiteral* _tmp37_ = NULL;
            ValaBooleanLiteral* _tmp38_;
            ValaExpression* _tmp39_ = NULL;
            ValaSourceReference* _tmp40_ = NULL;
            ValaAssignment* _tmp41_ = NULL;
            ValaAssignment* _tmp42_;
            ValaExpression* _tmp43_ = NULL;
            ValaSourceReference* _tmp44_ = NULL;
            ValaExpressionStatement* _tmp45_ = NULL;
            ValaExpressionStatement* _tmp46_;
            ValaExpressionStatement* stmt;
            ValaSourceReference* _tmp47_ = NULL;
            ValaBlock* _tmp48_ = NULL;
            ValaBlock* true_block;
            ValaSourceReference* _tmp49_ = NULL;
            ValaBlock* _tmp50_ = NULL;
            ValaBlock* false_block;
            ValaExpression* _tmp51_ = NULL;
            ValaSourceReference* _tmp52_ = NULL;
            ValaIfStatement* _tmp53_ = NULL;
            ValaIfStatement* if_stmt;
            ValaSemanticAnalyzer* _tmp54_ = NULL;
            ValaSemanticAnalyzer* _tmp55_ = NULL;
            gboolean _tmp56_;
            const gchar* _tmp57_ = NULL;
            ValaSourceReference* _tmp58_ = NULL;
            ValaMemberAccess* _tmp59_ = NULL;
            ValaMemberAccess* ma;
            ValaDataType* _tmp60_ = NULL;
            ValaCodeNode* _tmp61_ = NULL;
            _tmp6_ = vala_code_context_get_analyzer (context);
            _tmp7_ = vala_data_type_copy (_tmp6_->bool_type);
            _tmp8_ = _tmp7_;
            _tmp9_ = vala_code_node_get_temp_name ();
            _tmp10_ = _tmp9_;
            _tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp12_ = vala_local_variable_new (_tmp8_, _tmp10_, NULL, _tmp11_);
            _tmp13_ = _tmp12_;
            _g_free0 (_tmp10_);
            _vala_code_node_unref0 (_tmp8_);
            local = _tmp13_;
            _tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp15_ = vala_declaration_statement_new ((ValaSymbol*) local, _tmp14_);
            decl = _tmp15_;
            vala_code_node_check ((ValaCodeNode*) decl, context);
            _tmp16_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp17_ = vala_binary_expression_get_right (self);
            _tmp18_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp17_);
            _tmp19_ = vala_member_access_new_simple (_tmp16_, _tmp18_);
            _tmp20_ = _tmp19_;
            _tmp21_ = vala_binary_expression_get_right (self);
            _tmp22_ = vala_binary_expression_get_right (self);
            _tmp23_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp22_);
            _tmp24_ = vala_assignment_new ((ValaExpression*) _tmp20_, _tmp21_, VALA_ASSIGNMENT_OPERATOR_SIMPLE, _tmp23_);
            _tmp25_ = _tmp24_;
            _tmp26_ = vala_binary_expression_get_right (self);
            _tmp27_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp26_);
            _tmp28_ = vala_expression_statement_new ((ValaExpression*) _tmp25_, _tmp27_);
            _tmp29_ = _tmp28_;
            _vala_code_node_unref0 (_tmp25_);
            _vala_code_node_unref0 (_tmp20_);
            right_stmt = _tmp29_;
            _tmp30_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp31_ = vala_binary_expression_get_left (self);
            _tmp32_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp31_);
            _tmp33_ = vala_member_access_new_simple (_tmp30_, _tmp32_);
            _tmp34_ = _tmp33_;
            _tmp35_ = vala_binary_expression_get_left (self);
            _tmp36_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp35_);
            _tmp37_ = vala_boolean_literal_new (self->priv->_operator == VALA_BINARY_OPERATOR_OR, _tmp36_);
            _tmp38_ = _tmp37_;
            _tmp39_ = vala_binary_expression_get_left (self);
            _tmp40_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp39_);
            _tmp41_ = vala_assignment_new ((ValaExpression*) _tmp34_, (ValaExpression*) _tmp38_, VALA_ASSIGNMENT_OPERATOR_SIMPLE, _tmp40_);
            _tmp42_ = _tmp41_;
            _tmp43_ = vala_binary_expression_get_left (self);
            _tmp44_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp43_);
            _tmp45_ = vala_expression_statement_new ((ValaExpression*) _tmp42_, _tmp44_);
            _tmp46_ = _tmp45_;
            _vala_code_node_unref0 (_tmp42_);
            _vala_code_node_unref0 (_tmp38_);
            _vala_code_node_unref0 (_tmp34_);
            stmt = _tmp46_;
            _tmp47_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp48_ = vala_block_new (_tmp47_);
            true_block = _tmp48_;
            _tmp49_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp50_ = vala_block_new (_tmp49_);
            false_block = _tmp50_;
            if (self->priv->_operator == VALA_BINARY_OPERATOR_AND) {
                  vala_block_add_statement (true_block, (ValaStatement*) right_stmt);
                  vala_block_add_statement (false_block, (ValaStatement*) stmt);
            } else {
                  vala_block_add_statement (true_block, (ValaStatement*) stmt);
                  vala_block_add_statement (false_block, (ValaStatement*) right_stmt);
            }
            _tmp51_ = vala_binary_expression_get_left (self);
            _tmp52_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp53_ = vala_if_statement_new (_tmp51_, true_block, false_block, _tmp52_);
            if_stmt = _tmp53_;
            _tmp54_ = vala_code_context_get_analyzer (context);
            vala_expression_insert_statement ((ValaExpression*) self, _tmp54_->insert_block, (ValaStatement*) decl);
            _tmp55_ = vala_code_context_get_analyzer (context);
            vala_expression_insert_statement ((ValaExpression*) self, _tmp55_->insert_block, (ValaStatement*) if_stmt);
            _tmp56_ = vala_code_node_check ((ValaCodeNode*) if_stmt, context);
            if (!_tmp56_) {
                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                  result = FALSE;
                  _vala_code_node_unref0 (if_stmt);
                  _vala_code_node_unref0 (false_block);
                  _vala_code_node_unref0 (true_block);
                  _vala_code_node_unref0 (stmt);
                  _vala_code_node_unref0 (right_stmt);
                  _vala_code_node_unref0 (decl);
                  _vala_code_node_unref0 (local);
                  return result;
            }
            _tmp57_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp58_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp59_ = vala_member_access_new_simple (_tmp57_, _tmp58_);
            ma = _tmp59_;
            _tmp60_ = vala_expression_get_target_type ((ValaExpression*) self);
            vala_expression_set_target_type ((ValaExpression*) ma, _tmp60_);
            vala_code_node_check ((ValaCodeNode*) ma, context);
            _tmp61_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
            vala_code_node_replace_expression (_tmp61_, (ValaExpression*) self, (ValaExpression*) ma);
            result = TRUE;
            _vala_code_node_unref0 (ma);
            _vala_code_node_unref0 (if_stmt);
            _vala_code_node_unref0 (false_block);
            _vala_code_node_unref0 (true_block);
            _vala_code_node_unref0 (stmt);
            _vala_code_node_unref0 (right_stmt);
            _vala_code_node_unref0 (decl);
            _vala_code_node_unref0 (local);
            return result;
      }
      if (self->priv->_operator == VALA_BINARY_OPERATOR_COALESCE) {
            gchar* _tmp62_ = NULL;
            gchar* _tmp63_;
            ValaExpression* _tmp64_ = NULL;
            ValaSourceReference* _tmp65_ = NULL;
            ValaLocalVariable* _tmp66_ = NULL;
            ValaLocalVariable* _tmp67_;
            ValaLocalVariable* local;
            ValaSourceReference* _tmp68_ = NULL;
            ValaDeclarationStatement* _tmp69_ = NULL;
            ValaDeclarationStatement* decl;
            const gchar* _tmp70_ = NULL;
            ValaExpression* _tmp71_ = NULL;
            ValaSourceReference* _tmp72_ = NULL;
            ValaMemberAccess* _tmp73_ = NULL;
            ValaMemberAccess* _tmp74_;
            ValaExpression* _tmp75_ = NULL;
            ValaExpression* _tmp76_ = NULL;
            ValaSourceReference* _tmp77_ = NULL;
            ValaAssignment* _tmp78_ = NULL;
            ValaAssignment* _tmp79_;
            ValaExpression* _tmp80_ = NULL;
            ValaSourceReference* _tmp81_ = NULL;
            ValaExpressionStatement* _tmp82_ = NULL;
            ValaExpressionStatement* _tmp83_;
            ValaExpressionStatement* right_stmt;
            ValaSourceReference* _tmp84_ = NULL;
            ValaBlock* _tmp85_ = NULL;
            ValaBlock* true_block;
            const gchar* _tmp86_ = NULL;
            ValaExpression* _tmp87_ = NULL;
            ValaSourceReference* _tmp88_ = NULL;
            ValaMemberAccess* _tmp89_ = NULL;
            ValaMemberAccess* _tmp90_;
            ValaSourceReference* _tmp91_ = NULL;
            ValaNullLiteral* _tmp92_ = NULL;
            ValaNullLiteral* _tmp93_;
            ValaSourceReference* _tmp94_ = NULL;
            ValaBinaryExpression* _tmp95_ = NULL;
            ValaBinaryExpression* _tmp96_;
            ValaBinaryExpression* cond;
            ValaSourceReference* _tmp97_ = NULL;
            ValaIfStatement* _tmp98_ = NULL;
            ValaIfStatement* if_stmt;
            ValaSemanticAnalyzer* _tmp99_ = NULL;
            ValaSemanticAnalyzer* _tmp100_ = NULL;
            gboolean _tmp101_;
            const gchar* _tmp102_ = NULL;
            ValaSourceReference* _tmp103_ = NULL;
            ValaMemberAccess* _tmp104_ = NULL;
            ValaMemberAccess* ma;
            ValaDataType* _tmp105_ = NULL;
            ValaCodeNode* _tmp106_ = NULL;
            _tmp62_ = vala_code_node_get_temp_name ();
            _tmp63_ = _tmp62_;
            _tmp64_ = vala_binary_expression_get_left (self);
            _tmp65_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp66_ = vala_local_variable_new (NULL, _tmp63_, _tmp64_, _tmp65_);
            _tmp67_ = _tmp66_;
            _g_free0 (_tmp63_);
            local = _tmp67_;
            _tmp68_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp69_ = vala_declaration_statement_new ((ValaSymbol*) local, _tmp68_);
            decl = _tmp69_;
            vala_code_node_check ((ValaCodeNode*) decl, context);
            _tmp70_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp71_ = vala_binary_expression_get_right (self);
            _tmp72_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp71_);
            _tmp73_ = vala_member_access_new_simple (_tmp70_, _tmp72_);
            _tmp74_ = _tmp73_;
            _tmp75_ = vala_binary_expression_get_right (self);
            _tmp76_ = vala_binary_expression_get_right (self);
            _tmp77_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp76_);
            _tmp78_ = vala_assignment_new ((ValaExpression*) _tmp74_, _tmp75_, VALA_ASSIGNMENT_OPERATOR_SIMPLE, _tmp77_);
            _tmp79_ = _tmp78_;
            _tmp80_ = vala_binary_expression_get_right (self);
            _tmp81_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp80_);
            _tmp82_ = vala_expression_statement_new ((ValaExpression*) _tmp79_, _tmp81_);
            _tmp83_ = _tmp82_;
            _vala_code_node_unref0 (_tmp79_);
            _vala_code_node_unref0 (_tmp74_);
            right_stmt = _tmp83_;
            _tmp84_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp85_ = vala_block_new (_tmp84_);
            true_block = _tmp85_;
            vala_block_add_statement (true_block, (ValaStatement*) right_stmt);
            _tmp86_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp87_ = vala_binary_expression_get_left (self);
            _tmp88_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp87_);
            _tmp89_ = vala_member_access_new_simple (_tmp86_, _tmp88_);
            _tmp90_ = _tmp89_;
            _tmp91_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp92_ = vala_null_literal_new (_tmp91_);
            _tmp93_ = _tmp92_;
            _tmp94_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp95_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_EQUALITY, (ValaExpression*) _tmp90_, (ValaExpression*) _tmp93_, _tmp94_);
            _tmp96_ = _tmp95_;
            _vala_code_node_unref0 (_tmp93_);
            _vala_code_node_unref0 (_tmp90_);
            cond = _tmp96_;
            _tmp97_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp98_ = vala_if_statement_new ((ValaExpression*) cond, true_block, NULL, _tmp97_);
            if_stmt = _tmp98_;
            _tmp99_ = vala_code_context_get_analyzer (context);
            vala_expression_insert_statement ((ValaExpression*) self, _tmp99_->insert_block, (ValaStatement*) decl);
            _tmp100_ = vala_code_context_get_analyzer (context);
            vala_expression_insert_statement ((ValaExpression*) self, _tmp100_->insert_block, (ValaStatement*) if_stmt);
            _tmp101_ = vala_code_node_check ((ValaCodeNode*) if_stmt, context);
            if (!_tmp101_) {
                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                  result = FALSE;
                  _vala_code_node_unref0 (if_stmt);
                  _vala_code_node_unref0 (cond);
                  _vala_code_node_unref0 (true_block);
                  _vala_code_node_unref0 (right_stmt);
                  _vala_code_node_unref0 (decl);
                  _vala_code_node_unref0 (local);
                  return result;
            }
            _tmp102_ = vala_symbol_get_name ((ValaSymbol*) local);
            _tmp103_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
            _tmp104_ = vala_member_access_new_simple (_tmp102_, _tmp103_);
            ma = _tmp104_;
            _tmp105_ = vala_expression_get_target_type ((ValaExpression*) self);
            vala_expression_set_target_type ((ValaExpression*) ma, _tmp105_);
            vala_code_node_check ((ValaCodeNode*) ma, context);
            _tmp106_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
            vala_code_node_replace_expression (_tmp106_, (ValaExpression*) self, (ValaExpression*) ma);
            result = TRUE;
            _vala_code_node_unref0 (ma);
            _vala_code_node_unref0 (if_stmt);
            _vala_code_node_unref0 (cond);
            _vala_code_node_unref0 (true_block);
            _vala_code_node_unref0 (right_stmt);
            _vala_code_node_unref0 (decl);
            _vala_code_node_unref0 (local);
            return result;
      }
      _tmp108_ = vala_binary_expression_get_left (self);
      _tmp109_ = vala_code_node_check ((ValaCodeNode*) _tmp108_, context);
      if (!_tmp109_) {
            _tmp107_ = TRUE;
      } else {
            ValaExpression* _tmp110_ = NULL;
            gboolean _tmp111_;
            _tmp110_ = vala_binary_expression_get_right (self);
            _tmp111_ = vala_code_node_check ((ValaCodeNode*) _tmp110_, context);
            _tmp107_ = !_tmp111_;
      }
      if (_tmp107_) {
            vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
            result = FALSE;
            return result;
      }
      _tmp112_ = vala_binary_expression_get_left (self);
      _tmp113_ = vala_expression_get_value_type (_tmp112_);
      if (_tmp113_ == NULL) {
            ValaExpression* _tmp114_ = NULL;
            ValaSourceReference* _tmp115_ = NULL;
            _tmp114_ = vala_binary_expression_get_left (self);
            _tmp115_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp114_);
            vala_report_error (_tmp115_, "invalid left operand");
            vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
            result = FALSE;
            return result;
      }
      if (self->priv->_operator != VALA_BINARY_OPERATOR_IN) {
            ValaExpression* _tmp117_ = NULL;
            ValaDataType* _tmp118_ = NULL;
            _tmp117_ = vala_binary_expression_get_right (self);
            _tmp118_ = vala_expression_get_value_type (_tmp117_);
            _tmp116_ = _tmp118_ == NULL;
      } else {
            _tmp116_ = FALSE;
      }
      if (_tmp116_) {
            ValaExpression* _tmp119_ = NULL;
            ValaSourceReference* _tmp120_ = NULL;
            _tmp119_ = vala_binary_expression_get_right (self);
            _tmp120_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp119_);
            vala_report_error (_tmp120_, "invalid right operand");
            vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
            result = FALSE;
            return result;
      }
      _tmp122_ = vala_binary_expression_get_left (self);
      _tmp123_ = vala_expression_get_value_type (_tmp122_);
      _tmp124_ = vala_data_type_get_data_type (_tmp123_);
      _tmp125_ = vala_code_context_get_analyzer (context);
      _tmp126_ = vala_data_type_get_data_type (_tmp125_->string_type);
      if (_tmp124_ == _tmp126_) {
            _tmp121_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
      } else {
            _tmp121_ = FALSE;
      }
      if (_tmp121_) {
            ValaProfile _tmp127_;
            gboolean _tmp139_ = FALSE;
            ValaExpression* _tmp140_ = NULL;
            ValaDataType* _tmp141_ = NULL;
            ValaSemanticAnalyzer* _tmp148_ = NULL;
            ValaDataType* _tmp149_ = NULL;
            ValaDataType* _tmp150_;
            gboolean _tmp151_ = FALSE;
            ValaExpression* _tmp152_ = NULL;
            gboolean _tmp153_;
            _tmp127_ = vala_code_context_get_profile (context);
            if (_tmp127_ == VALA_PROFILE_DOVA) {
                  ValaExpression* _tmp128_ = NULL;
                  ValaSourceReference* _tmp129_ = NULL;
                  ValaMemberAccess* _tmp130_ = NULL;
                  ValaMemberAccess* _tmp131_;
                  ValaSourceReference* _tmp132_ = NULL;
                  ValaMethodCall* _tmp133_ = NULL;
                  ValaMethodCall* _tmp134_;
                  ValaMethodCall* concat_call;
                  ValaExpression* _tmp135_ = NULL;
                  ValaDataType* _tmp136_ = NULL;
                  ValaCodeNode* _tmp137_ = NULL;
                  gboolean _tmp138_;
                  _tmp128_ = vala_binary_expression_get_left (self);
                  _tmp129_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp130_ = vala_member_access_new (_tmp128_, "concat", _tmp129_);
                  _tmp131_ = _tmp130_;
                  _tmp132_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp133_ = vala_method_call_new ((ValaExpression*) _tmp131_, _tmp132_);
                  _tmp134_ = _tmp133_;
                  _vala_code_node_unref0 (_tmp131_);
                  concat_call = _tmp134_;
                  _tmp135_ = vala_binary_expression_get_right (self);
                  vala_method_call_add_argument (concat_call, _tmp135_);
                  _tmp136_ = vala_expression_get_target_type ((ValaExpression*) self);
                  vala_expression_set_target_type ((ValaExpression*) concat_call, _tmp136_);
                  _tmp137_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                  vala_code_node_replace_expression (_tmp137_, (ValaExpression*) self, (ValaExpression*) concat_call);
                  _tmp138_ = vala_code_node_check ((ValaCodeNode*) concat_call, context);
                  result = _tmp138_;
                  _vala_code_node_unref0 (concat_call);
                  return result;
            }
            _tmp140_ = vala_binary_expression_get_right (self);
            _tmp141_ = vala_expression_get_value_type (_tmp140_);
            if (_tmp141_ == NULL) {
                  _tmp139_ = TRUE;
            } else {
                  ValaExpression* _tmp142_ = NULL;
                  ValaDataType* _tmp143_ = NULL;
                  ValaTypeSymbol* _tmp144_ = NULL;
                  ValaSemanticAnalyzer* _tmp145_ = NULL;
                  ValaTypeSymbol* _tmp146_ = NULL;
                  _tmp142_ = vala_binary_expression_get_right (self);
                  _tmp143_ = vala_expression_get_value_type (_tmp142_);
                  _tmp144_ = vala_data_type_get_data_type (_tmp143_);
                  _tmp145_ = vala_code_context_get_analyzer (context);
                  _tmp146_ = vala_data_type_get_data_type (_tmp145_->string_type);
                  _tmp139_ = _tmp144_ != _tmp146_;
            }
            if (_tmp139_) {
                  ValaSourceReference* _tmp147_ = NULL;
                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                  _tmp147_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  vala_report_error (_tmp147_, "Operands must be strings");
                  result = FALSE;
                  return result;
            }
            _tmp148_ = vala_code_context_get_analyzer (context);
            _tmp149_ = vala_data_type_copy (_tmp148_->string_type);
            _tmp150_ = _tmp149_;
            vala_expression_set_value_type ((ValaExpression*) self, _tmp150_);
            _vala_code_node_unref0 (_tmp150_);
            _tmp152_ = vala_binary_expression_get_left (self);
            _tmp153_ = vala_expression_is_constant (_tmp152_);
            if (_tmp153_) {
                  ValaExpression* _tmp154_ = NULL;
                  gboolean _tmp155_;
                  _tmp154_ = vala_binary_expression_get_right (self);
                  _tmp155_ = vala_expression_is_constant (_tmp154_);
                  _tmp151_ = _tmp155_;
            } else {
                  _tmp151_ = FALSE;
            }
            if (_tmp151_) {
                  ValaDataType* _tmp156_ = NULL;
                  _tmp156_ = vala_expression_get_value_type ((ValaExpression*) self);
                  vala_data_type_set_value_owned (_tmp156_, FALSE);
            } else {
                  ValaDataType* _tmp157_ = NULL;
                  _tmp157_ = vala_expression_get_value_type ((ValaExpression*) self);
                  vala_data_type_set_value_owned (_tmp157_, TRUE);
            }
      } else {
            gboolean _tmp158_ = FALSE;
            gboolean _tmp159_ = FALSE;
            ValaProfile _tmp160_;
            _tmp160_ = vala_code_context_get_profile (context);
            if (_tmp160_ == VALA_PROFILE_DOVA) {
                  ValaExpression* _tmp161_ = NULL;
                  ValaDataType* _tmp162_ = NULL;
                  ValaTypeSymbol* _tmp163_ = NULL;
                  ValaSemanticAnalyzer* _tmp164_ = NULL;
                  ValaTypeSymbol* _tmp165_ = NULL;
                  _tmp161_ = vala_binary_expression_get_left (self);
                  _tmp162_ = vala_expression_get_value_type (_tmp161_);
                  _tmp163_ = vala_data_type_get_data_type (_tmp162_);
                  _tmp164_ = vala_code_context_get_analyzer (context);
                  _tmp165_ = vala_data_type_get_data_type (_tmp164_->list_type);
                  _tmp159_ = _tmp163_ == _tmp165_;
            } else {
                  _tmp159_ = FALSE;
            }
            if (_tmp159_) {
                  _tmp158_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
            } else {
                  _tmp158_ = FALSE;
            }
            if (_tmp158_) {
                  ValaExpression* _tmp166_ = NULL;
                  ValaSourceReference* _tmp167_ = NULL;
                  ValaMemberAccess* _tmp168_ = NULL;
                  ValaMemberAccess* _tmp169_;
                  ValaSourceReference* _tmp170_ = NULL;
                  ValaMethodCall* _tmp171_ = NULL;
                  ValaMethodCall* _tmp172_;
                  ValaMethodCall* concat_call;
                  ValaExpression* _tmp173_ = NULL;
                  ValaDataType* _tmp174_ = NULL;
                  ValaCodeNode* _tmp175_ = NULL;
                  gboolean _tmp176_;
                  _tmp166_ = vala_binary_expression_get_left (self);
                  _tmp167_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp168_ = vala_member_access_new (_tmp166_, "concat", _tmp167_);
                  _tmp169_ = _tmp168_;
                  _tmp170_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp171_ = vala_method_call_new ((ValaExpression*) _tmp169_, _tmp170_);
                  _tmp172_ = _tmp171_;
                  _vala_code_node_unref0 (_tmp169_);
                  concat_call = _tmp172_;
                  _tmp173_ = vala_binary_expression_get_right (self);
                  vala_method_call_add_argument (concat_call, _tmp173_);
                  _tmp174_ = vala_expression_get_target_type ((ValaExpression*) self);
                  vala_expression_set_target_type ((ValaExpression*) concat_call, _tmp174_);
                  _tmp175_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                  vala_code_node_replace_expression (_tmp175_, (ValaExpression*) self, (ValaExpression*) concat_call);
                  _tmp176_ = vala_code_node_check ((ValaCodeNode*) concat_call, context);
                  result = _tmp176_;
                  _vala_code_node_unref0 (concat_call);
                  return result;
            } else {
                  gboolean _tmp177_ = FALSE;
                  gboolean _tmp178_ = FALSE;
                  ValaProfile _tmp179_;
                  _tmp179_ = vala_code_context_get_profile (context);
                  if (_tmp179_ != VALA_PROFILE_DOVA) {
                        ValaExpression* _tmp180_ = NULL;
                        ValaDataType* _tmp181_ = NULL;
                        _tmp180_ = vala_binary_expression_get_left (self);
                        _tmp181_ = vala_expression_get_value_type (_tmp180_);
                        _tmp178_ = VALA_IS_ARRAY_TYPE (_tmp181_);
                  } else {
                        _tmp178_ = FALSE;
                  }
                  if (_tmp178_) {
                        _tmp177_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
                  } else {
                        _tmp177_ = FALSE;
                  }
                  if (_tmp177_) {
                        ValaExpression* _tmp182_ = NULL;
                        ValaDataType* _tmp183_ = NULL;
                        ValaArrayType* _tmp184_;
                        ValaArrayType* array_type;
                        gboolean _tmp185_ = FALSE;
                        ValaExpression* _tmp186_ = NULL;
                        ValaDataType* _tmp187_ = NULL;
                        ValaExpression* _tmp193_ = NULL;
                        ValaDataType* _tmp194_ = NULL;
                        ValaDataType* _tmp195_ = NULL;
                        ValaDataType* _tmp196_;
                        ValaDataType* _tmp197_ = NULL;
                        ValaDataType* _tmp198_;
                        ValaDataType* _tmp199_ = NULL;
                        _tmp182_ = vala_binary_expression_get_left (self);
                        _tmp183_ = vala_expression_get_value_type (_tmp182_);
                        _tmp184_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp183_));
                        array_type = _tmp184_;
                        _tmp186_ = vala_binary_expression_get_right (self);
                        _tmp187_ = vala_expression_get_value_type (_tmp186_);
                        if (_tmp187_ == NULL) {
                              _tmp185_ = TRUE;
                        } else {
                              ValaExpression* _tmp188_ = NULL;
                              ValaDataType* _tmp189_ = NULL;
                              ValaDataType* _tmp190_ = NULL;
                              gboolean _tmp191_;
                              _tmp188_ = vala_binary_expression_get_right (self);
                              _tmp189_ = vala_expression_get_value_type (_tmp188_);
                              _tmp190_ = vala_array_type_get_element_type (array_type);
                              _tmp191_ = vala_data_type_compatible (_tmp189_, _tmp190_);
                              _tmp185_ = !_tmp191_;
                        }
                        if (_tmp185_) {
                              ValaSourceReference* _tmp192_ = NULL;
                              vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                              _tmp192_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                              vala_report_error (_tmp192_, "Incompatible operand");
                              result = FALSE;
                              _vala_code_node_unref0 (array_type);
                              return result;
                        }
                        _tmp193_ = vala_binary_expression_get_right (self);
                        _tmp194_ = vala_array_type_get_element_type (array_type);
                        _tmp195_ = vala_data_type_copy (_tmp194_);
                        _tmp196_ = _tmp195_;
                        vala_expression_set_target_type (_tmp193_, _tmp196_);
                        _vala_code_node_unref0 (_tmp196_);
                        _tmp197_ = vala_data_type_copy ((ValaDataType*) array_type);
                        _tmp198_ = _tmp197_;
                        vala_expression_set_value_type ((ValaExpression*) self, _tmp198_);
                        _vala_code_node_unref0 (_tmp198_);
                        _tmp199_ = vala_expression_get_value_type ((ValaExpression*) self);
                        vala_data_type_set_value_owned (_tmp199_, TRUE);
                        _vala_code_node_unref0 (array_type);
                  } else {
                        gboolean _tmp200_ = FALSE;
                        gboolean _tmp201_ = FALSE;
                        gboolean _tmp202_ = FALSE;
                        if (self->priv->_operator == VALA_BINARY_OPERATOR_PLUS) {
                              _tmp202_ = TRUE;
                        } else {
                              _tmp202_ = self->priv->_operator == VALA_BINARY_OPERATOR_MINUS;
                        }
                        if (_tmp202_) {
                              _tmp201_ = TRUE;
                        } else {
                              _tmp201_ = self->priv->_operator == VALA_BINARY_OPERATOR_MUL;
                        }
                        if (_tmp201_) {
                              _tmp200_ = TRUE;
                        } else {
                              _tmp200_ = self->priv->_operator == VALA_BINARY_OPERATOR_DIV;
                        }
                        if (_tmp200_) {
                              ValaExpression* _tmp203_ = NULL;
                              ValaDataType* _tmp204_ = NULL;
                              ValaDataType* _tmp227_ = NULL;
                              ValaDataType* _tmp235_ = NULL;
                              _tmp203_ = vala_binary_expression_get_left (self);
                              _tmp204_ = vala_expression_get_value_type (_tmp203_);
                              if (VALA_IS_POINTER_TYPE (_tmp204_)) {
                                    ValaExpression* _tmp205_ = NULL;
                                    ValaDataType* _tmp206_ = NULL;
                                    ValaPointerType* _tmp207_;
                                    ValaPointerType* pointer_type;
                                    ValaDataType* _tmp208_ = NULL;
                                    ValaExpression* _tmp210_ = NULL;
                                    ValaDataType* _tmp211_ = NULL;
                                    ValaTypeSymbol* _tmp212_ = NULL;
                                    ValaTypeSymbol* _tmp213_;
                                    ValaStruct* _tmp214_;
                                    ValaStruct* offset_type;
                                    gboolean _tmp215_ = FALSE;
                                    _tmp205_ = vala_binary_expression_get_left (self);
                                    _tmp206_ = vala_expression_get_value_type (_tmp205_);
                                    _tmp207_ = _vala_code_node_ref0 (VALA_POINTER_TYPE (_tmp206_));
                                    pointer_type = _tmp207_;
                                    _tmp208_ = vala_pointer_type_get_base_type (pointer_type);
                                    if (VALA_IS_VOID_TYPE (_tmp208_)) {
                                          ValaSourceReference* _tmp209_ = NULL;
                                          vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                          _tmp209_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                          vala_report_error (_tmp209_, "Pointer arithmetic not supported for `void*'");
                                          result = FALSE;
                                          _vala_code_node_unref0 (pointer_type);
                                          return result;
                                    }
                                    _tmp210_ = vala_binary_expression_get_right (self);
                                    _tmp211_ = vala_expression_get_value_type (_tmp210_);
                                    _tmp212_ = vala_data_type_get_data_type (_tmp211_);
                                    _tmp213_ = _tmp212_;
                                    _tmp214_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp213_) ? ((ValaStruct*) _tmp213_) : NULL);
                                    offset_type = _tmp214_;
                                    if (offset_type != NULL) {
                                          gboolean _tmp216_;
                                          _tmp216_ = vala_struct_is_integer_type (offset_type);
                                          _tmp215_ = _tmp216_;
                                    } else {
                                          _tmp215_ = FALSE;
                                    }
                                    if (_tmp215_) {
                                          gboolean _tmp217_ = FALSE;
                                          if (self->priv->_operator == VALA_BINARY_OPERATOR_PLUS) {
                                                _tmp217_ = TRUE;
                                          } else {
                                                _tmp217_ = self->priv->_operator == VALA_BINARY_OPERATOR_MINUS;
                                          }
                                          if (_tmp217_) {
                                                ValaExpression* _tmp218_ = NULL;
                                                ValaDataType* _tmp219_ = NULL;
                                                ValaDataType* _tmp220_ = NULL;
                                                ValaDataType* _tmp221_;
                                                _tmp218_ = vala_binary_expression_get_left (self);
                                                _tmp219_ = vala_expression_get_value_type (_tmp218_);
                                                _tmp220_ = vala_data_type_copy (_tmp219_);
                                                _tmp221_ = _tmp220_;
                                                vala_expression_set_value_type ((ValaExpression*) self, _tmp221_);
                                                _vala_code_node_unref0 (_tmp221_);
                                          }
                                    } else {
                                          ValaExpression* _tmp222_ = NULL;
                                          ValaDataType* _tmp223_ = NULL;
                                          _tmp222_ = vala_binary_expression_get_right (self);
                                          _tmp223_ = vala_expression_get_value_type (_tmp222_);
                                          if (VALA_IS_POINTER_TYPE (_tmp223_)) {
                                                ValaProfile _tmp224_;
                                                _tmp224_ = vala_code_context_get_profile (context);
                                                if (_tmp224_ == VALA_PROFILE_DOVA) {
                                                      ValaSemanticAnalyzer* _tmp225_ = NULL;
                                                      _tmp225_ = vala_code_context_get_analyzer (context);
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp225_->long_type);
                                                } else {
                                                      ValaSemanticAnalyzer* _tmp226_ = NULL;
                                                      _tmp226_ = vala_code_context_get_analyzer (context);
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp226_->size_t_type);
                                                }
                                          }
                                    }
                                    _vala_code_node_unref0 (offset_type);
                                    _vala_code_node_unref0 (pointer_type);
                              }
                              _tmp227_ = vala_expression_get_value_type ((ValaExpression*) self);
                              if (_tmp227_ == NULL) {
                                    ValaSemanticAnalyzer* _tmp228_ = NULL;
                                    ValaExpression* _tmp229_ = NULL;
                                    ValaDataType* _tmp230_ = NULL;
                                    ValaExpression* _tmp231_ = NULL;
                                    ValaDataType* _tmp232_ = NULL;
                                    ValaDataType* _tmp233_ = NULL;
                                    ValaDataType* _tmp234_;
                                    _tmp228_ = vala_code_context_get_analyzer (context);
                                    _tmp229_ = vala_binary_expression_get_left (self);
                                    _tmp230_ = vala_expression_get_value_type (_tmp229_);
                                    _tmp231_ = vala_binary_expression_get_right (self);
                                    _tmp232_ = vala_expression_get_value_type (_tmp231_);
                                    _tmp233_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp228_, _tmp230_, _tmp232_);
                                    _tmp234_ = _tmp233_;
                                    vala_expression_set_value_type ((ValaExpression*) self, _tmp234_);
                                    _vala_code_node_unref0 (_tmp234_);
                              }
                              _tmp235_ = vala_expression_get_value_type ((ValaExpression*) self);
                              if (_tmp235_ == NULL) {
                                    ValaSourceReference* _tmp236_ = NULL;
                                    ValaExpression* _tmp237_ = NULL;
                                    ValaDataType* _tmp238_ = NULL;
                                    gchar* _tmp239_ = NULL;
                                    gchar* _tmp240_;
                                    ValaExpression* _tmp241_ = NULL;
                                    ValaDataType* _tmp242_ = NULL;
                                    gchar* _tmp243_ = NULL;
                                    gchar* _tmp244_;
                                    gchar* _tmp245_ = NULL;
                                    gchar* _tmp246_;
                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                    _tmp236_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                    _tmp237_ = vala_binary_expression_get_left (self);
                                    _tmp238_ = vala_expression_get_value_type (_tmp237_);
                                    _tmp239_ = vala_code_node_to_string ((ValaCodeNode*) _tmp238_);
                                    _tmp240_ = _tmp239_;
                                    _tmp241_ = vala_binary_expression_get_right (self);
                                    _tmp242_ = vala_expression_get_value_type (_tmp241_);
                                    _tmp243_ = vala_code_node_to_string ((ValaCodeNode*) _tmp242_);
                                    _tmp244_ = _tmp243_;
                                    _tmp245_ = g_strdup_printf ("Arithmetic operation not supported for types `%s' and `%s'", _tmp240_, _tmp244_);
                                    _tmp246_ = _tmp245_;
                                    vala_report_error (_tmp236_, _tmp246_);
                                    _g_free0 (_tmp246_);
                                    _g_free0 (_tmp244_);
                                    _g_free0 (_tmp240_);
                                    result = FALSE;
                                    return result;
                              }
                        } else {
                              gboolean _tmp247_ = FALSE;
                              gboolean _tmp248_ = FALSE;
                              gboolean _tmp249_ = FALSE;
                              if (self->priv->_operator == VALA_BINARY_OPERATOR_MOD) {
                                    _tmp249_ = TRUE;
                              } else {
                                    _tmp249_ = self->priv->_operator == VALA_BINARY_OPERATOR_SHIFT_LEFT;
                              }
                              if (_tmp249_) {
                                    _tmp248_ = TRUE;
                              } else {
                                    _tmp248_ = self->priv->_operator == VALA_BINARY_OPERATOR_SHIFT_RIGHT;
                              }
                              if (_tmp248_) {
                                    _tmp247_ = TRUE;
                              } else {
                                    _tmp247_ = self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_XOR;
                              }
                              if (_tmp247_) {
                                    ValaSemanticAnalyzer* _tmp250_ = NULL;
                                    ValaExpression* _tmp251_ = NULL;
                                    ValaDataType* _tmp252_ = NULL;
                                    ValaExpression* _tmp253_ = NULL;
                                    ValaDataType* _tmp254_ = NULL;
                                    ValaDataType* _tmp255_ = NULL;
                                    ValaDataType* _tmp256_;
                                    ValaDataType* _tmp257_ = NULL;
                                    _tmp250_ = vala_code_context_get_analyzer (context);
                                    _tmp251_ = vala_binary_expression_get_left (self);
                                    _tmp252_ = vala_expression_get_value_type (_tmp251_);
                                    _tmp253_ = vala_binary_expression_get_right (self);
                                    _tmp254_ = vala_expression_get_value_type (_tmp253_);
                                    _tmp255_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp250_, _tmp252_, _tmp254_);
                                    _tmp256_ = _tmp255_;
                                    vala_expression_set_value_type ((ValaExpression*) self, _tmp256_);
                                    _vala_code_node_unref0 (_tmp256_);
                                    _tmp257_ = vala_expression_get_value_type ((ValaExpression*) self);
                                    if (_tmp257_ == NULL) {
                                          ValaSourceReference* _tmp258_ = NULL;
                                          ValaExpression* _tmp259_ = NULL;
                                          ValaDataType* _tmp260_ = NULL;
                                          gchar* _tmp261_ = NULL;
                                          gchar* _tmp262_;
                                          ValaExpression* _tmp263_ = NULL;
                                          ValaDataType* _tmp264_ = NULL;
                                          gchar* _tmp265_ = NULL;
                                          gchar* _tmp266_;
                                          gchar* _tmp267_ = NULL;
                                          gchar* _tmp268_;
                                          vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                          _tmp258_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                          _tmp259_ = vala_binary_expression_get_left (self);
                                          _tmp260_ = vala_expression_get_value_type (_tmp259_);
                                          _tmp261_ = vala_code_node_to_string ((ValaCodeNode*) _tmp260_);
                                          _tmp262_ = _tmp261_;
                                          _tmp263_ = vala_binary_expression_get_right (self);
                                          _tmp264_ = vala_expression_get_value_type (_tmp263_);
                                          _tmp265_ = vala_code_node_to_string ((ValaCodeNode*) _tmp264_);
                                          _tmp266_ = _tmp265_;
                                          _tmp267_ = g_strdup_printf ("Arithmetic operation not supported for types `%s' and `%s'", _tmp262_, _tmp266_);
                                          _tmp268_ = _tmp267_;
                                          vala_report_error (_tmp258_, _tmp268_);
                                          _g_free0 (_tmp268_);
                                          _g_free0 (_tmp266_);
                                          _g_free0 (_tmp262_);
                                          result = FALSE;
                                          return result;
                                    }
                              } else {
                                    gboolean _tmp269_ = FALSE;
                                    gboolean _tmp270_ = FALSE;
                                    gboolean _tmp271_ = FALSE;
                                    if (self->priv->_operator == VALA_BINARY_OPERATOR_LESS_THAN) {
                                          _tmp271_ = TRUE;
                                    } else {
                                          _tmp271_ = self->priv->_operator == VALA_BINARY_OPERATOR_GREATER_THAN;
                                    }
                                    if (_tmp271_) {
                                          _tmp270_ = TRUE;
                                    } else {
                                          _tmp270_ = self->priv->_operator == VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
                                    }
                                    if (_tmp270_) {
                                          _tmp269_ = TRUE;
                                    } else {
                                          _tmp269_ = self->priv->_operator == VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
                                    }
                                    if (_tmp269_) {
                                          gboolean _tmp272_ = FALSE;
                                          ValaExpression* _tmp273_ = NULL;
                                          ValaDataType* _tmp274_ = NULL;
                                          ValaSemanticAnalyzer* _tmp275_ = NULL;
                                          gboolean _tmp276_;
                                          ValaSemanticAnalyzer* _tmp329_ = NULL;
                                          _tmp273_ = vala_binary_expression_get_left (self);
                                          _tmp274_ = vala_expression_get_value_type (_tmp273_);
                                          _tmp275_ = vala_code_context_get_analyzer (context);
                                          _tmp276_ = vala_data_type_compatible (_tmp274_, _tmp275_->string_type);
                                          if (_tmp276_) {
                                                ValaExpression* _tmp277_ = NULL;
                                                ValaDataType* _tmp278_ = NULL;
                                                ValaSemanticAnalyzer* _tmp279_ = NULL;
                                                gboolean _tmp280_;
                                                _tmp277_ = vala_binary_expression_get_right (self);
                                                _tmp278_ = vala_expression_get_value_type (_tmp277_);
                                                _tmp279_ = vala_code_context_get_analyzer (context);
                                                _tmp280_ = vala_data_type_compatible (_tmp278_, _tmp279_->string_type);
                                                _tmp272_ = _tmp280_;
                                          } else {
                                                _tmp272_ = FALSE;
                                          }
                                          if (_tmp272_) {
                                          } else {
                                                gboolean _tmp281_ = FALSE;
                                                ValaExpression* _tmp282_ = NULL;
                                                ValaDataType* _tmp283_ = NULL;
                                                _tmp282_ = vala_binary_expression_get_left (self);
                                                _tmp283_ = vala_expression_get_value_type (_tmp282_);
                                                if (VALA_IS_POINTER_TYPE (_tmp283_)) {
                                                      ValaExpression* _tmp284_ = NULL;
                                                      ValaDataType* _tmp285_ = NULL;
                                                      _tmp284_ = vala_binary_expression_get_right (self);
                                                      _tmp285_ = vala_expression_get_value_type (_tmp284_);
                                                      _tmp281_ = VALA_IS_POINTER_TYPE (_tmp285_);
                                                } else {
                                                      _tmp281_ = FALSE;
                                                }
                                                if (_tmp281_) {
                                                } else {
                                                      ValaDataType* resulting_type = NULL;
                                                      ValaExpression* _tmp311_ = NULL;
                                                      ValaExpression* _tmp312_ = NULL;
                                                      ValaDataType* _tmp313_ = NULL;
                                                      ValaDataType* _tmp314_ = NULL;
                                                      ValaDataType* _tmp315_;
                                                      ValaExpression* _tmp316_ = NULL;
                                                      ValaDataType* _tmp317_ = NULL;
                                                      ValaExpression* _tmp318_ = NULL;
                                                      ValaDataType* _tmp319_ = NULL;
                                                      ValaExpression* _tmp320_ = NULL;
                                                      ValaExpression* _tmp321_ = NULL;
                                                      ValaDataType* _tmp322_ = NULL;
                                                      ValaDataType* _tmp323_ = NULL;
                                                      ValaDataType* _tmp324_;
                                                      ValaExpression* _tmp325_ = NULL;
                                                      ValaDataType* _tmp326_ = NULL;
                                                      ValaExpression* _tmp327_ = NULL;
                                                      ValaDataType* _tmp328_ = NULL;
                                                      if (self->chained) {
                                                            ValaExpression* _tmp286_ = NULL;
                                                            ValaBinaryExpression* _tmp287_;
                                                            ValaBinaryExpression* lbe;
                                                            ValaSemanticAnalyzer* _tmp288_ = NULL;
                                                            ValaExpression* _tmp289_ = NULL;
                                                            ValaDataType* _tmp290_ = NULL;
                                                            ValaExpression* _tmp291_ = NULL;
                                                            ValaDataType* _tmp292_ = NULL;
                                                            ValaDataType* _tmp293_ = NULL;
                                                            _tmp286_ = vala_binary_expression_get_left (self);
                                                            _tmp287_ = _vala_code_node_ref0 (VALA_BINARY_EXPRESSION (_tmp286_));
                                                            lbe = _tmp287_;
                                                            _tmp288_ = vala_code_context_get_analyzer (context);
                                                            _tmp289_ = vala_binary_expression_get_right (lbe);
                                                            _tmp290_ = vala_expression_get_value_type (_tmp289_);
                                                            _tmp291_ = vala_binary_expression_get_right (self);
                                                            _tmp292_ = vala_expression_get_value_type (_tmp291_);
                                                            _tmp293_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp288_, _tmp290_, _tmp292_);
                                                            _vala_code_node_unref0 (resulting_type);
                                                            resulting_type = _tmp293_;
                                                            _vala_code_node_unref0 (lbe);
                                                      } else {
                                                            ValaSemanticAnalyzer* _tmp294_ = NULL;
                                                            ValaExpression* _tmp295_ = NULL;
                                                            ValaDataType* _tmp296_ = NULL;
                                                            ValaExpression* _tmp297_ = NULL;
                                                            ValaDataType* _tmp298_ = NULL;
                                                            ValaDataType* _tmp299_ = NULL;
                                                            _tmp294_ = vala_code_context_get_analyzer (context);
                                                            _tmp295_ = vala_binary_expression_get_left (self);
                                                            _tmp296_ = vala_expression_get_value_type (_tmp295_);
                                                            _tmp297_ = vala_binary_expression_get_right (self);
                                                            _tmp298_ = vala_expression_get_value_type (_tmp297_);
                                                            _tmp299_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp294_, _tmp296_, _tmp298_);
                                                            _vala_code_node_unref0 (resulting_type);
                                                            resulting_type = _tmp299_;
                                                      }
                                                      if (resulting_type == NULL) {
                                                            ValaSourceReference* _tmp300_ = NULL;
                                                            ValaExpression* _tmp301_ = NULL;
                                                            ValaDataType* _tmp302_ = NULL;
                                                            gchar* _tmp303_ = NULL;
                                                            gchar* _tmp304_;
                                                            ValaExpression* _tmp305_ = NULL;
                                                            ValaDataType* _tmp306_ = NULL;
                                                            gchar* _tmp307_ = NULL;
                                                            gchar* _tmp308_;
                                                            gchar* _tmp309_ = NULL;
                                                            gchar* _tmp310_;
                                                            vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                            _tmp300_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp301_ = vala_binary_expression_get_left (self);
                                                            _tmp302_ = vala_expression_get_value_type (_tmp301_);
                                                            _tmp303_ = vala_code_node_to_string ((ValaCodeNode*) _tmp302_);
                                                            _tmp304_ = _tmp303_;
                                                            _tmp305_ = vala_binary_expression_get_right (self);
                                                            _tmp306_ = vala_expression_get_value_type (_tmp305_);
                                                            _tmp307_ = vala_code_node_to_string ((ValaCodeNode*) _tmp306_);
                                                            _tmp308_ = _tmp307_;
                                                            _tmp309_ = g_strdup_printf ("Relational operation not supported for types `%s' and `%s'", _tmp304_, _tmp308_);
                                                            _tmp310_ = _tmp309_;
                                                            vala_report_error (_tmp300_, _tmp310_);
                                                            _g_free0 (_tmp310_);
                                                            _g_free0 (_tmp308_);
                                                            _g_free0 (_tmp304_);
                                                            result = FALSE;
                                                            _vala_code_node_unref0 (resulting_type);
                                                            return result;
                                                      }
                                                      _tmp311_ = vala_binary_expression_get_left (self);
                                                      _tmp312_ = vala_binary_expression_get_left (self);
                                                      _tmp313_ = vala_expression_get_value_type (_tmp312_);
                                                      _tmp314_ = vala_data_type_copy (_tmp313_);
                                                      _tmp315_ = _tmp314_;
                                                      vala_expression_set_target_type (_tmp311_, _tmp315_);
                                                      _vala_code_node_unref0 (_tmp315_);
                                                      _tmp316_ = vala_binary_expression_get_left (self);
                                                      _tmp317_ = vala_expression_get_target_type (_tmp316_);
                                                      vala_data_type_set_nullable (_tmp317_, FALSE);
                                                      _tmp318_ = vala_binary_expression_get_left (self);
                                                      _tmp319_ = vala_expression_get_target_type (_tmp318_);
                                                      vala_data_type_set_value_owned (_tmp319_, FALSE);
                                                      _tmp320_ = vala_binary_expression_get_right (self);
                                                      _tmp321_ = vala_binary_expression_get_right (self);
                                                      _tmp322_ = vala_expression_get_value_type (_tmp321_);
                                                      _tmp323_ = vala_data_type_copy (_tmp322_);
                                                      _tmp324_ = _tmp323_;
                                                      vala_expression_set_target_type (_tmp320_, _tmp324_);
                                                      _vala_code_node_unref0 (_tmp324_);
                                                      _tmp325_ = vala_binary_expression_get_right (self);
                                                      _tmp326_ = vala_expression_get_target_type (_tmp325_);
                                                      vala_data_type_set_nullable (_tmp326_, FALSE);
                                                      _tmp327_ = vala_binary_expression_get_right (self);
                                                      _tmp328_ = vala_expression_get_target_type (_tmp327_);
                                                      vala_data_type_set_value_owned (_tmp328_, FALSE);
                                                      _vala_code_node_unref0 (resulting_type);
                                                }
                                          }
                                          _tmp329_ = vala_code_context_get_analyzer (context);
                                          vala_expression_set_value_type ((ValaExpression*) self, _tmp329_->bool_type);
                                    } else {
                                          gboolean _tmp330_ = FALSE;
                                          if (self->priv->_operator == VALA_BINARY_OPERATOR_EQUALITY) {
                                                _tmp330_ = TRUE;
                                          } else {
                                                _tmp330_ = self->priv->_operator == VALA_BINARY_OPERATOR_INEQUALITY;
                                          }
                                          if (_tmp330_) {
                                                gboolean _tmp331_ = FALSE;
                                                ValaExpression* _tmp332_ = NULL;
                                                ValaDataType* _tmp333_ = NULL;
                                                ValaExpression* _tmp334_ = NULL;
                                                ValaDataType* _tmp335_ = NULL;
                                                gboolean _tmp336_;
                                                ValaExpression* _tmp353_ = NULL;
                                                ValaExpression* _tmp354_ = NULL;
                                                ValaDataType* _tmp355_ = NULL;
                                                ValaDataType* _tmp356_ = NULL;
                                                ValaDataType* _tmp357_;
                                                ValaExpression* _tmp358_ = NULL;
                                                ValaDataType* _tmp359_ = NULL;
                                                ValaExpression* _tmp360_ = NULL;
                                                ValaExpression* _tmp361_ = NULL;
                                                ValaDataType* _tmp362_ = NULL;
                                                ValaDataType* _tmp363_ = NULL;
                                                ValaDataType* _tmp364_;
                                                ValaExpression* _tmp365_ = NULL;
                                                ValaDataType* _tmp366_ = NULL;
                                                ValaExpression* _tmp367_ = NULL;
                                                ValaDataType* _tmp368_ = NULL;
                                                gboolean _tmp369_;
                                                ValaExpression* _tmp370_ = NULL;
                                                ValaDataType* _tmp371_ = NULL;
                                                gboolean _tmp372_;
                                                gboolean _tmp383_ = FALSE;
                                                ValaExpression* _tmp384_ = NULL;
                                                ValaDataType* _tmp385_ = NULL;
                                                ValaSemanticAnalyzer* _tmp386_ = NULL;
                                                gboolean _tmp387_;
                                                ValaSemanticAnalyzer* _tmp409_ = NULL;
                                                _tmp332_ = vala_binary_expression_get_right (self);
                                                _tmp333_ = vala_expression_get_value_type (_tmp332_);
                                                _tmp334_ = vala_binary_expression_get_left (self);
                                                _tmp335_ = vala_expression_get_value_type (_tmp334_);
                                                _tmp336_ = vala_data_type_compatible (_tmp333_, _tmp335_);
                                                if (!_tmp336_) {
                                                      ValaExpression* _tmp337_ = NULL;
                                                      ValaDataType* _tmp338_ = NULL;
                                                      ValaExpression* _tmp339_ = NULL;
                                                      ValaDataType* _tmp340_ = NULL;
                                                      gboolean _tmp341_;
                                                      _tmp337_ = vala_binary_expression_get_left (self);
                                                      _tmp338_ = vala_expression_get_value_type (_tmp337_);
                                                      _tmp339_ = vala_binary_expression_get_right (self);
                                                      _tmp340_ = vala_expression_get_value_type (_tmp339_);
                                                      _tmp341_ = vala_data_type_compatible (_tmp338_, _tmp340_);
                                                      _tmp331_ = !_tmp341_;
                                                } else {
                                                      _tmp331_ = FALSE;
                                                }
                                                if (_tmp331_) {
                                                      ValaSourceReference* _tmp342_ = NULL;
                                                      ValaExpression* _tmp343_ = NULL;
                                                      ValaDataType* _tmp344_ = NULL;
                                                      gchar* _tmp345_ = NULL;
                                                      gchar* _tmp346_;
                                                      ValaExpression* _tmp347_ = NULL;
                                                      ValaDataType* _tmp348_ = NULL;
                                                      gchar* _tmp349_ = NULL;
                                                      gchar* _tmp350_;
                                                      gchar* _tmp351_ = NULL;
                                                      gchar* _tmp352_;
                                                      _tmp342_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                      _tmp343_ = vala_binary_expression_get_right (self);
                                                      _tmp344_ = vala_expression_get_value_type (_tmp343_);
                                                      _tmp345_ = vala_code_node_to_string ((ValaCodeNode*) _tmp344_);
                                                      _tmp346_ = _tmp345_;
                                                      _tmp347_ = vala_binary_expression_get_left (self);
                                                      _tmp348_ = vala_expression_get_value_type (_tmp347_);
                                                      _tmp349_ = vala_code_node_to_string ((ValaCodeNode*) _tmp348_);
                                                      _tmp350_ = _tmp349_;
                                                      _tmp351_ = g_strdup_printf ("Equality operation: `%s' and `%s' are incompatible", _tmp346_, _tmp350_);
                                                      _tmp352_ = _tmp351_;
                                                      vala_report_error (_tmp342_, _tmp352_);
                                                      _g_free0 (_tmp352_);
                                                      _g_free0 (_tmp350_);
                                                      _g_free0 (_tmp346_);
                                                      vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                      result = FALSE;
                                                      return result;
                                                }
                                                _tmp353_ = vala_binary_expression_get_left (self);
                                                _tmp354_ = vala_binary_expression_get_left (self);
                                                _tmp355_ = vala_expression_get_value_type (_tmp354_);
                                                _tmp356_ = vala_data_type_copy (_tmp355_);
                                                _tmp357_ = _tmp356_;
                                                vala_expression_set_target_type (_tmp353_, _tmp357_);
                                                _vala_code_node_unref0 (_tmp357_);
                                                _tmp358_ = vala_binary_expression_get_left (self);
                                                _tmp359_ = vala_expression_get_target_type (_tmp358_);
                                                vala_data_type_set_value_owned (_tmp359_, FALSE);
                                                _tmp360_ = vala_binary_expression_get_right (self);
                                                _tmp361_ = vala_binary_expression_get_right (self);
                                                _tmp362_ = vala_expression_get_value_type (_tmp361_);
                                                _tmp363_ = vala_data_type_copy (_tmp362_);
                                                _tmp364_ = _tmp363_;
                                                vala_expression_set_target_type (_tmp360_, _tmp364_);
                                                _vala_code_node_unref0 (_tmp364_);
                                                _tmp365_ = vala_binary_expression_get_right (self);
                                                _tmp366_ = vala_expression_get_target_type (_tmp365_);
                                                vala_data_type_set_value_owned (_tmp366_, FALSE);
                                                _tmp367_ = vala_binary_expression_get_left (self);
                                                _tmp368_ = vala_expression_get_value_type (_tmp367_);
                                                _tmp369_ = vala_data_type_get_nullable (_tmp368_);
                                                _tmp370_ = vala_binary_expression_get_right (self);
                                                _tmp371_ = vala_expression_get_value_type (_tmp370_);
                                                _tmp372_ = vala_data_type_get_nullable (_tmp371_);
                                                if (_tmp369_ != _tmp372_) {
                                                      ValaExpression* _tmp373_ = NULL;
                                                      ValaDataType* _tmp374_ = NULL;
                                                      gboolean _tmp375_;
                                                      _tmp373_ = vala_binary_expression_get_left (self);
                                                      _tmp374_ = vala_expression_get_value_type (_tmp373_);
                                                      _tmp375_ = vala_data_type_get_nullable (_tmp374_);
                                                      if (!_tmp375_) {
                                                            ValaExpression* _tmp376_ = NULL;
                                                            ValaDataType* _tmp377_ = NULL;
                                                            _tmp376_ = vala_binary_expression_get_left (self);
                                                            _tmp377_ = vala_expression_get_target_type (_tmp376_);
                                                            vala_data_type_set_nullable (_tmp377_, TRUE);
                                                      } else {
                                                            ValaExpression* _tmp378_ = NULL;
                                                            ValaDataType* _tmp379_ = NULL;
                                                            gboolean _tmp380_;
                                                            _tmp378_ = vala_binary_expression_get_right (self);
                                                            _tmp379_ = vala_expression_get_value_type (_tmp378_);
                                                            _tmp380_ = vala_data_type_get_nullable (_tmp379_);
                                                            if (!_tmp380_) {
                                                                  ValaExpression* _tmp381_ = NULL;
                                                                  ValaDataType* _tmp382_ = NULL;
                                                                  _tmp381_ = vala_binary_expression_get_right (self);
                                                                  _tmp382_ = vala_expression_get_target_type (_tmp381_);
                                                                  vala_data_type_set_nullable (_tmp382_, TRUE);
                                                            }
                                                      }
                                                }
                                                _tmp384_ = vala_binary_expression_get_left (self);
                                                _tmp385_ = vala_expression_get_value_type (_tmp384_);
                                                _tmp386_ = vala_code_context_get_analyzer (context);
                                                _tmp387_ = vala_data_type_compatible (_tmp385_, _tmp386_->string_type);
                                                if (_tmp387_) {
                                                      ValaExpression* _tmp388_ = NULL;
                                                      ValaDataType* _tmp389_ = NULL;
                                                      ValaSemanticAnalyzer* _tmp390_ = NULL;
                                                      gboolean _tmp391_;
                                                      _tmp388_ = vala_binary_expression_get_right (self);
                                                      _tmp389_ = vala_expression_get_value_type (_tmp388_);
                                                      _tmp390_ = vala_code_context_get_analyzer (context);
                                                      _tmp391_ = vala_data_type_compatible (_tmp389_, _tmp390_->string_type);
                                                      _tmp383_ = _tmp391_;
                                                } else {
                                                      _tmp383_ = FALSE;
                                                }
                                                if (_tmp383_) {
                                                      ValaProfile _tmp392_;
                                                      _tmp392_ = vala_code_context_get_profile (context);
                                                      if (_tmp392_ == VALA_PROFILE_DOVA) {
                                                            ValaSourceReference* _tmp393_ = NULL;
                                                            ValaMemberAccess* _tmp394_ = NULL;
                                                            ValaMemberAccess* string_ma;
                                                            ValaSourceReference* _tmp395_ = NULL;
                                                            ValaMemberAccess* _tmp396_ = NULL;
                                                            ValaMemberAccess* _tmp397_;
                                                            ValaSourceReference* _tmp398_ = NULL;
                                                            ValaMethodCall* _tmp399_ = NULL;
                                                            ValaMethodCall* _tmp400_;
                                                            ValaMethodCall* equals_call;
                                                            ValaExpression* _tmp401_ = NULL;
                                                            ValaExpression* _tmp402_ = NULL;
                                                            _tmp393_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp394_ = vala_member_access_new_simple ("string", _tmp393_);
                                                            string_ma = _tmp394_;
                                                            vala_member_access_set_qualified (string_ma, TRUE);
                                                            _tmp395_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp396_ = vala_member_access_new ((ValaExpression*) string_ma, "equals", _tmp395_);
                                                            _tmp397_ = _tmp396_;
                                                            _tmp398_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp399_ = vala_method_call_new ((ValaExpression*) _tmp397_, _tmp398_);
                                                            _tmp400_ = _tmp399_;
                                                            _vala_code_node_unref0 (_tmp397_);
                                                            equals_call = _tmp400_;
                                                            _tmp401_ = vala_binary_expression_get_left (self);
                                                            vala_method_call_add_argument (equals_call, _tmp401_);
                                                            _tmp402_ = vala_binary_expression_get_right (self);
                                                            vala_method_call_add_argument (equals_call, _tmp402_);
                                                            if (self->priv->_operator == VALA_BINARY_OPERATOR_EQUALITY) {
                                                                  ValaCodeNode* _tmp403_ = NULL;
                                                                  gboolean _tmp404_;
                                                                  _tmp403_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                  vala_code_node_replace_expression (_tmp403_, (ValaExpression*) self, (ValaExpression*) equals_call);
                                                                  _tmp404_ = vala_code_node_check ((ValaCodeNode*) equals_call, context);
                                                                  result = _tmp404_;
                                                                  _vala_code_node_unref0 (equals_call);
                                                                  _vala_code_node_unref0 (string_ma);
                                                                  return result;
                                                            } else {
                                                                  ValaSourceReference* _tmp405_ = NULL;
                                                                  ValaUnaryExpression* _tmp406_ = NULL;
                                                                  ValaUnaryExpression* not;
                                                                  ValaCodeNode* _tmp407_ = NULL;
                                                                  gboolean _tmp408_;
                                                                  _tmp405_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                  _tmp406_ = vala_unary_expression_new (VALA_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaExpression*) equals_call, _tmp405_);
                                                                  not = _tmp406_;
                                                                  _tmp407_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                  vala_code_node_replace_expression (_tmp407_, (ValaExpression*) self, (ValaExpression*) not);
                                                                  _tmp408_ = vala_code_node_check ((ValaCodeNode*) not, context);
                                                                  result = _tmp408_;
                                                                  _vala_code_node_unref0 (not);
                                                                  _vala_code_node_unref0 (equals_call);
                                                                  _vala_code_node_unref0 (string_ma);
                                                                  return result;
                                                            }
                                                            _vala_code_node_unref0 (equals_call);
                                                            _vala_code_node_unref0 (string_ma);
                                                      }
                                                }
                                                _tmp409_ = vala_code_context_get_analyzer (context);
                                                vala_expression_set_value_type ((ValaExpression*) self, _tmp409_->bool_type);
                                          } else {
                                                gboolean _tmp410_ = FALSE;
                                                if (self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_AND) {
                                                      _tmp410_ = TRUE;
                                                } else {
                                                      _tmp410_ = self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_OR;
                                                }
                                                if (_tmp410_) {
                                                      ValaExpression* _tmp411_ = NULL;
                                                      ValaDataType* _tmp412_ = NULL;
                                                      _tmp411_ = vala_binary_expression_get_left (self);
                                                      _tmp412_ = vala_expression_get_value_type (_tmp411_);
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp412_);
                                                } else {
                                                      gboolean _tmp413_ = FALSE;
                                                      if (self->priv->_operator == VALA_BINARY_OPERATOR_AND) {
                                                            _tmp413_ = TRUE;
                                                      } else {
                                                            _tmp413_ = self->priv->_operator == VALA_BINARY_OPERATOR_OR;
                                                      }
                                                      if (_tmp413_) {
                                                            gboolean _tmp414_ = FALSE;
                                                            ValaExpression* _tmp415_ = NULL;
                                                            ValaDataType* _tmp416_ = NULL;
                                                            ValaSemanticAnalyzer* _tmp417_ = NULL;
                                                            gboolean _tmp418_;
                                                            ValaSemanticAnalyzer* _tmp424_ = NULL;
                                                            _tmp415_ = vala_binary_expression_get_left (self);
                                                            _tmp416_ = vala_expression_get_value_type (_tmp415_);
                                                            _tmp417_ = vala_code_context_get_analyzer (context);
                                                            _tmp418_ = vala_data_type_compatible (_tmp416_, _tmp417_->bool_type);
                                                            if (!_tmp418_) {
                                                                  _tmp414_ = TRUE;
                                                            } else {
                                                                  ValaExpression* _tmp419_ = NULL;
                                                                  ValaDataType* _tmp420_ = NULL;
                                                                  ValaSemanticAnalyzer* _tmp421_ = NULL;
                                                                  gboolean _tmp422_;
                                                                  _tmp419_ = vala_binary_expression_get_right (self);
                                                                  _tmp420_ = vala_expression_get_value_type (_tmp419_);
                                                                  _tmp421_ = vala_code_context_get_analyzer (context);
                                                                  _tmp422_ = vala_data_type_compatible (_tmp420_, _tmp421_->bool_type);
                                                                  _tmp414_ = !_tmp422_;
                                                            }
                                                            if (_tmp414_) {
                                                                  ValaSourceReference* _tmp423_ = NULL;
                                                                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                  _tmp423_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                  vala_report_error (_tmp423_, "Operands must be boolean");
                                                            }
                                                            _tmp424_ = vala_code_context_get_analyzer (context);
                                                            vala_expression_set_value_type ((ValaExpression*) self, _tmp424_->bool_type);
                                                      } else {
                                                            if (self->priv->_operator == VALA_BINARY_OPERATOR_IN) {
                                                                  gboolean _tmp425_ = FALSE;
                                                                  ValaExpression* _tmp426_ = NULL;
                                                                  ValaDataType* _tmp427_ = NULL;
                                                                  ValaSemanticAnalyzer* _tmp428_ = NULL;
                                                                  gboolean _tmp429_;
                                                                  ValaSemanticAnalyzer* _tmp491_ = NULL;
                                                                  _tmp426_ = vala_binary_expression_get_left (self);
                                                                  _tmp427_ = vala_expression_get_value_type (_tmp426_);
                                                                  _tmp428_ = vala_code_context_get_analyzer (context);
                                                                  _tmp429_ = vala_data_type_compatible (_tmp427_, _tmp428_->int_type);
                                                                  if (_tmp429_) {
                                                                        ValaExpression* _tmp430_ = NULL;
                                                                        ValaDataType* _tmp431_ = NULL;
                                                                        ValaSemanticAnalyzer* _tmp432_ = NULL;
                                                                        gboolean _tmp433_;
                                                                        _tmp430_ = vala_binary_expression_get_right (self);
                                                                        _tmp431_ = vala_expression_get_value_type (_tmp430_);
                                                                        _tmp432_ = vala_code_context_get_analyzer (context);
                                                                        _tmp433_ = vala_data_type_compatible (_tmp431_, _tmp432_->int_type);
                                                                        _tmp425_ = _tmp433_;
                                                                  } else {
                                                                        _tmp425_ = FALSE;
                                                                  }
                                                                  if (_tmp425_) {
                                                                  } else {
                                                                        ValaExpression* _tmp434_ = NULL;
                                                                        ValaDataType* _tmp435_ = NULL;
                                                                        _tmp434_ = vala_binary_expression_get_right (self);
                                                                        _tmp435_ = vala_expression_get_value_type (_tmp434_);
                                                                        if (VALA_IS_ARRAY_TYPE (_tmp435_)) {
                                                                              ValaExpression* _tmp436_ = NULL;
                                                                              ValaDataType* _tmp437_ = NULL;
                                                                              ValaExpression* _tmp438_ = NULL;
                                                                              ValaDataType* _tmp439_ = NULL;
                                                                              ValaDataType* _tmp440_ = NULL;
                                                                              gboolean _tmp441_;
                                                                              _tmp436_ = vala_binary_expression_get_left (self);
                                                                              _tmp437_ = vala_expression_get_value_type (_tmp436_);
                                                                              _tmp438_ = vala_binary_expression_get_right (self);
                                                                              _tmp439_ = vala_expression_get_value_type (_tmp438_);
                                                                              _tmp440_ = vala_array_type_get_element_type (VALA_ARRAY_TYPE (_tmp439_));
                                                                              _tmp441_ = vala_data_type_compatible (_tmp437_, _tmp440_);
                                                                              if (!_tmp441_) {
                                                                                    ValaSourceReference* _tmp442_ = NULL;
                                                                                    ValaExpression* _tmp443_ = NULL;
                                                                                    ValaDataType* _tmp444_ = NULL;
                                                                                    gchar* _tmp445_ = NULL;
                                                                                    gchar* _tmp446_;
                                                                                    ValaExpression* _tmp447_ = NULL;
                                                                                    ValaDataType* _tmp448_ = NULL;
                                                                                    gchar* _tmp449_ = NULL;
                                                                                    gchar* _tmp450_;
                                                                                    gchar* _tmp451_ = NULL;
                                                                                    gchar* _tmp452_;
                                                                                    _tmp442_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp443_ = vala_binary_expression_get_left (self);
                                                                                    _tmp444_ = vala_expression_get_value_type (_tmp443_);
                                                                                    _tmp445_ = vala_code_node_to_string ((ValaCodeNode*) _tmp444_);
                                                                                    _tmp446_ = _tmp445_;
                                                                                    _tmp447_ = vala_binary_expression_get_right (self);
                                                                                    _tmp448_ = vala_expression_get_value_type (_tmp447_);
                                                                                    _tmp449_ = vala_code_node_to_string ((ValaCodeNode*) _tmp448_);
                                                                                    _tmp450_ = _tmp449_;
                                                                                    _tmp451_ = g_strdup_printf ("Cannot look for `%s' in `%s'", _tmp446_, _tmp450_);
                                                                                    _tmp452_ = _tmp451_;
                                                                                    vala_report_error (_tmp442_, _tmp452_);
                                                                                    _g_free0 (_tmp452_);
                                                                                    _g_free0 (_tmp450_);
                                                                                    _g_free0 (_tmp446_);
                                                                              }
                                                                        } else {
                                                                              ValaExpression* _tmp453_ = NULL;
                                                                              ValaDataType* _tmp454_ = NULL;
                                                                              ValaSymbol* _tmp455_ = NULL;
                                                                              ValaSymbol* _tmp456_;
                                                                              ValaMethod* contains_method;
                                                                              ValaList* _tmp464_ = NULL;
                                                                              ValaList* _tmp465_;
                                                                              gint _tmp466_;
                                                                              gboolean _tmp467_;
                                                                              ValaDataType* _tmp473_ = NULL;
                                                                              ValaSemanticAnalyzer* _tmp474_ = NULL;
                                                                              gboolean _tmp475_;
                                                                              ValaExpression* _tmp481_ = NULL;
                                                                              ValaSourceReference* _tmp482_ = NULL;
                                                                              ValaMemberAccess* _tmp483_ = NULL;
                                                                              ValaMemberAccess* _tmp484_;
                                                                              ValaSourceReference* _tmp485_ = NULL;
                                                                              ValaMethodCall* _tmp486_ = NULL;
                                                                              ValaMethodCall* _tmp487_;
                                                                              ValaMethodCall* contains_call;
                                                                              ValaExpression* _tmp488_ = NULL;
                                                                              ValaCodeNode* _tmp489_ = NULL;
                                                                              gboolean _tmp490_;
                                                                              _tmp453_ = vala_binary_expression_get_right (self);
                                                                              _tmp454_ = vala_expression_get_value_type (_tmp453_);
                                                                              _tmp455_ = vala_data_type_get_member (_tmp454_, "contains");
                                                                              _tmp456_ = _tmp455_;
                                                                              contains_method = VALA_IS_METHOD (_tmp456_) ? ((ValaMethod*) _tmp456_) : NULL;
                                                                              if (contains_method == NULL) {
                                                                                    ValaSourceReference* _tmp457_ = NULL;
                                                                                    ValaExpression* _tmp458_ = NULL;
                                                                                    ValaDataType* _tmp459_ = NULL;
                                                                                    gchar* _tmp460_ = NULL;
                                                                                    gchar* _tmp461_;
                                                                                    gchar* _tmp462_ = NULL;
                                                                                    gchar* _tmp463_;
                                                                                    _tmp457_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp458_ = vala_binary_expression_get_right (self);
                                                                                    _tmp459_ = vala_expression_get_value_type (_tmp458_);
                                                                                    _tmp460_ = vala_code_node_to_string ((ValaCodeNode*) _tmp459_);
                                                                                    _tmp461_ = _tmp460_;
                                                                                    _tmp462_ = g_strdup_printf ("`%s' does not have a `contains' method", _tmp461_);
                                                                                    _tmp463_ = _tmp462_;
                                                                                    vala_report_error (_tmp457_, _tmp463_);
                                                                                    _g_free0 (_tmp463_);
                                                                                    _g_free0 (_tmp461_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp464_ = vala_method_get_parameters (contains_method);
                                                                              _tmp465_ = _tmp464_;
                                                                              _tmp466_ = vala_collection_get_size ((ValaCollection*) _tmp465_);
                                                                              _tmp467_ = _tmp466_ != 1;
                                                                              _vala_iterable_unref0 (_tmp465_);
                                                                              if (_tmp467_) {
                                                                                    ValaSourceReference* _tmp468_ = NULL;
                                                                                    gchar* _tmp469_ = NULL;
                                                                                    gchar* _tmp470_;
                                                                                    gchar* _tmp471_ = NULL;
                                                                                    gchar* _tmp472_;
                                                                                    _tmp468_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp469_ = vala_symbol_get_full_name ((ValaSymbol*) contains_method);
                                                                                    _tmp470_ = _tmp469_;
                                                                                    _tmp471_ = g_strdup_printf ("`%s' must have one parameter", _tmp470_);
                                                                                    _tmp472_ = _tmp471_;
                                                                                    vala_report_error (_tmp468_, _tmp472_);
                                                                                    _g_free0 (_tmp472_);
                                                                                    _g_free0 (_tmp470_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp473_ = vala_method_get_return_type (contains_method);
                                                                              _tmp474_ = vala_code_context_get_analyzer (context);
                                                                              _tmp475_ = vala_data_type_compatible (_tmp473_, _tmp474_->bool_type);
                                                                              if (!_tmp475_) {
                                                                                    ValaSourceReference* _tmp476_ = NULL;
                                                                                    gchar* _tmp477_ = NULL;
                                                                                    gchar* _tmp478_;
                                                                                    gchar* _tmp479_ = NULL;
                                                                                    gchar* _tmp480_;
                                                                                    _tmp476_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp477_ = vala_symbol_get_full_name ((ValaSymbol*) contains_method);
                                                                                    _tmp478_ = _tmp477_;
                                                                                    _tmp479_ = g_strdup_printf ("`%s' must return a boolean value", _tmp478_);
                                                                                    _tmp480_ = _tmp479_;
                                                                                    vala_report_error (_tmp476_, _tmp480_);
                                                                                    _g_free0 (_tmp480_);
                                                                                    _g_free0 (_tmp478_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp481_ = vala_binary_expression_get_right (self);
                                                                              _tmp482_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                              _tmp483_ = vala_member_access_new (_tmp481_, "contains", _tmp482_);
                                                                              _tmp484_ = _tmp483_;
                                                                              _tmp485_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                              _tmp486_ = vala_method_call_new ((ValaExpression*) _tmp484_, _tmp485_);
                                                                              _tmp487_ = _tmp486_;
                                                                              _vala_code_node_unref0 (_tmp484_);
                                                                              contains_call = _tmp487_;
                                                                              _tmp488_ = vala_binary_expression_get_left (self);
                                                                              vala_method_call_add_argument (contains_call, _tmp488_);
                                                                              _tmp489_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                              vala_code_node_replace_expression (_tmp489_, (ValaExpression*) self, (ValaExpression*) contains_call);
                                                                              _tmp490_ = vala_code_node_check ((ValaCodeNode*) contains_call, context);
                                                                              result = _tmp490_;
                                                                              _vala_code_node_unref0 (contains_call);
                                                                              _vala_code_node_unref0 (contains_method);
                                                                              return result;
                                                                        }
                                                                  }
                                                                  _tmp491_ = vala_code_context_get_analyzer (context);
                                                                  vala_expression_set_value_type ((ValaExpression*) self, _tmp491_->bool_type);
                                                            } else {
                                                                  g_assert_not_reached ();
                                                            }
                                                      }
                                                }
                                          }
                                    }
                              }
                        }
                  }
            }
      }
      _tmp492_ = vala_code_node_get_error ((ValaCodeNode*) self);
      result = !_tmp492_;
      return result;
}


static void vala_binary_expression_real_emit (ValaCodeNode* base, ValaCodeGenerator* codegen) {
      ValaBinaryExpression * self;
      ValaExpression* _tmp0_ = NULL;
      ValaExpression* _tmp1_ = NULL;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (codegen != NULL);
      _tmp0_ = vala_binary_expression_get_left (self);
      vala_code_node_emit ((ValaCodeNode*) _tmp0_, codegen);
      _tmp1_ = vala_binary_expression_get_right (self);
      vala_code_node_emit ((ValaCodeNode*) _tmp1_, codegen);
      vala_code_visitor_visit_binary_expression ((ValaCodeVisitor*) codegen, self);
      vala_code_visitor_visit_expression ((ValaCodeVisitor*) codegen, (ValaExpression*) self);
}


static void vala_binary_expression_real_get_defined_variables (ValaCodeNode* base, ValaCollection* collection) {
      ValaBinaryExpression * self;
      ValaExpression* _tmp0_ = NULL;
      ValaExpression* _tmp1_ = NULL;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (collection != NULL);
      _tmp0_ = vala_binary_expression_get_left (self);
      vala_code_node_get_defined_variables ((ValaCodeNode*) _tmp0_, collection);
      _tmp1_ = vala_binary_expression_get_right (self);
      vala_code_node_get_defined_variables ((ValaCodeNode*) _tmp1_, collection);
}


static void vala_binary_expression_real_get_used_variables (ValaCodeNode* base, ValaCollection* collection) {
      ValaBinaryExpression * self;
      ValaExpression* _tmp0_ = NULL;
      ValaExpression* _tmp1_ = NULL;
      self = (ValaBinaryExpression*) base;
      g_return_if_fail (collection != NULL);
      _tmp0_ = vala_binary_expression_get_left (self);
      vala_code_node_get_used_variables ((ValaCodeNode*) _tmp0_, collection);
      _tmp1_ = vala_binary_expression_get_right (self);
      vala_code_node_get_used_variables ((ValaCodeNode*) _tmp1_, collection);
}


ValaBinaryOperator vala_binary_expression_get_operator (ValaBinaryExpression* self) {
      ValaBinaryOperator result;
      g_return_val_if_fail (self != NULL, 0);
      result = self->priv->_operator;
      return result;
}


void vala_binary_expression_set_operator (ValaBinaryExpression* self, ValaBinaryOperator value) {
      g_return_if_fail (self != NULL);
      self->priv->_operator = value;
}


ValaExpression* vala_binary_expression_get_left (ValaBinaryExpression* self) {
      ValaExpression* result;
      g_return_val_if_fail (self != NULL, NULL);
      result = self->priv->_left;
      return result;
}


void vala_binary_expression_set_left (ValaBinaryExpression* self, ValaExpression* value) {
      ValaExpression* _tmp0_;
      g_return_if_fail (self != NULL);
      _tmp0_ = _vala_code_node_ref0 (value);
      _vala_code_node_unref0 (self->priv->_left);
      self->priv->_left = _tmp0_;
      vala_code_node_set_parent_node ((ValaCodeNode*) self->priv->_left, (ValaCodeNode*) self);
}


ValaExpression* vala_binary_expression_get_right (ValaBinaryExpression* self) {
      ValaExpression* result;
      g_return_val_if_fail (self != NULL, NULL);
      result = self->priv->_right;
      return result;
}


void vala_binary_expression_set_right (ValaBinaryExpression* self, ValaExpression* value) {
      ValaExpression* _tmp0_;
      g_return_if_fail (self != NULL);
      _tmp0_ = _vala_code_node_ref0 (value);
      _vala_code_node_unref0 (self->priv->_right);
      self->priv->_right = _tmp0_;
      vala_code_node_set_parent_node ((ValaCodeNode*) self->priv->_right, (ValaCodeNode*) self);
}


static void vala_binary_expression_class_init (ValaBinaryExpressionClass * klass) {
      vala_binary_expression_parent_class = g_type_class_peek_parent (klass);
      VALA_CODE_NODE_CLASS (klass)->finalize = vala_binary_expression_finalize;
      g_type_class_add_private (klass, sizeof (ValaBinaryExpressionPrivate));
      VALA_CODE_NODE_CLASS (klass)->accept = vala_binary_expression_real_accept;
      VALA_CODE_NODE_CLASS (klass)->accept_children = vala_binary_expression_real_accept_children;
      VALA_CODE_NODE_CLASS (klass)->replace_expression = vala_binary_expression_real_replace_expression;
      VALA_CODE_NODE_CLASS (klass)->to_string = vala_binary_expression_real_to_string;
      VALA_EXPRESSION_CLASS (klass)->is_constant = vala_binary_expression_real_is_constant;
      VALA_EXPRESSION_CLASS (klass)->is_pure = vala_binary_expression_real_is_pure;
      VALA_EXPRESSION_CLASS (klass)->is_non_null = vala_binary_expression_real_is_non_null;
      VALA_CODE_NODE_CLASS (klass)->check = vala_binary_expression_real_check;
      VALA_CODE_NODE_CLASS (klass)->emit = vala_binary_expression_real_emit;
      VALA_CODE_NODE_CLASS (klass)->get_defined_variables = vala_binary_expression_real_get_defined_variables;
      VALA_CODE_NODE_CLASS (klass)->get_used_variables = vala_binary_expression_real_get_used_variables;
}


static void vala_binary_expression_instance_init (ValaBinaryExpression * self) {
      self->priv = VALA_BINARY_EXPRESSION_GET_PRIVATE (self);
}


static void vala_binary_expression_finalize (ValaCodeNode* obj) {
      ValaBinaryExpression * self;
      self = VALA_BINARY_EXPRESSION (obj);
      _vala_code_node_unref0 (self->priv->_left);
      _vala_code_node_unref0 (self->priv->_right);
      VALA_CODE_NODE_CLASS (vala_binary_expression_parent_class)->finalize (obj);
}


/**
 * Represents an expression with two operands in the source code.
 *
 * Supports +, -, *, /, %, <<, >>, <, >, <=, >=, ==, !=, &, |, ^, &&, ||, ??.
 */
GType vala_binary_expression_get_type (void) {
      static volatile gsize vala_binary_expression_type_id__volatile = 0;
      if (g_once_init_enter (&vala_binary_expression_type_id__volatile)) {
            static const GTypeInfo g_define_type_info = { sizeof (ValaBinaryExpressionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_binary_expression_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaBinaryExpression), 0, (GInstanceInitFunc) vala_binary_expression_instance_init, NULL };
            GType vala_binary_expression_type_id;
            vala_binary_expression_type_id = g_type_register_static (VALA_TYPE_EXPRESSION, "ValaBinaryExpression", &g_define_type_info, 0);
            g_once_init_leave (&vala_binary_expression_type_id__volatile, vala_binary_expression_type_id);
      }
      return vala_binary_expression_type_id__volatile;
}


GType vala_binary_operator_get_type (void) {
      static volatile gsize vala_binary_operator_type_id__volatile = 0;
      if (g_once_init_enter (&vala_binary_operator_type_id__volatile)) {
            static const GEnumValue values[] = {{VALA_BINARY_OPERATOR_NONE, "VALA_BINARY_OPERATOR_NONE", "none"}, {VALA_BINARY_OPERATOR_PLUS, "VALA_BINARY_OPERATOR_PLUS", "plus"}, {VALA_BINARY_OPERATOR_MINUS, "VALA_BINARY_OPERATOR_MINUS", "minus"}, {VALA_BINARY_OPERATOR_MUL, "VALA_BINARY_OPERATOR_MUL", "mul"}, {VALA_BINARY_OPERATOR_DIV, "VALA_BINARY_OPERATOR_DIV", "div"}, {VALA_BINARY_OPERATOR_MOD, "VALA_BINARY_OPERATOR_MOD", "mod"}, {VALA_BINARY_OPERATOR_SHIFT_LEFT, "VALA_BINARY_OPERATOR_SHIFT_LEFT", "shift-left"}, {VALA_BINARY_OPERATOR_SHIFT_RIGHT, "VALA_BINARY_OPERATOR_SHIFT_RIGHT", "shift-right"}, {VALA_BINARY_OPERATOR_LESS_THAN, "VALA_BINARY_OPERATOR_LESS_THAN", "less-than"}, {VALA_BINARY_OPERATOR_GREATER_THAN, "VALA_BINARY_OPERATOR_GREATER_THAN", "greater-than"}, {VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL, "VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL", "less-than-or-equal"}, {VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL, "VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL", "greater-than-or-equal"}, {VALA_BINARY_OPERATOR_EQUALITY, "VALA_BINARY_OPERATOR_EQUALITY", "equality"}, {VALA_BINARY_OPERATOR_INEQUALITY, "VALA_BINARY_OPERATOR_INEQUALITY", "inequality"}, {VALA_BINARY_OPERATOR_BITWISE_AND, "VALA_BINARY_OPERATOR_BITWISE_AND", "bitwise-and"}, {VALA_BINARY_OPERATOR_BITWISE_OR, "VALA_BINARY_OPERATOR_BITWISE_OR", "bitwise-or"}, {VALA_BINARY_OPERATOR_BITWISE_XOR, "VALA_BINARY_OPERATOR_BITWISE_XOR", "bitwise-xor"}, {VALA_BINARY_OPERATOR_AND, "VALA_BINARY_OPERATOR_AND", "and"}, {VALA_BINARY_OPERATOR_OR, "VALA_BINARY_OPERATOR_OR", "or"}, {VALA_BINARY_OPERATOR_IN, "VALA_BINARY_OPERATOR_IN", "in"}, {VALA_BINARY_OPERATOR_COALESCE, "VALA_BINARY_OPERATOR_COALESCE", "coalesce"}, {0, NULL, NULL}};
            GType vala_binary_operator_type_id;
            vala_binary_operator_type_id = g_enum_register_static ("ValaBinaryOperator", values);
            g_once_init_leave (&vala_binary_operator_type_id__volatile, vala_binary_operator_type_id);
      }
      return vala_binary_operator_type_id__volatile;
}




Generated by  Doxygen 1.6.0   Back to index