[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_lvalue.tc,1.47,1.48
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_lvalue.tc,1.47,1.48 |
Date: |
Fri, 30 May 2003 01:16:02 -0400 |
Update of /cvsroot/dotgnu-pnet/pnet/cscc/csharp
In directory subversions:/tmp/cvs-serv24016/cscc/csharp
Modified Files:
cs_lvalue.tc
Log Message:
Implement code generation and semantic analysis for ILNode_DerefField.
Index: cs_lvalue.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_lvalue.tc,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -r1.47 -r1.48
*** cs_lvalue.tc 30 May 2003 00:43:15 -0000 1.47
--- cs_lvalue.tc 30 May 2003 05:16:00 -0000 1.48
***************
*** 1529,1536 ****
ILNode_SemAnalysis(ILNode_DerefField)
{
- /* TODO */
CSSemValue value;
CCUnsafeMessage(info, (ILNode *)node, "unsafe field dereference");
! CSSemSetRValue(value, ILType_Int32);
return value;
}
--- 1529,1587 ----
ILNode_SemAnalysis(ILNode_DerefField)
{
CSSemValue value;
+ ILType *type;
+ char *name;
+ ILClass *classInfo;
+ ILField *field;
+
+ /* Emit an "unsafe" message if necessary */
CCUnsafeMessage(info, (ILNode *)node, "unsafe field dereference");
!
! /* Perform semantic analysis on the left hand sub-expression */
! value = ILNode_SemAnalysis(node->expr1, info, &(node->expr1));
! if(!CSSemIsValue(value) || !ILType_IsPointer(CSSemGetType(value)))
! {
! CCErrorOnLine(yygetfilename(node->expr1),
yygetlinenum(node->expr1),
! "pointer value expected");
! CSSemSetLValue(value, ILType_Int32);
! return value;
! }
!
! /* Make sure that this is a pointer to a struct value type */
! type = ILTypeStripPrefixes(ILType_Ref(CSSemGetType(value)));
! if(!ILType_IsValueType(type) || ILTypeIsEnum(type))
! {
! CCErrorOnLine(yygetfilename(node->expr1),
yygetlinenum(node->expr1),
! "`%s' is not a struct type",
CSTypeToName(type));
! CSSemSetLValue(value, ILType_Int32);
! return value;
! }
!
! /* Resolve the field reference */
! name = ILQualIdentName(node->expr2, 0);
! classInfo = ILType_ToValueType(type);
! field = 0;
! while((field = (ILField *)ILClassNextMemberByKind
! (classInfo, (ILMember *)field,
IL_META_MEMBERKIND_FIELD)) != 0)
! {
! if(!ILField_IsStatic(field) && !strcmp(ILField_Name(field),
name))
! {
! break;
! }
! }
! if(!field)
! {
! CCErrorOnLine(yygetfilename(node->expr1),
yygetlinenum(node->expr1),
! "`%s' is not a member of `%s'",
! name, CSTypeToName(type));
! CSSemSetLValue(value, ILType_Int32);
! return value;
! }
!
! /* Set up the node for code generation and return */
! type = ILField_Type(field);
! node->field = field;
! node->machineType = ILTypeToMachineType(type);
! CSSemSetLValue(value, type);
return value;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_lvalue.tc,1.47,1.48,
Rhys Weatherley <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: pnet/codegen cg_lvalue.tc,1.21,1.22 cg_nodes.tc,1.79,1.80
- Next by Date:
[Dotgnu-pnet-commits] CVS: ml-pnet/class Makefile.am,1.4,1.5
- Previous by thread:
[Dotgnu-pnet-commits] CVS: pnet/codegen cg_lvalue.tc,1.21,1.22 cg_nodes.tc,1.79,1.80
- Next by thread:
[Dotgnu-pnet-commits] CVS: ml-pnet/class Makefile.am,1.4,1.5
- Index(es):