Typechecker
- Moved `attemptPointerAriehmeticCoercion(Value, Value)` to class-level and made privately accessible
This commit is contained in:
parent
554b9af0da
commit
8490f3d7fd
|
@ -682,6 +682,52 @@ public final class TypeChecker
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given two Value-based instructions this will firstly check if
|
||||
* at least one of the two is of type Pointer, then checks if the
|
||||
* remaining instruction is an of type Integer - the remaining instruction
|
||||
* will then be coerced into a pointer.
|
||||
*
|
||||
* If both are Pointers, neither are pointers or one or the other is
|
||||
* a Pointer and another is non-Integer then nothing will be coerced.
|
||||
* and this function is effectively a no-op.
|
||||
*
|
||||
* Params:
|
||||
* vInstr1 = the first instruction
|
||||
* vInstr2 = the second instruction
|
||||
*/
|
||||
private void attemptPointerAriehmeticCoercion(Value vInstr1, Value vInstr2)
|
||||
{
|
||||
// Get the types of `vInstr1` and `vInstr2` respectively
|
||||
Type t1 = vInstr1.getInstrType();
|
||||
Type t2 = vInstr2.getInstrType();
|
||||
|
||||
// TODO: Check if T1 is a pointer and then if T2 is an integer make it a pointer
|
||||
if(cast(Pointer)t1 && cast(Integer)t2)
|
||||
{
|
||||
Pointer t1Ptr = cast(Pointer)t1;
|
||||
|
||||
Type coercedType = new Pointer(t1Ptr.getReferredType());
|
||||
vInstr2.setInstrType(coercedType);
|
||||
}
|
||||
// TODO: Else check if T2 is a pointer and then if T1 is an integer and make it a pointer
|
||||
else if(cast(Pointer)t2 && cast(Integer)t2)
|
||||
{
|
||||
Pointer t2Ptr = cast(Pointer)t2;
|
||||
|
||||
Type coercedType = new Pointer(t2Ptr.getReferredType());
|
||||
vInstr1.setInstrType(coercedType);
|
||||
}
|
||||
else if(cast(Pointer)t1 && cast(Pointer)t2)
|
||||
{
|
||||
// Do nothing
|
||||
// TODO: Remove this branch
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void typeCheckThing(DNode dnode)
|
||||
|
@ -857,38 +903,11 @@ public final class TypeChecker
|
|||
Type vLhsType = vLhsInstr.getInstrType();
|
||||
|
||||
|
||||
void attemptPointerAriehmeticCoercion(Value vInstr1, Value vInstr2)
|
||||
{
|
||||
// Get the types of `vInstr1` and `vInstr2` respectively
|
||||
Type t1 = vInstr1.getInstrType();
|
||||
Type t2 = vInstr2.getInstrType();
|
||||
// TODO: Hoist up and document
|
||||
// TODO: Call this before the `isSameType()` check and before we do
|
||||
// ... `vRhsType` and `vLhsType` above, we want toe most updated types (if any)
|
||||
|
||||
// TODO: Check if T1 is a pointer and then if T2 is an integer make it a pointer
|
||||
if(cast(Pointer)t1 && cast(Integer)t2)
|
||||
{
|
||||
Pointer t1Ptr = cast(Pointer)t1;
|
||||
|
||||
Type coercedType = new Pointer(t1Ptr.getReferredType());
|
||||
vInstr2.setInstrType(coercedType);
|
||||
}
|
||||
// TODO: Else check if T2 is a pointer and then if T1 is an integer and make it a pointer
|
||||
else if(cast(Pointer)t2 && cast(Integer)t2)
|
||||
{
|
||||
Pointer t2Ptr = cast(Pointer)t2;
|
||||
|
||||
Type coercedType = new Pointer(t2Ptr.getReferredType());
|
||||
vInstr1.setInstrType(coercedType);
|
||||
}
|
||||
else if(cast(Pointer)t1 && cast(Pointer)t2)
|
||||
{
|
||||
// Do nothing
|
||||
// TODO: Remove this branch
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* TODO
|
||||
|
|
Loading…
Reference in New Issue