//-------------------------------------------------------------------//
//                                                                   //
// Análisis Semántico:                                               //
//                                                                   //
//	- Objetos nativos					     //
// 	- Miembros nativos					     //
// 	- Literales       					     //
// 	- Break           					     //
// 	- Continue        					     //
// 	- Let             					     //
// 	- Is/Is not       					     //
// 	- If/Else         					     //
// 	- Id atomico      					     //
// 	- Acceso a miembros					     //
// 	- Asignacion      					     //
//                                                                   //
//-------------------------------------------------------------------//

	// definiciones de algunos objetos nativos 
	
abstract native object::object{}
native null::object{}
abstract native boolean::object{}
	
	// objeto nativo inválido
	
native error::object{
}
	
	// miembro nativo inválido

native system::object{
	error: native
}

	// uso de literales sin el objeto nativo correspondiente
	
miembro0: 5+3.1416+"x"+[true,false]

	// padres invalidos
	
miembro1: null	
objeto1::objetoInvalido,miembro1,object,object{
}

	// dependencias cíclicas de paternidad

objeto2::object,objeto2{
}

objeto3::objeto4,object{
}

objeto4::objeto3,object{
}

	// redefinición de miembros solapados
	
objeto5::object{
	x: true
}
objeto6::object{
	x: false
	y: false
}
objeto7::object{
	y: true
}
objeto8::objeto5,objeto6,objeto7{
}

	// redefinición de miembros variables
	
objeto9::object{
	var x: null
}
objeto10::objeto9{
	x: null
}


	// redefinición de miembros compartidos
	
objeto11::object{
	shared x: null
}
objeto12::objeto11{
	x: null
}

	// solapamiento sobre miembros compartidos
	
objeto13::object{
	shared x: null
}
objeto14::object{
	x: null
}
objeto15::objeto13,objeto14{
	shared x: resend@x@objeto13
}

	// objetos anónimos abstractos u ocultos
	
abstract object{
}
hidden object{
}

	// miembros nativos en objetos no nativos
	
object{
	x: native
}

	// miembros abstractos en objetos no abstractos
	
object{
	x: abstract	
}

	// objetos o miembros repetidos
	
objeto16dup::object{
	xdup: null
	xdup: null
}
objeto16dup::object{
	xdup(a,b): null
	xdup(a,b): null
}
	// parametros repetidos
	
miembro16(ydup,ydup): null

	// variables locales repetidas
	
miembro31: let zdup,zdup in null

	// break y continue no contenidos en ningún bucle
	
miembro32: break
miembro33: continue

	// is/is not aplicado a un identificador no asociado a un objeto3
	
miembro34: miembro31 is miembro32
miembro35: miembro31 is not miembro32

	// resend
	
objeto31::object{
	x: null
}
objeto32::objeto31{
	a: resend
	b: resend@y
	c: resend@x@error
}

	// id atomico
	
miembro39: unError
miembro310: miembro39(null)
miembro311: let x=false in x(true)

	// acceso a miembro3s

abstract objeto33::object{
	x: abstract
}
miembro312: objeto33.x	// acceso a miembro3 abstracto

objeto34::object{
	x: false
}
miembro313: objeto34.y	// acceso a miembro3 invalido
miembro314: objeto34.x(null) // acceso a miembro3 invalido

	// asignacion
	
miembro327: true and false=true
miembro328: (if true then null)=null
miembro329: objeto34=null
miembro330: objeto34.x=null

	// emparejamiento if-else

miembro340:
	if null then null
	else null

miembro350:
	if null then null
	else if null then null
	else null

miembro370:
	null
	else null		// error (else sin if)