Logo Search packages:      
Sourcecode: vala-0.14 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);
void vala_data_type_set_value_owned (ValaDataType* self, gboolean value);
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);
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);
void vala_data_type_set_nullable (ValaDataType* self, gboolean value);
ValaDataType* vala_semantic_analyzer_get_arithmetic_result_type (ValaSemanticAnalyzer* self, ValaDataType* left_type, ValaDataType* right_type);
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;
      ValaExpression* _tmp121_ = NULL;
      ValaExpression* _tmp122_ = NULL;
      ValaDataType* _tmp123_ = NULL;
      ValaDataType* _tmp124_ = NULL;
      ValaDataType* _tmp125_;
      ValaExpression* _tmp126_ = NULL;
      ValaDataType* _tmp127_ = NULL;
      ValaExpression* _tmp128_ = NULL;
      ValaExpression* _tmp129_ = NULL;
      ValaDataType* _tmp130_ = NULL;
      ValaDataType* _tmp131_ = NULL;
      ValaDataType* _tmp132_;
      ValaExpression* _tmp133_ = NULL;
      ValaDataType* _tmp134_ = NULL;
      gboolean _tmp135_ = FALSE;
      ValaExpression* _tmp136_ = NULL;
      ValaDataType* _tmp137_ = NULL;
      ValaTypeSymbol* _tmp138_ = NULL;
      ValaSemanticAnalyzer* _tmp139_ = NULL;
      ValaTypeSymbol* _tmp140_ = NULL;
      gboolean _tmp522_;
      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;
      }
      _tmp121_ = vala_binary_expression_get_left (self);
      _tmp122_ = vala_binary_expression_get_left (self);
      _tmp123_ = vala_expression_get_value_type (_tmp122_);
      _tmp124_ = vala_data_type_copy (_tmp123_);
      _tmp125_ = _tmp124_;
      vala_expression_set_target_type (_tmp121_, _tmp125_);
      _vala_code_node_unref0 (_tmp125_);
      _tmp126_ = vala_binary_expression_get_left (self);
      _tmp127_ = vala_expression_get_target_type (_tmp126_);
      vala_data_type_set_value_owned (_tmp127_, FALSE);
      _tmp128_ = vala_binary_expression_get_right (self);
      _tmp129_ = vala_binary_expression_get_right (self);
      _tmp130_ = vala_expression_get_value_type (_tmp129_);
      _tmp131_ = vala_data_type_copy (_tmp130_);
      _tmp132_ = _tmp131_;
      vala_expression_set_target_type (_tmp128_, _tmp132_);
      _vala_code_node_unref0 (_tmp132_);
      _tmp133_ = vala_binary_expression_get_right (self);
      _tmp134_ = vala_expression_get_target_type (_tmp133_);
      vala_data_type_set_value_owned (_tmp134_, FALSE);
      _tmp136_ = vala_binary_expression_get_left (self);
      _tmp137_ = vala_expression_get_value_type (_tmp136_);
      _tmp138_ = vala_data_type_get_data_type (_tmp137_);
      _tmp139_ = vala_code_context_get_analyzer (context);
      _tmp140_ = vala_data_type_get_data_type (_tmp139_->string_type);
      if (_tmp138_ == _tmp140_) {
            _tmp135_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
      } else {
            _tmp135_ = FALSE;
      }
      if (_tmp135_) {
            ValaProfile _tmp141_;
            gboolean _tmp153_ = FALSE;
            ValaExpression* _tmp154_ = NULL;
            ValaDataType* _tmp155_ = NULL;
            ValaSemanticAnalyzer* _tmp162_ = NULL;
            ValaDataType* _tmp163_ = NULL;
            ValaDataType* _tmp164_;
            gboolean _tmp165_ = FALSE;
            ValaExpression* _tmp166_ = NULL;
            gboolean _tmp167_;
            _tmp141_ = vala_code_context_get_profile (context);
            if (_tmp141_ == VALA_PROFILE_DOVA) {
                  ValaExpression* _tmp142_ = NULL;
                  ValaSourceReference* _tmp143_ = NULL;
                  ValaMemberAccess* _tmp144_ = NULL;
                  ValaMemberAccess* _tmp145_;
                  ValaSourceReference* _tmp146_ = NULL;
                  ValaMethodCall* _tmp147_ = NULL;
                  ValaMethodCall* _tmp148_;
                  ValaMethodCall* concat_call;
                  ValaExpression* _tmp149_ = NULL;
                  ValaDataType* _tmp150_ = NULL;
                  ValaCodeNode* _tmp151_ = NULL;
                  gboolean _tmp152_;
                  _tmp142_ = vala_binary_expression_get_left (self);
                  _tmp143_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp144_ = vala_member_access_new (_tmp142_, "concat", _tmp143_);
                  _tmp145_ = _tmp144_;
                  _tmp146_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp147_ = vala_method_call_new ((ValaExpression*) _tmp145_, _tmp146_);
                  _tmp148_ = _tmp147_;
                  _vala_code_node_unref0 (_tmp145_);
                  concat_call = _tmp148_;
                  _tmp149_ = vala_binary_expression_get_right (self);
                  vala_method_call_add_argument (concat_call, _tmp149_);
                  _tmp150_ = vala_expression_get_target_type ((ValaExpression*) self);
                  vala_expression_set_target_type ((ValaExpression*) concat_call, _tmp150_);
                  _tmp151_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                  vala_code_node_replace_expression (_tmp151_, (ValaExpression*) self, (ValaExpression*) concat_call);
                  _tmp152_ = vala_code_node_check ((ValaCodeNode*) concat_call, context);
                  result = _tmp152_;
                  _vala_code_node_unref0 (concat_call);
                  return result;
            }
            _tmp154_ = vala_binary_expression_get_right (self);
            _tmp155_ = vala_expression_get_value_type (_tmp154_);
            if (_tmp155_ == NULL) {
                  _tmp153_ = TRUE;
            } else {
                  ValaExpression* _tmp156_ = NULL;
                  ValaDataType* _tmp157_ = NULL;
                  ValaTypeSymbol* _tmp158_ = NULL;
                  ValaSemanticAnalyzer* _tmp159_ = NULL;
                  ValaTypeSymbol* _tmp160_ = NULL;
                  _tmp156_ = vala_binary_expression_get_right (self);
                  _tmp157_ = vala_expression_get_value_type (_tmp156_);
                  _tmp158_ = vala_data_type_get_data_type (_tmp157_);
                  _tmp159_ = vala_code_context_get_analyzer (context);
                  _tmp160_ = vala_data_type_get_data_type (_tmp159_->string_type);
                  _tmp153_ = _tmp158_ != _tmp160_;
            }
            if (_tmp153_) {
                  ValaSourceReference* _tmp161_ = NULL;
                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                  _tmp161_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  vala_report_error (_tmp161_, "Operands must be strings");
                  result = FALSE;
                  return result;
            }
            _tmp162_ = vala_code_context_get_analyzer (context);
            _tmp163_ = vala_data_type_copy (_tmp162_->string_type);
            _tmp164_ = _tmp163_;
            vala_expression_set_value_type ((ValaExpression*) self, _tmp164_);
            _vala_code_node_unref0 (_tmp164_);
            _tmp166_ = vala_binary_expression_get_left (self);
            _tmp167_ = vala_expression_is_constant (_tmp166_);
            if (_tmp167_) {
                  ValaExpression* _tmp168_ = NULL;
                  gboolean _tmp169_;
                  _tmp168_ = vala_binary_expression_get_right (self);
                  _tmp169_ = vala_expression_is_constant (_tmp168_);
                  _tmp165_ = _tmp169_;
            } else {
                  _tmp165_ = FALSE;
            }
            if (_tmp165_) {
                  ValaDataType* _tmp170_ = NULL;
                  _tmp170_ = vala_expression_get_value_type ((ValaExpression*) self);
                  vala_data_type_set_value_owned (_tmp170_, FALSE);
            } else {
                  ValaDataType* _tmp171_ = NULL;
                  _tmp171_ = vala_expression_get_value_type ((ValaExpression*) self);
                  vala_data_type_set_value_owned (_tmp171_, TRUE);
            }
      } else {
            gboolean _tmp172_ = FALSE;
            gboolean _tmp173_ = FALSE;
            ValaProfile _tmp174_;
            _tmp174_ = vala_code_context_get_profile (context);
            if (_tmp174_ == VALA_PROFILE_DOVA) {
                  ValaExpression* _tmp175_ = NULL;
                  ValaDataType* _tmp176_ = NULL;
                  ValaTypeSymbol* _tmp177_ = NULL;
                  ValaSemanticAnalyzer* _tmp178_ = NULL;
                  ValaTypeSymbol* _tmp179_ = NULL;
                  _tmp175_ = vala_binary_expression_get_left (self);
                  _tmp176_ = vala_expression_get_value_type (_tmp175_);
                  _tmp177_ = vala_data_type_get_data_type (_tmp176_);
                  _tmp178_ = vala_code_context_get_analyzer (context);
                  _tmp179_ = vala_data_type_get_data_type (_tmp178_->list_type);
                  _tmp173_ = _tmp177_ == _tmp179_;
            } else {
                  _tmp173_ = FALSE;
            }
            if (_tmp173_) {
                  _tmp172_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
            } else {
                  _tmp172_ = FALSE;
            }
            if (_tmp172_) {
                  ValaExpression* _tmp180_ = NULL;
                  ValaSourceReference* _tmp181_ = NULL;
                  ValaMemberAccess* _tmp182_ = NULL;
                  ValaMemberAccess* _tmp183_;
                  ValaSourceReference* _tmp184_ = NULL;
                  ValaMethodCall* _tmp185_ = NULL;
                  ValaMethodCall* _tmp186_;
                  ValaMethodCall* concat_call;
                  ValaExpression* _tmp187_ = NULL;
                  ValaDataType* _tmp188_ = NULL;
                  ValaCodeNode* _tmp189_ = NULL;
                  gboolean _tmp190_;
                  _tmp180_ = vala_binary_expression_get_left (self);
                  _tmp181_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp182_ = vala_member_access_new (_tmp180_, "concat", _tmp181_);
                  _tmp183_ = _tmp182_;
                  _tmp184_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                  _tmp185_ = vala_method_call_new ((ValaExpression*) _tmp183_, _tmp184_);
                  _tmp186_ = _tmp185_;
                  _vala_code_node_unref0 (_tmp183_);
                  concat_call = _tmp186_;
                  _tmp187_ = vala_binary_expression_get_right (self);
                  vala_method_call_add_argument (concat_call, _tmp187_);
                  _tmp188_ = vala_expression_get_target_type ((ValaExpression*) self);
                  vala_expression_set_target_type ((ValaExpression*) concat_call, _tmp188_);
                  _tmp189_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                  vala_code_node_replace_expression (_tmp189_, (ValaExpression*) self, (ValaExpression*) concat_call);
                  _tmp190_ = vala_code_node_check ((ValaCodeNode*) concat_call, context);
                  result = _tmp190_;
                  _vala_code_node_unref0 (concat_call);
                  return result;
            } else {
                  gboolean _tmp191_ = FALSE;
                  gboolean _tmp192_ = FALSE;
                  ValaProfile _tmp193_;
                  _tmp193_ = vala_code_context_get_profile (context);
                  if (_tmp193_ != VALA_PROFILE_DOVA) {
                        ValaExpression* _tmp194_ = NULL;
                        ValaDataType* _tmp195_ = NULL;
                        _tmp194_ = vala_binary_expression_get_left (self);
                        _tmp195_ = vala_expression_get_value_type (_tmp194_);
                        _tmp192_ = VALA_IS_ARRAY_TYPE (_tmp195_);
                  } else {
                        _tmp192_ = FALSE;
                  }
                  if (_tmp192_) {
                        _tmp191_ = self->priv->_operator == VALA_BINARY_OPERATOR_PLUS;
                  } else {
                        _tmp191_ = FALSE;
                  }
                  if (_tmp191_) {
                        ValaExpression* _tmp196_ = NULL;
                        ValaDataType* _tmp197_ = NULL;
                        ValaArrayType* _tmp198_;
                        ValaArrayType* array_type;
                        gboolean _tmp199_ = FALSE;
                        ValaExpression* _tmp200_ = NULL;
                        ValaDataType* _tmp201_ = NULL;
                        ValaExpression* _tmp207_ = NULL;
                        ValaDataType* _tmp208_ = NULL;
                        ValaDataType* _tmp209_ = NULL;
                        ValaDataType* _tmp210_;
                        ValaDataType* _tmp211_ = NULL;
                        ValaDataType* _tmp212_;
                        ValaDataType* _tmp213_ = NULL;
                        _tmp196_ = vala_binary_expression_get_left (self);
                        _tmp197_ = vala_expression_get_value_type (_tmp196_);
                        _tmp198_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp197_));
                        array_type = _tmp198_;
                        _tmp200_ = vala_binary_expression_get_right (self);
                        _tmp201_ = vala_expression_get_value_type (_tmp200_);
                        if (_tmp201_ == NULL) {
                              _tmp199_ = TRUE;
                        } else {
                              ValaExpression* _tmp202_ = NULL;
                              ValaDataType* _tmp203_ = NULL;
                              ValaDataType* _tmp204_ = NULL;
                              gboolean _tmp205_;
                              _tmp202_ = vala_binary_expression_get_right (self);
                              _tmp203_ = vala_expression_get_value_type (_tmp202_);
                              _tmp204_ = vala_array_type_get_element_type (array_type);
                              _tmp205_ = vala_data_type_compatible (_tmp203_, _tmp204_);
                              _tmp199_ = !_tmp205_;
                        }
                        if (_tmp199_) {
                              ValaSourceReference* _tmp206_ = NULL;
                              vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                              _tmp206_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                              vala_report_error (_tmp206_, "Incompatible operand");
                              result = FALSE;
                              _vala_code_node_unref0 (array_type);
                              return result;
                        }
                        _tmp207_ = vala_binary_expression_get_right (self);
                        _tmp208_ = vala_array_type_get_element_type (array_type);
                        _tmp209_ = vala_data_type_copy (_tmp208_);
                        _tmp210_ = _tmp209_;
                        vala_expression_set_target_type (_tmp207_, _tmp210_);
                        _vala_code_node_unref0 (_tmp210_);
                        _tmp211_ = vala_data_type_copy ((ValaDataType*) array_type);
                        _tmp212_ = _tmp211_;
                        vala_expression_set_value_type ((ValaExpression*) self, _tmp212_);
                        _vala_code_node_unref0 (_tmp212_);
                        _tmp213_ = vala_expression_get_value_type ((ValaExpression*) self);
                        vala_data_type_set_value_owned (_tmp213_, TRUE);
                        _vala_code_node_unref0 (array_type);
                  } else {
                        gboolean _tmp214_ = FALSE;
                        gboolean _tmp215_ = FALSE;
                        gboolean _tmp216_ = FALSE;
                        if (self->priv->_operator == VALA_BINARY_OPERATOR_PLUS) {
                              _tmp216_ = TRUE;
                        } else {
                              _tmp216_ = self->priv->_operator == VALA_BINARY_OPERATOR_MINUS;
                        }
                        if (_tmp216_) {
                              _tmp215_ = TRUE;
                        } else {
                              _tmp215_ = self->priv->_operator == VALA_BINARY_OPERATOR_MUL;
                        }
                        if (_tmp215_) {
                              _tmp214_ = TRUE;
                        } else {
                              _tmp214_ = self->priv->_operator == VALA_BINARY_OPERATOR_DIV;
                        }
                        if (_tmp214_) {
                              ValaExpression* _tmp217_ = NULL;
                              ValaDataType* _tmp218_ = NULL;
                              ValaDataType* _tmp245_ = NULL;
                              ValaDataType* _tmp253_ = NULL;
                              _tmp217_ = vala_binary_expression_get_left (self);
                              _tmp218_ = vala_expression_get_value_type (_tmp217_);
                              if (VALA_IS_POINTER_TYPE (_tmp218_)) {
                                    ValaExpression* _tmp219_ = NULL;
                                    ValaDataType* _tmp220_ = NULL;
                                    ValaPointerType* _tmp221_;
                                    ValaPointerType* pointer_type;
                                    ValaDataType* _tmp222_ = NULL;
                                    ValaExpression* _tmp224_ = NULL;
                                    ValaDataType* _tmp225_ = NULL;
                                    ValaTypeSymbol* _tmp226_ = NULL;
                                    ValaTypeSymbol* _tmp227_;
                                    ValaStruct* _tmp228_;
                                    ValaStruct* offset_type;
                                    gboolean _tmp229_ = FALSE;
                                    _tmp219_ = vala_binary_expression_get_left (self);
                                    _tmp220_ = vala_expression_get_value_type (_tmp219_);
                                    _tmp221_ = _vala_code_node_ref0 (VALA_POINTER_TYPE (_tmp220_));
                                    pointer_type = _tmp221_;
                                    _tmp222_ = vala_pointer_type_get_base_type (pointer_type);
                                    if (VALA_IS_VOID_TYPE (_tmp222_)) {
                                          ValaSourceReference* _tmp223_ = NULL;
                                          vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                          _tmp223_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                          vala_report_error (_tmp223_, "Pointer arithmetic not supported for `void*'");
                                          result = FALSE;
                                          _vala_code_node_unref0 (pointer_type);
                                          return result;
                                    }
                                    _tmp224_ = vala_binary_expression_get_right (self);
                                    _tmp225_ = vala_expression_get_value_type (_tmp224_);
                                    _tmp226_ = vala_data_type_get_data_type (_tmp225_);
                                    _tmp227_ = _tmp226_;
                                    _tmp228_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp227_) ? ((ValaStruct*) _tmp227_) : NULL);
                                    offset_type = _tmp228_;
                                    if (offset_type != NULL) {
                                          gboolean _tmp230_;
                                          _tmp230_ = vala_struct_is_integer_type (offset_type);
                                          _tmp229_ = _tmp230_;
                                    } else {
                                          _tmp229_ = FALSE;
                                    }
                                    if (_tmp229_) {
                                          gboolean _tmp231_ = FALSE;
                                          if (self->priv->_operator == VALA_BINARY_OPERATOR_PLUS) {
                                                _tmp231_ = TRUE;
                                          } else {
                                                _tmp231_ = self->priv->_operator == VALA_BINARY_OPERATOR_MINUS;
                                          }
                                          if (_tmp231_) {
                                                ValaExpression* _tmp232_ = NULL;
                                                ValaDataType* _tmp233_ = NULL;
                                                ValaDataType* _tmp234_ = NULL;
                                                ValaDataType* _tmp235_;
                                                _tmp232_ = vala_binary_expression_get_left (self);
                                                _tmp233_ = vala_expression_get_value_type (_tmp232_);
                                                _tmp234_ = vala_data_type_copy (_tmp233_);
                                                _tmp235_ = _tmp234_;
                                                vala_expression_set_value_type ((ValaExpression*) self, _tmp235_);
                                                _vala_code_node_unref0 (_tmp235_);
                                          }
                                    } else {
                                          ValaExpression* _tmp236_ = NULL;
                                          ValaDataType* _tmp237_ = NULL;
                                          _tmp236_ = vala_binary_expression_get_right (self);
                                          _tmp237_ = vala_expression_get_value_type (_tmp236_);
                                          if (VALA_IS_POINTER_TYPE (_tmp237_)) {
                                                ValaProfile _tmp238_;
                                                _tmp238_ = vala_code_context_get_profile (context);
                                                if (_tmp238_ == VALA_PROFILE_DOVA) {
                                                      ValaSemanticAnalyzer* _tmp239_ = NULL;
                                                      _tmp239_ = vala_code_context_get_analyzer (context);
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp239_->long_type);
                                                } else {
                                                      ValaSemanticAnalyzer* _tmp240_ = NULL;
                                                      _tmp240_ = vala_code_context_get_analyzer (context);
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp240_->size_t_type);
                                                }
                                          }
                                    }
                                    _vala_code_node_unref0 (offset_type);
                                    _vala_code_node_unref0 (pointer_type);
                              } else {
                                    ValaExpression* _tmp241_ = NULL;
                                    ValaDataType* _tmp242_ = NULL;
                                    ValaExpression* _tmp243_ = NULL;
                                    ValaDataType* _tmp244_ = NULL;
                                    _tmp241_ = vala_binary_expression_get_left (self);
                                    _tmp242_ = vala_expression_get_target_type (_tmp241_);
                                    vala_data_type_set_nullable (_tmp242_, FALSE);
                                    _tmp243_ = vala_binary_expression_get_right (self);
                                    _tmp244_ = vala_expression_get_target_type (_tmp243_);
                                    vala_data_type_set_nullable (_tmp244_, FALSE);
                              }
                              _tmp245_ = vala_expression_get_value_type ((ValaExpression*) self);
                              if (_tmp245_ == NULL) {
                                    ValaSemanticAnalyzer* _tmp246_ = NULL;
                                    ValaExpression* _tmp247_ = NULL;
                                    ValaDataType* _tmp248_ = NULL;
                                    ValaExpression* _tmp249_ = NULL;
                                    ValaDataType* _tmp250_ = NULL;
                                    ValaDataType* _tmp251_ = NULL;
                                    ValaDataType* _tmp252_;
                                    _tmp246_ = vala_code_context_get_analyzer (context);
                                    _tmp247_ = vala_binary_expression_get_left (self);
                                    _tmp248_ = vala_expression_get_target_type (_tmp247_);
                                    _tmp249_ = vala_binary_expression_get_right (self);
                                    _tmp250_ = vala_expression_get_target_type (_tmp249_);
                                    _tmp251_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp246_, _tmp248_, _tmp250_);
                                    _tmp252_ = _tmp251_;
                                    vala_expression_set_value_type ((ValaExpression*) self, _tmp252_);
                                    _vala_code_node_unref0 (_tmp252_);
                              }
                              _tmp253_ = vala_expression_get_value_type ((ValaExpression*) self);
                              if (_tmp253_ == NULL) {
                                    ValaSourceReference* _tmp254_ = NULL;
                                    ValaExpression* _tmp255_ = NULL;
                                    ValaDataType* _tmp256_ = NULL;
                                    gchar* _tmp257_ = NULL;
                                    gchar* _tmp258_;
                                    ValaExpression* _tmp259_ = NULL;
                                    ValaDataType* _tmp260_ = NULL;
                                    gchar* _tmp261_ = NULL;
                                    gchar* _tmp262_;
                                    gchar* _tmp263_ = NULL;
                                    gchar* _tmp264_;
                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                    _tmp254_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                    _tmp255_ = vala_binary_expression_get_left (self);
                                    _tmp256_ = vala_expression_get_value_type (_tmp255_);
                                    _tmp257_ = vala_code_node_to_string ((ValaCodeNode*) _tmp256_);
                                    _tmp258_ = _tmp257_;
                                    _tmp259_ = vala_binary_expression_get_right (self);
                                    _tmp260_ = vala_expression_get_value_type (_tmp259_);
                                    _tmp261_ = vala_code_node_to_string ((ValaCodeNode*) _tmp260_);
                                    _tmp262_ = _tmp261_;
                                    _tmp263_ = g_strdup_printf ("Arithmetic operation not supported for types `%s' and `%s'", _tmp258_, _tmp262_);
                                    _tmp264_ = _tmp263_;
                                    vala_report_error (_tmp254_, _tmp264_);
                                    _g_free0 (_tmp264_);
                                    _g_free0 (_tmp262_);
                                    _g_free0 (_tmp258_);
                                    result = FALSE;
                                    return result;
                              }
                        } else {
                              gboolean _tmp265_ = FALSE;
                              gboolean _tmp266_ = FALSE;
                              gboolean _tmp267_ = FALSE;
                              if (self->priv->_operator == VALA_BINARY_OPERATOR_MOD) {
                                    _tmp267_ = TRUE;
                              } else {
                                    _tmp267_ = self->priv->_operator == VALA_BINARY_OPERATOR_SHIFT_LEFT;
                              }
                              if (_tmp267_) {
                                    _tmp266_ = TRUE;
                              } else {
                                    _tmp266_ = self->priv->_operator == VALA_BINARY_OPERATOR_SHIFT_RIGHT;
                              }
                              if (_tmp266_) {
                                    _tmp265_ = TRUE;
                              } else {
                                    _tmp265_ = self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_XOR;
                              }
                              if (_tmp265_) {
                                    ValaExpression* _tmp268_ = NULL;
                                    ValaDataType* _tmp269_ = NULL;
                                    ValaExpression* _tmp270_ = NULL;
                                    ValaDataType* _tmp271_ = NULL;
                                    ValaSemanticAnalyzer* _tmp272_ = NULL;
                                    ValaExpression* _tmp273_ = NULL;
                                    ValaDataType* _tmp274_ = NULL;
                                    ValaExpression* _tmp275_ = NULL;
                                    ValaDataType* _tmp276_ = NULL;
                                    ValaDataType* _tmp277_ = NULL;
                                    ValaDataType* _tmp278_;
                                    ValaDataType* _tmp279_ = NULL;
                                    _tmp268_ = vala_binary_expression_get_left (self);
                                    _tmp269_ = vala_expression_get_target_type (_tmp268_);
                                    vala_data_type_set_nullable (_tmp269_, FALSE);
                                    _tmp270_ = vala_binary_expression_get_right (self);
                                    _tmp271_ = vala_expression_get_target_type (_tmp270_);
                                    vala_data_type_set_nullable (_tmp271_, FALSE);
                                    _tmp272_ = vala_code_context_get_analyzer (context);
                                    _tmp273_ = vala_binary_expression_get_left (self);
                                    _tmp274_ = vala_expression_get_target_type (_tmp273_);
                                    _tmp275_ = vala_binary_expression_get_right (self);
                                    _tmp276_ = vala_expression_get_target_type (_tmp275_);
                                    _tmp277_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp272_, _tmp274_, _tmp276_);
                                    _tmp278_ = _tmp277_;
                                    vala_expression_set_value_type ((ValaExpression*) self, _tmp278_);
                                    _vala_code_node_unref0 (_tmp278_);
                                    _tmp279_ = vala_expression_get_value_type ((ValaExpression*) self);
                                    if (_tmp279_ == NULL) {
                                          ValaSourceReference* _tmp280_ = NULL;
                                          ValaExpression* _tmp281_ = NULL;
                                          ValaDataType* _tmp282_ = NULL;
                                          gchar* _tmp283_ = NULL;
                                          gchar* _tmp284_;
                                          ValaExpression* _tmp285_ = NULL;
                                          ValaDataType* _tmp286_ = NULL;
                                          gchar* _tmp287_ = NULL;
                                          gchar* _tmp288_;
                                          gchar* _tmp289_ = NULL;
                                          gchar* _tmp290_;
                                          vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                          _tmp280_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                          _tmp281_ = vala_binary_expression_get_left (self);
                                          _tmp282_ = vala_expression_get_value_type (_tmp281_);
                                          _tmp283_ = vala_code_node_to_string ((ValaCodeNode*) _tmp282_);
                                          _tmp284_ = _tmp283_;
                                          _tmp285_ = vala_binary_expression_get_right (self);
                                          _tmp286_ = vala_expression_get_value_type (_tmp285_);
                                          _tmp287_ = vala_code_node_to_string ((ValaCodeNode*) _tmp286_);
                                          _tmp288_ = _tmp287_;
                                          _tmp289_ = g_strdup_printf ("Arithmetic operation not supported for types `%s' and `%s'", _tmp284_, _tmp288_);
                                          _tmp290_ = _tmp289_;
                                          vala_report_error (_tmp280_, _tmp290_);
                                          _g_free0 (_tmp290_);
                                          _g_free0 (_tmp288_);
                                          _g_free0 (_tmp284_);
                                          result = FALSE;
                                          return result;
                                    }
                              } else {
                                    gboolean _tmp291_ = FALSE;
                                    gboolean _tmp292_ = FALSE;
                                    gboolean _tmp293_ = FALSE;
                                    if (self->priv->_operator == VALA_BINARY_OPERATOR_LESS_THAN) {
                                          _tmp293_ = TRUE;
                                    } else {
                                          _tmp293_ = self->priv->_operator == VALA_BINARY_OPERATOR_GREATER_THAN;
                                    }
                                    if (_tmp293_) {
                                          _tmp292_ = TRUE;
                                    } else {
                                          _tmp292_ = self->priv->_operator == VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
                                    }
                                    if (_tmp292_) {
                                          _tmp291_ = TRUE;
                                    } else {
                                          _tmp291_ = self->priv->_operator == VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
                                    }
                                    if (_tmp291_) {
                                          gboolean _tmp294_ = FALSE;
                                          ValaExpression* _tmp295_ = NULL;
                                          ValaDataType* _tmp296_ = NULL;
                                          ValaSemanticAnalyzer* _tmp297_ = NULL;
                                          gboolean _tmp298_;
                                          ValaSemanticAnalyzer* _tmp343_ = NULL;
                                          _tmp295_ = vala_binary_expression_get_left (self);
                                          _tmp296_ = vala_expression_get_value_type (_tmp295_);
                                          _tmp297_ = vala_code_context_get_analyzer (context);
                                          _tmp298_ = vala_data_type_compatible (_tmp296_, _tmp297_->string_type);
                                          if (_tmp298_) {
                                                ValaExpression* _tmp299_ = NULL;
                                                ValaDataType* _tmp300_ = NULL;
                                                ValaSemanticAnalyzer* _tmp301_ = NULL;
                                                gboolean _tmp302_;
                                                _tmp299_ = vala_binary_expression_get_right (self);
                                                _tmp300_ = vala_expression_get_value_type (_tmp299_);
                                                _tmp301_ = vala_code_context_get_analyzer (context);
                                                _tmp302_ = vala_data_type_compatible (_tmp300_, _tmp301_->string_type);
                                                _tmp294_ = _tmp302_;
                                          } else {
                                                _tmp294_ = FALSE;
                                          }
                                          if (_tmp294_) {
                                          } else {
                                                gboolean _tmp303_ = FALSE;
                                                ValaExpression* _tmp304_ = NULL;
                                                ValaDataType* _tmp305_ = NULL;
                                                _tmp304_ = vala_binary_expression_get_left (self);
                                                _tmp305_ = vala_expression_get_value_type (_tmp304_);
                                                if (VALA_IS_POINTER_TYPE (_tmp305_)) {
                                                      ValaExpression* _tmp306_ = NULL;
                                                      ValaDataType* _tmp307_ = NULL;
                                                      _tmp306_ = vala_binary_expression_get_right (self);
                                                      _tmp307_ = vala_expression_get_value_type (_tmp306_);
                                                      _tmp303_ = VALA_IS_POINTER_TYPE (_tmp307_);
                                                } else {
                                                      _tmp303_ = FALSE;
                                                }
                                                if (_tmp303_) {
                                                } else {
                                                      ValaDataType* resulting_type = NULL;
                                                      ValaExpression* _tmp336_ = NULL;
                                                      ValaDataType* _tmp337_ = NULL;
                                                      ValaDataType* _tmp338_;
                                                      ValaExpression* _tmp339_ = NULL;
                                                      ValaDataType* _tmp340_ = NULL;
                                                      ValaExpression* _tmp341_ = NULL;
                                                      ValaDataType* _tmp342_ = NULL;
                                                      if (self->chained) {
                                                            ValaExpression* _tmp308_ = NULL;
                                                            ValaBinaryExpression* _tmp309_;
                                                            ValaBinaryExpression* lbe;
                                                            ValaSemanticAnalyzer* _tmp310_ = NULL;
                                                            ValaExpression* _tmp311_ = NULL;
                                                            ValaDataType* _tmp312_ = NULL;
                                                            ValaExpression* _tmp313_ = NULL;
                                                            ValaDataType* _tmp314_ = NULL;
                                                            ValaDataType* _tmp315_ = NULL;
                                                            _tmp308_ = vala_binary_expression_get_left (self);
                                                            _tmp309_ = _vala_code_node_ref0 (VALA_BINARY_EXPRESSION (_tmp308_));
                                                            lbe = _tmp309_;
                                                            _tmp310_ = vala_code_context_get_analyzer (context);
                                                            _tmp311_ = vala_binary_expression_get_right (lbe);
                                                            _tmp312_ = vala_expression_get_target_type (_tmp311_);
                                                            _tmp313_ = vala_binary_expression_get_right (self);
                                                            _tmp314_ = vala_expression_get_target_type (_tmp313_);
                                                            _tmp315_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp310_, _tmp312_, _tmp314_);
                                                            _vala_code_node_unref0 (resulting_type);
                                                            resulting_type = _tmp315_;
                                                            _vala_code_node_unref0 (lbe);
                                                      } else {
                                                            ValaSemanticAnalyzer* _tmp316_ = NULL;
                                                            ValaExpression* _tmp317_ = NULL;
                                                            ValaDataType* _tmp318_ = NULL;
                                                            ValaExpression* _tmp319_ = NULL;
                                                            ValaDataType* _tmp320_ = NULL;
                                                            ValaDataType* _tmp321_ = NULL;
                                                            _tmp316_ = vala_code_context_get_analyzer (context);
                                                            _tmp317_ = vala_binary_expression_get_left (self);
                                                            _tmp318_ = vala_expression_get_target_type (_tmp317_);
                                                            _tmp319_ = vala_binary_expression_get_right (self);
                                                            _tmp320_ = vala_expression_get_target_type (_tmp319_);
                                                            _tmp321_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp316_, _tmp318_, _tmp320_);
                                                            _vala_code_node_unref0 (resulting_type);
                                                            resulting_type = _tmp321_;
                                                      }
                                                      if (resulting_type == NULL) {
                                                            ValaSourceReference* _tmp322_ = NULL;
                                                            ValaExpression* _tmp323_ = NULL;
                                                            ValaDataType* _tmp324_ = NULL;
                                                            gchar* _tmp325_ = NULL;
                                                            gchar* _tmp326_;
                                                            ValaExpression* _tmp327_ = NULL;
                                                            ValaDataType* _tmp328_ = NULL;
                                                            gchar* _tmp329_ = NULL;
                                                            gchar* _tmp330_;
                                                            gchar* _tmp331_ = NULL;
                                                            gchar* _tmp332_;
                                                            vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                            _tmp322_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp323_ = vala_binary_expression_get_left (self);
                                                            _tmp324_ = vala_expression_get_value_type (_tmp323_);
                                                            _tmp325_ = vala_code_node_to_string ((ValaCodeNode*) _tmp324_);
                                                            _tmp326_ = _tmp325_;
                                                            _tmp327_ = vala_binary_expression_get_right (self);
                                                            _tmp328_ = vala_expression_get_value_type (_tmp327_);
                                                            _tmp329_ = vala_code_node_to_string ((ValaCodeNode*) _tmp328_);
                                                            _tmp330_ = _tmp329_;
                                                            _tmp331_ = g_strdup_printf ("Relational operation not supported for types `%s' and `%s'", _tmp326_, _tmp330_);
                                                            _tmp332_ = _tmp331_;
                                                            vala_report_error (_tmp322_, _tmp332_);
                                                            _g_free0 (_tmp332_);
                                                            _g_free0 (_tmp330_);
                                                            _g_free0 (_tmp326_);
                                                            result = FALSE;
                                                            _vala_code_node_unref0 (resulting_type);
                                                            return result;
                                                      }
                                                      if (!self->chained) {
                                                            ValaExpression* _tmp333_ = NULL;
                                                            ValaDataType* _tmp334_ = NULL;
                                                            ValaDataType* _tmp335_;
                                                            _tmp333_ = vala_binary_expression_get_left (self);
                                                            _tmp334_ = vala_data_type_copy (resulting_type);
                                                            _tmp335_ = _tmp334_;
                                                            vala_expression_set_target_type (_tmp333_, _tmp335_);
                                                            _vala_code_node_unref0 (_tmp335_);
                                                      }
                                                      _tmp336_ = vala_binary_expression_get_right (self);
                                                      _tmp337_ = vala_data_type_copy (resulting_type);
                                                      _tmp338_ = _tmp337_;
                                                      vala_expression_set_target_type (_tmp336_, _tmp338_);
                                                      _vala_code_node_unref0 (_tmp338_);
                                                      _tmp339_ = vala_binary_expression_get_left (self);
                                                      _tmp340_ = vala_expression_get_target_type (_tmp339_);
                                                      vala_data_type_set_nullable (_tmp340_, FALSE);
                                                      _tmp341_ = vala_binary_expression_get_right (self);
                                                      _tmp342_ = vala_expression_get_target_type (_tmp341_);
                                                      vala_data_type_set_nullable (_tmp342_, FALSE);
                                                      _vala_code_node_unref0 (resulting_type);
                                                }
                                          }
                                          _tmp343_ = vala_code_context_get_analyzer (context);
                                          vala_expression_set_value_type ((ValaExpression*) self, _tmp343_->bool_type);
                                    } else {
                                          gboolean _tmp344_ = FALSE;
                                          if (self->priv->_operator == VALA_BINARY_OPERATOR_EQUALITY) {
                                                _tmp344_ = TRUE;
                                          } else {
                                                _tmp344_ = self->priv->_operator == VALA_BINARY_OPERATOR_INEQUALITY;
                                          }
                                          if (_tmp344_) {
                                                gboolean _tmp345_ = FALSE;
                                                ValaExpression* _tmp346_ = NULL;
                                                ValaDataType* _tmp347_ = NULL;
                                                ValaExpression* _tmp348_ = NULL;
                                                ValaDataType* _tmp349_ = NULL;
                                                gboolean _tmp350_;
                                                ValaSemanticAnalyzer* _tmp367_ = NULL;
                                                ValaExpression* _tmp368_ = NULL;
                                                ValaDataType* _tmp369_ = NULL;
                                                ValaExpression* _tmp370_ = NULL;
                                                ValaDataType* _tmp371_ = NULL;
                                                ValaDataType* _tmp372_ = NULL;
                                                ValaDataType* resulting_type;
                                                ValaExpression* _tmp379_ = NULL;
                                                ValaDataType* _tmp380_ = NULL;
                                                ValaExpression* _tmp381_ = NULL;
                                                ValaDataType* _tmp382_ = NULL;
                                                ValaExpression* _tmp383_ = NULL;
                                                ValaDataType* _tmp384_ = NULL;
                                                gboolean _tmp385_;
                                                ValaExpression* _tmp386_ = NULL;
                                                ValaDataType* _tmp387_ = NULL;
                                                gboolean _tmp388_;
                                                gboolean _tmp399_ = FALSE;
                                                ValaExpression* _tmp400_ = NULL;
                                                ValaDataType* _tmp401_ = NULL;
                                                ValaSemanticAnalyzer* _tmp402_ = NULL;
                                                gboolean _tmp403_;
                                                ValaSemanticAnalyzer* _tmp425_ = NULL;
                                                _tmp346_ = vala_binary_expression_get_right (self);
                                                _tmp347_ = vala_expression_get_value_type (_tmp346_);
                                                _tmp348_ = vala_binary_expression_get_left (self);
                                                _tmp349_ = vala_expression_get_value_type (_tmp348_);
                                                _tmp350_ = vala_data_type_compatible (_tmp347_, _tmp349_);
                                                if (!_tmp350_) {
                                                      ValaExpression* _tmp351_ = NULL;
                                                      ValaDataType* _tmp352_ = NULL;
                                                      ValaExpression* _tmp353_ = NULL;
                                                      ValaDataType* _tmp354_ = NULL;
                                                      gboolean _tmp355_;
                                                      _tmp351_ = vala_binary_expression_get_left (self);
                                                      _tmp352_ = vala_expression_get_value_type (_tmp351_);
                                                      _tmp353_ = vala_binary_expression_get_right (self);
                                                      _tmp354_ = vala_expression_get_value_type (_tmp353_);
                                                      _tmp355_ = vala_data_type_compatible (_tmp352_, _tmp354_);
                                                      _tmp345_ = !_tmp355_;
                                                } else {
                                                      _tmp345_ = FALSE;
                                                }
                                                if (_tmp345_) {
                                                      ValaSourceReference* _tmp356_ = NULL;
                                                      ValaExpression* _tmp357_ = NULL;
                                                      ValaDataType* _tmp358_ = NULL;
                                                      gchar* _tmp359_ = NULL;
                                                      gchar* _tmp360_;
                                                      ValaExpression* _tmp361_ = NULL;
                                                      ValaDataType* _tmp362_ = NULL;
                                                      gchar* _tmp363_ = NULL;
                                                      gchar* _tmp364_;
                                                      gchar* _tmp365_ = NULL;
                                                      gchar* _tmp366_;
                                                      _tmp356_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                      _tmp357_ = vala_binary_expression_get_right (self);
                                                      _tmp358_ = vala_expression_get_value_type (_tmp357_);
                                                      _tmp359_ = vala_code_node_to_string ((ValaCodeNode*) _tmp358_);
                                                      _tmp360_ = _tmp359_;
                                                      _tmp361_ = vala_binary_expression_get_left (self);
                                                      _tmp362_ = vala_expression_get_value_type (_tmp361_);
                                                      _tmp363_ = vala_code_node_to_string ((ValaCodeNode*) _tmp362_);
                                                      _tmp364_ = _tmp363_;
                                                      _tmp365_ = g_strdup_printf ("Equality operation: `%s' and `%s' are incompatible", _tmp360_, _tmp364_);
                                                      _tmp366_ = _tmp365_;
                                                      vala_report_error (_tmp356_, _tmp366_);
                                                      _g_free0 (_tmp366_);
                                                      _g_free0 (_tmp364_);
                                                      _g_free0 (_tmp360_);
                                                      vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                      result = FALSE;
                                                      return result;
                                                }
                                                _tmp367_ = vala_code_context_get_analyzer (context);
                                                _tmp368_ = vala_binary_expression_get_left (self);
                                                _tmp369_ = vala_expression_get_target_type (_tmp368_);
                                                _tmp370_ = vala_binary_expression_get_right (self);
                                                _tmp371_ = vala_expression_get_target_type (_tmp370_);
                                                _tmp372_ = vala_semantic_analyzer_get_arithmetic_result_type (_tmp367_, _tmp369_, _tmp371_);
                                                resulting_type = _tmp372_;
                                                if (resulting_type != NULL) {
                                                      ValaExpression* _tmp373_ = NULL;
                                                      ValaDataType* _tmp374_ = NULL;
                                                      ValaDataType* _tmp375_;
                                                      ValaExpression* _tmp376_ = NULL;
                                                      ValaDataType* _tmp377_ = NULL;
                                                      ValaDataType* _tmp378_;
                                                      _tmp373_ = vala_binary_expression_get_left (self);
                                                      _tmp374_ = vala_data_type_copy (resulting_type);
                                                      _tmp375_ = _tmp374_;
                                                      vala_expression_set_target_type (_tmp373_, _tmp375_);
                                                      _vala_code_node_unref0 (_tmp375_);
                                                      _tmp376_ = vala_binary_expression_get_right (self);
                                                      _tmp377_ = vala_data_type_copy (resulting_type);
                                                      _tmp378_ = _tmp377_;
                                                      vala_expression_set_target_type (_tmp376_, _tmp378_);
                                                      _vala_code_node_unref0 (_tmp378_);
                                                }
                                                _tmp379_ = vala_binary_expression_get_left (self);
                                                _tmp380_ = vala_expression_get_target_type (_tmp379_);
                                                vala_data_type_set_value_owned (_tmp380_, FALSE);
                                                _tmp381_ = vala_binary_expression_get_right (self);
                                                _tmp382_ = vala_expression_get_target_type (_tmp381_);
                                                vala_data_type_set_value_owned (_tmp382_, FALSE);
                                                _tmp383_ = vala_binary_expression_get_left (self);
                                                _tmp384_ = vala_expression_get_value_type (_tmp383_);
                                                _tmp385_ = vala_data_type_get_nullable (_tmp384_);
                                                _tmp386_ = vala_binary_expression_get_right (self);
                                                _tmp387_ = vala_expression_get_value_type (_tmp386_);
                                                _tmp388_ = vala_data_type_get_nullable (_tmp387_);
                                                if (_tmp385_ != _tmp388_) {
                                                      ValaExpression* _tmp389_ = NULL;
                                                      ValaDataType* _tmp390_ = NULL;
                                                      gboolean _tmp391_;
                                                      _tmp389_ = vala_binary_expression_get_left (self);
                                                      _tmp390_ = vala_expression_get_value_type (_tmp389_);
                                                      _tmp391_ = vala_data_type_get_nullable (_tmp390_);
                                                      if (!_tmp391_) {
                                                            ValaExpression* _tmp392_ = NULL;
                                                            ValaDataType* _tmp393_ = NULL;
                                                            _tmp392_ = vala_binary_expression_get_left (self);
                                                            _tmp393_ = vala_expression_get_target_type (_tmp392_);
                                                            vala_data_type_set_nullable (_tmp393_, TRUE);
                                                      } else {
                                                            ValaExpression* _tmp394_ = NULL;
                                                            ValaDataType* _tmp395_ = NULL;
                                                            gboolean _tmp396_;
                                                            _tmp394_ = vala_binary_expression_get_right (self);
                                                            _tmp395_ = vala_expression_get_value_type (_tmp394_);
                                                            _tmp396_ = vala_data_type_get_nullable (_tmp395_);
                                                            if (!_tmp396_) {
                                                                  ValaExpression* _tmp397_ = NULL;
                                                                  ValaDataType* _tmp398_ = NULL;
                                                                  _tmp397_ = vala_binary_expression_get_right (self);
                                                                  _tmp398_ = vala_expression_get_target_type (_tmp397_);
                                                                  vala_data_type_set_nullable (_tmp398_, TRUE);
                                                            }
                                                      }
                                                }
                                                _tmp400_ = vala_binary_expression_get_left (self);
                                                _tmp401_ = vala_expression_get_value_type (_tmp400_);
                                                _tmp402_ = vala_code_context_get_analyzer (context);
                                                _tmp403_ = vala_data_type_compatible (_tmp401_, _tmp402_->string_type);
                                                if (_tmp403_) {
                                                      ValaExpression* _tmp404_ = NULL;
                                                      ValaDataType* _tmp405_ = NULL;
                                                      ValaSemanticAnalyzer* _tmp406_ = NULL;
                                                      gboolean _tmp407_;
                                                      _tmp404_ = vala_binary_expression_get_right (self);
                                                      _tmp405_ = vala_expression_get_value_type (_tmp404_);
                                                      _tmp406_ = vala_code_context_get_analyzer (context);
                                                      _tmp407_ = vala_data_type_compatible (_tmp405_, _tmp406_->string_type);
                                                      _tmp399_ = _tmp407_;
                                                } else {
                                                      _tmp399_ = FALSE;
                                                }
                                                if (_tmp399_) {
                                                      ValaProfile _tmp408_;
                                                      _tmp408_ = vala_code_context_get_profile (context);
                                                      if (_tmp408_ == VALA_PROFILE_DOVA) {
                                                            ValaSourceReference* _tmp409_ = NULL;
                                                            ValaMemberAccess* _tmp410_ = NULL;
                                                            ValaMemberAccess* string_ma;
                                                            ValaSourceReference* _tmp411_ = NULL;
                                                            ValaMemberAccess* _tmp412_ = NULL;
                                                            ValaMemberAccess* _tmp413_;
                                                            ValaSourceReference* _tmp414_ = NULL;
                                                            ValaMethodCall* _tmp415_ = NULL;
                                                            ValaMethodCall* _tmp416_;
                                                            ValaMethodCall* equals_call;
                                                            ValaExpression* _tmp417_ = NULL;
                                                            ValaExpression* _tmp418_ = NULL;
                                                            _tmp409_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp410_ = vala_member_access_new_simple ("string", _tmp409_);
                                                            string_ma = _tmp410_;
                                                            vala_member_access_set_qualified (string_ma, TRUE);
                                                            _tmp411_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp412_ = vala_member_access_new ((ValaExpression*) string_ma, "equals", _tmp411_);
                                                            _tmp413_ = _tmp412_;
                                                            _tmp414_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                            _tmp415_ = vala_method_call_new ((ValaExpression*) _tmp413_, _tmp414_);
                                                            _tmp416_ = _tmp415_;
                                                            _vala_code_node_unref0 (_tmp413_);
                                                            equals_call = _tmp416_;
                                                            _tmp417_ = vala_binary_expression_get_left (self);
                                                            vala_method_call_add_argument (equals_call, _tmp417_);
                                                            _tmp418_ = vala_binary_expression_get_right (self);
                                                            vala_method_call_add_argument (equals_call, _tmp418_);
                                                            if (self->priv->_operator == VALA_BINARY_OPERATOR_EQUALITY) {
                                                                  ValaCodeNode* _tmp419_ = NULL;
                                                                  gboolean _tmp420_;
                                                                  _tmp419_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                  vala_code_node_replace_expression (_tmp419_, (ValaExpression*) self, (ValaExpression*) equals_call);
                                                                  _tmp420_ = vala_code_node_check ((ValaCodeNode*) equals_call, context);
                                                                  result = _tmp420_;
                                                                  _vala_code_node_unref0 (equals_call);
                                                                  _vala_code_node_unref0 (string_ma);
                                                                  _vala_code_node_unref0 (resulting_type);
                                                                  return result;
                                                            } else {
                                                                  ValaSourceReference* _tmp421_ = NULL;
                                                                  ValaUnaryExpression* _tmp422_ = NULL;
                                                                  ValaUnaryExpression* not;
                                                                  ValaCodeNode* _tmp423_ = NULL;
                                                                  gboolean _tmp424_;
                                                                  _tmp421_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                  _tmp422_ = vala_unary_expression_new (VALA_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaExpression*) equals_call, _tmp421_);
                                                                  not = _tmp422_;
                                                                  _tmp423_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                  vala_code_node_replace_expression (_tmp423_, (ValaExpression*) self, (ValaExpression*) not);
                                                                  _tmp424_ = vala_code_node_check ((ValaCodeNode*) not, context);
                                                                  result = _tmp424_;
                                                                  _vala_code_node_unref0 (not);
                                                                  _vala_code_node_unref0 (equals_call);
                                                                  _vala_code_node_unref0 (string_ma);
                                                                  _vala_code_node_unref0 (resulting_type);
                                                                  return result;
                                                            }
                                                            _vala_code_node_unref0 (equals_call);
                                                            _vala_code_node_unref0 (string_ma);
                                                      }
                                                }
                                                _tmp425_ = vala_code_context_get_analyzer (context);
                                                vala_expression_set_value_type ((ValaExpression*) self, _tmp425_->bool_type);
                                                _vala_code_node_unref0 (resulting_type);
                                          } else {
                                                gboolean _tmp426_ = FALSE;
                                                if (self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_AND) {
                                                      _tmp426_ = TRUE;
                                                } else {
                                                      _tmp426_ = self->priv->_operator == VALA_BINARY_OPERATOR_BITWISE_OR;
                                                }
                                                if (_tmp426_) {
                                                      ValaExpression* _tmp427_ = NULL;
                                                      ValaDataType* _tmp428_ = NULL;
                                                      ValaExpression* _tmp429_ = NULL;
                                                      ValaDataType* _tmp430_ = NULL;
                                                      ValaExpression* _tmp431_ = NULL;
                                                      ValaDataType* _tmp432_ = NULL;
                                                      ValaDataType* _tmp433_ = NULL;
                                                      ValaDataType* _tmp434_;
                                                      _tmp427_ = vala_binary_expression_get_left (self);
                                                      _tmp428_ = vala_expression_get_target_type (_tmp427_);
                                                      vala_data_type_set_nullable (_tmp428_, FALSE);
                                                      _tmp429_ = vala_binary_expression_get_right (self);
                                                      _tmp430_ = vala_expression_get_target_type (_tmp429_);
                                                      vala_data_type_set_nullable (_tmp430_, FALSE);
                                                      _tmp431_ = vala_binary_expression_get_left (self);
                                                      _tmp432_ = vala_expression_get_target_type (_tmp431_);
                                                      _tmp433_ = vala_data_type_copy (_tmp432_);
                                                      _tmp434_ = _tmp433_;
                                                      vala_expression_set_value_type ((ValaExpression*) self, _tmp434_);
                                                      _vala_code_node_unref0 (_tmp434_);
                                                } else {
                                                      gboolean _tmp435_ = FALSE;
                                                      if (self->priv->_operator == VALA_BINARY_OPERATOR_AND) {
                                                            _tmp435_ = TRUE;
                                                      } else {
                                                            _tmp435_ = self->priv->_operator == VALA_BINARY_OPERATOR_OR;
                                                      }
                                                      if (_tmp435_) {
                                                            gboolean _tmp436_ = FALSE;
                                                            ValaExpression* _tmp437_ = NULL;
                                                            ValaDataType* _tmp438_ = NULL;
                                                            ValaSemanticAnalyzer* _tmp439_ = NULL;
                                                            gboolean _tmp440_;
                                                            ValaExpression* _tmp446_ = NULL;
                                                            ValaDataType* _tmp447_ = NULL;
                                                            ValaExpression* _tmp448_ = NULL;
                                                            ValaDataType* _tmp449_ = NULL;
                                                            ValaSemanticAnalyzer* _tmp450_ = NULL;
                                                            _tmp437_ = vala_binary_expression_get_left (self);
                                                            _tmp438_ = vala_expression_get_value_type (_tmp437_);
                                                            _tmp439_ = vala_code_context_get_analyzer (context);
                                                            _tmp440_ = vala_data_type_compatible (_tmp438_, _tmp439_->bool_type);
                                                            if (!_tmp440_) {
                                                                  _tmp436_ = TRUE;
                                                            } else {
                                                                  ValaExpression* _tmp441_ = NULL;
                                                                  ValaDataType* _tmp442_ = NULL;
                                                                  ValaSemanticAnalyzer* _tmp443_ = NULL;
                                                                  gboolean _tmp444_;
                                                                  _tmp441_ = vala_binary_expression_get_right (self);
                                                                  _tmp442_ = vala_expression_get_value_type (_tmp441_);
                                                                  _tmp443_ = vala_code_context_get_analyzer (context);
                                                                  _tmp444_ = vala_data_type_compatible (_tmp442_, _tmp443_->bool_type);
                                                                  _tmp436_ = !_tmp444_;
                                                            }
                                                            if (_tmp436_) {
                                                                  ValaSourceReference* _tmp445_ = NULL;
                                                                  vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                  _tmp445_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                  vala_report_error (_tmp445_, "Operands must be boolean");
                                                            }
                                                            _tmp446_ = vala_binary_expression_get_left (self);
                                                            _tmp447_ = vala_expression_get_target_type (_tmp446_);
                                                            vala_data_type_set_nullable (_tmp447_, FALSE);
                                                            _tmp448_ = vala_binary_expression_get_right (self);
                                                            _tmp449_ = vala_expression_get_target_type (_tmp448_);
                                                            vala_data_type_set_nullable (_tmp449_, FALSE);
                                                            _tmp450_ = vala_code_context_get_analyzer (context);
                                                            vala_expression_set_value_type ((ValaExpression*) self, _tmp450_->bool_type);
                                                      } else {
                                                            if (self->priv->_operator == VALA_BINARY_OPERATOR_IN) {
                                                                  gboolean _tmp451_ = FALSE;
                                                                  ValaExpression* _tmp452_ = NULL;
                                                                  ValaDataType* _tmp453_ = NULL;
                                                                  ValaSemanticAnalyzer* _tmp454_ = NULL;
                                                                  gboolean _tmp455_;
                                                                  ValaSemanticAnalyzer* _tmp521_ = NULL;
                                                                  _tmp452_ = vala_binary_expression_get_left (self);
                                                                  _tmp453_ = vala_expression_get_value_type (_tmp452_);
                                                                  _tmp454_ = vala_code_context_get_analyzer (context);
                                                                  _tmp455_ = vala_data_type_compatible (_tmp453_, _tmp454_->int_type);
                                                                  if (_tmp455_) {
                                                                        ValaExpression* _tmp456_ = NULL;
                                                                        ValaDataType* _tmp457_ = NULL;
                                                                        ValaSemanticAnalyzer* _tmp458_ = NULL;
                                                                        gboolean _tmp459_;
                                                                        _tmp456_ = vala_binary_expression_get_right (self);
                                                                        _tmp457_ = vala_expression_get_value_type (_tmp456_);
                                                                        _tmp458_ = vala_code_context_get_analyzer (context);
                                                                        _tmp459_ = vala_data_type_compatible (_tmp457_, _tmp458_->int_type);
                                                                        _tmp451_ = _tmp459_;
                                                                  } else {
                                                                        _tmp451_ = FALSE;
                                                                  }
                                                                  if (_tmp451_) {
                                                                        ValaExpression* _tmp460_ = NULL;
                                                                        ValaDataType* _tmp461_ = NULL;
                                                                        ValaExpression* _tmp462_ = NULL;
                                                                        ValaDataType* _tmp463_ = NULL;
                                                                        _tmp460_ = vala_binary_expression_get_left (self);
                                                                        _tmp461_ = vala_expression_get_target_type (_tmp460_);
                                                                        vala_data_type_set_nullable (_tmp461_, FALSE);
                                                                        _tmp462_ = vala_binary_expression_get_right (self);
                                                                        _tmp463_ = vala_expression_get_target_type (_tmp462_);
                                                                        vala_data_type_set_nullable (_tmp463_, FALSE);
                                                                  } else {
                                                                        ValaExpression* _tmp464_ = NULL;
                                                                        ValaDataType* _tmp465_ = NULL;
                                                                        _tmp464_ = vala_binary_expression_get_right (self);
                                                                        _tmp465_ = vala_expression_get_value_type (_tmp464_);
                                                                        if (VALA_IS_ARRAY_TYPE (_tmp465_)) {
                                                                              ValaExpression* _tmp466_ = NULL;
                                                                              ValaDataType* _tmp467_ = NULL;
                                                                              ValaExpression* _tmp468_ = NULL;
                                                                              ValaDataType* _tmp469_ = NULL;
                                                                              ValaDataType* _tmp470_ = NULL;
                                                                              gboolean _tmp471_;
                                                                              _tmp466_ = vala_binary_expression_get_left (self);
                                                                              _tmp467_ = vala_expression_get_value_type (_tmp466_);
                                                                              _tmp468_ = vala_binary_expression_get_right (self);
                                                                              _tmp469_ = vala_expression_get_value_type (_tmp468_);
                                                                              _tmp470_ = vala_array_type_get_element_type (VALA_ARRAY_TYPE (_tmp469_));
                                                                              _tmp471_ = vala_data_type_compatible (_tmp467_, _tmp470_);
                                                                              if (!_tmp471_) {
                                                                                    ValaSourceReference* _tmp472_ = NULL;
                                                                                    ValaExpression* _tmp473_ = NULL;
                                                                                    ValaDataType* _tmp474_ = NULL;
                                                                                    gchar* _tmp475_ = NULL;
                                                                                    gchar* _tmp476_;
                                                                                    ValaExpression* _tmp477_ = NULL;
                                                                                    ValaDataType* _tmp478_ = NULL;
                                                                                    gchar* _tmp479_ = NULL;
                                                                                    gchar* _tmp480_;
                                                                                    gchar* _tmp481_ = NULL;
                                                                                    gchar* _tmp482_;
                                                                                    _tmp472_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp473_ = vala_binary_expression_get_left (self);
                                                                                    _tmp474_ = vala_expression_get_value_type (_tmp473_);
                                                                                    _tmp475_ = vala_code_node_to_string ((ValaCodeNode*) _tmp474_);
                                                                                    _tmp476_ = _tmp475_;
                                                                                    _tmp477_ = vala_binary_expression_get_right (self);
                                                                                    _tmp478_ = vala_expression_get_value_type (_tmp477_);
                                                                                    _tmp479_ = vala_code_node_to_string ((ValaCodeNode*) _tmp478_);
                                                                                    _tmp480_ = _tmp479_;
                                                                                    _tmp481_ = g_strdup_printf ("Cannot look for `%s' in `%s'", _tmp476_, _tmp480_);
                                                                                    _tmp482_ = _tmp481_;
                                                                                    vala_report_error (_tmp472_, _tmp482_);
                                                                                    _g_free0 (_tmp482_);
                                                                                    _g_free0 (_tmp480_);
                                                                                    _g_free0 (_tmp476_);
                                                                              }
                                                                        } else {
                                                                              ValaExpression* _tmp483_ = NULL;
                                                                              ValaDataType* _tmp484_ = NULL;
                                                                              ValaSymbol* _tmp485_ = NULL;
                                                                              ValaSymbol* _tmp486_;
                                                                              ValaMethod* contains_method;
                                                                              ValaList* _tmp494_ = NULL;
                                                                              ValaList* _tmp495_;
                                                                              gint _tmp496_;
                                                                              gboolean _tmp497_;
                                                                              ValaDataType* _tmp503_ = NULL;
                                                                              ValaSemanticAnalyzer* _tmp504_ = NULL;
                                                                              gboolean _tmp505_;
                                                                              ValaExpression* _tmp511_ = NULL;
                                                                              ValaSourceReference* _tmp512_ = NULL;
                                                                              ValaMemberAccess* _tmp513_ = NULL;
                                                                              ValaMemberAccess* _tmp514_;
                                                                              ValaSourceReference* _tmp515_ = NULL;
                                                                              ValaMethodCall* _tmp516_ = NULL;
                                                                              ValaMethodCall* _tmp517_;
                                                                              ValaMethodCall* contains_call;
                                                                              ValaExpression* _tmp518_ = NULL;
                                                                              ValaCodeNode* _tmp519_ = NULL;
                                                                              gboolean _tmp520_;
                                                                              _tmp483_ = vala_binary_expression_get_right (self);
                                                                              _tmp484_ = vala_expression_get_value_type (_tmp483_);
                                                                              _tmp485_ = vala_data_type_get_member (_tmp484_, "contains");
                                                                              _tmp486_ = _tmp485_;
                                                                              contains_method = VALA_IS_METHOD (_tmp486_) ? ((ValaMethod*) _tmp486_) : NULL;
                                                                              if (contains_method == NULL) {
                                                                                    ValaSourceReference* _tmp487_ = NULL;
                                                                                    ValaExpression* _tmp488_ = NULL;
                                                                                    ValaDataType* _tmp489_ = NULL;
                                                                                    gchar* _tmp490_ = NULL;
                                                                                    gchar* _tmp491_;
                                                                                    gchar* _tmp492_ = NULL;
                                                                                    gchar* _tmp493_;
                                                                                    _tmp487_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp488_ = vala_binary_expression_get_right (self);
                                                                                    _tmp489_ = vala_expression_get_value_type (_tmp488_);
                                                                                    _tmp490_ = vala_code_node_to_string ((ValaCodeNode*) _tmp489_);
                                                                                    _tmp491_ = _tmp490_;
                                                                                    _tmp492_ = g_strdup_printf ("`%s' does not have a `contains' method", _tmp491_);
                                                                                    _tmp493_ = _tmp492_;
                                                                                    vala_report_error (_tmp487_, _tmp493_);
                                                                                    _g_free0 (_tmp493_);
                                                                                    _g_free0 (_tmp491_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp494_ = vala_method_get_parameters (contains_method);
                                                                              _tmp495_ = _tmp494_;
                                                                              _tmp496_ = vala_collection_get_size ((ValaCollection*) _tmp495_);
                                                                              _tmp497_ = _tmp496_ != 1;
                                                                              _vala_iterable_unref0 (_tmp495_);
                                                                              if (_tmp497_) {
                                                                                    ValaSourceReference* _tmp498_ = NULL;
                                                                                    gchar* _tmp499_ = NULL;
                                                                                    gchar* _tmp500_;
                                                                                    gchar* _tmp501_ = NULL;
                                                                                    gchar* _tmp502_;
                                                                                    _tmp498_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp499_ = vala_symbol_get_full_name ((ValaSymbol*) contains_method);
                                                                                    _tmp500_ = _tmp499_;
                                                                                    _tmp501_ = g_strdup_printf ("`%s' must have one parameter", _tmp500_);
                                                                                    _tmp502_ = _tmp501_;
                                                                                    vala_report_error (_tmp498_, _tmp502_);
                                                                                    _g_free0 (_tmp502_);
                                                                                    _g_free0 (_tmp500_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp503_ = vala_method_get_return_type (contains_method);
                                                                              _tmp504_ = vala_code_context_get_analyzer (context);
                                                                              _tmp505_ = vala_data_type_compatible (_tmp503_, _tmp504_->bool_type);
                                                                              if (!_tmp505_) {
                                                                                    ValaSourceReference* _tmp506_ = NULL;
                                                                                    gchar* _tmp507_ = NULL;
                                                                                    gchar* _tmp508_;
                                                                                    gchar* _tmp509_ = NULL;
                                                                                    gchar* _tmp510_;
                                                                                    _tmp506_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                                    _tmp507_ = vala_symbol_get_full_name ((ValaSymbol*) contains_method);
                                                                                    _tmp508_ = _tmp507_;
                                                                                    _tmp509_ = g_strdup_printf ("`%s' must return a boolean value", _tmp508_);
                                                                                    _tmp510_ = _tmp509_;
                                                                                    vala_report_error (_tmp506_, _tmp510_);
                                                                                    _g_free0 (_tmp510_);
                                                                                    _g_free0 (_tmp508_);
                                                                                    vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
                                                                                    result = FALSE;
                                                                                    _vala_code_node_unref0 (contains_method);
                                                                                    return result;
                                                                              }
                                                                              _tmp511_ = vala_binary_expression_get_right (self);
                                                                              _tmp512_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                              _tmp513_ = vala_member_access_new (_tmp511_, "contains", _tmp512_);
                                                                              _tmp514_ = _tmp513_;
                                                                              _tmp515_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
                                                                              _tmp516_ = vala_method_call_new ((ValaExpression*) _tmp514_, _tmp515_);
                                                                              _tmp517_ = _tmp516_;
                                                                              _vala_code_node_unref0 (_tmp514_);
                                                                              contains_call = _tmp517_;
                                                                              _tmp518_ = vala_binary_expression_get_left (self);
                                                                              vala_method_call_add_argument (contains_call, _tmp518_);
                                                                              _tmp519_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
                                                                              vala_code_node_replace_expression (_tmp519_, (ValaExpression*) self, (ValaExpression*) contains_call);
                                                                              _tmp520_ = vala_code_node_check ((ValaCodeNode*) contains_call, context);
                                                                              result = _tmp520_;
                                                                              _vala_code_node_unref0 (contains_call);
                                                                              _vala_code_node_unref0 (contains_method);
                                                                              return result;
                                                                        }
                                                                  }
                                                                  _tmp521_ = vala_code_context_get_analyzer (context);
                                                                  vala_expression_set_value_type ((ValaExpression*) self, _tmp521_->bool_type);
                                                            } else {
                                                                  g_assert_not_reached ();
                                                            }
                                                      }
                                                }
                                          }
                                    }
                              }
                        }
                  }
            }
      }
      _tmp522_ = vala_code_node_get_error ((ValaCodeNode*) self);
      result = !_tmp522_;
      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