diff dmd2/irstate.c @ 1452:638d16625da2

LDC 2 compiles again.
author Robert Clipsham <robert@octarineparrot.com>
date Sat, 30 May 2009 17:23:32 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dmd2/irstate.c	Sat May 30 17:23:32 2009 +0100
@@ -0,0 +1,164 @@
+
+// Compiler implementation of the D programming language
+// Copyright (c) 1999-2008 by Digital Mars
+// All Rights Reserved
+// written by Walter Bright
+// http://www.digitalmars.com
+
+#include <stdio.h>
+
+#include "irstate.h"
+
+IRState::IRState(IRState *irs, Statement *s)
+{
+    prev = irs;
+    statement = s;
+    symbol = NULL;
+    breakBlock = NULL;
+    contBlock = NULL;
+    switchBlock = NULL;
+    defaultBlock = NULL;
+    ident = NULL;
+    ehidden = NULL;
+    startaddress = NULL;
+    if (irs)
+    {
+	m = irs->m;
+	shidden = irs->shidden;
+	sclosure = irs->sclosure;
+	sthis = irs->sthis;
+	blx = irs->blx;
+	deferToObj = irs->deferToObj;
+    }
+    else
+    {
+	m = NULL;
+	shidden = NULL;
+	sclosure = NULL;
+	sthis = NULL;
+	blx = NULL;
+	deferToObj = NULL;
+    }
+}
+
+IRState::IRState(IRState *irs, Dsymbol *s)
+{
+    prev = irs;
+    statement = NULL;
+    symbol = s;
+    breakBlock = NULL;
+    contBlock = NULL;
+    switchBlock = NULL;
+    defaultBlock = NULL;
+    ident = NULL;
+    ehidden = NULL;
+    startaddress = NULL;
+    if (irs)
+    {
+	m = irs->m;
+	shidden = irs->shidden;
+	sclosure = irs->sclosure;
+	sthis = irs->sthis;
+	blx = irs->blx;
+	deferToObj = irs->deferToObj;
+    }
+    else
+    {
+	m = NULL;
+	shidden = NULL;
+	sclosure = NULL;
+	sthis = NULL;
+	blx = NULL;
+	deferToObj = NULL;
+    }
+}
+
+IRState::IRState(Module *m, Dsymbol *s)
+{
+    prev = NULL;
+    statement = NULL;
+    this->m = m;
+    symbol = s;
+    breakBlock = NULL;
+    contBlock = NULL;
+    switchBlock = NULL;
+    defaultBlock = NULL;
+    ident = NULL;
+    ehidden = NULL;
+    shidden = NULL;
+    sclosure = NULL;
+    sthis = NULL;
+    blx = NULL;
+    deferToObj = NULL;
+    startaddress = NULL;
+}
+
+block *IRState::getBreakBlock(Identifier *ident)
+{
+    IRState *bc;
+
+    for (bc = this; bc; bc = bc->prev)
+    {
+	if (ident)
+	{
+	    if (bc->prev && bc->prev->ident == ident)
+		return bc->breakBlock;
+	}
+	else if (bc->breakBlock)
+	    return bc->breakBlock;
+    }
+    return NULL;
+}
+
+block *IRState::getContBlock(Identifier *ident)
+{
+    IRState *bc;
+
+    for (bc = this; bc; bc = bc->prev)
+    {
+	if (ident)
+	{
+	    if (bc->prev && bc->prev->ident == ident)
+		return bc->contBlock;
+	}
+	else if (bc->contBlock)
+	    return bc->contBlock;
+    }
+    return NULL;
+}
+
+block *IRState::getSwitchBlock()
+{
+    IRState *bc;
+
+    for (bc = this; bc; bc = bc->prev)
+    {
+	if (bc->switchBlock)
+	    return bc->switchBlock;
+    }
+    return NULL;
+}
+
+block *IRState::getDefaultBlock()
+{
+    IRState *bc;
+
+    for (bc = this; bc; bc = bc->prev)
+    {
+	if (bc->defaultBlock)
+	    return bc->defaultBlock;
+    }
+    return NULL;
+}
+
+FuncDeclaration *IRState::getFunc()
+{
+    IRState *bc;
+
+    for (bc = this; bc->prev; bc = bc->prev)
+    {
+    }
+    return (FuncDeclaration *)(bc->symbol);
+}
+
+