Beispiel #1
0
    internal override CodeElement ToCodeElement()
    {
        if (val.ptr == null)
        {
            return(new CodeElementUIntInt(1, val.Int));
        }
        TPointerXT xt = val.ptr as TPointerXT;

        if (xt != null)
        {
            if (val.x != 0)
            {
                throw new Exception(
                          "Cannot compile XT: non-zero offset");
            }
            return(new CodeElementUIntInt(1, xt.Target.Slot));
        }
        TPointerBlob bp = val.ptr as TPointerBlob;

        if (bp != null)
        {
            return(new CodeElementUIntInt(1,
                                          val.x + bp.Blob.Address));
        }
        TPointerExpr cx = val.ptr as TPointerExpr;

        if (cx != null)
        {
            return(new CodeElementUIntExpr(1, cx, val.x));
        }
        throw new Exception(String.Format(
                                "Cannot embed constant (type = {0})",
                                val.ptr.GetType().FullName));
    }
Beispiel #2
0
    internal override Word GetReference(T0Comp ctx)
    {
        TPointerXT xt = val.ptr as TPointerXT;

        if (xt == null)
        {
            return(null);
        }
        xt.Resolve(ctx);
        return(xt.Target);
    }
Beispiel #3
0
    /*
     * Convert this value to an XT. On failure, an exception is thrown.
     */
    internal TPointerXT ToXT()
    {
        TPointerXT xt = ptr as TPointerXT;

        if (xt == null)
        {
            throw new Exception(
                      "value is not an xt: " + ToString());
        }
        return(xt);
    }
 /*
  * Add a "call" opcode whose target is an XT value (which may be
  * resolved or as yet unresolved).
  */
 internal void Call(TPointerXT xt)
 {
     if (xt.Target == null)
     {
         Add(new OpcodeCall(), xt.Name);
     }
     else
     {
         Add(new OpcodeCall(xt.Target));
     }
 }
    internal override bool Equals(TPointerBase tp)
    {
        TPointerXT tx = tp as TPointerXT;

        return(tx != null && Name == tx.Name);
    }